diff --git a/.augmentignore b/.augmentignore new file mode 100644 index 000000000..95cce79ef --- /dev/null +++ b/.augmentignore @@ -0,0 +1,2 @@ +*_templ.go +*.html \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 350f34564..f4ea16039 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,91 +1,107 @@ { "cSpell.words": [ - "accs", - "alessio", - "apikey", - "autorestart", - "Bavail", - "bitnami", - "Bitnami", - "Bsize", - "certbot", - "clientid", - "cpuacct", - "CQRS", - "customfield", - "customfields", - "dearmor", - "Dockerfiles", - "github", - "godoc", - "godotenv", - "goinfinite", - "gopsutil", - "gorm", - "grpcs", - "gsub", - "Hostnames", - "htmx", - "infinite", - "installables", - "Installables", - "ioncube", - "joho", - "keyrings", - "labstack", - "litespeed", - "lsadm", - "lsapi", - "Lsapi", - "lsphp", - "lsws", - "lswsctrl", - "mariadbd", - "minideb", - "mysql", - "mysqladmin", - "mysqld", - "nginx", - "nogroup", - "openlitespeed", - "openssl", - "pecl", - "percona", - "perconadb", - "pids", - "Pkgs", - "pkill", - "podman", - "postgre", - "ppid", - "primarykey", - "privs", - "Procs", - "publicsuffix", - "responsetype", - "serviceid", - "shellescape", - "shirou", - "Skippable", - "sqlite", - "strcase", - "supervisorctl", - "supervisord", - "svcs", - "Svcs", - "swaggo", - "templ", - "Totalram", - "userdel", - "usermod", - "uuid", - "vhconf", - "vhost", - "vhosts", - "virtualhost", - "webserver", - "zerolog", - "Zerolog" -], - "editor.formatOnSave": true + "accs", + "alessio", + "apikey", + "autorestart", + "Bavail", + "bitnami", + "Bitnami", + "Bsize", + "certbot", + "clientid", + "cpuacct", + "CQRS", + "customfield", + "customfields", + "Deactivable", + "dearmor", + "Dockerfiles", + "github", + "godoc", + "godotenv", + "goinfinite", + "gopsutil", + "gorm", + "grpcs", + "gsub", + "Hostnames", + "htmx", + "infinite", + "installables", + "Installables", + "ioncube", + "Itoa", + "joho", + "keyrings", + "labstack", + "litespeed", + "lsadm", + "lsapi", + "Lsapi", + "lsphp", + "lsws", + "lswsctrl", + "mariadbd", + "minideb", + "mysql", + "mysqladmin", + "mysqld", + "nginx", + "nogroup", + "openlitespeed", + "openssl", + "pecl", + "percona", + "perconadb", + "pids", + "Pkgs", + "pkill", + "podman", + "postgre", + "ppid", + "primarykey", + "privs", + "Procs", + "Ptrs", + "publicsuffix", + "responsetype", + "serviceid", + "shellescape", + "shirou", + "Skippable", + "sqlite", + "ssls", + "Ssls", + "strcase", + "strconv", + "supervisorctl", + "supervisord", + "svcs", + "Svcs", + "swaggo", + "templ", + "Totalram", + "userdel", + "usermod", + "uuid", + "vhconf", + "vhost", + "vhosts", + "virtualhost", + "webserver", + "zeroable", + "zerolog", + "Zerolog" + ], + "tailwindCSS.includeLanguages": { + "templ": "html" + }, + "editor.formatOnSave": true, + "[templ]": { + "editor.defaultFormatter": "a-h.templ" + }, + "emmet.includeLanguages": { + "templ": "html" + } } diff --git a/CHANGELOG.md b/CHANGELOG.md index 002b843e2..8a7218ed8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,89 @@ # Changelog ```log -0.1.7 - 2024/X/X +0.2.5 - 2025/06/27 +refactor(ui): sidebar +refactor(ui): merge page and presenters +refactor(ui): move state.js to individual embeds +feat(ui): add cloak and loading overlay (from goinfinite/ui) +fix(improvement): lazy load marketplace and services avatar images +fix(bug): database service is creating a default mapping [#261] + +0.2.4 - 2025/05/08 +feat!: add pagination to database read ops +feat: mappings security rules +feat: add should upgrade insecure requests to mappings +feat: add default index html page +fix: allow multi instances of multi nature services +fix: gorm sqlite memory file spec +fix: typo on vhost type select input +fix: hash gen on ssl ownership check +chore: install (and use) ui and tk projects + +0.2.3 - 2025/04/08 +refactor: replace BadgerDB with SQLite in-memory +fix(critical): x-bind misplacement on InputClientSide component +fix: remove / from marketplace temp dir +fix: check type of vhost on aliasesHostname ToEntity() +tests: add tests for transientDbSvc + +0.2.2 - 2025/04/04 +refactor: ssl infra implementation +refactor: ssl watchdog after ssl infra refactor +feat(front): add visual clues on ssl list pages +feat(front): add ca bundle field on import ssl modal +feat: issue valid SSL endpoint and UI button +fix(front): swap self-signed ssl bug +fix: skip aliases on ssl watchdog +fix: vhosts key on ssl create pair +fix: add error enums to auth query +fix: add head routes to public api routes +fix: disable default super admin for first account +fix: remove altNames from create ssl pair +fix: stop uninstall of databases on mktplace uninstall +fix: only remove services without mappings on mktplace uninstall +fix: improve first setup with presentation helper +docs: improve project readme + +0.2.1 - 2025/04/01 +refactor: vhost and mapping infra implementation +refactor: ssl watchdog +refactor: delete service mappings +feat: add mapping hostname and path to service mapping auto create +feat: add support for wildcard vhosts +feat: add custom response code to url mappings +feat: add marketplace item reference to mappings +fix: aliases addition replacing parent ssl +fix: remove mappings and ssl files when vhost is deleted +fix: move vhost aliases to parent row +fix: remove vhost removal from ssl pair + +0.2.0 - 2025/03/25 +refactor(front): file manager with HTMX+Alpine.js +fix: missing service name on mapping targetValue input + +0.1.9 - 2025/03/10 +fix(front): file manager permissions and account sudoers +feat: add WorkingDir property to CreateInstallableService DTO + +0.1.8 - 2025/01/24 +refactor(front): overview page with HTMX+Alpine.js +feat: add time to the overview chart tooltip +feat: allow for o11y overview without resource usage +fix: file manager download files bug +fix: update service table on events +fix: fix start/stop button colors +fix: cron routing from previous ui +fix: replace the storage usage area chart with a line chart +fix: remove unixFile SRI and use record details instead +fix: reorder the OS system info tags + +0.1.7 - 2025/01/06 fix(front): install params section on marketplace deploy refactor(front): login page with HTMX+Alpine.js feat: /setup/ (api and front) -0.1.6 - 2024/X/X +0.1.6 - 2024/12/23 refactor(front): crons page with HTMX+Alpine.js 0.1.5 - 2024/12/06 diff --git a/Containerfile b/Containerfile index 32b49ffcd..ac3019066 100644 --- a/Containerfile +++ b/Containerfile @@ -3,20 +3,21 @@ FROM docker.io/bitnami/minideb:bullseye-amd64 WORKDIR /infinite RUN apt-get update && apt-get upgrade -y \ - && install_packages bind9-dnsutils build-essential ca-certificates certbot cron \ - curl debian-archive-keyring git gnupg2 haveged lsb-release procps rsync supervisor \ - tar unzip vim wget zip unattended-upgrades + && install_packages bind9-dnsutils build-essential ca-certificates certbot cron \ + curl debian-archive-keyring git gnupg2 haveged lsb-release procps rsync supervisor \ + tar unzip vim wget zip unattended-upgrades RUN curl -skL "https://nginx.org/keys/nginx_signing.key" | gpg --dearmor >"/usr/share/keyrings/nginx-archive-keyring.gpg" \ - && echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $(lsb_release -cs) nginx" >"/etc/apt/sources.list.d/nginx.list" \ - && install_packages nginx \ - && mkdir -p /app/logs/cron /app/logs/nginx /app/conf/pki /app/html \ - && chown -R nobody:nogroup /app + && echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $(lsb_release -cs) nginx" >"/etc/apt/sources.list.d/nginx.list" \ + && install_packages nginx \ + && mkdir -p /app/logs/cron /app/logs/nginx /app/conf/pki /app/.trash \ + && mkdir -m 777 -p /app/html \ + && chown -R nobody:nogroup /app RUN curl -skL "https://mise.run" | sh \ - && mv /root/.local/bin/mise /usr/bin/mise \ - && chmod +x /usr/bin/mise \ - && echo 'eval "$(/usr/bin/mise activate bash)"' >>/etc/profile + && mv /root/.local/bin/mise /usr/bin/mise \ + && chmod +x /usr/bin/mise \ + && echo 'eval "$(/usr/bin/mise activate bash)"' >>/etc/profile COPY /container/nginx/root/* /etc/nginx/ @@ -27,7 +28,7 @@ COPY /container/supervisord.conf /infinite/supervisord.conf COPY /bin/os /infinite/os RUN chmod +x /infinite/os \ - && ln -s /infinite/os /usr/bin/os + && ln -s /infinite/os /usr/bin/os EXPOSE 22/tcp 80/tcp 443/tcp 3306/tcp 5432/tcp 6379/tcp 1618/tcp diff --git a/Containerfile.test b/Containerfile.test index 769891b40..7d0daf25f 100644 --- a/Containerfile.test +++ b/Containerfile.test @@ -3,20 +3,21 @@ FROM docker.io/bitnami/minideb:bullseye-amd64 WORKDIR /infinite RUN apt-get update && apt-get upgrade -y \ - && install_packages bind9-dnsutils build-essential ca-certificates certbot cron \ - curl debian-archive-keyring git gnupg2 haveged lsb-release procps rsync supervisor \ - tar unzip vim wget zip + && install_packages bind9-dnsutils build-essential ca-certificates certbot cron \ + curl debian-archive-keyring git gnupg2 haveged lsb-release procps rsync supervisor \ + tar unzip vim wget zip RUN curl -skL "https://nginx.org/keys/nginx_signing.key" | gpg --dearmor >"/usr/share/keyrings/nginx-archive-keyring.gpg" \ - && echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $(lsb_release -cs) nginx" >"/etc/apt/sources.list.d/nginx.list" \ - && install_packages nginx \ - && mkdir -p /app/logs/cron /app/logs/nginx /app/conf/pki /app/html \ - && chown -R nobody:nogroup /app + && echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $(lsb_release -cs) nginx" >"/etc/apt/sources.list.d/nginx.list" \ + && install_packages nginx \ + && mkdir -p /app/logs/cron /app/logs/nginx /app/conf/pki \ + && mkdir -m 777 -p /app/html \ + && chown -R nobody:nogroup /app RUN curl -skL "https://mise.run" | sh \ - && mv /root/.local/bin/mise /usr/bin/mise \ - && chmod +x /usr/bin/mise \ - && echo 'eval "$(/usr/bin/mise activate bash)"' >>/etc/profile + && mv /root/.local/bin/mise /usr/bin/mise \ + && chmod +x /usr/bin/mise \ + && echo 'eval "$(/usr/bin/mise activate bash)"' >>/etc/profile COPY . . @@ -27,11 +28,11 @@ COPY --chown=nobody:nogroup /container/nginx/user/ /app/conf/nginx/ COPY /container/supervisord.conf /infinite/supervisord.conf RUN wget -qO go.tar.gz "https://go.dev/dl/go1.22.5.linux-amd64.tar.gz" \ - && tar -C /usr/local -xzf go.tar.gz + && tar -C /usr/local -xzf go.tar.gz ENV PATH="/usr/local/go/bin:${PATH}" RUN go mod download \ - && go build -o os + && go build -o os ENTRYPOINT ["go", "test", "-v", "./..."] diff --git a/README.md b/README.md index 2afa4a342..a06debb94 100644 --- a/README.md +++ b/README.md @@ -1,165 +1,132 @@ -``` -This project is still under active development (alpha stage). -Expect bugs early on. Create issues so they can be fixed. -``` +# [Infinite OS](https://goinfinite.net/os/) · [![Roadmap](https://img.shields.io/badge/roadmap-014737)](https://github.com/orgs/goinfinite/projects/9) [![Demo](https://img.shields.io/badge/read--only_demo-233876)](https://os.demo.goinfinite.net:1618/) [![/r/goinfinite](https://img.shields.io/badge/%2Fr%2Fgoinfinite-FF4500?logo=reddit&logoColor=ffffff)](https://www.reddit.com/r/goinfinite/) [![Discussions](https://img.shields.io/badge/discussions-751A3D?logo=github)](https://github.com/orgs/goinfinite/discussions) [![Report Card](https://img.shields.io/badge/report-A%2B-brightgreen)](https://goreportcard.com/report/github.com/goinfinite/os) [![License](https://img.shields.io/badge/license-EPL-blue.svg)](https://github.com/goinfinite/os/blob/main/LICENSE.md) -# [Infinite OS](https://goinfinite.net/os/) · [![Roadmap](https://img.shields.io/badge/roadmap-014737)](https://github.com/orgs/goinfinite/projects/9) [![Demo](https://img.shields.io/badge/read--only_demo-233876)](https://os.demo.goinfinite.net:1618/_/) [![/r/goinfinite](https://img.shields.io/badge/%2Fr%2Fgoinfinite-FF4500?logo=reddit&logoColor=ffffff)](https://www.reddit.com/r/goinfinite/) [![Discussions](https://img.shields.io/badge/discussions-751A3D?logo=github)](https://github.com/orgs/goinfinite/discussions) [![Report Card](https://img.shields.io/badge/report-A%2B-brightgreen)](https://goreportcard.com/report/github.com/goinfinite/os) [![License](https://img.shields.io/badge/license-EPL-blue.svg)](https://github.com/goinfinite/os/blob/main/LICENSE.md) +Infinite OS is the simplest way to deploy containerized applications. Full stop. Even if containers sound like rocket science to you, you'll be launching apps with just a few clicks. 🚀 -Infinite OS is a container operating system designed to allow you to deploy applications knowing little to nothing about containers. It comes with a user-friendly dashboard, REST API, and CLI for seamless container management. +![Infinite OS Screenshots](docs/os-screenshots.webp) -A read-only demo of the dashboard is available at [https://os.demo.goinfinite.net:1618/\_/](https://os.demo.goinfinite.net:1618/_/). The default credentials are `demo` and `abc123`. +### What's This All About Then? -## Running +We've created something rather special - a "metamorphic" container image. Yes, we made up that term because **nothing else quite does what Infinite OS does**! -To run Infinite OS you just need a single command: +The traditional container dance goes: write Dockerfile, build image, run container, repeat until your coffee goes cold. Tedious, isn't it? -``` -docker run --rm --name myapp-container \ - --env 'PRIMARY_VHOST=myapp.net' \ - -p 8080:80 -p 8443:443 -p 1618:1618 \ - -it docker.io/goinfinite/os:latest -``` +With Infinite OS, **you can skip all that faff**. No Dockerfile wizardry required. Simply run our container image and then deploy your applications with minimal fuss with the web dashboard, CLI or REST API. Like a magic box. 🧞 -Then you'll be able to access the dashboard at `https://localhost:1618/_/` and the setup wizard will allow you to create a new account. Note that you may encounter an SSL warning due to the self-signed certificate, which you can ignore or replace with your own certificate later. +For the tech wizards among you - yes, you can still build your own custom Dockerfile images on top of Infinite OS with your preferred applications pre-installed. We're flexible like that. -Using the dashboard you can deploy applications with the Marketplace feature in just a few clicks. You can also use the CLI for deployments, such as: +### Plays Well With Others -``` -os mktplace install -s wp \ - -f 'adminUsername:admin' \ - -f 'adminPassword:abc123' \ - -f 'adminMailAddress:user@example.com' -``` - -In this example, the container ports 80, 443, and 1618 are mapped to host ports 8080, 8443, and 1618, respectively. If you are running multiple containers on the same host, consider using a reverse proxy to manage traffic or [Infinite Ez](https://github.com/goinfinite/ez), our free and easy-to-use self-hosted PaaS solution. +Infinite OS works flawlessly with any container orchestration tool that speaks OCI: Docker, Podman, Docker Swarm, Rancher, Kubernetes - the lot. -You can customize the container name, vhost, and host ports as needed. The `--rm` flag ensures the container is removed upon stopping. To retain the container, simply omit this flag. +Though if you fancy an even smoother experience, do check out our sibling project [Infinite Ez](https://github.com/goinfinite/ez) - a self-hosted PaaS solution that pairs perfectly with Infinite OS. Also free and refreshingly straightforward. -The API Swagger documentation is available at `https://localhost:1618/api/swagger/`. +### What Infinite OS Is -Infinite OS is compatible with Docker, Podman, Docker Swarm, Rancher, Kubernetes, Portainer, and any other tool that supports OCI-compliant containers. +- Your get-out-of-jail-free card for never writing another Dockerfile; +- A shape-shifting container that becomes what you need AFTER you run it; +- A lightweight web dashboard, CLI and REST API that sips resources (mere ~80MB RAM); +- A handy marketplace to quickly launch and manage apps, databases, etc. -## Development +### What Infinite OS Isn't -The public roadmap for Infinite OS is available [here](https://github.com/orgs/goinfinite/projects/9). You may create issues or pull requests to contribute to the project. +- A container engine itself (like Docker or Podman); +- A self-hosted PaaS solution (that's [Infinite Ez's](https://github.com/goinfinite/ez) job); +- A replacement for Docker, Podman, Kubernetes or any container orchestration tool. -In this repository you'll find the REST API and CLI code plus the dashboard assets. The API and CLI uses Clean Architecture, DDD, TDD, CQRS, Object Calisthenics, etc. Understand how these concepts works before proceeding is advised. +## Online Demo -### Building +A read-only demo of the dashboard is available at [https://os.demo.goinfinite.net:1618/](https://os.demo.goinfinite.net:1618/). The default credentials are `demo` (user) and `abc123` (password). You can use this demo to explore the dashboard and see how it works. Please note that this is a read-only demo, so you won't be able to make any changes or deploy any applications. -#### Simple Build +## Features -To build the project, run the command below. It takes two minutes to build the project at first. After that, it takes less than 10 seconds to build. - -``` -podman build -t os:latest . -``` +- **Web Dashboard**: A slick web interface where you can manage your environment and deploy apps without breaking a sweat; +- **CLI and REST API**: Everything you can do with clicks, you can do with commands or calls - choose your weapon! +- **Services Catalog**: Runtimes, programming languages, databases - all deployed with fewer clicks than ordering a takeaway; +- **Marketplace Catalog**: Applications, frameworks and entire tech stacks just waiting for you to press the big friendly button; +- **Cron Jobs**: Schedule tasks to run whenever you fancy - while you're sleeping, on tea breaks, or precisely at 3:42 PM on Thursdays; +- **File Manager**: Built-in interface to poke around your container's files and folders without needing to be a terminal ninja; +- **Automatic SSL**: Let's Encrypt certificates that sort themselves out - because life's too short to manually configure SSL; +- **Automatic Mappings**: Your marketplace apps magically appear at exactly the right path and domain name - no configuration gymnastics required; +- **Mapping Security Rules**: Protect your applications with custom rate, bandwidth and connection limits; +- **NGINX baked-in**: NGINX comes pre-configured and ready to rock with both the dashboard and your applications; +- **Runtime Settings**: Tweak PHP versions, NGINX configurations and more - all the knobs and dials you need; +- **User Management**: Create accounts for the whole team (or just yourself with different hats on) and manage them all in one place. -To run the project you may use the following command: +## Get Started ``` -podman run --name os --env 'PRIMARY_VHOST=goinfinite.local' --rm -p 1618:1618 -it os:latest +This project is still under active development (beta stage). +Expect bugs early on. Create issues so they can be fixed. ``` -When testing, consider publishing port 80 and 443 to the host so that you don't need to use a reverse proxy. You should also consider using `--env 'LOG_LEVEL=debug'` to increase the log verbosity. - -#### Development Build - -When developing the project, you may want to use a script to automate the build process. The `dev-build.sh` script is available in the root of the project and it will take care of all the steps needed to build and run the container. - -To run the script you can simply use `bash dev-build.sh` (bash may be replaced by zsh or similar). By default, the script will expose the port 1618 to the host which is used by the API and the dashboard. - -- If you pass the `http` argument, it will also expose the ports 80 and 443 to the host; -- If you pass the `ols` argument, it will expose port 7080 (used by OpenLiteSpeed admin); -- If you pass the `no-cache` argument, it will remove the image cache and rebuild the image from scratch; +### Deploying the Container -The script will also create a `dev` account with the password `123456` so you can access the dashboard. +Infinite OS is designed to be flexible, so you can run it with your preferred graphical user interface (GUI) or command line interface (CLI). This includes popular tools like Docker Desktop, Podman Desktop, Rancher Desktop, Orbstack, Portainer, Kubernetes, and any other OCI-compliant container manager. -When you need to stop the container, just CTRL+C to stop and remove it. If you don't want to remove it, just ditch the `--rm` flag from the `podman run` command in the script. - -If you look closely at the script, you'll see that it mounts the project's `bin` directory to the container `/infinite/bin` path. This is done to allow the container to access the binary file generated by Air on the host. The script then replace the binary file that comes with the container with the one on the `/bin` directory. - -With this approach you don't need to rebuild the container every time you change the code. Although sometimes you may want to restart the container to apply some changes, specially when changing the dependencies or system configurations. In this case, just hit CTRL+C to stop the container and run the script again. - -**Notes:** - -1. You must run the script from the project's root directory; -2. Until Echo v4.13.0 is released, you'll need to refresh the browser page during development to see the changes in the dashboard as we're not able to use the `DEV_MODE` auto refresh websocket trick for now. To understand how this trick used to work, check the UI router and main layout files. - -### Unit Testing - -Infinite OS commands can harm your system, so it's important to run the unit tests in a proper container: +#### Command Line Interface (CLI) Example ``` -podman build -t os-unit-test:latest -f Containerfile.test . -podman run --rm -it os-unit-test:latest +docker run --rm --name 'myapp.net' \ + --env 'PRIMARY_VHOST=myapp.net' \ + -p 8080:80 -p 8443:443 -p 1618:1618 \ + -it docker.io/goinfinite/os:latest ``` -Make sure you have a `.env` file in the root of the git directory before running the tests. +#### Graphical User Interfaces (GUI) Example -Some tests can run in your local machine, although it's not recommended. However, if you to give it a go, make sure to create the `/infinite/` directory before running the tests: - -``` -sudo mkdir /infinite -sudo chown $(whoami):$(whoami) /infinite -``` +If you prefer a GUI, the process is similar across most tools: -### Dev Utils +1. Define the container image URL as `docker.io/goinfinite/os:latest`; +2. Define the container name to your domain name, e.g. `myapp.net`; +3. Set the environment variable `PRIMARY_VHOST` also to your domain name, e.g. `myapp.net`; +4. The only necessary port to publish is 1618, which is the API and dashboard port. The other ports are optional and only needed if you want to access the applications directly from the host. Common used ports are 8080 for the container HTTP port (80) and 8443 for the container HTTPS port (443); +5. Start the container and you're good to go! -The `src/devUtils` folder is not a Clean Architecture layer, it's there to help you during development. You can add any file you want there, but it's not recommended to add any file that is not related to development since the code there is meant to be ignored by the build process. +### Accessing the Dashboard -For instance there you'll find a `testHelpers.go` file that is used to read the `.env` during tests. +Once the container is up and running, you can access the dashboard with your web browser. The dashboard is available at [`https://localhost:1618/`](https://localhost:1618/) (or the IP address of your host machine if you're not using localhost). -### Web UIs +The first time you log in, you'll be prompted to create an admin account via the setup wizard. This one-time process allows you to create an admin account for managing your applications. -This project has two web UIs, the previous Vue.js frontend and the new [Templ](https://templ.guide/) + [Alpine.js](https://alpinejs.dev/) + [HTMX](https://htmx.org/docs/) frontend. The Vue.js frontend is deprecated and will be removed in the future. It's available at `/_/` and the [Templ](https://templ.guide/) + [Alpine.js](https://alpinejs.dev/) + [HTMX](https://htmx.org/docs/) frontend is available at `/`. +The dashboard is where the magic happens. You can deploy applications with just a few clicks using the Marketplace feature. Plus, every action you take in the dashboard has a corresponding CLI and REST API command, making it easy to automate your deployments and manage your applications programmatically. -The new frontend based on the [Templ](https://templ.guide/) + [Alpine.js](https://alpinejs.dev/) + [HTMX](https://htmx.org/docs/) combo mentioned was developed as a proof of concept to create an interface without needing to leave Go. To understand the entire conceptual and theoretical foundation behind using these technologies to create a new architecture, [access this article](https://ntorga.com/full-stack-go-app-with-htmx-and-alpinejs/). However, to grasp the practical basis of how to apply this new architecture, [refer to the proof of concept](https://github.com/ntorga/clean-ddd-full-stack-go-poc) used to develop it. - -For the interface code to be read and rendered by Go, we need to convert all `.templ` files into `.go` files. To do this, run the following command at the root of the application: +For example, to deploy a WordPress application, you can use the following CLI command inside the container: ``` -templ generate -path src/presentation/api +os mktplace install -s wp \ + -f 'adminUsername:admin' \ + -f 'adminPassword:abc123' \ + -f 'adminMailAddress:user@example.com' ``` -It is important that this is done before using Air to create the binary; otherwise, the Web UI will not be embedded, and you will not be able to use it. +## Support -**NOTE:** If you are using the `dev-build.sh` script, you don't need to run the `templ generate` command (or Air for that matter) since the script will take care of everything for you. +Need help or have questions? We got you covered! -### VSCode Extensions +Open an issue on our [GitHub repository](https://github.com/goinfinite/os), start a discussion on [GitHub discussions](https://github.com/orgs/goinfinite/discussions) or [Reddit](https://www.reddit.com/r/goinfinite/), or hear me out - consider our cloud offerings at [goinfinite.net](https://goinfinite.net)! ♥️ -The following extensions are highly encouraged to be used during development: +## Sponsorship -``` -EditorConfig.EditorConfig -GitHub.copilot -GitHub.vscode-pull-request-github -esbenp.prettier-vscode -foxundermoon.shell-format -golang.go -hbenl.vscode-test-explorer -ms-vscode.test-adapter-converter -redhat.vscode-yaml -streetsidesoftware.code-spell-checker -timonwong.shellcheck -``` +Your support means the world to us! If you find Infinite OS useful, please consider sponsoring us on [GitHub](https://github.com/sponsors/goinfinite) or choosing one of our [cloud offerings](https://goinfinite.net). Your contributions help us maintain and improve the project, ensuring its continued development and support. -## REST API +## Contributing -### Authentication +Ready to contribute to Infinite OS? Please refer to our [CONTRIBUTING.md](docs/CONTRIBUTING.md) file for more information on how to get involved. -The API accepts two types of tokens and uses the standard "Authorization: Bearer \" header: +## Roadmap -- **sessionToken**: is a JWT, used for dashboard access and generated with the account login credentials. The token contains the accountId, IP address and expiration date. It expires in 3 hours and only the IP address used on the token generation is allowed to use it. +The public roadmap is available at [GitHub Projects](https://github.com/orgs/goinfinite/projects/9). Before opening an issue, please discuss your feature requests with our community. We're open to suggestions and feedback, and we encourage you to share your ideas with us. -- **accountApiKey**: is a token meant for M2M communication. The token is a _AES-256-CTR-Encrypted-Base64-Encoded_ string, but only the SHA3-256 hash of the key is stored in the server. The accountId is retrieved during key decoding, thus you don't need to provide it. The token never expires, but the user can update it at any time. +For bug fixes, please open an issue with as much detail as possible, including steps to reproduce the issue, expected behavior, and any relevant logs or screenshots. This helps us address the problem more efficiently. -### OpenApi // Swagger +## License -To generate the swagger documentation, you must use the following command: +This project is licensed under the Eclipse Public License (EPL) version 2.0. See the [LICENSE.md](LICENSE.md) file for details. -``` -swag init -g src/presentation/api/api.go -o src/presentation/api/docs -``` +## Acknowledgements + +We're grateful to our contributors, supporters, and the open-source community for making Infinite OS possible. Special thanks to the maintainers of the various open-source libraries and tools that power our project. You can find a complete list of dependencies in our `go.mod` file and on the `Containerfile`. + +## Disclaimer -The annotations are in the controller files. The reference file can be found [here](https://github.com/swaggo/swag#attribute). +Infinite OS is still in the beta stage of development. While we strive to provide a stable and reliable product, please be aware that there may be bugs and issues. We appreciate your understanding and encourage you to report any problems you encounter, helping us improve the project. diff --git a/container/nginx/root/nginx.conf b/container/nginx/root/nginx.conf index 86440a6a4..40ccc5653 100644 --- a/container/nginx/root/nginx.conf +++ b/container/nginx/root/nginx.conf @@ -44,8 +44,11 @@ http { ssl_stapling on; ssl_stapling_verify on; - resolver 8.8.8.8 9.9.9.9 1.1.1.1 valid=60s ipv6=off; + resolver 8.8.8.8 1.1.1.1 185.228.169.9 valid=60s ipv6=off; resolver_timeout 2s; + + server_names_hash_bucket_size 128; include /app/conf/nginx/*.conf; + include /app/conf/nginx/mapping/security/*.global.conf; } diff --git a/container/nginx/root/std.conf b/container/nginx/root/std.conf index 8fc842b70..436d959ff 100644 --- a/container/nginx/root/std.conf +++ b/container/nginx/root/std.conf @@ -1,15 +1,22 @@ +# allow for SSL validation +location ^~ /.well-known/acme-challenge/ { + try_files $uri =404; +} + +# deny dotfiles access, except .well-known location ~ /\.(?!well-known) { deny all; } +# ignore logs for favicon and robots location = /favicon.ico { log_not_found off; } - location = /robots.txt { log_not_found off; } +# gzip configurations gzip on; gzip_vary on; gzip_proxied any; diff --git a/container/nginx/user/index.html b/container/nginx/user/index.html new file mode 100644 index 000000000..703355418 --- /dev/null +++ b/container/nginx/user/index.html @@ -0,0 +1,46 @@ + + + + + Welcome to Infinite OS! + + + + + + + +

Welcome to Infinite OS!

+

If you see this page, Infinite OS was successfully deployed and is + working.

+ +

+ For documentation and community support, please refer to the project's GitHub repository. +

+

+ Commercial support is available at goinfinite.net. +

+ +

Thank you for using Infinite OS.

+ + + \ No newline at end of file diff --git a/dev-build.sh b/dev-build.sh index 56a1a9ac8..ca75e6ca1 100644 --- a/dev-build.sh +++ b/dev-build.sh @@ -7,6 +7,9 @@ http) sudo sysctl net.ipv4.ip_unprivileged_port_start=80 ports+=(-p 80:80 -p 443:443) ;; +http-unpriv) + ports+=(-p 8080:80 -p 8443:443) + ;; ols) ports+=(-p 7080:7080) ;; @@ -36,7 +39,7 @@ echo "=> Replacing the standard binary with the development binary..." podman exec os /bin/bash -c 'rm -f os && ln -s bin/os os && supervisorctl restart os-api' echo "=> Creating a development account..." -podman exec os /bin/bash -c 'os account create -u dev -p 123456' +podman exec os /bin/bash -c 'os account create -u dev -p 123456 --is-super-admin false' if [[ ${1} == "ssh" ]]; then echo "=> Installing OpenSSH..." diff --git a/docs/AGENTS.md b/docs/AGENTS.md new file mode 100644 index 000000000..bdb4002e4 --- /dev/null +++ b/docs/AGENTS.md @@ -0,0 +1,34 @@ +# General Rules + +# @source https://github.com/goinfinite/tk/blob/main/docs/AGENTS.md + +- NEVER create new features that weren't explicitly requested, even if they seem like useful additions. +- Ambiguity SHOULD always be questioned as it generates doubts about the intention of the developer. +- Value objects, infrastructure and use cases (with complex logic) MUST have unit tests. +- Unit tests SHOULD use testCases as much as possible. + +# Code Style Rules + +- Avoid comments unless strictly necessary. +- Method names should focus on the conceptual purpose rather than implementation details. +- NEVER use 'else' statements unless it's the UI layer. +- NEVER use single letter variable names. Use descriptive names, but avoid long names. +- When naming variables, try to choose names that convey the intention or purpose rather than just describing what the variable stores. +- Use purposeful named return values whenever the method returns multiple values. +- Use Ptr suffix on variables when parsing optional fields (usually pointers on DTOs). +- Prefer value objects as custom primitive types rather than structs when possible. +- Boolean variables should start with "Is", "Should", "Has" etc prefixes. +- Use PascalCase format for the entire error message whenever possible. +- Prefer "Fail", "Error", "Invalid" suffixes instead of "FailedTo", "Cannot", "UnableTo" prefixes. +- Prefer "Read" prefix or "Factory" suffix instead of "Get" suffix (depending on context). +- Prefer suffixes instead of prefixes for struct and method names to preserve alphabetical order context. +- Avoid redundant prefixes in struct field names when the context is already clear from the struct name or surrounding code. +- Struct fields should be ordered by importance, followed by alphabetical order. +- Struct required fields should be placed before optional (pointer) fields. + +# Go(lang) Specific Rules + +- Prefer using slog.Error or slog.Debug instead of log.Printf depending on the gravity of the log. +- Value objects accept interface{}/any directly without the need for pre-assertion. +- When using struct constructors (New), use multiple arguments per line. +- Sequential method parameters of the same type should be combined together on the same line. diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 000000000..9a0657a75 --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,66 @@ +# Contributing + +Thank you for your interest in contributing to our project! This guide will help you understand how to effectively contribute to this repository. + +## Getting Started + +Before submitting any changes, please discuss your proposed modifications with the repository maintainers by opening an issue. This step is crucial to ensure that your contributions align with the project's goals and to avoid duplicating efforts. + +We value meaningful contributions that substantively improve the project. Please focus on quality over quantity - contributions should address real needs or enhancement opportunities rather than superficial changes. **Proposals that appear primarily aimed at gaining contributor status without adding significant value will be declined**. + +For technical assistance, please refer to the [Development](/docs/DEVELOPMENT.md) documentation. It contains information on setting up your development environment, running tests, and other essential details. + +For security-related issues, please refer to our [Security Policy](/docs/SECURITY.md) for guidelines on reporting vulnerabilities and security concerns. + +## Code of Conduct + +Our community values respectful and inclusive collaboration. We strive to make participation a positive experience for everyone, regardless of background, identity, or experience level. + +As a contributor, we ask that you: + +- Treat others with respect and kindness; +- Show empathy in your interactions; +- Be receptive to constructive feedback; +- Take responsibility for mistakes and use them as learning opportunities. + +Unacceptable behaviors may include, but are not limited to: + +- Harassment, bullying, or intimidation; +- Discriminatory or offensive comments; +- Unwelcome attention or remarks; +- Sharing private information without permission. + +If you witness or experience inappropriate behavior, please contact our community leaders at legal _at_ goinfinite.net. All reports will be reviewed and addressed appropriately. + +Enforcements actions from correction to permanent bans will be taken depending on the severity of the violation. + +## Licensing + +This project is released under the Eclipse Public License (EPL) version 2.0. By contributing, you agree that your submissions will be governed by this license. This arrangement protects the open source nature of the project. + +### Contributor Agreement + +Contributors must sign the Fiduciary Contributor License Agreement (FLA) before submitting code. This legal agreement transfers copyright of contributions to a designated fiduciary who manages these rights for the project's benefit. + +The FLA serves to: + +- Maintain the software's free and open source status; +- Shield the project from potential copyright complications; +- Include a safety mechanism: if the fiduciary violates Free Software principles, rights return to the original contributors. + +For additional information about the FLA, please refer to the [FLA FAQ](https://fsfe.org/activities/fla/fla.en.html). + +## Pull Request Guidelines + +When submitting pull requests, please follow these steps: + +- Remove any build or installation dependencies before finalizing your build; +- Document interface changes in the README.md, including new environment variables, ports, file locations, and container parameters; +- Update version numbers according to [SemVer](http://semver.org/) conventions in relevant files (examples, CHANGELOG.md, api.go etc); +- Add unit tests for any new features or bug fixes, specially for infrastructure, value objects and any entities or use cases that contains enough non-trivial logic; +- Ensure all tests pass before submitting your pull request; +- Adhere to every Clean Code Rules described at [ntorga's article](https://ntorga.com/the-clean-coder-golden-rules/); +- Follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification for every commit message; +- Obtain approval from two developers before merging. If you lack merge permissions, the second reviewer can complete the merge for you; + +By following these guidelines, you help maintain project quality and consistency while making contributions valuable to the community. diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md new file mode 100644 index 000000000..ccf9239fb --- /dev/null +++ b/docs/DEVELOPMENT.md @@ -0,0 +1,138 @@ +# Development + +Before contributing to the project, please read the [Contributing](/docs/CONTRIBUTING.md) document. It contains important information about the project's guidelines and expectations. + +The public roadmap for Infinite OS is available [here](https://github.com/orgs/goinfinite/projects/9). You may create issues or pull requests to contribute to the project. + +This project uses Clean Architecture, DDD, TDD, CQRS, Object Calisthenics, etc. Understand how these concepts works before proceeding is advised. + +## Building + +### Simple Build + +To build the project, run the command below. It takes two minutes to build the project at first. After that, it takes less than 10 seconds to build. + +``` +podman build -t os:latest . +``` + +To run the project you may use the following command: + +``` +podman run --name os --env 'PRIMARY_VHOST=goinfinite.local' --rm -p 1618:1618 -it os:latest +``` + +When testing, consider publishing port 80 and 443 to the host so that you don't need to use a reverse proxy. You should also consider using `--env 'LOG_LEVEL=debug'` to increase the log verbosity. + +## Development Build + +When developing the project, you may want to use a script to automate the build process. The `dev-build.sh` script is available in the root of the project and it will take care of all the steps needed to build and run the container. + +To run the script you can simply use `bash dev-build.sh` (bash may be replaced by zsh or similar). By default, the script will expose the port 1618 to the host which is used by the API and the dashboard. + +- If you pass the `http` argument, it will also expose the ports 80 and 443 to the host; +- If you pass the `ols` argument, it will expose port 7080 (used by OpenLiteSpeed admin); +- If you pass the `no-cache` argument, it will remove the image cache and rebuild the image from scratch; + +The script will also create a `dev` account with the password `123456` so you can access the dashboard. + +When you need to stop the container, just CTRL+C to stop and remove it. If you don't want to remove it, just ditch the `--rm` flag from the `podman run` command in the script. + +If you look closely at the script, you'll see that it mounts the project's `bin` directory to the container `/infinite/bin` path. This is done to allow the container to access the binary file generated by Air on the host. The script then replace the binary file that comes with the container with the one on the `/bin` directory. + +With this approach you don't need to rebuild the container every time you change the code. Although sometimes you may want to restart the container to apply some changes, specially when changing the dependencies or system configurations. In this case, just hit CTRL+C to stop the container and run the script again. + +**Notes:** + +1. You must run the script from the project's root directory; +2. Until Echo v4.13.0 is released, you'll need to refresh the browser page during development to see the changes in the dashboard as we're not able to use the `DEV_MODE` auto refresh websocket trick for now. To understand how this trick used to work, check the UI router and main layout files. + +## Unit Testing + +Infinite OS commands can harm your system, so it's important to run the unit tests in a proper container: + +``` +podman build -t os-unit-test:latest -f Containerfile.test . +podman run --rm -it os-unit-test:latest +``` + +Make sure you have a `.env` file in the root of the git directory before running the tests. + +Some tests can run in your local machine, although it's not recommended. However, if you to give it a go, make sure to create the `/infinite/` directory before running the tests: + +``` +sudo mkdir /infinite +sudo chown $(whoami):$(whoami) /infinite +``` + +## Web UIs + +This project web UI is based on a combo [Templ](https://templ.guide/) + [Alpine.js](https://alpinejs.dev/) + [HTMX](https://htmx.org/docs/). + +To understand the entire conceptual and theoretical foundation behind using these technologies to create a new frontend architecture, [access this article](https://ntorga.com/full-stack-go-app-with-htmx-and-alpinejs/). However, to grasp the practical basis of how to apply this new architecture, [refer to the proof of concept](https://github.com/ntorga/clean-ddd-full-stack-go-poc) used to develop it. + +For the interface code to be read and rendered by Go, we need to convert all `.templ` files into `.go` files. To do this, run the following command at the root of the application: + +``` +templ generate -path src/presentation/api +``` + +It is important that this is done before using Air to create the binary; otherwise, the Web UI will not be embedded, and you will not be able to use it. + +**NOTE:** If you are using the `dev-build.sh` script, you don't need to run the `templ generate` command (or Air for that matter) since the script will take care of everything for you. + +## Marketplace and Services Catalog + +The marketplace and services catalog are not part of this project. You can find their repositories at [goinfinite/os-services](https://github.com/goinfinite/os-services) and [goinfinite/os-marketplace](https://github.com/goinfinite/os-marketplace). Both are managed by Infinite DevOps team directly and their items manifests are based on JSON and YAML files. Read the instructions in their respective repositories to understand how to use, extend and contribute to them. + +## VSCode Extensions + +The following extensions are highly encouraged to be used during development: + +``` +a-h.templ +Augment.vscode-augment +bradlc.vscode-tailwindcss +EditorConfig.EditorConfig +GitHub.vscode-pull-request-github +esbenp.prettier-vscode +foxundermoon.shell-format +golang.go +hbenl.vscode-test-explorer +ms-vscode.test-adapter-converter +redhat.vscode-yaml +streetsidesoftware.code-spell-checker +timonwong.shellcheck +Trapfether.tailwind-raw-reorder +yy0931.vscode-sqlite3-editor +``` + +## REST API + +### Authentication + +The API accepts two types of tokens and uses the standard "Authorization: Bearer \" header: + +- **sessionToken**: is a JWT, used for dashboard access and generated with the account login credentials. The token contains the accountId, IP address and expiration date. It expires in 3 hours and only the IP address used on the token generation is allowed to use it. + +- **accountApiKey**: is a token meant for M2M communication. The token is a _AES-256-CTR-Encrypted-Base64-Encoded_ string, but only the SHA3-256 hash of the key is stored in the server. The accountId is retrieved during key decoding, thus you don't need to provide it. The token never expires, but the user can update it at any time. + +### OpenApi // Swagger + +Do not edit the files at `src/presentation/api/docs` directly. To generate the swagger documentation, you MUST use the following command: + +``` +swag init --pdl 3 -g src/presentation/api/api.go -o src/presentation/api/docs +``` + +The annotations are in the controller files. The reference file can be found [here](https://github.com/swaggo/swag#attribute). + +The `--pdl 3` flag is used to gather external components from goinfinite/tk and goinfinite/ui packages. + +When the project is running, you can access the documentation at [`https://localhost:1618/api/swagger/`](https://localhost:1618/api/swagger/) (or the IP address of your host machine if you're not using localhost). + +## Dev Utils + +The `src/devUtils` folder is not a Clean Architecture layer, it's there to help you during development. You can add any file you want there, but it's not recommended to add any file that is not related to development since the code there is meant to be ignored by the build process. + +For instance there you'll find a `testHelpers.go` file that is used to read the `.env` during tests. diff --git a/docs/SECURITY.md b/docs/SECURITY.md new file mode 100644 index 000000000..07f495f02 --- /dev/null +++ b/docs/SECURITY.md @@ -0,0 +1,37 @@ +# Security Policies + +## Supported Versions + +We provide security updates only for the latest version of Infinite OS. In case of a critical vulnerability, we will not backport the fix to the previous version. We recommend that you redeploy your application with the latest version available of Infinite OS. That way you will always have the latest security updates and features from Infinite OS and also the underlying operating system. + +## Reporting a Vulnerability + +We take the security at Infinite very seriously. If you believe you've found a security vulnerability, we encourage you to inform us responsibly. + +**Do not report security vulnerabilities through public GitHub issues.** + +Instead, please send an email to us at eng _at_ goinfinite.net (do not use this email for support questions). You should receive a response within 48 hours. If for some reason you do not, please follow up via email to ensure we received your original message. + +To help us better understand the nature and scope of the potential issue, please describe as much as you can about the vulnerability: + +- Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.); +- Full paths of source file(s) related to the manifestation of the issue; +- The location of the affected source code (tag/branch/commit or direct URL); +- Any special configuration required to reproduce the issue; +- Step-by-step instructions to reproduce the issue; +- Proof-of-concept or exploit code; +- Impact of the issue, including how an attacker might exploit the issue. + +This information will help us triage your report more quickly. + +Our security team will acknowledge your email within 48 hours, and you'll receive a more detailed response to your email within 48 hours indicating the next steps in handling your report. + +## Policy + +If you follow these guidelines when reporting an issue to us: + +- We will acknowledge your report & provide an estimated timeframe for a fix; +- We will notify you when the issue is resolved; +- We will not take legal action against or suspend or terminate your access to the project. + +We strive to keep all our users safe and will make our best effort to promptly fix any security issue. diff --git a/docs/os-screenshots.webp b/docs/os-screenshots.webp new file mode 100644 index 000000000..62889dd8c Binary files /dev/null and b/docs/os-screenshots.webp differ diff --git a/go.mod b/go.mod index 937cfc3fa..eba8eadfd 100644 --- a/go.mod +++ b/go.mod @@ -1,79 +1,72 @@ module github.com/goinfinite/os -go 1.23.3 +go 1.24.3 require ( + github.com/a-h/templ v0.3.865 github.com/alecthomas/chroma v0.10.0 - github.com/alessio/shellescape v1.4.2 - github.com/dgraph-io/badger/v4 v4.3.0 github.com/glebarez/sqlite v1.11.0 + github.com/goinfinite/tk v0.0.2 + github.com/goinfinite/ui v0.0.8 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.6.0 github.com/iancoleman/strcase v0.3.0 github.com/joho/godotenv v1.5.1 - github.com/labstack/echo/v4 v4.12.0 - github.com/rs/zerolog v1.33.0 - github.com/samber/slog-zerolog/v2 v2.7.0 + github.com/labstack/echo/v4 v4.13.4 + github.com/rs/zerolog v1.34.0 + github.com/samber/slog-zerolog/v2 v2.7.3 github.com/shirou/gopsutil v3.21.11+incompatible - github.com/spf13/cobra v1.8.1 + github.com/spf13/cobra v1.9.1 github.com/swaggo/echo-swagger v1.4.1 - github.com/swaggo/swag v1.16.3 - golang.org/x/crypto v0.28.0 - golang.org/x/exp v0.0.0-20241004190924-225e2abe05e6 - golang.org/x/net v0.30.0 - golang.org/x/term v0.25.0 - gopkg.in/yaml.v3 v3.0.1 - gorm.io/gorm v1.25.12 + github.com/swaggo/swag v1.16.4 + golang.org/x/crypto v0.38.0 + golang.org/x/net v0.40.0 + golang.org/x/term v0.32.0 + golang.org/x/text v0.25.0 + gorm.io/gorm v1.30.0 ) require ( github.com/KyleBanks/depth v1.2.1 // indirect - github.com/a-h/templ v0.2.778 - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/dgraph-io/ristretto v1.0.0 // indirect - github.com/dlclark/regexp2 v1.11.4 // indirect + github.com/dlclark/regexp2 v1.11.5 // indirect github.com/dustin/go-humanize v1.0.1 github.com/ghodss/yaml v1.0.0 // indirect github.com/glebarez/go-sqlite v1.22.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonpointer v0.21.1 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/spec v0.21.0 // indirect - github.com/go-openapi/swag v0.23.0 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.4 // indirect - github.com/google/flatbuffers v24.3.25+incompatible // indirect + github.com/go-openapi/swag v0.23.1 // indirect + github.com/goccy/go-yaml v1.17.1 // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/josharian/intern v1.0.0 // indirect - github.com/klauspost/compress v1.17.10 // indirect github.com/labstack/gommon v0.4.2 // indirect - github.com/mailru/easyjson v0.7.7 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mailru/easyjson v0.9.0 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/samber/lo v1.47.0 // indirect - github.com/samber/slog-common v0.17.1 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/swaggo/files/v2 v2.0.1 // indirect - github.com/tklauser/go-sysconf v0.3.14 // indirect - github.com/tklauser/numcpus v0.9.0 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/samber/lo v1.50.0 // indirect + github.com/samber/slog-common v0.18.1 // indirect + github.com/spf13/pflag v1.0.6 // indirect + github.com/swaggo/files/v2 v2.0.2 // indirect + github.com/tklauser/go-sysconf v0.3.15 // indirect + github.com/tklauser/numcpus v0.10.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opencensus.io v0.24.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/text v0.19.0 - golang.org/x/time v0.7.0 // indirect - golang.org/x/tools v0.26.0 // indirect - google.golang.org/protobuf v1.34.2 // indirect + golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/time v0.11.0 // indirect + golang.org/x/tools v0.33.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - modernc.org/libc v1.61.0 // indirect - modernc.org/mathutil v1.6.0 // indirect - modernc.org/memory v1.8.0 // indirect - modernc.org/sqlite v1.33.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + modernc.org/libc v1.65.8 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.11.0 // indirect + modernc.org/sqlite v1.37.1 // indirect ) diff --git a/go.sum b/go.sum index f7592629e..19a2a042b 100644 --- a/go.sum +++ b/go.sum @@ -1,38 +1,19 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= -github.com/a-h/templ v0.2.778 h1:VzhOuvWECrwOec4790lcLlZpP4Iptt5Q4K9aFxQmtaM= -github.com/a-h/templ v0.2.778/go.mod h1:lq48JXoUvuQrU0VThrK31yFwdRjTCnIE5bcPCM9IP1w= +github.com/a-h/templ v0.3.865 h1:nYn5EWm9EiXaDgWcMQaKiKvrydqgxDUtT1+4zU2C43A= +github.com/a-h/templ v0.3.865/go.mod h1:oLBbZVQ6//Q6zpvSMPTuBK0F3qOtBdFBcGRspcT+VNQ= github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s= -github.com/alessio/shellescape v1.4.2 h1:MHPfaU+ddJ0/bYWpgIeUnQUqKrlJ1S7BfEYPM4uEoM0= -github.com/alessio/shellescape v1.4.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/badger/v4 v4.3.0 h1:lcsCE1/1qrRhqP+zYx6xDZb8n7U+QlwNicpc676Ub40= -github.com/dgraph-io/badger/v4 v4.3.0/go.mod h1:Sc0T595g8zqAQRDf44n+z3wG4BOqLwceaFntt8KPxUM= -github.com/dgraph-io/ristretto v1.0.0 h1:SYG07bONKMlFDUYu5pEu3DGAh8c2OFNzKm6G9J4Si84= -github.com/dgraph-io/ristretto v1.0.0/go.mod h1:jTi2FiYEhQ1NsMmA7DeBykizjOuY88NhKBkepyu1jPc= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo= -github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= +github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ= @@ -42,48 +23,39 @@ github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7b github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= -github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic= +github.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk= github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= -github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= -github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= +github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= +github.com/goccy/go-yaml v1.17.1 h1:LI34wktB2xEE3ONG/2Ar54+/HJVBriAGJ55PHls4YuY= +github.com/goccy/go-yaml v1.17.1/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/goinfinite/tk v0.0.2 h1:4dPVvRGrnDMRBTBxkh+u/T4GX4ntYRbbUns21k8quRc= +github.com/goinfinite/tk v0.0.2/go.mod h1:dRo2mAiJUbLTJTtAbKSvtyUYs2htgXCcsQyGAahOUqQ= +github.com/goinfinite/ui v0.0.2 h1:TKMwOuVQ4QbyRx3xtUSIT/n/FJdC6eN1+CYOnDkI9n4= +github.com/goinfinite/ui v0.0.2/go.mod h1:6RqsvJOKf5ATOAqhsBXgzLWHR1YSH2VonZk8YQnmi6E= +github.com/goinfinite/ui v0.0.3 h1:CPwhkI8g/soVydYwZSwYcyfrEkknv5JQKeElC8wiWUE= +github.com/goinfinite/ui v0.0.3/go.mod h1:6RqsvJOKf5ATOAqhsBXgzLWHR1YSH2VonZk8YQnmi6E= +github.com/goinfinite/ui v0.0.4 h1:X0g90o/9jhHUN6XSHrVM9SDbzyLV5PgG1ivf3M33lvI= +github.com/goinfinite/ui v0.0.4/go.mod h1:6RqsvJOKf5ATOAqhsBXgzLWHR1YSH2VonZk8YQnmi6E= +github.com/goinfinite/ui v0.0.5 h1:g4uYFbsqKuX+7hRluGHph+Yp2KfId/36V7wA0UhCgvc= +github.com/goinfinite/ui v0.0.5/go.mod h1:6RqsvJOKf5ATOAqhsBXgzLWHR1YSH2VonZk8YQnmi6E= +github.com/goinfinite/ui v0.0.6 h1:G5yr+AYNJquGc0D4dHkXkPLeFGzzPaxrQ1ez4w9fH+A= +github.com/goinfinite/ui v0.0.6/go.mod h1:6RqsvJOKf5ATOAqhsBXgzLWHR1YSH2VonZk8YQnmi6E= +github.com/goinfinite/ui v0.0.7 h1:j1tn5ZOXgWZWpaNnQWyOKd49HWAgkehhg66rjxK5Xi0= +github.com/goinfinite/ui v0.0.7/go.mod h1:6RqsvJOKf5ATOAqhsBXgzLWHR1YSH2VonZk8YQnmi6E= +github.com/goinfinite/ui v0.0.8 h1:fhZe4vZ5l18WUd5IK5/n+vjzCuLfKhRjXffKVNfqH1s= +github.com/goinfinite/ui v0.0.8/go.mod h1:6RqsvJOKf5ATOAqhsBXgzLWHR1YSH2VonZk8YQnmi6E= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI= -github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= -github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= @@ -98,170 +70,93 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= -github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/labstack/echo/v4 v4.12.0 h1:IKpw49IMryVB2p1a4dzwlhP1O2Tf2E0Ir/450lH+kI0= -github.com/labstack/echo/v4 v4.12.0/go.mod h1:UP9Cr2DJXbOK3Kr9ONYzNowSh7HP0aG0ShAyycHSJvM= +github.com/labstack/echo/v4 v4.13.4 h1:oTZZW+T3s9gAu5L8vmzihV7/lkXGZuITzTQkTEhcXEA= +github.com/labstack/echo/v4 v4.13.4/go.mod h1:g63b33BZ5vZzcIUF8AtRH40DrTlXnx4UMC8rBdndmjQ= github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= +github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= -github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= +github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= +github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= -github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= -github.com/samber/slog-common v0.17.1 h1:jTqqLBgoJshpoxlPSGiypyOanjH6tY+i9bwyYmIbjhI= -github.com/samber/slog-common v0.17.1/go.mod h1:mZSJhinB4aqHziR0SKPqpVZjJ0JO35JfH+dDIWqaCBk= -github.com/samber/slog-zerolog/v2 v2.7.0 h1:VWJNhvoR3bf+SDEO89BmahAnz6w5l+NGbPBcnMUqO2g= -github.com/samber/slog-zerolog/v2 v2.7.0/go.mod h1:vGzG7VhveVOnyHEpr7LpIuw28QxEOfV/dQxphJRB4iY= +github.com/samber/lo v1.50.0 h1:XrG0xOeHs+4FQ8gJR97zDz5uOFMW7OwFWiFVzqopKgY= +github.com/samber/lo v1.50.0/go.mod h1:RjZyNk6WSnUFRKK6EyOhsRJMqft3G+pg7dCWHQCWvsc= +github.com/samber/slog-common v0.18.1 h1:c0EipD/nVY9HG5shgm/XAs67mgpWDMF+MmtptdJNCkQ= +github.com/samber/slog-common v0.18.1/go.mod h1:QNZiNGKakvrfbJ2YglQXLCZauzkI9xZBjOhWFKS3IKk= +github.com/samber/slog-zerolog/v2 v2.7.3 h1:/MkPDl/tJhijN2GvB1MWwBn2FU8RiL3rQ8gpXkQm2EY= +github.com/samber/slog-zerolog/v2 v2.7.3/go.mod h1:oWU7WHof4Xp8VguiNO02r1a4VzkgoOyOZhY5CuRke60= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/swaggo/echo-swagger v1.4.1 h1:Yf0uPaJWp1uRtDloZALyLnvdBeoEL5Kc7DtnjzO/TUk= github.com/swaggo/echo-swagger v1.4.1/go.mod h1:C8bSi+9yH2FLZsnhqMZLIZddpUxZdBYuNHbtaS1Hljc= -github.com/swaggo/files/v2 v2.0.1 h1:XCVJO/i/VosCDsJu1YLpdejGsGnBE9deRMpjN4pJLHk= -github.com/swaggo/files/v2 v2.0.1/go.mod h1:24kk2Y9NYEJ5lHuCra6iVwkMjIekMCaFq/0JQj66kyM= -github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg= -github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk= -github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= -github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= -github.com/tklauser/numcpus v0.9.0 h1:lmyCHtANi8aRUgkckBgoDk1nHCux3n2cgkJLXdQGPDo= -github.com/tklauser/numcpus v0.9.0/go.mod h1:SN6Nq1O3VychhC1npsWostA+oW+VOQTxZrS604NSRyI= +github.com/swaggo/files/v2 v2.0.2 h1:Bq4tgS/yxLB/3nwOMcul5oLEUKa877Ykgz3CJMVbQKU= +github.com/swaggo/files/v2 v2.0.2/go.mod h1:TVqetIzZsO9OhHX1Am9sRf9LdrFZqoK49N37KON/jr0= +github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= +github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= +github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= +github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= +github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= +github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241004190924-225e2abe05e6 h1:1wqE9dj9NpSm04INVsJhhEUzhuDVjbcyKH91sVyPATw= -golang.org/x/exp v0.0.0-20241004190924-225e2abe05e6/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= -golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= +golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= +golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -270,31 +165,31 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= -gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= -modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= -modernc.org/ccgo/v4 v4.21.0 h1:kKPI3dF7RIag8YcToh5ZwDcVMIv6VGa0ED5cvh0LMW4= -modernc.org/ccgo/v4 v4.21.0/go.mod h1:h6kt6H/A2+ew/3MW/p6KEoQmrq/i3pr0J/SiwiaF/g0= -modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= -modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= -modernc.org/gc/v2 v2.5.0 h1:bJ9ChznK1L1mUtAQtxi0wi5AtAs5jQuw4PrPHO5pb6M= -modernc.org/gc/v2 v2.5.0/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= -modernc.org/libc v1.61.0 h1:eGFcvWpqlnoGwzZeZe3PWJkkKbM/3SUGyk1DVZQ0TpE= -modernc.org/libc v1.61.0/go.mod h1:DvxVX89wtGTu+r72MLGhygpfi3aUGgZRdAYGCAVVud0= -modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= -modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= -modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= -modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= -modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= -modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= -modernc.org/sqlite v1.33.1 h1:trb6Z3YYoeM9eDL1O8do81kP+0ejv+YzgyFo+Gwy0nM= -modernc.org/sqlite v1.33.1/go.mod h1:pXV2xHxhzXZsgT/RtTFAPY6JJDEvOTcTdwADQCCWD4k= -modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= -modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +gorm.io/gorm v1.26.1 h1:ghB2gUI9FkS46luZtn6DLZ0f6ooBJ5IbVej2ENFDjRw= +gorm.io/gorm v1.26.1/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE= +gorm.io/gorm v1.30.0 h1:qbT5aPv1UH8gI99OsRlvDToLxW5zR7FzS9acZDOZcgs= +gorm.io/gorm v1.30.0/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE= +modernc.org/cc/v4 v4.26.1 h1:+X5NtzVBn0KgsBCBe+xkDC7twLb/jNVj9FPgiwSQO3s= +modernc.org/cc/v4 v4.26.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU= +modernc.org/ccgo/v4 v4.28.0/go.mod h1:JygV3+9AV6SmPhDasu4JgquwU81XAKLd3OKTUDNOiKE= +modernc.org/fileutil v1.3.1 h1:8vq5fe7jdtEvoCf3Zf9Nm0Q05sH6kGx0Op2CPx1wTC8= +modernc.org/fileutil v1.3.1/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/libc v1.65.8 h1:7PXRJai0TXZ8uNA3srsmYzmTyrLoHImV5QxHeni108Q= +modernc.org/libc v1.65.8/go.mod h1:011EQibzzio/VX3ygj1qGFt5kMjP0lHb0qCW5/D/pQU= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= +modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= +modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.37.1 h1:EgHJK/FPoqC+q2YBXg7fUmES37pCHFc97sI7zSayBEs= +modernc.org/sqlite v1.37.1/go.mod h1:XwdRtsE1MpiBcL54+MbKcaDvcuej+IYSMfLN6gSKV8g= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/src/domain/dto/createAccount.go b/src/domain/dto/createAccount.go index dc57b9633..8cbcf0c16 100644 --- a/src/domain/dto/createAccount.go +++ b/src/domain/dto/createAccount.go @@ -5,6 +5,7 @@ import "github.com/goinfinite/os/src/domain/valueObject" type CreateAccount struct { Username valueObject.Username `json:"username"` Password valueObject.Password `json:"password"` + IsSuperAdmin bool `json:"isSuperAdmin"` OperatorAccountId valueObject.AccountId `json:"-"` OperatorIpAddress valueObject.IpAddress `json:"-"` } @@ -12,12 +13,14 @@ type CreateAccount struct { func NewCreateAccount( username valueObject.Username, password valueObject.Password, + isSuperAdmin bool, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) CreateAccount { return CreateAccount{ Username: username, Password: password, + IsSuperAdmin: isSuperAdmin, OperatorAccountId: operatorAccountId, OperatorIpAddress: operatorIpAddress, } diff --git a/src/domain/dto/createCustomService.go b/src/domain/dto/createCustomService.go index 81e1f868c..a18e650d0 100644 --- a/src/domain/dto/createCustomService.go +++ b/src/domain/dto/createCustomService.go @@ -3,28 +3,32 @@ package dto import "github.com/goinfinite/os/src/domain/valueObject" type CreateCustomService struct { - Name valueObject.ServiceName `json:"name"` - Type valueObject.ServiceType `json:"type"` - StartCmd valueObject.UnixCommand `json:"startCmd"` - Envs []valueObject.ServiceEnv `json:"envs"` - PortBindings []valueObject.PortBinding `json:"portBindings"` - StopCmdSteps []valueObject.UnixCommand `json:"stopCmdSteps"` - PreStartCmdSteps []valueObject.UnixCommand `json:"preStartCmdSteps"` - PostStartCmdSteps []valueObject.UnixCommand `json:"postStartCmdSteps"` - PreStopCmdSteps []valueObject.UnixCommand `json:"preStopCmdSteps"` - PostStopCmdSteps []valueObject.UnixCommand `json:"postStopCmdSteps"` - Version *valueObject.ServiceVersion `json:"version"` - ExecUser *valueObject.UnixUsername `json:"execUser"` - WorkingDirectory *valueObject.UnixFilePath `json:"workingDirectory"` - AutoStart *bool `json:"autoStart"` - AutoRestart *bool `json:"autoRestart"` - TimeoutStartSecs *uint `json:"timeoutStartSecs"` - MaxStartRetries *uint `json:"maxStartRetries"` - LogOutputPath *valueObject.UnixFilePath `json:"logOutputPath"` - LogErrorPath *valueObject.UnixFilePath `json:"logErrorPath"` - AutoCreateMapping *bool `json:"autoCreateMapping"` - OperatorAccountId valueObject.AccountId `json:"-"` - OperatorIpAddress valueObject.IpAddress `json:"-"` + Name valueObject.ServiceName `json:"name"` + Type valueObject.ServiceType `json:"type"` + StartCmd valueObject.UnixCommand `json:"startCmd"` + Envs []valueObject.ServiceEnv `json:"envs"` + PortBindings []valueObject.PortBinding `json:"portBindings"` + StopCmdSteps []valueObject.UnixCommand `json:"stopCmdSteps"` + PreStartCmdSteps []valueObject.UnixCommand `json:"preStartCmdSteps"` + PostStartCmdSteps []valueObject.UnixCommand `json:"postStartCmdSteps"` + PreStopCmdSteps []valueObject.UnixCommand `json:"preStopCmdSteps"` + PostStopCmdSteps []valueObject.UnixCommand `json:"postStopCmdSteps"` + Version *valueObject.ServiceVersion `json:"version"` + ExecUser *valueObject.UnixUsername `json:"execUser"` + WorkingDirectory *valueObject.UnixFilePath `json:"workingDirectory"` + AutoStart *bool `json:"autoStart"` + AutoRestart *bool `json:"autoRestart"` + TimeoutStartSecs *uint `json:"timeoutStartSecs"` + MaxStartRetries *uint `json:"maxStartRetries"` + LogOutputPath *valueObject.UnixFilePath `json:"logOutputPath"` + LogErrorPath *valueObject.UnixFilePath `json:"logErrorPath"` + AvatarUrl *valueObject.Url `json:"avatarUrl"` + AutoCreateMapping *bool `json:"autoCreateMapping"` + MappingHostname *valueObject.Fqdn `json:"mappingHostname"` + MappingPath *valueObject.MappingPath `json:"mappingPath"` + MappingUpgradeInsecureRequests *bool `json:"mappingUpgradeInsecureRequests"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` } func NewCreateCustomService( @@ -40,32 +44,40 @@ func NewCreateCustomService( autoStart, autoRestart *bool, timeoutStartSecs, maxStartRetries *uint, logOutputPath, logErrorPath *valueObject.UnixFilePath, + avatarUrl *valueObject.Url, autoCreateMapping *bool, + mappingHostname *valueObject.Fqdn, + mappingPath *valueObject.MappingPath, + mappingUpgradeInsecureRequests *bool, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) CreateCustomService { return CreateCustomService{ - Name: name, - Type: serviceType, - StartCmd: startCmd, - Envs: envs, - PortBindings: portBindings, - StopCmdSteps: stopSteps, - PreStartCmdSteps: preStartSteps, - PostStartCmdSteps: postStartSteps, - PreStopCmdSteps: preStopSteps, - PostStopCmdSteps: postStopSteps, - Version: version, - ExecUser: execUser, - WorkingDirectory: workingDirectory, - AutoStart: autoStart, - TimeoutStartSecs: timeoutStartSecs, - AutoRestart: autoRestart, - MaxStartRetries: maxStartRetries, - LogOutputPath: logOutputPath, - LogErrorPath: logErrorPath, - AutoCreateMapping: autoCreateMapping, - OperatorAccountId: operatorAccountId, - OperatorIpAddress: operatorIpAddress, + Name: name, + Type: serviceType, + StartCmd: startCmd, + Envs: envs, + PortBindings: portBindings, + StopCmdSteps: stopSteps, + PreStartCmdSteps: preStartSteps, + PostStartCmdSteps: postStartSteps, + PreStopCmdSteps: preStopSteps, + PostStopCmdSteps: postStopSteps, + Version: version, + ExecUser: execUser, + WorkingDirectory: workingDirectory, + AutoStart: autoStart, + TimeoutStartSecs: timeoutStartSecs, + AutoRestart: autoRestart, + MaxStartRetries: maxStartRetries, + LogOutputPath: logOutputPath, + LogErrorPath: logErrorPath, + AvatarUrl: avatarUrl, + AutoCreateMapping: autoCreateMapping, + MappingHostname: mappingHostname, + MappingPath: mappingPath, + MappingUpgradeInsecureRequests: mappingUpgradeInsecureRequests, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, } } diff --git a/src/domain/dto/createInstallableService.go b/src/domain/dto/createInstallableService.go index 334bef1b8..ef2f67322 100644 --- a/src/domain/dto/createInstallableService.go +++ b/src/domain/dto/createInstallableService.go @@ -3,18 +3,22 @@ package dto import "github.com/goinfinite/os/src/domain/valueObject" type CreateInstallableService struct { - Name valueObject.ServiceName `json:"name"` - Envs []valueObject.ServiceEnv `json:"envs"` - PortBindings []valueObject.PortBinding `json:"portBindings"` - Version *valueObject.ServiceVersion `json:"version"` - StartupFile *valueObject.UnixFilePath `json:"startupFile"` - AutoStart *bool `json:"autoStart"` - TimeoutStartSecs *uint `json:"timeoutStartSecs"` - AutoRestart *bool `json:"autoRestart"` - MaxStartRetries *uint `json:"maxStartRetries"` - AutoCreateMapping *bool `json:"autoCreateMapping"` - OperatorAccountId valueObject.AccountId `json:"-"` - OperatorIpAddress valueObject.IpAddress `json:"-"` + Name valueObject.ServiceName `json:"name"` + Envs []valueObject.ServiceEnv `json:"envs"` + PortBindings []valueObject.PortBinding `json:"portBindings"` + Version *valueObject.ServiceVersion `json:"version"` + StartupFile *valueObject.UnixFilePath `json:"startupFile"` + WorkingDir *valueObject.UnixFilePath `json:"workingDir"` + AutoStart *bool `json:"autoStart"` + TimeoutStartSecs *uint `json:"timeoutStartSecs"` + AutoRestart *bool `json:"autoRestart"` + MaxStartRetries *uint `json:"maxStartRetries"` + AutoCreateMapping *bool `json:"autoCreateMapping"` + MappingHostname *valueObject.Fqdn `json:"mappingHostname"` + MappingPath *valueObject.MappingPath `json:"mappingPath"` + MappingUpgradeInsecureRequests *bool `json:"mappingUpgradeInsecureRequests"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` } func NewCreateInstallableService( @@ -23,26 +27,34 @@ func NewCreateInstallableService( portBindings []valueObject.PortBinding, version *valueObject.ServiceVersion, startupFile *valueObject.UnixFilePath, + workingDir *valueObject.UnixFilePath, autoStart *bool, timeoutStartSecs *uint, autoRestart *bool, maxStartRetries *uint, autoCreateMapping *bool, + mappingHostname *valueObject.Fqdn, + mappingPath *valueObject.MappingPath, + mappingUpgradeInsecureRequests *bool, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) CreateInstallableService { return CreateInstallableService{ - Name: name, - Envs: envs, - PortBindings: portBindings, - Version: version, - StartupFile: startupFile, - AutoStart: autoStart, - TimeoutStartSecs: timeoutStartSecs, - AutoRestart: autoRestart, - MaxStartRetries: maxStartRetries, - AutoCreateMapping: autoCreateMapping, - OperatorAccountId: operatorAccountId, - OperatorIpAddress: operatorIpAddress, + Name: name, + Envs: envs, + PortBindings: portBindings, + Version: version, + StartupFile: startupFile, + WorkingDir: workingDir, + AutoStart: autoStart, + TimeoutStartSecs: timeoutStartSecs, + AutoRestart: autoRestart, + MaxStartRetries: maxStartRetries, + AutoCreateMapping: autoCreateMapping, + MappingHostname: mappingHostname, + MappingPath: mappingPath, + MappingUpgradeInsecureRequests: mappingUpgradeInsecureRequests, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, } } diff --git a/src/domain/dto/createMapping.go b/src/domain/dto/createMapping.go index 4a640b5cb..81bb0769f 100644 --- a/src/domain/dto/createMapping.go +++ b/src/domain/dto/createMapping.go @@ -3,14 +3,16 @@ package dto import "github.com/goinfinite/os/src/domain/valueObject" type CreateMapping struct { - Hostname valueObject.Fqdn `json:"hostname"` - Path valueObject.MappingPath `json:"path"` - MatchPattern valueObject.MappingMatchPattern `json:"matchPattern"` - TargetType valueObject.MappingTargetType `json:"targetType"` - TargetValue *valueObject.MappingTargetValue `json:"targetValue"` - TargetHttpResponseCode *valueObject.HttpResponseCode `json:"targetHttpResponseCode"` - OperatorAccountId valueObject.AccountId `json:"-"` - OperatorIpAddress valueObject.IpAddress `json:"-"` + Hostname valueObject.Fqdn `json:"hostname"` + Path valueObject.MappingPath `json:"path"` + MatchPattern valueObject.MappingMatchPattern `json:"matchPattern"` + TargetType valueObject.MappingTargetType `json:"targetType"` + TargetValue *valueObject.MappingTargetValue `json:"targetValue"` + TargetHttpResponseCode *valueObject.HttpResponseCode `json:"targetHttpResponseCode"` + ShouldUpgradeInsecureRequests *bool `json:"shouldUpgradeInsecureRequests"` + MappingSecurityRuleId *valueObject.MappingSecurityRuleId `json:"mappingSecurityRuleId"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` } func NewCreateMapping( @@ -20,17 +22,21 @@ func NewCreateMapping( targetType valueObject.MappingTargetType, targetValue *valueObject.MappingTargetValue, targetHttpResponseCode *valueObject.HttpResponseCode, + shouldUpgradeInsecureRequests *bool, + mappingSecurityRuleId *valueObject.MappingSecurityRuleId, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) CreateMapping { return CreateMapping{ - Hostname: hostname, - Path: path, - MatchPattern: matchPattern, - TargetType: targetType, - TargetValue: targetValue, - TargetHttpResponseCode: targetHttpResponseCode, - OperatorAccountId: operatorAccountId, - OperatorIpAddress: operatorIpAddress, + Hostname: hostname, + Path: path, + MatchPattern: matchPattern, + TargetType: targetType, + TargetValue: targetValue, + TargetHttpResponseCode: targetHttpResponseCode, + ShouldUpgradeInsecureRequests: shouldUpgradeInsecureRequests, + MappingSecurityRuleId: mappingSecurityRuleId, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, } } diff --git a/src/domain/dto/createMappingSecurityRule.go b/src/domain/dto/createMappingSecurityRule.go new file mode 100644 index 000000000..67af4d837 --- /dev/null +++ b/src/domain/dto/createMappingSecurityRule.go @@ -0,0 +1,49 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/valueObject" + tkValueObject "github.com/goinfinite/tk/src/domain/valueObject" +) + +type CreateMappingSecurityRule struct { + Name valueObject.MappingSecurityRuleName `json:"name"` + Description *valueObject.MappingSecurityRuleDescription `json:"description"` + AllowedIps []tkValueObject.CidrBlock `json:"allowedIps"` + BlockedIps []tkValueObject.CidrBlock `json:"blockedIps"` + RpsSoftLimitPerIp *uint `json:"rpsSoftLimitPerIp"` + RpsHardLimitPerIp *uint `json:"rpsHardLimitPerIp"` + ResponseCodeOnMaxRequests *uint `json:"responseCodeOnMaxRequests"` + MaxConnectionsPerIp *uint `json:"maxConnectionsPerIp"` + BandwidthBpsLimitPerConnection *valueObject.Byte `json:"bandwidthBpsLimitPerConnection"` + BandwidthLimitOnlyAfterBytes *valueObject.Byte `json:"bandwidthLimitOnlyAfterBytes"` + ResponseCodeOnMaxConnections *uint `json:"responseCodeOnMaxConnections"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` +} + +func NewCreateMappingSecurityRule( + name valueObject.MappingSecurityRuleName, + description *valueObject.MappingSecurityRuleDescription, + allowedIps, blockedIps []tkValueObject.CidrBlock, + rpsSoftLimitPerIp, rpsHardLimitPerIp, responseCodeOnMaxRequests, maxConnectionsPerIp *uint, + bandwidthBpsLimitPerConnection, bandwidthLimitOnlyAfterBytes *valueObject.Byte, + responseCodeOnMaxConnections *uint, + operatorAccountId valueObject.AccountId, + operatorIpAddress valueObject.IpAddress, +) CreateMappingSecurityRule { + return CreateMappingSecurityRule{ + Name: name, + Description: description, + AllowedIps: allowedIps, + BlockedIps: blockedIps, + RpsSoftLimitPerIp: rpsSoftLimitPerIp, + RpsHardLimitPerIp: rpsHardLimitPerIp, + ResponseCodeOnMaxRequests: responseCodeOnMaxRequests, + MaxConnectionsPerIp: maxConnectionsPerIp, + BandwidthBpsLimitPerConnection: bandwidthBpsLimitPerConnection, + BandwidthLimitOnlyAfterBytes: bandwidthLimitOnlyAfterBytes, + ResponseCodeOnMaxConnections: responseCodeOnMaxConnections, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, + } +} diff --git a/src/domain/dto/createPubliclyTrustedSslPair.go b/src/domain/dto/createPubliclyTrustedSslPair.go new file mode 100644 index 000000000..8a970134a --- /dev/null +++ b/src/domain/dto/createPubliclyTrustedSslPair.go @@ -0,0 +1,23 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/valueObject" +) + +type CreatePubliclyTrustedSslPair struct { + VirtualHostHostname valueObject.Fqdn `json:"virtualHostHostname"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` +} + +func NewCreatePubliclyTrustedSslPair( + virtualHostHostname valueObject.Fqdn, + operatorAccountId valueObject.AccountId, + operatorIpAddress valueObject.IpAddress, +) CreatePubliclyTrustedSslPair { + return CreatePubliclyTrustedSslPair{ + VirtualHostHostname: virtualHostHostname, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, + } +} diff --git a/src/domain/dto/createSslPair.go b/src/domain/dto/createSslPair.go index 16d5621e7..2fa2152f8 100644 --- a/src/domain/dto/createSslPair.go +++ b/src/domain/dto/createSslPair.go @@ -8,6 +8,7 @@ import ( type CreateSslPair struct { VirtualHostsHostnames []valueObject.Fqdn `json:"virtualHostsHostnames"` Certificate entity.SslCertificate `json:"certificate"` + ChainCertificates *entity.SslCertificate `json:"chainCertificates,omitempty"` Key valueObject.SslPrivateKey `json:"key"` OperatorAccountId valueObject.AccountId `json:"-"` OperatorIpAddress valueObject.IpAddress `json:"-"` @@ -16,6 +17,7 @@ type CreateSslPair struct { func NewCreateSslPair( virtualHostsHostnames []valueObject.Fqdn, certificate entity.SslCertificate, + chainCertificates *entity.SslCertificate, key valueObject.SslPrivateKey, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, @@ -23,6 +25,7 @@ func NewCreateSslPair( return CreateSslPair{ VirtualHostsHostnames: virtualHostsHostnames, Certificate: certificate, + ChainCertificates: chainCertificates, Key: key, OperatorAccountId: operatorAccountId, OperatorIpAddress: operatorIpAddress, diff --git a/src/domain/dto/createUnixFile.go b/src/domain/dto/createUnixFile.go index 5893789ed..6345ce4c9 100644 --- a/src/domain/dto/createUnixFile.go +++ b/src/domain/dto/createUnixFile.go @@ -17,9 +17,9 @@ func NewCreateUnixFile( operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) CreateUnixFile { - permissions, _ := valueObject.NewUnixFilePermissions("644") + permissions := valueObject.NewUnixFileDefaultPermissions() if mimeType.IsDir() { - permissions, _ = valueObject.NewUnixFilePermissions("755") + permissions = valueObject.NewUnixDirDefaultPermissions() } if permissionsPtr != nil { diff --git a/src/domain/dto/createVirtualHost.go b/src/domain/dto/createVirtualHost.go index 1cb53124e..a53b67485 100644 --- a/src/domain/dto/createVirtualHost.go +++ b/src/domain/dto/createVirtualHost.go @@ -5,6 +5,7 @@ import "github.com/goinfinite/os/src/domain/valueObject" type CreateVirtualHost struct { Hostname valueObject.Fqdn `json:"hostname"` Type valueObject.VirtualHostType `json:"type"` + IsWildcard *bool `json:"isWildcard"` ParentHostname *valueObject.Fqdn `json:"parentHostname"` OperatorAccountId valueObject.AccountId `json:"-"` OperatorIpAddress valueObject.IpAddress `json:"-"` @@ -13,6 +14,7 @@ type CreateVirtualHost struct { func NewCreateVirtualHost( hostname valueObject.Fqdn, vhostType valueObject.VirtualHostType, + isWildcard *bool, parentHostname *valueObject.Fqdn, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, @@ -20,6 +22,7 @@ func NewCreateVirtualHost( return CreateVirtualHost{ Hostname: hostname, Type: vhostType, + IsWildcard: isWildcard, ParentHostname: parentHostname, OperatorAccountId: operatorAccountId, OperatorIpAddress: operatorIpAddress, diff --git a/src/domain/dto/deleteMappingSecurityRule.go b/src/domain/dto/deleteMappingSecurityRule.go new file mode 100644 index 000000000..156b0d927 --- /dev/null +++ b/src/domain/dto/deleteMappingSecurityRule.go @@ -0,0 +1,21 @@ +package dto + +import "github.com/goinfinite/os/src/domain/valueObject" + +type DeleteMappingSecurityRule struct { + SecurityRuleId valueObject.MappingSecurityRuleId `json:"securityRuleId"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` +} + +func NewDeleteMappingSecurityRule( + securityRuleId valueObject.MappingSecurityRuleId, + operatorAccountId valueObject.AccountId, + operatorIpAddress valueObject.IpAddress, +) DeleteMappingSecurityRule { + return DeleteMappingSecurityRule{ + SecurityRuleId: securityRuleId, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, + } +} diff --git a/src/domain/dto/deleteVirtualHost.go b/src/domain/dto/deleteVirtualHost.go index 9f6bcc768..1411ac92b 100644 --- a/src/domain/dto/deleteVirtualHost.go +++ b/src/domain/dto/deleteVirtualHost.go @@ -3,22 +3,19 @@ package dto import "github.com/goinfinite/os/src/domain/valueObject" type DeleteVirtualHost struct { - Hostname valueObject.Fqdn `json:"hostname"` - PrimaryVirtualHost valueObject.Fqdn `json:"-"` - OperatorAccountId valueObject.AccountId `json:"-"` - OperatorIpAddress valueObject.IpAddress `json:"-"` + Hostname valueObject.Fqdn `json:"hostname"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` } func NewDeleteVirtualHost( hostname valueObject.Fqdn, - primaryVirtualHost valueObject.Fqdn, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) DeleteVirtualHost { return DeleteVirtualHost{ - Hostname: hostname, - PrimaryVirtualHost: primaryVirtualHost, - OperatorAccountId: operatorAccountId, - OperatorIpAddress: operatorIpAddress, + Hostname: hostname, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, } } diff --git a/src/domain/dto/pagination.go b/src/domain/dto/pagination.go index 542fc7322..1634bb363 100644 --- a/src/domain/dto/pagination.go +++ b/src/domain/dto/pagination.go @@ -2,6 +2,16 @@ package dto import "github.com/goinfinite/os/src/domain/valueObject" +var PaginationSingleItem = Pagination{ + PageNumber: 0, + ItemsPerPage: 1, +} + +var PaginationUnpaginated = Pagination{ + PageNumber: 0, + ItemsPerPage: 1000, +} + type Pagination struct { PageNumber uint32 `json:"pageNumber"` ItemsPerPage uint16 `json:"itemsPerPage"` diff --git a/src/domain/dto/readDatabases.go b/src/domain/dto/readDatabases.go new file mode 100644 index 000000000..41454562c --- /dev/null +++ b/src/domain/dto/readDatabases.go @@ -0,0 +1,18 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" +) + +type ReadDatabasesRequest struct { + Pagination Pagination `json:"pagination"` + DatabaseName *valueObject.DatabaseName `json:"name,omitempty"` + DatabaseType *valueObject.DatabaseType `json:"type,omitempty"` + Username *valueObject.DatabaseUsername `json:"username,omitempty"` +} + +type ReadDatabasesResponse struct { + Pagination Pagination `json:"pagination"` + Databases []entity.Database `json:"databases"` +} diff --git a/src/domain/dto/readFiles.go b/src/domain/dto/readFiles.go new file mode 100644 index 000000000..d9d4d3ef8 --- /dev/null +++ b/src/domain/dto/readFiles.go @@ -0,0 +1,16 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" +) + +type ReadFilesRequest struct { + SourcePath valueObject.UnixFilePath `json:"sourcePath"` + ShouldIncludeFileTree *bool `json:"shouldIncludeFileTree,omitempty"` +} + +type ReadFilesResponse struct { + FileTree *UnixFileBranch `json:"fileTree"` + Files []entity.UnixFile `json:"files"` +} diff --git a/src/domain/dto/readInstalledServicesItems.go b/src/domain/dto/readInstalledServicesItems.go index e787fc32f..7dc8ca653 100644 --- a/src/domain/dto/readInstalledServicesItems.go +++ b/src/domain/dto/readInstalledServicesItems.go @@ -9,6 +9,7 @@ type ReadInstalledServicesItemsRequest struct { Pagination Pagination `json:"pagination"` ServiceName *valueObject.ServiceName `json:"serviceName,omitempty"` ServiceNature *valueObject.ServiceNature `json:"serviceNature,omitempty"` + ServiceStatus *valueObject.ServiceStatus `json:"serviceStatus,omitempty"` ServiceType *valueObject.ServiceType `json:"serviceType,omitempty"` ShouldIncludeMetrics *bool `json:"shouldIncludeMetrics,omitempty"` } @@ -17,6 +18,7 @@ type ReadFirstInstalledServiceItemsRequest struct { Pagination Pagination `json:"pagination"` ServiceName *valueObject.ServiceName `json:"serviceName,omitempty"` ServiceNature *valueObject.ServiceNature `json:"serviceNature,omitempty"` + ServiceStatus *valueObject.ServiceStatus `json:"serviceStatus,omitempty"` ServiceType *valueObject.ServiceType `json:"serviceType,omitempty"` } diff --git a/src/domain/dto/readMappingSecurityRulesRequest.go b/src/domain/dto/readMappingSecurityRulesRequest.go new file mode 100644 index 000000000..febb752a2 --- /dev/null +++ b/src/domain/dto/readMappingSecurityRulesRequest.go @@ -0,0 +1,22 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" + tkValueObject "github.com/goinfinite/tk/src/domain/valueObject" +) + +type ReadMappingSecurityRulesRequest struct { + Pagination Pagination `json:"pagination"` + MappingSecurityRuleId *valueObject.MappingSecurityRuleId `json:"mappingSecurityRuleId"` + MappingSecurityRuleName *valueObject.MappingSecurityRuleName `json:"mappingSecurityRuleName"` + AllowedIp *tkValueObject.CidrBlock `json:"allowedIp"` + BlockedIp *tkValueObject.CidrBlock `json:"blockedIp"` + CreatedBeforeAt *valueObject.UnixTime `json:"createdBeforeAt"` + CreatedAfterAt *valueObject.UnixTime `json:"createdAfterAt"` +} + +type ReadMappingSecurityRulesResponse struct { + Pagination Pagination `json:"pagination"` + MappingSecurityRules []entity.MappingSecurityRule `json:"mappingSecurityRules"` +} diff --git a/src/domain/dto/readMappings.go b/src/domain/dto/readMappings.go new file mode 100644 index 000000000..d1cdf9abe --- /dev/null +++ b/src/domain/dto/readMappings.go @@ -0,0 +1,26 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" +) + +type ReadMappingsRequest struct { + Pagination Pagination `json:"pagination"` + MappingId *valueObject.MappingId `json:"mappingId"` + Hostname *valueObject.Fqdn `json:"hostname"` + MappingPath *valueObject.MappingPath `json:"mappingPath"` + MatchPattern *valueObject.MappingMatchPattern `json:"matchPattern"` + TargetType *valueObject.MappingTargetType `json:"targetType"` + TargetValue *valueObject.MappingTargetValue `json:"targetValue"` + TargetHttpResponseCode *valueObject.HttpResponseCode `json:"targetHttpResponseCode"` + ShouldUpgradeInsecureRequests *bool `json:"shouldUpgradeInsecureRequests"` + MappingSecurityRuleId *valueObject.MappingSecurityRuleId `json:"mappingSecurityRuleId"` + CreatedBeforeAt *valueObject.UnixTime `json:"createdBeforeAt"` + CreatedAfterAt *valueObject.UnixTime `json:"createdAfterAt"` +} + +type ReadMappingsResponse struct { + Pagination Pagination `json:"pagination"` + Mappings []entity.Mapping `json:"mappings"` +} diff --git a/src/domain/dto/readSslPairs.go b/src/domain/dto/readSslPairs.go new file mode 100644 index 000000000..616a50334 --- /dev/null +++ b/src/domain/dto/readSslPairs.go @@ -0,0 +1,22 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" +) + +type ReadSslPairsRequest struct { + Pagination Pagination `json:"pagination"` + SslPairId *valueObject.SslPairId `json:"sslPairId"` + VirtualHostHostname *valueObject.Fqdn `json:"virtualHostHostname"` + AltNames []valueObject.SslHostname `json:"altNames"` + IssuedBeforeAt *valueObject.UnixTime `json:"createdBeforeAt"` + IssuedAfterAt *valueObject.UnixTime `json:"createdAfterAt"` + ExpiresBeforeAt *valueObject.UnixTime `json:"expiresBeforeAt"` + ExpiresAfterAt *valueObject.UnixTime `json:"expiresAfterAt"` +} + +type ReadSslPairsResponse struct { + Pagination Pagination `json:"pagination"` + SslPairs []entity.SslPair `json:"sslPairs"` +} diff --git a/src/domain/dto/readVirtualHosts.go b/src/domain/dto/readVirtualHosts.go new file mode 100644 index 000000000..b7be473bd --- /dev/null +++ b/src/domain/dto/readVirtualHosts.go @@ -0,0 +1,31 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" +) + +type ReadVirtualHostsRequest struct { + Pagination Pagination `json:"pagination"` + Hostname *valueObject.Fqdn `json:"hostname"` + VirtualHostType *valueObject.VirtualHostType `json:"type"` + RootDirectory *valueObject.UnixFilePath `json:"rootDirectory"` + ParentHostname *valueObject.Fqdn `json:"parentHostname"` + WithMappings *bool `json:"withMappings"` + IsWildcard *bool `json:"isWildcard"` + IsPrimary *bool `json:"-"` + AliasesHostnames []valueObject.Fqdn `json:"aliasesHostnames"` + CreatedBeforeAt *valueObject.UnixTime `json:"createdBeforeAt"` + CreatedAfterAt *valueObject.UnixTime `json:"createdAfterAt"` +} + +type VirtualHostWithMappings struct { + entity.VirtualHost + Mappings []entity.Mapping `json:"mappings"` +} + +type ReadVirtualHostsResponse struct { + Pagination Pagination `json:"pagination"` + VirtualHosts []entity.VirtualHost `json:"virtualHosts"` + VirtualHostWithMappings []VirtualHostWithMappings `json:"virtualHostWithMappings"` +} diff --git a/src/domain/dto/replaceWithValidSsl.go b/src/domain/dto/replaceWithValidSsl.go deleted file mode 100644 index 4869a9086..000000000 --- a/src/domain/dto/replaceWithValidSsl.go +++ /dev/null @@ -1,24 +0,0 @@ -package dto - -import ( - "github.com/goinfinite/os/src/domain/entity" - "github.com/goinfinite/os/src/domain/valueObject" -) - -type ReplaceWithValidSsl struct { - entity.SslPair - OperatorAccountId valueObject.AccountId `json:"-"` - OperatorIpAddress valueObject.IpAddress `json:"-"` -} - -func NewReplaceWithValidSsl( - sslPair entity.SslPair, - operatorAccountId valueObject.AccountId, - operatorIpAddress valueObject.IpAddress, -) ReplaceWithValidSsl { - return ReplaceWithValidSsl{ - SslPair: sslPair, - OperatorAccountId: operatorAccountId, - OperatorIpAddress: operatorIpAddress, - } -} diff --git a/src/domain/dto/unixFileBranch.go b/src/domain/dto/unixFileBranch.go new file mode 100644 index 000000000..1021c3b18 --- /dev/null +++ b/src/domain/dto/unixFileBranch.go @@ -0,0 +1,18 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" +) + +type UnixFileBranch struct { + entity.SimplifiedUnixFile + Branches map[valueObject.UnixFileName]UnixFileBranch `json:"branches"` +} + +func NewUnixFileBranch(parentNodeFile entity.SimplifiedUnixFile) UnixFileBranch { + return UnixFileBranch{ + SimplifiedUnixFile: parentNodeFile, + Branches: make(map[valueObject.UnixFileName]UnixFileBranch), + } +} diff --git a/src/domain/dto/updateAccount.go b/src/domain/dto/updateAccount.go index b2eea70bc..779a6c1df 100644 --- a/src/domain/dto/updateAccount.go +++ b/src/domain/dto/updateAccount.go @@ -5,6 +5,7 @@ import "github.com/goinfinite/os/src/domain/valueObject" type UpdateAccount struct { AccountId valueObject.AccountId `json:"accountId"` Password *valueObject.Password `json:"password,omitempty"` + IsSuperAdmin *bool `json:"isSuperAdmin,omitempty"` ShouldUpdateApiKey *bool `json:"shouldUpdateApiKey,omitempty"` OperatorAccountId valueObject.AccountId `json:"-"` OperatorIpAddress valueObject.IpAddress `json:"-"` @@ -13,6 +14,7 @@ type UpdateAccount struct { func NewUpdateAccount( accountId valueObject.AccountId, password *valueObject.Password, + isSuperAdmin *bool, shouldUpdateApiKey *bool, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, @@ -20,6 +22,7 @@ func NewUpdateAccount( return UpdateAccount{ AccountId: accountId, Password: password, + IsSuperAdmin: isSuperAdmin, ShouldUpdateApiKey: shouldUpdateApiKey, OperatorAccountId: operatorAccountId, OperatorIpAddress: operatorIpAddress, diff --git a/src/domain/dto/updateMapping.go b/src/domain/dto/updateMapping.go new file mode 100644 index 000000000..afa47f4bc --- /dev/null +++ b/src/domain/dto/updateMapping.go @@ -0,0 +1,42 @@ +package dto + +import "github.com/goinfinite/os/src/domain/valueObject" + +type UpdateMapping struct { + Id valueObject.MappingId `json:"id"` + Path *valueObject.MappingPath `json:"path"` + MatchPattern *valueObject.MappingMatchPattern `json:"matchPattern"` + TargetType *valueObject.MappingTargetType `json:"targetType"` + TargetValue *valueObject.MappingTargetValue `json:"targetValue"` + TargetHttpResponseCode *valueObject.HttpResponseCode `json:"targetHttpResponseCode"` + ShouldUpgradeInsecureRequests *bool `json:"shouldUpgradeInsecureRequests"` + MappingSecurityRuleId *valueObject.MappingSecurityRuleId `json:"mappingSecurityRuleId"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` +} + +func NewUpdateMapping( + id valueObject.MappingId, + path *valueObject.MappingPath, + matchPattern *valueObject.MappingMatchPattern, + targetType *valueObject.MappingTargetType, + targetValue *valueObject.MappingTargetValue, + targetHttpResponseCode *valueObject.HttpResponseCode, + shouldUpgradeInsecureRequests *bool, + mappingSecurityRuleId *valueObject.MappingSecurityRuleId, + operatorAccountId valueObject.AccountId, + operatorIpAddress valueObject.IpAddress, +) UpdateMapping { + return UpdateMapping{ + Id: id, + Path: path, + MatchPattern: matchPattern, + TargetType: targetType, + TargetValue: targetValue, + TargetHttpResponseCode: targetHttpResponseCode, + ShouldUpgradeInsecureRequests: shouldUpgradeInsecureRequests, + MappingSecurityRuleId: mappingSecurityRuleId, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, + } +} diff --git a/src/domain/dto/updateMappingSecurityRule.go b/src/domain/dto/updateMappingSecurityRule.go new file mode 100644 index 000000000..207bfa0f4 --- /dev/null +++ b/src/domain/dto/updateMappingSecurityRule.go @@ -0,0 +1,52 @@ +package dto + +import ( + "github.com/goinfinite/os/src/domain/valueObject" + tkValueObject "github.com/goinfinite/tk/src/domain/valueObject" +) + +type UpdateMappingSecurityRule struct { + Id valueObject.MappingSecurityRuleId `json:"id"` + Name *valueObject.MappingSecurityRuleName `json:"name"` + Description *valueObject.MappingSecurityRuleDescription `json:"description"` + AllowedIps []tkValueObject.CidrBlock `json:"allowedIps"` + BlockedIps []tkValueObject.CidrBlock `json:"blockedIps"` + RpsSoftLimitPerIp *uint `json:"rpsSoftLimitPerIp"` + RpsHardLimitPerIp *uint `json:"rpsHardLimitPerIp"` + ResponseCodeOnMaxRequests *uint `json:"responseCodeOnMaxRequests"` + MaxConnectionsPerIp *uint `json:"maxConnectionsPerIp"` + BandwidthBpsLimitPerConnection *valueObject.Byte `json:"bandwidthBpsLimitPerConnection"` + BandwidthLimitOnlyAfterBytes *valueObject.Byte `json:"bandwidthLimitOnlyAfterBytes"` + ResponseCodeOnMaxConnections *uint `json:"responseCodeOnMaxConnections"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` +} + +func NewUpdateMappingSecurityRule( + id valueObject.MappingSecurityRuleId, + name *valueObject.MappingSecurityRuleName, + description *valueObject.MappingSecurityRuleDescription, + allowedIps, blockedIps []tkValueObject.CidrBlock, + rpsSoftLimitPerIp, rpsHardLimitPerIp, responseCodeOnMaxRequests, maxConnectionsPerIp *uint, + bandwidthBpsLimitPerConnection, bandwidthLimitOnlyAfterBytes *valueObject.Byte, + responseCodeOnMaxConnections *uint, + operatorAccountId valueObject.AccountId, + operatorIpAddress valueObject.IpAddress, +) UpdateMappingSecurityRule { + return UpdateMappingSecurityRule{ + Id: id, + Name: name, + Description: description, + AllowedIps: allowedIps, + BlockedIps: blockedIps, + RpsSoftLimitPerIp: rpsSoftLimitPerIp, + RpsHardLimitPerIp: rpsHardLimitPerIp, + ResponseCodeOnMaxRequests: responseCodeOnMaxRequests, + MaxConnectionsPerIp: maxConnectionsPerIp, + BandwidthBpsLimitPerConnection: bandwidthBpsLimitPerConnection, + BandwidthLimitOnlyAfterBytes: bandwidthLimitOnlyAfterBytes, + ResponseCodeOnMaxConnections: responseCodeOnMaxConnections, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, + } +} diff --git a/src/domain/dto/updateService.go b/src/domain/dto/updateService.go index 056f4c312..ee8183b42 100644 --- a/src/domain/dto/updateService.go +++ b/src/domain/dto/updateService.go @@ -24,6 +24,7 @@ type UpdateService struct { MaxStartRetries *uint `json:"maxStartRetries"` LogOutputPath *valueObject.UnixFilePath `json:"logOutputPath"` LogErrorPath *valueObject.UnixFilePath `json:"logErrorPath"` + AvatarUrl *valueObject.Url `json:"avatarUrl"` OperatorAccountId valueObject.AccountId `json:"-"` OperatorIpAddress valueObject.IpAddress `json:"-"` } @@ -42,6 +43,7 @@ func NewUpdateService( autoStart, autoRestart *bool, timeoutStartSecs, maxStartRetries *uint, logOutputPath, logErrorPath *valueObject.UnixFilePath, + avatarUrl *valueObject.Url, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) UpdateService { @@ -67,6 +69,7 @@ func NewUpdateService( MaxStartRetries: maxStartRetries, LogOutputPath: logOutputPath, LogErrorPath: logErrorPath, + AvatarUrl: avatarUrl, OperatorAccountId: operatorAccountId, OperatorIpAddress: operatorIpAddress, } diff --git a/src/domain/dto/updateUnixFileOwnership.go b/src/domain/dto/updateUnixFileOwnership.go new file mode 100644 index 000000000..6abb7da50 --- /dev/null +++ b/src/domain/dto/updateUnixFileOwnership.go @@ -0,0 +1,18 @@ +package dto + +import "github.com/goinfinite/os/src/domain/valueObject" + +type UpdateUnixFileOwnership struct { + SourcePath valueObject.UnixFilePath `json:"sourcePath"` + Ownership valueObject.UnixFileOwnership `json:"ownership"` +} + +func NewUpdateUnixFileOwnership( + sourcePath valueObject.UnixFilePath, + ownership valueObject.UnixFileOwnership, +) UpdateUnixFileOwnership { + return UpdateUnixFileOwnership{ + SourcePath: sourcePath, + Ownership: ownership, + } +} diff --git a/src/domain/dto/updateUnixFilePermissions.go b/src/domain/dto/updateUnixFilePermissions.go index eedfa7fe8..cd168a8ee 100644 --- a/src/domain/dto/updateUnixFilePermissions.go +++ b/src/domain/dto/updateUnixFilePermissions.go @@ -3,16 +3,19 @@ package dto import "github.com/goinfinite/os/src/domain/valueObject" type UpdateUnixFilePermissions struct { - SourcePath valueObject.UnixFilePath `json:"sourcePath"` - Permissions valueObject.UnixFilePermissions `json:"permissions"` + SourcePath valueObject.UnixFilePath `json:"sourcePath"` + FilePermissions valueObject.UnixFilePermissions `json:"filePermissions"` + DirectoryPermissions *valueObject.UnixFilePermissions `json:"directoryPermissions"` } func NewUpdateUnixFilePermissions( sourcePath valueObject.UnixFilePath, - permissions valueObject.UnixFilePermissions, + filePermissions valueObject.UnixFilePermissions, + directoryPermissions *valueObject.UnixFilePermissions, ) UpdateUnixFilePermissions { return UpdateUnixFilePermissions{ - SourcePath: sourcePath, - Permissions: permissions, + SourcePath: sourcePath, + FilePermissions: filePermissions, + DirectoryPermissions: directoryPermissions, } } diff --git a/src/domain/dto/updateUnixFiles.go b/src/domain/dto/updateUnixFiles.go index c261c9261..3fed3acb6 100644 --- a/src/domain/dto/updateUnixFiles.go +++ b/src/domain/dto/updateUnixFiles.go @@ -3,12 +3,14 @@ package dto import "github.com/goinfinite/os/src/domain/valueObject" type UpdateUnixFiles struct { - SourcePaths []valueObject.UnixFilePath `json:"sourcePaths"` - DestinationPath *valueObject.UnixFilePath `json:"destinationPath"` - Permissions *valueObject.UnixFilePermissions `json:"permissions"` - EncodedContent *valueObject.EncodedContent `json:"encodedContent"` - OperatorAccountId valueObject.AccountId `json:"-"` - OperatorIpAddress valueObject.IpAddress `json:"-"` + SourcePaths []valueObject.UnixFilePath `json:"sourcePaths"` + DestinationPath *valueObject.UnixFilePath `json:"destinationPath"` + Permissions *valueObject.UnixFilePermissions `json:"permissions"` + EncodedContent *valueObject.EncodedContent `json:"encodedContent"` + Ownership *valueObject.UnixFileOwnership `json:"ownership"` + ShouldFixPermissions *bool `json:"shouldFixPermissions"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` } func NewUpdateUnixFiles( @@ -16,15 +18,19 @@ func NewUpdateUnixFiles( destinationPath *valueObject.UnixFilePath, permissions *valueObject.UnixFilePermissions, encodedContent *valueObject.EncodedContent, + ownership *valueObject.UnixFileOwnership, + shouldFixPermissions *bool, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) UpdateUnixFiles { return UpdateUnixFiles{ - SourcePaths: sourcePaths, - DestinationPath: destinationPath, - Permissions: permissions, - EncodedContent: encodedContent, - OperatorAccountId: operatorAccountId, - OperatorIpAddress: operatorIpAddress, + SourcePaths: sourcePaths, + DestinationPath: destinationPath, + Permissions: permissions, + EncodedContent: encodedContent, + Ownership: ownership, + ShouldFixPermissions: shouldFixPermissions, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, } } diff --git a/src/domain/dto/updateVirtualHost.go b/src/domain/dto/updateVirtualHost.go new file mode 100644 index 000000000..13e015b4d --- /dev/null +++ b/src/domain/dto/updateVirtualHost.go @@ -0,0 +1,24 @@ +package dto + +import "github.com/goinfinite/os/src/domain/valueObject" + +type UpdateVirtualHost struct { + Hostname valueObject.Fqdn `json:"hostname"` + IsWildcard *bool `json:"isWildcard"` + OperatorAccountId valueObject.AccountId `json:"-"` + OperatorIpAddress valueObject.IpAddress `json:"-"` +} + +func NewUpdateVirtualHost( + hostname valueObject.Fqdn, + isWildcard *bool, + operatorAccountId valueObject.AccountId, + operatorIpAddress valueObject.IpAddress, +) UpdateVirtualHost { + return UpdateVirtualHost{ + Hostname: hostname, + IsWildcard: isWildcard, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, + } +} diff --git a/src/domain/dto/virtualHostWithMappings.go b/src/domain/dto/virtualHostWithMappings.go deleted file mode 100644 index 77d199ed7..000000000 --- a/src/domain/dto/virtualHostWithMappings.go +++ /dev/null @@ -1,20 +0,0 @@ -package dto - -import ( - "github.com/goinfinite/os/src/domain/entity" -) - -type VirtualHostWithMappings struct { - entity.VirtualHost - Mappings []entity.Mapping `json:"mappings"` -} - -func NewVirtualHostWithMappings( - vhost entity.VirtualHost, - mappings []entity.Mapping, -) VirtualHostWithMappings { - return VirtualHostWithMappings{ - VirtualHost: vhost, - Mappings: mappings, - } -} diff --git a/src/domain/entity/account.go b/src/domain/entity/account.go index 426acc9b7..2477e2568 100644 --- a/src/domain/entity/account.go +++ b/src/domain/entity/account.go @@ -9,6 +9,7 @@ type Account struct { GroupId valueObject.GroupId `json:"groupId"` Username valueObject.Username `json:"username"` HomeDirectory valueObject.UnixFilePath `json:"homeDirectory"` + IsSuperAdmin bool `json:"isSuperAdmin"` SecureAccessPublicKeys []SecureAccessPublicKey `json:"secureAccessPublicKeys"` CreatedAt valueObject.UnixTime `json:"createdAt"` UpdatedAt valueObject.UnixTime `json:"updatedAt"` @@ -19,6 +20,7 @@ func NewAccount( groupId valueObject.GroupId, username valueObject.Username, homeDirectory valueObject.UnixFilePath, + isSuperAdmin bool, secureAccessPublicKeys []SecureAccessPublicKey, createdAt, updatedAt valueObject.UnixTime, ) Account { @@ -27,6 +29,7 @@ func NewAccount( GroupId: groupId, Username: username, HomeDirectory: homeDirectory, + IsSuperAdmin: isSuperAdmin, SecureAccessPublicKeys: secureAccessPublicKeys, CreatedAt: createdAt, UpdatedAt: updatedAt, diff --git a/src/domain/entity/installableService.go b/src/domain/entity/installableService.go index c256f363e..f513cd2a6 100644 --- a/src/domain/entity/installableService.go +++ b/src/domain/entity/installableService.go @@ -3,30 +3,37 @@ package entity import "github.com/goinfinite/os/src/domain/valueObject" type InstallableService struct { - ManifestVersion valueObject.ServiceManifestVersion `json:"manifestVersion"` - Name valueObject.ServiceName `json:"name"` - Nature valueObject.ServiceNature `json:"nature"` - Type valueObject.ServiceType `json:"type"` - StartCmd valueObject.UnixCommand `json:"startCmd"` - Description valueObject.ServiceDescription `json:"description"` - Versions []valueObject.ServiceVersion `json:"versions"` - Envs []valueObject.ServiceEnv `json:"envs"` - PortBindings []valueObject.PortBinding `json:"portBindings"` - StopCmdSteps []valueObject.UnixCommand `json:"-"` - InstallCmdSteps []valueObject.UnixCommand `json:"-"` - UninstallCmdSteps []valueObject.UnixCommand `json:"-"` - UninstallFilePaths []valueObject.UnixFilePath `json:"-"` - PreStartCmdSteps []valueObject.UnixCommand `json:"-"` - PostStartCmdSteps []valueObject.UnixCommand `json:"-"` - PreStopCmdSteps []valueObject.UnixCommand `json:"-"` - PostStopCmdSteps []valueObject.UnixCommand `json:"-"` - ExecUser *valueObject.UnixUsername `json:"execUser"` - WorkingDirectory *valueObject.UnixFilePath `json:"workingDirectory"` - StartupFile *valueObject.UnixFilePath `json:"startupFile"` - LogOutputPath *valueObject.UnixFilePath `json:"logOutputPath"` - LogErrorPath *valueObject.UnixFilePath `json:"logErrorPath"` - EstimatedSizeBytes *valueObject.Byte `json:"estimatedSizeBytes"` - AvatarUrl *valueObject.Url `json:"avatarUrl"` + ManifestVersion valueObject.ServiceManifestVersion `json:"manifestVersion"` + Name valueObject.ServiceName `json:"name"` + Nature valueObject.ServiceNature `json:"nature"` + Type valueObject.ServiceType `json:"type"` + StartCmd valueObject.UnixCommand `json:"startCmd"` + Description valueObject.ServiceDescription `json:"description"` + Versions []valueObject.ServiceVersion `json:"versions"` + Envs []valueObject.ServiceEnv `json:"envs"` + PortBindings []valueObject.PortBinding `json:"portBindings"` + StopTimeoutSecs valueObject.UnixTime `json:"-"` + StopCmdSteps []valueObject.UnixCommand `json:"-"` + InstallTimeoutSecs valueObject.UnixTime `json:"-"` + InstallCmdSteps []valueObject.UnixCommand `json:"-"` + UninstallTimeoutSecs valueObject.UnixTime `json:"-"` + UninstallCmdSteps []valueObject.UnixCommand `json:"-"` + UninstallFilePaths []valueObject.UnixFilePath `json:"-"` + PreStartTimeoutSecs valueObject.UnixTime `json:"-"` + PreStartCmdSteps []valueObject.UnixCommand `json:"-"` + PostStartTimeoutSecs valueObject.UnixTime `json:"-"` + PostStartCmdSteps []valueObject.UnixCommand `json:"-"` + PreStopTimeoutSecs valueObject.UnixTime `json:"-"` + PreStopCmdSteps []valueObject.UnixCommand `json:"-"` + PostStopTimeoutSecs valueObject.UnixTime `json:"-"` + PostStopCmdSteps []valueObject.UnixCommand `json:"-"` + ExecUser *valueObject.UnixUsername `json:"execUser"` + WorkingDirectory *valueObject.UnixFilePath `json:"workingDirectory"` + StartupFile *valueObject.UnixFilePath `json:"startupFile"` + LogOutputPath *valueObject.UnixFilePath `json:"logOutputPath"` + LogErrorPath *valueObject.UnixFilePath `json:"logErrorPath"` + AvatarUrl *valueObject.Url `json:"avatarUrl"` + EstimatedSizeBytes *valueObject.Byte `json:"estimatedSizeBytes"` } func NewInstallableService( @@ -39,38 +46,57 @@ func NewInstallableService( versions []valueObject.ServiceVersion, envs []valueObject.ServiceEnv, portBindings []valueObject.PortBinding, - stopSteps, installSteps, uninstallSteps []valueObject.UnixCommand, + stopTimeoutSecs valueObject.UnixTime, + stopSteps []valueObject.UnixCommand, + installTimeoutSecs valueObject.UnixTime, + installSteps []valueObject.UnixCommand, + uninstallTimeoutSecs valueObject.UnixTime, + uninstallSteps []valueObject.UnixCommand, uninstallFilePaths []valueObject.UnixFilePath, - preStartSteps, postStartSteps, preStopSteps, postStopSteps []valueObject.UnixCommand, + preStartTimeoutSecs valueObject.UnixTime, + preStartSteps []valueObject.UnixCommand, + postStartTimeoutSecs valueObject.UnixTime, + postStartSteps []valueObject.UnixCommand, + preStopTimeoutSecs valueObject.UnixTime, + preStopSteps []valueObject.UnixCommand, + postStopTimeoutSecs valueObject.UnixTime, + postStopSteps []valueObject.UnixCommand, execUser *valueObject.UnixUsername, workingDirectory, startupFile, logOutputPath, logErrorPath *valueObject.UnixFilePath, - estimatedSizeBytes *valueObject.Byte, avatarUrl *valueObject.Url, + estimatedSizeBytes *valueObject.Byte, ) InstallableService { return InstallableService{ - ManifestVersion: manifestVersion, - Name: name, - Nature: nature, - Type: serviceType, - StartCmd: startCmd, - Description: description, - Versions: versions, - Envs: envs, - PortBindings: portBindings, - StopCmdSteps: stopSteps, - InstallCmdSteps: installSteps, - UninstallCmdSteps: uninstallSteps, - UninstallFilePaths: uninstallFilePaths, - PreStartCmdSteps: preStartSteps, - PostStartCmdSteps: postStartSteps, - PreStopCmdSteps: preStopSteps, - PostStopCmdSteps: postStopSteps, - ExecUser: execUser, - WorkingDirectory: workingDirectory, - StartupFile: startupFile, - LogOutputPath: logOutputPath, - LogErrorPath: logErrorPath, - EstimatedSizeBytes: estimatedSizeBytes, - AvatarUrl: avatarUrl, + ManifestVersion: manifestVersion, + Name: name, + Nature: nature, + Type: serviceType, + StartCmd: startCmd, + Description: description, + Versions: versions, + Envs: envs, + PortBindings: portBindings, + StopTimeoutSecs: stopTimeoutSecs, + StopCmdSteps: stopSteps, + InstallTimeoutSecs: installTimeoutSecs, + InstallCmdSteps: installSteps, + UninstallTimeoutSecs: uninstallTimeoutSecs, + UninstallCmdSteps: uninstallSteps, + UninstallFilePaths: uninstallFilePaths, + PreStartTimeoutSecs: preStartTimeoutSecs, + PreStartCmdSteps: preStartSteps, + PostStartTimeoutSecs: postStartTimeoutSecs, + PostStartCmdSteps: postStartSteps, + PreStopTimeoutSecs: preStopTimeoutSecs, + PreStopCmdSteps: preStopSteps, + PostStopTimeoutSecs: postStopTimeoutSecs, + PostStopCmdSteps: postStopSteps, + ExecUser: execUser, + WorkingDirectory: workingDirectory, + StartupFile: startupFile, + LogOutputPath: logOutputPath, + LogErrorPath: logErrorPath, + AvatarUrl: avatarUrl, + EstimatedSizeBytes: estimatedSizeBytes, } } diff --git a/src/domain/entity/installedService.go b/src/domain/entity/installedService.go index 7a4b0896d..5a1497916 100644 --- a/src/domain/entity/installedService.go +++ b/src/domain/entity/installedService.go @@ -3,30 +3,36 @@ package entity import "github.com/goinfinite/os/src/domain/valueObject" type InstalledService struct { - Name valueObject.ServiceName `json:"name"` - Nature valueObject.ServiceNature `json:"nature"` - Type valueObject.ServiceType `json:"type"` - Version valueObject.ServiceVersion `json:"version"` - Status valueObject.ServiceStatus `json:"status"` - StartCmd valueObject.UnixCommand `json:"startCmd"` - Envs []valueObject.ServiceEnv `json:"envs"` - PortBindings []valueObject.PortBinding `json:"portBindings"` - StopCmdSteps []valueObject.UnixCommand `json:"stopCmdSteps"` - PreStartCmdSteps []valueObject.UnixCommand `json:"preStartCmdSteps"` - PostStartCmdSteps []valueObject.UnixCommand `json:"postStartCmdSteps"` - PreStopCmdSteps []valueObject.UnixCommand `json:"preStopCmdSteps"` - PostStopCmdSteps []valueObject.UnixCommand `json:"postStopCmdSteps"` - ExecUser *valueObject.UnixUsername `json:"execUser"` - WorkingDirectory *valueObject.UnixFilePath `json:"workingDirectory"` - StartupFile *valueObject.UnixFilePath `json:"startupFile"` - AutoStart *bool `json:"autoStart"` - AutoRestart *bool `json:"autoRestart"` - TimeoutStartSecs *uint `json:"timeoutStartSecs"` - MaxStartRetries *uint `json:"maxStartRetries"` - LogOutputPath *valueObject.UnixFilePath `json:"logOutputPath"` - LogErrorPath *valueObject.UnixFilePath `json:"logErrorPath"` - CreatedAt valueObject.UnixTime `json:"createdAt"` - UpdatedAt valueObject.UnixTime `json:"updatedAt"` + Name valueObject.ServiceName `json:"name"` + Nature valueObject.ServiceNature `json:"nature"` + Type valueObject.ServiceType `json:"type"` + Version valueObject.ServiceVersion `json:"version"` + Status valueObject.ServiceStatus `json:"status"` + StartCmd valueObject.UnixCommand `json:"startCmd"` + Envs []valueObject.ServiceEnv `json:"envs"` + PortBindings []valueObject.PortBinding `json:"portBindings"` + StopTimeoutSecs valueObject.UnixTime `json:"-"` + StopCmdSteps []valueObject.UnixCommand `json:"-"` + PreStartTimeoutSecs valueObject.UnixTime `json:"-"` + PreStartCmdSteps []valueObject.UnixCommand `json:"-"` + PostStartTimeoutSecs valueObject.UnixTime `json:"-"` + PostStartCmdSteps []valueObject.UnixCommand `json:"-"` + PreStopTimeoutSecs valueObject.UnixTime `json:"-"` + PreStopCmdSteps []valueObject.UnixCommand `json:"-"` + PostStopTimeoutSecs valueObject.UnixTime `json:"-"` + PostStopCmdSteps []valueObject.UnixCommand `json:"-"` + ExecUser *valueObject.UnixUsername `json:"execUser"` + WorkingDirectory *valueObject.UnixFilePath `json:"workingDirectory"` + StartupFile *valueObject.UnixFilePath `json:"startupFile"` + AutoStart *bool `json:"autoStart"` + AutoRestart *bool `json:"autoRestart"` + TimeoutStartSecs *uint `json:"timeoutStartSecs"` + MaxStartRetries *uint `json:"maxStartRetries"` + LogOutputPath *valueObject.UnixFilePath `json:"logOutputPath"` + LogErrorPath *valueObject.UnixFilePath `json:"logErrorPath"` + AvatarUrl *valueObject.Url `json:"avatarUrl"` + CreatedAt valueObject.UnixTime `json:"createdAt"` + UpdatedAt valueObject.UnixTime `json:"updatedAt"` } func NewInstalledService( @@ -38,39 +44,55 @@ func NewInstalledService( status valueObject.ServiceStatus, envs []valueObject.ServiceEnv, portBindings []valueObject.PortBinding, - stopSteps, preStartSteps, postStartSteps, preStopSteps, postStopSteps []valueObject.UnixCommand, + stopTimeoutSecs valueObject.UnixTime, + stopSteps []valueObject.UnixCommand, + preStartTimeoutSecs valueObject.UnixTime, + preStartSteps []valueObject.UnixCommand, + postStartTimeoutSecs valueObject.UnixTime, + postStartSteps []valueObject.UnixCommand, + preStopTimeoutSecs valueObject.UnixTime, + preStopSteps []valueObject.UnixCommand, + postStopTimeoutSecs valueObject.UnixTime, + postStopSteps []valueObject.UnixCommand, execUser *valueObject.UnixUsername, workingDirectory, startupFile *valueObject.UnixFilePath, autoStart, autoRestart *bool, timeoutStartSecs, maxStartRetries *uint, logOutputPath, logErrorPath *valueObject.UnixFilePath, + avatarUrl *valueObject.Url, createdAt valueObject.UnixTime, updatedAt valueObject.UnixTime, ) InstalledService { return InstalledService{ - Name: name, - Nature: nature, - Type: serviceType, - Version: version, - StartCmd: startCmd, - Status: status, - Envs: envs, - PortBindings: portBindings, - StopCmdSteps: stopSteps, - PreStartCmdSteps: preStartSteps, - PostStartCmdSteps: postStartSteps, - PreStopCmdSteps: preStopSteps, - PostStopCmdSteps: postStopSteps, - ExecUser: execUser, - WorkingDirectory: workingDirectory, - StartupFile: startupFile, - AutoStart: autoStart, - AutoRestart: autoRestart, - TimeoutStartSecs: timeoutStartSecs, - MaxStartRetries: maxStartRetries, - LogOutputPath: logOutputPath, - LogErrorPath: logErrorPath, - CreatedAt: createdAt, - UpdatedAt: updatedAt, + Name: name, + Nature: nature, + Type: serviceType, + Version: version, + StartCmd: startCmd, + Status: status, + Envs: envs, + PortBindings: portBindings, + StopTimeoutSecs: stopTimeoutSecs, + StopCmdSteps: stopSteps, + PreStartTimeoutSecs: preStartTimeoutSecs, + PreStartCmdSteps: preStartSteps, + PostStartTimeoutSecs: postStartTimeoutSecs, + PostStartCmdSteps: postStartSteps, + PreStopTimeoutSecs: preStopTimeoutSecs, + PreStopCmdSteps: preStopSteps, + PostStopTimeoutSecs: postStopTimeoutSecs, + PostStopCmdSteps: postStopSteps, + ExecUser: execUser, + WorkingDirectory: workingDirectory, + StartupFile: startupFile, + AutoStart: autoStart, + AutoRestart: autoRestart, + TimeoutStartSecs: timeoutStartSecs, + MaxStartRetries: maxStartRetries, + LogOutputPath: logOutputPath, + LogErrorPath: logErrorPath, + AvatarUrl: avatarUrl, + CreatedAt: createdAt, + UpdatedAt: updatedAt, } } diff --git a/src/domain/entity/mapping.go b/src/domain/entity/mapping.go index fef89f7c0..c19245edc 100644 --- a/src/domain/entity/mapping.go +++ b/src/domain/entity/mapping.go @@ -3,13 +3,19 @@ package entity import "github.com/goinfinite/os/src/domain/valueObject" type Mapping struct { - Id valueObject.MappingId `json:"id"` - Hostname valueObject.Fqdn `json:"-"` - Path valueObject.MappingPath `json:"path"` - MatchPattern valueObject.MappingMatchPattern `json:"matchPattern"` - TargetType valueObject.MappingTargetType `json:"targetType"` - TargetValue *valueObject.MappingTargetValue `json:"targetValue"` - TargetHttpResponseCode *valueObject.HttpResponseCode `json:"targetHttpResponseCode"` + Id valueObject.MappingId `json:"id"` + Hostname valueObject.Fqdn `json:"hostname"` + Path valueObject.MappingPath `json:"path"` + MatchPattern valueObject.MappingMatchPattern `json:"matchPattern"` + TargetType valueObject.MappingTargetType `json:"targetType"` + TargetValue *valueObject.MappingTargetValue `json:"targetValue"` + TargetHttpResponseCode *valueObject.HttpResponseCode `json:"targetHttpResponseCode"` + ShouldUpgradeInsecureRequests *bool `json:"shouldUpgradeInsecureRequests"` + MarketplaceInstalledItemId *valueObject.MarketplaceItemId `json:"marketplaceInstalledItemId"` + MarketplaceInstalledItemName *valueObject.MarketplaceItemName `json:"marketplaceInstalledItemName"` + MappingSecurityRuleId *valueObject.MappingSecurityRuleId `json:"mappingSecurityRuleId"` + CreatedAt valueObject.UnixTime `json:"createdAt"` + UpdatedAt valueObject.UnixTime `json:"updatedAt"` } func NewMapping( @@ -20,14 +26,26 @@ func NewMapping( targetType valueObject.MappingTargetType, targetValue *valueObject.MappingTargetValue, targetHttpResponseCode *valueObject.HttpResponseCode, + shouldUpgradeInsecureRequests *bool, + marketplaceInstalledItemId *valueObject.MarketplaceItemId, + marketplaceInstalledItemName *valueObject.MarketplaceItemName, + mappingSecurityRuleId *valueObject.MappingSecurityRuleId, + createdAt valueObject.UnixTime, + updatedAt valueObject.UnixTime, ) Mapping { return Mapping{ - Id: id, - Hostname: hostname, - Path: path, - MatchPattern: matchPattern, - TargetType: targetType, - TargetValue: targetValue, - TargetHttpResponseCode: targetHttpResponseCode, + Id: id, + Hostname: hostname, + Path: path, + MatchPattern: matchPattern, + TargetType: targetType, + TargetValue: targetValue, + TargetHttpResponseCode: targetHttpResponseCode, + ShouldUpgradeInsecureRequests: shouldUpgradeInsecureRequests, + MarketplaceInstalledItemId: marketplaceInstalledItemId, + MarketplaceInstalledItemName: marketplaceInstalledItemName, + MappingSecurityRuleId: mappingSecurityRuleId, + CreatedAt: createdAt, + UpdatedAt: updatedAt, } } diff --git a/src/domain/entity/mappingSecurityRule.go b/src/domain/entity/mappingSecurityRule.go new file mode 100644 index 000000000..e53ebcfe8 --- /dev/null +++ b/src/domain/entity/mappingSecurityRule.go @@ -0,0 +1,179 @@ +package entity + +import ( + "github.com/goinfinite/os/src/domain/valueObject" + tkValueObject "github.com/goinfinite/tk/src/domain/valueObject" +) + +var ( + MappingSecurityRuleDefaultResponseCodeOnMaxRequests uint = 429 + MappingSecurityRuleDefaultResponseCodeOnMaxConnections uint = 420 +) + +type MappingSecurityRule struct { + Id valueObject.MappingSecurityRuleId `json:"id"` + Name valueObject.MappingSecurityRuleName `json:"name"` + Description *valueObject.MappingSecurityRuleDescription `json:"description"` + AllowedIps []tkValueObject.CidrBlock `json:"allowedIps"` + BlockedIps []tkValueObject.CidrBlock `json:"blockedIps"` + RpsSoftLimitPerIp *uint `json:"rpsSoftLimitPerIp"` + RpsHardLimitPerIp *uint `json:"rpsHardLimitPerIp"` + ResponseCodeOnMaxRequests *uint `json:"responseCodeOnMaxRequests"` + MaxConnectionsPerIp *uint `json:"maxConnectionsPerIp"` + BandwidthBpsLimitPerConnection *valueObject.Byte `json:"bandwidthBpsLimitPerConnection"` + BandwidthLimitOnlyAfterBytes *valueObject.Byte `json:"bandwidthLimitOnlyAfterBytes"` + ResponseCodeOnMaxConnections *uint `json:"responseCodeOnMaxConnections"` + CreatedAt valueObject.UnixTime `json:"createdAt"` + UpdatedAt valueObject.UnixTime `json:"updatedAt"` +} + +func NewMappingSecurityRule( + id valueObject.MappingSecurityRuleId, + name valueObject.MappingSecurityRuleName, + description *valueObject.MappingSecurityRuleDescription, + allowedIps, blockedIps []tkValueObject.CidrBlock, + rpsSoftLimitPerIp, rpsHardLimitPerIp, responseCodeOnMaxRequests, maxConnectionsPerIp *uint, + bandwidthBpsLimitPerConnection, bandwidthLimitOnlyAfterBytes *valueObject.Byte, + responseCodeOnMaxConnections *uint, + createdAt, updatedAt valueObject.UnixTime, +) MappingSecurityRule { + return MappingSecurityRule{ + Id: id, + Name: name, + Description: description, + AllowedIps: allowedIps, + BlockedIps: blockedIps, + RpsSoftLimitPerIp: rpsSoftLimitPerIp, + RpsHardLimitPerIp: rpsHardLimitPerIp, + ResponseCodeOnMaxRequests: responseCodeOnMaxRequests, + MaxConnectionsPerIp: maxConnectionsPerIp, + BandwidthBpsLimitPerConnection: bandwidthBpsLimitPerConnection, + BandwidthLimitOnlyAfterBytes: bandwidthLimitOnlyAfterBytes, + ResponseCodeOnMaxConnections: responseCodeOnMaxConnections, + CreatedAt: createdAt, + UpdatedAt: updatedAt, + } +} + +func MappingSecurityRulePresetBreezy() MappingSecurityRule { + ruleDescription, _ := valueObject.NewMappingSecurityRuleDescription( + "Security in shorts and flip‑flops. Best for debugging or very low‑risk scenarios.", + ) + rpsSoftLimitPerIp := uint(24) + rpsHardLimitPerIp := uint(32) + maxConnectionsPerIp := uint(16) + bandwidthBpsLimitPerConnection := valueObject.Byte(32 * 1024 * 1024) // 32MiB + bandwidthLimitOnlyAfterBytes := valueObject.Byte(64 * 1024 * 1024) // 32MiB + + return MappingSecurityRule{ + Name: valueObject.MappingSecurityRuleName("breezy"), + Description: &ruleDescription, + RpsSoftLimitPerIp: &rpsSoftLimitPerIp, + RpsHardLimitPerIp: &rpsHardLimitPerIp, + ResponseCodeOnMaxRequests: &MappingSecurityRuleDefaultResponseCodeOnMaxRequests, + MaxConnectionsPerIp: &maxConnectionsPerIp, + BandwidthBpsLimitPerConnection: &bandwidthBpsLimitPerConnection, + BandwidthLimitOnlyAfterBytes: &bandwidthLimitOnlyAfterBytes, + ResponseCodeOnMaxConnections: &MappingSecurityRuleDefaultResponseCodeOnMaxConnections, + } +} + +func MappingSecurityRulePresetPermissive() MappingSecurityRule { + ruleDescription, _ := valueObject.NewMappingSecurityRuleDescription( + "Easy‑going yet alert. Basic protection without slowing down everyday traffic.", + ) + rpsSoftLimitPerIp := uint(16) + rpsHardLimitPerIp := uint(24) + maxConnectionsPerIp := uint(12) + bandwidthBpsLimitPerConnection := valueObject.Byte(16 * 1024 * 1024) // 16MiB + bandwidthLimitOnlyAfterBytes := valueObject.Byte(32 * 1024 * 1024) // 24MiB + + return MappingSecurityRule{ + Name: valueObject.MappingSecurityRuleName("permissive"), + Description: &ruleDescription, + RpsSoftLimitPerIp: &rpsSoftLimitPerIp, + RpsHardLimitPerIp: &rpsHardLimitPerIp, + ResponseCodeOnMaxRequests: &MappingSecurityRuleDefaultResponseCodeOnMaxRequests, + MaxConnectionsPerIp: &maxConnectionsPerIp, + BandwidthBpsLimitPerConnection: &bandwidthBpsLimitPerConnection, + BandwidthLimitOnlyAfterBytes: &bandwidthLimitOnlyAfterBytes, + ResponseCodeOnMaxConnections: &MappingSecurityRuleDefaultResponseCodeOnMaxConnections, + } +} + +func MappingSecurityRulePresetReasonable() MappingSecurityRule { + ruleDescription, _ := valueObject.NewMappingSecurityRuleDescription( + "Sweet spot: prevent most abuses while minimizing false positives.", + ) + rpsSoftLimitPerIp := uint(12) + rpsHardLimitPerIp := uint(16) + maxConnectionsPerIp := uint(8) + bandwidthBpsLimitPerConnection := valueObject.Byte(8 * 1024 * 1024) // 8MiB + bandwidthLimitOnlyAfterBytes := valueObject.Byte(16 * 1024 * 1024) // 16MiB + + return MappingSecurityRule{ + Name: valueObject.MappingSecurityRuleName("reasonable"), + Description: &ruleDescription, + RpsSoftLimitPerIp: &rpsSoftLimitPerIp, + RpsHardLimitPerIp: &rpsHardLimitPerIp, + ResponseCodeOnMaxRequests: &MappingSecurityRuleDefaultResponseCodeOnMaxRequests, + MaxConnectionsPerIp: &maxConnectionsPerIp, + BandwidthBpsLimitPerConnection: &bandwidthBpsLimitPerConnection, + BandwidthLimitOnlyAfterBytes: &bandwidthLimitOnlyAfterBytes, + ResponseCodeOnMaxConnections: &MappingSecurityRuleDefaultResponseCodeOnMaxConnections, + } +} + +func MappingSecurityRulePresetVigilant() MappingSecurityRule { + ruleDescription, _ := valueObject.NewMappingSecurityRuleDescription( + "Lower tolerances, higher standards - might be too restrictive.", + ) + rpsSoftLimitPerIp := uint(8) + rpsHardLimitPerIp := uint(12) + maxConnectionsPerIp := uint(6) + bandwidthBpsLimitPerConnection := valueObject.Byte(4 * 1024 * 1024) // 4MiB + bandwidthLimitOnlyAfterBytes := valueObject.Byte(8 * 1024 * 1024) // 12MiB + + return MappingSecurityRule{ + Name: valueObject.MappingSecurityRuleName("vigilant"), + Description: &ruleDescription, + RpsSoftLimitPerIp: &rpsSoftLimitPerIp, + RpsHardLimitPerIp: &rpsHardLimitPerIp, + ResponseCodeOnMaxRequests: &MappingSecurityRuleDefaultResponseCodeOnMaxRequests, + MaxConnectionsPerIp: &maxConnectionsPerIp, + BandwidthBpsLimitPerConnection: &bandwidthBpsLimitPerConnection, + BandwidthLimitOnlyAfterBytes: &bandwidthLimitOnlyAfterBytes, + ResponseCodeOnMaxConnections: &MappingSecurityRuleDefaultResponseCodeOnMaxConnections, + } +} + +func MappingSecurityRulePresetIronclad() MappingSecurityRule { + ruleDescription, _ := valueObject.NewMappingSecurityRuleDescription( + "Draconian limits, permanent red alert. Use with caution.", + ) + rpsSoftLimitPerIp := uint(6) + rpsHardLimitPerIp := uint(8) + maxConnectionsPerIp := uint(4) + bandwidthBpsLimitPerConnection := valueObject.Byte(2 * 1024 * 1024) // 2MiB + bandwidthLimitOnlyAfterBytes := valueObject.Byte(4 * 1024 * 1024) // 8MiB + + return MappingSecurityRule{ + Name: valueObject.MappingSecurityRuleName("ironclad"), + Description: &ruleDescription, + RpsSoftLimitPerIp: &rpsSoftLimitPerIp, + RpsHardLimitPerIp: &rpsHardLimitPerIp, + ResponseCodeOnMaxRequests: &MappingSecurityRuleDefaultResponseCodeOnMaxRequests, + MaxConnectionsPerIp: &maxConnectionsPerIp, + BandwidthBpsLimitPerConnection: &bandwidthBpsLimitPerConnection, + BandwidthLimitOnlyAfterBytes: &bandwidthLimitOnlyAfterBytes, + ResponseCodeOnMaxConnections: &MappingSecurityRuleDefaultResponseCodeOnMaxConnections, + } +} + +func MappingSecurityRuleInitialPresets() []MappingSecurityRule { + return []MappingSecurityRule{ + MappingSecurityRulePresetBreezy(), MappingSecurityRulePresetPermissive(), + MappingSecurityRulePresetReasonable(), MappingSecurityRulePresetVigilant(), + MappingSecurityRulePresetIronclad(), + } +} diff --git a/src/domain/entity/marketplaceCatalogItem.go b/src/domain/entity/marketplaceCatalogItem.go index 98816e284..06d3bfedb 100644 --- a/src/domain/entity/marketplaceCatalogItem.go +++ b/src/domain/entity/marketplaceCatalogItem.go @@ -5,21 +5,23 @@ import ( ) type MarketplaceCatalogItem struct { - ManifestVersion valueObject.MarketplaceItemManifestVersion `json:"manifestVersion"` - Id valueObject.MarketplaceItemId `json:"id"` - Slugs []valueObject.MarketplaceItemSlug `json:"slugs"` - Name valueObject.MarketplaceItemName `json:"name"` - Type valueObject.MarketplaceItemType `json:"type"` - Description valueObject.MarketplaceItemDescription `json:"description"` - Services []valueObject.ServiceNameWithVersion `json:"services"` - Mappings []valueObject.MarketplaceItemMapping `json:"mappings"` - DataFields []valueObject.MarketplaceCatalogItemDataField `json:"dataFields"` - InstallCmdSteps []valueObject.UnixCommand `json:"-"` - UninstallCmdSteps []valueObject.UnixCommand `json:"-"` - UninstallFileNames []valueObject.UnixFileName `json:"-"` - EstimatedSizeBytes valueObject.Byte `json:"estimatedSizeBytes"` - AvatarUrl valueObject.Url `json:"avatarUrl"` - ScreenshotUrls []valueObject.Url `json:"screenshotUrls"` + ManifestVersion valueObject.MarketplaceItemManifestVersion `json:"manifestVersion"` + Id valueObject.MarketplaceItemId `json:"id"` + Slugs []valueObject.MarketplaceItemSlug `json:"slugs"` + Name valueObject.MarketplaceItemName `json:"name"` + Type valueObject.MarketplaceItemType `json:"type"` + Description valueObject.MarketplaceItemDescription `json:"description"` + Services []valueObject.ServiceNameWithVersion `json:"services"` + Mappings []valueObject.MarketplaceItemMapping `json:"mappings"` + DataFields []valueObject.MarketplaceCatalogItemDataField `json:"dataFields"` + InstallTimeoutSecs valueObject.UnixTime `json:"-"` + InstallCmdSteps []valueObject.UnixCommand `json:"-"` + UninstallTimeoutSecs valueObject.UnixTime `json:"-"` + UninstallCmdSteps []valueObject.UnixCommand `json:"-"` + UninstallFileNames []valueObject.UnixFileName `json:"-"` + EstimatedSizeBytes valueObject.Byte `json:"estimatedSizeBytes"` + AvatarUrl valueObject.Url `json:"avatarUrl"` + ScreenshotUrls []valueObject.Url `json:"screenshotUrls"` } func NewMarketplaceCatalogItem( @@ -32,7 +34,9 @@ func NewMarketplaceCatalogItem( services []valueObject.ServiceNameWithVersion, mappings []valueObject.MarketplaceItemMapping, dataFields []valueObject.MarketplaceCatalogItemDataField, + installTimeoutSecs valueObject.UnixTime, installCmdSteps []valueObject.UnixCommand, + uninstallTimeoutSecs valueObject.UnixTime, uninstallCmdSteps []valueObject.UnixCommand, uninstallFileNames []valueObject.UnixFileName, estimatedSizeBytes valueObject.Byte, @@ -40,20 +44,22 @@ func NewMarketplaceCatalogItem( screenshotUrls []valueObject.Url, ) MarketplaceCatalogItem { return MarketplaceCatalogItem{ - ManifestVersion: manifestVersion, - Id: id, - Slugs: slugs, - Name: itemName, - Type: itemType, - Description: description, - Services: services, - Mappings: mappings, - DataFields: dataFields, - InstallCmdSteps: installCmdSteps, - UninstallCmdSteps: uninstallCmdSteps, - UninstallFileNames: uninstallFileNames, - EstimatedSizeBytes: estimatedSizeBytes, - AvatarUrl: avatarUrl, - ScreenshotUrls: screenshotUrls, + ManifestVersion: manifestVersion, + Id: id, + Slugs: slugs, + Name: itemName, + Type: itemType, + Description: description, + Services: services, + Mappings: mappings, + DataFields: dataFields, + InstallTimeoutSecs: installTimeoutSecs, + InstallCmdSteps: installCmdSteps, + UninstallTimeoutSecs: uninstallTimeoutSecs, + UninstallCmdSteps: uninstallCmdSteps, + UninstallFileNames: uninstallFileNames, + EstimatedSizeBytes: estimatedSizeBytes, + AvatarUrl: avatarUrl, + ScreenshotUrls: screenshotUrls, } } diff --git a/src/domain/entity/sslPair.go b/src/domain/entity/sslPair.go index 02280453c..f508ddd4f 100644 --- a/src/domain/entity/sslPair.go +++ b/src/domain/entity/sslPair.go @@ -9,26 +9,26 @@ import ( const EarlyRenewalThresholdHours int64 = 48 type SslPair struct { - Id valueObject.SslPairId `json:"sslPairId"` - VirtualHostsHostnames []valueObject.Fqdn `json:"virtualHostsHostnames"` - Certificate SslCertificate `json:"certificate"` - Key valueObject.SslPrivateKey `json:"key"` - ChainCertificates []SslCertificate `json:"chainCertificates"` + Id valueObject.SslPairId `json:"sslPairId"` + VirtualHostHostname valueObject.Fqdn `json:"virtualHostHostname"` + Certificate SslCertificate `json:"certificate"` + Key valueObject.SslPrivateKey `json:"key"` + ChainCertificates []SslCertificate `json:"chainCertificates"` } func NewSslPair( sslPairId valueObject.SslPairId, - virtualHostsHostnames []valueObject.Fqdn, + virtualHostHostname valueObject.Fqdn, certificate SslCertificate, key valueObject.SslPrivateKey, chainCertificates []SslCertificate, ) SslPair { return SslPair{ - Id: sslPairId, - VirtualHostsHostnames: virtualHostsHostnames, - Certificate: certificate, - Key: key, - ChainCertificates: chainCertificates, + Id: sslPairId, + VirtualHostHostname: virtualHostHostname, + Certificate: certificate, + Key: key, + ChainCertificates: chainCertificates, } } @@ -38,14 +38,10 @@ func (sslPair SslPair) IsPubliclyTrusted() bool { return false } - hoursToSeconds := int64(3600) - earlyRenewalThresholdSeconds := EarlyRenewalThresholdHours * hoursToSeconds - expirationDate := sslPair.Certificate.ExpiresAt.Int64() - expirationDateUnixTime := time.Unix(expirationDate, 0).UTC().Unix() + expirationDate := sslPair.Certificate.ExpiresAt.ReadAsGoTime().UTC() + earlyRenewalThreshold := time.Hour * time.Duration(EarlyRenewalThresholdHours) + renewalDeadline := expirationDate.Add(-earlyRenewalThreshold) - unixTimeToRenew := expirationDateUnixTime - earlyRenewalThresholdSeconds - unixTimeNow := time.Now().Unix() - shouldRenew := unixTimeNow >= unixTimeToRenew - - return !shouldRenew + currentTime := time.Now().UTC() + return currentTime.Before(renewalDeadline) } diff --git a/src/domain/entity/sslPair_test.go b/src/domain/entity/sslPair_test.go index 4a338508a..b0f47a847 100644 --- a/src/domain/entity/sslPair_test.go +++ b/src/domain/entity/sslPair_test.go @@ -84,9 +84,10 @@ ZrBUC3x7Z1Ex9qgz3p/Y/WxHDRrHDuuByGazDVhyDyXECWxpDYEK3g== if err != nil { t.Errorf("ExpectedNoErrorButGot: %s", err.Error()) } - vhostHostnames := []valueObject.Fqdn{testHostname} - sslPair := NewSslPair(pairId, vhostHostnames, certificate, privateKey, chainCertificates) + sslPair := NewSslPair( + pairId, testHostname, certificate, privateKey, chainCertificates, + ) if err != nil { t.Errorf("ExpectedNoErrorButGot: %s", err.Error()) } @@ -222,9 +223,10 @@ KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54= if err != nil { t.Errorf("ExpectedNoErrorButGot: %s", err.Error()) } - vhostHostnames := []valueObject.Fqdn{demoHostname} - sslPair := NewSslPair(pairId, vhostHostnames, certificate, privateKey, chainCertificates) + sslPair := NewSslPair( + pairId, demoHostname, certificate, privateKey, chainCertificates, + ) if err != nil { t.Errorf("ExpectedNoErrorButGot: %s", err.Error()) } diff --git a/src/domain/entity/unixFile.go b/src/domain/entity/unixFile.go index b7b6f882d..4e1b32dcd 100644 --- a/src/domain/entity/unixFile.go +++ b/src/domain/entity/unixFile.go @@ -48,3 +48,29 @@ func NewUnixFile( UpdatedAt: updatedAt, } } + +func (entity UnixFile) ToSimplified() SimplifiedUnixFile { + return SimplifiedUnixFile{ + Name: entity.Name, + Path: entity.Path, + MimeType: entity.MimeType, + } +} + +type SimplifiedUnixFile struct { + Name valueObject.UnixFileName `json:"name"` + Path valueObject.UnixFilePath `json:"path"` + MimeType valueObject.MimeType `json:"mimeType"` +} + +func NewSimplifiedUnixFile( + name valueObject.UnixFileName, + path valueObject.UnixFilePath, + mimeType valueObject.MimeType, +) SimplifiedUnixFile { + return SimplifiedUnixFile{ + Name: name, + Path: path, + MimeType: mimeType, + } +} diff --git a/src/domain/entity/virtualHost.go b/src/domain/entity/virtualHost.go index a901ec31e..b90df0786 100644 --- a/src/domain/entity/virtualHost.go +++ b/src/domain/entity/virtualHost.go @@ -3,10 +3,14 @@ package entity import "github.com/goinfinite/os/src/domain/valueObject" type VirtualHost struct { - Hostname valueObject.Fqdn `json:"hostname"` - Type valueObject.VirtualHostType `json:"type"` - RootDirectory valueObject.UnixFilePath `json:"rootDirectory"` - ParentHostname *valueObject.Fqdn `json:"parentHostname"` + Hostname valueObject.Fqdn `json:"hostname"` + Type valueObject.VirtualHostType `json:"type"` + RootDirectory valueObject.UnixFilePath `json:"rootDirectory"` + ParentHostname *valueObject.Fqdn `json:"parentHostname"` + IsPrimary bool `json:"isPrimary"` + IsWildcard bool `json:"isWildcard"` + AliasesHostnames []valueObject.Fqdn `json:"aliasesHostnames"` + CreatedAt valueObject.UnixTime `json:"createdAt"` } func NewVirtualHost( @@ -14,11 +18,19 @@ func NewVirtualHost( vhostType valueObject.VirtualHostType, rootDirectory valueObject.UnixFilePath, parentHostname *valueObject.Fqdn, + isPrimary bool, + isWildcard bool, + aliasesHostnames []valueObject.Fqdn, + createdAt valueObject.UnixTime, ) VirtualHost { return VirtualHost{ - Hostname: hostname, - Type: vhostType, - RootDirectory: rootDirectory, - ParentHostname: parentHostname, + Hostname: hostname, + Type: vhostType, + RootDirectory: rootDirectory, + ParentHostname: parentHostname, + IsPrimary: isPrimary, + IsWildcard: isWildcard, + AliasesHostnames: aliasesHostnames, + CreatedAt: createdAt, } } diff --git a/src/domain/repository/accountCmdRepo.go b/src/domain/repository/accountCmdRepo.go index d39ea4394..fb7830775 100644 --- a/src/domain/repository/accountCmdRepo.go +++ b/src/domain/repository/accountCmdRepo.go @@ -8,7 +8,7 @@ import ( type AccountCmdRepo interface { Create(dto.CreateAccount) (valueObject.AccountId, error) Delete(valueObject.AccountId) error - UpdatePassword(valueObject.AccountId, valueObject.Password) error + Update(dto.UpdateAccount) error UpdateApiKey(valueObject.AccountId) (valueObject.AccessTokenStr, error) CreateSecureAccessPublicKey( dto.CreateSecureAccessPublicKey, diff --git a/src/domain/repository/databaseQueryRepo.go b/src/domain/repository/databaseQueryRepo.go index 7aaff16e8..52ec1ab37 100644 --- a/src/domain/repository/databaseQueryRepo.go +++ b/src/domain/repository/databaseQueryRepo.go @@ -1,11 +1,11 @@ package repository import ( + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" - "github.com/goinfinite/os/src/domain/valueObject" ) type DatabaseQueryRepo interface { - Read() ([]entity.Database, error) - ReadByName(dbName valueObject.DatabaseName) (entity.Database, error) + Read(dto.ReadDatabasesRequest) (dto.ReadDatabasesResponse, error) + ReadFirst(dto.ReadDatabasesRequest) (entity.Database, error) } diff --git a/src/domain/repository/filesCmdRepo.go b/src/domain/repository/filesCmdRepo.go index 8b08c09e4..46dc696fc 100644 --- a/src/domain/repository/filesCmdRepo.go +++ b/src/domain/repository/filesCmdRepo.go @@ -13,6 +13,7 @@ type FilesCmdRepo interface { Extract(dto.ExtractUnixFiles) error Move(dto.MoveUnixFile) error UpdateContent(dto.UpdateUnixFileContent) error + UpdateOwnership(dto.UpdateUnixFileOwnership) error UpdatePermissions(dto.UpdateUnixFilePermissions) error Upload(dto.UploadUnixFiles) (dto.UploadProcessReport, error) } diff --git a/src/domain/repository/filesQueryRepo.go b/src/domain/repository/filesQueryRepo.go index 009b005a2..090acba89 100644 --- a/src/domain/repository/filesQueryRepo.go +++ b/src/domain/repository/filesQueryRepo.go @@ -1,11 +1,12 @@ package repository import ( + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/valueObject" ) type FilesQueryRepo interface { - Read(valueObject.UnixFilePath) ([]entity.UnixFile, error) + Read(dto.ReadFilesRequest) (dto.ReadFilesResponse, error) ReadFirst(valueObject.UnixFilePath) (entity.UnixFile, error) } diff --git a/src/domain/repository/mappingCmdRepo.go b/src/domain/repository/mappingCmdRepo.go index 4f9e0cfa5..6e9ba9ab0 100644 --- a/src/domain/repository/mappingCmdRepo.go +++ b/src/domain/repository/mappingCmdRepo.go @@ -7,11 +7,11 @@ import ( type MappingCmdRepo interface { Create(dto.CreateMapping) (valueObject.MappingId, error) + Update(dto.UpdateMapping) error Delete(valueObject.MappingId) error - DeleteAuto(valueObject.ServiceName) error - RecreateByServiceName( - valueObject.ServiceName, - valueObject.AccountId, - valueObject.IpAddress, - ) error + CreateSecurityRule( + dto.CreateMappingSecurityRule, + ) (valueObject.MappingSecurityRuleId, error) + UpdateSecurityRule(dto.UpdateMappingSecurityRule) error + DeleteSecurityRule(valueObject.MappingSecurityRuleId) error } diff --git a/src/domain/repository/mappingQueryRepo.go b/src/domain/repository/mappingQueryRepo.go index 7c92ea3e7..4bd3c5637 100644 --- a/src/domain/repository/mappingQueryRepo.go +++ b/src/domain/repository/mappingQueryRepo.go @@ -3,12 +3,15 @@ package repository import ( "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" - "github.com/goinfinite/os/src/domain/valueObject" ) type MappingQueryRepo interface { - ReadById(id valueObject.MappingId) (entity.Mapping, error) - ReadByHostname(hostname valueObject.Fqdn) ([]entity.Mapping, error) - ReadByServiceName(serviceName valueObject.ServiceName) ([]entity.Mapping, error) - ReadWithMappings() ([]dto.VirtualHostWithMappings, error) + Read(dto.ReadMappingsRequest) (dto.ReadMappingsResponse, error) + ReadFirst(dto.ReadMappingsRequest) (entity.Mapping, error) + ReadSecurityRule( + dto.ReadMappingSecurityRulesRequest, + ) (dto.ReadMappingSecurityRulesResponse, error) + ReadFirstSecurityRule( + dto.ReadMappingSecurityRulesRequest, + ) (entity.MappingSecurityRule, error) } diff --git a/src/domain/repository/o11yQueryRepo.go b/src/domain/repository/o11yQueryRepo.go index c0417d321..17e00acb4 100644 --- a/src/domain/repository/o11yQueryRepo.go +++ b/src/domain/repository/o11yQueryRepo.go @@ -5,5 +5,5 @@ import ( ) type O11yQueryRepo interface { - ReadOverview() (entity.O11yOverview, error) + ReadOverview(withResourceUsage bool) (entity.O11yOverview, error) } diff --git a/src/domain/repository/sslCmdRepo.go b/src/domain/repository/sslCmdRepo.go index 9c7c2be9d..b447d72fa 100644 --- a/src/domain/repository/sslCmdRepo.go +++ b/src/domain/repository/sslCmdRepo.go @@ -7,7 +7,6 @@ import ( type SslCmdRepo interface { Create(dto.CreateSslPair) (valueObject.SslPairId, error) + CreatePubliclyTrusted(dto.CreatePubliclyTrustedSslPair) (valueObject.SslPairId, error) Delete(valueObject.SslPairId) error - ReplaceWithValidSsl(dto.ReplaceWithValidSsl) error - DeleteSslPairVhosts(dto.DeleteSslPairVhosts) error } diff --git a/src/domain/repository/sslQueryRepo.go b/src/domain/repository/sslQueryRepo.go index 8f6eb346a..b23d47890 100644 --- a/src/domain/repository/sslQueryRepo.go +++ b/src/domain/repository/sslQueryRepo.go @@ -1,11 +1,11 @@ package repository import ( + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" - "github.com/goinfinite/os/src/domain/valueObject" ) type SslQueryRepo interface { - Read() ([]entity.SslPair, error) - ReadById(valueObject.SslPairId) (entity.SslPair, error) + Read(dto.ReadSslPairsRequest) (dto.ReadSslPairsResponse, error) + ReadFirst(dto.ReadSslPairsRequest) (entity.SslPair, error) } diff --git a/src/domain/repository/virtualHostCmdRepo.go b/src/domain/repository/virtualHostCmdRepo.go index 0e120bf4c..9b880bd0d 100644 --- a/src/domain/repository/virtualHostCmdRepo.go +++ b/src/domain/repository/virtualHostCmdRepo.go @@ -2,10 +2,11 @@ package repository import ( "github.com/goinfinite/os/src/domain/dto" - "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" ) type VirtualHostCmdRepo interface { - Create(createDto dto.CreateVirtualHost) error - Delete(vhost entity.VirtualHost) error + Create(dto.CreateVirtualHost) error + Update(dto.UpdateVirtualHost) error + Delete(valueObject.Fqdn) error } diff --git a/src/domain/repository/virtualHostQueryRepo.go b/src/domain/repository/virtualHostQueryRepo.go index ba5189875..8772b5991 100644 --- a/src/domain/repository/virtualHostQueryRepo.go +++ b/src/domain/repository/virtualHostQueryRepo.go @@ -1,11 +1,12 @@ package repository import ( + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" - "github.com/goinfinite/os/src/domain/valueObject" ) type VirtualHostQueryRepo interface { - Read() ([]entity.VirtualHost, error) - ReadByHostname(hostname valueObject.Fqdn) (entity.VirtualHost, error) + Read(dto.ReadVirtualHostsRequest) (dto.ReadVirtualHostsResponse, error) + ReadFirst(dto.ReadVirtualHostsRequest) (entity.VirtualHost, error) + ReadFirstWithMappings(dto.ReadVirtualHostsRequest) (dto.VirtualHostWithMappings, error) } diff --git a/src/domain/useCase/compressUnixFiles.go b/src/domain/useCase/compressUnixFiles.go index c275f79c1..f8483e338 100644 --- a/src/domain/useCase/compressUnixFiles.go +++ b/src/domain/useCase/compressUnixFiles.go @@ -16,10 +16,13 @@ func CompressUnixFiles( ) (dto.CompressionProcessReport, error) { compressionProcessReport, err := filesCmdRepo.Compress(compressDto) if err != nil { - slog.Error("CompressUnixFilesError", slog.Any("err", err)) + slog.Error("CompressUnixFilesError", slog.String("err", err.Error())) return compressionProcessReport, errors.New("CompressUnixFilesInfraError") } NewCreateSecurityActivityRecord(activityRecordCmdRepo).CompressUnixFile(compressDto) + + NormalizeKnownUnixFilePathPermissions(filesCmdRepo, compressDto.DestinationPath) + return compressionProcessReport, nil } diff --git a/src/domain/useCase/copyUnixFile.go b/src/domain/useCase/copyUnixFile.go index c4d50c812..825541c71 100644 --- a/src/domain/useCase/copyUnixFile.go +++ b/src/domain/useCase/copyUnixFile.go @@ -16,7 +16,7 @@ func CopyUnixFile( ) error { err := filesCmdRepo.Copy(copyDto) if err != nil { - slog.Error("CopyUnixFileInfraError", slog.Any("err", err)) + slog.Error("CopyUnixFileInfraError", slog.String("err", err.Error())) return errors.New("CopyUnixFileInfraError") } diff --git a/src/domain/useCase/createAccount.go b/src/domain/useCase/createAccount.go index 99e47bee9..ccc619df9 100644 --- a/src/domain/useCase/createAccount.go +++ b/src/domain/useCase/createAccount.go @@ -24,7 +24,7 @@ func CreateAccount( accountId, err := accountCmdRepo.Create(createDto) if err != nil { - slog.Error("CreateAccountError", slog.Any("error", err)) + slog.Error("CreateAccountError", slog.String("err", err.Error())) return errors.New("CreateAccountInfraError") } diff --git a/src/domain/useCase/createActivityRecord.go b/src/domain/useCase/createActivityRecord.go index 8b9921f5b..36a3b5fa4 100644 --- a/src/domain/useCase/createActivityRecord.go +++ b/src/domain/useCase/createActivityRecord.go @@ -31,7 +31,7 @@ func (uc *CreateSecurityActivityRecord) createActivityRecord( slog.Debug( "CreateSecurityActivityRecordError", slog.Any("createDto", createDto), - slog.Any("error", err), + slog.String("err", err.Error()), ) } } @@ -152,17 +152,15 @@ func (uc *CreateSecurityActivityRecord) CreateCron( createDto dto.CreateCron, cronId valueObject.CronId, ) { - operatorAccountId := createDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("CronCreated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewCronSri(operatorAccountId, cronId), + valueObject.NewCronSri(createDto.OperatorAccountId, cronId), }, RecordDetails: createDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &createDto.OperatorAccountId, OperatorIpAddress: &createDto.OperatorIpAddress, } @@ -170,17 +168,15 @@ func (uc *CreateSecurityActivityRecord) CreateCron( } func (uc *CreateSecurityActivityRecord) UpdateCron(updateDto dto.UpdateCron) { - operatorAccountId := updateDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("CronUpdated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewCronSri(operatorAccountId, updateDto.Id), + valueObject.NewCronSri(updateDto.OperatorAccountId, updateDto.Id), }, RecordDetails: updateDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &updateDto.OperatorAccountId, OperatorIpAddress: &updateDto.OperatorIpAddress, } @@ -188,16 +184,14 @@ func (uc *CreateSecurityActivityRecord) UpdateCron(updateDto dto.UpdateCron) { } func (uc *CreateSecurityActivityRecord) DeleteCron(deleteDto dto.DeleteCron) { - operatorAccountId := deleteDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("CronDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewCronSri(operatorAccountId, *deleteDto.Id), + valueObject.NewCronSri(deleteDto.OperatorAccountId, *deleteDto.Id), }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &deleteDto.OperatorAccountId, OperatorIpAddress: &deleteDto.OperatorIpAddress, } @@ -205,17 +199,15 @@ func (uc *CreateSecurityActivityRecord) DeleteCron(deleteDto dto.DeleteCron) { } func (uc *CreateSecurityActivityRecord) CreateDatabase(createDto dto.CreateDatabase) { - operatorAccountId := createDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("DatabaseCreated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewDatabaseSri(operatorAccountId, createDto.DatabaseName), + valueObject.NewDatabaseSri(createDto.OperatorAccountId, createDto.DatabaseName), }, RecordDetails: createDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &createDto.OperatorAccountId, OperatorIpAddress: &createDto.OperatorIpAddress, } @@ -223,16 +215,14 @@ func (uc *CreateSecurityActivityRecord) CreateDatabase(createDto dto.CreateDatab } func (uc *CreateSecurityActivityRecord) DeleteDatabase(deleteDto dto.DeleteDatabase) { - operatorAccountId := deleteDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("DatabaseDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewDatabaseSri(operatorAccountId, deleteDto.DatabaseName), + valueObject.NewDatabaseSri(deleteDto.OperatorAccountId, deleteDto.DatabaseName), }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &deleteDto.OperatorAccountId, OperatorIpAddress: &deleteDto.OperatorIpAddress, } @@ -242,17 +232,15 @@ func (uc *CreateSecurityActivityRecord) DeleteDatabase(deleteDto dto.DeleteDatab func (uc *CreateSecurityActivityRecord) CreateDatabaseUser( createDto dto.CreateDatabaseUser, ) { - operatorAccountId := createDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("DatabaseUserCreated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewDatabaseSri(operatorAccountId, createDto.DatabaseName), + valueObject.NewDatabaseSri(createDto.OperatorAccountId, createDto.DatabaseName), }, RecordDetails: createDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &createDto.OperatorAccountId, OperatorIpAddress: &createDto.OperatorIpAddress, } @@ -262,17 +250,15 @@ func (uc *CreateSecurityActivityRecord) CreateDatabaseUser( func (uc *CreateSecurityActivityRecord) DeleteDatabaseUser( deleteDto dto.DeleteDatabaseUser, ) { - operatorAccountId := deleteDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("DatabaseUserDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewDatabaseSri(operatorAccountId, deleteDto.DatabaseName), - valueObject.NewDatabaseUserSri(operatorAccountId, deleteDto.Username), + valueObject.NewDatabaseSri(deleteDto.OperatorAccountId, deleteDto.DatabaseName), + valueObject.NewDatabaseUserSri(deleteDto.OperatorAccountId, deleteDto.Username), }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &deleteDto.OperatorAccountId, OperatorIpAddress: &deleteDto.OperatorIpAddress, } @@ -282,19 +268,17 @@ func (uc *CreateSecurityActivityRecord) DeleteDatabaseUser( func (uc *CreateSecurityActivityRecord) InstallMarketplaceCatalogItem( installDto dto.InstallMarketplaceCatalogItem, ) { - operatorAccountId := installDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("MarketplaceCatalogItemInstalled") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ valueObject.NewMarketplaceCatalogItemSri( - operatorAccountId, installDto.Id, installDto.Slug, + installDto.OperatorAccountId, installDto.Id, installDto.Slug, ), }, RecordDetails: installDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &installDto.OperatorAccountId, OperatorIpAddress: &installDto.OperatorIpAddress, } @@ -304,18 +288,16 @@ func (uc *CreateSecurityActivityRecord) InstallMarketplaceCatalogItem( func (uc *CreateSecurityActivityRecord) DeleteMarketplaceInstalledItem( installDto dto.DeleteMarketplaceInstalledItem, ) { - operatorAccountId := installDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("MarketplaceInstalledItemDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ valueObject.NewMarketplaceInstalledItemSri( - operatorAccountId, installDto.InstalledId, + installDto.OperatorAccountId, installDto.InstalledId, ), }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &installDto.OperatorAccountId, OperatorIpAddress: &installDto.OperatorIpAddress, } @@ -326,14 +308,12 @@ func (uc *CreateSecurityActivityRecord) UpdatePhpConfigs( updateDto dto.UpdatePhpConfigs, configType string, ) { - operatorAccountId := updateDto.OperatorAccountId - createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewPhpRuntimeSri(operatorAccountId, updateDto.Hostname), + valueObject.NewPhpRuntimeSri(updateDto.OperatorAccountId, updateDto.Hostname), }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &updateDto.OperatorAccountId, OperatorIpAddress: &updateDto.OperatorIpAddress, } @@ -361,17 +341,15 @@ func (uc *CreateSecurityActivityRecord) UpdatePhpConfigs( func (uc *CreateSecurityActivityRecord) CreateInstallableService( createDto dto.CreateInstallableService, ) { - operatorAccountId := createDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("InstallableServiceCreated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewInstallableServiceSri(operatorAccountId, createDto.Name), + valueObject.NewInstallableServiceSri(createDto.OperatorAccountId, createDto.Name), }, RecordDetails: createDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &createDto.OperatorAccountId, OperatorIpAddress: &createDto.OperatorIpAddress, } @@ -381,17 +359,15 @@ func (uc *CreateSecurityActivityRecord) CreateInstallableService( func (uc *CreateSecurityActivityRecord) CreateCustomService( createDto dto.CreateCustomService, ) { - operatorAccountId := createDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("CustomServiceCreated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewCustomServiceSri(operatorAccountId, createDto.Name), + valueObject.NewCustomServiceSri(createDto.OperatorAccountId, createDto.Name), }, RecordDetails: createDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &createDto.OperatorAccountId, OperatorIpAddress: &createDto.OperatorIpAddress, } @@ -399,17 +375,15 @@ func (uc *CreateSecurityActivityRecord) CreateCustomService( } func (uc *CreateSecurityActivityRecord) UpdateService(updateDto dto.UpdateService) { - operatorAccountId := updateDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("ServiceUpdated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewInstalledServiceSri(operatorAccountId, updateDto.Name), + valueObject.NewInstalledServiceSri(updateDto.OperatorAccountId, updateDto.Name), }, RecordDetails: updateDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &updateDto.OperatorAccountId, OperatorIpAddress: &updateDto.OperatorIpAddress, } @@ -417,16 +391,14 @@ func (uc *CreateSecurityActivityRecord) UpdateService(updateDto dto.UpdateServic } func (uc *CreateSecurityActivityRecord) DeleteService(deleteDto dto.DeleteService) { - operatorAccountId := deleteDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("ServiceDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewInstalledServiceSri(operatorAccountId, deleteDto.Name), + valueObject.NewInstalledServiceSri(deleteDto.OperatorAccountId, deleteDto.Name), }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &deleteDto.OperatorAccountId, OperatorIpAddress: &deleteDto.OperatorIpAddress, } @@ -437,14 +409,12 @@ func (uc *CreateSecurityActivityRecord) CreateSslPair( createDto dto.CreateSslPair, sslPairId valueObject.SslPairId, ) { - operatorAccountId := createDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("SslPairCreated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewSslSri(operatorAccountId, sslPairId), + valueObject.NewSslSri(createDto.OperatorAccountId, sslPairId), }, RecordDetails: map[string]interface{}{ "virtualHostHostnames": createDto.VirtualHostsHostnames, @@ -456,24 +426,41 @@ func (uc *CreateSecurityActivityRecord) CreateSslPair( "expiresAt": createDto.Certificate.ExpiresAt, }, }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &createDto.OperatorAccountId, OperatorIpAddress: &createDto.OperatorIpAddress, } uc.createActivityRecord(createRecordDto) } -func (uc *CreateSecurityActivityRecord) DeleteSslPair(deleteDto dto.DeleteSslPair) { - operatorAccountId := deleteDto.OperatorAccountId +func (uc *CreateSecurityActivityRecord) CreatePubliclyTrustedSslPair( + createDto dto.CreatePubliclyTrustedSslPair, + sslPairId valueObject.SslPairId, +) { + recordCode, _ := valueObject.NewActivityRecordCode("PubliclyTrustedSslPairCreated") + createRecordDto := dto.CreateActivityRecord{ + RecordLevel: uc.recordLevel, + RecordCode: recordCode, + AffectedResources: []valueObject.SystemResourceIdentifier{ + valueObject.NewSslSri(createDto.OperatorAccountId, sslPairId), + }, + RecordDetails: createDto, + OperatorAccountId: &createDto.OperatorAccountId, + OperatorIpAddress: &createDto.OperatorIpAddress, + } + uc.createActivityRecord(createRecordDto) +} + +func (uc *CreateSecurityActivityRecord) DeleteSslPair(deleteDto dto.DeleteSslPair) { recordCode, _ := valueObject.NewActivityRecordCode("SslPairDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewSslSri(operatorAccountId, deleteDto.SslPairId), + valueObject.NewSslSri(deleteDto.OperatorAccountId, deleteDto.SslPairId), }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &deleteDto.OperatorAccountId, OperatorIpAddress: &deleteDto.OperatorIpAddress, } @@ -483,19 +470,17 @@ func (uc *CreateSecurityActivityRecord) DeleteSslPair(deleteDto dto.DeleteSslPai func (uc *CreateSecurityActivityRecord) DeleteSslPairVhosts( deleteDto dto.DeleteSslPairVhosts, ) { - operatorAccountId := deleteDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("SslPairVhostsDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewSslSri(operatorAccountId, deleteDto.SslPairId), + valueObject.NewSslSri(deleteDto.OperatorAccountId, deleteDto.SslPairId), }, RecordDetails: map[string]interface{}{ "sslPairVhosts": deleteDto.VirtualHostsHostnames, }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &deleteDto.OperatorAccountId, OperatorIpAddress: &deleteDto.OperatorIpAddress, } @@ -505,36 +490,50 @@ func (uc *CreateSecurityActivityRecord) DeleteSslPairVhosts( func (uc *CreateSecurityActivityRecord) CreateVirtualHost( createDto dto.CreateVirtualHost, ) { - operatorAccountId := createDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("VirtualHostCreated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewVirtualHostSri(operatorAccountId, createDto.Hostname), + valueObject.NewVirtualHostSri(createDto.OperatorAccountId, createDto.Hostname), }, RecordDetails: createDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &createDto.OperatorAccountId, OperatorIpAddress: &createDto.OperatorIpAddress, } uc.createActivityRecord(createRecordDto) } +func (uc *CreateSecurityActivityRecord) UpdateVirtualHost( + updateDto dto.UpdateVirtualHost, +) { + recordCode, _ := valueObject.NewActivityRecordCode("VirtualHostUpdated") + createRecordDto := dto.CreateActivityRecord{ + RecordLevel: uc.recordLevel, + RecordCode: recordCode, + AffectedResources: []valueObject.SystemResourceIdentifier{ + valueObject.NewVirtualHostSri(updateDto.OperatorAccountId, updateDto.Hostname), + }, + RecordDetails: updateDto, + OperatorAccountId: &updateDto.OperatorAccountId, + OperatorIpAddress: &updateDto.OperatorIpAddress, + } + + uc.createActivityRecord(createRecordDto) +} + func (uc *CreateSecurityActivityRecord) DeleteVirtualHost( deleteDto dto.DeleteVirtualHost, ) { - operatorAccountId := deleteDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("VirtualHostDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewVirtualHostSri(operatorAccountId, deleteDto.Hostname), + valueObject.NewVirtualHostSri(deleteDto.OperatorAccountId, deleteDto.Hostname), }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &deleteDto.OperatorAccountId, OperatorIpAddress: &deleteDto.OperatorIpAddress, } @@ -545,34 +544,46 @@ func (uc *CreateSecurityActivityRecord) CreateMapping( createDto dto.CreateMapping, mappingId valueObject.MappingId, ) { - operatorAccountId := createDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("MappingCreated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewMappingSri(operatorAccountId, mappingId), + valueObject.NewMappingSri(createDto.OperatorAccountId, mappingId), }, RecordDetails: createDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &createDto.OperatorAccountId, OperatorIpAddress: &createDto.OperatorIpAddress, } uc.createActivityRecord(createRecordDto) } -func (uc *CreateSecurityActivityRecord) DeleteMapping(deleteDto dto.DeleteMapping) { - operatorAccountId := deleteDto.OperatorAccountId +func (uc *CreateSecurityActivityRecord) UpdateMapping(updateDto dto.UpdateMapping) { + recordCode, _ := valueObject.NewActivityRecordCode("MappingUpdated") + createRecordDto := dto.CreateActivityRecord{ + RecordLevel: uc.recordLevel, + RecordCode: recordCode, + AffectedResources: []valueObject.SystemResourceIdentifier{ + valueObject.NewMappingSri(updateDto.OperatorAccountId, updateDto.Id), + }, + RecordDetails: updateDto, + OperatorAccountId: &updateDto.OperatorAccountId, + OperatorIpAddress: &updateDto.OperatorIpAddress, + } + uc.createActivityRecord(createRecordDto) +} + +func (uc *CreateSecurityActivityRecord) DeleteMapping(deleteDto dto.DeleteMapping) { recordCode, _ := valueObject.NewActivityRecordCode("MappingDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewMappingSri(operatorAccountId, deleteDto.MappingId), + valueObject.NewMappingSri(deleteDto.OperatorAccountId, deleteDto.MappingId), }, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &deleteDto.OperatorAccountId, OperatorIpAddress: &deleteDto.OperatorIpAddress, } @@ -580,20 +591,13 @@ func (uc *CreateSecurityActivityRecord) DeleteMapping(deleteDto dto.DeleteMappin } func (uc *CreateSecurityActivityRecord) CreateUnixFile(createDto dto.CreateUnixFile) { - operatorAccountId := createDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("UnixFileCreated") createRecordDto := dto.CreateActivityRecord{ - RecordLevel: uc.recordLevel, - RecordCode: recordCode, - AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewUnixFileSri(operatorAccountId, createDto.FilePath), - }, - RecordDetails: map[string]interface{}{ - "permissions": createDto.Permissions, - "mimeType": createDto.MimeType, - }, - OperatorAccountId: &operatorAccountId, + RecordLevel: uc.recordLevel, + RecordCode: recordCode, + AffectedResources: []valueObject.SystemResourceIdentifier{}, + RecordDetails: createDto, + OperatorAccountId: &createDto.OperatorAccountId, OperatorIpAddress: &createDto.OperatorIpAddress, } @@ -601,46 +605,33 @@ func (uc *CreateSecurityActivityRecord) CreateUnixFile(createDto dto.CreateUnixF } func (uc *CreateSecurityActivityRecord) DeleteUnixFiles(deleteDto dto.DeleteUnixFiles) { - operatorAccountId := deleteDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("UnixFileDeleted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, - RecordDetails: map[string]bool{"shouldHardDelete": deleteDto.HardDelete}, - OperatorAccountId: &operatorAccountId, + AffectedResources: []valueObject.SystemResourceIdentifier{}, + RecordDetails: deleteDto, + OperatorAccountId: &deleteDto.OperatorAccountId, OperatorIpAddress: &deleteDto.OperatorIpAddress, } - affectedResources := []valueObject.SystemResourceIdentifier{} - for _, fileToDelete := range deleteDto.SourcePaths { - unixFileSri := valueObject.NewUnixFileSri(operatorAccountId, fileToDelete) - affectedResources = append(affectedResources, unixFileSri) - } - createRecordDto.AffectedResources = affectedResources - uc.createActivityRecord(createRecordDto) } func (uc *CreateSecurityActivityRecord) UpdateUnixFiles(updateDto dto.UpdateUnixFiles) { - operatorAccountId := updateDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("UnixFileUpdated") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, - OperatorAccountId: &operatorAccountId, + AffectedResources: []valueObject.SystemResourceIdentifier{}, + RecordDetails: updateDto, + OperatorAccountId: &updateDto.OperatorAccountId, OperatorIpAddress: &updateDto.OperatorIpAddress, } - affectedResources := []valueObject.SystemResourceIdentifier{} - for _, fileToDelete := range updateDto.SourcePaths { - unixFileSri := valueObject.NewUnixFileSri(operatorAccountId, fileToDelete) - affectedResources = append(affectedResources, unixFileSri) + details := map[string]interface{}{ + "sourcePaths": updateDto.SourcePaths, } - createRecordDto.AffectedResources = affectedResources - - details := map[string]interface{}{} if updateDto.DestinationPath != nil { details["destinationPath"] = updateDto.DestinationPath } @@ -656,20 +647,13 @@ func (uc *CreateSecurityActivityRecord) UpdateUnixFiles(updateDto dto.UpdateUnix } func (uc *CreateSecurityActivityRecord) CopyUnixFile(copyDto dto.CopyUnixFile) { - operatorAccountId := copyDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("UnixFileCopied") createRecordDto := dto.CreateActivityRecord{ - RecordLevel: uc.recordLevel, - RecordCode: recordCode, - AffectedResources: []valueObject.SystemResourceIdentifier{ - valueObject.NewUnixFileSri(operatorAccountId, copyDto.SourcePath), - }, - RecordDetails: map[string]interface{}{ - "destinationPath": copyDto.DestinationPath, - "shouldOverwrite": copyDto.ShouldOverwrite, - }, - OperatorAccountId: &operatorAccountId, + RecordLevel: uc.recordLevel, + RecordCode: recordCode, + AffectedResources: []valueObject.SystemResourceIdentifier{}, + RecordDetails: copyDto, + OperatorAccountId: ©Dto.OperatorAccountId, OperatorIpAddress: ©Dto.OperatorIpAddress, } @@ -679,41 +663,28 @@ func (uc *CreateSecurityActivityRecord) CopyUnixFile(copyDto dto.CopyUnixFile) { func (uc *CreateSecurityActivityRecord) CompressUnixFile( compressDto dto.CompressUnixFiles, ) { - operatorAccountId := compressDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("UnixFilesCompressed") createRecordDto := dto.CreateActivityRecord{ - RecordLevel: uc.recordLevel, - RecordCode: recordCode, - RecordDetails: map[string]interface{}{ - "destinationPath": compressDto.DestinationPath, - "compressionType": compressDto.CompressionType, - }, - OperatorAccountId: &operatorAccountId, + RecordLevel: uc.recordLevel, + RecordCode: recordCode, + AffectedResources: []valueObject.SystemResourceIdentifier{}, + RecordDetails: compressDto, + OperatorAccountId: &compressDto.OperatorAccountId, OperatorIpAddress: &compressDto.OperatorIpAddress, } - affectedResources := []valueObject.SystemResourceIdentifier{} - for _, fileToDelete := range compressDto.SourcePaths { - unixFileSri := valueObject.NewUnixFileSri(operatorAccountId, fileToDelete) - affectedResources = append(affectedResources, unixFileSri) - } - createRecordDto.AffectedResources = affectedResources - uc.createActivityRecord(createRecordDto) } func (uc *CreateSecurityActivityRecord) ExtractUnixFile( extractDto dto.ExtractUnixFiles, ) { - operatorAccountId := extractDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("UnixFileExtracted") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, RecordDetails: extractDto, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &extractDto.OperatorAccountId, OperatorIpAddress: &extractDto.OperatorIpAddress, } @@ -723,13 +694,11 @@ func (uc *CreateSecurityActivityRecord) ExtractUnixFile( func (uc *CreateSecurityActivityRecord) UploadUnixFiles( uploadDto dto.UploadUnixFiles, ) { - operatorAccountId := uploadDto.OperatorAccountId - recordCode, _ := valueObject.NewActivityRecordCode("UnixFilesUploaded") createRecordDto := dto.CreateActivityRecord{ RecordLevel: uc.recordLevel, RecordCode: recordCode, - OperatorAccountId: &operatorAccountId, + OperatorAccountId: &uploadDto.OperatorAccountId, OperatorIpAddress: &uploadDto.OperatorIpAddress, } @@ -745,3 +714,57 @@ func (uc *CreateSecurityActivityRecord) UploadUnixFiles( uc.createActivityRecord(createRecordDto) } + +func (uc *CreateSecurityActivityRecord) CreateMappingSecurityRule( + createDto dto.CreateMappingSecurityRule, + mappingSecurityRuleId valueObject.MappingSecurityRuleId, +) { + recordCode, _ := valueObject.NewActivityRecordCode("MappingSecurityRuleCreated") + createRecordDto := dto.CreateActivityRecord{ + RecordLevel: uc.recordLevel, + RecordCode: recordCode, + AffectedResources: []valueObject.SystemResourceIdentifier{ + valueObject.NewMappingSecurityRuleSri(createDto.OperatorAccountId, mappingSecurityRuleId), + }, + RecordDetails: createDto, + OperatorAccountId: &createDto.OperatorAccountId, + OperatorIpAddress: &createDto.OperatorIpAddress, + } + + uc.createActivityRecord(createRecordDto) +} + +func (uc *CreateSecurityActivityRecord) UpdateMappingSecurityRule( + updateDto dto.UpdateMappingSecurityRule, +) { + recordCode, _ := valueObject.NewActivityRecordCode("MappingSecurityRuleUpdated") + createRecordDto := dto.CreateActivityRecord{ + RecordLevel: uc.recordLevel, + RecordCode: recordCode, + AffectedResources: []valueObject.SystemResourceIdentifier{ + valueObject.NewMappingSecurityRuleSri(updateDto.OperatorAccountId, updateDto.Id), + }, + RecordDetails: updateDto, + OperatorAccountId: &updateDto.OperatorAccountId, + OperatorIpAddress: &updateDto.OperatorIpAddress, + } + + uc.createActivityRecord(createRecordDto) +} + +func (uc *CreateSecurityActivityRecord) DeleteMappingSecurityRule( + deleteDto dto.DeleteMappingSecurityRule, +) { + recordCode, _ := valueObject.NewActivityRecordCode("MappingSecurityRuleDeleted") + createRecordDto := dto.CreateActivityRecord{ + RecordLevel: uc.recordLevel, + RecordCode: recordCode, + AffectedResources: []valueObject.SystemResourceIdentifier{ + valueObject.NewMappingSecurityRuleSri(deleteDto.OperatorAccountId, deleteDto.SecurityRuleId), + }, + OperatorAccountId: &deleteDto.OperatorAccountId, + OperatorIpAddress: &deleteDto.OperatorIpAddress, + } + + uc.createActivityRecord(createRecordDto) +} diff --git a/src/domain/useCase/createCron.go b/src/domain/useCase/createCron.go index 371fb9d73..37282bd0b 100644 --- a/src/domain/useCase/createCron.go +++ b/src/domain/useCase/createCron.go @@ -15,7 +15,7 @@ func CreateCron( ) error { cronId, err := cronCmdRepo.Create(createDto) if err != nil { - slog.Error("CreateCronError", slog.Any("err", err)) + slog.Error("CreateCronError", slog.String("err", err.Error())) return errors.New("CreateCronInfraError") } diff --git a/src/domain/useCase/createCustomService.go b/src/domain/useCase/createCustomService.go index 3e2f33cb9..8bd1508b4 100644 --- a/src/domain/useCase/createCustomService.go +++ b/src/domain/useCase/createCustomService.go @@ -9,45 +9,67 @@ import ( "github.com/goinfinite/os/src/domain/valueObject" ) -func createFirstMapping( +func CreateServiceAutoMapping( vhostQueryRepo repository.VirtualHostQueryRepo, - mappingQueryRepo repository.MappingQueryRepo, mappingCmdRepo repository.MappingCmdRepo, serviceName valueObject.ServiceName, + mappingHostname *valueObject.Fqdn, + mappingPath *valueObject.MappingPath, + mappingUpgradeInsecureRequests *bool, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) error { - vhosts, err := vhostQueryRepo.Read() - if err != nil { - return errors.New("VhostsNotFound") + if mappingHostname == nil { + isPrimary := true + primaryVirtualHost, err := vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + IsPrimary: &isPrimary, + }) + if err != nil { + return errors.New("ReadPrimaryVirtualHostError: " + err.Error()) + } + mappingHostname = &primaryVirtualHost.Hostname } - primaryVhost := vhosts[0] - primaryVhostMappings, err := mappingQueryRepo.ReadByHostname( - primaryVhost.Hostname, + withMappings := true + vhostWithMappings, err := vhostQueryRepo.ReadFirstWithMappings(dto.ReadVirtualHostsRequest{ + Hostname: mappingHostname, + WithMappings: &withMappings, + }, ) if err != nil { - slog.Error("ReadPrimaryVhostMappingsError", slog.Any("error", err)) - return errors.New("ReadPrimaryVhostMappingsInfraError") - } - if len(primaryVhostMappings) != 0 { - return nil + return errors.New("ReadFirstVirtualHostWithMappingsError: " + err.Error()) } - mappingPath, _ := valueObject.NewMappingPath("/") - matchPattern, _ := valueObject.NewMappingMatchPattern("begins-with") - targetType, _ := valueObject.NewMappingTargetType("service") - targetValue, _ := valueObject.NewMappingTargetValue(serviceName.String(), targetType) + if mappingPath == nil { + rootPath, _ := valueObject.NewMappingPath("/") + mappingPath = &rootPath + } + for _, mappingEntity := range vhostWithMappings.Mappings { + if mappingEntity.Path == *mappingPath { + slog.Debug( + "MappingAlreadyExists", + slog.String("method", "CreateServiceAutoMapping"), + slog.String("hostname", mappingHostname.String()), + slog.String("path", mappingPath.String()), + ) + return nil + } + } - createMappingDto := dto.NewCreateMapping( - primaryVhost.Hostname, mappingPath, matchPattern, targetType, &targetValue, nil, - operatorAccountId, operatorIpAddress, + targetValue, err := valueObject.NewMappingTargetValue( + serviceName.String(), valueObject.MappingTargetTypeService, ) + if err != nil { + return errors.New("NewMappingTargetValueError: " + err.Error()) + } - _, err = mappingCmdRepo.Create(createMappingDto) + _, err = mappingCmdRepo.Create(dto.NewCreateMapping( + *mappingHostname, *mappingPath, valueObject.MappingMatchPatternBeginsWith, + valueObject.MappingTargetTypeService, &targetValue, nil, + mappingUpgradeInsecureRequests, nil, operatorAccountId, operatorIpAddress, + )) if err != nil { - slog.Error("CreateServiceMappingError", slog.Any("error", err)) - return errors.New("CreateServiceMappingInfraError") + return errors.New("CreateServiceMappingInfraError: " + err.Error()) } return nil @@ -56,16 +78,14 @@ func createFirstMapping( func CreateCustomService( servicesQueryRepo repository.ServicesQueryRepo, servicesCmdRepo repository.ServicesCmdRepo, - mappingQueryRepo repository.MappingQueryRepo, - mappingCmdRepo repository.MappingCmdRepo, vhostQueryRepo repository.VirtualHostQueryRepo, + mappingCmdRepo repository.MappingCmdRepo, activityRecordCmdRepo repository.ActivityRecordCmdRepo, createDto dto.CreateCustomService, ) error { - readFirstInstalledRequestDto := dto.ReadFirstInstalledServiceItemsRequest{ - ServiceName: &createDto.Name, - } - _, err := servicesQueryRepo.ReadFirstInstalledItem(readFirstInstalledRequestDto) + _, err := servicesQueryRepo.ReadFirstInstalledItem( + dto.ReadFirstInstalledServiceItemsRequest{ServiceName: &createDto.Name}, + ) if err == nil { return errors.New("ServiceAlreadyInstalled") } @@ -75,9 +95,13 @@ func CreateCustomService( createDto.Version = &defaultVersion } + if createDto.Type == valueObject.ServiceTypeSystem { + return errors.New("SystemServiceCannotBeCreated") + } + err = servicesCmdRepo.CreateCustom(createDto) if err != nil { - slog.Error("CreateCustomServiceError", slog.Any("error", err)) + slog.Error("CreateCustomServiceError", slog.String("err", err.Error())) return errors.New("CreateCustomServiceInfraError") } @@ -88,13 +112,20 @@ func CreateCustomService( return nil } - serviceTypeStr := createDto.Type.String() - if serviceTypeStr != "runtime" && serviceTypeStr != "application" { + if len(createDto.PortBindings) == 0 { + slog.Debug("AutoCreateMappingSkipped", slog.String("reason", "PortBindingsIsEmpty")) return nil } - return createFirstMapping( - vhostQueryRepo, mappingQueryRepo, mappingCmdRepo, createDto.Name, + err = CreateServiceAutoMapping( + vhostQueryRepo, mappingCmdRepo, createDto.Name, createDto.MappingHostname, + createDto.MappingPath, createDto.MappingUpgradeInsecureRequests, createDto.OperatorAccountId, createDto.OperatorIpAddress, ) + if err != nil { + slog.Error("AutoCreateMappingError", slog.String("err", err.Error())) + return errors.New("AutoCreateMappingInfraError") + } + + return nil } diff --git a/src/domain/useCase/createDatabase.go b/src/domain/useCase/createDatabase.go index 9ab7652bd..301d568ec 100644 --- a/src/domain/useCase/createDatabase.go +++ b/src/domain/useCase/createDatabase.go @@ -14,14 +14,16 @@ func CreateDatabase( activityRecordCmdRepo repository.ActivityRecordCmdRepo, createDto dto.CreateDatabase, ) error { - _, err := dbQueryRepo.ReadByName(createDto.DatabaseName) + _, err := dbQueryRepo.ReadFirst(dto.ReadDatabasesRequest{ + DatabaseName: &createDto.DatabaseName, + }) if err == nil { return errors.New("DatabaseAlreadyExists") } err = dbCmdRepo.Create(createDto.DatabaseName) if err != nil { - slog.Error("CreateDatabaseError", slog.Any("error", err)) + slog.Error("CreateDatabaseError", slog.String("err", err.Error())) return errors.New("CreateDatabaseInfraError") } diff --git a/src/domain/useCase/createDatabaseUser.go b/src/domain/useCase/createDatabaseUser.go index 530a18302..3b920b86a 100644 --- a/src/domain/useCase/createDatabaseUser.go +++ b/src/domain/useCase/createDatabaseUser.go @@ -15,7 +15,9 @@ func CreateDatabaseUser( activityRecordCmdRepo repository.ActivityRecordCmdRepo, createDto dto.CreateDatabaseUser, ) error { - _, err := dbQueryRepo.ReadByName(createDto.DatabaseName) + _, err := dbQueryRepo.ReadFirst(dto.ReadDatabasesRequest{ + DatabaseName: &createDto.DatabaseName, + }) if err != nil { return errors.New("DatabaseNotFound") } @@ -33,7 +35,7 @@ func CreateDatabaseUser( err = dbCmdRepo.CreateUser(createDto) if err != nil { - slog.Error("CreateDatabaseUserError", slog.Any("error", err)) + slog.Error("CreateDatabaseUserError", slog.String("err", err.Error())) return errors.New("CreateDatabaseUserInfraError") } diff --git a/src/domain/useCase/createFirstAccount.go b/src/domain/useCase/createFirstAccount.go index 76e64ba93..d7562a939 100644 --- a/src/domain/useCase/createFirstAccount.go +++ b/src/domain/useCase/createFirstAccount.go @@ -22,7 +22,7 @@ func CreateFirstAccount( accountId, err := accountCmdRepo.Create(createDto) if err != nil { - slog.Error("CreateFirstAccountError", slog.Any("error", err)) + slog.Error("CreateFirstAccountError", slog.String("err", err.Error())) return errors.New("CreateFirstAccountInfraError") } diff --git a/src/domain/useCase/createInstallableService.go b/src/domain/useCase/createInstallableService.go index 68f2d24fd..05a338207 100644 --- a/src/domain/useCase/createInstallableService.go +++ b/src/domain/useCase/createInstallableService.go @@ -6,54 +6,67 @@ import ( "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/repository" + "github.com/goinfinite/os/src/domain/valueObject" ) func CreateInstallableService( servicesQueryRepo repository.ServicesQueryRepo, servicesCmdRepo repository.ServicesCmdRepo, - mappingQueryRepo repository.MappingQueryRepo, - mappingCmdRepo repository.MappingCmdRepo, vhostQueryRepo repository.VirtualHostQueryRepo, + mappingCmdRepo repository.MappingCmdRepo, activityRecordCmdRepo repository.ActivityRecordCmdRepo, createDto dto.CreateInstallableService, ) error { - readFirstInstalledRequestDto := dto.ReadFirstInstalledServiceItemsRequest{ - ServiceName: &createDto.Name, - } - _, err := servicesQueryRepo.ReadFirstInstalledItem(readFirstInstalledRequestDto) + installedServiceEntity, err := servicesQueryRepo.ReadFirstInstalledItem( + dto.ReadFirstInstalledServiceItemsRequest{ServiceName: &createDto.Name}, + ) if err == nil { - return errors.New("ServiceAlreadyInstalled") + if installedServiceEntity.Nature != valueObject.ServiceNatureMulti { + return errors.New("ServiceAlreadyInstalled") + } + + if createDto.StartupFile == nil { + return errors.New("StartupFileRequiredAfterFirstMultiNatureServiceInstance") + } } installedServiceName, err := servicesCmdRepo.CreateInstallable(createDto) if err != nil { - slog.Error("CreateInstallableServiceError", slog.Any("error", err)) + slog.Error("CreateInstallableServiceError", slog.String("err", err.Error())) return errors.New("CreateInstallableServiceInfraError") } NewCreateSecurityActivityRecord(activityRecordCmdRepo). CreateInstallableService(createDto) - readFirstInstalledRequestDto.ServiceName = &installedServiceName serviceEntity, err := servicesQueryRepo.ReadFirstInstalledItem( - readFirstInstalledRequestDto, + dto.ReadFirstInstalledServiceItemsRequest{ServiceName: &installedServiceName}, ) if err != nil { - slog.Error("GetServiceByNameError", slog.Any("error", err)) - return errors.New("GetServiceByNameInfraError") + slog.Error("ReadServiceEntityError", slog.String("err", err.Error())) + return errors.New("ReadServiceEntityInfraError") } if createDto.AutoCreateMapping != nil && !*createDto.AutoCreateMapping { return nil } - serviceTypeStr := serviceEntity.Type.String() - if serviceTypeStr != "runtime" && serviceTypeStr != "application" { + if len(serviceEntity.PortBindings) == 0 { + slog.Debug("AutoCreateMappingSkipped", slog.String("reason", "PortBindingsIsEmpty")) + return nil + } + + if serviceEntity.Type == valueObject.ServiceTypeDatabase { + slog.Debug( + "AutoCreateMappingSkipped", + slog.String("reason", "ServiceTypeDoesNotRequireMapping"), + ) return nil } - return createFirstMapping( - vhostQueryRepo, mappingQueryRepo, mappingCmdRepo, installedServiceName, + return CreateServiceAutoMapping( + vhostQueryRepo, mappingCmdRepo, installedServiceName, createDto.MappingHostname, + createDto.MappingPath, createDto.MappingUpgradeInsecureRequests, createDto.OperatorAccountId, createDto.OperatorIpAddress, ) } diff --git a/src/domain/useCase/createMapping.go b/src/domain/useCase/createMapping.go index e423c3580..2d93b5a91 100644 --- a/src/domain/useCase/createMapping.go +++ b/src/domain/useCase/createMapping.go @@ -10,108 +10,93 @@ import ( ) func mappingTargetLinter(createDto dto.CreateMapping) (dto.CreateMapping, error) { - targetTypeStr := createDto.TargetType.String() - isStaticFilesMapping := targetTypeStr == "static-files" - if isStaticFilesMapping { + if createDto.TargetType == valueObject.MappingTargetTypeStaticFiles { return createDto, nil } hasTargetValue := createDto.TargetValue != nil - hasTargetHttpResponseCode := createDto.TargetHttpResponseCode != nil - if !hasTargetValue && !hasTargetHttpResponseCode { + hasResponseCode := createDto.TargetHttpResponseCode != nil + if !hasTargetValue && !hasResponseCode { return createDto, errors.New("MappingMustHaveValueOrResponseCode") } - isResponseCodeMapping := targetTypeStr == "response-code" - isTargetValueRequired := !isResponseCodeMapping - if isTargetValueRequired && !hasTargetValue { + isResponseCodeTarget := createDto.TargetType == valueObject.MappingTargetTypeResponseCode + if !isResponseCodeTarget && !hasTargetValue { return createDto, errors.New("MappingMustHaveTargetValue") } - if isResponseCodeMapping { - if hasTargetValue { - targetValueStr := createDto.TargetValue.String() - httpRespondeCode, err := valueObject.NewHttpResponseCode(targetValueStr) - if err != nil { - return createDto, err - } - - createDto.TargetHttpResponseCode = &httpRespondeCode + if isResponseCodeTarget && hasTargetValue { + targetValueStr := createDto.TargetValue.String() + httpRespondeCode, err := valueObject.NewHttpResponseCode(targetValueStr) + if err != nil { + return createDto, errors.New("MappingResponseCodeInvalid") } + createDto.TargetHttpResponseCode = &httpRespondeCode createDto.TargetValue = nil } - isUrlMapping := targetTypeStr == "url" - if isUrlMapping && !hasTargetHttpResponseCode { - targetHttpResponseCode, _ := valueObject.NewHttpResponseCode(301) - createDto.TargetHttpResponseCode = &targetHttpResponseCode + defaultResponseCode, _ := valueObject.NewHttpResponseCode(200) + if createDto.TargetType == valueObject.MappingTargetTypeUrl { + defaultResponseCode, _ = valueObject.NewHttpResponseCode(301) } - - isInlineHtmlMapping := targetTypeStr == "inline-html" - if isInlineHtmlMapping && !hasTargetHttpResponseCode { - targetHttpResponseCode, _ := valueObject.NewHttpResponseCode(200) - createDto.TargetHttpResponseCode = &targetHttpResponseCode + if !hasResponseCode && createDto.TargetType != valueObject.MappingTargetTypeService { + createDto.TargetHttpResponseCode = &defaultResponseCode } return createDto, nil } func CreateMapping( - mappingQueryRepo repository.MappingQueryRepo, - mappingCmdRepo repository.MappingCmdRepo, vhostQueryRepo repository.VirtualHostQueryRepo, + mappingCmdRepo repository.MappingCmdRepo, svcsQueryRepo repository.ServicesQueryRepo, activityRecordCmdRepo repository.ActivityRecordCmdRepo, createDto dto.CreateMapping, ) error { - vhost, err := vhostQueryRepo.ReadByHostname(createDto.Hostname) + withMappings := true + virtualHostWithMappings, err := vhostQueryRepo.ReadFirstWithMappings(dto.ReadVirtualHostsRequest{ + Hostname: &createDto.Hostname, + WithMappings: &withMappings, + }) if err != nil { - return errors.New("VirtualHostNotFound") + slog.Error("ReadFirstVirtualHostWithMappingsError", slog.String("err", err.Error())) + return errors.New("ReadFirstVirtualHostWithMappingsInfraError") } - if vhost.Type.String() == "alias" { + if virtualHostWithMappings.Type == valueObject.VirtualHostTypeAlias { return errors.New("AliasCannotHaveMappings") } createDto, err = mappingTargetLinter(createDto) if err != nil { - return err - } - - existingMappings, err := mappingQueryRepo.ReadByHostname(createDto.Hostname) - if err != nil { - slog.Error("ReadMappingsError", slog.Any("err", err)) - return errors.New("ReadMappingsInfraError") + slog.Error("MappingTargetLinterError", slog.String("err", err.Error())) + return errors.New("MappingTargetLinterError") } - for _, mapping := range existingMappings { - if mapping.MatchPattern != createDto.MatchPattern { + for _, mappingEntity := range virtualHostWithMappings.Mappings { + if mappingEntity.MatchPattern != createDto.MatchPattern { continue } - if mapping.Path != createDto.Path { + if mappingEntity.Path != createDto.Path { continue } return errors.New("MappingAlreadyExists") } - targetTypeStr := createDto.TargetType.String() - if targetTypeStr == "service" { - targetValueStr := createDto.TargetValue.String() - svcName, err := valueObject.NewServiceName(targetValueStr) + if createDto.TargetType == valueObject.MappingTargetTypeService { + serviceName, err := valueObject.NewServiceName(createDto.TargetValue.String()) if err != nil { - return errors.New(err.Error() + ": " + targetValueStr) + return errors.New("MappingTargetServiceNameInvalid") } - readFirstInstalledServiceRequestDto := dto.ReadFirstInstalledServiceItemsRequest{ - ServiceName: &svcName, - } serviceEntity, err := svcsQueryRepo.ReadFirstInstalledItem( - readFirstInstalledServiceRequestDto, + dto.ReadFirstInstalledServiceItemsRequest{ServiceName: &serviceName}, ) if err != nil { - return err + slog.Error("ReadServiceEntityError", slog.String("err", err.Error())) + return errors.New("ReadServiceEntityInfraError") } if len(serviceEntity.PortBindings) == 0 { @@ -129,7 +114,7 @@ func CreateMapping( mappingId, err := mappingCmdRepo.Create(createDto) if err != nil { - slog.Error("CreateMappingError", slog.Any("err", err)) + slog.Error("CreateMappingError", slog.String("err", err.Error())) return errors.New("CreateMappingInfraError") } diff --git a/src/domain/useCase/createMappingSecurityRule.go b/src/domain/useCase/createMappingSecurityRule.go new file mode 100644 index 000000000..ccde70f98 --- /dev/null +++ b/src/domain/useCase/createMappingSecurityRule.go @@ -0,0 +1,36 @@ +package useCase + +import ( + "errors" + "log/slog" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/repository" + "github.com/goinfinite/os/src/domain/valueObject" +) + +func CreateMappingSecurityRule( + mappingQueryRepo repository.MappingQueryRepo, + mappingCmdRepo repository.MappingCmdRepo, + activityRecordCmdRepo repository.ActivityRecordCmdRepo, + createDto dto.CreateMappingSecurityRule, +) (mappingSecurityRuleId valueObject.MappingSecurityRuleId, err error) { + if createDto.ResponseCodeOnMaxRequests == nil { + createDto.ResponseCodeOnMaxRequests = &entity.MappingSecurityRuleDefaultResponseCodeOnMaxRequests + } + if createDto.ResponseCodeOnMaxConnections == nil { + createDto.ResponseCodeOnMaxConnections = &entity.MappingSecurityRuleDefaultResponseCodeOnMaxConnections + } + + mappingSecurityRuleId, err = mappingCmdRepo.CreateSecurityRule(createDto) + if err != nil { + slog.Error("CreateMappingSecurityRuleError", slog.String("err", err.Error())) + return mappingSecurityRuleId, errors.New("CreateMappingSecurityRuleInfraError") + } + + NewCreateSecurityActivityRecord(activityRecordCmdRepo). + CreateMappingSecurityRule(createDto, mappingSecurityRuleId) + + return mappingSecurityRuleId, nil +} diff --git a/src/domain/useCase/createPubliclyTrustedSslPair.go b/src/domain/useCase/createPubliclyTrustedSslPair.go new file mode 100644 index 000000000..c7a47ce6e --- /dev/null +++ b/src/domain/useCase/createPubliclyTrustedSslPair.go @@ -0,0 +1,28 @@ +package useCase + +import ( + "errors" + "log/slog" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/repository" + "github.com/goinfinite/os/src/domain/valueObject" +) + +func CreatePubliclyTrustedSslPair( + vhostQueryRepo repository.VirtualHostQueryRepo, + sslCmdRepo repository.SslCmdRepo, + activityRecordCmdRepo repository.ActivityRecordCmdRepo, + createDto dto.CreatePubliclyTrustedSslPair, +) (sslPairId valueObject.SslPairId, err error) { + sslPairId, err = sslCmdRepo.CreatePubliclyTrusted(createDto) + if err != nil { + slog.Error("CreatePubliclyTrustedSslPairError", slog.String("error", err.Error())) + return sslPairId, errors.New("CreatePubliclyTrustedSslPairInfraError") + } + + NewCreateSecurityActivityRecord(activityRecordCmdRepo). + CreatePubliclyTrustedSslPair(createDto, sslPairId) + + return sslPairId, nil +} diff --git a/src/domain/useCase/createScheduledTask.go b/src/domain/useCase/createScheduledTask.go index 81e72e6a9..0f6653019 100644 --- a/src/domain/useCase/createScheduledTask.go +++ b/src/domain/useCase/createScheduledTask.go @@ -14,7 +14,7 @@ func CreateScheduledTask( ) error { err := scheduledTaskCmdRepo.Create(dto) if err != nil { - slog.Error("CreateScheduledTaskError", slog.Any("error", err)) + slog.Error("CreateScheduledTaskError", slog.String("err", err.Error())) return errors.New("CreateScheduledTaskInfraError") } diff --git a/src/domain/useCase/createSecureAccessPublicKey.go b/src/domain/useCase/createSecureAccessPublicKey.go index 5ba820c42..fc2861b3b 100644 --- a/src/domain/useCase/createSecureAccessPublicKey.go +++ b/src/domain/useCase/createSecureAccessPublicKey.go @@ -15,7 +15,7 @@ func CreateSecureAccessPublicKey( ) error { keyId, err := accountCmdRepo.CreateSecureAccessPublicKey(createDto) if err != nil { - slog.Error("CreateSecureAccessPublicKeyError", slog.Any("error", err)) + slog.Error("CreateSecureAccessPublicKeyError", slog.String("err", err.Error())) return errors.New("CreateSecureAccessPublicKeyInfraError") } diff --git a/src/domain/useCase/createSslPair.go b/src/domain/useCase/createSslPair.go index f3b241e70..eaeab4f0a 100644 --- a/src/domain/useCase/createSslPair.go +++ b/src/domain/useCase/createSslPair.go @@ -11,48 +11,46 @@ import ( ) func CreateSslPair( - sslCmdRepo repository.SslCmdRepo, vhostQueryRepo repository.VirtualHostQueryRepo, + sslCmdRepo repository.SslCmdRepo, activityRecordCmdRepo repository.ActivityRecordCmdRepo, createDto dto.CreateSslPair, ) error { - existingVhosts, err := vhostQueryRepo.Read() + vhostReadResponse, err := vhostQueryRepo.Read(dto.ReadVirtualHostsRequest{ + Pagination: dto.PaginationUnpaginated, + }) if err != nil { - slog.Error("ReadVhostsError", slog.Any("err", err)) - return errors.New("ReadVhostsInfraError") - } - - if len(existingVhosts) == 0 { - return errors.New("VhostsNotFound") + slog.Error("ReadVirtualHostInfraError", slog.String("err", err.Error())) + return errors.New("ReadVirtualHostInfraError") } - validSslVirtualHostsHostnames := []valueObject.Fqdn{} - for _, vhost := range existingVhosts { - if vhost.Type.String() == "alias" { + existingVirtualHostHostnames := []valueObject.Fqdn{} + for _, vhostEntity := range vhostReadResponse.VirtualHosts { + if vhostEntity.Type == valueObject.VirtualHostTypeAlias { continue } - if slices.Contains(createDto.VirtualHostsHostnames, vhost.Hostname) { - validSslVirtualHostsHostnames = append( - validSslVirtualHostsHostnames, vhost.Hostname, - ) + if !slices.Contains(createDto.VirtualHostsHostnames, vhostEntity.Hostname) { + continue } + + existingVirtualHostHostnames = append(existingVirtualHostHostnames, vhostEntity.Hostname) } - if len(validSslVirtualHostsHostnames) == 0 { - return errors.New("VhostDoesNotExists") + if len(existingVirtualHostHostnames) == 0 { + return errors.New("SpecifiedVirtualHostsNotFound") } - createDto.VirtualHostsHostnames = validSslVirtualHostsHostnames + createDto.VirtualHostsHostnames = existingVirtualHostHostnames - createdSslPairId, err := sslCmdRepo.Create(createDto) + sslPairId, err := sslCmdRepo.Create(createDto) if err != nil { - slog.Error("CreateSslPairError", slog.Any("err", err)) + slog.Error("CreateSslPairError", slog.String("err", err.Error())) return errors.New("CreateSslPairInfraError") } NewCreateSecurityActivityRecord(activityRecordCmdRepo). - CreateSslPair(createDto, createdSslPairId) + CreateSslPair(createDto, sslPairId) return nil } diff --git a/src/domain/useCase/createUnixFile.go b/src/domain/useCase/createUnixFile.go index 7e1138dc6..294db5fa4 100644 --- a/src/domain/useCase/createUnixFile.go +++ b/src/domain/useCase/createUnixFile.go @@ -3,11 +3,37 @@ package useCase import ( "errors" "log/slog" + "strings" "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/repository" + "github.com/goinfinite/os/src/domain/valueObject" ) +func NormalizeKnownUnixFilePathPermissions( + filesCmdRepo repository.FilesCmdRepo, + filePath valueObject.UnixFilePath, +) { + isAppDirectoryDescendant := strings.HasPrefix( + filePath.String(), + valueObject.UnixFilePathAppWorkingDir.String(), + ) + if !isAppDirectoryDescendant { + return + } + + err := filesCmdRepo.UpdateOwnership(dto.NewUpdateUnixFileOwnership( + filePath, valueObject.UnixFileOwnershipAppWorkingDir, + )) + if err != nil { + slog.Debug( + "UpdateOwnershipInfraError", + slog.String("method", "NormalizeKnownUnixFilePathPermissions"), + slog.String("err", err.Error()), + ) + } +} + func CreateUnixFile( filesQueryRepo repository.FilesQueryRepo, filesCmdRepo repository.FilesCmdRepo, @@ -16,12 +42,14 @@ func CreateUnixFile( ) error { err := filesCmdRepo.Create(createDto) if err != nil { - slog.Error("CreateUnixFileInfraError", slog.Any("err", err)) + slog.Error("CreateUnixFileInfraError", slog.String("err", err.Error())) return errors.New("CreateUnixFileInfraError") } NewCreateSecurityActivityRecord(activityRecordCmdRepo). CreateUnixFile(createDto) + NormalizeKnownUnixFilePathPermissions(filesCmdRepo, createDto.FilePath) + return nil } diff --git a/src/domain/useCase/createVirtualHost.go b/src/domain/useCase/createVirtualHost.go index 64267cb64..f6342b53e 100644 --- a/src/domain/useCase/createVirtualHost.go +++ b/src/domain/useCase/createVirtualHost.go @@ -16,31 +16,51 @@ func CreateVirtualHost( activityRecordCmdRepo repository.ActivityRecordCmdRepo, createDto dto.CreateVirtualHost, ) error { - _, err := vhostQueryRepo.ReadByHostname(createDto.Hostname) + _, err := vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: &createDto.Hostname, + }) if err == nil { - return errors.New("VirtualHostAlreadyExists") + return errors.New("HostnameAlreadyInUse") } - isAlias := createDto.Type.String() == "alias" - if isAlias && createDto.ParentHostname == nil { - return errors.New("AliasMustHaveParentHostname") + if createDto.Type == valueObject.VirtualHostTypeAlias && createDto.ParentHostname == nil { + return errors.New("MissingAliasParentHostname") } - hostnameStr := createDto.Hostname.String() - hasWildcardInHostname := strings.HasPrefix(hostnameStr, "*.") - if hasWildcardInHostname { - hostnameWithoutWildcardStr := strings.Replace(hostnameStr, "*.", "", 1) + isWildcardHostname := strings.HasPrefix(createDto.Hostname.String(), "*.") + if isWildcardHostname { + hostnameWithoutWildcardStr := strings.Replace(createDto.Hostname.String(), "*.", "", 1) hostnameWithoutWildcard, err := valueObject.NewFqdn(hostnameWithoutWildcardStr) if err != nil { - return errors.New("FailedToRemoveWildcardFromHostname: " + err.Error()) + return errors.New("RemoveWildcardFromHostnameError") } + createDto.Type = valueObject.VirtualHostTypeWildcard createDto.Hostname = hostnameWithoutWildcard } + if createDto.Type == valueObject.VirtualHostTypeAlias { + parentVirtualHostEntity, err := vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: createDto.ParentHostname, + }) + if err != nil { + slog.Error("ReadAliasParentVirtualHostError", slog.String("err", err.Error())) + return errors.New("ReadAliasParentVirtualHostError") + } + + if parentVirtualHostEntity.Type == valueObject.VirtualHostTypeAlias { + return errors.New("AliasParentVirtualHostCannotAlsoBeAlias") + } + } + + if createDto.Type == valueObject.VirtualHostTypeWildcard { + isWildcard := true + createDto.IsWildcard = &isWildcard + } + err = vhostCmdRepo.Create(createDto) if err != nil { - slog.Error("CreateVirtualHostError", slog.Any("err", err)) + slog.Error("CreateVirtualHostError", slog.String("err", err.Error())) return errors.New("CreateVirtualHostInfraError") } diff --git a/src/domain/useCase/deleteAccount.go b/src/domain/useCase/deleteAccount.go index d3f9abdb5..13cd102aa 100644 --- a/src/domain/useCase/deleteAccount.go +++ b/src/domain/useCase/deleteAccount.go @@ -24,7 +24,7 @@ func DeleteAccount( err = accountCmdRepo.Delete(deleteDto.AccountId) if err != nil { - slog.Error("DeleteAccountError", slog.Any("error", err)) + slog.Error("DeleteAccountError", slog.String("err", err.Error())) return errors.New("DeleteAccountInfraError") } diff --git a/src/domain/useCase/deleteActivityRecord.go b/src/domain/useCase/deleteActivityRecord.go index 4b7554cf3..b5484e6bf 100644 --- a/src/domain/useCase/deleteActivityRecord.go +++ b/src/domain/useCase/deleteActivityRecord.go @@ -14,7 +14,7 @@ func DeleteActivityRecord( ) error { err := activityRecordCmdRepo.Delete(deleteDto) if err != nil { - slog.Error("DeleteActivityRecordError", slog.Any("error", err)) + slog.Error("DeleteActivityRecordError", slog.String("err", err.Error())) return errors.New("DeleteActivityRecordInfraError") } diff --git a/src/domain/useCase/deleteCron.go b/src/domain/useCase/deleteCron.go index b3e2b5185..dd19b738c 100644 --- a/src/domain/useCase/deleteCron.go +++ b/src/domain/useCase/deleteCron.go @@ -24,7 +24,7 @@ func DeleteCron( } cronEntity, err := cronQueryRepo.ReadFirst(readFirstRequestDto) if err != nil { - slog.Error("ReadCronToDeleteError", slog.Any("err", err)) + slog.Error("ReadCronToDeleteError", slog.String("err", err.Error())) return errors.New("ReadCronToDeleteInfraError") } deleteDto.Id = &cronEntity.Id @@ -32,7 +32,7 @@ func DeleteCron( err := cronCmdRepo.Delete(*deleteDto.Id) if err != nil { - slog.Error("DeleteCronError", slog.Any("err", err)) + slog.Error("DeleteCronError", slog.String("err", err.Error())) return errors.New("DeleteCronInfraError") } diff --git a/src/domain/useCase/deleteDatabase.go b/src/domain/useCase/deleteDatabase.go index f24e4930c..52f8f7ffc 100644 --- a/src/domain/useCase/deleteDatabase.go +++ b/src/domain/useCase/deleteDatabase.go @@ -14,14 +14,16 @@ func DeleteDatabase( activityRecordCmdRepo repository.ActivityRecordCmdRepo, deleteDto dto.DeleteDatabase, ) error { - _, err := dbQueryRepo.ReadByName(deleteDto.DatabaseName) + _, err := dbQueryRepo.ReadFirst(dto.ReadDatabasesRequest{ + DatabaseName: &deleteDto.DatabaseName, + }) if err != nil { return errors.New("DatabaseNotFound") } err = dbCmdRepo.Delete(deleteDto.DatabaseName) if err != nil { - slog.Error("DeleteDatabaseError", slog.Any("error", err)) + slog.Error("DeleteDatabaseError", slog.String("err", err.Error())) return errors.New("DeleteDatabaseInfraError") } diff --git a/src/domain/useCase/deleteDatabaseUser.go b/src/domain/useCase/deleteDatabaseUser.go index 2b7391ca9..be40c2c8d 100644 --- a/src/domain/useCase/deleteDatabaseUser.go +++ b/src/domain/useCase/deleteDatabaseUser.go @@ -14,14 +14,16 @@ func DeleteDatabaseUser( activityRecordCmdRepo repository.ActivityRecordCmdRepo, deleteDto dto.DeleteDatabaseUser, ) error { - _, err := dbQueryRepo.ReadByName(deleteDto.DatabaseName) + _, err := dbQueryRepo.ReadFirst(dto.ReadDatabasesRequest{ + DatabaseName: &deleteDto.DatabaseName, + }) if err != nil { return errors.New("DatabaseNotFound") } err = dbCmdRepo.DeleteUser(deleteDto.DatabaseName, deleteDto.Username) if err != nil { - slog.Error("DeleteDatabaseUserError", slog.Any("error", err)) + slog.Error("DeleteDatabaseUserError", slog.String("err", err.Error())) return errors.New("DeleteDatabaseUserInfraError") } diff --git a/src/domain/useCase/deleteMapping.go b/src/domain/useCase/deleteMapping.go index e502f94e1..5c7f07ea6 100644 --- a/src/domain/useCase/deleteMapping.go +++ b/src/domain/useCase/deleteMapping.go @@ -14,14 +14,16 @@ func DeleteMapping( activityRecordCmdRepo repository.ActivityRecordCmdRepo, deleteDto dto.DeleteMapping, ) error { - _, err := mappingQueryRepo.ReadById(deleteDto.MappingId) + _, err := mappingQueryRepo.ReadFirst(dto.ReadMappingsRequest{ + MappingId: &deleteDto.MappingId, + }) if err != nil { return errors.New("MappingNotFound") } err = mappingCmdRepo.Delete(deleteDto.MappingId) if err != nil { - slog.Error("DeleteMappingError", slog.Any("err", err)) + slog.Error("DeleteMappingError", slog.String("err", err.Error())) return errors.New("DeleteMappingInfraError") } diff --git a/src/domain/useCase/deleteMappingSecurityRule.go b/src/domain/useCase/deleteMappingSecurityRule.go new file mode 100644 index 000000000..b15a41300 --- /dev/null +++ b/src/domain/useCase/deleteMappingSecurityRule.go @@ -0,0 +1,43 @@ +package useCase + +import ( + "errors" + "log/slog" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/repository" +) + +func DeleteMappingSecurityRule( + mappingQueryRepo repository.MappingQueryRepo, + mappingCmdRepo repository.MappingCmdRepo, + activityRecordCmdRepo repository.ActivityRecordCmdRepo, + deleteDto dto.DeleteMappingSecurityRule, +) error { + _, err := mappingQueryRepo.ReadFirstSecurityRule(dto.ReadMappingSecurityRulesRequest{ + Pagination: dto.PaginationUnpaginated, + MappingSecurityRuleId: &deleteDto.SecurityRuleId, + }) + if err != nil { + return errors.New("MappingSecurityRuleNotFound") + } + + mappingsResponse, err := mappingQueryRepo.Read(dto.ReadMappingsRequest{ + Pagination: dto.PaginationUnpaginated, + MappingSecurityRuleId: &deleteDto.SecurityRuleId, + }) + if err == nil && len(mappingsResponse.Mappings) > 0 { + return errors.New("MappingSecurityRuleInUse") + } + + err = mappingCmdRepo.DeleteSecurityRule(deleteDto.SecurityRuleId) + if err != nil { + slog.Error("DeleteMappingSecurityRuleError", slog.String("err", err.Error())) + return errors.New("DeleteMappingSecurityRuleInfraError") + } + + NewCreateSecurityActivityRecord(activityRecordCmdRepo). + DeleteMappingSecurityRule(deleteDto) + + return nil +} diff --git a/src/domain/useCase/deleteMarketplaceInstalledItem.go b/src/domain/useCase/deleteMarketplaceInstalledItem.go index c32150589..5d9b3da4b 100644 --- a/src/domain/useCase/deleteMarketplaceInstalledItem.go +++ b/src/domain/useCase/deleteMarketplaceInstalledItem.go @@ -5,26 +5,135 @@ import ( "log/slog" "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/repository" + "github.com/goinfinite/os/src/domain/valueObject" ) +func UninstallMarketplaceInstalledItemServices( + servicesQueryRepo repository.ServicesQueryRepo, + servicesCmdRepo repository.ServicesCmdRepo, + mappingQueryRepo repository.MappingQueryRepo, + installedItemEntity entity.MarketplaceInstalledItem, +) { + for _, serviceWithVersion := range installedItemEntity.Services { + isServiceUninstallable := false + serviceNameStr := serviceWithVersion.Name.String() + + serviceEntity, err := servicesQueryRepo.ReadFirstInstalledItem( + dto.ReadFirstInstalledServiceItemsRequest{ + ServiceName: &serviceWithVersion.Name, + }, + ) + if err != nil { + slog.Error( + "ReadServiceEntityError", + slog.String("serviceName", serviceNameStr), + slog.String("err", err.Error()), + ) + continue + } + + if serviceEntity.Type == valueObject.ServiceTypeDatabase { + slog.Debug( + "SkippingDatabaseServiceUninstall", + slog.String("serviceName", serviceNameStr), + slog.String("marketplaceItemId", installedItemEntity.Id.String()), + ) + continue + } + + targetValue, err := valueObject.NewMappingTargetValue( + serviceNameStr, valueObject.MappingTargetTypeService, + ) + if err != nil { + slog.Error( + "ServiceNameNotValidTargetValue", + slog.String("serviceName", serviceNameStr), + slog.String("err", err.Error()), + ) + continue + } + + mappingReadResponse, err := mappingQueryRepo.Read(dto.ReadMappingsRequest{ + Pagination: dto.PaginationUnpaginated, + TargetValue: &targetValue, + }) + if err != nil { + slog.Error( + "ReadServiceMappingError", + slog.String("serviceName", serviceNameStr), + slog.String("mappingPath", serviceNameStr), + slog.String("err", err.Error()), + ) + continue + } + isServiceUninstallable = len(mappingReadResponse.Mappings) == 0 + + if !isServiceUninstallable { + slog.Debug( + "SkippingServiceWithMappingsUninstall", + slog.Uint64("mappingCount", uint64(len(mappingReadResponse.Mappings))), + slog.String("serviceName", serviceNameStr), + slog.String("mappingPath", serviceNameStr), + ) + continue + } + + err = servicesCmdRepo.Delete(serviceWithVersion.Name) + if err != nil { + slog.Error( + "DeleteServiceInfraError", + slog.String("serviceName", serviceNameStr), + slog.String("err", err.Error()), + ) + continue + } + } +} + func DeleteMarketplaceInstalledItem( marketplaceQueryRepo repository.MarketplaceQueryRepo, marketplaceCmdRepo repository.MarketplaceCmdRepo, + mappingQueryRepo repository.MappingQueryRepo, + mappingCmdRepo repository.MappingCmdRepo, + servicesQueryRepo repository.ServicesQueryRepo, + servicesCmdRepo repository.ServicesCmdRepo, activityRecordCmdRepo repository.ActivityRecordCmdRepo, deleteDto dto.DeleteMarketplaceInstalledItem, ) error { - readFirstInstalledRequestDto := dto.ReadMarketplaceInstalledItemsRequest{ - MarketplaceInstalledItemId: &deleteDto.InstalledId, - } - _, err := marketplaceQueryRepo.ReadFirstInstalledItem(readFirstInstalledRequestDto) + installedItemEntity, err := marketplaceQueryRepo.ReadFirstInstalledItem( + dto.ReadMarketplaceInstalledItemsRequest{ + MarketplaceInstalledItemId: &deleteDto.InstalledId, + }, + ) if err != nil { + slog.Error("ReadMarketplaceInstalledItemError", slog.String("err", err.Error())) return errors.New("MarketplaceInstalledItemNotFound") } + for _, mappingEntity := range installedItemEntity.Mappings { + err = mappingCmdRepo.Delete(mappingEntity.Id) + if err != nil { + slog.Error( + "DeleteInstalledItemMappingError", + slog.String("mappingId", mappingEntity.Id.String()), + slog.String("mappingPath", mappingEntity.Path.String()), + slog.String("err", err.Error()), + ) + continue + } + } + + if deleteDto.ShouldUninstallServices { + UninstallMarketplaceInstalledItemServices( + servicesQueryRepo, servicesCmdRepo, mappingQueryRepo, installedItemEntity, + ) + } + err = marketplaceCmdRepo.UninstallItem(deleteDto) if err != nil { - slog.Error("UninstallMarketplaceItemError", slog.Any("error", err)) + slog.Error("UninstallMarketplaceItemError", slog.String("err", err.Error())) return errors.New("UninstallMarketplaceItemInfraError") } diff --git a/src/domain/useCase/deleteSecureAccessPublicKey.go b/src/domain/useCase/deleteSecureAccessPublicKey.go index 942523edd..0482a60e6 100644 --- a/src/domain/useCase/deleteSecureAccessPublicKey.go +++ b/src/domain/useCase/deleteSecureAccessPublicKey.go @@ -26,7 +26,7 @@ func DeleteSecureAccessPublicKey( err = accountCmdRepo.DeleteSecureAccessPublicKey(publicKeyEntity.Id) if err != nil { - slog.Error("DeleteSecureAccessPublicKeyError", slog.Any("error", err)) + slog.Error("DeleteSecureAccessPublicKeyError", slog.String("err", err.Error())) return errors.New("DeleteSecureAccessPublicKeyInfraError") } diff --git a/src/domain/useCase/deleteService.go b/src/domain/useCase/deleteService.go index fa0637d26..f47b26e75 100644 --- a/src/domain/useCase/deleteService.go +++ b/src/domain/useCase/deleteService.go @@ -6,39 +6,109 @@ import ( "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/repository" + "github.com/goinfinite/os/src/domain/valueObject" ) +func DeleteServiceMappings( + mappingQueryRepo repository.MappingQueryRepo, + mappingCmdRepo repository.MappingCmdRepo, + serviceName valueObject.ServiceName, + shouldRecreate bool, + operatorAccountId valueObject.AccountId, + operatorIpAddress valueObject.IpAddress, +) error { + targetType := valueObject.MappingTargetTypeService + serviceNameStr := serviceName.String() + + targetValue, err := valueObject.NewMappingTargetValue(serviceNameStr, targetType) + if err != nil { + return err + } + + readMappingsResponse, err := mappingQueryRepo.Read(dto.ReadMappingsRequest{ + Pagination: dto.PaginationUnpaginated, + TargetType: &targetType, + TargetValue: &targetValue, + }) + if err != nil { + return errors.New("ReadMappingsInfraError: " + err.Error()) + } + + if len(readMappingsResponse.Mappings) == 0 { + return nil + } + + for _, mappingEntity := range readMappingsResponse.Mappings { + err = mappingCmdRepo.Delete(mappingEntity.Id) + if err != nil { + slog.Error( + "DeleteMappingInfraError", + slog.String("err", err.Error()), + slog.String("mappingId", mappingEntity.Id.String()), + slog.String("serviceName", serviceName.String()), + slog.String("method", "recreateServiceAutoMapping"), + ) + continue + } + + if !shouldRecreate { + continue + } + + _, err = mappingCmdRepo.Create(dto.NewCreateMapping( + mappingEntity.Hostname, mappingEntity.Path, + mappingEntity.MatchPattern, mappingEntity.TargetType, + mappingEntity.TargetValue, mappingEntity.TargetHttpResponseCode, + mappingEntity.ShouldUpgradeInsecureRequests, mappingEntity.MappingSecurityRuleId, + operatorAccountId, operatorIpAddress, + )) + if err != nil { + slog.Error( + "RecreateMappingInfraError", + slog.String("err", err.Error()), + slog.String("mappingId", mappingEntity.Id.String()), + slog.String("serviceName", serviceName.String()), + slog.String("method", "recreateServiceAutoMapping"), + ) + continue + } + } + + return nil +} + func DeleteService( servicesQueryRepo repository.ServicesQueryRepo, servicesCmdRepo repository.ServicesCmdRepo, + mappingQueryRepo repository.MappingQueryRepo, mappingCmdRepo repository.MappingCmdRepo, activityRecordCmdRepo repository.ActivityRecordCmdRepo, deleteDto dto.DeleteService, ) error { - readFirstInstalledRequestDto := dto.ReadFirstInstalledServiceItemsRequest{ - ServiceName: &deleteDto.Name, - } serviceEntity, err := servicesQueryRepo.ReadFirstInstalledItem( - readFirstInstalledRequestDto, + dto.ReadFirstInstalledServiceItemsRequest{ServiceName: &deleteDto.Name}, ) if err != nil { - return err + slog.Error("ReadServiceInfraEntityError", slog.String("err", err.Error())) + return errors.New("ReadServiceEntityError") } - isSystemService := serviceEntity.Type.String() == "system" - if isSystemService { + if serviceEntity.Type == valueObject.ServiceTypeSystem { return errors.New("SystemServicesCannotBeUninstalled") } - err = mappingCmdRepo.DeleteAuto(deleteDto.Name) + err = DeleteServiceMappings( + mappingQueryRepo, mappingCmdRepo, deleteDto.Name, false, + deleteDto.OperatorAccountId, deleteDto.OperatorIpAddress, + ) if err != nil { - slog.Error("DeleteAutoMappingError", slog.Any("error", err)) - return errors.New("DeleteAutoMappingsInfraError") + slog.Error("DeleteServiceMappingsError", slog.String("err", err.Error())) + return errors.New("DeleteServiceMappingsInfraError") } err = servicesCmdRepo.Delete(deleteDto.Name) if err != nil { - slog.Error("DeleteServiceError", slog.Any("error", err)) + slog.Error("DeleteServiceError", slog.String("err", err.Error())) return errors.New("DeleteServiceInfraError") } diff --git a/src/domain/useCase/deleteSslPair.go b/src/domain/useCase/deleteSslPair.go index 78af02fbd..211f6329e 100644 --- a/src/domain/useCase/deleteSslPair.go +++ b/src/domain/useCase/deleteSslPair.go @@ -2,7 +2,7 @@ package useCase import ( "errors" - "log" + "log/slog" "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/repository" @@ -14,15 +14,17 @@ func DeleteSslPair( activityRecordCmdRepo repository.ActivityRecordCmdRepo, deleteDto dto.DeleteSslPair, ) error { - _, err := sslQueryRepo.ReadById(deleteDto.SslPairId) + _, err := sslQueryRepo.ReadFirst(dto.ReadSslPairsRequest{ + SslPairId: &deleteDto.SslPairId, + }) if err != nil { - log.Printf("SslPairNotFound: %s", err) + slog.Error("ReadSslPairError", slog.String("error", err.Error())) return errors.New("SslPairNotFound") } err = sslCmdRepo.Delete(deleteDto.SslPairId) if err != nil { - log.Printf("DeleteSslPairError: %s", err) + slog.Error("DeleteSslPairError", slog.String("error", err.Error())) return errors.New("DeleteSslPairInfraError") } diff --git a/src/domain/useCase/deleteSslPairVhosts.go b/src/domain/useCase/deleteSslPairVhosts.go deleted file mode 100644 index 984a83412..000000000 --- a/src/domain/useCase/deleteSslPairVhosts.go +++ /dev/null @@ -1,32 +0,0 @@ -package useCase - -import ( - "errors" - "log/slog" - - "github.com/goinfinite/os/src/domain/dto" - "github.com/goinfinite/os/src/domain/repository" -) - -func DeleteSslPairVhosts( - sslQueryRepo repository.SslQueryRepo, - sslCmdRepo repository.SslCmdRepo, - activityRecordCmdRepo repository.ActivityRecordCmdRepo, - deleteDto dto.DeleteSslPairVhosts, -) error { - _, err := sslQueryRepo.ReadById(deleteDto.SslPairId) - if err != nil { - return errors.New("SslPairNotFound") - } - - err = sslCmdRepo.DeleteSslPairVhosts(deleteDto) - if err != nil { - slog.Error("DeleteSslPairVhostsError", slog.Any("err", err)) - return errors.New("DeleteSslPairVhostsInfraError") - } - - NewCreateSecurityActivityRecord(activityRecordCmdRepo). - DeleteSslPairVhosts(deleteDto) - - return nil -} diff --git a/src/domain/useCase/deleteUnixFiles.go b/src/domain/useCase/deleteUnixFiles.go index c737883fe..c294df4c5 100644 --- a/src/domain/useCase/deleteUnixFiles.go +++ b/src/domain/useCase/deleteUnixFiles.go @@ -9,8 +9,6 @@ import ( "github.com/goinfinite/os/src/domain/valueObject" ) -const TrashDirPath string = "/app/.trash" - type DeleteUnixFiles struct { filesQueryRepo repository.FilesQueryRepo filesCmdRepo repository.FilesCmdRepo @@ -33,8 +31,7 @@ func (uc DeleteUnixFiles) emptyTrash( operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) error { - trashPath, _ := valueObject.NewUnixFilePath(TrashDirPath) - err := uc.filesCmdRepo.Delete(trashPath) + err := uc.filesCmdRepo.Delete(valueObject.UnixFilePathTrashDir) if err != nil { return err } @@ -46,34 +43,32 @@ func (uc DeleteUnixFiles) CreateGeneralTrash( operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) error { - trashPath, _ := valueObject.NewUnixFilePath(TrashDirPath) - - _, err := uc.filesQueryRepo.ReadFirst(trashPath) + _, err := uc.filesQueryRepo.ReadFirst(valueObject.UnixFilePathTrashDir) if err == nil { return nil } - trashDirPermissions, _ := valueObject.NewUnixFilePermissions("755") - trashDirMimeType, _ := valueObject.NewMimeType("directory") + trashDirPermissions := valueObject.NewUnixDirDefaultPermissions() createGeneralTrashDir := dto.NewCreateUnixFile( - trashPath, &trashDirPermissions, trashDirMimeType, operatorAccountId, - operatorIpAddress, + valueObject.UnixFilePathTrashDir, &trashDirPermissions, + valueObject.MimeTypeDirectory, operatorAccountId, operatorIpAddress, ) return CreateUnixFile( - uc.filesQueryRepo, uc.filesCmdRepo, uc.activityRecordCmdRepo, createGeneralTrashDir, + uc.filesQueryRepo, uc.filesCmdRepo, uc.activityRecordCmdRepo, + createGeneralTrashDir, ) } func (uc DeleteUnixFiles) Execute(deleteDto dto.DeleteUnixFiles) error { for fileToDeleteIndex, fileToDelete := range deleteDto.SourcePaths { - shouldCleanTrash := fileToDelete.String() == TrashDirPath + shouldCleanTrash := fileToDelete == valueObject.UnixFilePathTrashDir if shouldCleanTrash { err := uc.emptyTrash( deleteDto.OperatorAccountId, deleteDto.OperatorIpAddress, ) if err != nil { - slog.Debug("FailedToCleanTrash", slog.Any("err", err)) + slog.Debug("FailedToCleanTrash", slog.String("err", err.Error())) } fileToDeleteAfterTrashPathIndex := fileToDeleteIndex + 1 @@ -87,8 +82,7 @@ func (uc DeleteUnixFiles) Execute(deleteDto dto.DeleteUnixFiles) error { continue } - isRootPath := fileToDelete.String() == "/" - if !isRootPath { + if !fileToDelete.IsFileSystemRootDir() { continue } @@ -109,7 +103,7 @@ func (uc DeleteUnixFiles) Execute(deleteDto dto.DeleteUnixFiles) error { for _, fileToDelete := range deleteDto.SourcePaths { err := uc.filesCmdRepo.Delete(fileToDelete) if err != nil { - slog.Debug("DeleteFileError", slog.Any("err", err)) + slog.Debug("DeleteFileError", slog.String("err", err.Error())) continue } } @@ -123,11 +117,9 @@ func (uc DeleteUnixFiles) Execute(deleteDto dto.DeleteUnixFiles) error { } for _, fileToMoveToTrash := range deleteDto.SourcePaths { - trashPathWithFileNameStr := TrashDirPath + "/" + fileToMoveToTrash.GetFileName().String() - trashPathWithFileName, _ := valueObject.NewUnixFilePath(trashPathWithFileNameStr) shouldOverwrite := true moveDto := dto.NewMoveUnixFile( - fileToMoveToTrash, trashPathWithFileName, shouldOverwrite, + fileToMoveToTrash, valueObject.UnixFilePathTrashDir, shouldOverwrite, ) err = uc.filesCmdRepo.Move(moveDto) @@ -135,7 +127,7 @@ func (uc DeleteUnixFiles) Execute(deleteDto dto.DeleteUnixFiles) error { slog.Debug( "MoveUnixFileToTrashError", slog.String("fileToMoveToTrash", fileToMoveToTrash.String()), - slog.Any("err", err), + slog.String("err", err.Error()), ) continue } diff --git a/src/domain/useCase/deleteVirtualHost.go b/src/domain/useCase/deleteVirtualHost.go index 1ec4d86ef..582a373dd 100644 --- a/src/domain/useCase/deleteVirtualHost.go +++ b/src/domain/useCase/deleteVirtualHost.go @@ -14,19 +14,30 @@ func DeleteVirtualHost( activityRecordCmdRepo repository.ActivityRecordCmdRepo, deleteDto dto.DeleteVirtualHost, ) error { - isPrimaryHostname := deleteDto.Hostname.String() == deleteDto.PrimaryVirtualHost.String() - if isPrimaryHostname { + isPrimary := true + primaryVirtualHost, err := vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + IsPrimary: &isPrimary, + }) + if err != nil { + slog.Error("ReadPrimaryVirtualHostError", slog.String("err", err.Error())) + return errors.New("ReadPrimaryVirtualHostError") + } + + if primaryVirtualHost.Hostname == deleteDto.Hostname { return errors.New("PrimaryVirtualHostCannotBeDeleted") } - vhost, err := vhostQueryRepo.ReadByHostname(deleteDto.Hostname) + targetVirtualHost, err := vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: &deleteDto.Hostname, + }) if err != nil { - return errors.New("VirtualHostNotFound") + slog.Error("ReadVirtualHostEntityError", slog.String("err", err.Error())) + return errors.New("ReadVirtualHostEntityError") } - err = vhostCmdRepo.Delete(vhost) + err = vhostCmdRepo.Delete(targetVirtualHost.Hostname) if err != nil { - slog.Error("DeleteVirtualHostError", slog.Any("err", err)) + slog.Error("DeleteVirtualHostError", slog.String("err", err.Error())) return errors.New("DeleteVirtualHostInfraError") } diff --git a/src/domain/useCase/extractUnixFiles.go b/src/domain/useCase/extractUnixFiles.go index 7d884d944..9cf4b488f 100644 --- a/src/domain/useCase/extractUnixFiles.go +++ b/src/domain/useCase/extractUnixFiles.go @@ -16,11 +16,13 @@ func ExtractUnixFiles( ) error { err := filesCmdRepo.Extract(extractDto) if err != nil { - slog.Error("ExtractUnixFilesError", slog.Any("err", err)) + slog.Error("ExtractUnixFilesError", slog.String("err", err.Error())) return errors.New("ExtractUnixFilesInfraError") } NewCreateSecurityActivityRecord(activityRecordCmdRepo).ExtractUnixFile(extractDto) + NormalizeKnownUnixFilePathPermissions(filesCmdRepo, extractDto.DestinationPath) + return nil } diff --git a/src/domain/useCase/installMarketplaceCatalogItem.go b/src/domain/useCase/installMarketplaceCatalogItem.go index 745ac7777..8456f3ac4 100644 --- a/src/domain/useCase/installMarketplaceCatalogItem.go +++ b/src/domain/useCase/installMarketplaceCatalogItem.go @@ -6,7 +6,6 @@ import ( "strings" "github.com/goinfinite/os/src/domain/dto" - "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/repository" "github.com/goinfinite/os/src/domain/valueObject" ) @@ -21,8 +20,7 @@ func requiredDataFieldsInspector( continue } - dataFieldNameStr := dataField.Name.String() - requiredDataFieldNames = append(requiredDataFieldNames, dataFieldNameStr) + requiredDataFieldNames = append(requiredDataFieldNames, dataField.Name.String()) } if len(requiredDataFieldNames) == 0 { @@ -31,8 +29,7 @@ func requiredDataFieldsInspector( receivedDataFieldNames := map[string]interface{}{} for _, dataField := range receivedDataFields { - dataFieldNameStr := dataField.Name.String() - receivedDataFieldNames[dataFieldNameStr] = nil + receivedDataFieldNames[dataField.Name.String()] = nil } missingDataFieldNames := []string{} @@ -43,46 +40,38 @@ func requiredDataFieldsInspector( missingDataFieldNames = append(missingDataFieldNames, requiredDataFieldName) } - if len(missingDataFieldNames) == 0 { - return nil - } - - return errors.New( - "MissingRequiredDataFields: " + strings.Join(missingDataFieldNames, ","), - ) -} - -func MarketplaceCatalogItemLookup( - marketplaceQueryRepo repository.MarketplaceQueryRepo, - itemId *valueObject.MarketplaceItemId, - itemSlug *valueObject.MarketplaceItemSlug, -) (itemEntity entity.MarketplaceCatalogItem, err error) { - if itemId == nil && itemSlug == nil { - return itemEntity, errors.New("ItemIdOrSlugRequired") + if len(missingDataFieldNames) > 0 { + return errors.New( + "MissingRequiredDataFields: " + strings.Join(missingDataFieldNames, ","), + ) } - readCatalogItemRequestDto := dto.ReadMarketplaceCatalogItemsRequest{ - MarketplaceCatalogItemId: itemId, - MarketplaceCatalogItemSlug: itemSlug, - } - return marketplaceQueryRepo.ReadFirstCatalogItem(readCatalogItemRequestDto) + return nil } func InstallMarketplaceCatalogItem( + vhostQueryRepo repository.VirtualHostQueryRepo, marketplaceQueryRepo repository.MarketplaceQueryRepo, marketplaceCmdRepo repository.MarketplaceCmdRepo, - vhostQueryRepo repository.VirtualHostQueryRepo, - vhostCmdRepo repository.VirtualHostCmdRepo, activityRecordCmdRepo repository.ActivityRecordCmdRepo, installDto dto.InstallMarketplaceCatalogItem, ) error { - _, err := vhostQueryRepo.ReadByHostname(installDto.Hostname) + if installDto.Id == nil && installDto.Slug == nil { + return errors.New("ItemIdOrSlugRequired") + } + + _, err := vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: &installDto.Hostname, + }) if err != nil { - return errors.New("VhostNotFound") + return errors.New("VirtualHostNotFound") } - catalogItem, err := MarketplaceCatalogItemLookup( - marketplaceQueryRepo, installDto.Id, installDto.Slug, + catalogItem, err := marketplaceQueryRepo.ReadFirstCatalogItem( + dto.ReadMarketplaceCatalogItemsRequest{ + MarketplaceCatalogItemId: installDto.Id, + MarketplaceCatalogItemSlug: installDto.Slug, + }, ) if err != nil { return errors.New("MarketplaceCatalogItemNotFound") @@ -96,7 +85,7 @@ func InstallMarketplaceCatalogItem( err = marketplaceCmdRepo.InstallItem(installDto) if err != nil { - slog.Error("InstallMarketplaceCatalogItem", slog.Any("error", err)) + slog.Error("InstallMarketplaceCatalogItem", slog.String("err", err.Error())) return errors.New("InstallMarketplaceCatalogItemInfraError") } diff --git a/src/domain/useCase/readAccounts.go b/src/domain/useCase/readAccounts.go index a4f0514d9..1260f9582 100644 --- a/src/domain/useCase/readAccounts.go +++ b/src/domain/useCase/readAccounts.go @@ -14,7 +14,7 @@ func ReadAccounts( ) (responseDto dto.ReadAccountsResponse, err error) { responseDto, err = accountQueryRepo.Read(requestDto) if err != nil { - slog.Error("ReadAccountsInfraError", slog.Any("error", err)) + slog.Error("ReadAccountsInfraError", slog.String("err", err.Error())) return responseDto, errors.New("ReadAccountsInfraError") } diff --git a/src/domain/useCase/readActivityRecords.go b/src/domain/useCase/readActivityRecords.go index c65d31750..a89a73368 100644 --- a/src/domain/useCase/readActivityRecords.go +++ b/src/domain/useCase/readActivityRecords.go @@ -14,7 +14,7 @@ func ReadActivityRecords( ) (activityRecords []entity.ActivityRecord) { activityRecords, err := activityRecordQueryRepo.Read(readDto) if err != nil { - slog.Error("ReadActivityRecordsInfraError", slog.Any("error", err)) + slog.Error("ReadActivityRecordsInfraError", slog.String("err", err.Error())) } return activityRecords diff --git a/src/domain/useCase/readCrons.go b/src/domain/useCase/readCrons.go index 2ecdf3ffb..259b11f07 100644 --- a/src/domain/useCase/readCrons.go +++ b/src/domain/useCase/readCrons.go @@ -19,7 +19,7 @@ func ReadCrons( ) (responseDto dto.ReadCronsResponse, err error) { responseDto, err = cronQueryRepo.Read(requestDto) if err != nil { - slog.Error("ReadCronsError", slog.Any("err", err)) + slog.Error("ReadCronsError", slog.String("err", err.Error())) return responseDto, errors.New("ReadCronsInfraError") } diff --git a/src/domain/useCase/readDatabases.go b/src/domain/useCase/readDatabases.go index 70f21daa0..0aa758dc9 100644 --- a/src/domain/useCase/readDatabases.go +++ b/src/domain/useCase/readDatabases.go @@ -4,18 +4,24 @@ import ( "errors" "log/slog" - "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/repository" ) +var DatabasesDefaultPagination dto.Pagination = dto.Pagination{ + PageNumber: 0, + ItemsPerPage: 10, +} + func ReadDatabases( databaseQueryRepo repository.DatabaseQueryRepo, -) (databasesList []entity.Database, err error) { - databasesList, err = databaseQueryRepo.Read() + requestDto dto.ReadDatabasesRequest, +) (responseDto dto.ReadDatabasesResponse, err error) { + responseDto, err = databaseQueryRepo.Read(requestDto) if err != nil { - slog.Error("ReadDatabasesError", slog.Any("err", err)) - return databasesList, errors.New("ReadDatabasesInfraError") + slog.Error("ReadDatabasesError", slog.String("err", err.Error())) + return responseDto, errors.New("ReadDatabasesInfraError") } - return databasesList, nil + return responseDto, nil } diff --git a/src/domain/useCase/readFiles.go b/src/domain/useCase/readFiles.go index f9341bfd3..f0fb72dd9 100644 --- a/src/domain/useCase/readFiles.go +++ b/src/domain/useCase/readFiles.go @@ -4,20 +4,24 @@ import ( "errors" "log/slog" - "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/repository" - "github.com/goinfinite/os/src/domain/valueObject" ) +var FilesDefaultPagination dto.Pagination = dto.Pagination{ + PageNumber: 0, + ItemsPerPage: 30, +} + func ReadFiles( filesQueryRepo repository.FilesQueryRepo, - unixFilePath valueObject.UnixFilePath, -) ([]entity.UnixFile, error) { - filesList, err := filesQueryRepo.Read(unixFilePath) + requestDto dto.ReadFilesRequest, +) (responseDto dto.ReadFilesResponse, err error) { + responseDto, err = filesQueryRepo.Read(requestDto) if err != nil { - slog.Error("ReadFilesError", slog.Any("err", err)) - return filesList, errors.New("ReadFilesInfraError") + slog.Error("ReadFilesError", slog.String("err", err.Error())) + return responseDto, errors.New("ReadFilesInfraError") } - return filesList, nil + return responseDto, nil } diff --git a/src/domain/useCase/readInstallableServices.go b/src/domain/useCase/readInstallableServices.go index 48e988a9c..cd80a72f7 100644 --- a/src/domain/useCase/readInstallableServices.go +++ b/src/domain/useCase/readInstallableServices.go @@ -19,7 +19,7 @@ func ReadInstallableServices( ) (responseDto dto.ReadInstallableServicesItemsResponse, err error) { responseDto, err = servicesQueryRepo.ReadInstallableItems(requestDto) if err != nil { - slog.Error("ReadInstallableServicesError", slog.Any("error", err)) + slog.Error("ReadInstallableServicesError", slog.String("err", err.Error())) return responseDto, errors.New("ReadInstallableServicesInfraError") } diff --git a/src/domain/useCase/readInstalledServices.go b/src/domain/useCase/readInstalledServices.go index 4b5fd634d..f4bcbaa94 100644 --- a/src/domain/useCase/readInstalledServices.go +++ b/src/domain/useCase/readInstalledServices.go @@ -14,7 +14,7 @@ func ReadInstalledServices( ) (responseDto dto.ReadInstalledServicesItemsResponse, err error) { responseDto, err = servicesQueryRepo.ReadInstalledItems(requestDto) if err != nil { - slog.Error("ReadInstalledServicesError", slog.Any("error", err)) + slog.Error("ReadInstalledServicesError", slog.String("err", err.Error())) return responseDto, errors.New("ReadInstalledServicesInfraError") } diff --git a/src/domain/useCase/readMappingSecurityRules.go b/src/domain/useCase/readMappingSecurityRules.go new file mode 100644 index 000000000..7b7efa7da --- /dev/null +++ b/src/domain/useCase/readMappingSecurityRules.go @@ -0,0 +1,27 @@ +package useCase + +import ( + "errors" + "log/slog" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/repository" +) + +var MappingSecurityRulesDefaultPagination dto.Pagination = dto.Pagination{ + PageNumber: 0, + ItemsPerPage: 10, +} + +func ReadMappingSecurityRules( + mappingQueryRepo repository.MappingQueryRepo, + requestDto dto.ReadMappingSecurityRulesRequest, +) (responseDto dto.ReadMappingSecurityRulesResponse, err error) { + responseDto, err = mappingQueryRepo.ReadSecurityRule(requestDto) + if err != nil { + slog.Error("ReadMappingSecurityRulesError", slog.String("err", err.Error())) + return responseDto, errors.New("ReadMappingSecurityRulesInfraError") + } + + return responseDto, nil +} diff --git a/src/domain/useCase/readMarketplaceCatalogItems.go b/src/domain/useCase/readMarketplaceCatalogItems.go index f3ac046c3..82eebdcfb 100644 --- a/src/domain/useCase/readMarketplaceCatalogItems.go +++ b/src/domain/useCase/readMarketplaceCatalogItems.go @@ -19,7 +19,7 @@ func ReadMarketplaceCatalogItems( ) (responseDto dto.ReadMarketplaceCatalogItemsResponse, err error) { responseDto, err = marketplaceQueryRepo.ReadCatalogItems(requestDto) if err != nil { - slog.Error("ReadMarketplaceCatalogItemsError", slog.Any("error", err)) + slog.Error("ReadMarketplaceCatalogItemsError", slog.String("err", err.Error())) return responseDto, errors.New("ReadMarketplaceCatalogItemsInfraError") } diff --git a/src/domain/useCase/readMarketplaceInstalledItems.go b/src/domain/useCase/readMarketplaceInstalledItems.go index 011eb8494..d5c1843a6 100644 --- a/src/domain/useCase/readMarketplaceInstalledItems.go +++ b/src/domain/useCase/readMarketplaceInstalledItems.go @@ -14,7 +14,7 @@ func ReadMarketplaceInstalledItems( ) (responseDto dto.ReadMarketplaceInstalledItemsResponse, err error) { responseDto, err = marketplaceQueryRepo.ReadInstalledItems(requestDto) if err != nil { - slog.Error("ReadMarketplaceInstalledItemsError", slog.Any("error", err)) + slog.Error("ReadMarketplaceInstalledItemsError", slog.String("err", err.Error())) return responseDto, errors.New("ReadMarketplaceInstalledItemsInfraError") } diff --git a/src/domain/useCase/readO11yOverview.go b/src/domain/useCase/readO11yOverview.go index 3f2b5025f..c9735ef36 100644 --- a/src/domain/useCase/readO11yOverview.go +++ b/src/domain/useCase/readO11yOverview.go @@ -1,12 +1,22 @@ package useCase import ( + "errors" + "log/slog" + "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/repository" ) func ReadO11yOverview( o11yQueryRepo repository.O11yQueryRepo, + withResourceUsage bool, ) (entity.O11yOverview, error) { - return o11yQueryRepo.ReadOverview() + o11yOverviewEntity, err := o11yQueryRepo.ReadOverview(withResourceUsage) + if err != nil { + slog.Error("ReadOverviewError", slog.String("err", err.Error())) + return o11yOverviewEntity, errors.New("ReadOverviewInfraError") + } + + return o11yOverviewEntity, nil } diff --git a/src/domain/useCase/readScheduledTasks.go b/src/domain/useCase/readScheduledTasks.go index 1c0c6cfae..ab5207f1f 100644 --- a/src/domain/useCase/readScheduledTasks.go +++ b/src/domain/useCase/readScheduledTasks.go @@ -19,7 +19,7 @@ func ReadScheduledTasks( ) (responseDto dto.ReadScheduledTasksResponse, err error) { responseDto, err = scheduledTaskQueryRepo.Read(readDto) if err != nil { - slog.Error("ReadTasksInfraError", slog.Any("error", err)) + slog.Error("ReadTasksInfraError", slog.String("err", err.Error())) return responseDto, errors.New("ReadTasksInfraError") } diff --git a/src/domain/useCase/readSslPairs.go b/src/domain/useCase/readSslPairs.go index 24b7b6a7f..2cee137ff 100644 --- a/src/domain/useCase/readSslPairs.go +++ b/src/domain/useCase/readSslPairs.go @@ -1,12 +1,27 @@ package useCase import ( - "github.com/goinfinite/os/src/domain/entity" + "errors" + "log/slog" + + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/repository" ) +var SslPairsDefaultPagination dto.Pagination = dto.Pagination{ + PageNumber: 0, + ItemsPerPage: 10, +} + func ReadSslPairs( sslQueryRepo repository.SslQueryRepo, -) ([]entity.SslPair, error) { - return sslQueryRepo.Read() + requestDto dto.ReadSslPairsRequest, +) (responseDto dto.ReadSslPairsResponse, err error) { + responseDto, err = sslQueryRepo.Read(requestDto) + if err != nil { + slog.Error("ReadSslPairsError", slog.String("err", err.Error())) + return responseDto, errors.New("ReadSslPairsInfraError") + } + + return responseDto, nil } diff --git a/src/domain/useCase/readVirtualHosts.go b/src/domain/useCase/readVirtualHosts.go index 3c4474253..165a2c266 100644 --- a/src/domain/useCase/readVirtualHosts.go +++ b/src/domain/useCase/readVirtualHosts.go @@ -4,18 +4,24 @@ import ( "errors" "log/slog" - "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/repository" ) +var VirtualHostsDefaultPagination dto.Pagination = dto.Pagination{ + PageNumber: 0, + ItemsPerPage: 10, +} + func ReadVirtualHosts( vhostQueryRepo repository.VirtualHostQueryRepo, -) ([]entity.VirtualHost, error) { - vhosts, err := vhostQueryRepo.Read() + requestDto dto.ReadVirtualHostsRequest, +) (responseDto dto.ReadVirtualHostsResponse, err error) { + responseDto, err = vhostQueryRepo.Read(requestDto) if err != nil { - slog.Error("ReadVirtualHostsError", slog.Any("error", err)) - return vhosts, errors.New("ReadVirtualHostsInfraError") + slog.Error("ReadVirtualHostsError", slog.String("err", err.Error())) + return responseDto, errors.New("ReadVirtualHostsInfraError") } - return vhosts, nil + return responseDto, nil } diff --git a/src/domain/useCase/readVirtualHostsWithMappings.go b/src/domain/useCase/readVirtualHostsWithMappings.go deleted file mode 100644 index 8174e0bf7..000000000 --- a/src/domain/useCase/readVirtualHostsWithMappings.go +++ /dev/null @@ -1,21 +0,0 @@ -package useCase - -import ( - "errors" - "log/slog" - - "github.com/goinfinite/os/src/domain/dto" - "github.com/goinfinite/os/src/domain/repository" -) - -func ReadVirtualHostsWithMappings( - mappingQueryRepo repository.MappingQueryRepo, -) ([]dto.VirtualHostWithMappings, error) { - vhostsWithMappings, err := mappingQueryRepo.ReadWithMappings() - if err != nil { - slog.Error("ReadWithMappingsError", slog.Any("error", err)) - return vhostsWithMappings, errors.New("ReadWithMappingsInfraError") - } - - return vhostsWithMappings, nil -} diff --git a/src/domain/useCase/refreshMarketplaceCatalogItems.go b/src/domain/useCase/refreshMarketplaceCatalogItems.go index 77df08817..fc2266df7 100644 --- a/src/domain/useCase/refreshMarketplaceCatalogItems.go +++ b/src/domain/useCase/refreshMarketplaceCatalogItems.go @@ -11,6 +11,6 @@ const RefreshMarketplaceCatalogItemsAmountPerDay int = 1 func RefreshMarketplaceCatalogItems(marketplaceCmdRepo repository.MarketplaceCmdRepo) { err := marketplaceCmdRepo.RefreshCatalogItems() if err != nil { - slog.Error("RefreshMarketplaceCatalogItemsError", slog.Any("error", err)) + slog.Error("RefreshMarketplaceCatalogItemsError", slog.String("err", err.Error())) } } diff --git a/src/domain/useCase/refreshServiceInstallableItems.go b/src/domain/useCase/refreshServiceInstallableItems.go index 5213f5812..29445c7b0 100644 --- a/src/domain/useCase/refreshServiceInstallableItems.go +++ b/src/domain/useCase/refreshServiceInstallableItems.go @@ -11,6 +11,6 @@ const RefreshServiceInstallableItemsAmountPerDay int = 1 func RefreshServiceInstallableItems(servicesCmdRepo repository.ServicesCmdRepo) { err := servicesCmdRepo.RefreshInstallableItems() if err != nil { - slog.Error("RefreshServiceInstallableItemsError", slog.Any("error", err)) + slog.Error("RefreshServiceInstallableItemsError", slog.String("err", err.Error())) } } diff --git a/src/domain/useCase/runScheduledTasks.go b/src/domain/useCase/runScheduledTasks.go index 8494bdc24..ff769cb33 100644 --- a/src/domain/useCase/runScheduledTasks.go +++ b/src/domain/useCase/runScheduledTasks.go @@ -24,7 +24,7 @@ func RunScheduledTasks( responseDto, err := scheduledTaskQueryRepo.Read(readDto) if err != nil { - slog.Error("ReadPendingScheduledTasksError", slog.Any("error", err)) + slog.Error("ReadPendingScheduledTasksError", slog.String("err", err.Error())) return } @@ -49,7 +49,7 @@ func RunScheduledTasks( slog.Error( "RunScheduledTaskError", slog.Uint64("scheduledTaskId", pendingTask.Id.Uint64()), - slog.Any("error", err), + slog.String("err", err.Error()), ) continue } diff --git a/src/domain/useCase/sslCertificateWatchdog.go b/src/domain/useCase/sslCertificateWatchdog.go index 7cf23180c..c3f26b445 100644 --- a/src/domain/useCase/sslCertificateWatchdog.go +++ b/src/domain/useCase/sslCertificateWatchdog.go @@ -1,40 +1,125 @@ package useCase import ( - "log" + "log/slog" + "regexp" "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/repository" "github.com/goinfinite/os/src/domain/valueObject" ) const SslValidationsPerHour int = 4 -func SslCertificateWatchdog( +type SslCertificateWatchdog struct { + vhostQueryRepo repository.VirtualHostQueryRepo + sslQueryRepo repository.SslQueryRepo + sslCmdRepo repository.SslCmdRepo +} + +func NewSslCertificateWatchdog( + vhostQueryRepo repository.VirtualHostQueryRepo, sslQueryRepo repository.SslQueryRepo, sslCmdRepo repository.SslCmdRepo, - operatorAccountId valueObject.AccountId, - operatorIpAddress valueObject.IpAddress, -) { - sslPairs, err := sslQueryRepo.Read() +) *SslCertificateWatchdog { + return &SslCertificateWatchdog{ + vhostQueryRepo: vhostQueryRepo, + sslQueryRepo: sslQueryRepo, + sslCmdRepo: sslCmdRepo, + } +} + +func (uc *SslCertificateWatchdog) shouldRenewCert( + vhostEntity entity.VirtualHost, + sslPairEntity entity.SslPair, +) bool { + if len(vhostEntity.AliasesHostnames) == 0 { + return !sslPairEntity.IsPubliclyTrusted() + } + + certAltNamesStrMap := map[string]interface{}{} + for _, altName := range sslPairEntity.Certificate.AltNames { + certAltNamesStrMap[altName.String()] = nil + } + + skipSubdomainRegex := regexp.MustCompile(`^[^\.]+\.`) + missingAltNames := []valueObject.Fqdn{} + for _, aliasHostname := range vhostEntity.AliasesHostnames { + aliasHostnameStr := aliasHostname.String() + if _, altNameExists := certAltNamesStrMap[aliasHostnameStr]; altNameExists { + continue + } + + likelyParentHostname := skipSubdomainRegex.ReplaceAllString(aliasHostnameStr, "") + wildcardParentHostname := "*." + likelyParentHostname + if _, altNameExists := certAltNamesStrMap[wildcardParentHostname]; altNameExists { + continue + } + + missingAltNames = append(missingAltNames, aliasHostname) + } + + if len(missingAltNames) == 0 { + return !sslPairEntity.IsPubliclyTrusted() + } + + if sslPairEntity.IsPubliclyTrusted() { + slog.Debug( + "SslPairPubliclyTrustedButMissingAltNames", + slog.String("method", "SslCertificateWatchdog"), + slog.String("hostname", vhostEntity.Hostname.String()), + slog.Any("currentAltNames", sslPairEntity.Certificate.AltNames), + slog.Any("missingAltNames", missingAltNames), + ) + } + return true +} + +func (uc *SslCertificateWatchdog) Execute() { + vhostReadResponse, err := uc.vhostQueryRepo.Read(dto.ReadVirtualHostsRequest{ + Pagination: dto.PaginationUnpaginated, + }) if err != nil { - log.Printf("ReadSslPairsError: %s", err.Error()) + slog.Error( + "ReadVirtualHostInfraError", + slog.String("error", err.Error()), + slog.String("method", "SslCertificateWatchdog"), + ) return } - for _, sslPair := range sslPairs { - if sslPair.IsPubliclyTrusted() { + for _, vhostEntity := range vhostReadResponse.VirtualHosts { + if vhostEntity.Type == valueObject.VirtualHostTypeAlias { continue } - replaceDto := dto.NewReplaceWithValidSsl( - sslPair, operatorAccountId, operatorIpAddress, - ) - err = sslCmdRepo.ReplaceWithValidSsl(replaceDto) + sslPairEntity, err := uc.sslQueryRepo.ReadFirst(dto.ReadSslPairsRequest{ + VirtualHostHostname: &vhostEntity.Hostname, + }) + if err != nil { + slog.Debug( + "ReadSslPairError", + slog.String("error", err.Error()), + slog.String("method", "SslCertificateWatchdog"), + slog.String("hostname", vhostEntity.Hostname.String()), + ) + continue + } + + if !uc.shouldRenewCert(vhostEntity, sslPairEntity) { + continue + } + + _, err = uc.sslCmdRepo.CreatePubliclyTrusted(dto.NewCreatePubliclyTrustedSslPair( + vhostEntity.Hostname, valueObject.AccountIdSystem, valueObject.IpAddressSystem, + )) if err != nil { - mainSslPairHostname := sslPair.VirtualHostsHostnames[0] - log.Printf( - "ReplaceWithValidSslError (%s): %s", mainSslPairHostname.String(), err.Error(), + slog.Debug( + "CreatePubliclyTrustedSslPairError", + slog.String("error", err.Error()), + slog.String("method", "SslCertificateWatchdog"), + slog.String("hostname", vhostEntity.Hostname.String()), ) } } diff --git a/src/domain/useCase/updateAccount.go b/src/domain/useCase/updateAccount.go index c7f45672e..9f3a4bec7 100644 --- a/src/domain/useCase/updateAccount.go +++ b/src/domain/useCase/updateAccount.go @@ -22,17 +22,14 @@ func UpdateAccount( return errors.New("AccountNotFound") } - if updateDto.Password != nil { - err = accountCmdRepo.UpdatePassword(updateDto.AccountId, *updateDto.Password) - if err != nil { - slog.Error( - "UpdateAccountPasswordError", - slog.String("accountId", updateDto.AccountId.String()), - slog.Any("error", err), - ) - return errors.New("UpdateAccountPasswordInfraError") - } - + err = accountCmdRepo.Update(updateDto) + if err != nil { + slog.Error( + "UpdateAccount", + slog.String("accountId", updateDto.AccountId.String()), + slog.String("err", err.Error()), + ) + return errors.New("UpdateAccountInfraError") } NewCreateSecurityActivityRecord(activityRecordCmdRepo).UpdateAccount(updateDto) diff --git a/src/domain/useCase/updateAccountApiKey.go b/src/domain/useCase/updateAccountApiKey.go index fdc9dfa2f..0c2df8646 100644 --- a/src/domain/useCase/updateAccountApiKey.go +++ b/src/domain/useCase/updateAccountApiKey.go @@ -28,7 +28,7 @@ func UpdateAccountApiKey( slog.Error( "UpdateAccountApiKeyError", slog.String("accountId", updateDto.AccountId.String()), - slog.Any("error", err), + slog.String("err", err.Error()), ) return newKey, errors.New("UpdateAccountApiKeyInfraError") } diff --git a/src/domain/useCase/updateCron.go b/src/domain/useCase/updateCron.go index 31116ddb5..8bafaadab 100644 --- a/src/domain/useCase/updateCron.go +++ b/src/domain/useCase/updateCron.go @@ -26,7 +26,7 @@ func UpdateCron( err = cronCmdRepo.Update(updateDto) if err != nil { - slog.Error("UpdateCronError", slog.Any("err", err)) + slog.Error("UpdateCronError", slog.String("err", err.Error())) return errors.New("UpdateCronInfraError") } diff --git a/src/domain/useCase/updateMapping.go b/src/domain/useCase/updateMapping.go new file mode 100644 index 000000000..ed668cec0 --- /dev/null +++ b/src/domain/useCase/updateMapping.go @@ -0,0 +1,42 @@ +package useCase + +import ( + "errors" + "log/slog" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/repository" + "github.com/goinfinite/os/src/domain/valueObject" +) + +func UpdateMapping( + mappingQueryRepo repository.MappingQueryRepo, + mappingCmdRepo repository.MappingCmdRepo, + activityRecordCmdRepo repository.ActivityRecordCmdRepo, + updateDto dto.UpdateMapping, +) error { + _, err := mappingQueryRepo.ReadFirst(dto.ReadMappingsRequest{ + MappingId: &updateDto.Id, + }) + if err != nil { + slog.Debug("ReadMappingError", slog.String("err", err.Error())) + return errors.New("MappingNotFound") + } + + if updateDto.TargetType != nil && + *updateDto.TargetType == valueObject.MappingTargetTypeResponseCode { + // TODO: When the "truncatable" feature is implemented, change this to + // populate the truncatable slice instead. + updateDto.TargetValue = nil + } + + err = mappingCmdRepo.Update(updateDto) + if err != nil { + slog.Error("UpdateMappingError", slog.String("err", err.Error())) + return errors.New("UpdateMappingInfraError") + } + + NewCreateSecurityActivityRecord(activityRecordCmdRepo).UpdateMapping(updateDto) + + return nil +} diff --git a/src/domain/useCase/updateMappingSecurityRule.go b/src/domain/useCase/updateMappingSecurityRule.go new file mode 100644 index 000000000..50e002d41 --- /dev/null +++ b/src/domain/useCase/updateMappingSecurityRule.go @@ -0,0 +1,34 @@ +package useCase + +import ( + "errors" + "log/slog" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/repository" +) + +func UpdateMappingSecurityRule( + mappingQueryRepo repository.MappingQueryRepo, + mappingCmdRepo repository.MappingCmdRepo, + activityRecordCmdRepo repository.ActivityRecordCmdRepo, + updateDto dto.UpdateMappingSecurityRule, +) error { + _, err := mappingQueryRepo.ReadFirstSecurityRule( + dto.ReadMappingSecurityRulesRequest{MappingSecurityRuleId: &updateDto.Id}, + ) + if err != nil { + return errors.New("MappingSecurityRuleNotFound") + } + + err = mappingCmdRepo.UpdateSecurityRule(updateDto) + if err != nil { + slog.Error("UpdateMappingSecurityRuleError", slog.String("err", err.Error())) + return errors.New("UpdateMappingSecurityRuleInfraError") + } + + NewCreateSecurityActivityRecord(activityRecordCmdRepo). + UpdateMappingSecurityRule(updateDto) + + return nil +} diff --git a/src/domain/useCase/updatePhpConfigs.go b/src/domain/useCase/updatePhpConfigs.go index 3328bd128..fbe661949 100644 --- a/src/domain/useCase/updatePhpConfigs.go +++ b/src/domain/useCase/updatePhpConfigs.go @@ -34,22 +34,22 @@ func UpdatePhpConfigs( activityCmdRepo repository.ActivityRecordCmdRepo, updateDto dto.UpdatePhpConfigs, ) error { - isPhpVersionInstalled := isPhpVersionInstalled( - runtimeQueryRepo, updateDto.PhpVersion, - ) + isPhpVersionInstalled := isPhpVersionInstalled(runtimeQueryRepo, updateDto.PhpVersion) if !isPhpVersionInstalled { return errors.New("PhpVersionNotInstalled") } - _, err := vhostQueryRepo.ReadByHostname(updateDto.Hostname) + _, err := vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: &updateDto.Hostname, + }) if err != nil { - slog.Error("HostnameNotFound", slog.Any("err", err)) - return errors.New("HostnameNotFound") + slog.Error("VirtualHostNotFound", slog.String("err", err.Error())) + return errors.New("VirtualHostNotFound") } err = runtimeCmdRepo.UpdatePhpVersion(updateDto.Hostname, updateDto.PhpVersion) if err != nil { - slog.Error("UpdatePhpVersionError", slog.Any("err", err)) + slog.Error("UpdatePhpVersionError", slog.String("err", err.Error())) return errors.New("UpdatePhpVersionInfraError") } securityActivityRecord := NewCreateSecurityActivityRecord(activityCmdRepo) @@ -58,7 +58,7 @@ func UpdatePhpConfigs( if len(updateDto.PhpModules) > 0 { err = runtimeCmdRepo.UpdatePhpModules(updateDto.Hostname, updateDto.PhpModules) if err != nil { - slog.Error("UpdatePhpModulesError", slog.Any("err", err)) + slog.Error("UpdatePhpModulesError", slog.String("err", err.Error())) return errors.New("UpdatePhpModulesInfraError") } securityActivityRecord.UpdatePhpConfigs(updateDto, "modules") @@ -67,7 +67,7 @@ func UpdatePhpConfigs( if len(updateDto.PhpSettings) > 0 { err = runtimeCmdRepo.UpdatePhpSettings(updateDto.Hostname, updateDto.PhpSettings) if err != nil { - slog.Error("UpdatePhpSettingsError", slog.Any("err", err)) + slog.Error("UpdatePhpSettingsError", slog.String("err", err.Error())) return errors.New("UpdatePhpSettingsInfraError") } securityActivityRecord.UpdatePhpConfigs(updateDto, "settings") diff --git a/src/domain/useCase/updateScheduledTask.go b/src/domain/useCase/updateScheduledTask.go index 8ca1d5429..79aebd9d3 100644 --- a/src/domain/useCase/updateScheduledTask.go +++ b/src/domain/useCase/updateScheduledTask.go @@ -40,7 +40,7 @@ func UpdateScheduledTask( err = scheduledTaskCmdRepo.Update(updateDto) if err != nil { - slog.Error("UpdateScheduledTaskInfraError", slog.Any("error", err)) + slog.Error("UpdateScheduledTaskInfraError", slog.String("err", err.Error())) return errors.New("UpdateScheduledTaskInfraError") } diff --git a/src/domain/useCase/updateService.go b/src/domain/useCase/updateService.go index e95cf4360..f19d78655 100644 --- a/src/domain/useCase/updateService.go +++ b/src/domain/useCase/updateService.go @@ -6,6 +6,7 @@ import ( "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/repository" + "github.com/goinfinite/os/src/domain/valueObject" ) func UpdateService( @@ -16,18 +17,16 @@ func UpdateService( activityRecordCmdRepo repository.ActivityRecordCmdRepo, updateDto dto.UpdateService, ) error { - readFirstInstalledRequestDto := dto.ReadFirstInstalledServiceItemsRequest{ - ServiceName: &updateDto.Name, - } serviceEntity, err := servicesQueryRepo.ReadFirstInstalledItem( - readFirstInstalledRequestDto, + dto.ReadFirstInstalledServiceItemsRequest{ServiceName: &updateDto.Name}, ) if err != nil { - return err + slog.Error("ReadServiceInfraEntityError", slog.String("err", err.Error())) + return errors.New("ReadServiceEntityError") } - isSoloService := serviceEntity.Nature.String() == "solo" - isSystemService := serviceEntity.Type.String() == "system" + isSoloService := serviceEntity.Nature == valueObject.ServiceNatureSolo + isSystemService := serviceEntity.Type == valueObject.ServiceTypeSystem shouldUpdateStatus := updateDto.Status != nil if (isSoloService || isSystemService) && !shouldUpdateStatus { return errors.New("OnlyStatusUpdateAllowed") @@ -39,14 +38,14 @@ func UpdateService( updateDto.Name, updateDto.OperatorAccountId, updateDto.OperatorIpAddress, ) return DeleteService( - servicesQueryRepo, servicesCmdRepo, mappingCmdRepo, activityRecordCmdRepo, - deleteDto, + servicesQueryRepo, servicesCmdRepo, mappingQueryRepo, mappingCmdRepo, + activityRecordCmdRepo, deleteDto, ) } err = servicesCmdRepo.Update(updateDto) if err != nil { - slog.Error("UpdateServiceError", slog.Any("error", err)) + slog.Error("UpdateServiceError", slog.String("err", err.Error())) return errors.New("UpdateServiceInfraError") } @@ -56,12 +55,9 @@ func UpdateService( return nil } - err = mappingCmdRepo.RecreateByServiceName( - updateDto.Name, updateDto.OperatorAccountId, updateDto.OperatorIpAddress, + shouldRecreateAutoMappings := true + return DeleteServiceMappings( + mappingQueryRepo, mappingCmdRepo, updateDto.Name, shouldRecreateAutoMappings, + updateDto.OperatorAccountId, updateDto.OperatorIpAddress, ) - if err != nil { - slog.Error("RecreateMappingError", slog.Any("error", err)) - } - - return nil } diff --git a/src/domain/useCase/updateUnixFiles.go b/src/domain/useCase/updateUnixFiles.go index 821a7967f..3ff592269 100644 --- a/src/domain/useCase/updateUnixFiles.go +++ b/src/domain/useCase/updateUnixFiles.go @@ -10,11 +10,13 @@ import ( ) type UpdateUnixFiles struct { + filesQueryRepo repository.FilesQueryRepo filesCmdRepo repository.FilesCmdRepo activityRecordCmdRepo repository.ActivityRecordCmdRepo } func NewUpdateUnixFiles( + filesQueryRepo repository.FilesQueryRepo, filesCmdRepo repository.FilesCmdRepo, activityRecordCmdRepo repository.ActivityRecordCmdRepo, ) UpdateUnixFiles { @@ -27,60 +29,109 @@ func NewUpdateUnixFiles( func (uc UpdateUnixFiles) updateFailureFactory( filePath valueObject.UnixFilePath, errMessage string, -) (valueObject.UpdateProcessFailure, error) { - var updateProcessFailure valueObject.UpdateProcessFailure - +) valueObject.UpdateProcessFailure { failureReason, err := valueObject.NewFailureReason(errMessage) if err != nil { - return updateProcessFailure, err + slog.Debug(err.Error(), slog.String("errMessage", errMessage)) + failureReason, _ = valueObject.NewFailureReason("MalformedFailureReason") } - return valueObject.NewUpdateProcessFailure(filePath, failureReason), nil + return valueObject.NewUpdateProcessFailure(filePath, failureReason) } func (uc UpdateUnixFiles) updateFilePermissions( sourcePath valueObject.UnixFilePath, permissions valueObject.UnixFilePermissions, ) error { - updatePermissions := dto.NewUpdateUnixFilePermissions(sourcePath, permissions) + updatePermissions := dto.NewUpdateUnixFilePermissions( + sourcePath, permissions, nil, + ) err := uc.filesCmdRepo.UpdatePermissions(updatePermissions) if err != nil { - slog.Error("UpdateFilePermissionsError", slog.Any("err", err)) + slog.Error("UpdateFilePermissionsError", slog.String("err", err.Error())) return errors.New("UpdateFilePermissionsInfraError") } return nil } -func (uc UpdateUnixFiles) moveFile( +func (uc UpdateUnixFiles) updateFileContent( sourcePath valueObject.UnixFilePath, - destinationPath valueObject.UnixFilePath, + encodedContent valueObject.EncodedContent, ) error { - shouldOverwrite := false - moveDto := dto.NewMoveUnixFile(sourcePath, destinationPath, shouldOverwrite) + updateContentDto := dto.NewUpdateUnixFileContent(sourcePath, encodedContent) - err := uc.filesCmdRepo.Move(moveDto) + err := uc.filesCmdRepo.UpdateContent(updateContentDto) if err != nil { - slog.Error("MoveFileError", slog.Any("err", err)) - return errors.New("MoveFileInfraError") + slog.Error("UpdateFileContentError", slog.String("err", err.Error())) + return errors.New("UpdateFileContentInfraError") } return nil } -func (uc UpdateUnixFiles) updateFileContent( +func (uc UpdateUnixFiles) updateFileOwnership( sourcePath valueObject.UnixFilePath, - encodedContent valueObject.EncodedContent, + ownership valueObject.UnixFileOwnership, ) error { - updateContentDto := dto.NewUpdateUnixFileContent(sourcePath, encodedContent) + updateOwnershipDto := dto.NewUpdateUnixFileOwnership(sourcePath, ownership) - err := uc.filesCmdRepo.UpdateContent(updateContentDto) + err := uc.filesCmdRepo.UpdateOwnership(updateOwnershipDto) if err != nil { - slog.Error("UpdateFileContentError", slog.Any("err", err)) - return errors.New("UpdateFileContentInfraError") + slog.Error("UpdateFileOwnershipError", slog.String("err", err.Error())) + return errors.New("UpdateFileOwnershipInfraError") + } + + return nil +} + +func (uc UpdateUnixFiles) fixFilePermissions( + sourcePath valueObject.UnixFilePath, +) error { + _, err := uc.filesQueryRepo.ReadFirst(sourcePath) + if err != nil { + return errors.New("SourcePathNotFound") + } + + filePermissions := valueObject.NewUnixFileDefaultPermissions() + dirPermissions := valueObject.NewUnixDirDefaultPermissions() + + sourcePathStr := sourcePath.String() + if sourcePathStr == "/app/html" { + dirPermissions, _ = valueObject.NewUnixFilePermissions("777") + } + + updatePermissionsDto := dto.NewUpdateUnixFilePermissions( + sourcePath, filePermissions, &dirPermissions, + ) + + err = uc.filesCmdRepo.UpdatePermissions(updatePermissionsDto) + if err != nil { + slog.Error("FixFilePermissionsError", slog.String("err", err.Error())) + return errors.New("FixFilePermissionsInfraError") } + NormalizeKnownUnixFilePathPermissions(uc.filesCmdRepo, sourcePath) + + return nil +} + +func (uc UpdateUnixFiles) moveFile( + sourcePath valueObject.UnixFilePath, + destinationPath valueObject.UnixFilePath, +) error { + shouldOverwrite := false + moveDto := dto.NewMoveUnixFile(sourcePath, destinationPath, shouldOverwrite) + + err := uc.filesCmdRepo.Move(moveDto) + if err != nil { + slog.Error("MoveFileError", slog.String("err", err.Error())) + return errors.New("MoveFileInfraError") + } + + NormalizeKnownUnixFilePathPermissions(uc.filesCmdRepo, destinationPath) + return nil } @@ -96,11 +147,18 @@ func (uc UpdateUnixFiles) Execute( if updateDto.Permissions != nil { err := uc.updateFilePermissions(sourcePath, *updateDto.Permissions) if err != nil { - updateFailure, err := uc.updateFailureFactory(sourcePath, err.Error()) - if err != nil { - slog.Error("AddUpdatePermissionsFailureError", slog.Any("err", err)) - } + updateFailure := uc.updateFailureFactory(sourcePath, err.Error()) + updateProcessReport.FailedPathsWithReason = append( + updateProcessReport.FailedPathsWithReason, updateFailure, + ) + continue + } + } + if updateDto.Ownership != nil { + err := uc.updateFileOwnership(sourcePath, *updateDto.Ownership) + if err != nil { + updateFailure := uc.updateFailureFactory(sourcePath, err.Error()) updateProcessReport.FailedPathsWithReason = append( updateProcessReport.FailedPathsWithReason, updateFailure, ) @@ -111,11 +169,18 @@ func (uc UpdateUnixFiles) Execute( if updateDto.EncodedContent != nil { err := uc.updateFileContent(sourcePath, *updateDto.EncodedContent) if err != nil { - updateFailure, err := uc.updateFailureFactory(sourcePath, err.Error()) - if err != nil { - slog.Error("AddUpdateContentFailureError", slog.Any("err", err)) - } + updateFailure := uc.updateFailureFactory(sourcePath, err.Error()) + updateProcessReport.FailedPathsWithReason = append( + updateProcessReport.FailedPathsWithReason, updateFailure, + ) + continue + } + } + if updateDto.ShouldFixPermissions != nil { + err := uc.fixFilePermissions(sourcePath) + if err != nil { + updateFailure := uc.updateFailureFactory(sourcePath, err.Error()) updateProcessReport.FailedPathsWithReason = append( updateProcessReport.FailedPathsWithReason, updateFailure, ) @@ -126,11 +191,7 @@ func (uc UpdateUnixFiles) Execute( if updateDto.DestinationPath != nil { err := uc.moveFile(sourcePath, *updateDto.DestinationPath) if err != nil { - updateFailure, err := uc.updateFailureFactory(sourcePath, err.Error()) - if err != nil { - slog.Error("AddMoveFailureError", slog.Any("err", err)) - } - + updateFailure := uc.updateFailureFactory(sourcePath, err.Error()) updateProcessReport.FailedPathsWithReason = append( updateProcessReport.FailedPathsWithReason, updateFailure, ) diff --git a/src/domain/useCase/updateVirtualHost.go b/src/domain/useCase/updateVirtualHost.go new file mode 100644 index 000000000..2aefb41b9 --- /dev/null +++ b/src/domain/useCase/updateVirtualHost.go @@ -0,0 +1,34 @@ +package useCase + +import ( + "errors" + "log/slog" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/repository" +) + +func UpdateVirtualHost( + vhostQueryRepo repository.VirtualHostQueryRepo, + vhostCmdRepo repository.VirtualHostCmdRepo, + activityRecordCmdRepo repository.ActivityRecordCmdRepo, + updateDto dto.UpdateVirtualHost, +) error { + _, err := vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: &updateDto.Hostname, + }) + if err != nil { + slog.Debug("ReadVirtualHostError", slog.String("err", err.Error())) + return errors.New("VirtualHostNotFound") + } + + err = vhostCmdRepo.Update(updateDto) + if err != nil { + slog.Error("UpdateVirtualHostError", slog.String("err", err.Error())) + return errors.New("UpdateVirtualHostInfraError") + } + + NewCreateSecurityActivityRecord(activityRecordCmdRepo).UpdateVirtualHost(updateDto) + + return nil +} diff --git a/src/domain/useCase/uploadUnixFiles.go b/src/domain/useCase/uploadUnixFiles.go index 599f43652..26978ca74 100644 --- a/src/domain/useCase/uploadUnixFiles.go +++ b/src/domain/useCase/uploadUnixFiles.go @@ -41,7 +41,7 @@ func UploadUnixFiles( uploadProcessReport, err := filesCmdRepo.Upload(uploadDto) if err != nil { - slog.Error("UploadUnixFileError", slog.Any("err", err)) + slog.Error("UploadUnixFileError", slog.String("err", err.Error())) return uploadProcessReport, errors.New("UploadUnixFileInfraError") } @@ -51,5 +51,17 @@ func UploadUnixFiles( NewCreateSecurityActivityRecord(activityRecordCmdRepo).UploadUnixFiles(uploadDto) + destinationPathStr := uploadProcessReport.DestinationPath.String() + for _, fileName := range uploadProcessReport.FileNamesSuccessfullyUploaded { + filePath, err := valueObject.NewUnixFilePath( + destinationPathStr + "/" + fileName.String(), + ) + if err != nil { + continue + } + + NormalizeKnownUnixFilePathPermissions(filesCmdRepo, filePath) + } + return uploadProcessReport, nil } diff --git a/src/domain/valueObject/accountId.go b/src/domain/valueObject/accountId.go index 332821c71..2ae1bdb32 100644 --- a/src/domain/valueObject/accountId.go +++ b/src/domain/valueObject/accountId.go @@ -9,6 +9,8 @@ import ( type AccountId uint64 +var AccountIdSystem = AccountId(0) + func NewAccountId(value interface{}) (accountId AccountId, err error) { uintValue, err := voHelper.InterfaceToUint(value) if err != nil { diff --git a/src/domain/valueObject/byte.go b/src/domain/valueObject/byte.go index d05168705..a201e7d49 100644 --- a/src/domain/valueObject/byte.go +++ b/src/domain/valueObject/byte.go @@ -40,6 +40,10 @@ func (vo Byte) Int64() int64 { return int64(vo) } +func (vo Byte) Uint64() uint64 { + return uint64(vo) +} + func (vo Byte) ToKiB() int64 { return vo.Int64() / 1024 } diff --git a/src/domain/valueObject/databaseType.go b/src/domain/valueObject/databaseType.go index c191ffdcc..9462bebff 100644 --- a/src/domain/valueObject/databaseType.go +++ b/src/domain/valueObject/databaseType.go @@ -6,7 +6,6 @@ import ( "strings" voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" - "golang.org/x/exp/maps" ) type DatabaseType string @@ -32,17 +31,14 @@ func NewDatabaseType(value interface{}) (dbType DatabaseType, err error) { } func databaseTypeAdapter(value string) (string, error) { - databaseTypes := maps.Keys(databaseTypesWithAliases) - if slices.Contains(databaseTypes, value) { - return value, nil - } - - for _, databaseType := range databaseTypes { - if !slices.Contains(databaseTypesWithAliases[databaseType], value) { - continue + for exactName, aliases := range databaseTypesWithAliases { + if exactName == value { + return exactName, nil } - return databaseType, nil + if slices.Contains(aliases, value) { + return exactName, nil + } } return "", errors.New("InvalidDatabaseType") diff --git a/src/domain/valueObject/helper/interfaceToBool.go b/src/domain/valueObject/helper/interfaceToBool.go index 5ab1c425d..56d5037f8 100644 --- a/src/domain/valueObject/helper/interfaceToBool.go +++ b/src/domain/valueObject/helper/interfaceToBool.go @@ -4,6 +4,7 @@ import ( "errors" "reflect" "strconv" + "strings" ) func InterfaceToBool(input interface{}) (output bool, err error) { @@ -11,7 +12,17 @@ func InterfaceToBool(input interface{}) (output bool, err error) { case bool: return v, nil case string: - return strconv.ParseBool(v) + stringValue := strings.TrimSpace(v) + stringValue = strings.ToLower(stringValue) + if stringValue == "on" { + return true, nil + } + + if stringValue == "off" { + return false, nil + } + + return strconv.ParseBool(stringValue) case int, int8, int16, int32, int64: intValue := reflect.ValueOf(v).Int() return intValue != 0, nil diff --git a/src/domain/valueObject/ipAddress.go b/src/domain/valueObject/ipAddress.go index b0075571b..ab19d920b 100644 --- a/src/domain/valueObject/ipAddress.go +++ b/src/domain/valueObject/ipAddress.go @@ -9,6 +9,8 @@ import ( type IpAddress string +var IpAddressSystem = IpAddress("127.0.0.1") + func NewIpAddress(value interface{}) (ipAddress IpAddress, err error) { stringValue, err := voHelper.InterfaceToString(value) if err != nil { @@ -23,10 +25,6 @@ func NewIpAddress(value interface{}) (ipAddress IpAddress, err error) { return IpAddress(stringValue), nil } -func NewLocalhostIpAddress() IpAddress { - return IpAddress("127.0.0.1") -} - func (vo IpAddress) String() string { return string(vo) } diff --git a/src/domain/valueObject/mappingId.go b/src/domain/valueObject/mappingId.go index 73e143fb3..3a7c213cd 100644 --- a/src/domain/valueObject/mappingId.go +++ b/src/domain/valueObject/mappingId.go @@ -4,13 +4,13 @@ import ( "errors" "strconv" - voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" + tkVoUtil "github.com/goinfinite/tk/src/domain/valueObject/util" ) type MappingId uint64 func NewMappingId(value interface{}) (mappingId MappingId, err error) { - uintValue, err := voHelper.InterfaceToUint64(value) + uintValue, err := tkVoUtil.InterfaceToUint64(value) if err != nil { return mappingId, errors.New("MappingIdMustBeUint64") } diff --git a/src/domain/valueObject/mappingMatchPattern.go b/src/domain/valueObject/mappingMatchPattern.go index 26b750f27..a8273028f 100644 --- a/src/domain/valueObject/mappingMatchPattern.go +++ b/src/domain/valueObject/mappingMatchPattern.go @@ -2,7 +2,6 @@ package valueObject import ( "errors" - "slices" "strings" voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" @@ -10,25 +9,31 @@ import ( type MappingMatchPattern string -var validMappingMatchPatterns = []string{ - "begins-with", "contains", "equals", "ends-with", -} +const ( + MappingMatchPatternBeginsWith MappingMatchPattern = "begins-with" + MappingMatchPatternContains MappingMatchPattern = "contains" + MappingMatchPatternEquals MappingMatchPattern = "equals" + MappingMatchPatternEndsWith MappingMatchPattern = "ends-with" +) func NewMappingMatchPattern(value interface{}) ( - mappingMatchPattern MappingMatchPattern, err error, + matchPattern MappingMatchPattern, err error, ) { stringValue, err := voHelper.InterfaceToString(value) if err != nil { - return mappingMatchPattern, errors.New("MappingMatchPatternMustBeString") + return matchPattern, errors.New("MappingMatchPatternMustBeString") } stringValue = strings.ToLower(stringValue) stringValue = strings.ReplaceAll(stringValue, " ", "-") - if !slices.Contains(validMappingMatchPatterns, stringValue) { - return mappingMatchPattern, errors.New("InvalidMappingMatchPattern") + stringValueVo := MappingMatchPattern(stringValue) + switch stringValueVo { + case MappingMatchPatternBeginsWith, MappingMatchPatternContains, + MappingMatchPatternEquals, MappingMatchPatternEndsWith: + return stringValueVo, nil + default: + return matchPattern, errors.New("InvalidMappingMatchPattern") } - - return MappingMatchPattern(stringValue), nil } func (vo MappingMatchPattern) String() string { diff --git a/src/domain/valueObject/mappingSecurityRuleDescription.go b/src/domain/valueObject/mappingSecurityRuleDescription.go new file mode 100644 index 000000000..478d8d2e4 --- /dev/null +++ b/src/domain/valueObject/mappingSecurityRuleDescription.go @@ -0,0 +1,33 @@ +package valueObject + +import ( + "errors" + "regexp" + + tkVoUtil "github.com/goinfinite/tk/src/domain/valueObject/util" +) + +const mappingSecurityRuleDescriptionRegex string = `^[^\r\n\t\x00-\x1F\x7F]{0,1000}$` + +type MappingSecurityRuleDescription string + +func NewMappingSecurityRuleDescription(value interface{}) ( + mappingSecurityRuleDescription MappingSecurityRuleDescription, + err error, +) { + stringValue, err := tkVoUtil.InterfaceToString(value) + if err != nil { + return mappingSecurityRuleDescription, errors.New("MappingSecurityRuleDescriptionMustBeString") + } + + re := regexp.MustCompile(mappingSecurityRuleDescriptionRegex) + if !re.MatchString(stringValue) { + return mappingSecurityRuleDescription, errors.New("InvalidMappingSecurityRuleDescription") + } + + return MappingSecurityRuleDescription(stringValue), nil +} + +func (vo MappingSecurityRuleDescription) String() string { + return string(vo) +} diff --git a/src/domain/valueObject/mappingSecurityRuleId.go b/src/domain/valueObject/mappingSecurityRuleId.go new file mode 100644 index 000000000..52f9ecbb4 --- /dev/null +++ b/src/domain/valueObject/mappingSecurityRuleId.go @@ -0,0 +1,34 @@ +package valueObject + +import ( + "errors" + "strconv" + + tkVoUtil "github.com/goinfinite/tk/src/domain/valueObject/util" +) + +type MappingSecurityRuleId uint64 + +func NewMappingSecurityRuleId(value interface{}) ( + mappingSecurityRuleId MappingSecurityRuleId, + err error, +) { + uintValue, err := tkVoUtil.InterfaceToUint64(value) + if err != nil { + return mappingSecurityRuleId, errors.New("MappingSecurityRuleIdMustBeUint64") + } + + if uintValue == 0 { + return mappingSecurityRuleId, errors.New("MappingSecurityRuleIdCannotBeZero") + } + + return MappingSecurityRuleId(uintValue), nil +} + +func (vo MappingSecurityRuleId) Uint64() uint64 { + return uint64(vo) +} + +func (vo MappingSecurityRuleId) String() string { + return strconv.FormatUint(uint64(vo), 10) +} diff --git a/src/domain/valueObject/mappingSecurityRuleName.go b/src/domain/valueObject/mappingSecurityRuleName.go new file mode 100644 index 000000000..fd3cdb6ea --- /dev/null +++ b/src/domain/valueObject/mappingSecurityRuleName.go @@ -0,0 +1,33 @@ +package valueObject + +import ( + "errors" + "regexp" + + tkVoUtil "github.com/goinfinite/tk/src/domain/valueObject/util" +) + +const mappingSecurityRuleNameRegex string = `^[a-zA-Z0-9][a-zA-Z0-9\-_ ]{1,512}$` + +type MappingSecurityRuleName string + +func NewMappingSecurityRuleName(value interface{}) ( + mappingSecurityRuleName MappingSecurityRuleName, + err error, +) { + stringValue, err := tkVoUtil.InterfaceToString(value) + if err != nil { + return mappingSecurityRuleName, errors.New("MappingSecurityRuleNameMustBeString") + } + + re := regexp.MustCompile(mappingSecurityRuleNameRegex) + if !re.MatchString(stringValue) { + return mappingSecurityRuleName, errors.New("InvalidMappingSecurityRuleName") + } + + return MappingSecurityRuleName(stringValue), nil +} + +func (vo MappingSecurityRuleName) String() string { + return string(vo) +} diff --git a/src/domain/valueObject/mappingTargetType.go b/src/domain/valueObject/mappingTargetType.go index 9d8d566af..4d8169d5b 100644 --- a/src/domain/valueObject/mappingTargetType.go +++ b/src/domain/valueObject/mappingTargetType.go @@ -5,19 +5,29 @@ import ( "slices" "strings" - voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" + tkVoUtil "github.com/goinfinite/tk/src/domain/valueObject/util" ) type MappingTargetType string +const ( + MappingTargetTypeUrl MappingTargetType = "url" + MappingTargetTypeService MappingTargetType = "service" + MappingTargetTypeResponseCode MappingTargetType = "response-code" + MappingTargetTypeInlineHtml MappingTargetType = "inline-html" + MappingTargetTypeStaticFiles MappingTargetType = "static-files" +) + var ValidMappingTargetTypes = []string{ - "url", "service", "response-code", "inline-html", "static-files", + MappingTargetTypeUrl.String(), MappingTargetTypeService.String(), + MappingTargetTypeResponseCode.String(), MappingTargetTypeInlineHtml.String(), + MappingTargetTypeStaticFiles.String(), } func NewMappingTargetType(value interface{}) ( mappingTargetType MappingTargetType, err error, ) { - stringValue, err := voHelper.InterfaceToString(value) + stringValue, err := tkVoUtil.InterfaceToString(value) if err != nil { return mappingTargetType, errors.New("MappingTargetTypeMustBeString") } diff --git a/src/domain/valueObject/marketplaceItemMapping.go b/src/domain/valueObject/marketplaceItemMapping.go index 2fc88f002..b64f22cf0 100644 --- a/src/domain/valueObject/marketplaceItemMapping.go +++ b/src/domain/valueObject/marketplaceItemMapping.go @@ -1,11 +1,12 @@ package valueObject type MarketplaceItemMapping struct { - Path MappingPath `json:"path"` - MatchPattern MappingMatchPattern `json:"matchPattern"` - TargetType MappingTargetType `json:"targetType"` - TargetValue *MappingTargetValue `json:"targetValue"` - TargetHttpResponseCode *HttpResponseCode `json:"targetHttpResponseCode"` + Path MappingPath `json:"path"` + MatchPattern MappingMatchPattern `json:"matchPattern"` + TargetType MappingTargetType `json:"targetType"` + TargetValue *MappingTargetValue `json:"targetValue"` + TargetHttpResponseCode *HttpResponseCode `json:"targetHttpResponseCode"` + ShouldUpgradeInsecureRequests *bool `json:"shouldUpgradeInsecureRequests"` } func NewMarketplaceItemMapping( @@ -14,12 +15,14 @@ func NewMarketplaceItemMapping( targetType MappingTargetType, targetValue *MappingTargetValue, targetHttpResponseCode *HttpResponseCode, + shouldUpgradeInsecureRequests *bool, ) MarketplaceItemMapping { return MarketplaceItemMapping{ - Path: path, - MatchPattern: matchPattern, - TargetType: targetType, - TargetValue: targetValue, - TargetHttpResponseCode: targetHttpResponseCode, + Path: path, + MatchPattern: matchPattern, + TargetType: targetType, + TargetValue: targetValue, + TargetHttpResponseCode: targetHttpResponseCode, + ShouldUpgradeInsecureRequests: shouldUpgradeInsecureRequests, } } diff --git a/src/domain/valueObject/marketplaceItemName.go b/src/domain/valueObject/marketplaceItemName.go index d3c983426..dddc3ba58 100644 --- a/src/domain/valueObject/marketplaceItemName.go +++ b/src/domain/valueObject/marketplaceItemName.go @@ -9,7 +9,7 @@ import ( type MarketplaceItemName string -const marketplaceItemNameRegexExpression = `^\p{L}[\p{L}\'\ \-]{3,30}$` +const marketplaceItemNameRegexExpression = `^[A-z0-9][\p{L}0-9\'\ \-]{1,30}$` func NewMarketplaceItemName(value interface{}) ( marketplaceItemName MarketplaceItemName, err error, diff --git a/src/domain/valueObject/marketplaceItemName_test.go b/src/domain/valueObject/marketplaceItemName_test.go index 104706c40..54fcc8baf 100644 --- a/src/domain/valueObject/marketplaceItemName_test.go +++ b/src/domain/valueObject/marketplaceItemName_test.go @@ -7,7 +7,7 @@ func TestMarketplaceItemName(t *testing.T) { validMarketplaceItemNames := []interface{}{ "wordpress", "WordPress", "opencart", "OpenCart", "Magento", "magento", "Joomla", "joomla", "Drupal", "drupal", "Supabase", "supabase", - "Laravel", "laravel", "rabbitmq", "RabbitMQ", + "Laravel", "laravel", "rabbitmq", "RabbitMQ", "n8n", "1stService", } for _, name := range validMarketplaceItemNames { @@ -21,7 +21,7 @@ func TestMarketplaceItemName(t *testing.T) { t.Run("InvalidMarketplaceItemName", func(t *testing.T) { invalidMarketplaceItemNames := []interface{}{ "", ".", "..", "/", "A very long name without any reason just for the test", - "", + "", "ôpencart", "#agento", } for _, name := range invalidMarketplaceItemNames { diff --git a/src/domain/valueObject/mimeType.go b/src/domain/valueObject/mimeType.go index a4ca5b77e..4661bbe5d 100644 --- a/src/domain/valueObject/mimeType.go +++ b/src/domain/valueObject/mimeType.go @@ -11,6 +11,9 @@ const mimeTypeRegexExpression = `^[A-z0-9\-]{1,64}\/[A-z0-9\-\_\+\.\,]{2,128}$|^ type MimeType string +const MimeTypeDirectory = MimeType("directory") +const MimeTypeGeneric = MimeType("generic") + func NewMimeType(value interface{}) (mimeType MimeType, err error) { stringValue, err := voHelper.InterfaceToString(value) if err != nil { @@ -30,5 +33,5 @@ func (vo MimeType) String() string { } func (vo MimeType) IsDir() bool { - return vo == "directory" + return vo == MimeTypeDirectory } diff --git a/src/domain/valueObject/networkProtocol.go b/src/domain/valueObject/networkProtocol.go index d5b9572fb..77305ffcc 100644 --- a/src/domain/valueObject/networkProtocol.go +++ b/src/domain/valueObject/networkProtocol.go @@ -10,7 +10,7 @@ import ( type NetworkProtocol string -var validNetworkProtocols = []string{ +var ValidNetworkProtocols = []string{ "http", "https", "ws", "wss", "grpc", "grpcs", "tcp", "udp", } @@ -23,7 +23,7 @@ func NewNetworkProtocol(value interface{}) ( } stringValue = strings.ToLower(stringValue) - if !slices.Contains(validNetworkProtocols, stringValue) { + if !slices.Contains(ValidNetworkProtocols, stringValue) { return networkProtocol, errors.New("InvalidNetworkProtocol") } diff --git a/src/domain/valueObject/serviceName.go b/src/domain/valueObject/serviceName.go index cbeddf667..9e4e5f0a5 100644 --- a/src/domain/valueObject/serviceName.go +++ b/src/domain/valueObject/serviceName.go @@ -7,7 +7,6 @@ import ( "strings" voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" - "golang.org/x/exp/maps" ) type ServiceName string @@ -46,13 +45,14 @@ func ServiceNameAdapter(value string) string { stringValue := strings.TrimSpace(value) stringValue = strings.ToLower(stringValue) - nativeSvcNames := maps.Keys(NativeSvcNamesWithAliases) - for _, nativeSvcName := range nativeSvcNames { - if !slices.Contains(NativeSvcNamesWithAliases[nativeSvcName], stringValue) { - continue + for exactName, aliases := range NativeSvcNamesWithAliases { + if exactName == value { + return exactName + } + + if slices.Contains(aliases, value) { + return exactName } - stringValue = nativeSvcName - break } return stringValue diff --git a/src/domain/valueObject/serviceNature.go b/src/domain/valueObject/serviceNature.go index e9961d8d9..ca8272240 100644 --- a/src/domain/valueObject/serviceNature.go +++ b/src/domain/valueObject/serviceNature.go @@ -10,8 +10,15 @@ import ( type ServiceNature string +const ( + ServiceNatureSolo ServiceNature = "solo" + ServiceNatureMulti ServiceNature = "multi" + ServiceNatureCustom ServiceNature = "custom" +) + var ValidServiceNatures = []string{ - "solo", "multi", "custom", + ServiceNatureSolo.String(), ServiceNatureMulti.String(), + ServiceNatureCustom.String(), } func NewServiceNature(value interface{}) (serviceNature ServiceNature, err error) { diff --git a/src/domain/valueObject/serviceNature_test.go b/src/domain/valueObject/serviceNature_test.go index 5f092e664..f845d882f 100644 --- a/src/domain/valueObject/serviceNature_test.go +++ b/src/domain/valueObject/serviceNature_test.go @@ -4,11 +4,7 @@ import "testing" func TestServiceNature(t *testing.T) { t.Run("ValidServiceNature", func(t *testing.T) { - validServiceNature := []interface{}{ - "solo", "multi", "custom", - } - - for _, serviceNature := range validServiceNature { + for _, serviceNature := range ValidServiceNatures { _, err := NewServiceNature(serviceNature) if err != nil { t.Errorf( diff --git a/src/domain/valueObject/serviceStatus.go b/src/domain/valueObject/serviceStatus.go index 6a1ee25a0..20bdc529b 100644 --- a/src/domain/valueObject/serviceStatus.go +++ b/src/domain/valueObject/serviceStatus.go @@ -6,7 +6,6 @@ import ( "strings" voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" - "golang.org/x/exp/maps" ) type ServiceStatus string @@ -47,24 +46,17 @@ func NewServiceStatus(value interface{}) (status ServiceStatus, err error) { func serviceStatusAdapter(value string) (string, error) { value = strings.ToLower(value) - if _, isPrimaryStatus := ServiceStatusesWithAliases[value]; isPrimaryStatus { - return value, nil - } - - primaryStatuses := maps.Keys(ServiceStatusesWithAliases) - for _, primaryStatus := range primaryStatuses { - if !slices.Contains(ServiceStatusesWithAliases[primaryStatus], value) { - continue + for exactName, aliases := range ServiceStatusesWithAliases { + if exactName == value { + return exactName, nil } - value = primaryStatus - break - } - if _, isPrimaryStatus := ServiceStatusesWithAliases[value]; !isPrimaryStatus { - return value, errors.New("InvalidServiceStatus") + if slices.Contains(aliases, value) { + return exactName, nil + } } - return value, nil + return "", errors.New("InvalidServiceStatus") } func (vo ServiceStatus) String() string { diff --git a/src/domain/valueObject/serviceType.go b/src/domain/valueObject/serviceType.go index 232e2794a..56f54eaad 100644 --- a/src/domain/valueObject/serviceType.go +++ b/src/domain/valueObject/serviceType.go @@ -10,9 +10,18 @@ import ( type ServiceType string +const ( + ServiceTypeSystem ServiceType = "system" + ServiceTypeDatabase ServiceType = "database" + ServiceTypeRuntime ServiceType = "runtime" + ServiceTypeWebServer ServiceType = "webserver" + ServiceTypeOther ServiceType = "other" +) + var ValidServiceTypes = []string{ - "application", "runtime", "database", "webserver", "mom", "monitoring", - "logging", "security", "backup", "system", "other", + ServiceTypeSystem.String(), ServiceTypeDatabase.String(), + ServiceTypeRuntime.String(), ServiceTypeWebServer.String(), + ServiceTypeOther.String(), } func NewServiceType(value interface{}) (serviceType ServiceType, err error) { @@ -23,7 +32,7 @@ func NewServiceType(value interface{}) (serviceType ServiceType, err error) { stringValue = strings.ToLower(stringValue) if !slices.Contains(ValidServiceTypes, stringValue) { - return serviceType, errors.New("InvalidServiceType") + stringValue = "other" } return ServiceType(stringValue), nil diff --git a/src/domain/valueObject/serviceType_test.go b/src/domain/valueObject/serviceType_test.go index 42993f9bf..d31a4dfe7 100644 --- a/src/domain/valueObject/serviceType_test.go +++ b/src/domain/valueObject/serviceType_test.go @@ -1,33 +1,41 @@ package valueObject -import "testing" +import ( + "testing" +) func TestServiceType(t *testing.T) { t.Run("ValidServiceTypes", func(t *testing.T) { - validServiceTypes := []interface{}{ - "application", "runtime", "database", "webserver", "mom", "monitoring", - "logging", "security", "backup", "system", "other", - } - - for _, serviceType := range validServiceTypes { - _, err := NewServiceType(serviceType) + for _, knownServiceType := range ValidServiceTypes { + serviceType, err := NewServiceType(knownServiceType) if err != nil { t.Errorf( "Expected no error for '%v', got '%s'", serviceType, err.Error(), ) } + + if serviceType.String() != knownServiceType { + t.Errorf( + "Expected '%v', got '%v'", knownServiceType, serviceType, + ) + } } - }) - t.Run("InvalidServiceTypees", func(t *testing.T) { - invalidServiceTypes := []interface{}{ - "framework", "erp", "crm", "ai", "cloud", + alsoValidServiceTypes := []string{ + "application", "backup", "logging", "mom", "monitoring", "other", "security", } + for _, rawServiceType := range alsoValidServiceTypes { + serviceType, err := NewServiceType(rawServiceType) + if err != nil { + t.Errorf( + "Expected no error for '%v', got '%s'", serviceType, err.Error(), + ) + } - for _, serviceType := range invalidServiceTypes { - _, err := NewServiceType(serviceType) - if err == nil { - t.Errorf("Expected error for '%v', got nil", serviceType) + if serviceType.String() != "other" { + t.Errorf( + "Expected 'other', got '%v'", serviceType, + ) } } }) diff --git a/src/domain/valueObject/systemResourceIdentifier.go b/src/domain/valueObject/systemResourceIdentifier.go index 4dc9e657a..7398437c1 100644 --- a/src/domain/valueObject/systemResourceIdentifier.go +++ b/src/domain/valueObject/systemResourceIdentifier.go @@ -8,7 +8,7 @@ import ( voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" ) -const systemResourceIdentifierRegex string = `^sri://(?P[\d]{1,64}):(?P[a-zA-Z0-9][\w\-]{1,128})\/(?P[a-zA-Z0-9][\w\.\-]{0,256}|\*)$` +const systemResourceIdentifierRegex string = `^sri://(?P[\d]{1,64}):(?P[a-zA-Z0-9][\w\-]{1,256})\/(?P[a-zA-Z-0-9\*][\w\.\-]{0,512})$` type SystemResourceIdentifier string @@ -35,7 +35,7 @@ func NewSystemResourceIdentifierIgnoreError(value interface{}) SystemResourceIde sri, err := NewSystemResourceIdentifier(value) if err != nil { panicMessage := "UnexpectedSystemResourceIdentifierCreationError" - slog.Debug(panicMessage, slog.Any("value", value), slog.Any("error", err)) + slog.Debug(panicMessage, slog.Any("value", value), slog.String("err", err.Error())) panic(panicMessage) } @@ -180,12 +180,12 @@ func NewMappingSri( ) } -func NewUnixFileSri( +func NewMappingSecurityRuleSri( accountId AccountId, - unixFilePath UnixFilePath, + mappingSecurityRuleId MappingSecurityRuleId, ) SystemResourceIdentifier { return NewSystemResourceIdentifierIgnoreError( - "sri://" + accountId.String() + ":unixFile/" + unixFilePath.String(), + "sri://" + accountId.String() + ":mappingSecurityRule/" + mappingSecurityRuleId.String(), ) } diff --git a/src/domain/valueObject/systemResourceIdentifier_test.go b/src/domain/valueObject/systemResourceIdentifier_test.go index a7a855772..c191d1e65 100644 --- a/src/domain/valueObject/systemResourceIdentifier_test.go +++ b/src/domain/valueObject/systemResourceIdentifier_test.go @@ -5,7 +5,13 @@ import "testing" func TestSystemResourceIdentifier(t *testing.T) { t.Run("ValidSystemResourceIdentifier", func(t *testing.T) { validSystemResourceIdentifier := []interface{}{ - "sri://0:account/120", "sri://0:cron/1", "sri://1:mapping/200", + "sri://1:account/120", "sri://10:secureAccessPublicKey/1", "sri://100:cron/1", + "sri://1000:database/myDb", "sri://1:databaseUser/myDbUser", + "sri://10:marketplaceCatalogItem/1", "sri://100:marketplaceCatalogItem/php", + "sri://1000:marketplaceInstalledItem/1", "sri://1:phpRuntime/local.os", + "sri://10:installableService/node", "sri://100:customService/node-e87qxc21", + "sri://1000:installedService/1", "sri://1:ssl/1", "sri://10:virtualHost/local.os", + "sri://100:mapping/1", } for _, identifier := range validSystemResourceIdentifier { @@ -20,7 +26,7 @@ func TestSystemResourceIdentifier(t *testing.T) { t.Run("InvalidSystemResourceIdentifier", func(t *testing.T) { invalidSystemResourceIdentifier := []interface{}{ - "", "sri://0:/", + "", "sri://0:/", true, 1000, "sri://1000:unixFile//app/.trash", } for _, identifier := range invalidSystemResourceIdentifier { diff --git a/src/domain/valueObject/unixFileExtension.go b/src/domain/valueObject/unixFileExtension.go index beb3f818a..83c81c134 100644 --- a/src/domain/valueObject/unixFileExtension.go +++ b/src/domain/valueObject/unixFileExtension.go @@ -34,7 +34,7 @@ func NewUnixFileExtension(value interface{}) ( } func (vo UnixFileExtension) GetMimeType() MimeType { - mimeTypeStr := "generic" + mimeTypeStr := MimeTypeGeneric.String() fileExtWithLeadingDot := "." + string(vo) mimeTypeWithCharset := mime.TypeByExtension(fileExtWithLeadingDot) diff --git a/src/domain/valueObject/unixFileOwnership.go b/src/domain/valueObject/unixFileOwnership.go new file mode 100644 index 000000000..33cb82841 --- /dev/null +++ b/src/domain/valueObject/unixFileOwnership.go @@ -0,0 +1,45 @@ +package valueObject + +import ( + "errors" + "strings" + + voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" +) + +type UnixFileOwnership string + +const UnixFileOwnershipAppWorkingDir = UnixFileOwnership("nobody:nogroup") + +func NewUnixFileOwnership( + value interface{}, +) (fileOwnership UnixFileOwnership, err error) { + stringValue, err := voHelper.InterfaceToString(value) + if err != nil { + return fileOwnership, errors.New("UnixFileOwnershipValueMustBeString") + } + + errorMessage := "InvalidUnixFileOwnership" + + stringValueParts := strings.Split(stringValue, ":") + if len(stringValueParts) != 2 { + return fileOwnership, errors.New(errorMessage) + } + + fileOwner, err := NewUsername(stringValueParts[0]) + if err != nil { + return fileOwnership, errors.New(errorMessage) + } + + fileGroup, err := NewGroupName(stringValueParts[1]) + if err != nil { + return fileOwnership, errors.New(errorMessage) + } + + fileOwnershipStr := fileOwner.String() + ":" + fileGroup.String() + return UnixFileOwnership(fileOwnershipStr), nil +} + +func (vo UnixFileOwnership) String() string { + return string(vo) +} diff --git a/src/domain/valueObject/unixFileOwnership_test.go b/src/domain/valueObject/unixFileOwnership_test.go new file mode 100644 index 000000000..bee7528a3 --- /dev/null +++ b/src/domain/valueObject/unixFileOwnership_test.go @@ -0,0 +1,32 @@ +package valueObject + +import "testing" + +func TestUnixFileOwnership(t *testing.T) { + t.Run("ValidUnixFileOwnership", func(t *testing.T) { + validUnixFileOwnerships := []interface{}{ + "dev:dev", "sudo:sudo", "root:root", "www-data:www-data", "www-data:root", + "www-data:dev", "dev:www-data", "dev:root", "root:dev", "root:www-data", + } + + for _, ownership := range validUnixFileOwnerships { + _, err := NewUnixFileOwnership(ownership) + if err != nil { + t.Errorf("Expected no error for '%v', got '%s'", ownership, err.Error()) + } + } + }) + + t.Run("InvalidUnixFileOwnership", func(t *testing.T) { + invalidUnixFileOwnerships := []interface{}{ + "", 1000, true, ":dev", "dev:", "dev:dev:dev", "dev/dev", + } + + for _, ownership := range invalidUnixFileOwnerships { + _, err := NewUnixFileOwnership(ownership) + if err == nil { + t.Errorf("Expected error for '%v', got nil", ownership) + } + } + }) +} diff --git a/src/domain/valueObject/unixFilePath.go b/src/domain/valueObject/unixFilePath.go index 795433718..b607af826 100644 --- a/src/domain/valueObject/unixFilePath.go +++ b/src/domain/valueObject/unixFilePath.go @@ -14,6 +14,10 @@ const unixFileRelativePathRegexExpression = `\.\.\/|^\.\/|^\/\.\/` type UnixFilePath string +const UnixFilePathFileSystemRootDir = UnixFilePath("/") +const UnixFilePathAppWorkingDir = UnixFilePath("/app") +const UnixFilePathTrashDir = UnixFilePath("/app/.trash") + func NewUnixFilePath(value interface{}) (filePath UnixFilePath, err error) { stringValue, err := voHelper.InterfaceToString(value) if err != nil { @@ -35,10 +39,14 @@ func NewUnixFilePath(value interface{}) (filePath UnixFilePath, err error) { return filePath, errors.New("RelativePathNotAllowed") } + if stringValue != UnixFilePathFileSystemRootDir.String() && strings.HasSuffix(stringValue, "/") { + stringValue = strings.TrimSuffix(stringValue, "/") + } + return UnixFilePath(stringValue), nil } -func (vo UnixFilePath) GetWithoutExtension() UnixFilePath { +func (vo UnixFilePath) ReadWithoutExtension() UnixFilePath { unixFilePathExtStr := filepath.Ext(string(vo)) if unixFilePathExtStr == "" { return vo @@ -49,13 +57,17 @@ func (vo UnixFilePath) GetWithoutExtension() UnixFilePath { return unixFilePathWithoutExt } -func (vo UnixFilePath) GetFileName() UnixFileName { +func (vo UnixFilePath) ReadFileName() UnixFileName { + if vo.IsFileSystemRootDir() { + return UnixFileName("/") + } + unixFileBase := filepath.Base(string(vo)) unixFileName, _ := NewUnixFileName(unixFileBase) return unixFileName } -func (vo UnixFilePath) GetFileNameWithoutExtension() UnixFileName { +func (vo UnixFilePath) ReadFileNameWithoutExtension() UnixFileName { unixFileBase := filepath.Base(string(vo)) unixFilePathExt := filepath.Ext(string(vo)) unixFileBaseWithoutExtStr := strings.TrimSuffix(string(unixFileBase), unixFilePathExt) @@ -63,12 +75,12 @@ func (vo UnixFilePath) GetFileNameWithoutExtension() UnixFileName { return unixFileNameWithoutExt } -func (vo UnixFilePath) GetFileExtension() (UnixFileExtension, error) { +func (vo UnixFilePath) ReadFileExtension() (UnixFileExtension, error) { unixFileExtensionStr := filepath.Ext(string(vo)) return NewUnixFileExtension(unixFileExtensionStr) } -func (vo UnixFilePath) GetFileDir() UnixFilePath { +func (vo UnixFilePath) ReadFileDir() UnixFilePath { unixFileDirPath, _ := NewUnixFilePath(filepath.Dir(string(vo))) return unixFileDirPath } @@ -76,3 +88,7 @@ func (vo UnixFilePath) GetFileDir() UnixFilePath { func (vo UnixFilePath) String() string { return string(vo) } + +func (vo UnixFilePath) IsFileSystemRootDir() bool { + return vo == UnixFilePathFileSystemRootDir +} diff --git a/src/domain/valueObject/unixFilePermissions.go b/src/domain/valueObject/unixFilePermissions.go index 981b1e227..15371ae9f 100644 --- a/src/domain/valueObject/unixFilePermissions.go +++ b/src/domain/valueObject/unixFilePermissions.go @@ -31,6 +31,14 @@ func NewUnixFilePermissions(value interface{}) ( return UnixFilePermissions(stringValue), nil } +func NewUnixFileDefaultPermissions() UnixFilePermissions { + return UnixFilePermissions("644") +} + +func NewUnixDirDefaultPermissions() UnixFilePermissions { + return UnixFilePermissions("755") +} + func (vo UnixFilePermissions) GetFileMode() fs.FileMode { intValue, _ := strconv.ParseInt(string(vo), 8, 64) return fs.FileMode(intValue) diff --git a/src/domain/valueObject/unixTime.go b/src/domain/valueObject/unixTime.go index 48ca59c9f..d8f4056e9 100644 --- a/src/domain/valueObject/unixTime.go +++ b/src/domain/valueObject/unixTime.go @@ -51,10 +51,30 @@ func (vo UnixTime) ReadTimeOnly() string { return time.Unix(int64(vo), 0).UTC().Format("15:04:05") } +func (ut UnixTime) ReadDateTime() string { + return time.Unix(int64(ut), 0).UTC().Format("02/01/2006 15:04:05") +} + +func (ut UnixTime) ReadStartOfDay() time.Time { + return time.Unix(int64(ut), 0).UTC().Truncate(24 * time.Hour) +} + +func (ut UnixTime) ReadEndOfDay() time.Time { + return ut.ReadStartOfDay().Add(24 * time.Hour) +} + func (vo UnixTime) ReadAsGoTime() time.Time { return time.Unix(int64(vo), 0).UTC() } +func (vo UnixTime) IsPast() bool { + return vo.ReadAsGoTime().Before(time.Now()) +} + +func (vo UnixTime) IsFuture() bool { + return vo.ReadAsGoTime().After(time.Now()) +} + func (vo UnixTime) String() string { return strconv.FormatInt(int64(vo), 10) } diff --git a/src/domain/valueObject/virtualHostType.go b/src/domain/valueObject/virtualHostType.go index cb6fd8117..09d4fb72d 100644 --- a/src/domain/valueObject/virtualHostType.go +++ b/src/domain/valueObject/virtualHostType.go @@ -2,7 +2,6 @@ package valueObject import ( "errors" - "slices" "strings" voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" @@ -10,11 +9,17 @@ import ( type VirtualHostType string +const ( + VirtualHostTypeTopLevel VirtualHostType = "top-level" + VirtualHostTypeSubdomain VirtualHostType = "subdomain" + VirtualHostTypeAlias VirtualHostType = "alias" + VirtualHostTypeWildcard VirtualHostType = "wildcard" + VirtualHostTypePrimary VirtualHostType = "primary" +) + var AvailableVirtualHostsTypes = []string{ - "top-level", "subdomain", "alias", -} -var validVirtualHostTypes = []string{ - "primary", "top-level", "subdomain", "wildcard", "alias", + VirtualHostTypeTopLevel.String(), VirtualHostTypeSubdomain.String(), + VirtualHostTypeAlias.String(), VirtualHostTypeWildcard.String(), } func NewVirtualHostType(value interface{}) (vhostType VirtualHostType, err error) { @@ -24,11 +29,16 @@ func NewVirtualHostType(value interface{}) (vhostType VirtualHostType, err error } stringValue = strings.ToLower(stringValue) - if !slices.Contains(validVirtualHostTypes, stringValue) { + stringValueVo := VirtualHostType(stringValue) + switch stringValueVo { + case VirtualHostTypeTopLevel, VirtualHostTypeSubdomain, + VirtualHostTypeAlias, VirtualHostTypeWildcard: + return stringValueVo, nil + case VirtualHostTypePrimary: + return VirtualHostTypeTopLevel, nil + default: return vhostType, errors.New("InvalidVirtualHostType") } - - return VirtualHostType(stringValue), nil } func (vo VirtualHostType) String() string { diff --git a/src/infra/account/accountCmdRepo.go b/src/infra/account/accountCmdRepo.go index 60b4fbb9f..38064d2ed 100644 --- a/src/infra/account/accountCmdRepo.go +++ b/src/infra/account/accountCmdRepo.go @@ -2,6 +2,7 @@ package accountInfra import ( "errors" + "log/slog" "os" "os/user" "time" @@ -31,6 +32,52 @@ func NewAccountCmdRepo( } } +func (repo *AccountCmdRepo) toggleAccountSudoPrivileges( + accountName valueObject.Username, + shouldPromoteAccount bool, +) error { + sudoersFilePath := "/etc/sudoers" + if !infraHelper.FileExists(sudoersFilePath) { + err := infraHelper.InstallPkgs([]string{"sudo"}) + if err != nil { + return errors.New("InstallSudoPkgError: " + err.Error()) + } + } + + accountNameStr := accountName.String() + toggleUserGroupSettings := infraHelper.RunCmdSettings{ + Command: "usermod", + Args: []string{"-G", "sudo", accountNameStr}, + } + if !shouldPromoteAccount { + toggleUserGroupSettings.Command = "deluser" + toggleUserGroupSettings.Args = []string{accountNameStr, "sudo"} + } + _, err := infraHelper.RunCmd(toggleUserGroupSettings) + if err != nil { + return errors.New("ToggleAccountSudoGroupError: " + err.Error()) + } + + sudoersDirPath := "/etc/sudoers.d" + err = infraHelper.MakeDir(sudoersDirPath) + if err != nil { + return errors.New("CreateSudoersDirError: " + err.Error()) + } + + sudoersDirAccountFilePath := sudoersDirPath + "/" + accountNameStr + if !shouldPromoteAccount { + err = os.Remove(sudoersDirAccountFilePath) + if err != nil { + return errors.New("RemoveSudoersFileError: " + err.Error()) + } + + return nil + } + + sudoersLine := accountNameStr + " ALL=(ALL) NOPASSWD:ALL" + return infraHelper.UpdateFile(sudoersDirAccountFilePath, sudoersLine, true) +} + func (repo *AccountCmdRepo) createAuthorizedKeysFile( accountUsername valueObject.Username, accountHomeDirectory valueObject.UnixFilePath, @@ -49,9 +96,10 @@ func (repo *AccountCmdRepo) createAuthorizedKeysFile( return errors.New("CreateAuthorizedKeysFileError: " + err.Error()) } - _, err = infraHelper.RunCmd( - "chown", "-R", accountUsernameStr, authorizedKeysFilePath, - ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "chown", + Args: []string{"-R", accountUsernameStr, authorizedKeysFilePath}, + }) if err != nil { return errors.New("ChownAuthorizedKeysFileError: " + err.Error()) } @@ -77,16 +125,21 @@ func (repo *AccountCmdRepo) Create( return accountId, errors.New("DefineHomeDirectoryError: " + err.Error()) } - _, err = infraHelper.RunCmd( - "useradd", "-m", - "-s", "/bin/bash", - "-p", string(passHash), - usernameStr, - ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "useradd", + Args: []string{"-m", "-s", "/bin/bash", "-p", string(passHash), usernameStr}, + }) if err != nil { return accountId, errors.New("UserAddFailed: " + err.Error()) } + if createDto.IsSuperAdmin { + err := repo.toggleAccountSudoPrivileges(createDto.Username, createDto.IsSuperAdmin) + if err != nil { + slog.Debug("PromoteAccountToSudoersError", slog.String("err", err.Error())) + } + } + err = repo.createAuthorizedKeysFile(createDto.Username, homeDirectory) if err != nil { return accountId, err @@ -110,6 +163,7 @@ func (repo *AccountCmdRepo) Create( nowUnixTime := valueObject.NewUnixTimeNow() accountEntity := entity.NewAccount( accountId, groupId, createDto.Username, homeDirectory, + createDto.IsSuperAdmin, []entity.SecureAccessPublicKey{}, nowUnixTime, nowUnixTime, ) @@ -127,38 +181,51 @@ func (repo *AccountCmdRepo) Create( } func (repo *AccountCmdRepo) Delete(accountId valueObject.AccountId) error { - readFirstAccountRequestDto := dto.ReadAccountsRequest{ + accountEntity, err := repo.accountQueryRepo.ReadFirst(dto.ReadAccountsRequest{ AccountId: &accountId, - } - accountEntity, err := repo.accountQueryRepo.ReadFirst(readFirstAccountRequestDto) + }) if err != nil { - return err + return errors.New("ReadAccountEntityError: " + err.Error()) } accountIdStr := accountId.String() - - _, err = infraHelper.RunCmd("pgrep", "-u", accountIdStr) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "pgrep", + Args: []string{"-u", accountIdStr}, + }) if err == nil { - _, _ = infraHelper.RunCmd("pkill", "-9", "-U", accountIdStr) + _, _ = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "pkill", + Args: []string{"-9", "-U", accountIdStr}, + }) } - _, err = infraHelper.RunCmd("userdel", "-r", accountEntity.Username.String()) + if accountEntity.IsSuperAdmin { + err := repo.toggleAccountSudoPrivileges(accountEntity.Username, false) + if err != nil { + return errors.New("DemoteAccountFromSudoersError: " + err.Error()) + } + } + + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "userdel", + Args: []string{"-r", accountEntity.Username.String()}, + }) if err != nil { - return err + return errors.New("UserDeleteError: " + err.Error()) } accountModel := dbModel.Account{} - err = repo.persistentDbSvc.Handler.Delete(accountModel, accountIdStr).Error if err != nil { - return errors.New("DeleteAccountDatabaseError: " + err.Error()) + return errors.New("DeleteAccountDatabaseEntryError: " + err.Error()) } return nil } -func (repo *AccountCmdRepo) UpdatePassword( - accountId valueObject.AccountId, password valueObject.Password, +func (repo *AccountCmdRepo) updatePassword( + accountEntity entity.Account, password valueObject.Password, ) error { passHash, err := bcrypt.GenerateFromPassword( []byte(password.String()), bcrypt.DefaultCost, @@ -167,26 +234,43 @@ func (repo *AccountCmdRepo) UpdatePassword( return errors.New("PasswordHashError: " + err.Error()) } + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "usermod", + Args: []string{"-p", string(passHash), accountEntity.Username.String()}, + }) + return err +} + +func (repo *AccountCmdRepo) Update(updateDto dto.UpdateAccount) error { readFirstAccountRequestDto := dto.ReadAccountsRequest{ - AccountId: &accountId, + AccountId: &updateDto.AccountId, } accountEntity, err := repo.accountQueryRepo.ReadFirst(readFirstAccountRequestDto) if err != nil { return err } - _, err = infraHelper.RunCmd( - "usermod", "-p", string(passHash), accountEntity.Username.String(), - ) - if err != nil { - return errors.New("UserModFailed: " + err.Error()) + updateMap := map[string]interface{}{"updated_at": time.Now()} + if updateDto.IsSuperAdmin != nil { + err := repo.toggleAccountSudoPrivileges(accountEntity.Username, *updateDto.IsSuperAdmin) + if err != nil { + return errors.New("ToggleAccountSudoPrivilegesError: " + err.Error()) + } + + updateMap["is_super_admin"] = *updateDto.IsSuperAdmin + } + + if updateDto.Password != nil { + err := repo.updatePassword(accountEntity, *updateDto.Password) + if err != nil { + return errors.New("UpdateAccountPasswordError: " + err.Error()) + } } - accountModel := dbModel.Account{ID: accountId.Uint64()} return repo.persistentDbSvc.Handler. - Model(&accountModel). - Update("updated_at", time.Now()). - Error + Model(&dbModel.Account{}). + Where("id = ?", accountEntity.Id). + Updates(updateMap).Error } func (repo *AccountCmdRepo) UpdateApiKey( diff --git a/src/infra/account/accountCmdRepo_test.go b/src/infra/account/accountCmdRepo_test.go index 33efae238..1acae8276 100644 --- a/src/infra/account/accountCmdRepo_test.go +++ b/src/infra/account/accountCmdRepo_test.go @@ -13,10 +13,10 @@ func addDummyUser() error { username, _ := valueObject.NewUsername(os.Getenv("DUMMY_USER_NAME")) password, _ := valueObject.NewPassword(os.Getenv("DUMMY_USER_PASS")) - ipAddress := valueObject.NewLocalhostIpAddress() + ipAddress := valueObject.IpAddressSystem operatorAccountId, _ := valueObject.NewAccountId(0) createDto := dto.NewCreateAccount( - username, password, operatorAccountId, ipAddress, + username, password, false, operatorAccountId, ipAddress, ) accountCmdRepo := NewAccountCmdRepo(testHelpers.GetPersistentDbSvc()) @@ -62,10 +62,10 @@ func TestAccountCmdRepo(t *testing.T) { t.Run("AddInvalidAccount", func(t *testing.T) { username, _ := valueObject.NewUsername("root") password, _ := valueObject.NewPassword("invalid") - ipAddress := valueObject.NewLocalhostIpAddress() + ipAddress := valueObject.IpAddressSystem operatorAccountId, _ := valueObject.NewAccountId(0) createDto := dto.NewCreateAccount( - username, password, operatorAccountId, ipAddress, + username, password, false, operatorAccountId, ipAddress, ) _, err := accountCmdRepo.Create(createDto) @@ -83,12 +83,15 @@ func TestAccountCmdRepo(t *testing.T) { } }) - t.Run("UpdatePasswordValidAccount", func(t *testing.T) { + t.Run("UpdateValidAccount", func(t *testing.T) { resetDummyUser() newPassword, _ := valueObject.NewPassword("newPassword") - - err := accountCmdRepo.UpdatePassword(accountId, newPassword) + updateDto := dto.NewUpdateAccount( + accountId, &newPassword, nil, nil, accountId, + valueObject.IpAddressSystem, + ) + err := accountCmdRepo.Update(updateDto) if err != nil { t.Errorf( "Expected no error for %s, but got %s", newPassword.String(), diff --git a/src/infra/account/accountQueryRepo.go b/src/infra/account/accountQueryRepo.go index 6a3ea3ce8..4247e96fa 100644 --- a/src/infra/account/accountQueryRepo.go +++ b/src/infra/account/accountQueryRepo.go @@ -81,7 +81,7 @@ func (repo *AccountQueryRepo) Read( if err != nil { slog.Debug( "AccountModelToEntityError", slog.Uint64("id", uint64(model.ID)), - slog.Any("error", err), + slog.String("err", err.Error()), ) continue } @@ -185,7 +185,7 @@ func (repo *AccountQueryRepo) ReadSecureAccessPublicKeys( if err != nil { slog.Debug( "SecureAccessPublicKeyModelToEntityError", - slog.Uint64("id", uint64(model.ID)), slog.Any("error", err), + slog.Uint64("id", uint64(model.ID)), slog.String("err", err.Error()), ) continue } diff --git a/src/infra/activityRecord/activityRecordCmdRepo_test.go b/src/infra/activityRecord/activityRecordCmdRepo_test.go index 36330c0d2..37ac6d01a 100644 --- a/src/infra/activityRecord/activityRecordCmdRepo_test.go +++ b/src/infra/activityRecord/activityRecordCmdRepo_test.go @@ -14,7 +14,7 @@ func TestActivityRecordCmdRepo(t *testing.T) { activityRecordCmdRepo := NewActivityRecordCmdRepo(trailDbSvc) level, _ := valueObject.NewActivityRecordLevel("SEC") recordCode, _ := valueObject.NewActivityRecordCode("LoginFailed") - operatorIpAddress := valueObject.NewLocalhostIpAddress() + operatorIpAddress := valueObject.IpAddressSystem t.Run("CreateActivityRecord", func(t *testing.T) { createDto := dto.CreateActivityRecord{ @@ -30,7 +30,7 @@ func TestActivityRecordCmdRepo(t *testing.T) { }) t.Run("DeleteActivityRecords", func(t *testing.T) { - ipAddress := valueObject.NewLocalhostIpAddress() + ipAddress := valueObject.IpAddressSystem deleteDto := dto.NewDeleteActivityRecord( nil, &level, &recordCode, nil, nil, &ipAddress, nil, nil, ) diff --git a/src/infra/activityRecord/activityRecordQueryRepo.go b/src/infra/activityRecord/activityRecordQueryRepo.go index b034f8ce9..c0618865f 100644 --- a/src/infra/activityRecord/activityRecordQueryRepo.go +++ b/src/infra/activityRecord/activityRecordQueryRepo.go @@ -86,7 +86,7 @@ func (repo *ActivityRecordQueryRepo) Read( slog.Debug( "ModelToEntityError", slog.Uint64("id", activityRecordEventModel.ID), - slog.Any("error", err), + slog.String("err", err.Error()), ) continue } diff --git a/src/infra/auth/authCmdRepo.go b/src/infra/auth/authCmdRepo.go index 342e2710e..27003c520 100644 --- a/src/infra/auth/authCmdRepo.go +++ b/src/infra/auth/authCmdRepo.go @@ -22,7 +22,7 @@ func (repo AuthCmdRepo) CreateSessionToken( var accessToken entity.AccessToken jwtSecret := os.Getenv("JWT_SECRET") - apiURL, err := infraHelper.GetPrimaryVirtualHost() + apiURL, err := infraHelper.ReadPrimaryVirtualHostHostname() if err != nil { return accessToken, errors.New("PrimaryVirtualHostNotFound") } diff --git a/src/infra/auth/authCmdRepo_test.go b/src/infra/auth/authCmdRepo_test.go index 154efda4e..05c8baf19 100644 --- a/src/infra/auth/authCmdRepo_test.go +++ b/src/infra/auth/authCmdRepo_test.go @@ -16,7 +16,7 @@ func TestAuthCmdRepo(t *testing.T) { token, err := authCmdRepo.CreateSessionToken( valueObject.AccountId(1000), valueObject.NewUnixTimeAfterNow(useCase.SessionTokenExpiresIn), - valueObject.NewLocalhostIpAddress(), + valueObject.IpAddressSystem, ) if err != nil { t.Errorf("UnexpectedError: %s", err.Error()) diff --git a/src/infra/auth/authQueryRepo.go b/src/infra/auth/authQueryRepo.go index ab68f2e81..9337d8f3b 100644 --- a/src/infra/auth/authQueryRepo.go +++ b/src/infra/auth/authQueryRepo.go @@ -15,6 +15,13 @@ import ( "golang.org/x/crypto/bcrypt" ) +var ( + errSessionTokenExpired = errors.New("SessionTokenExpired") + errSessionTokenSignatureInvalid = errors.New("SessionTokenSignatureInvalid") + errSessionTokenParseError = errors.New("SessionTokenParseError") + errSessionTokenClaimsUnreadable = errors.New("SessionTokenClaimsUnreadable") +) + type AuthQueryRepo struct { persistentDbSvc *internalDbInfra.PersistentDatabaseService } @@ -28,14 +35,17 @@ func NewAuthQueryRepo( } func (repo *AuthQueryRepo) IsLoginValid(createDto dto.CreateSessionToken) bool { - storedPassHash, err := infraHelper.RunCmdWithSubShell( - "getent shadow " + createDto.Username.String() + " | awk -F: '{print $2}'", - ) + readStoredPassHashCmd := "getent shadow " + createDto.Username.String() + + " | awk -F: '{print $2}'" + storedPassHash, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: readStoredPassHashCmd, + ShouldRunWithSubShell: true, + }) if err != nil { slog.Debug( "GetentShadowError", slog.String("username", createDto.Username.String()), - slog.Any("error", err), + slog.String("err", err.Error()), ) return false } @@ -60,16 +70,19 @@ func (repo *AuthQueryRepo) readSessionTokenClaims( return []byte(os.Getenv("JWT_SECRET")), nil }) if err != nil { - if err.(*jwt.ValidationError).Errors == jwt.ValidationErrorExpired { - return claims, errors.New("SessionTokenExpired") + switch errorEnum := err.(*jwt.ValidationError).Errors; errorEnum { + case jwt.ValidationErrorExpired: + return claims, errSessionTokenExpired + case jwt.ValidationErrorSignatureInvalid: + return claims, errSessionTokenSignatureInvalid + default: + return claims, errSessionTokenParseError } - - return claims, errors.New("SessionTokenParseError: " + err.Error()) } claims, areClaimsReadable := parsedToken.Claims.(jwt.MapClaims) if !areClaimsReadable { - return claims, errors.New("SessionTokenClaimsUnreadable") + return claims, errSessionTokenClaimsUnreadable } return claims, nil @@ -150,7 +163,8 @@ func (repo *AuthQueryRepo) ReadAccessTokenDetails( ) (tokenDetails dto.AccessTokenDetails, err error) { sessionTokenClaims, err := repo.readSessionTokenClaims(token) if err != nil { - if err.Error() == "SessionTokenExpired" { + isLikelyApiKey := err == errSessionTokenParseError + if !isLikelyApiKey { return tokenDetails, err } diff --git a/src/infra/auth/authQueryRepo_test.go b/src/infra/auth/authQueryRepo_test.go index 06b626a8c..f69039add 100644 --- a/src/infra/auth/authQueryRepo_test.go +++ b/src/infra/auth/authQueryRepo_test.go @@ -19,8 +19,10 @@ func TestAuthQueryRepo(t *testing.T) { accountId, _ := valueObject.NewAccountId(1001) username, _ := valueObject.NewUsername("authDummyUser") password, _ := valueObject.NewPassword("q1w2e3r4t5y6") - localIpAddress := valueObject.NewLocalhostIpAddress() - createDto := dto.NewCreateAccount(username, password, accountId, localIpAddress) + localIpAddress := valueObject.IpAddressSystem + createDto := dto.NewCreateAccount( + username, password, false, accountId, localIpAddress, + ) _, err := accountCmdRepo.Create(createDto) if err != nil { @@ -51,7 +53,7 @@ func TestAuthQueryRepo(t *testing.T) { token, _ := authCmdRepo.CreateSessionToken( valueObject.AccountId(1000), valueObject.NewUnixTimeAfterNow(3*time.Hour), - valueObject.NewLocalhostIpAddress(), + valueObject.IpAddressSystem, ) _, err := authQueryRepo.ReadAccessTokenDetails(token.TokenStr) diff --git a/src/infra/cron/cronCmdRepo.go b/src/infra/cron/cronCmdRepo.go index a67a384fc..0f6ca7a35 100644 --- a/src/infra/cron/cronCmdRepo.go +++ b/src/infra/cron/cronCmdRepo.go @@ -41,7 +41,10 @@ func (repo *CronCmdRepo) rebuildCrontab(cronsEntities []entity.Cron) error { return errors.New("UpdateCrontabTempFileContentError: " + err.Error()) } - _, err = infraHelper.RunCmdWithSubShell("crontab " + tmpCrontabFilePath) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "crontab " + tmpCrontabFilePath, + ShouldRunWithSubShell: true, + }) if err != nil { return err } diff --git a/src/infra/cron/cronCmdRepo_test.go b/src/infra/cron/cronCmdRepo_test.go index 8baf003b9..7190abcba 100644 --- a/src/infra/cron/cronCmdRepo_test.go +++ b/src/infra/cron/cronCmdRepo_test.go @@ -17,7 +17,7 @@ func TestCronCmdRepo(t *testing.T) { command, _ := valueObject.NewUnixCommand("echo \"cronTest\" >> crontab_log.txt") comment, _ := valueObject.NewCronComment("Test cron job") operatorAccountId, _ := valueObject.NewAccountId(0) - operatorIpAddress := valueObject.NewLocalhostIpAddress() + operatorIpAddress := valueObject.IpAddressSystem createCron := dto.NewCreateCron( schedule, command, &comment, operatorAccountId, operatorIpAddress, diff --git a/src/infra/cron/cronQueryRepo.go b/src/infra/cron/cronQueryRepo.go index e8ae46d1d..6a6707082 100644 --- a/src/infra/cron/cronQueryRepo.go +++ b/src/infra/cron/cronQueryRepo.go @@ -65,7 +65,10 @@ func (repo *CronQueryRepo) cronFactory( func (repo *CronQueryRepo) readCronsFromCrontab() ([]entity.Cron, error) { crons := []entity.Cron{} - rawCronOutput, err := infraHelper.RunCmd("crontab", "-l") + rawCronOutput, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "crontab", + Args: []string{"-l"}, + }) if err != nil { if strings.Contains(err.Error(), "no crontab") { return crons, nil @@ -108,11 +111,12 @@ func (repo *CronQueryRepo) Read( filteredCrons := []entity.Cron{} for _, cron := range originalCronEntities { - if requestDto.CronId != nil && *requestDto.CronId != cron.Id { + if requestDto.CronId != nil && requestDto.CronId.Uint64() != cron.Id.Uint64() { continue } - if requestDto.CronComment != nil && requestDto.CronComment != cron.Comment { + hasCronCommentToFilter := requestDto.CronComment != nil && cron.Comment != nil + if hasCronCommentToFilter && requestDto.CronComment.String() != cron.Comment.String() { continue } diff --git a/src/infra/cron/cronQueryRepo_test.go b/src/infra/cron/cronQueryRepo_test.go index e2b53f906..8e922d0ce 100644 --- a/src/infra/cron/cronQueryRepo_test.go +++ b/src/infra/cron/cronQueryRepo_test.go @@ -16,7 +16,7 @@ func TestCronQueryRepo(t *testing.T) { schedule, _ := valueObject.NewCronSchedule("* * * * *") command, _ := valueObject.NewUnixCommand("echo \"cronTest\" >> crontab_log.txt") comment, _ := valueObject.NewCronComment("Test cron job") - ipAddress := valueObject.NewLocalhostIpAddress() + ipAddress := valueObject.IpAddressSystem operatorAccountId, _ := valueObject.NewAccountId(0) createDto := dto.NewCreateCron( diff --git a/src/infra/database/databaseQueryRepo.go b/src/infra/database/databaseQueryRepo.go index 1676f975e..6eadc0034 100644 --- a/src/infra/database/databaseQueryRepo.go +++ b/src/infra/database/databaseQueryRepo.go @@ -2,7 +2,9 @@ package databaseInfra import ( "errors" + "math" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/valueObject" ) @@ -14,35 +16,99 @@ type DatabaseQueryRepo struct { func NewDatabaseQueryRepo( dbType valueObject.DatabaseType, ) *DatabaseQueryRepo { - return &DatabaseQueryRepo{ - dbType: dbType, - } + return &DatabaseQueryRepo{dbType: dbType} } -func (repo DatabaseQueryRepo) Read() ([]entity.Database, error) { +func (repo DatabaseQueryRepo) Read( + requestDto dto.ReadDatabasesRequest, +) (responseDto dto.ReadDatabasesResponse, err error) { + if requestDto.DatabaseType == nil { + requestDto.DatabaseType = &repo.dbType + } + + allDatabases := []entity.Database{} switch repo.dbType { case "mariadb": - return MysqlDatabaseQueryRepo{}.Read() + allDatabases, err = MysqlDatabaseQueryRepo{}.readAllDatabases() case "postgresql": - return PostgresDatabaseQueryRepo{}.Read() + allDatabases, err = PostgresDatabaseQueryRepo{}.readAllDatabases() default: - return []entity.Database{}, errors.New("DatabaseTypeNotSupported") + return responseDto, errors.New("DatabaseTypeNotSupported") } + if err != nil { + return responseDto, err + } + + filteredDatabases := []entity.Database{} + for _, databaseEntity := range allDatabases { + if requestDto.DatabaseName != nil && databaseEntity.Name != *requestDto.DatabaseName { + continue + } + + if requestDto.DatabaseType != nil && databaseEntity.Type != *requestDto.DatabaseType { + continue + } + + if requestDto.Username != nil { + userFound := false + for _, dbUserEntity := range databaseEntity.Users { + if dbUserEntity.Username != *requestDto.Username { + continue + } + + userFound = true + break + } + + if !userFound { + continue + } + } + + filteredDatabases = append(filteredDatabases, databaseEntity) + } + + paginatedDatabases := []entity.Database{} + startIndex := int(requestDto.Pagination.PageNumber) * int(requestDto.Pagination.ItemsPerPage) + endIndex := startIndex + int(requestDto.Pagination.ItemsPerPage) + + if startIndex < len(filteredDatabases) { + if endIndex > len(filteredDatabases) { + endIndex = len(filteredDatabases) + } + paginatedDatabases = filteredDatabases[startIndex:endIndex] + } + + itemsTotal := uint64(len(filteredDatabases)) + pagesTotal := uint32(math.Ceil(float64(itemsTotal) / float64(requestDto.Pagination.ItemsPerPage))) + + paginationDto := requestDto.Pagination + paginationDto.ItemsTotal = &itemsTotal + paginationDto.PagesTotal = &pagesTotal + + responseDto.Pagination = paginationDto + responseDto.Databases = paginatedDatabases + + return responseDto, nil } -func (repo DatabaseQueryRepo) ReadByName( - name valueObject.DatabaseName, -) (entity.Database, error) { - dbs, err := repo.Read() +func (repo DatabaseQueryRepo) ReadFirst( + requestDto dto.ReadDatabasesRequest, +) (database entity.Database, err error) { + requestDto.Pagination = dto.PaginationSingleItem + + if requestDto.DatabaseType == nil { + requestDto.DatabaseType = &repo.dbType + } + + responseDto, err := repo.Read(requestDto) if err != nil { - return entity.Database{}, err + return database, err } - for _, db := range dbs { - if db.Name == name { - return db, nil - } + if len(responseDto.Databases) == 0 { + return database, errors.New("DatabaseNotFound") } - return entity.Database{}, errors.New("DatabaseNotFound") + return responseDto.Databases[0], nil } diff --git a/src/infra/database/mysqlDatabaseQueryRepo.go b/src/infra/database/mysqlDatabaseQueryRepo.go index 0501b9f13..511f23a4a 100644 --- a/src/infra/database/mysqlDatabaseQueryRepo.go +++ b/src/infra/database/mysqlDatabaseQueryRepo.go @@ -2,7 +2,7 @@ package databaseInfra import ( "errors" - "log" + "log/slog" "regexp" "strings" @@ -15,176 +15,174 @@ type MysqlDatabaseQueryRepo struct { } func MysqlCmd(cmd string) (string, error) { - return infraHelper.RunCmd( - "mysql", - "--defaults-file=/root/.my.cnf", - "--skip-column-names", - "--silent", - "--execute", - cmd, - ) + return infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "mysql", + Args: []string{ + "--defaults-file=/root/.my.cnf", "--skip-column-names", "--silent", + "--execute", cmd, + }, + }) } -func (repo MysqlDatabaseQueryRepo) getDatabaseNames() ([]valueObject.DatabaseName, error) { - var dbNameList []valueObject.DatabaseName +func (repo MysqlDatabaseQueryRepo) readDatabaseNames() ([]valueObject.DatabaseName, error) { + databaseNames := []valueObject.DatabaseName{} - dbNameListStr, err := MysqlCmd("SHOW DATABASES") + rawDatabaseNames, err := MysqlCmd("SHOW DATABASES") if err != nil { - log.Printf("GetDatabaseNamesError: %v", err) - return dbNameList, errors.New("GetDatabaseNamesError") + return databaseNames, errors.New("ReadDatabaseNamesError: " + err.Error()) } - dbNameListSlice := strings.Split(dbNameListStr, "\n") - dbExcludeRegex := "^(information_schema|mysql|performance_schema|sys)$" - for _, dbName := range dbNameListSlice { - if regexp.MustCompile(dbExcludeRegex).MatchString(dbName) { + dbExcludeRegex := regexp.MustCompile( + `^(information_schema|mysql|performance_schema|sys)$`, + ) + for rawDatabaseName := range strings.SplitSeq(rawDatabaseNames, "\n") { + if dbExcludeRegex.MatchString(rawDatabaseName) { continue } - dbName, err := valueObject.NewDatabaseName(dbName) + + dbName, err := valueObject.NewDatabaseName(rawDatabaseName) if err != nil { + slog.Debug( + err.Error(), + slog.String("rawDbName", rawDatabaseName), + ) continue } - dbNameList = append(dbNameList, dbName) + databaseNames = append(databaseNames, dbName) } - return dbNameList, nil + return databaseNames, nil } -func (repo MysqlDatabaseQueryRepo) getDatabaseSize(dbName valueObject.DatabaseName) ( +func (repo MysqlDatabaseQueryRepo) readDatabaseSize(dbName valueObject.DatabaseName) ( valueObject.Byte, error, ) { - dbSizeStr, err := MysqlCmd( + rawDatabaseSize, err := MysqlCmd( "SELECT SUM(data_length + index_length) FROM information_schema.TABLES WHERE table_schema = '" + dbName.String() + "'", ) if err != nil { - log.Printf("GetDatabaseSizeError: %v", err) - return 0, errors.New("GetDatabaseSizeError") + return 0, errors.New("ReadDatabaseSizeError: " + err.Error()) } - return valueObject.NewByte(dbSizeStr) + return valueObject.NewByte(rawDatabaseSize) } -func (repo MysqlDatabaseQueryRepo) getDatabaseUsernames( +func (repo MysqlDatabaseQueryRepo) readDatabaseUsernames( dbName valueObject.DatabaseName, ) ([]valueObject.DatabaseUsername, error) { - var dbUsernameList []valueObject.DatabaseUsername + dbUsernames := []valueObject.DatabaseUsername{} - dbUserStr, err := MysqlCmd( + rawDatabaseUsers, err := MysqlCmd( "SELECT User FROM mysql.db WHERE Db = '" + dbName.String() + "'", ) if err != nil { - log.Printf("GetDatabaseUserError: %v", err) - return dbUsernameList, errors.New("GetDatabaseUserError") + return dbUsernames, errors.New("ReadDatabaseUserError: " + err.Error()) } + rawDatabaseUsers = strings.TrimSpace(rawDatabaseUsers) + + for rawDatabaseUsername := range strings.SplitSeq(rawDatabaseUsers, "\n") { + if rawDatabaseUsername == "" { + continue + } - dbUserSlice := strings.Split(dbUserStr, "\n") - for _, dbUser := range dbUserSlice { - dbUser, err := valueObject.NewDatabaseUsername(dbUser) + dbUsername, err := valueObject.NewDatabaseUsername(rawDatabaseUsername) if err != nil { + slog.Debug(err.Error(), slog.String("rawDbUser", rawDatabaseUsername)) continue } - dbUsernameList = append(dbUsernameList, dbUser) + dbUsernames = append(dbUsernames, dbUsername) } - return dbUsernameList, nil + return dbUsernames, nil } -func (repo MysqlDatabaseQueryRepo) getDatabaseUserPrivileges( +func (repo MysqlDatabaseQueryRepo) readDatabaseUserPrivileges( dbName valueObject.DatabaseName, dbUser valueObject.DatabaseUsername, ) ([]valueObject.DatabasePrivilege, error) { - var dbUserPrivileges []valueObject.DatabasePrivilege + dbUserPrivileges := []valueObject.DatabasePrivilege{} userGrantsStr, err := MysqlCmd( "SHOW GRANTS FOR '" + dbUser.String() + "'", ) if err != nil { - log.Printf("GetDatabaseUserGrantsError: %v", err) - return dbUserPrivileges, errors.New("GetDatabaseUserGrantsError") - } - - userGrantsSlice := strings.Split(userGrantsStr, "\n") - if len(userGrantsSlice) == 0 { - return dbUserPrivileges, nil + return dbUserPrivileges, errors.New( + "ReadDatabaseUserPrivilegesError: " + err.Error(), + ) } - privsRegexp := regexp.MustCompile( + grantsRegexp := regexp.MustCompile( `GRANT (?P.*) ON (?:\x60|'|")?` + dbName.String() + `(?:\x60|'|")?\.`, ) - for _, privileges := range userGrantsSlice { - privileges = strings.TrimSpace(privileges) - if !privsRegexp.MatchString(privileges) { + for rawGrants := range strings.SplitSeq(userGrantsStr, "\n") { + rawGrants = strings.TrimSpace(rawGrants) + if !grantsRegexp.MatchString(rawGrants) { continue } - privsStr := privsRegexp.FindStringSubmatch(privileges)[1] - privsSlice := strings.Split(privsStr, ",") - for _, singlePriv := range privsSlice { - singlePriv = strings.TrimSpace(singlePriv) - parsedPriv, err := valueObject.NewDatabasePrivilege(singlePriv) + rawGrantsRegexParts := grantsRegexp.FindStringSubmatch(rawGrants) + if len(rawGrantsRegexParts) < 2 { + continue + } + + rawPrivileges := rawGrantsRegexParts[1] + for rawSinglePrivilege := range strings.SplitSeq(rawPrivileges, ",") { + privilege, err := valueObject.NewDatabasePrivilege(rawSinglePrivilege) if err != nil { + slog.Debug( + err.Error(), + slog.String("rawPrivilege", rawSinglePrivilege), + slog.String("dbName", dbName.String()), + slog.String("dbUser", dbUser.String()), + ) continue } - dbUserPrivileges = append(dbUserPrivileges, parsedPriv) + dbUserPrivileges = append(dbUserPrivileges, privilege) } } return dbUserPrivileges, nil } -func (repo MysqlDatabaseQueryRepo) Read() ([]entity.Database, error) { - databases := []entity.Database{} +func (repo MysqlDatabaseQueryRepo) readAllDatabases() ([]entity.Database, error) { + databaseEntities := []entity.Database{} - dbNames, err := repo.getDatabaseNames() + dbNames, err := repo.readDatabaseNames() if err != nil { - return databases, err + return databaseEntities, err } dbType, _ := valueObject.NewDatabaseType("mariadb") for _, dbName := range dbNames { - dbSize, err := repo.getDatabaseSize(dbName) + dbSize, err := repo.readDatabaseSize(dbName) if err != nil { dbSize, _ = valueObject.NewByte(0) } - dbUsernames, err := repo.getDatabaseUsernames(dbName) + dbUsernames, err := repo.readDatabaseUsernames(dbName) if err != nil { dbUsernames = []valueObject.DatabaseUsername{} } - var dbUserPrivileges []valueObject.DatabasePrivilege - for _, dbUser := range dbUsernames { - dbUserPrivileges, err = repo.getDatabaseUserPrivileges(dbName, dbUser) + dbUsersWithPrivileges := []entity.DatabaseUser{} + for _, dbUsername := range dbUsernames { + dbUserPrivileges, err := repo.readDatabaseUserPrivileges(dbName, dbUsername) if err != nil { dbUserPrivileges = []valueObject.DatabasePrivilege{} } - } - dbUsersWithPrivileges := []entity.DatabaseUser{} - for _, dbUsername := range dbUsernames { dbUsersWithPrivileges = append( dbUsersWithPrivileges, - entity.NewDatabaseUser( - dbUsername, - dbName, - dbType, - dbUserPrivileges, - ), + entity.NewDatabaseUser(dbUsername, dbName, dbType, dbUserPrivileges), ) } - databases = append( - databases, - entity.NewDatabase( - dbName, - dbType, - dbSize, - dbUsersWithPrivileges, - ), + databaseEntities = append( + databaseEntities, entity.NewDatabase(dbName, dbType, dbSize, dbUsersWithPrivileges), ) } - return databases, nil + return databaseEntities, nil } diff --git a/src/infra/database/mysqlDatabaseQueryRepo_test.go b/src/infra/database/mysqlDatabaseQueryRepo_test.go index e508d6296..49ff9d141 100644 --- a/src/infra/database/mysqlDatabaseQueryRepo_test.go +++ b/src/infra/database/mysqlDatabaseQueryRepo_test.go @@ -12,12 +12,12 @@ func TestMysqlDatabaseQueryRepo(t *testing.T) { t.Run("GetDatabases", func(t *testing.T) { databasesQueryRepo := MysqlDatabaseQueryRepo{} - databasesList, err := databasesQueryRepo.Read() + allDatabases, err := databasesQueryRepo.readAllDatabases() if err != nil { t.Errorf("Error: %v", err) } - if len(databasesList) == 0 { - t.Errorf("Expected: %v, got: %v", "a list of databases", databasesList) + if len(allDatabases) == 0 { + t.Errorf("Expected: %v, got: %v", "a list of databases", allDatabases) } }) } diff --git a/src/infra/database/mysqlDatatabaseCmdRepo_test.go b/src/infra/database/mysqlDatatabaseCmdRepo_test.go index 4f64dadfc..ade134c76 100644 --- a/src/infra/database/mysqlDatatabaseCmdRepo_test.go +++ b/src/infra/database/mysqlDatatabaseCmdRepo_test.go @@ -13,7 +13,10 @@ func TestMysqlDatabaseCmdRepo(t *testing.T) { t.Skip("SkipMysqlDatabaseCmdRepoTest") testHelpers.LoadEnvVars() - _, err := infraHelper.RunCmd("mysqld_safe", "&") + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "mysqld_safe", + Args: []string{"&"}, + }) if err != nil { t.Error("Error starting command") } @@ -24,7 +27,7 @@ func TestMysqlDatabaseCmdRepo(t *testing.T) { dbPrivilege, _ := valueObject.NewDatabasePrivilege("ALL") dbPrivileges := []valueObject.DatabasePrivilege{dbPrivilege} - ipAddress := valueObject.NewLocalhostIpAddress() + ipAddress := valueObject.IpAddressSystem operatorAccountId, _ := valueObject.NewAccountId(0) mysqlDatabaseCmdRepo := MysqlDatabaseCmdRepo{} diff --git a/src/infra/database/postgresDatabaseCmdRepo.go b/src/infra/database/postgresDatabaseCmdRepo.go index 59154958b..6c51e956d 100644 --- a/src/infra/database/postgresDatabaseCmdRepo.go +++ b/src/infra/database/postgresDatabaseCmdRepo.go @@ -1,6 +1,9 @@ package databaseInfra import ( + "errors" + "regexp" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/valueObject" ) @@ -26,9 +29,13 @@ func (repo PostgresDatabaseCmdRepo) Delete(dbName valueObject.DatabaseName) erro return err } -func (repo PostgresDatabaseCmdRepo) CreateUser(createDatabaseUser dto.CreateDatabaseUser) error { - dbNameStr := createDatabaseUser.DatabaseName.String() +func (repo PostgresDatabaseCmdRepo) CreateUser( + createDatabaseUser dto.CreateDatabaseUser, +) error { dbUserStr := createDatabaseUser.Username.String() + if regexp.MustCompile(`^\d`).MatchString(dbUserStr) { + return errors.New("PostgresUsernameCannotStartWithNumbers") + } postgresDatabaseQueryRepo := PostgresDatabaseQueryRepo{} userExists := postgresDatabaseQueryRepo.UserExists(createDatabaseUser.Username) @@ -42,9 +49,9 @@ func (repo PostgresDatabaseCmdRepo) CreateUser(createDatabaseUser dto.CreateData } } + dbNameStr := createDatabaseUser.DatabaseName.String() _, err := PostgresqlCmd( - "GRANT ALL PRIVILEGES ON DATABASE "+dbNameStr+ - " TO "+dbUserStr, + "GRANT ALL PRIVILEGES ON DATABASE "+dbNameStr+" TO "+dbUserStr, nil, ) if err != nil { @@ -62,18 +69,16 @@ func (repo PostgresDatabaseCmdRepo) CreateUser(createDatabaseUser dto.CreateData } _, err = PostgresqlCmd( - "ALTER DEFAULT PRIVILEGES IN SCHEMA public "+ - "GRANT ALL ON TABLES TO "+dbUserStr, - &dbNameStr, + "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO "+dbUserStr, + &createDatabaseUser.DatabaseName, ) if err != nil { return err } _, err = PostgresqlCmd( - "ALTER DEFAULT PRIVILEGES IN SCHEMA public "+ - "GRANT ALL ON SEQUENCES TO "+dbUserStr, - &dbNameStr, + "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO "+dbUserStr, + &createDatabaseUser.DatabaseName, ) return err } @@ -94,18 +99,16 @@ func (repo PostgresDatabaseCmdRepo) DeleteUser( } _, err = PostgresqlCmd( - "ALTER DEFAULT PRIVILEGES IN SCHEMA public "+ - "REVOKE ALL ON TABLES FROM "+dbUserStr, - &dbNameStr, + "ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM "+dbUserStr, + &dbName, ) if err != nil { return err } _, err = PostgresqlCmd( - "ALTER DEFAULT PRIVILEGES IN SCHEMA public "+ - "REVOKE ALL ON SEQUENCES FROM "+dbUserStr, - &dbNameStr, + "ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON SEQUENCES FROM "+dbUserStr, + &dbName, ) if err != nil { return err diff --git a/src/infra/database/postgresDatabaseQueryRepo.go b/src/infra/database/postgresDatabaseQueryRepo.go index 2d2f944e9..bfd90d3f5 100644 --- a/src/infra/database/postgresDatabaseQueryRepo.go +++ b/src/infra/database/postgresDatabaseQueryRepo.go @@ -2,7 +2,7 @@ package databaseInfra import ( "errors" - "log" + "log/slog" "regexp" "strings" @@ -14,77 +14,80 @@ import ( type PostgresDatabaseQueryRepo struct { } -func PostgresqlCmd(cmd string, dbName *string) (string, error) { - psqlArgs := []string{"-U", "postgres", "-tAc", cmd} - +func PostgresqlCmd(cmd string, dbName *valueObject.DatabaseName) (string, error) { + cmdArgs := []string{"-U", "postgres", "-tAc", cmd} if dbName != nil { - psqlDbToConnect := []string{"-d", *dbName} - psqlArgs = append(psqlArgs, psqlDbToConnect...) + cmdArgs = append(cmdArgs, "-d", dbName.String()) } - return infraHelper.RunCmd("psql", psqlArgs...) + return infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "psql", + Args: cmdArgs, + }) } -func (repo PostgresDatabaseQueryRepo) getDatabaseNames() ([]valueObject.DatabaseName, error) { - var dbNameList []valueObject.DatabaseName +func (repo PostgresDatabaseQueryRepo) readDatabaseNames() ([]valueObject.DatabaseName, error) { + databaseNames := []valueObject.DatabaseName{} - rawDbNameList, err := PostgresqlCmd("SELECT datname FROM pg_database", nil) + rawDatabaseNames, err := PostgresqlCmd( + "SELECT datname FROM pg_database WHERE datistemplate = false AND datname != 'postgres'", + nil, + ) if err != nil { - return dbNameList, errors.New("GetDatabaseNamesError: " + err.Error()) + return databaseNames, errors.New("ReadDatabaseNamesError: " + err.Error()) } - rawDbNameListSlice := strings.Split(rawDbNameList, "\n") - dbExcludeRegex := "^(postgres|template1|template0)$" - compiledDbExcludeRegex := regexp.MustCompile(dbExcludeRegex) - for _, rawDbName := range rawDbNameListSlice { - if compiledDbExcludeRegex.MatchString(rawDbName) { + for rawDatabaseName := range strings.SplitSeq(rawDatabaseNames, "\n") { + rawDatabaseName = strings.TrimSpace(rawDatabaseName) + if rawDatabaseName == "" { continue } - dbName, err := valueObject.NewDatabaseName(rawDbName) + dbName, err := valueObject.NewDatabaseName(rawDatabaseName) if err != nil { - log.Printf("%s: %s", err.Error(), rawDbName) + slog.Debug( + err.Error(), + slog.String("rawDbName", rawDatabaseName), + ) continue } - - dbNameList = append(dbNameList, dbName) + databaseNames = append(databaseNames, dbName) } - return dbNameList, nil + return databaseNames, nil } -func (repo PostgresDatabaseQueryRepo) getDatabaseSize( +func (repo PostgresDatabaseQueryRepo) readDatabaseSize( dbName valueObject.DatabaseName, ) (valueObject.Byte, error) { - rawDbSize, err := PostgresqlCmd( + rawDatabaseSize, err := PostgresqlCmd( "SELECT pg_database_size('"+dbName.String()+"')", nil, ) if err != nil { - return 0, errors.New("GetDatabaseSizeError: " + err.Error()) + return 0, errors.New("ReadDatabaseSizeError: " + err.Error()) } - return valueObject.NewByte(rawDbSize) + return valueObject.NewByte(rawDatabaseSize) } -func (repo PostgresDatabaseQueryRepo) getDatabaseUsernames( +func (repo PostgresDatabaseQueryRepo) readDatabaseUsernames( dbName valueObject.DatabaseName, ) ([]valueObject.DatabaseUsername, error) { - dbUsernameList := []valueObject.DatabaseUsername{} + dbUsernames := []valueObject.DatabaseUsername{} - rawDbUsersPrivs, err := PostgresqlCmd( + rawDatabaseUsers, err := PostgresqlCmd( "SELECT datacl FROM pg_database WHERE datname = '"+dbName.String()+"'", nil, ) if err != nil { - return dbUsernameList, errors.New("GetDatabaseUserError: " + err.Error()) + return dbUsernames, errors.New("ReadDatabaseUsersError: " + err.Error()) } - compiledDbUsersPrivsRegex := regexp.MustCompile(`(\w+)=`) - rawDbUsersMatches := compiledDbUsersPrivsRegex.FindAllStringSubmatch(rawDbUsersPrivs, -1) - + dbUsersRegex := regexp.MustCompile(`(?P[\w\-]{2,256})(?:=)`) + rawDbUsersMatches := dbUsersRegex.FindAllStringSubmatch(rawDatabaseUsers, -1) if len(rawDbUsersMatches) == 0 { - return dbUsernameList, nil + return dbUsernames, nil } defaultDbUser := "postgres" @@ -93,116 +96,110 @@ func (repo PostgresDatabaseQueryRepo) getDatabaseUsernames( continue } - rawDbUser := rawDbUserMatch[1] - if rawDbUser == defaultDbUser { + rawDatabaseUsername := rawDbUserMatch[1] + if rawDatabaseUsername == defaultDbUser { continue } - dbUser, err := valueObject.NewDatabaseUsername(rawDbUser) + dbUsername, err := valueObject.NewDatabaseUsername(rawDatabaseUsername) if err != nil { - log.Printf("%s: %s", err.Error(), rawDbUser) - continue - } - - dbUsernameList = append(dbUsernameList, dbUser) - } - - return dbUsernameList, nil -} - -func (repo PostgresDatabaseQueryRepo) Read() ([]entity.Database, error) { - var databases []entity.Database - - dbNames, err := repo.getDatabaseNames() - if err != nil { - return databases, errors.New("GetDatabaseNamesError: " + err.Error()) - } - dbType, _ := valueObject.NewDatabaseType("postgresql") - - for _, dbName := range dbNames { - dbSize, err := repo.getDatabaseSize(dbName) - if err != nil { - dbSize, _ = valueObject.NewByte(0) - } - - dbUsernames, err := repo.getDatabaseUsernames(dbName) - if err != nil { - log.Printf("GetDatabaseUsersError (%s): %s", dbName.String(), err.Error()) - } - - dbUsersWithPrivileges := []entity.DatabaseUser{} - for _, dbUsername := range dbUsernames { - dbUsersWithPrivileges = append( - dbUsersWithPrivileges, - entity.NewDatabaseUser( - dbUsername, - dbName, - dbType, - []valueObject.DatabasePrivilege{"ALL PRIVILEGES"}, - ), + slog.Debug( + err.Error(), + slog.String("rawDbUser", rawDatabaseUsername), ) + continue } - databases = append( - databases, - entity.NewDatabase( - dbName, - dbType, - dbSize, - dbUsersWithPrivileges, - ), - ) + dbUsernames = append(dbUsernames, dbUsername) } - return databases, nil + return dbUsernames, nil } -func (repo PostgresDatabaseQueryRepo) UserExists( - dbUser valueObject.DatabaseUsername, -) bool { - userExists, err := PostgresqlCmd( - "SELECT 1 FROM pg_user WHERE usename='"+dbUser.String()+"'", +func (repo PostgresDatabaseQueryRepo) UserExists(dbUsername valueObject.DatabaseUsername) bool { + rawDatabaseUsers, err := PostgresqlCmd( + "SELECT rolname FROM pg_roles WHERE rolname = '"+dbUsername.String()+"'", nil, ) if err != nil { return false } - return userExists == "1" + return strings.TrimSpace(rawDatabaseUsers) != "" } func (repo PostgresDatabaseQueryRepo) ReadDatabaseNamesByUser( - dbUser valueObject.DatabaseUsername, + dbUsername valueObject.DatabaseUsername, ) ([]valueObject.DatabaseName, error) { - dbNames := []valueObject.DatabaseName{} + databaseNames := []valueObject.DatabaseName{} - rawDbNames, err := PostgresqlCmd( - "SELECT datname FROM pg_database WHERE array_to_string(datacl, '') LIKE '%"+ - dbUser.String()+"%'", + rawDatabaseNames, err := PostgresqlCmd( + "SELECT d.datname FROM pg_database d JOIN pg_roles r ON r.oid = d.datdba WHERE r.rolname = '"+dbUsername.String()+"' UNION SELECT d.datname FROM pg_database d WHERE EXISTS (SELECT 1 FROM unnest(d.datacl::text[]) acl WHERE acl LIKE '%"+dbUsername.String()+"%')", nil, ) if err != nil { - return dbNames, errors.New("GetUserDatabaseNamesError: " + err.Error()) + return databaseNames, errors.New("ReadDatabaseNamesByUserError: " + err.Error()) } - rawDbNamesSlice := strings.Split(rawDbNames, "\n") - if len(rawDbNamesSlice) == 0 { - return dbNames, nil - } + for rawDatabaseName := range strings.SplitSeq(rawDatabaseNames, "\n") { + rawDatabaseName = strings.TrimSpace(rawDatabaseName) + if rawDatabaseName == "" { + continue + } - for _, rawDbName := range rawDbNamesSlice { - if len(rawDbName) == 0 { + dbName, err := valueObject.NewDatabaseName(rawDatabaseName) + if err != nil { + slog.Debug( + err.Error(), + slog.String("rawDbName", rawDatabaseName), + ) continue } - dbName, err := valueObject.NewDatabaseName(rawDbName) + databaseNames = append(databaseNames, dbName) + } + + return databaseNames, nil +} + +func (repo PostgresDatabaseQueryRepo) readAllDatabases() ([]entity.Database, error) { + databaseEntities := []entity.Database{} + + databaseNames, err := repo.readDatabaseNames() + if err != nil { + return databaseEntities, errors.New("ReadDatabaseNamesError: " + err.Error()) + } + dbType, _ := valueObject.NewDatabaseType("postgresql") + + for _, dbName := range databaseNames { + dbSize, err := repo.readDatabaseSize(dbName) if err != nil { - log.Printf("%s: %s", err.Error(), rawDbName) + dbSize, _ = valueObject.NewByte(0) + } + + dbUsernames, err := repo.readDatabaseUsernames(dbName) + if err != nil { + slog.Debug( + "ReadDatabaseUsersError", + slog.String("dbName", dbName.String()), + slog.String("err", err.Error()), + ) continue } - dbNames = append(dbNames, dbName) + dbUsersWithPrivileges := []entity.DatabaseUser{} + for _, dbUsername := range dbUsernames { + dbUsersWithPrivileges = append( + dbUsersWithPrivileges, entity.NewDatabaseUser( + dbUsername, dbName, dbType, []valueObject.DatabasePrivilege{"ALL PRIVILEGES"}, + ), + ) + } + + databaseEntities = append( + databaseEntities, entity.NewDatabase(dbName, dbType, dbSize, dbUsersWithPrivileges), + ) } - return dbNames, nil + return databaseEntities, nil } diff --git a/src/infra/database/postgresDatabaseQueryRepo_test.go b/src/infra/database/postgresDatabaseQueryRepo_test.go new file mode 100644 index 000000000..499e0b2c0 --- /dev/null +++ b/src/infra/database/postgresDatabaseQueryRepo_test.go @@ -0,0 +1,23 @@ +package databaseInfra + +import ( + "testing" + + testHelpers "github.com/goinfinite/os/src/devUtils" +) + +func TestPostgresDatabaseQueryRepo(t *testing.T) { + t.Skip("SkipPostgresDatabaseQueryRepoTest") + testHelpers.LoadEnvVars() + + t.Run("GetDatabases", func(t *testing.T) { + databasesQueryRepo := PostgresDatabaseQueryRepo{} + allDatabases, err := databasesQueryRepo.readAllDatabases() + if err != nil { + t.Errorf("Error: %v", err) + } + if len(allDatabases) == 0 { + t.Errorf("Expected: %v, got: %v", "a list of databases", allDatabases) + } + }) +} diff --git a/src/infra/envs/envs.go b/src/infra/envs/envs.go index 0274b9701..bfa8f2d74 100644 --- a/src/infra/envs/envs.go +++ b/src/infra/envs/envs.go @@ -1,10 +1,11 @@ package infraEnvs const ( - InfiniteOsVersion string = "0.1.7" + InfiniteOsVersion string = "0.2.5" InfiniteOsMainDir string = "/infinite" InfiniteOsBinary string = InfiniteOsMainDir + "/os" InfiniteOsEnvFilePath string = InfiniteOsMainDir + "/.env" + InfiniteOsApiHttpPublicPort string = "1618" PersistentDatabaseFilePath string = InfiniteOsMainDir + "/os.db" TrailDatabaseFilePath string = InfiniteOsMainDir + "/trail.db" MarketplaceCatalogItemsDir string = InfiniteOsMainDir + "/marketplace" @@ -15,10 +16,13 @@ const ( InstallableServicesItemsRepoBranch string = "v1" PrimaryPublicDir string = "/app/html" VirtualHostsConfDir string = "/app/conf/nginx" - PrimaryVhostFileName string = "primary.conf" - MappingsConfDir string = "/app/conf/nginx/mapping" + MappingsConfDir string = VirtualHostsConfDir + "/mapping" + MappingsSecurityRulesConfDir string = MappingsConfDir + "/security" PkiConfDir string = "/app/conf/pki" PhpWebserverMainConfFilePath string = "/usr/local/lsws/conf/httpd_config.conf" AccessTokenCookieKey string = "os-access-token" - UserDataBaseDirectory string = "/home/" + UserDataBaseDirectory string = "/home" + DefaultPrimaryVhost string = "goinfinite.local" + LocalStatesAssetsPath string = "/assets/local-states" + GlobalStatesAssetsPath string = "/assets/global-states" ) diff --git a/src/infra/files/filesCmdRepo.go b/src/infra/files/filesCmdRepo.go index ec18dd17e..774901550 100644 --- a/src/infra/files/filesCmdRepo.go +++ b/src/infra/files/filesCmdRepo.go @@ -6,7 +6,7 @@ import ( "io" "log/slog" "os" - "slices" + "os/user" "strings" "github.com/goinfinite/os/src/domain/dto" @@ -15,12 +15,12 @@ import ( ) type FilesCmdRepo struct { - filesQueryRepo FilesQueryRepo + filesQueryRepo *FilesQueryRepo } -func NewFilesCmdRepo() FilesCmdRepo { - return FilesCmdRepo{ - filesQueryRepo: FilesQueryRepo{}, +func NewFilesCmdRepo() *FilesCmdRepo { + return &FilesCmdRepo{ + filesQueryRepo: &FilesQueryRepo{}, } } @@ -63,50 +63,54 @@ func (repo FilesCmdRepo) uploadSingleFile( } func (repo FilesCmdRepo) Copy(copyDto dto.CopyUnixFile) error { - fileToCopyExists := infraHelper.FileExists(copyDto.SourcePath.String()) + sourcePathStr := copyDto.SourcePath.String() + fileToCopyExists := infraHelper.FileExists(sourcePathStr) if !fileToCopyExists { return errors.New("FileToCopyNotFound") } + sourceFileName := copyDto.SourcePath.ReadFileName() + destinationAbsolutePath := copyDto.DestinationPath.String() + "/" + sourceFileName.String() if !copyDto.ShouldOverwrite { - destinationPathExists := infraHelper.FileExists( - copyDto.DestinationPath.String(), - ) + destinationPathExists := infraHelper.FileExists(destinationAbsolutePath) if destinationPathExists { return errors.New("DestinationPathAlreadyExists") } } - _, err := infraHelper.RunCmdWithSubShell( - "rsync -avq " + copyDto.SourcePath.String() + " " + - copyDto.DestinationPath.String(), - ) + copyCmd := "rsync -avq " + sourcePathStr + " " + destinationAbsolutePath + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: copyCmd, + ShouldRunWithSubShell: true, + }) return err } func (repo FilesCmdRepo) Compress( compressDto dto.CompressUnixFiles, ) (compressionProcessReport dto.CompressionProcessReport, err error) { - existingFiles := []string{} + compressibleFilesStr := []string{} + incompressibleFilesStr := map[string]interface{}{} for _, sourcePath := range compressDto.SourcePaths { sourcePathExists := infraHelper.FileExists(sourcePath.String()) if !sourcePathExists { + incompressibleFilesStr[sourcePath.String()] = nil slog.Debug( "SourcePathNotFound", slog.String("sourcePath", sourcePath.String()), ) continue } - existingFiles = append(existingFiles, sourcePath.String()) + compressibleFilesStr = append(compressibleFilesStr, sourcePath.String()) } - if len(existingFiles) < 1 { - return compressionProcessReport, errors.New("NoExistingFilesToCompress") + if len(compressibleFilesStr) == 0 { + return compressionProcessReport, errors.New("NoCompressibleFilesFound") } compressionTypeStr := "zip" - destinationPathExt, err := compressDto.DestinationPath.GetFileExtension() + destinationPathExt, err := compressDto.DestinationPath.ReadFileExtension() if err == nil { destinationPathExtStr := destinationPathExt.String() if destinationPathExtStr != "zip" { @@ -118,7 +122,7 @@ func (repo FilesCmdRepo) Compress( compressionTypeStr = compressDto.CompressionType.String() } - destinationPathWithoutExt := compressDto.DestinationPath.GetWithoutExtension() + destinationPathWithoutExt := compressDto.DestinationPath.ReadWithoutExtension() compressionTypeAsExt := compressionTypeStr newDestinationPath, err := valueObject.NewUnixFilePath( destinationPathWithoutExt.String() + "." + compressionTypeAsExt, @@ -135,8 +139,7 @@ func (repo FilesCmdRepo) Compress( return compressionProcessReport, errors.New("UnsupportedCompressionType") } - destinationPathExists := infraHelper.FileExists(newDestinationPath.String()) - if destinationPathExists { + if infraHelper.FileExists(newDestinationPath.String()) { return compressionProcessReport, errors.New("DestinationPathAlreadyExists") } @@ -147,11 +150,16 @@ func (repo FilesCmdRepo) Compress( compressionBinaryFlag = "-czf" } - filesToCompress := strings.Join(existingFiles, " ") - _, err = infraHelper.RunCmdWithSubShell( - compressionBinary + " " + compressionBinaryFlag + " " + - newDestinationPath.String() + " " + filesToCompress, + filesToCompress := strings.Join(compressibleFilesStr, " ") + compressCmd := fmt.Sprintf( + "%s %s %s %s", + compressionBinary, compressionBinaryFlag, + newDestinationPath.String(), filesToCompress, ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: compressCmd, + ShouldRunWithSubShell: true, + }) if err != nil { return compressionProcessReport, err } @@ -162,7 +170,7 @@ func (repo FilesCmdRepo) Compress( newDestinationPath, ) for _, sourcePath := range compressDto.SourcePaths { - if !slices.Contains(existingFiles, sourcePath.String()) { + if _, isIncompressible := incompressibleFilesStr[sourcePath.String()]; isIncompressible { compressionProcessReport.FailedPathsWithReason = append( compressionProcessReport.FailedPathsWithReason, valueObject.NewCompressionProcessFailure( @@ -189,24 +197,42 @@ func (repo FilesCmdRepo) Create(createDto dto.CreateUnixFile) error { return errors.New("PathAlreadyExists") } - if !createDto.MimeType.IsDir() { - _, err := os.Create(filePathStr) + unixUser, err := user.LookupId(createDto.OperatorAccountId.String()) + if err != nil { + return errors.New("AccountNotFound") + } + + fileOwnershipStr := unixUser.Username + ":" + unixUser.Username + fileOwner, err := valueObject.NewUnixFileOwnership(fileOwnershipStr) + if err != nil { + return err + } + + updateFileOwnerDto := dto.NewUpdateUnixFileOwnership(createDto.FilePath, fileOwner) + + if createDto.MimeType.IsDir() { + err := os.MkdirAll(filePathStr, createDto.Permissions.GetFileMode()) if err != nil { return err } - updatePermissionsDto := dto.NewUpdateUnixFilePermissions( - createDto.FilePath, createDto.Permissions, - ) - return repo.UpdatePermissions(updatePermissionsDto) + return repo.UpdateOwnership(updateFileOwnerDto) } - err := os.MkdirAll(filePathStr, createDto.Permissions.GetFileMode()) + _, err = os.Create(filePathStr) if err != nil { return err } - return nil + err = repo.UpdateOwnership(updateFileOwnerDto) + if err != nil { + return err + } + + updatePermissionsDto := dto.NewUpdateUnixFilePermissions( + createDto.FilePath, createDto.Permissions, nil, + ) + return repo.UpdatePermissions(updatePermissionsDto) } func (repo FilesCmdRepo) Delete(unixFilePath valueObject.UnixFilePath) error { @@ -242,7 +268,7 @@ func (repo FilesCmdRepo) Extract(extractDto dto.ExtractUnixFiles) error { compressBinaryFlag := "-xf" compressDestinationFlag := "-C" - unixFilePathExtension, err := fileToExtract.GetFileExtension() + unixFilePathExtension, err := fileToExtract.ReadFileExtension() if err != nil { return err } @@ -263,14 +289,17 @@ func (repo FilesCmdRepo) Extract(extractDto dto.ExtractUnixFiles) error { compressBinary, compressBinaryFlag, fileToExtract.String(), compressDestinationFlag, destinationPath.String(), ) - _, err = infraHelper.RunCmdWithSubShell(compressCmd) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: compressCmd, + ShouldRunWithSubShell: true, + }) return err } func (repo FilesCmdRepo) Move(moveDto dto.MoveUnixFile) error { sourcePathStr := moveDto.SourcePath.String() if !infraHelper.FileExists(sourcePathStr) { - return errors.New("SourceToMoveOrRenameNotFound") + return errors.New("SourceFileNotFound") } destinationPathStr := moveDto.DestinationPath.String() @@ -278,24 +307,13 @@ func (repo FilesCmdRepo) Move(moveDto dto.MoveUnixFile) error { return os.Rename(sourcePathStr, destinationPathStr) } - destinationInfo, err := os.Stat(destinationPathStr) - if err != nil { - return errors.New("DestinationPathStatError: " + err.Error()) - } - - if destinationInfo.IsDir() { - if !strings.HasSuffix(destinationPathStr, "/") { - destinationPathStr += "/" - } - sourcePathFileNameStr := moveDto.SourcePath.GetFileName().String() - destinationPathStr += sourcePathFileNameStr + if !moveDto.ShouldOverwrite { + return nil } - if infraHelper.FileExists(destinationPathStr) && moveDto.ShouldOverwrite { - err = repo.Delete(moveDto.DestinationPath) - if err != nil { - return errors.New("MoveFileToTrashError: " + err.Error()) - } + err := repo.Delete(moveDto.DestinationPath) + if err != nil { + return errors.New("MoveFileToTrashError: " + err.Error()) } return os.Rename(sourcePathStr, destinationPathStr) @@ -323,18 +341,53 @@ func (repo FilesCmdRepo) UpdateContent( ) } +func (repo FilesCmdRepo) UpdateOwnership( + updateOwnershipDto dto.UpdateUnixFileOwnership, +) error { + sourcePathStr := updateOwnershipDto.SourcePath.String() + if !infraHelper.FileExists(sourcePathStr) { + return errors.New("FileNotFound") + } + + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "chown", + Args: []string{updateOwnershipDto.Ownership.String(), sourcePathStr}, + }) + if err != nil { + return errors.New("UpdateFileOwnershipError: " + err.Error()) + } + + return nil +} + func (repo FilesCmdRepo) UpdatePermissions( updatePermissionsDto dto.UpdateUnixFilePermissions, ) error { - _, err := repo.filesQueryRepo.Read(updatePermissionsDto.SourcePath) + sourcePathStr := updatePermissionsDto.SourcePath.String() + if !infraHelper.FileExists(sourcePathStr) { + return errors.New("FileOrDirNotFound") + } + + updatePermissionsCmd := "find " + sourcePathStr + " -exec chmod " + + updatePermissionsDto.FilePermissions.String() + " {} \\;" + + if updatePermissionsDto.DirectoryPermissions != nil { + updatePermissionsCmd = fmt.Sprintf( + "find %s -type d -exec chmod %s {} \\; && find %s -type f -exec chmod %s {} \\;", + sourcePathStr, updatePermissionsDto.DirectoryPermissions.String(), sourcePathStr, + updatePermissionsDto.FilePermissions.String(), + ) + } + + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: updatePermissionsCmd, + ShouldRunWithSubShell: true, + }) if err != nil { - return err + return errors.New("UpdatePermissionsError: " + err.Error()) } - return os.Chmod( - updatePermissionsDto.SourcePath.String(), - updatePermissionsDto.Permissions.GetFileMode(), - ) + return nil } func (repo FilesCmdRepo) Upload( @@ -361,7 +414,7 @@ func (repo FilesCmdRepo) Upload( if err != nil { uploadFailure, err := repo.uploadFailureFactory(err.Error(), fileToUpload) if err != nil { - slog.Debug("AddUploadFailureError", slog.Any("err", err)) + slog.Debug("ReportUploadFailureError", slog.String("err", err.Error())) } uploadProcessReport.FailedNamesWithReason = append( diff --git a/src/infra/files/filesCmdRepo_test.go b/src/infra/files/filesCmdRepo_test.go index f3376d051..a8c4c3972 100644 --- a/src/infra/files/filesCmdRepo_test.go +++ b/src/infra/files/filesCmdRepo_test.go @@ -1,7 +1,6 @@ package filesInfra import ( - "fmt" "os/user" "testing" @@ -13,18 +12,19 @@ func TestFilesCmdRepo(t *testing.T) { filesCmdRepo := FilesCmdRepo{} currentUser, _ := user.Current() - fileBasePathStr := fmt.Sprintf("/home/%s", currentUser.Username) + fileBasePathStr := "/home/" + currentUser.Username - filePermissions, _ := valueObject.NewUnixFilePermissions("0777") + fileDefaultPermissions := valueObject.NewUnixFileDefaultPermissions() + directoryDefaultPermissions := valueObject.NewUnixDirDefaultPermissions() operatorAccountId, _ := valueObject.NewAccountId(0) - ipAddress := valueObject.NewLocalhostIpAddress() + ipAddress := valueObject.IpAddressSystem t.Run("CreateUnixDirectory", func(t *testing.T) { filePath, _ := valueObject.NewUnixFilePath(fileBasePathStr + "/testDir") - mimeType, _ := valueObject.NewMimeType("directory") createDto := dto.NewCreateUnixFile( - filePath, &filePermissions, mimeType, operatorAccountId, ipAddress, + filePath, &directoryDefaultPermissions, valueObject.MimeTypeDirectory, + operatorAccountId, ipAddress, ) err := filesCmdRepo.Create(createDto) @@ -37,10 +37,10 @@ func TestFilesCmdRepo(t *testing.T) { filePath, _ := valueObject.NewUnixFilePath( fileBasePathStr + "/testDir/filesCmdRepoTest.txt", ) - mimeType, _ := valueObject.NewMimeType("generic") createDto := dto.NewCreateUnixFile( - filePath, &filePermissions, mimeType, operatorAccountId, ipAddress, + filePath, &fileDefaultPermissions, valueObject.MimeTypeGeneric, + operatorAccountId, ipAddress, ) err := filesCmdRepo.Create(createDto) @@ -63,12 +63,13 @@ func TestFilesCmdRepo(t *testing.T) { } }) - t.Run("UpdateUnixDirectoryPermissions", func(t *testing.T) { - filePath, _ := valueObject.NewUnixFilePath(fileBasePathStr + "/testDir") - filePermissions, _ := valueObject.NewUnixFilePermissions("0777") + t.Run("UpdateOnlyUnixFilePermissions", func(t *testing.T) { + filePath, _ := valueObject.NewUnixFilePath( + fileBasePathStr + "/testDir/filesCmdRepoTest.txt", + ) updatePermissionsDto := dto.NewUpdateUnixFilePermissions( - filePath, filePermissions, + filePath, fileDefaultPermissions, nil, ) err := filesCmdRepo.UpdatePermissions(updatePermissionsDto) @@ -77,13 +78,11 @@ func TestFilesCmdRepo(t *testing.T) { } }) - t.Run("UpdateUnixFilePermissions", func(t *testing.T) { - filePath, _ := valueObject.NewUnixFilePath( - fileBasePathStr + "/testDir/filesCmdRepoTest.txt", - ) + t.Run("UpdateUnixDirectoryAndFilePermissions", func(t *testing.T) { + filePath, _ := valueObject.NewUnixFilePath(fileBasePathStr + "/testDir") updatePermissionsDto := dto.NewUpdateUnixFilePermissions( - filePath, filePermissions, + filePath, fileDefaultPermissions, &directoryDefaultPermissions, ) err := filesCmdRepo.UpdatePermissions(updatePermissionsDto) diff --git a/src/infra/files/filesQueryRepo.go b/src/infra/files/filesQueryRepo.go index 3b8ab75e9..37469a5f0 100644 --- a/src/infra/files/filesQueryRepo.go +++ b/src/infra/files/filesQueryRepo.go @@ -7,9 +7,11 @@ import ( "os" "os/user" "path/filepath" + "slices" "strings" "syscall" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/valueObject" infraHelper "github.com/goinfinite/os/src/infra/helper" @@ -17,7 +19,7 @@ import ( type FilesQueryRepo struct{} -func (repo FilesQueryRepo) unixFileFactory( +func (repo *FilesQueryRepo) unixFileFactory( filePath valueObject.UnixFilePath, shouldReturnContent bool, ) (entity.UnixFile, error) { @@ -71,14 +73,14 @@ func (repo FilesQueryRepo) unixFileFactory( } var unixFileExtensionPtr *valueObject.UnixFileExtension - unixFileExtension, err := unixFilePath.GetFileExtension() + unixFileExtension, err := unixFilePath.ReadFileExtension() if err == nil { unixFileExtensionPtr = &unixFileExtension } unixFileMimeType := unixFileExtension.GetMimeType() if fileInfo.IsDir() { - unixFileMimeType, _ = valueObject.NewMimeType("directory") + unixFileMimeType = valueObject.MimeTypeDirectory unixFileExtensionPtr = nil } @@ -96,9 +98,9 @@ func (repo FilesQueryRepo) unixFileFactory( var unixFileContentPtr *valueObject.UnixFileContent if shouldReturnContent && unixFileSize.ToMiB() <= valueObject.FileContentMaxSizeInMb { - unixFileContentStr, err := infraHelper.GetFileContent(filePath.String()) + unixFileContentStr, err := infraHelper.ReadFileContent(filePath.String()) if err != nil { - return unixFile, errors.New("FailedToGetFileContent: " + err.Error()) + return unixFile, errors.New("FailedToReadFileContent: " + err.Error()) } unixFileContent, err := valueObject.NewUnixFileContent(unixFileContentStr) @@ -112,7 +114,7 @@ func (repo FilesQueryRepo) unixFileFactory( unixFileUpdatedAt := valueObject.NewUnixTimeWithGoTime(fileInfo.ModTime()) unixFile = entity.NewUnixFile( - unixFilePath.GetFileName(), unixFilePath, unixFileMimeType, unixFilePermissions, + unixFilePath.ReadFileName(), unixFilePath, unixFileMimeType, unixFilePermissions, unixFileSize, unixFileExtensionPtr, unixFileContentPtr, unixFileUid, unixFileUsername, unixFileGid, unixFileGroup, unixFileUpdatedAt, ) @@ -120,96 +122,238 @@ func (repo FilesQueryRepo) unixFileFactory( return unixFile, nil } -func (repo FilesQueryRepo) Read( +func (repo *FilesQueryRepo) simplifiedUnixFileFactory( unixFilePath valueObject.UnixFilePath, -) ([]entity.UnixFile, error) { - unixFileList := []entity.UnixFile{} +) (simplifiedUnixFile entity.SimplifiedUnixFile, err error) { + fileInfo, err := os.Stat(unixFilePath.String()) + if err != nil { + return simplifiedUnixFile, err + } + + unixFileMimeType := valueObject.MimeTypeGeneric + if fileInfo.IsDir() { + unixFileMimeType = valueObject.MimeTypeDirectory + } + + unixFileExtension, err := unixFilePath.ReadFileExtension() + if err == nil { + unixFileMimeType = unixFileExtension.GetMimeType() + } + + return entity.NewSimplifiedUnixFile( + unixFilePath.ReadFileName(), unixFilePath, unixFileMimeType, + ), nil +} + +func (repo *FilesQueryRepo) unixFileBranchFactory( + branchAbsolutePath valueObject.UnixFilePath, + shouldIncludeFiles bool, +) (fileBranch dto.UnixFileBranch, err error) { + simplifiedBranchFileEntity, err := repo.simplifiedUnixFileFactory(branchAbsolutePath) + if err != nil { + return fileBranch, err + } + fileBranch = dto.NewUnixFileBranch(simplifiedBranchFileEntity) + + findCmdArgs := []string{ + "-L", branchAbsolutePath.String(), + "-mindepth", "1", + "-maxdepth", "1", + } + if !shouldIncludeFiles { + findCmdArgs = append(findCmdArgs, "-type", "d") + } + + rawBranchTwigs, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "find", + Args: findCmdArgs, + }) + if err != nil { + return fileBranch, err + } - sourcePathStr := unixFilePath.String() - exists := infraHelper.FileExists(sourcePathStr) - if !exists { - return unixFileList, errors.New("PathNotFound") + if rawBranchTwigs == "" { + return fileBranch, nil } - filePathHasTrailingSlash := strings.HasSuffix(sourcePathStr, "/") - isRootPath := sourcePathStr == "/" - if filePathHasTrailingSlash && !isRootPath { - filePathWithoutTrailingSlash := strings.TrimSuffix(sourcePathStr, "/") - unixFilePath, _ = valueObject.NewUnixFilePath(filePathWithoutTrailingSlash) - sourcePathStr = unixFilePath.String() + rawFactorableFiles := strings.SplitSeq(rawBranchTwigs, "\n") + for rawFilePath := range rawFactorableFiles { + if rawFilePath == "" { + continue + } + + twigPath, err := valueObject.NewUnixFilePath(rawFilePath) + if err != nil { + slog.Error( + err.Error(), + slog.String("rawTwigPath", rawFilePath), + ) + continue + } + + simplifiedTwigFileEntity, err := repo.simplifiedUnixFileFactory(twigPath) + if err != nil { + slog.Error( + err.Error(), + slog.String("twigPath", twigPath.String()), + ) + continue + } + fileBranch.Branches[simplifiedTwigFileEntity.Name] = dto.NewUnixFileBranch(simplifiedTwigFileEntity) + } + + return fileBranch, nil +} + +func (repo *FilesQueryRepo) unixFileTreeFactory( + leafAbsolutePath valueObject.UnixFilePath, +) (treeTrunk dto.UnixFileBranch, err error) { + rawTreeBranches := strings.SplitSeq(leafAbsolutePath.String(), "/") + + shouldIncludeFiles := false + iterationBranch := treeTrunk + iterationBranchPath := "" + for rawBranchName := range rawTreeBranches { + rawBranchName = strings.TrimSpace(rawBranchName) + isTreeTrunk := rawBranchName == "" + + iterationBranchPath += rawBranchName + "/" + branchFilePath, err := valueObject.NewUnixFilePath(iterationBranchPath) + if err != nil { + slog.Debug( + err.Error(), + slog.String("rawBranchPath", iterationBranchPath), + ) + continue + } + + treeBranch, err := repo.unixFileBranchFactory(branchFilePath, shouldIncludeFiles) + if err != nil { + slog.Error( + err.Error(), + slog.String("branchFilePath", branchFilePath.String()), + ) + continue + } + if isTreeTrunk { + treeTrunk = treeBranch + iterationBranch = treeTrunk + continue + } + + iterationBranch.Branches[treeBranch.Name] = treeBranch + iterationBranch = treeBranch + } + + return treeTrunk, nil +} + +func (repo *FilesQueryRepo) Read( + requestDto dto.ReadFilesRequest, +) (responseDto dto.ReadFilesResponse, err error) { + sourcePathStr := requestDto.SourcePath.String() + + if !infraHelper.FileExists(sourcePathStr) { + return responseDto, errors.New("PathNotFound") } sourcePathInfo, err := os.Stat(sourcePathStr) if err != nil { - return unixFileList, errors.New("ReadSourcePathInfoError") + return responseDto, errors.New("ReadSourcePathInfoError: " + err.Error()) } - filesToFactory := []valueObject.UnixFilePath{unixFilePath} + factorableFilePaths := []valueObject.UnixFilePath{requestDto.SourcePath} if sourcePathInfo.IsDir() { - filesToFactoryWithoutSourcePath := filesToFactory[1:] - filesToFactory = filesToFactoryWithoutSourcePath + factorableFilePathsWithoutSourcePath := factorableFilePaths[1:] + factorableFilePaths = factorableFilePathsWithoutSourcePath - rawDirectoryFiles, err := infraHelper.RunCmd( - "find", "-L", sourcePathStr, "-maxdepth", "1", "-printf", "%p\n", - ) + rawDirectoryFiles, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "find", + Args: []string{"-L", sourcePathStr, "-maxdepth", "1", "-printf", "%p\n"}, + }) if err != nil { - return unixFileList, errors.New("ReadDirectoryError: " + err.Error()) + return responseDto, errors.New("ReadDirectoryError: " + err.Error()) } + if len(rawDirectoryFiles) == 0 { - return unixFileList, errors.New("ReadDirectoryError") + return responseDto, errors.New("ReadDirectoryError") } - rawDirectoryFilesList := strings.Split(rawDirectoryFiles, "\n") - for _, fileToFactoryStr := range rawDirectoryFilesList { + rawDirectoryFilesList := strings.SplitSeq(rawDirectoryFiles, "\n") + for fileToFactoryStr := range rawDirectoryFilesList { filePath, err := valueObject.NewUnixFilePath(fileToFactoryStr) if err != nil { slog.Error( - "FileToFactoryError", slog.String("filePath", filePath.String()), - slog.Any("err", err), + "FactoryFileError", + slog.String("filePath", filePath.String()), + slog.String("err", err.Error()), ) continue } - filesToFactory = append(filesToFactory, filePath) + factorableFilePaths = append(factorableFilePaths, filePath) } } shouldReturnContent := false - if len(filesToFactory) == 1 { + if len(factorableFilePaths) == 1 { shouldReturnContent = true } - for _, filePath := range filesToFactory { - isFileTheSourcePath := filePath.String() == unixFilePath.String() - if isFileTheSourcePath && sourcePathInfo.IsDir() { + fileEntities := []entity.UnixFile{} + directoryEntities := []entity.UnixFile{} + + isSourcePathDir := sourcePathInfo.IsDir() + for _, filePath := range factorableFilePaths { + isFileTheSourcePath := filePath.String() == sourcePathStr + if isFileTheSourcePath && isSourcePathDir { continue } - unixFile, err := repo.unixFileFactory(filePath, shouldReturnContent) - + fileEntity, err := repo.unixFileFactory(filePath, shouldReturnContent) if err != nil { slog.Error( "UnixFileFactoryError", slog.String("filePath", filePath.String()), - slog.Any("err", err), + slog.String("err", err.Error()), ) continue } - unixFileList = append(unixFileList, unixFile) + if fileEntity.MimeType.IsDir() { + directoryEntities = append(directoryEntities, fileEntity) + continue + } + + fileEntities = append(fileEntities, fileEntity) } - return unixFileList, nil + slices.SortStableFunc(fileEntities, func(a, b entity.UnixFile) int { + return strings.Compare(a.Name.String(), b.Name.String()) + }) + slices.SortStableFunc(directoryEntities, func(a, b entity.UnixFile) int { + return strings.Compare(a.Name.String(), b.Name.String()) + }) + fileEntities = append(directoryEntities, fileEntities...) + + responseDto = dto.ReadFilesResponse{Files: fileEntities} + if requestDto.ShouldIncludeFileTree != nil && *requestDto.ShouldIncludeFileTree { + filesTree, err := repo.unixFileTreeFactory(requestDto.SourcePath) + if err != nil { + return responseDto, err + } + + responseDto.FileTree = &filesTree + } + + return responseDto, nil } -func (repo FilesQueryRepo) ReadFirst( +func (repo *FilesQueryRepo) ReadFirst( unixFilePath valueObject.UnixFilePath, -) (entity.UnixFile, error) { - var unixFile entity.UnixFile - - exists := infraHelper.FileExists(unixFilePath.String()) - if !exists { - return unixFile, errors.New("FileNotFound") +) (unixFileEntity entity.UnixFile, err error) { + if !infraHelper.FileExists(unixFilePath.String()) { + return unixFileEntity, errors.New("FileNotFound") } shouldReturnContent := false diff --git a/src/infra/files/filesQueryRepo_test.go b/src/infra/files/filesQueryRepo_test.go index a46342ff2..0b9a65e2e 100644 --- a/src/infra/files/filesQueryRepo_test.go +++ b/src/infra/files/filesQueryRepo_test.go @@ -4,6 +4,7 @@ import ( "os/user" "testing" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/valueObject" infraHelper "github.com/goinfinite/os/src/infra/helper" ) @@ -15,7 +16,11 @@ func TestFilesQueryRepo(t *testing.T) { t.Run("Read", func(t *testing.T) { unixDirPath, _ := valueObject.NewUnixFilePath(userHomeDir) - _, err := filesQueryRepo.Read(unixDirPath) + requestDto := dto.ReadFilesRequest{ + SourcePath: unixDirPath, + } + + _, err := filesQueryRepo.Read(requestDto) if err != nil { t.Errorf("ExpectedNoErrorButGot: %s", err.Error()) } @@ -23,7 +28,11 @@ func TestFilesQueryRepo(t *testing.T) { t.Run("ReadWithInvalidDirectory", func(t *testing.T) { invalidUnixPath, _ := valueObject.NewUnixFilePath("/aaa/bbb/ccc") - _, err := filesQueryRepo.Read(invalidUnixPath) + requestDto := dto.ReadFilesRequest{ + SourcePath: invalidUnixPath, + } + + _, err := filesQueryRepo.Read(requestDto) if err == nil { t.Errorf("ExpectedErrorButGotNil") } @@ -32,6 +41,9 @@ func TestFilesQueryRepo(t *testing.T) { t.Run("ReadFollowingSymlink", func(t *testing.T) { downloadsDirPath, _ := valueObject.NewUnixFilePath(userHomeDir + "/Downloads") tmpSymlinkPath, _ := valueObject.NewUnixFilePath(userHomeDir + "/tmpSymlink") + requestDto := dto.ReadFilesRequest{ + SourcePath: tmpSymlinkPath, + } err := infraHelper.CreateSymlink( downloadsDirPath.String(), tmpSymlinkPath.String(), false, @@ -40,11 +52,11 @@ func TestFilesQueryRepo(t *testing.T) { t.Errorf("ExpectedNoErrorButGot: %s", err.Error()) } - files, err := filesQueryRepo.Read(tmpSymlinkPath) + responseDto, err := filesQueryRepo.Read(requestDto) if err != nil { t.Errorf("ExpectedNoErrorButGot: %s", err.Error()) } - if len(files) == 0 { + if len(responseDto.Files) == 0 { t.Errorf("ExpectedNonEmptyFilesButGotEmpty") } diff --git a/src/infra/helper/createSelfSignedSsl.go b/src/infra/helper/createSelfSignedSsl.go index 1da92f32e..0004fc9f8 100644 --- a/src/infra/helper/createSelfSignedSsl.go +++ b/src/infra/helper/createSelfSignedSsl.go @@ -6,15 +6,17 @@ import ( "strconv" "strings" "text/template" + + "github.com/goinfinite/os/src/domain/valueObject" ) func altNamesConfFactory( - vhostName string, - aliasesHostname []string, + vhostHostname valueObject.Fqdn, + aliasesHostname []valueObject.Fqdn, ) []string { - altNames := []string{vhostName, "www." + vhostName} + altNames := []string{vhostHostname.String(), "www." + vhostHostname.String()} for _, aliasHostname := range aliasesHostname { - altNames = append(altNames, aliasHostname, "www."+aliasHostname) + altNames = append(altNames, aliasHostname.String(), "www."+aliasHostname.String()) } altNamesConfList := []string{} @@ -29,13 +31,13 @@ func altNamesConfFactory( } func selfSignedConfFileFactory( - vhostName string, - aliasesHostname []string, + vhostHostname valueObject.Fqdn, + aliasesHostname []valueObject.Fqdn, ) (string, error) { - altNamesConf := altNamesConfFactory(vhostName, aliasesHostname) + altNamesConf := altNamesConfFactory(vhostHostname, aliasesHostname) valuesToInterpolate := map[string]interface{}{ - "VhostName": vhostName, - "AltNamesConf": altNamesConf, + "VirtualHostHostname": vhostHostname, + "AltNamesConf": altNamesConf, } confFileTemplate := `[ req ] @@ -48,7 +50,7 @@ prompt = no C = US ST = California L = Los Angeles -CN = {{ .VhostName }} +CN = {{ .VirtualHostHostname }} [ v3_req ] subjectAltName = @alt_names @@ -59,18 +61,13 @@ subjectAltName = @alt_names {{- end }} ` - confFileTemplatePtr, err := template. - New("selfSignedConfFile"). - Parse(confFileTemplate) + confFileTemplatePtr, err := template.New("selfSignedConfFile").Parse(confFileTemplate) if err != nil { return "", errors.New("TemplateParsingError: " + err.Error()) } var confFileContent strings.Builder - err = confFileTemplatePtr.Execute( - &confFileContent, - valuesToInterpolate, - ) + err = confFileTemplatePtr.Execute(&confFileContent, valuesToInterpolate) if err != nil { return "", errors.New("TemplateExecutionError: " + err.Error()) } @@ -79,39 +76,36 @@ subjectAltName = @alt_names } func CreateSelfSignedSsl( - dirPath string, - vhostName string, - aliasesHostname []string, + dirPath valueObject.UnixFilePath, + vhostHostname valueObject.Fqdn, + aliasesHostname []valueObject.Fqdn, ) error { - confContent, err := selfSignedConfFileFactory(vhostName, aliasesHostname) + confContent, err := selfSignedConfFileFactory(vhostHostname, aliasesHostname) if err != nil { - return errors.New("GenerateSelfSignedConfFileError: " + err.Error()) + return errors.New("SelfSignedConfFactoryError: " + err.Error()) } - confTempFilePath := "/tmp/" + vhostName + "_selfSignedSsl.conf" + vhostHostnameStr := vhostHostname.String() + confTempFilePath := "/tmp/" + vhostHostnameStr + "_selfSignedSsl.conf" shouldOverwrite := true err = UpdateFile(confTempFilePath, confContent, shouldOverwrite) if err != nil { - return errors.New("GenerateSelfSignedConfFileError: " + err.Error()) + return errors.New("UpdateSelfSignedConfFileError: " + err.Error()) } - vhostCertKeyFilePath := dirPath + "/" + vhostName + ".key" - vhostCertFilePath := dirPath + "/" + vhostName + ".crt" - - _, err = RunCmdWithSubShell( - "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout " + - vhostCertKeyFilePath + " -out " + vhostCertFilePath + " -config " + confTempFilePath, - ) - if err != nil { - return errors.New( - "CreateSelfSignedSslFailed (" + vhostName + "): " + err.Error(), - ) - } + dirPathStr := dirPath.String() + vhostCertKeyFilePath := dirPathStr + "/" + vhostHostnameStr + ".key" + vhostCertFilePath := dirPathStr + "/" + vhostHostnameStr + ".crt" - err = os.Remove(confTempFilePath) + createSslCmd := "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout " + + vhostCertKeyFilePath + " -out " + vhostCertFilePath + " -config " + confTempFilePath + _, err = RunCmd(RunCmdSettings{ + Command: createSslCmd, + ShouldRunWithSubShell: true, + }) if err != nil { - return errors.New("DeleteSelfSignedConfFileError: " + err.Error()) + return errors.New("CreateSelfSignedSslCmdFailed: " + err.Error()) } - return nil + return os.Remove(confTempFilePath) } diff --git a/src/infra/helper/dnsLookup.go b/src/infra/helper/dnsLookup.go index 54a581632..4fe62d896 100644 --- a/src/infra/helper/dnsLookup.go +++ b/src/infra/helper/dnsLookup.go @@ -10,11 +10,17 @@ func DnsLookup(recordName string, recordType *string) ([]string, error) { recordTypeStr = *recordType } - digCmd := "dig +short " + recordTypeStr + " " + recordName + digCmd := "dig +short +time=5 +tries=2 " + recordTypeStr + " " + recordName - rawRecords, err := RunCmdWithSubShell(digCmd + " @dns.google") + rawRecords, err := RunCmd(RunCmdSettings{ + Command: digCmd + " @dns.google", + ShouldRunWithSubShell: true, + }) if err != nil || rawRecords == "" { - rawRecords, err = RunCmdWithSubShell(digCmd + " @security-filter-dns.cleanbrowsing.org") + rawRecords, err = RunCmd(RunCmdSettings{ + Command: digCmd + " @security-filter-dns.cleanbrowsing.org", + ShouldRunWithSubShell: true, + }) if err != nil { return resourceRecords, err } diff --git a/src/infra/helper/downloadFile.go b/src/infra/helper/downloadFile.go index 9a5dedb82..31436f3ab 100644 --- a/src/infra/helper/downloadFile.go +++ b/src/infra/helper/downloadFile.go @@ -6,15 +6,10 @@ import ( ) func DownloadFile(url string, filePath string) error { - _, err := RunCmd( - "wget", - "-q", - "--no-check-certificate", - "-O", - filePath, - url, - ) - + _, err := RunCmd(RunCmdSettings{ + Command: "wget", + Args: []string{"-q", "--no-check-certificate", "-O", filePath, url}, + }) if err != nil { log.Printf("DownloadFileError: %s", err) return errors.New("DownloadFileError") diff --git a/src/infra/helper/dummyValueGenerator.go b/src/infra/helper/dummyValueGenerator.go deleted file mode 100644 index ba92b01dd..000000000 --- a/src/infra/helper/dummyValueGenerator.go +++ /dev/null @@ -1,101 +0,0 @@ -package infraHelper - -import ( - "math/rand" - "strings" -) - -type DummyValueGenerator struct { - generatedUsername string -} - -func (helper *DummyValueGenerator) oneCharCharsetGuarantor( - originalString []byte, - charset string, -) []byte { - if strings.ContainsAny(string(originalString), charset) { - return originalString - } - - randomStringIndex := rand.Intn(len(originalString)) - isFirstChar := randomStringIndex == 0 - if isFirstChar { - randomStringIndex++ - } - isLastChar := randomStringIndex == len(originalString)-1 - if isLastChar { - randomStringIndex-- - } - if randomStringIndex >= len(originalString) { - randomStringIndex = len(originalString) - 1 - } - - randomCharsetIndex := rand.Intn(len(charset)) - originalString[randomStringIndex] = charset[randomCharsetIndex] - - return originalString -} - -func (helper *DummyValueGenerator) GenPass(length int) string { - lowercaseAlphabetCharset := "abcdefghijklmnopqrstuvwxyz" - uppercaseAlphabetCharset := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - numericCharset := "0123456789" - alphanumericCharset := lowercaseAlphabetCharset + uppercaseAlphabetCharset + numericCharset - symbolCharset := "!@#$%^&*()_+" - - pass := make([]byte, length) - previousCharset := alphanumericCharset - currentCharset := alphanumericCharset - - for i := 0; i < length; i++ { - currentCharset = alphanumericCharset - - if previousCharset != symbolCharset { - nextCharsetShouldUseSymbol := rand.Float32() < 0.1 - isTipChar := i == 0 || i == length-1 - if nextCharsetShouldUseSymbol && !isTipChar { - currentCharset = symbolCharset - } - } - currentCharsetLen := len(currentCharset) - - randomCharsetIndex := rand.Intn(currentCharsetLen) - pass[i] = currentCharset[randomCharsetIndex] - previousCharset = currentCharset - } - - if length > 4 { - pass = helper.oneCharCharsetGuarantor(pass, lowercaseAlphabetCharset) - pass = helper.oneCharCharsetGuarantor(pass, uppercaseAlphabetCharset) - pass = helper.oneCharCharsetGuarantor(pass, numericCharset) - pass = helper.oneCharCharsetGuarantor(pass, "!@#$%^&*()_+") - } - - return string(pass) -} - -func (helper *DummyValueGenerator) GenUsername() string { - dummyUsernames := []string{ - "yoda", "obi_wan", "anakin", "luke", "leia", "rey", "kylo", - } - helper.generatedUsername = dummyUsernames[rand.Intn(len(dummyUsernames))] - - return helper.generatedUsername -} - -func (helper *DummyValueGenerator) GenMailAddress(mailUsername *string) string { - dummyMailAddressDomains := []string{ - "@republic.gov", "@senate.gov", "@empire.gov", - } - randomMailAddressDomain := dummyMailAddressDomains[rand.Intn(len(dummyMailAddressDomains))] - - if mailUsername == nil { - if helper.generatedUsername == "" { - helper.GenUsername() - } - - mailUsername = &helper.generatedUsername - } - - return *mailUsername + randomMailAddressDomain -} diff --git a/src/infra/helper/encryptDecryptStr.go b/src/infra/helper/encryptDecryptStr.go index 028276d90..12d2f1edf 100644 --- a/src/infra/helper/encryptDecryptStr.go +++ b/src/infra/helper/encryptDecryptStr.go @@ -15,13 +15,13 @@ func EncryptStr( ) (encryptedText string, err error) { secretKeyBytes, err := base64.RawURLEncoding.DecodeString(secretKey) if err != nil { - slog.Error("EncryptSecretKeyError", slog.Any("error", err)) + slog.Error("EncryptSecretKeyError", slog.String("err", err.Error())) return encryptedText, errors.New("EncryptSecretKeyError") } block, err := aes.NewCipher(secretKeyBytes) if err != nil { - slog.Error("EncryptCipherError", slog.Any("error", err)) + slog.Error("EncryptCipherError", slog.String("err", err.Error())) return encryptedText, errors.New("EncryptCipherError") } @@ -29,7 +29,7 @@ func EncryptStr( cipherText := make([]byte, aes.BlockSize+len(plainTextBytes)) iv := cipherText[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { - slog.Error("EncryptIvGenerationError", slog.Any("error", err)) + slog.Error("EncryptIvGenerationError", slog.String("err", err.Error())) return encryptedText, errors.New("EncryptIvGenerationError") } @@ -44,7 +44,7 @@ func DecryptStr( ) (decryptedText string, err error) { apiKeyDecoded, err := base64.StdEncoding.DecodeString(encryptedText) if err != nil { - slog.Error("DecryptDecodingError", slog.Any("error", err)) + slog.Error("DecryptDecodingError", slog.String("err", err.Error())) return decryptedText, errors.New("DecryptDecodingError") } if len(apiKeyDecoded) < aes.BlockSize { @@ -53,13 +53,13 @@ func DecryptStr( secretKeyBytes, err := base64.RawURLEncoding.DecodeString(secretKey) if err != nil { - slog.Error("DecryptSecretDecodingError", slog.Any("error", err)) + slog.Error("DecryptSecretDecodingError", slog.String("err", err.Error())) return decryptedText, errors.New("DecryptSecretDecodingError") } block, err := aes.NewCipher(secretKeyBytes) if err != nil { - slog.Error("DecryptCipherError", slog.Any("error", err)) + slog.Error("DecryptCipherError", slog.String("err", err.Error())) return decryptedText, errors.New("DecryptCipherError") } diff --git a/src/infra/helper/fileSerializedDataToMap.go b/src/infra/helper/fileSerializedDataToMap.go deleted file mode 100644 index 94bac2288..000000000 --- a/src/infra/helper/fileSerializedDataToMap.go +++ /dev/null @@ -1,43 +0,0 @@ -package infraHelper - -import ( - "encoding/json" - "os" - - "github.com/goinfinite/os/src/domain/valueObject" - "gopkg.in/yaml.v3" -) - -func FileSerializedDataToMap( - filePath valueObject.UnixFilePath, -) (outputMap map[string]interface{}, err error) { - fileHandler, err := os.Open(filePath.String()) - if err != nil { - return outputMap, err - } - defer fileHandler.Close() - - itemFileExt, err := filePath.GetFileExtension() - if err != nil { - return outputMap, err - } - - isYamlFile := itemFileExt == "yml" || itemFileExt == "yaml" - if isYamlFile { - itemYamlDecoder := yaml.NewDecoder(fileHandler) - err = itemYamlDecoder.Decode(&outputMap) - if err != nil { - return outputMap, err - } - - return outputMap, nil - } - - itemJsonDecoder := json.NewDecoder(fileHandler) - err = itemJsonDecoder.Decode(&outputMap) - if err != nil { - return outputMap, err - } - - return outputMap, nil -} diff --git a/src/infra/helper/getPrimaryVirtualHost.go b/src/infra/helper/getPrimaryVirtualHost.go index a85765088..b8e0966e4 100644 --- a/src/infra/helper/getPrimaryVirtualHost.go +++ b/src/infra/helper/getPrimaryVirtualHost.go @@ -6,17 +6,19 @@ import ( "github.com/goinfinite/os/src/domain/valueObject" ) -func GetPrimaryVirtualHost() (valueObject.Fqdn, error) { - var primaryVhost valueObject.Fqdn +func ReadPrimaryVirtualHostHostname() (primaryHostname valueObject.Fqdn, err error) { + rawPrimaryHost := os.Getenv("PRIMARY_VHOST") + if rawPrimaryHost != "" { + return valueObject.NewFqdn(rawPrimaryHost) + } - primaryVhostStr := os.Getenv("PRIMARY_VHOST") - if primaryVhostStr == "" { - var err error - primaryVhostStr, err = RunCmd("hostname", "-f") - if err != nil { - return primaryVhost, err - } + rawPrimaryHost, err = RunCmd(RunCmdSettings{ + Command: "hostname", + Args: []string{"-f"}, + }) + if err != nil { + return primaryHostname, err } - return valueObject.NewFqdn(primaryVhostStr) + return valueObject.NewFqdn(rawPrimaryHost) } diff --git a/src/infra/helper/installPkgs.go b/src/infra/helper/installPkgs.go index a8c68aa2b..a388acc09 100644 --- a/src/infra/helper/installPkgs.go +++ b/src/infra/helper/installPkgs.go @@ -7,7 +7,10 @@ import ( ) func InstallPkgs(packages []string) error { - _, err := RunCmd("apt-get", "update", "-qq") + _, err := RunCmd(RunCmdSettings{ + Command: "apt-get", + Args: []string{"update", "-qq"}, + }) if err != nil { return errors.New("UpdateRepositoriesFailed") } @@ -20,7 +23,10 @@ func InstallPkgs(packages []string) error { var installErr error nAttempts := 3 for i := 0; i < nAttempts; i++ { - _, err := RunCmd("apt-get", installPackages...) + _, err := RunCmd(RunCmdSettings{ + Command: "apt-get", + Args: installPackages, + }) if err == nil { break } diff --git a/src/infra/helper/isPrimaryVirtualHost.go b/src/infra/helper/isPrimaryVirtualHost.go index 5b784f0e7..d5f62c17f 100644 --- a/src/infra/helper/isPrimaryVirtualHost.go +++ b/src/infra/helper/isPrimaryVirtualHost.go @@ -3,7 +3,7 @@ package infraHelper import "github.com/goinfinite/os/src/domain/valueObject" func IsPrimaryVirtualHost(vhost valueObject.Fqdn) bool { - primaryVhost, err := GetPrimaryVirtualHost() + primaryVhost, err := ReadPrimaryVirtualHostHostname() if err != nil { return false } diff --git a/src/infra/helper/primaryIndexFile.go b/src/infra/helper/primaryIndexFile.go new file mode 100644 index 000000000..149a3db1c --- /dev/null +++ b/src/infra/helper/primaryIndexFile.go @@ -0,0 +1,69 @@ +package infraHelper + +import ( + "errors" + "os" + + infraEnvs "github.com/goinfinite/os/src/infra/envs" +) + +var ( + IndexFileTemplatePath string = infraEnvs.VirtualHostsConfDir + "/index.html" + IndexFilePath string = infraEnvs.PrimaryPublicDir + "/index.html" + IndexFileBackupPath string = infraEnvs.PrimaryPublicDir + "/../index.html.backup" +) + +func BackupPrimaryIndexFile() error { + if !FileExists(IndexFilePath) { + return nil + } + + if FileExists(IndexFileBackupPath) { + err := os.Remove(IndexFileBackupPath) + if err != nil { + return errors.New("RemoveIndexBackupFileError: " + err.Error()) + } + } + + err := os.Rename(IndexFilePath, IndexFileBackupPath) + if err != nil { + return errors.New("MoveIndexFileError: " + err.Error()) + } + + err = UpdateOwnershipForWebServerUse(IndexFileBackupPath, false, false) + if err != nil { + return errors.New("UpdateOwnershipForWebServerUseError: " + err.Error()) + } + + return nil +} + +func RestorePrimaryIndexFile() error { + if FileExists(IndexFilePath) { + return nil + } + + restorableIndexFilePath := IndexFileTemplatePath + if FileExists(IndexFileBackupPath) { + restorableIndexFilePath = IndexFileBackupPath + } + + err := CopyFile(restorableIndexFilePath, IndexFilePath) + if err != nil { + return errors.New("CopyIndexFileError: " + err.Error()) + } + + err = UpdateOwnershipForWebServerUse(IndexFilePath, false, false) + if err != nil { + return errors.New("UpdateOwnershipForWebServerUseError: " + err.Error()) + } + + if FileExists(IndexFileBackupPath) { + err = os.Remove(IndexFileBackupPath) + if err != nil { + return errors.New("RemoveIndexBackupFileError: " + err.Error()) + } + } + + return nil +} diff --git a/src/infra/helper/getFileContent.go b/src/infra/helper/readFileContent.go similarity index 71% rename from src/infra/helper/getFileContent.go rename to src/infra/helper/readFileContent.go index 08cf1f28d..301bdcde8 100644 --- a/src/infra/helper/getFileContent.go +++ b/src/infra/helper/readFileContent.go @@ -5,7 +5,7 @@ import ( "os" ) -func GetFileContent(filePath string) (string, error) { +func ReadFileContent(filePath string) (string, error) { _, err := os.Stat(filePath) if err != nil { return "", errors.New("FailedToGetFileInfo: " + err.Error()) @@ -13,7 +13,7 @@ func GetFileContent(filePath string) (string, error) { fileContentBytes, err := os.ReadFile(filePath) if err != nil { - return "", errors.New("FailedToGetFileContent: " + err.Error()) + return "", errors.New("FailedToReadFileContent: " + err.Error()) } fileContentStr := string(fileContentBytes) diff --git a/src/infra/helper/readServerPublicIpAddress.go b/src/infra/helper/readServerPublicIpAddress.go index 294eeee2a..d01304da2 100644 --- a/src/infra/helper/readServerPublicIpAddress.go +++ b/src/infra/helper/readServerPublicIpAddress.go @@ -9,13 +9,15 @@ import ( func ReadServerPublicIpAddress() (ipAddress valueObject.IpAddress, err error) { digCmd := "dig +short TXT" - rawRecord, err := RunCmdWithSubShell( - digCmd + " o-o.myaddr.l.google.com @ns1.google.com", - ) + rawRecord, err := RunCmd(RunCmdSettings{ + Command: digCmd + " o-o.myaddr.l.google.com @ns1.google.com", + ShouldRunWithSubShell: true, + }) if err != nil || rawRecord == "" { - rawRecord, err = RunCmdWithSubShell( - digCmd + "CH whoami.cloudflare @1.1.1.1", - ) + rawRecord, err = RunCmd(RunCmdSettings{ + Command: digCmd + " CH whoami.cloudflare @1.1.1.1", + ShouldRunWithSubShell: true, + }) if err != nil { return ipAddress, err } diff --git a/src/infra/helper/reloadWebServer.go b/src/infra/helper/reloadWebServer.go index 5956fad43..1db9d254a 100644 --- a/src/infra/helper/reloadWebServer.go +++ b/src/infra/helper/reloadWebServer.go @@ -7,7 +7,10 @@ import ( ) func ReloadWebServer() error { - wsConfigTestResult, err := RunCmd("/usr/sbin/nginx", "-t") + wsConfigTestResult, err := RunCmd(RunCmdSettings{ + Command: "/usr/sbin/nginx", + Args: []string{"-t"}, + }) if err != nil { if wsConfigTestResult != "" { return errors.New("NginxConfigTestFailed: " + err.Error()) @@ -18,7 +21,10 @@ func ReloadWebServer() error { } } - _, err = RunCmd("/usr/sbin/nginx", "-s", "reload", "-c", "/etc/nginx/nginx.conf") + _, err = RunCmd(RunCmdSettings{ + Command: "/usr/sbin/nginx", + Args: []string{"-s", "reload", "-c", "/etc/nginx/nginx.conf"}, + }) if err != nil { return errors.New("NginxReloadFailed: " + err.Error()) } diff --git a/src/infra/helper/runCmd.go b/src/infra/helper/runCmd.go index 929575be3..b9b7fd8c9 100644 --- a/src/infra/helper/runCmd.go +++ b/src/infra/helper/runCmd.go @@ -4,41 +4,88 @@ import ( "bytes" "encoding/json" "os/exec" + "slices" + "strconv" "strings" ) -type CommandError struct { +const commandDeadlineExceededError string = "CommandDeadlineExceeded" + +func IsRunCmdTimeout(err error) bool { + return strings.Contains(err.Error(), commandDeadlineExceededError) +} + +type CmdError struct { StdErr string `json:"stdErr"` ExitCode int `json:"exitCode"` } -func (e *CommandError) Error() string { +func (e *CmdError) Error() string { jsonError, _ := json.Marshal(e) return string(jsonError) } -func RunCmd(command string, args ...string) (string, error) { - var stdout, stderr bytes.Buffer - cmdObj := exec.Command(command, args...) - cmdObj.Stdout = &stdout - cmdObj.Stderr = &stderr - cmdObj.Env = append(cmdObj.Environ(), "DEBIAN_FRONTEND=noninteractive") +type RunCmdSettings struct { + Command string + Args []string + ShouldRunWithSubShell bool + ExecutionTimeoutSecs uint64 +} + +func prepareCmdExecutor( + runConfigs RunCmdSettings, +) (*exec.Cmd, *bytes.Buffer, *bytes.Buffer) { + args := runConfigs.Args + command := runConfigs.Command + if runConfigs.ShouldRunWithSubShell { + args = []string{ + "-c", "source /etc/profile; " + command + " " + strings.Join(args, " "), + } + command = "bash" + } + + executionTimeoutSecs := uint64(1800) + if runConfigs.ExecutionTimeoutSecs > 0 && runConfigs.ExecutionTimeoutSecs <= executionTimeoutSecs { + executionTimeoutSecs = runConfigs.ExecutionTimeoutSecs + } + + args = slices.Concat( + []string{strconv.FormatUint(runConfigs.ExecutionTimeoutSecs, 10), command}, + args, + ) + command = "timeout" + + cmdExecutor := exec.Command(command, args...) + + var stdoutBytesBuffer, stderrBytesBuffer bytes.Buffer + cmdExecutor.Stdout = &stdoutBytesBuffer + cmdExecutor.Stderr = &stderrBytesBuffer + + cmdExecutor.Env = append(cmdExecutor.Environ(), "DEBIAN_FRONTEND=noninteractive") + + return cmdExecutor, &stdoutBytesBuffer, &stderrBytesBuffer +} + +func RunCmd(runConfigs RunCmdSettings) (string, error) { + cmdExecutor, stdoutBytesBuffer, stderrBytesBuffer := prepareCmdExecutor(runConfigs) + + err := cmdExecutor.Run() + stdoutStr := strings.TrimSpace(stdoutBytesBuffer.String()) - err := cmdObj.Run() - stdOut := strings.TrimSpace(stdout.String()) if err != nil { - if exitErr, ok := err.(*exec.ExitError); ok { - return stdOut, &CommandError{ - StdErr: stderr.String(), + if exitErr, assertOk := err.(*exec.ExitError); assertOk { + stdErrStr := stderrBytesBuffer.String() + if exitErr.ExitCode() == 124 { + stdErrStr = commandDeadlineExceededError + } + + return stdoutStr, &CmdError{ + StdErr: stdErrStr, ExitCode: exitErr.ExitCode(), } } - return stdOut, err + return stdoutStr, err } - return stdOut, nil -} - -func RunCmdWithSubShell(command string) (string, error) { - return RunCmd("bash", "-c", "source /etc/profile; "+command) + return stdoutStr, nil } diff --git a/src/infra/helper/shellEscape.go b/src/infra/helper/shellEscape.go new file mode 100644 index 000000000..d499f8514 --- /dev/null +++ b/src/infra/helper/shellEscape.go @@ -0,0 +1,33 @@ +package infraHelper + +import ( + "regexp" + "strings" + "unicode" +) + +type ShellEscape struct { +} + +func (helper ShellEscape) Quote(inputStr string) string { + if len(inputStr) == 0 { + return "''" + } + + escapableCharsRegex := regexp.MustCompile(`[^\w@%+=:,./-]`) + if !escapableCharsRegex.MatchString(inputStr) { + return inputStr + } + + return "'" + strings.ReplaceAll(inputStr, "'", "'\"'\"'") + "'" +} + +func (helper ShellEscape) StripUnsafe(inputStr string) string { + return strings.Map(func(r rune) rune { + if unicode.IsPrint(r) { + return r + } + + return -1 + }, inputStr) +} diff --git a/src/infra/helper/updatePermissionsForWebServerUse.go b/src/infra/helper/updateOwnershipForWebServerUse.go similarity index 76% rename from src/infra/helper/updatePermissionsForWebServerUse.go rename to src/infra/helper/updateOwnershipForWebServerUse.go index 1720d816c..a9723cb5b 100644 --- a/src/infra/helper/updatePermissionsForWebServerUse.go +++ b/src/infra/helper/updateOwnershipForWebServerUse.go @@ -2,7 +2,7 @@ package infraHelper import "strings" -func UpdatePermissionsForWebServerUse( +func UpdateOwnershipForWebServerUse( filePath string, isRecursive bool, shouldIncludeSymlink bool, ) error { flags := []string{} @@ -23,7 +23,10 @@ func UpdatePermissionsForWebServerUse( params = append(params, filePath) paramsStr := strings.Join(params, " ") - _, err := RunCmdWithSubShell("chown " + flagsStr + " " + paramsStr) + _, err := RunCmd(RunCmdSettings{ + Command: "chown " + flagsStr + " " + paramsStr, + ShouldRunWithSubShell: true, + }) if err != nil { return err } diff --git a/src/infra/helper/validateWebServerConfig.go b/src/infra/helper/validateWebServerConfig.go index a54ade98d..a610003df 100644 --- a/src/infra/helper/validateWebServerConfig.go +++ b/src/infra/helper/validateWebServerConfig.go @@ -3,7 +3,10 @@ package infraHelper import "errors" func ValidateWebServerConfig() error { - _, err := RunCmdWithSubShell("nginx -t") + _, err := RunCmd(RunCmdSettings{ + Command: "nginx -t", + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("WebServerConfigValidationError: " + err.Error()) } diff --git a/src/infra/internalDatabase/helper/pagination.go b/src/infra/internalDatabase/helper/pagination.go new file mode 100644 index 000000000..60f7b6157 --- /dev/null +++ b/src/infra/internalDatabase/helper/pagination.go @@ -0,0 +1,58 @@ +package dbHelper + +import ( + "errors" + "math" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/iancoleman/strcase" + "gorm.io/gorm" +) + +func PaginationQueryBuilder( + dbQuery *gorm.DB, + requestPagination dto.Pagination, +) (paginatedDbQuery *gorm.DB, responsePagination dto.Pagination, err error) { + var itemsTotal int64 + err = dbQuery.Count(&itemsTotal).Error + if err != nil { + return paginatedDbQuery, responsePagination, errors.New("CountItemsTotalError: " + err.Error()) + } + + //lint:ignore SA4006 paginatedDbQuery is used in the return statement + paginatedDbQuery = dbQuery.Limit(int(requestPagination.ItemsPerPage)) + if requestPagination.LastSeenId == nil { + offset := int(requestPagination.PageNumber) * int(requestPagination.ItemsPerPage) + paginatedDbQuery = dbQuery.Offset(offset) + } else { + paginatedDbQuery = dbQuery.Where("id > ?", requestPagination.LastSeenId.String()) + } + if requestPagination.SortBy != nil { + orderStatement := requestPagination.SortBy.String() + orderStatement = strcase.ToSnake(orderStatement) + if orderStatement == "id" { + orderStatement = "ID" + } + + if requestPagination.SortDirection != nil { + orderStatement += " " + requestPagination.SortDirection.String() + } + + paginatedDbQuery = dbQuery.Order(orderStatement) + } + + itemsTotalUint := uint64(itemsTotal) + pagesTotal := uint32( + math.Ceil(float64(itemsTotal) / float64(requestPagination.ItemsPerPage)), + ) + responsePagination = dto.Pagination{ + PageNumber: requestPagination.PageNumber, + ItemsPerPage: requestPagination.ItemsPerPage, + SortBy: requestPagination.SortBy, + SortDirection: requestPagination.SortDirection, + PagesTotal: &pagesTotal, + ItemsTotal: &itemsTotalUint, + } + + return paginatedDbQuery, responsePagination, nil +} diff --git a/src/infra/internalDatabase/model/account.go b/src/infra/internalDatabase/model/account.go index 88c3037f2..a6bbe0c78 100644 --- a/src/infra/internalDatabase/model/account.go +++ b/src/infra/internalDatabase/model/account.go @@ -9,11 +9,12 @@ import ( ) type Account struct { - ID uint64 `gorm:"primarykey"` + ID uint64 `gorm:"primaryKey"` GroupId uint64 `gorm:"not null"` Username string `gorm:"not null"` KeyHash *string HomeDirectory string `gorm:"not null"` + IsSuperAdmin bool `gorm:"not null"` SecureAccessPublicKeys []SecureAccessPublicKey CreatedAt time.Time UpdatedAt time.Time @@ -30,6 +31,7 @@ func (Account) ToModel(entity entity.Account) (model Account, err error) { Username: entity.Username.String(), KeyHash: nil, HomeDirectory: entity.HomeDirectory.String(), + IsSuperAdmin: entity.IsSuperAdmin, }, nil } @@ -68,8 +70,8 @@ func (model Account) ToEntity() (accountEntity entity.Account, err error) { } return entity.NewAccount( - accountId, groupId, username, homeDirectory, secureAccessPublicKeys, - valueObject.NewUnixTimeWithGoTime(model.CreatedAt), + accountId, groupId, username, homeDirectory, model.IsSuperAdmin, + secureAccessPublicKeys, valueObject.NewUnixTimeWithGoTime(model.CreatedAt), valueObject.NewUnixTimeWithGoTime(model.UpdatedAt), ), nil } diff --git a/src/infra/internalDatabase/model/activityRecord.go b/src/infra/internalDatabase/model/activityRecord.go index ced830724..80c09ca60 100644 --- a/src/infra/internalDatabase/model/activityRecord.go +++ b/src/infra/internalDatabase/model/activityRecord.go @@ -8,7 +8,7 @@ import ( ) type ActivityRecord struct { - ID uint64 `gorm:"primarykey"` + ID uint64 `gorm:"primaryKey"` RecordLevel string `gorm:"not null"` RecordCode string `gorm:"not null"` AffectedResources []ActivityRecordAffectedResource diff --git a/src/infra/internalDatabase/model/activityRecordAffectedResource.go b/src/infra/internalDatabase/model/activityRecordAffectedResource.go index a651d196e..63f8b9786 100644 --- a/src/infra/internalDatabase/model/activityRecordAffectedResource.go +++ b/src/infra/internalDatabase/model/activityRecordAffectedResource.go @@ -1,7 +1,7 @@ package dbModel type ActivityRecordAffectedResource struct { - ID uint64 `gorm:"primarykey"` + ID uint64 `gorm:"primaryKey"` SystemResourceIdentifier string `gorm:"not null"` ActivityRecordID uint64 `gorm:"not null"` } diff --git a/src/infra/internalDatabase/model/installedService.go b/src/infra/internalDatabase/model/installedService.go index ca177cad0..513cc0157 100644 --- a/src/infra/internalDatabase/model/installedService.go +++ b/src/infra/internalDatabase/model/installedService.go @@ -1,7 +1,7 @@ package dbModel import ( - "log" + "log/slog" "strings" "time" @@ -11,29 +11,35 @@ import ( ) type InstalledService struct { - Name string `gorm:"primarykey;not null"` - Nature string `gorm:"not null"` - Type string `gorm:"not null"` - Version string `gorm:"not null"` - StartCmd string `gorm:"not null"` - Envs *string - PortBindings *string - StopCmdSteps *string - PreStartCmdSteps *string - PostStartCmdSteps *string - PreStopCmdSteps *string - PostStopCmdSteps *string - ExecUser *string - WorkingDirectory *string - StartupFile *string - AutoStart *bool - AutoRestart *bool - TimeoutStartSecs *uint - MaxStartRetries *uint - LogOutputPath *string - LogErrorPath *string - CreatedAt time.Time `gorm:"not null"` - UpdatedAt time.Time `gorm:"not null"` + Name string `gorm:"primarykey;not null"` + Nature string `gorm:"not null"` + Type string `gorm:"not null"` + Version string `gorm:"not null"` + StartCmd string `gorm:"not null"` + Envs *string + PortBindings *string + StopTimeoutSecs int64 + StopCmdSteps *string + PreStartTimeoutSecs int64 + PreStartCmdSteps *string + PostStartTimeoutSecs int64 + PostStartCmdSteps *string + PreStopTimeoutSecs int64 + PreStopCmdSteps *string + PostStopTimeoutSecs int64 + PostStopCmdSteps *string + ExecUser *string + WorkingDirectory *string + StartupFile *string + AutoStart *bool + AutoRestart *bool + TimeoutStartSecs *uint + MaxStartRetries *uint + LogOutputPath *string + LogErrorPath *string + AvatarUrl *string + CreatedAt time.Time `gorm:"not null"` + UpdatedAt time.Time `gorm:"not null"` } func (InstalledService) TableName() string { @@ -41,40 +47,46 @@ func (InstalledService) TableName() string { } func (InstalledService) InitialEntries() (entries []interface{}, err error) { - osWorkingDirectory := "/infinite" + osApiAvatarUrl := "https://goinfinite.github.io/os-services/system/os-api/assets/avatar.jpg" + osWorkingDirectory := infraEnvs.InfiniteOsMainDir osLogOutputPath := "/dev/stdout" osLogErrorPath := "/dev/stderr" - osApiPortBindings := "1618/http" + osApiPortBindings := infraEnvs.InfiniteOsApiHttpPublicPort + "/http" osApiService := InstalledService{ Name: "os-api", - Nature: "solo", - Type: "system", + Nature: valueObject.ServiceNatureSolo.String(), + Type: valueObject.ServiceTypeSystem.String(), Version: infraEnvs.InfiniteOsVersion, StartCmd: infraEnvs.InfiniteOsBinary + " serve", PortBindings: &osApiPortBindings, WorkingDirectory: &osWorkingDirectory, LogOutputPath: &osLogOutputPath, LogErrorPath: &osLogErrorPath, + AvatarUrl: &osApiAvatarUrl, } + cronAvatarUrl := "https://goinfinite.github.io/os-services/system/cron/assets/avatar.jpg" cronService := InstalledService{ - Name: "cron", - Nature: "solo", - Type: "system", - Version: "3.0", - StartCmd: "/usr/sbin/cron -f", + Name: "cron", + Nature: valueObject.ServiceNatureSolo.String(), + Type: valueObject.ServiceTypeSystem.String(), + Version: "3.0", + StartCmd: "/usr/sbin/cron -f", + AvatarUrl: &cronAvatarUrl, } + nginxAvatarUrl := "https://goinfinite.github.io/os-services/system/nginx/assets/avatar.jpg" nginxPortBindings := "80/http;443/https" nginxAutoStart := false nginxService := InstalledService{ Name: "nginx", - Nature: "solo", - Type: "system", - Version: "1.24.0", + Nature: valueObject.ServiceNatureSolo.String(), + Type: valueObject.ServiceTypeSystem.String(), + Version: "1.26.3", StartCmd: "/usr/sbin/nginx", PortBindings: &nginxPortBindings, AutoStart: &nginxAutoStart, + AvatarUrl: &nginxAvatarUrl, } return []interface{}{osApiService, cronService, nginxService}, nil @@ -90,11 +102,15 @@ func (InstalledService) JoinCmdSteps(cmdSteps []valueObject.UnixCommand) string func (InstalledService) SplitCmdSteps(cmdStepsStr string) []valueObject.UnixCommand { rawCmdStepsList := strings.Split(cmdStepsStr, "\n") - var cmdSteps []valueObject.UnixCommand + cmdSteps := []valueObject.UnixCommand{} for stepIndex, rawCmdStep := range rawCmdStepsList { + if len(rawCmdStep) == 0 { + continue + } + cmdStep, err := valueObject.NewUnixCommand(rawCmdStep) if err != nil { - log.Printf("[index %d] %s", stepIndex, err) + slog.Debug(err.Error(), slog.Int("stepIndex", stepIndex)) continue } cmdSteps = append(cmdSteps, cmdStep) @@ -112,11 +128,15 @@ func (InstalledService) JoinEnvs(envs []valueObject.ServiceEnv) string { func (InstalledService) SplitEnvs(envsStr string) []valueObject.ServiceEnv { rawEnvsList := strings.Split(envsStr, ";") - var envs []valueObject.ServiceEnv + envs := []valueObject.ServiceEnv{} for envIndex, rawEnv := range rawEnvsList { + if len(rawEnv) == 0 { + continue + } + env, err := valueObject.NewServiceEnv(rawEnv) if err != nil { - log.Printf("[index %d] %s", envIndex, err) + slog.Debug(err.Error(), slog.Int("envIndex", envIndex)) continue } envs = append(envs, env) @@ -134,11 +154,15 @@ func (InstalledService) JoinPortBindings(portBindings []valueObject.PortBinding) func (InstalledService) SplitPortBindings(portBindingsStr string) []valueObject.PortBinding { rawPortBindingsList := strings.Split(portBindingsStr, ";") - var portBindings []valueObject.PortBinding + portBindings := []valueObject.PortBinding{} for portIndex, rawPortBinding := range rawPortBindingsList { + if len(rawPortBinding) == 0 { + continue + } + portBinding, err := valueObject.NewPortBinding(rawPortBinding) if err != nil { - log.Printf("[index %d] %s", portIndex, err) + slog.Debug(err.Error(), slog.Int("portIndex", portIndex)) continue } portBindings = append(portBindings, portBinding) @@ -148,10 +172,14 @@ func (InstalledService) SplitPortBindings(portBindingsStr string) []valueObject. func NewInstalledService( name, nature, serviceType, version, startCmd string, - envs []valueObject.ServiceEnv, portBindings []valueObject.PortBinding, + envs []valueObject.ServiceEnv, + portBindings []valueObject.PortBinding, stopSteps, preStartSteps, postStartSteps, preStopSteps, postStopSteps []valueObject.UnixCommand, - execUser, workingDirectory, startupFile *string, autoStart, autoRestart *bool, - timeoutStartSecs, maxStartRetries *uint, logOutputPath, logErrorPath *string, + execUser, workingDirectory, startupFile *string, + autoStart, autoRestart *bool, + timeoutStartSecs, maxStartRetries *uint, + logOutputPath, logErrorPath *string, + avatarUrl *string, ) InstalledService { var envsPtr *string if len(envs) > 0 { @@ -217,6 +245,7 @@ func NewInstalledService( MaxStartRetries: maxStartRetries, LogOutputPath: logOutputPath, LogErrorPath: logErrorPath, + AvatarUrl: avatarUrl, } } @@ -248,37 +277,62 @@ func (model InstalledService) ToEntity() (serviceEntity entity.InstalledService, status, _ := valueObject.NewServiceStatus("running") - var envs []valueObject.ServiceEnv + envs := []valueObject.ServiceEnv{} if model.Envs != nil { envs = model.SplitEnvs(*model.Envs) } - var portBindings []valueObject.PortBinding + portBindings := []valueObject.PortBinding{} if model.PortBindings != nil { portBindings = model.SplitPortBindings(*model.PortBindings) } - var stopCmdSteps []valueObject.UnixCommand + stopTimeoutSecs, err := valueObject.NewUnixTime(model.StopTimeoutSecs) + if err != nil { + return serviceEntity, err + } + + stopCmdSteps := []valueObject.UnixCommand{} if model.StopCmdSteps != nil { stopCmdSteps = model.SplitCmdSteps(*model.StopCmdSteps) } - var preStartCmdSteps []valueObject.UnixCommand + preStartTimeoutSecs, err := valueObject.NewUnixTime(model.PreStartTimeoutSecs) + if err != nil { + return serviceEntity, err + } + + preStartCmdSteps := []valueObject.UnixCommand{} if model.PreStartCmdSteps != nil { preStartCmdSteps = model.SplitCmdSteps(*model.PreStartCmdSteps) } - var postStartCmdSteps []valueObject.UnixCommand + postStartTimeoutSecs, err := valueObject.NewUnixTime(model.PostStartTimeoutSecs) + if err != nil { + return serviceEntity, err + } + + postStartCmdSteps := []valueObject.UnixCommand{} if model.PostStartCmdSteps != nil { postStartCmdSteps = model.SplitCmdSteps(*model.PostStartCmdSteps) } - var preStopCmdSteps []valueObject.UnixCommand + preStopTimeoutSecs, err := valueObject.NewUnixTime(model.PreStopTimeoutSecs) + if err != nil { + return serviceEntity, err + } + + preStopCmdSteps := []valueObject.UnixCommand{} if model.PreStopCmdSteps != nil { preStopCmdSteps = model.SplitCmdSteps(*model.PreStopCmdSteps) } - var postStopCmdSteps []valueObject.UnixCommand + postStopTimeoutSecs, err := valueObject.NewUnixTime(model.PostStopTimeoutSecs) + if err != nil { + return serviceEntity, err + } + + postStopCmdSteps := []valueObject.UnixCommand{} if model.PostStopCmdSteps != nil { postStopCmdSteps = model.SplitCmdSteps(*model.PostStopCmdSteps) } @@ -348,11 +402,22 @@ func (model InstalledService) ToEntity() (serviceEntity entity.InstalledService, logErrorPathPtr = &logErrorPath } + var avatarUrlPtr *valueObject.Url + if model.AvatarUrl != nil { + avatarUrl, err := valueObject.NewUrl(*model.AvatarUrl) + if err != nil { + return serviceEntity, err + } + avatarUrlPtr = &avatarUrl + } + return entity.NewInstalledService( - name, nature, serviceType, version, startCmd, status, envs, portBindings, - stopCmdSteps, preStartCmdSteps, postStartCmdSteps, preStopCmdSteps, postStopCmdSteps, - execUserPtr, workingDirectoryPtr, startupFilePtr, autoStart, autoRestart, - timeoutStartSecs, maxStartRetries, logOutputPathPtr, logErrorPathPtr, + name, nature, serviceType, version, startCmd, status, envs, + portBindings, stopTimeoutSecs, stopCmdSteps, preStartTimeoutSecs, + preStartCmdSteps, postStartTimeoutSecs, postStartCmdSteps, preStopTimeoutSecs, + preStopCmdSteps, postStopTimeoutSecs, postStopCmdSteps, execUserPtr, + workingDirectoryPtr, startupFilePtr, autoStart, autoRestart, timeoutStartSecs, + maxStartRetries, logOutputPathPtr, logErrorPathPtr, avatarUrlPtr, valueObject.NewUnixTimeWithGoTime(model.CreatedAt), valueObject.NewUnixTimeWithGoTime(model.UpdatedAt), ), nil diff --git a/src/infra/internalDatabase/model/mapping.go b/src/infra/internalDatabase/model/mapping.go index 7048ae518..e68b0c148 100644 --- a/src/infra/internalDatabase/model/mapping.go +++ b/src/infra/internalDatabase/model/mapping.go @@ -8,85 +8,58 @@ import ( ) type Mapping struct { - ID uint `gorm:"primarykey"` - Hostname string `gorm:"not null"` - Path string `gorm:"not null"` - MatchPattern string `gorm:"not null"` - TargetType string `gorm:"not null"` - TargetValue *string - TargetHttpResponseCode *string - VirtualHostHostname string `gorm:"not null"` - MarketplaceInstalledItemId *uint - CreatedAt time.Time `gorm:"not null"` - UpdatedAt time.Time `gorm:"not null"` + ID uint64 `gorm:"primaryKey"` + Hostname string `gorm:"not null"` + Path string `gorm:"not null"` + MatchPattern string `gorm:"not null"` + TargetType string `gorm:"not null"` + TargetValue *string + TargetHttpResponseCode *string + ShouldUpgradeInsecureRequests *bool + MarketplaceInstalledItemID *uint + MarketplaceInstalledItemName *string + MappingSecurityRuleID *uint64 + CreatedAt time.Time `gorm:"not null"` + UpdatedAt time.Time `gorm:"not null"` } func (Mapping) TableName() string { return "mappings" } -func NewMapping( - id uint, - hostname string, - path string, - matchPattern string, - targetType string, - targetValue *string, - targetHttpResponseCode *string, - vhostName string, -) Mapping { - mappingModel := Mapping{ - Hostname: hostname, - Path: path, - MatchPattern: matchPattern, - TargetType: targetType, - TargetValue: targetValue, - TargetHttpResponseCode: targetHttpResponseCode, - VirtualHostHostname: vhostName, - } - - if id != 0 { - mappingModel.ID = id - } - - return mappingModel -} - -func (model Mapping) ToEntity() (entity.Mapping, error) { - var mapping entity.Mapping - +func (model Mapping) ToEntity() (mappingEntity entity.Mapping, err error) { mappingId, err := valueObject.NewMappingId(model.ID) if err != nil { - return mapping, err + return mappingEntity, err } hostname, err := valueObject.NewFqdn(model.Hostname) if err != nil { - return mapping, err + return mappingEntity, err } path, err := valueObject.NewMappingPath(model.Path) if err != nil { - return mapping, err + return mappingEntity, err } matchPattern, err := valueObject.NewMappingMatchPattern(model.MatchPattern) if err != nil { - return mapping, err + return mappingEntity, err } targetType, err := valueObject.NewMappingTargetType(model.TargetType) if err != nil { - return mapping, err + return mappingEntity, err } var targetValuePtr *valueObject.MappingTargetValue - if model.TargetValue != nil { + if model.TargetValue != nil && targetType != valueObject.MappingTargetTypeResponseCode { targetValue, err := valueObject.NewMappingTargetValue( *model.TargetValue, targetType, ) if err != nil { - return mapping, err + return mappingEntity, err } targetValuePtr = &targetValue } @@ -97,43 +70,49 @@ func (model Mapping) ToEntity() (entity.Mapping, error) { *model.TargetHttpResponseCode, ) if err != nil { - return mapping, err + return mappingEntity, err } targetHttpResponseCodePtr = &targetHttpResponseCode } - return entity.NewMapping( - mappingId, - hostname, - path, - matchPattern, - targetType, - targetValuePtr, - targetHttpResponseCodePtr, - ), nil -} + var marketplaceInstalledItemIdPtr *valueObject.MarketplaceItemId + if model.MarketplaceInstalledItemID != nil { + marketplaceInstalledItemId, err := valueObject.NewMarketplaceItemId( + *model.MarketplaceInstalledItemID, + ) + if err != nil { + return mappingEntity, err + } + marketplaceInstalledItemIdPtr = &marketplaceInstalledItemId + } -func (Mapping) ToModel(mappingEntity entity.Mapping) Mapping { - var targetValuePtr *string - if mappingEntity.TargetValue != nil { - targetValueStr := mappingEntity.TargetValue.String() - targetValuePtr = &targetValueStr + var marketplaceInstalledItemNamePtr *valueObject.MarketplaceItemName + if model.MarketplaceInstalledItemName != nil { + marketplaceInstalledItemName, err := valueObject.NewMarketplaceItemName( + *model.MarketplaceInstalledItemName, + ) + if err != nil { + return mappingEntity, err + } + marketplaceInstalledItemNamePtr = &marketplaceInstalledItemName } - var targetHttpResponseCodePtr *string - if mappingEntity.TargetHttpResponseCode != nil { - targetHttpResponseCodeStr := mappingEntity.TargetHttpResponseCode.String() - targetHttpResponseCodePtr = &targetHttpResponseCodeStr + var mappingSecurityRuleIdPtr *valueObject.MappingSecurityRuleId + if model.MappingSecurityRuleID != nil { + mappingSecurityRuleId, err := valueObject.NewMappingSecurityRuleId( + *model.MappingSecurityRuleID, + ) + if err != nil { + return mappingEntity, err + } + mappingSecurityRuleIdPtr = &mappingSecurityRuleId } - return NewMapping( - uint(mappingEntity.Id), - mappingEntity.Hostname.String(), - mappingEntity.Path.String(), - mappingEntity.MatchPattern.String(), - mappingEntity.TargetType.String(), - targetValuePtr, - targetHttpResponseCodePtr, - "", - ) + return entity.NewMapping( + mappingId, hostname, path, matchPattern, targetType, targetValuePtr, + targetHttpResponseCodePtr, model.ShouldUpgradeInsecureRequests, + marketplaceInstalledItemIdPtr, marketplaceInstalledItemNamePtr, + mappingSecurityRuleIdPtr, valueObject.NewUnixTimeWithGoTime(model.CreatedAt), + valueObject.NewUnixTimeWithGoTime(model.UpdatedAt), + ), nil } diff --git a/src/infra/internalDatabase/model/mappingSecurityRule.go b/src/infra/internalDatabase/model/mappingSecurityRule.go new file mode 100644 index 000000000..ae2ca2a51 --- /dev/null +++ b/src/infra/internalDatabase/model/mappingSecurityRule.go @@ -0,0 +1,150 @@ +package dbModel + +import ( + "log/slog" + "time" + + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" + tkValueObject "github.com/goinfinite/tk/src/domain/valueObject" +) + +type MappingSecurityRule struct { + ID uint64 `gorm:"primaryKey"` + Name string `gorm:"not null"` + Description *string + AllowedIps []string `gorm:"serializer:json"` + BlockedIps []string `gorm:"serializer:json"` + RpsSoftLimitPerIp *uint + RpsHardLimitPerIp *uint + ResponseCodeOnMaxRequests *uint + MaxConnectionsPerIp *uint + BandwidthBpsLimitPerConnection *uint64 + BandwidthLimitOnlyAfterBytes *uint64 + ResponseCodeOnMaxConnections *uint + CreatedAt time.Time `gorm:"not null"` + UpdatedAt time.Time `gorm:"not null"` +} + +func (MappingSecurityRule) TableName() string { + return "mapping_security_rules" +} + +func (MappingSecurityRule) InitialEntries() (initialEntries []interface{}, err error) { + for _, initialPreset := range entity.MappingSecurityRuleInitialPresets() { + initialEntries = append(initialEntries, MappingSecurityRule{}.ToModel(initialPreset)) + } + + return initialEntries, nil +} + +func (MappingSecurityRule) ToModel(ruleEntity entity.MappingSecurityRule) MappingSecurityRule { + var descriptionPtr *string + if ruleEntity.Description != nil { + descriptionStr := ruleEntity.Description.String() + descriptionPtr = &descriptionStr + } + + allowedIps := []string{} + for _, ipAddress := range ruleEntity.AllowedIps { + allowedIps = append(allowedIps, ipAddress.String()) + } + + blockedIps := []string{} + for _, ipAddress := range ruleEntity.BlockedIps { + blockedIps = append(blockedIps, ipAddress.String()) + } + + var bandwidthBpsLimitPerConnectionPtr *uint64 + if ruleEntity.BandwidthBpsLimitPerConnection != nil { + perConnectionUint64 := ruleEntity.BandwidthBpsLimitPerConnection.Uint64() + bandwidthBpsLimitPerConnectionPtr = &perConnectionUint64 + } + + var bandwidthLimitOnlyAfterBytesPtr *uint64 + if ruleEntity.BandwidthLimitOnlyAfterBytes != nil { + afterBytesUint64 := ruleEntity.BandwidthLimitOnlyAfterBytes.Uint64() + bandwidthLimitOnlyAfterBytesPtr = &afterBytesUint64 + } + + return MappingSecurityRule{ + Name: ruleEntity.Name.String(), + Description: descriptionPtr, + AllowedIps: allowedIps, + BlockedIps: blockedIps, + RpsSoftLimitPerIp: ruleEntity.RpsSoftLimitPerIp, + RpsHardLimitPerIp: ruleEntity.RpsHardLimitPerIp, + ResponseCodeOnMaxRequests: ruleEntity.ResponseCodeOnMaxRequests, + MaxConnectionsPerIp: ruleEntity.MaxConnectionsPerIp, + BandwidthBpsLimitPerConnection: bandwidthBpsLimitPerConnectionPtr, + BandwidthLimitOnlyAfterBytes: bandwidthLimitOnlyAfterBytesPtr, + ResponseCodeOnMaxConnections: ruleEntity.ResponseCodeOnMaxConnections, + } +} + +func (model MappingSecurityRule) ToEntity() (ruleEntity entity.MappingSecurityRule, err error) { + id, err := valueObject.NewMappingSecurityRuleId(model.ID) + if err != nil { + return ruleEntity, err + } + + name, err := valueObject.NewMappingSecurityRuleName(model.Name) + if err != nil { + return ruleEntity, err + } + + var descriptionPtr *valueObject.MappingSecurityRuleDescription + if model.Description != nil { + description, err := valueObject.NewMappingSecurityRuleDescription(*model.Description) + if err != nil { + return ruleEntity, err + } + descriptionPtr = &description + } + + allowedIps := []tkValueObject.CidrBlock{} + for _, rawIpAddress := range model.AllowedIps { + ipAddress, err := tkValueObject.NewCidrBlock(rawIpAddress) + if err != nil { + slog.Debug(err.Error(), slog.String("rawIpAddress", rawIpAddress)) + continue + } + allowedIps = append(allowedIps, ipAddress) + } + + blockedIps := []tkValueObject.CidrBlock{} + for _, rawIpAddress := range model.BlockedIps { + ipAddress, err := tkValueObject.NewCidrBlock(rawIpAddress) + if err != nil { + slog.Debug(err.Error(), slog.String("rawIpAddress", rawIpAddress)) + continue + } + blockedIps = append(blockedIps, ipAddress) + } + + var bandwidthBpsLimitPerConnectionPtr *valueObject.Byte + if model.BandwidthBpsLimitPerConnection != nil { + bandwidthBpsLimit, err := valueObject.NewByte(*model.BandwidthBpsLimitPerConnection) + if err != nil { + return ruleEntity, err + } + bandwidthBpsLimitPerConnectionPtr = &bandwidthBpsLimit + } + + var bandwidthLimitOnlyAfterBytesPtr *valueObject.Byte + if model.BandwidthLimitOnlyAfterBytes != nil { + afterBytes, err := valueObject.NewByte(*model.BandwidthLimitOnlyAfterBytes) + if err != nil { + return ruleEntity, err + } + bandwidthLimitOnlyAfterBytesPtr = &afterBytes + } + + return entity.NewMappingSecurityRule( + id, name, descriptionPtr, allowedIps, blockedIps, model.RpsSoftLimitPerIp, + model.RpsHardLimitPerIp, model.ResponseCodeOnMaxRequests, model.MaxConnectionsPerIp, + bandwidthBpsLimitPerConnectionPtr, bandwidthLimitOnlyAfterBytesPtr, + model.ResponseCodeOnMaxConnections, valueObject.NewUnixTimeWithGoTime(model.CreatedAt), + valueObject.NewUnixTimeWithGoTime(model.UpdatedAt), + ), nil +} diff --git a/src/infra/internalDatabase/model/marketplaceInstalledItem.go b/src/infra/internalDatabase/model/marketplaceInstalledItem.go index 78cd17dfe..947543872 100644 --- a/src/infra/internalDatabase/model/marketplaceInstalledItem.go +++ b/src/infra/internalDatabase/model/marketplaceInstalledItem.go @@ -10,7 +10,7 @@ import ( ) type MarketplaceInstalledItem struct { - ID uint16 `gorm:"primarykey"` + ID uint16 `gorm:"primaryKey"` Name string `gorm:"not null"` Hostname string `gorm:"not null"` Type string `gorm:"not null"` diff --git a/src/infra/internalDatabase/model/scheduledTask.go b/src/infra/internalDatabase/model/scheduledTask.go index 6f1aaccdf..eb9ad6cb0 100644 --- a/src/infra/internalDatabase/model/scheduledTask.go +++ b/src/infra/internalDatabase/model/scheduledTask.go @@ -8,7 +8,7 @@ import ( ) type ScheduledTask struct { - ID uint64 `gorm:"primarykey"` + ID uint64 `gorm:"primaryKey"` Name string `gorm:"not null"` Status string `gorm:"not null,index"` Command string `gorm:"not null"` diff --git a/src/infra/internalDatabase/model/scheduledTaskTags.go b/src/infra/internalDatabase/model/scheduledTaskTags.go index bbfb01060..8ac4a54cc 100644 --- a/src/infra/internalDatabase/model/scheduledTaskTags.go +++ b/src/infra/internalDatabase/model/scheduledTaskTags.go @@ -1,7 +1,7 @@ package dbModel type ScheduledTaskTag struct { - ID uint64 `gorm:"primarykey"` + ID uint64 `gorm:"primaryKey"` Tag string `gorm:"not null"` ScheduledTaskID uint64 `gorm:"not null"` } diff --git a/src/infra/internalDatabase/model/secureAccessPublicKey.go b/src/infra/internalDatabase/model/secureAccessPublicKey.go index 2dc9bd662..82af9ce7f 100644 --- a/src/infra/internalDatabase/model/secureAccessPublicKey.go +++ b/src/infra/internalDatabase/model/secureAccessPublicKey.go @@ -8,7 +8,7 @@ import ( ) type SecureAccessPublicKey struct { - ID uint16 `gorm:"primarykey"` + ID uint16 `gorm:"primaryKey"` AccountID uint64 `gorm:"not null"` Name string `gorm:"not null"` Content string `gorm:"not null"` diff --git a/src/infra/internalDatabase/model/virtualHost.go b/src/infra/internalDatabase/model/virtualHost.go index 9c99fe01d..cef36840c 100644 --- a/src/infra/internalDatabase/model/virtualHost.go +++ b/src/infra/internalDatabase/model/virtualHost.go @@ -2,6 +2,7 @@ package dbModel import ( "errors" + "log/slog" "time" "github.com/goinfinite/os/src/domain/entity" @@ -11,25 +12,29 @@ import ( ) type VirtualHost struct { - Hostname string `gorm:"primarykey;not null"` - Type string `gorm:"not null"` - RootDirectory string `gorm:"not null"` - ParentHostname *string - Mappings []Mapping - CreatedAt time.Time `gorm:"not null"` - UpdatedAt time.Time `gorm:"not null"` + Hostname string `gorm:"primaryKey"` + Type string `gorm:"not null"` + RootDirectory string `gorm:"not null"` + ParentHostname *string `gorm:"index"` + IsPrimary bool `gorm:"not null;default:false"` + IsWildcard bool `gorm:"not null;default:false"` + Aliases []VirtualHost `gorm:"foreignKey:ParentHostname"` + CreatedAt time.Time `gorm:"not null"` + UpdatedAt time.Time `gorm:"not null"` } func (model VirtualHost) InitialEntries() (entries []interface{}, err error) { - primaryVhostName, err := infraHelper.GetPrimaryVirtualHost() + primaryHostname, err := infraHelper.ReadPrimaryVirtualHostHostname() if err != nil { - return entries, errors.New("GetPrimaryVirtualHostError: " + err.Error()) + return entries, errors.New("ReadPrimaryVirtualHostHostnameError: " + err.Error()) } primaryEntry := VirtualHost{ - Hostname: primaryVhostName.String(), - Type: "primary", + Hostname: primaryHostname.String(), + Type: valueObject.VirtualHostTypeTopLevel.String(), RootDirectory: infraEnvs.PrimaryPublicDir, + IsPrimary: true, + IsWildcard: false, } return []interface{}{primaryEntry}, nil @@ -60,35 +65,29 @@ func (model VirtualHost) ToEntity() (vhost entity.VirtualHost, err error) { parentHostnamePtr = &parentHostname } - return entity.NewVirtualHost( - hostname, - vhostType, - rootDir, - parentHostnamePtr, - ), nil -} - -func (VirtualHost) ToModel( - entity entity.VirtualHost, - mappings []entity.Mapping, -) VirtualHost { - var parentHostnamePtr *string - if entity.ParentHostname != nil { - parentHostnameStr := entity.ParentHostname.String() - parentHostnamePtr = &parentHostnameStr - } + aliasesHostnames := []valueObject.Fqdn{} + for _, alias := range model.Aliases { + if alias.Type != valueObject.VirtualHostTypeAlias.String() { + continue + } + if alias.Hostname == model.Hostname { + continue + } + if model.ParentHostname != nil && alias.Hostname == *model.ParentHostname { + continue + } - mappingsModel := []Mapping{} - for _, mapping := range mappings { - mappingModel := Mapping{}.ToModel(mapping) - mappingsModel = append(mappingsModel, mappingModel) + aliasHostname, err := valueObject.NewFqdn(alias.Hostname) + if err != nil { + slog.Debug("AliasHostnameError", slog.String("alias", alias.Hostname)) + continue + } + aliasesHostnames = append(aliasesHostnames, aliasHostname) } - return VirtualHost{ - Hostname: entity.Hostname.String(), - Type: entity.Type.String(), - RootDirectory: entity.RootDirectory.String(), - ParentHostname: parentHostnamePtr, - Mappings: mappingsModel, - } + return entity.NewVirtualHost( + hostname, vhostType, rootDir, parentHostnamePtr, model.IsPrimary, + model.IsWildcard, aliasesHostnames, + valueObject.NewUnixTimeWithGoTime(model.CreatedAt), + ), nil } diff --git a/src/infra/internalDatabase/persistentDatabaseService.go b/src/infra/internalDatabase/persistentDatabaseService.go index 7f977fcae..ae228d2eb 100644 --- a/src/infra/internalDatabase/persistentDatabaseService.go +++ b/src/infra/internalDatabase/persistentDatabaseService.go @@ -98,6 +98,7 @@ func (dbSvc *PersistentDatabaseService) dbMigrate() error { &dbModel.Account{}, &dbModel.InstalledService{}, &dbModel.Mapping{}, + &dbModel.MappingSecurityRule{}, &dbModel.MarketplaceInstalledItem{}, &dbModel.ScheduledTask{}, &dbModel.ScheduledTaskTag{}, @@ -109,8 +110,9 @@ func (dbSvc *PersistentDatabaseService) dbMigrate() error { } modelsWithInitialEntries := map[string]interface{}{ - "VirtualHost": &dbModel.VirtualHost{}, - "InstalledService": &dbModel.InstalledService{}, + "VirtualHost": &dbModel.VirtualHost{}, + "InstalledService": &dbModel.InstalledService{}, + "MappingSecurityRule": &dbModel.MappingSecurityRule{}, } err = dbSvc.seedDatabase(modelsWithInitialEntries) diff --git a/src/infra/internalDatabase/transientDatabaseService.go b/src/infra/internalDatabase/transientDatabaseService.go index 1ec74431c..a7ee60115 100644 --- a/src/infra/internalDatabase/transientDatabaseService.go +++ b/src/infra/internalDatabase/transientDatabaseService.go @@ -3,75 +3,75 @@ package internalDbInfra import ( "errors" - "github.com/dgraph-io/badger/v4" + "github.com/glebarez/sqlite" + "gorm.io/gorm" ) type TransientDatabaseService struct { - Handler *badger.DB + Handler *gorm.DB } -func NewTransientDatabaseService() (*TransientDatabaseService, error) { - dbSvcOptions := badger.DefaultOptions(""). - WithInMemory(true). - WithNumVersionsToKeep(1). - WithLoggingLevel(badger.ERROR) +type KeyValueModel struct { + Key string `gorm:"primaryKey"` + Value string +} - dbSvc, err := badger.Open(dbSvcOptions) +func NewTransientDatabaseService() (*TransientDatabaseService, error) { + ormSvc, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{}) if err != nil { return nil, errors.New("TransientDatabaseConnectionError") } - return &TransientDatabaseService{ - Handler: dbSvc, - }, nil + err = ormSvc.AutoMigrate(&KeyValueModel{}) + if err != nil { + return nil, errors.New("TransientDatabaseMigrationError: " + err.Error()) + } + + return &TransientDatabaseService{Handler: ormSvc}, nil } func (dbSvc *TransientDatabaseService) Has(key string) bool { - hasKey := false - err := dbSvc.Handler.View(func(txn *badger.Txn) error { - _, err := txn.Get([]byte(key)) - if err == nil { - hasKey = true - } - - return nil - }) - if err != nil { + var count int64 + result := dbSvc.Handler.Model(&KeyValueModel{}). + Where("key = ?", key).Count(&count) + if result.Error != nil { return false } - return hasKey + return count > 0 } -func (dbSvc *TransientDatabaseService) Get(key string) (string, error) { - var value string - err := dbSvc.Handler.View(func(txn *badger.Txn) error { - item, err := txn.Get([]byte(key)) - if err != nil { - return err - } - - err = item.Value(func(val []byte) error { - value = string(val) - return nil - }) - if err != nil { - return err - } +func (dbSvc *TransientDatabaseService) Read(key string) (string, error) { + var keyValueModel KeyValueModel + result := dbSvc.Handler.Model(&KeyValueModel{}). + Where("key = ?", key).Find(&keyValueModel) + if result.Error != nil { + return "", result.Error + } - return nil - }) - if err != nil { - return "", err + if result.RowsAffected == 0 { + return "", errors.New("KeyNotFound") } - return value, nil + return keyValueModel.Value, nil } func (dbSvc *TransientDatabaseService) Set(key string, value string) error { - err := dbSvc.Handler.Update(func(txn *badger.Txn) error { - err := txn.Set([]byte(key), []byte(value)) - return err - }) - return err + keyValueModel := KeyValueModel{Key: key, Value: value} + + result := dbSvc.Handler.Model(&KeyValueModel{}). + Where("key = ?", key).FirstOrCreate(&keyValueModel) + if result.Error != nil { + return result.Error + } + + if result.RowsAffected == 0 { + result = dbSvc.Handler.Model(&KeyValueModel{}). + Where("key = ?", key).Update("value", value) + if result.Error != nil { + return result.Error + } + } + + return nil } diff --git a/src/infra/internalDatabase/transientDatabaseService_test.go b/src/infra/internalDatabase/transientDatabaseService_test.go new file mode 100644 index 000000000..252906eac --- /dev/null +++ b/src/infra/internalDatabase/transientDatabaseService_test.go @@ -0,0 +1,60 @@ +package internalDbInfra + +import ( + "testing" +) + +func TestTransientDbSvc(t *testing.T) { + dbSvc, err := NewTransientDatabaseService() + if err != nil { + t.Fatalf("TransientDatabaseServiceInitFailed: %v", err) + } + + testKey := "test_key" + testValue := "test_value" + nonExistentKey := "non_existent_key" + updatedValue := "updated_value" + + t.Run("HasFunctionality", func(t *testing.T) { + if dbSvc.Has(testKey) { + t.Errorf("HasReturnedTrueForNonExistentKey") + } + + err := dbSvc.Set(testKey, testValue) + if err != nil { + t.Errorf("SetFailed: %v", err) + } + + if !dbSvc.Has(testKey) { + t.Errorf("HasReturnedFalseForExistingKey") + } + }) + + t.Run("ReadWriteFunctionality", func(t *testing.T) { + value, err := dbSvc.Read(testKey) + if err != nil { + t.Errorf("ReadFailed: %v", err) + } + if value != testValue { + t.Errorf("IncorrectValue: Got %v, Want %v", value, testValue) + } + + _, err = dbSvc.Read(nonExistentKey) + if err == nil { + t.Errorf("ExpectedErrorForNonExistentKeyButGotNil") + } + + err = dbSvc.Set(testKey, updatedValue) + if err != nil { + t.Errorf("UpdateFailed: %v", err) + } + + value, err = dbSvc.Read(testKey) + if err != nil { + t.Errorf("ReadFailedAfterUpdate: %v", err) + } + if value != updatedValue { + t.Errorf("IncorrectValueAfterUpdate: Got %v, Want %v", value, updatedValue) + } + }) +} diff --git a/src/infra/marketplace/marketplaceCmdRepo.go b/src/infra/marketplace/marketplaceCmdRepo.go index b1154c2bd..068f99e09 100644 --- a/src/infra/marketplace/marketplaceCmdRepo.go +++ b/src/infra/marketplace/marketplaceCmdRepo.go @@ -8,11 +8,10 @@ import ( "slices" "strconv" "strings" + "time" - "github.com/alessio/shellescape" "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" - "github.com/goinfinite/os/src/domain/useCase" "github.com/goinfinite/os/src/domain/valueObject" infraEnvs "github.com/goinfinite/os/src/infra/envs" infraHelper "github.com/goinfinite/os/src/infra/helper" @@ -21,16 +20,16 @@ import ( runtimeInfra "github.com/goinfinite/os/src/infra/runtime" servicesInfra "github.com/goinfinite/os/src/infra/services" vhostInfra "github.com/goinfinite/os/src/infra/vhost" - mappingInfra "github.com/goinfinite/os/src/infra/vhost/mapping" + tkInfra "github.com/goinfinite/tk/src/infra" "github.com/google/uuid" ) -const installTempDirPath = "/app/marketplace-tmp/" +const installTempDirPath = "/app/marketplace-tmp" type MarketplaceCmdRepo struct { persistentDbSvc *internalDbInfra.PersistentDatabaseService marketplaceQueryRepo *MarketplaceQueryRepo - mappingCmdRepo *mappingInfra.MappingCmdRepo + mappingCmdRepo *vhostInfra.MappingCmdRepo } func NewMarketplaceCmdRepo( @@ -39,7 +38,7 @@ func NewMarketplaceCmdRepo( return &MarketplaceCmdRepo{ persistentDbSvc: persistentDbSvc, marketplaceQueryRepo: NewMarketplaceQueryRepo(persistentDbSvc), - mappingCmdRepo: mappingInfra.NewMappingCmdRepo(persistentDbSvc), + mappingCmdRepo: vhostInfra.NewMappingCmdRepo(persistentDbSvc), } } @@ -72,13 +71,12 @@ func (repo *MarketplaceCmdRepo) installServices( continue } - createServiceDto := dto.NewCreateInstallableService( - serviceWithVersion.Name, []valueObject.ServiceEnv{}, - []valueObject.PortBinding{}, serviceWithVersion.Version, - nil, nil, nil, nil, nil, nil, operatorAccountId, operatorIpAddress, - ) - - _, err = serviceCmdRepo.CreateInstallable(createServiceDto) + _, err = serviceCmdRepo.CreateInstallable(dto.CreateInstallableService{ + Name: serviceWithVersion.Name, + Version: serviceWithVersion.Version, + OperatorAccountId: operatorAccountId, + OperatorIpAddress: operatorIpAddress, + }) if err != nil { return errors.New("InstallRequiredServiceError: " + err.Error()) } @@ -100,14 +98,15 @@ func (repo *MarketplaceCmdRepo) parseSystemDataFields( installHostname valueObject.Fqdn, installUuid valueObject.MarketplaceInstalledItemUuid, ) (systemDataFields []valueObject.MarketplaceInstallableItemDataField) { - dummyValueGenerator := infraHelper.DummyValueGenerator{} + synthesizer := tkInfra.Synthesizer{} dataMap := map[string]string{ - "installDirectory": installDir.String(), - "installUrlPath": installUrlPath.String(), - "installHostname": installHostname.String(), - "installUuid": installUuid.String(), - "installTempDir": installTempDirPath, - "installRandomPassword": dummyValueGenerator.GenPass(16), + "installDirectory": installDir.String(), + "installUrlPath": installUrlPath.String(), + "installHostname": installHostname.String(), + "installUuid": installUuid.String(), + "installTempDir": installTempDirPath, + "installRandomPassword": synthesizer.PasswordFactory(16, false), + "installRandomPasswordWithSymbols": synthesizer.PasswordFactory(16, true), } itemNameStr := strings.ToLower(itemName.String()) @@ -184,7 +183,7 @@ func (repo *MarketplaceCmdRepo) replaceCmdStepsPlaceholders( dataFieldValue = "" } - printableDataFieldValue := shellescape.StripUnsafe(dataFieldValue) + printableDataFieldValue := infraHelper.ShellEscape{}.StripUnsafe(dataFieldValue) cmdStepWithDataFieldStr := strings.ReplaceAll( cmdStepStr, "%"+cmdStepDataPlaceholder+"%", printableDataFieldValue, @@ -200,30 +199,49 @@ func (repo *MarketplaceCmdRepo) replaceCmdStepsPlaceholders( } func (repo *MarketplaceCmdRepo) runCmdSteps( - stepType string, - catalogCmdSteps []valueObject.UnixCommand, - receivedDataFields []valueObject.MarketplaceInstallableItemDataField, + stepsType string, + steps []valueObject.UnixCommand, + totalExecTimeoutSecs valueObject.UnixTime, ) error { - preparedCmdSteps, err := repo.replaceCmdStepsPlaceholders( - catalogCmdSteps, receivedDataFields, - ) - if err != nil { - return errors.New("ParseCmdStepWithDataFieldsError: " + err.Error()) + if len(steps) == 0 { + return nil + } + + totalExecTimeoutSecsUint := uint64(totalExecTimeoutSecs.Int64()) + runCmdSettings := infraHelper.RunCmdSettings{ + ShouldRunWithSubShell: true, + ExecutionTimeoutSecs: totalExecTimeoutSecsUint, } - for stepIndex, cmdStep := range preparedCmdSteps { - stepStr := cmdStep.String() + totalExecRemainingTime := totalExecTimeoutSecsUint + for stepIndex, step := range steps { + stepStr := step.String() - slog.Debug("Running"+stepType+"Step", slog.String("step", stepStr)) + slog.Debug("Running"+stepsType+"Step", slog.String("step", stepStr)) - stepOutput, err := infraHelper.RunCmdWithSubShell(stepStr) + runCmdSettings.Command = stepStr + + stepExecTimeStart := time.Now() + stepOutput, err := infraHelper.RunCmd(runCmdSettings) if err != nil { - stepIndexStr := strconv.Itoa(stepIndex) - combinedOutput := stepOutput + " " + err.Error() - return errors.New( - stepType + "CmdStepError (" + stepIndexStr + "): " + combinedOutput, + errorMessage := stepOutput + " | " + err.Error() + if infraHelper.IsRunCmdTimeout(err) { + errorMessage = "MarketplaceItem" + stepsType + "TimeoutExceeded" + } + + return fmt.Errorf( + "%sCmdStepError (%s): %s", + stepsType, strconv.Itoa(stepIndex), errorMessage, ) } + + stepExecElapsedTimeSecs := uint64(time.Since(stepExecTimeStart).Seconds()) + totalExecRemainingTime = totalExecRemainingTime - stepExecElapsedTimeSecs + if totalExecRemainingTime == 0 { + return errors.New("MarketplaceItem" + stepsType + "TimeoutExceeded") + } + + runCmdSettings.ExecutionTimeoutSecs = totalExecRemainingTime } return nil @@ -236,17 +254,25 @@ func (repo *MarketplaceCmdRepo) updateFilesPrivileges( chownRecursively := true chownSymlinksToo := true - err := infraHelper.UpdatePermissionsForWebServerUse( + err := infraHelper.UpdateOwnershipForWebServerUse( targetDirStr, chownRecursively, chownSymlinksToo, ) if err != nil { return errors.New("ChownError (" + targetDirStr + "): " + err.Error()) } - _, err = infraHelper.RunCmdWithSubShell( - `find ` + targetDirStr + ` -type d -exec chmod 755 {} \; && find ` + - targetDirStr + ` -type f -exec chmod 644 {} \;`, + dirDefaultPermissions := valueObject.NewUnixDirDefaultPermissions() + fileDefaultPermissions := valueObject.NewUnixFileDefaultPermissions() + + updatePrivilegesCmd := fmt.Sprintf( + "find %s -type d -exec chmod %s {} \\; && find %s -type f -exec chmod %s {} \\;", + targetDirStr, dirDefaultPermissions.String(), targetDirStr, + fileDefaultPermissions.String(), ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: updatePrivilegesCmd, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("ChmodError (" + targetDirStr + "): " + err.Error()) } @@ -292,14 +318,17 @@ func (repo *MarketplaceCmdRepo) createMappings( operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, ) (mappingIds []valueObject.MappingId, err error) { - mappingQueryRepo := mappingInfra.NewMappingQueryRepo(repo.persistentDbSvc) - currentMappings, err := mappingQueryRepo.ReadByHostname(hostname) + mappingQueryRepo := vhostInfra.NewMappingQueryRepo(repo.persistentDbSvc) + mappingsReadResponse, err := mappingQueryRepo.Read(dto.ReadMappingsRequest{ + Pagination: dto.PaginationUnpaginated, + Hostname: &hostname, + }) if err != nil { return mappingIds, err } currentMappingsContentHashMap := map[string]entity.Mapping{} - for _, currentMapping := range currentMappings { + for _, currentMapping := range mappingsReadResponse.Mappings { contentHash := infraHelper.GenStrongShortHash( currentMapping.Hostname.String() + currentMapping.Path.String() + @@ -310,10 +339,10 @@ func (repo *MarketplaceCmdRepo) createMappings( currentMappingsContentHashMap[contentHash] = currentMapping } - for _, mapping := range catalogMappings { + for _, itemMappingVo := range catalogMappings { contentHash := infraHelper.GenStrongShortHash( - hostname.String() + mapping.Path.String() + mapping.MatchPattern.String() + - mapping.TargetType.String(), + hostname.String() + itemMappingVo.Path.String() + itemMappingVo.MatchPattern.String() + + itemMappingVo.TargetType.String(), ) currentMapping, alreadyExists := currentMappingsContentHashMap[contentHash] if alreadyExists { @@ -322,14 +351,14 @@ func (repo *MarketplaceCmdRepo) createMappings( } createDto := dto.NewCreateMapping( - hostname, mapping.Path, mapping.MatchPattern, mapping.TargetType, - mapping.TargetValue, mapping.TargetHttpResponseCode, operatorAccountId, - operatorIpAddress, + hostname, itemMappingVo.Path, itemMappingVo.MatchPattern, itemMappingVo.TargetType, + itemMappingVo.TargetValue, itemMappingVo.TargetHttpResponseCode, + itemMappingVo.ShouldUpgradeInsecureRequests, nil, operatorAccountId, operatorIpAddress, ) mappingId, err := repo.mappingCmdRepo.Create(createDto) if err != nil { - slog.Debug("CreateItemMappingError", slog.Any("error", err)) + slog.Debug("CreateItemMappingError", slog.String("err", err.Error())) continue } @@ -355,7 +384,7 @@ func (repo *MarketplaceCmdRepo) persistInstalledItem( mappingModels := []dbModel.Mapping{} for _, mappingId := range mappingsId { - mappingModel := dbModel.Mapping{ID: uint(mappingId.Uint64())} + mappingModel := dbModel.Mapping{ID: mappingId.Uint64()} mappingModels = append(mappingModels, mappingModel) } @@ -383,20 +412,20 @@ func (repo *MarketplaceCmdRepo) InstallItem( return errors.New("CatalogIdOrSlugMustBeProvided") } - readCatalogItemRequestDto := dto.ReadMarketplaceCatalogItemsRequest{ - MarketplaceCatalogItemId: installDto.Id, - MarketplaceCatalogItemSlug: installDto.Slug, - } - catalogItem, err := repo.marketplaceQueryRepo.ReadFirstCatalogItem( - readCatalogItemRequestDto, + dto.ReadMarketplaceCatalogItemsRequest{ + MarketplaceCatalogItemId: installDto.Id, + MarketplaceCatalogItemSlug: installDto.Slug, + }, ) if err != nil { return errors.New("MarketplaceCatalogItemNotFound") } vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(repo.persistentDbSvc) - vhost, err := vhostQueryRepo.ReadByHostname(installDto.Hostname) + vhostEntity, err := vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: &installDto.Hostname, + }) if err != nil { return err } @@ -414,12 +443,18 @@ func (repo *MarketplaceCmdRepo) InstallItem( installUrlPath = *installDto.UrlPath } - installDirStr := vhost.RootDirectory.String() + installUrlPath.GetWithoutTrailingSlash() + installDirStr := vhostEntity.RootDirectory.String() + installUrlPath.GetWithoutTrailingSlash() installDir, err := valueObject.NewUnixFilePath(installDirStr) if err != nil { return errors.New("DefineInstallDirectoryError: " + err.Error()) } installDirStr = installDir.String() + if installDirStr == infraEnvs.PrimaryPublicDir { + err := infraHelper.BackupPrimaryIndexFile() + if err != nil { + return err + } + } rawInstallUuid := uuid.New().String()[:16] rawInstallUuidNoHyphens := strings.Replace(rawInstallUuid, "-", "", -1) @@ -452,12 +487,24 @@ func (repo *MarketplaceCmdRepo) InstallItem( return errors.New("CreateTmpDirectoryError: " + err.Error()) } - err = repo.runCmdSteps("Install", catalogItem.InstallCmdSteps, receivedDataFields) + usableInstallCmdSteps, err := repo.replaceCmdStepsPlaceholders( + catalogItem.InstallCmdSteps, receivedDataFields, + ) + if err != nil { + return errors.New("ParseCmdStepWithDataFieldsError: " + err.Error()) + } + + err = repo.runCmdSteps( + "Install", usableInstallCmdSteps, catalogItem.InstallTimeoutSecs, + ) if err != nil { return err } - _, err = infraHelper.RunCmd("rm", "-rf", installTempDirPath) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "rm", + Args: []string{"-rf", installTempDirPath}, + }) if err != nil { return errors.New("DeleteTmpDirectoryError: " + err.Error()) } @@ -467,7 +514,7 @@ func (repo *MarketplaceCmdRepo) InstallItem( return errors.New("UpdateFilesPrivilegesError: " + err.Error()) } - isRootDirectory := installDir.String() == vhost.RootDirectory.String() + isRootDirectory := installDir.String() == vhostEntity.RootDirectory.String() if !isRootDirectory { catalogItem.Mappings = repo.updateMappingsBase( catalogItem.Mappings, installUrlPath, @@ -482,10 +529,27 @@ func (repo *MarketplaceCmdRepo) InstallItem( return err } - return repo.persistInstalledItem( + err = repo.persistInstalledItem( catalogItem, installDto.Hostname, installUrlPath, installDir, installUuid, mappingIds, ) + if err != nil { + return errors.New("PersistInstalledItemError: " + err.Error()) + } + + for _, mappingId := range mappingIds { + err = repo.mappingCmdRepo.UpdateMarketplaceItem(mappingId, catalogItem.Name) + if err != nil { + slog.Debug( + "UpdateMappingItemNameError", + slog.String("mappingId", mappingId.String()), + slog.String("err", err.Error()), + ) + continue + } + } + + return nil } func (repo *MarketplaceCmdRepo) moveSelectedFiles( @@ -509,7 +573,10 @@ func (repo *MarketplaceCmdRepo) moveSelectedFiles( "find %s/ %s \\( %s \\) -exec mv -t %s {} +", sourceDir.String(), findCmdFlagsStr, fileNamesFilterParams, targetDir.String(), ) - _, err := infraHelper.RunCmdWithSubShell(moveCmd) + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: moveCmd, + ShouldRunWithSubShell: true, + }) return err } @@ -553,9 +620,11 @@ func (repo *MarketplaceCmdRepo) uninstallSymlinkFilesDelete( } installedItemRealRootDirPathStr := installedItemRealRootDirPath.String() - _, err = infraHelper.RunCmdWithSubShell( - "mv " + installedItemRealRootDirPathStr + "/* " + softDeleteDestDirPath.String(), - ) + softDeleteCmd := "mv " + installedItemRealRootDirPathStr + "/* " + softDeleteDestDirPath.String() + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: softDeleteCmd, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("SoftDeleteItemFilesError: " + err.Error()) } @@ -565,17 +634,19 @@ func (repo *MarketplaceCmdRepo) uninstallSymlinkFilesDelete( return errors.New("UpdateSoftDeleteDirPrivilegesError: " + err.Error()) } - _, err = infraHelper.RunCmdWithSubShell( - "rm -rf " + installedItemRealRootDirPathStr, - ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "rm -rf " + installedItemRealRootDirPathStr, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("DeleteItemRealRootPathError: " + err.Error()) } itemAliasesRootDirStr := installedItem.InstallDirectory.String() - _, err = infraHelper.RunCmdWithSubShell( - "rm -rf " + itemAliasesRootDirStr, - ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "rm -rf " + itemAliasesRootDirStr, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("DeleteItemAliasesRootDirError: " + err.Error()) } @@ -594,7 +665,10 @@ func (repo *MarketplaceCmdRepo) uninstallSymlinkFilesDelete( return errors.New("RestoreUnfamiliarFilesError: " + err.Error()) } - _, err = infraHelper.RunCmdWithSubShell("rm -rf " + unfamiliarFilesBackupDirStr) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "rm -rf " + unfamiliarFilesBackupDirStr, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("DeleteUnfamiliarFilesBackupDirError: " + err.Error()) } @@ -612,7 +686,7 @@ func (repo *MarketplaceCmdRepo) uninstallFilesDelete( rawSoftDeleteDestDirPath := fmt.Sprintf( "%s/%s-%s-%s", - useCase.TrashDirPath, installedItem.Slug.String(), + valueObject.UnixFilePathTrashDir.String(), installedItem.Slug.String(), installedItem.Hostname.String(), installedItem.InstallUuid.String(), ) softDeleteDestDirPath, err := valueObject.NewUnixFilePath(rawSoftDeleteDestDirPath) @@ -645,53 +719,10 @@ func (repo *MarketplaceCmdRepo) uninstallFilesDelete( return errors.New("UpdateSoftDeleteDirPrivilegesError: " + err.Error()) } - return nil -} - -func (repo *MarketplaceCmdRepo) uninstallUnusedServices( - servicesToUninstall []valueObject.ServiceNameWithVersion, -) error { - serviceNamesToUninstallMap := map[string]interface{}{} - for _, serviceNameWithVersion := range servicesToUninstall { - serviceNamesToUninstallMap[serviceNameWithVersion.Name.String()] = nil - } - - readInstalledItemsDto := dto.ReadMarketplaceInstalledItemsRequest{ - Pagination: dto.Pagination{ - ItemsPerPage: 1000, - }, - } - installedItemsResponseDto, err := repo.marketplaceQueryRepo.ReadInstalledItems( - readInstalledItemsDto, - ) - if err != nil { - return errors.New("ReadInstalledItemsError: " + err.Error()) - } - - serviceNamesInUseMap := map[string]interface{}{} - for _, installedItem := range installedItemsResponseDto.MarketplaceInstalledItems { - for _, serviceNameWithVersion := range installedItem.Services { - serviceNamesInUseMap[serviceNameWithVersion.Name.String()] = nil - } - } - - unusedServiceNames := []valueObject.ServiceName{} - for serviceNameStr := range serviceNamesToUninstallMap { - _, isServiceInUse := serviceNamesInUseMap[serviceNameStr] - if isServiceInUse { - continue - } - - serviceName, _ := valueObject.NewServiceName(serviceNameStr) - unusedServiceNames = append(unusedServiceNames, serviceName) - } - - servicesCmdRepo := servicesInfra.NewServicesCmdRepo(repo.persistentDbSvc) - for _, unusedService := range unusedServiceNames { - err = servicesCmdRepo.Delete(unusedService) + if installedItem.InstallDirectory.String() == infraEnvs.PrimaryPublicDir { + err := infraHelper.RestorePrimaryIndexFile() if err != nil { - slog.Debug("UninstallUnusedServiceError", slog.Any("error", err)) - continue + return err } } @@ -701,36 +732,22 @@ func (repo *MarketplaceCmdRepo) uninstallUnusedServices( func (repo *MarketplaceCmdRepo) UninstallItem( deleteDto dto.DeleteMarketplaceInstalledItem, ) error { - readInstalledItemDto := dto.ReadMarketplaceInstalledItemsRequest{ - MarketplaceInstalledItemId: &deleteDto.InstalledId, - } installedItem, err := repo.marketplaceQueryRepo.ReadFirstInstalledItem( - readInstalledItemDto, + dto.ReadMarketplaceInstalledItemsRequest{ + MarketplaceInstalledItemId: &deleteDto.InstalledId, + }, ) if err != nil { - return err + return errors.New("ReadMarketplaceInstalledItemError: " + err.Error()) } - for _, installedItemMapping := range installedItem.Mappings { - err = repo.mappingCmdRepo.Delete(installedItemMapping.Id) - if err != nil { - slog.Debug( - "DeleteMappingError", - slog.String("mappingPath", installedItemMapping.Path.String()), - slog.Any("error", err), - ) - continue - } - } - - readCatalogItemDto := dto.ReadMarketplaceCatalogItemsRequest{ - MarketplaceCatalogItemSlug: &installedItem.Slug, - } catalogItem, err := repo.marketplaceQueryRepo.ReadFirstCatalogItem( - readCatalogItemDto, + dto.ReadMarketplaceCatalogItemsRequest{ + MarketplaceCatalogItemSlug: &installedItem.Slug, + }, ) if err != nil { - return err + return errors.New("ReadMarketplaceCatalogItemError: " + err.Error()) } err = repo.uninstallFilesDelete(installedItem, catalogItem) @@ -742,27 +759,24 @@ func (repo *MarketplaceCmdRepo) UninstallItem( installedItem.Name, installedItem.Type, installedItem.InstallDirectory, installedItem.UrlPath, installedItem.Hostname, installedItem.InstallUuid, ) - err = repo.runCmdSteps("Uninstall", catalogItem.UninstallCmdSteps, systemDataFields) + usableInstallCmdSteps, err := repo.replaceCmdStepsPlaceholders( + catalogItem.UninstallCmdSteps, systemDataFields, + ) if err != nil { - return err + return errors.New("ParseCmdStepWithDataFieldsError: " + err.Error()) } - installedServiceItemModel := dbModel.MarketplaceInstalledItem{ - ID: deleteDto.InstalledId.Uint16(), - } - err = repo.persistentDbSvc.Handler.Delete(&installedServiceItemModel).Error + err = repo.runCmdSteps( + "Uninstall", usableInstallCmdSteps, catalogItem.UninstallTimeoutSecs, + ) if err != nil { return err } - if deleteDto.ShouldUninstallServices { - err = repo.uninstallUnusedServices(installedItem.Services) - if err != nil { - return err - } + marketplaceInstalledItemModel := dbModel.MarketplaceInstalledItem{ + ID: deleteDto.InstalledId.Uint16(), } - - return nil + return repo.persistentDbSvc.Handler.Delete(&marketplaceInstalledItemModel).Error } func (repo *MarketplaceCmdRepo) RefreshCatalogItems() error { @@ -777,15 +791,19 @@ func (repo *MarketplaceCmdRepo) RefreshCatalogItems() error { infraEnvs.InfiniteOsMainDir, infraEnvs.MarketplaceCatalogItemsRepoBranch, infraEnvs.MarketplaceCatalogItemsRepoUrl, ) - _, err = infraHelper.RunCmdWithSubShell(repoCloneCmd) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: repoCloneCmd, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("CloneMarketplaceItemsRepoError: " + err.Error()) } } - _, err = infraHelper.RunCmdWithSubShell( - "cd " + infraEnvs.MarketplaceCatalogItemsDir + ";" + + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "cd " + infraEnvs.MarketplaceCatalogItemsDir + ";" + "git clean -f -d; git reset --hard HEAD; git pull", - ) + ShouldRunWithSubShell: true, + }) return err } diff --git a/src/infra/marketplace/marketplaceQueryRepo.go b/src/infra/marketplace/marketplaceQueryRepo.go index 166fa8b8d..d0a92e8c0 100644 --- a/src/infra/marketplace/marketplaceQueryRepo.go +++ b/src/infra/marketplace/marketplaceQueryRepo.go @@ -11,11 +11,12 @@ import ( "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/valueObject" - voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" infraEnvs "github.com/goinfinite/os/src/infra/envs" infraHelper "github.com/goinfinite/os/src/infra/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" dbModel "github.com/goinfinite/os/src/infra/internalDatabase/model" + tkVoUtil "github.com/goinfinite/tk/src/domain/valueObject/util" + tkInfra "github.com/goinfinite/tk/src/infra" "github.com/iancoleman/strcase" ) @@ -126,8 +127,21 @@ func (repo *MarketplaceQueryRepo) catalogItemMappingsFactory( targetHttpResponseCodePtr = &targetHttpResponseCode } + var shouldUpgradeInsecureRequestsPtr *bool + if rawItemMappingMap["shouldUpgradeInsecureRequests"] != nil { + shouldUpgradeInsecureRequests, err := tkVoUtil.InterfaceToBool( + rawItemMappingMap["shouldUpgradeInsecureRequests"], + ) + if err != nil { + slog.Debug("ShouldUpgradeInsecureInvalidFormat", slog.Int("index", mappingIndex)) + shouldUpgradeInsecureRequests = false + } + shouldUpgradeInsecureRequestsPtr = &shouldUpgradeInsecureRequests + } + itemMapping := valueObject.NewMarketplaceItemMapping( path, matchPattern, targetType, targetValuePtr, targetHttpResponseCodePtr, + shouldUpgradeInsecureRequestsPtr, ) itemMappings = append(itemMappings, itemMapping) } @@ -138,16 +152,16 @@ func (repo *MarketplaceQueryRepo) catalogItemMappingsFactory( func (repo *MarketplaceQueryRepo) specificTypeDataFieldValueGenerator( dataFieldSpecificType valueObject.DataFieldSpecificType, ) (valueObject.DataFieldValue, error) { - dummyValueGenerator := infraHelper.DummyValueGenerator{} + synthesizer := tkInfra.Synthesizer{} var dummyValue string switch dataFieldSpecificType.String() { case "password": - dummyValue = dummyValueGenerator.GenPass(16) + dummyValue = synthesizer.PasswordFactory(16, false) case "username": - dummyValue = dummyValueGenerator.GenUsername() + dummyValue = synthesizer.UsernameFactory() case "email": - dummyValue = dummyValueGenerator.GenMailAddress(nil) + dummyValue = synthesizer.MailAddressFactory(nil) } return valueObject.NewDataFieldValue(dummyValue) @@ -246,13 +260,13 @@ func (repo *MarketplaceQueryRepo) catalogItemDataFieldsFactory( isRequired := false if rawItemDataFieldMap["isRequired"] != nil { - rawIsRequired, err := voHelper.InterfaceToBool( + rawIsRequired, err := tkVoUtil.InterfaceToBool( rawItemDataFieldMap["isRequired"], ) if err != nil { slog.Debug( "InvalidMarketplaceCatalogItemDataFieldIsRequired", - slog.Any("err", err), slog.Any("key", rawKey), + slog.String("err", err.Error()), slog.Any("key", rawKey), slog.Bool("isRequired", rawIsRequired), ) continue @@ -385,7 +399,7 @@ func (repo *MarketplaceQueryRepo) catalogItemScreenshotUrlsFactory( func (repo *MarketplaceQueryRepo) catalogItemFactory( catalogItemFilePath valueObject.UnixFilePath, ) (catalogItem entity.MarketplaceCatalogItem, err error) { - itemMap, err := infraHelper.FileSerializedDataToMap(catalogItemFilePath) + itemMap, err := tkInfra.FileDeserializer(catalogItemFilePath.String()) if err != nil { return catalogItem, err } @@ -477,6 +491,16 @@ func (repo *MarketplaceQueryRepo) catalogItemFactory( } } + itemInstallTimeoutSecs, _ := valueObject.NewUnixTime(600) + if itemMap["installTimeoutSecs"] != nil { + itemInstallTimeoutSecs, err = valueObject.NewUnixTime( + itemMap["installTimeoutSecs"], + ) + if err != nil { + return catalogItem, err + } + } + itemInstallCmdSteps := []valueObject.UnixCommand{} if itemMap["installCmdSteps"] != nil { itemInstallCmdSteps, err = repo.catalogItemCmdStepsFactory( @@ -487,6 +511,16 @@ func (repo *MarketplaceQueryRepo) catalogItemFactory( } } + itemUninstallTimeoutSecs, _ := valueObject.NewUnixTime(600) + if itemMap["uninstallTimeoutSecs"] != nil { + itemUninstallTimeoutSecs, err = valueObject.NewUnixTime( + itemMap["uninstallTimeoutSecs"], + ) + if err != nil { + return catalogItem, err + } + } + itemUninstallCmdSteps := []valueObject.UnixCommand{} if itemMap["uninstallCmdSteps"] != nil { itemUninstallCmdSteps, err = repo.catalogItemCmdStepsFactory( @@ -532,9 +566,9 @@ func (repo *MarketplaceQueryRepo) catalogItemFactory( return entity.NewMarketplaceCatalogItem( itemManifestVersion, itemId, itemSlugs, itemName, itemType, itemDescription, - itemServices, itemMappings, itemDataFields, itemInstallCmdSteps, - itemUninstallCmdSteps, itemUninstallFileNames, estimatedSizeBytes, itemAvatarUrl, - itemScreenshotUrls, + itemServices, itemMappings, itemDataFields, itemInstallTimeoutSecs, + itemInstallCmdSteps, itemUninstallTimeoutSecs, itemUninstallCmdSteps, + itemUninstallFileNames, estimatedSizeBytes, itemAvatarUrl, itemScreenshotUrls, ), nil } @@ -552,11 +586,12 @@ func (repo *MarketplaceQueryRepo) ReadCatalogItems( } } - rawCatalogFilesList, err := infraHelper.RunCmdWithSubShell( - "find " + infraEnvs.MarketplaceCatalogItemsDir + " -type f " + + rawCatalogFilesList, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "find " + infraEnvs.MarketplaceCatalogItemsDir + " -type f " + "\\( -name '*.json' -o -name '*.yaml' -o -name '*.yml' \\) " + "-not -path '*/.*' -not -name '.*'", - ) + ShouldRunWithSubShell: true, + }) if err != nil { return responseDto, errors.New("ReadMarketplaceFilesError: " + err.Error()) } @@ -583,7 +618,8 @@ func (repo *MarketplaceQueryRepo) ReadCatalogItems( if err != nil { slog.Debug( "CatalogMarketplaceItemFactoryError", - slog.String("filePath", itemFilePath.String()), slog.Any("err", err), + slog.String("filePath", itemFilePath.String()), + slog.String("err", err.Error()), ) continue } @@ -622,7 +658,7 @@ func (repo *MarketplaceQueryRepo) ReadCatalogItems( slog.Debug( "CreateNewCatalogMarketplaceItemIdError", slog.String("itemName", catalogItem.Name.String()), - slog.Any("err", err), + slog.String("err", err.Error()), ) continue } @@ -795,7 +831,7 @@ func (repo *MarketplaceQueryRepo) ReadInstalledItems( if err != nil { slog.Debug( "MarketplaceInstalledItemModelToEntityError", - slog.Uint64("id", uint64(model.ID)), slog.Any("error", err), + slog.Uint64("id", uint64(model.ID)), slog.String("err", err.Error()), ) continue } diff --git a/src/infra/o11y/o11yQueryRepo.go b/src/infra/o11y/o11yQueryRepo.go index 5b018d5fe..0a292b3af 100644 --- a/src/infra/o11y/o11yQueryRepo.go +++ b/src/infra/o11y/o11yQueryRepo.go @@ -33,7 +33,10 @@ func NewO11yQueryRepo( func (repo *O11yQueryRepo) getUptime() (uint64, error) { nowEpoch := valueObject.NewUnixTimeNow() - rawFirstPidEpoch, err := infraHelper.RunCmdWithSubShell("stat -c '%Y' /proc/1") + rawFirstPidEpoch, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "stat -c '%Y' /proc/1", + ShouldRunWithSubShell: true, + }) if err != nil { return 0, errors.New("ReadFirstPidEpochFailed") } @@ -50,7 +53,7 @@ func (repo *O11yQueryRepo) ReadServerPublicIpAddress() ( ipAddress valueObject.IpAddress, err error, ) { - cachedIpAddressStr, err := repo.transientDbSvc.Get(PublicIpTransientKey) + cachedIpAddressStr, err := repo.transientDbSvc.Read(PublicIpTransientKey) if err == nil { return valueObject.NewIpAddress(cachedIpAddressStr) } @@ -74,7 +77,7 @@ func (repo *O11yQueryRepo) isCgroupV2() bool { } func (repo *O11yQueryRepo) getFileContent(file string) (string, error) { - fileContent, err := infraHelper.GetFileContent(file) + fileContent, err := infraHelper.ReadFileContent(file) if err != nil { return "", err } @@ -357,13 +360,15 @@ func (repo *O11yQueryRepo) getCurrentResourceUsage() ( ), nil } -func (repo *O11yQueryRepo) ReadOverview() (o11yOverview entity.O11yOverview, err error) { +func (repo *O11yQueryRepo) ReadOverview( + withResourceUsage bool, +) (o11yOverview entity.O11yOverview, err error) { hostnameStr, err := os.Hostname() if err != nil { hostnameStr = "localhost" } - primaryVhost, err := infraHelper.GetPrimaryVirtualHost() + primaryVhost, err := infraHelper.ReadPrimaryVirtualHostHostname() if err == nil { hostnameStr = primaryVhost.String() } @@ -387,7 +392,7 @@ func (repo *O11yQueryRepo) ReadOverview() (o11yOverview entity.O11yOverview, err publicIpAddress, err := repo.ReadServerPublicIpAddress() if err != nil { - slog.Debug("ReadServerPublicIpAddressError", slog.Any("error", err)) + slog.Debug("ReadServerPublicIpAddressError", slog.String("err", err.Error())) publicIpAddress, _ = valueObject.NewIpAddress("0.0.0.0") } @@ -396,12 +401,16 @@ func (repo *O11yQueryRepo) ReadOverview() (o11yOverview entity.O11yOverview, err return o11yOverview, errors.New("ReadHardwareSpecsFailed: " + err.Error()) } - currentResourceUsage, err := repo.getCurrentResourceUsage() - if err != nil { - return o11yOverview, errors.New("ReadCurrentResourceUsageFailed: " + err.Error()) + resourceUsage := valueObject.CurrentResourceUsage{} + if withResourceUsage { + currentResourceUsage, err := repo.getCurrentResourceUsage() + if err != nil { + return o11yOverview, errors.New("ReadCurrentResourceUsageFailed: " + err.Error()) + } + resourceUsage = currentResourceUsage } return entity.NewO11yOverview( - hostname, uptimeSecs, uptimeRelative, publicIpAddress, hardwareSpecs, currentResourceUsage, + hostname, uptimeSecs, uptimeRelative, publicIpAddress, hardwareSpecs, resourceUsage, ), nil } diff --git a/src/infra/o11y/o11yQueryRepo_test.go b/src/infra/o11y/o11yQueryRepo_test.go index debd3f5d5..0416bcf98 100644 --- a/src/infra/o11y/o11yQueryRepo_test.go +++ b/src/infra/o11y/o11yQueryRepo_test.go @@ -18,7 +18,7 @@ func TestGetOverview(t *testing.T) { o11yQueryRepo := NewO11yQueryRepo(transientDbSvc) t.Run("GetOverview", func(t *testing.T) { - _, err := o11yQueryRepo.ReadOverview() + _, err := o11yQueryRepo.ReadOverview(true) if err != nil { t.Errorf("Expected nil, got %s", err.Error()) } diff --git a/src/infra/runtime/runtimeCmdRepo.go b/src/infra/runtime/runtimeCmdRepo.go index b4459b258..5916e96bd 100644 --- a/src/infra/runtime/runtimeCmdRepo.go +++ b/src/infra/runtime/runtimeCmdRepo.go @@ -58,9 +58,12 @@ func (repo *RuntimeCmdRepo) UpdatePhpVersion( } newLsapiLine := "lsapi:lsphp" + version.GetWithoutDots() - _, err = infraHelper.RunCmdWithSubShell( - "sed -i 's/lsapi:lsphp[0-9][0-9]/" + newLsapiLine + "/g' " + phpConfFilePath.String(), - ) + updatePhpVersionCmd := "sed -i 's/lsapi:lsphp[0-9][0-9]/" + newLsapiLine + + "/g' " + phpConfFilePath.String() + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: updatePhpVersionCmd, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("UpdatePhpVersionFailed: " + err.Error()) } @@ -68,9 +71,11 @@ func (repo *RuntimeCmdRepo) UpdatePhpVersion( isPrimaryVirtualHost := infraHelper.IsPrimaryVirtualHost(hostname) if isPrimaryVirtualHost { sourcePhpCliPath := "/usr/local/lsws/lsphp" + version.GetWithoutDots() + "/bin/php" - _, err = infraHelper.RunCmdWithSubShell( - "unlink /usr/bin/php; ln -s " + sourcePhpCliPath + " /usr/bin/php", - ) + updatePhpCliVersionCmd := "unlink /usr/bin/php; ln -s " + sourcePhpCliPath + " /usr/bin/php" + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: updatePhpCliVersionCmd, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("UpdatePhpCliVersionError: " + err.Error()) } @@ -97,15 +102,19 @@ func (repo *RuntimeCmdRepo) UpdatePhpSettings( settingValue = strings.Replace(settingValue, "|", "\\|", -1) } - _, err := infraHelper.RunCmd( - "sed", "-i", "s|"+settingName+" .*|"+settingName+" "+settingValue+"|g", phpConfigFilePathStr, - ) + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "sed", + Args: []string{ + "-i", "s|" + settingName + " .*|" + settingName + " " + settingValue + "|g", + phpConfigFilePathStr, + }, + }) if err != nil { slog.Debug( "UpdatePhpSettingFailed", slog.String("settingName", settingName), slog.String("settingValue", settingValue), - slog.Any("error", err), + slog.String("err", err.Error()), ) continue } @@ -169,9 +178,10 @@ func (repo *RuntimeCmdRepo) EnablePhpModule( return errors.New("InstallModuleFailed: " + err.Error()) } - _, err = infraHelper.RunCmdWithSubShell( - "echo | " + lsphpDir + "/bin/pecl install " + moduleNameStr, - ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "echo | " + lsphpDir + "/bin/pecl install " + moduleNameStr, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("InstallPeclModuleFailed: " + err.Error()) } @@ -291,9 +301,12 @@ func (repo *RuntimeCmdRepo) CreatePhpVirtualHost(hostname valueObject.Fqdn) erro } hostnameStr := hostname.String() - _, err = infraHelper.RunCmd( - "sed", "-ie", "s/goinfinite.local/"+hostnameStr+"/g", phpConfFilePathStr, - ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "sed", + Args: []string{ + "-ie", "s/" + infraEnvs.DefaultPrimaryVhost + "/" + hostnameStr + "/g", phpConfFilePathStr, + }, + }) if err != nil { return errors.New("UpdatePhpVirtualHostConfFileError: " + err.Error()) } @@ -318,10 +331,13 @@ virtualhost ` + hostname.String() + ` { listenerMapRegex := `^[[:space:]]*map[[:space:]]\+[[:alnum:].-]\+[[:space:]]\+\*` newListenerMapLine := "\\ \\ map " + hostnameStr + " " + hostnameStr - _, err = infraHelper.RunCmd( - "sed", "-ie", "/"+listenerMapRegex+"/a"+newListenerMapLine, - infraEnvs.PhpWebserverMainConfFilePath, - ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "sed", + Args: []string{ + "-ie", "/" + listenerMapRegex + "/a" + newListenerMapLine, + infraEnvs.PhpWebserverMainConfFilePath, + }, + }) if err != nil { return errors.New("UpdateListenerMapLineError: " + err.Error()) } diff --git a/src/infra/runtime/runtimeCmdRepo_test.go b/src/infra/runtime/runtimeCmdRepo_test.go index 9df6e94ba..69e85ffab 100644 --- a/src/infra/runtime/runtimeCmdRepo_test.go +++ b/src/infra/runtime/runtimeCmdRepo_test.go @@ -16,7 +16,7 @@ func TestRuntimeCmdRepo(t *testing.T) { persistentDbSvc, _ := internalDbInfra.NewPersistentDatabaseService() runtimeCmdRepo := NewRuntimeCmdRepo(persistentDbSvc) - primaryVhost, _ := infraHelper.GetPrimaryVirtualHost() + primaryVhost, _ := infraHelper.ReadPrimaryVirtualHostHostname() phpVersion, _ := valueObject.NewPhpVersion("8.1") t.Run("UpdatePhpVersion", func(t *testing.T) { diff --git a/src/infra/runtime/runtimeQueryRepo.go b/src/infra/runtime/runtimeQueryRepo.go index de3b2156d..831d8c941 100644 --- a/src/infra/runtime/runtimeQueryRepo.go +++ b/src/infra/runtime/runtimeQueryRepo.go @@ -22,7 +22,7 @@ func (repo RuntimeQueryRepo) GetVirtualHostPhpConfFilePath( primaryVhostPhpConfFilePathStr := "/app/conf/php-webserver/primary.conf" vhostPhpConfFilePathStr := "/app/conf/php-webserver/" + hostname.String() + ".conf" - primaryVhost, err := infraHelper.GetPrimaryVirtualHost() + primaryVhost, err := infraHelper.ReadPrimaryVirtualHostHostname() if err != nil { return vhostPhpConfFilePath, errors.New("PrimaryVhostNotFound: " + err.Error()) } @@ -46,10 +46,12 @@ func (repo RuntimeQueryRepo) GetVirtualHostPhpConfFilePath( func (repo RuntimeQueryRepo) ReadPhpVersionsInstalled() ( phpVersions []valueObject.PhpVersion, err error, ) { - output, err := infraHelper.RunCmd( - "awk", "/extprocessor lsphp/{print $2}", - infraEnvs.PhpWebserverMainConfFilePath, - ) + output, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "awk", + Args: []string{ + "/extprocessor lsphp/{print $2}", infraEnvs.PhpWebserverMainConfFilePath, + }, + }) if err != nil { return phpVersions, errors.New("GetPhpVersionFromFileFailed: " + err.Error()) } @@ -79,11 +81,13 @@ func (repo RuntimeQueryRepo) ReadPhpVersion( return phpVersion, err } - currentPhpVersionStr, err := infraHelper.RunCmd( - "awk", - "/lsapi:lsphp/ {gsub(/[^0-9]/, \"\", $2); print $2}", - vhostPhpConfFilePath.String(), - ) + currentPhpVersionStr, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "awk", + Args: []string{ + "/lsapi:lsphp/ {gsub(/[^0-9]/, \"\", $2); print $2}", + vhostPhpConfFilePath.String(), + }, + }) if err != nil { return phpVersion, errors.New("GetCurrentPhpVersionFromFileFailed: " + err.Error()) } @@ -103,9 +107,10 @@ func (repo RuntimeQueryRepo) ReadPhpVersion( } func (repo RuntimeQueryRepo) getPhpTimezones() (timezones []string, err error) { - timezonesRaw, err := infraHelper.RunCmd( - "php", "-r", "echo json_encode(DateTimeZone::listIdentifiers());", - ) + timezonesRaw, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "php", + Args: []string{"-r", "echo json_encode(DateTimeZone::listIdentifiers());"}, + }) if err != nil { return timezones, errors.New("GetPhpTimezonesFailed: " + err.Error()) } @@ -211,11 +216,15 @@ func (repo RuntimeQueryRepo) ReadPhpSettings( return phpSettings, err } - output, err := infraHelper.RunCmd( - "sed", "-n", - "/phpIniOverride\\s*{/,/}/ { /phpIniOverride\\s*{/d; /}/d; s/^[[:space:]]*//; s/[^[:space:]]*[[:space:]]//; p; }", - vhostPhpConfFilePath.String(), - ) + output, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "sed", + Args: []string{ + "-n", + "/phpIniOverride\\s*{/,/}/ { /phpIniOverride\\s*{/d; /}/d; " + + "s/^[[:space:]]*//; s/[^[:space:]]*[[:space:]]//; p; }", + vhostPhpConfFilePath.String(), + }, + }) if err != nil || output == "" { return phpSettings, errors.New("GetPhpSettingsFailed: " + err.Error()) } @@ -235,9 +244,10 @@ func (repo RuntimeQueryRepo) ReadPhpSettings( func (repo RuntimeQueryRepo) ReadPhpModules( version valueObject.PhpVersion, ) (phpModules []entity.PhpModule, err error) { - activeModuleList, err := infraHelper.RunCmd( - "/usr/local/lsws/lsphp"+version.GetWithoutDots()+"/bin/php", "-m", - ) + activeModuleList, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "/usr/local/lsws/lsphp" + version.GetWithoutDots() + "/bin/php", + Args: []string{"-m"}, + }) if err != nil { return phpModules, errors.New("GetActivePhpModulesFailed: " + err.Error()) } diff --git a/src/infra/runtime/runtimeQueryRepo_test.go b/src/infra/runtime/runtimeQueryRepo_test.go index 27c8d1de2..b5720d629 100644 --- a/src/infra/runtime/runtimeQueryRepo_test.go +++ b/src/infra/runtime/runtimeQueryRepo_test.go @@ -27,7 +27,7 @@ func TestRuntimeQueryRepo(t *testing.T) { }) t.Run("ReturnPhpConfigs", func(t *testing.T) { - primaryVhost, err := infraHelper.GetPrimaryVirtualHost() + primaryVhost, err := infraHelper.ReadPrimaryVirtualHostHostname() if err != nil { t.Errorf("PrimaryVirtualHostNotFound") } diff --git a/src/infra/scheduledTask/scheduledTaskCmdRepo.go b/src/infra/scheduledTask/scheduledTaskCmdRepo.go index abdc761dd..087c88fea 100644 --- a/src/infra/scheduledTask/scheduledTaskCmdRepo.go +++ b/src/infra/scheduledTask/scheduledTaskCmdRepo.go @@ -96,7 +96,10 @@ func (repo *ScheduledTaskCmdRepo) Run( startedAtUnixTime := valueObject.NewUnixTimeNow() cmdWithTimeout := "timeout --kill-after=10s " + timeoutStr + " " + pendingTask.Command.String() - rawOutput, rawError := infraHelper.RunCmdWithSubShell(cmdWithTimeout) + rawOutput, rawError := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: cmdWithTimeout, + ShouldRunWithSubShell: true, + }) finalStatus, _ := valueObject.NewScheduledTaskStatus("completed") if rawError != nil { diff --git a/src/infra/scheduledTask/scheduledTaskQueryRepo.go b/src/infra/scheduledTask/scheduledTaskQueryRepo.go index 37055a31f..51df8b72c 100644 --- a/src/infra/scheduledTask/scheduledTaskQueryRepo.go +++ b/src/infra/scheduledTask/scheduledTaskQueryRepo.go @@ -110,7 +110,7 @@ func (repo *ScheduledTaskQueryRepo) Read( slog.Debug( "ModelToEntityError", slog.Uint64("id", scheduledTaskModel.ID), - slog.Any("error", err), + slog.String("err", err.Error()), ) continue } diff --git a/src/infra/services/servicesCmdRepo.go b/src/infra/services/servicesCmdRepo.go index 67d827563..db8aed852 100644 --- a/src/infra/services/servicesCmdRepo.go +++ b/src/infra/services/servicesCmdRepo.go @@ -10,13 +10,13 @@ import ( "text/template" "time" - "github.com/alessio/shellescape" "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/valueObject" infraEnvs "github.com/goinfinite/os/src/infra/envs" infraHelper "github.com/goinfinite/os/src/infra/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" dbModel "github.com/goinfinite/os/src/infra/internalDatabase/model" + tkInfra "github.com/goinfinite/tk/src/infra" ) const SupervisorCtlBin string = "/usr/bin/supervisorctl -c /infinite/supervisord.conf" @@ -38,26 +38,49 @@ func NewServicesCmdRepo( } func (repo *ServicesCmdRepo) runCmdSteps( - stepType string, + stepsType string, steps []valueObject.UnixCommand, + totalExecTimeoutSecs valueObject.UnixTime, ) error { if len(steps) == 0 { return nil } + totalExecTimeoutSecsUint := uint64(totalExecTimeoutSecs.Int64()) + runCmdSettings := infraHelper.RunCmdSettings{ + ShouldRunWithSubShell: true, + ExecutionTimeoutSecs: totalExecTimeoutSecsUint, + } + + totalExecRemainingTime := totalExecTimeoutSecsUint for stepIndex, step := range steps { stepStr := step.String() - slog.Debug("Running"+stepType+"Step", slog.String("step", stepStr)) + slog.Debug("Running"+stepsType+"Step", slog.String("step", stepStr)) + + runCmdSettings.Command = stepStr - stepOutput, err := infraHelper.RunCmdWithSubShell(stepStr) + execTimeStart := time.Now() + stepOutput, err := infraHelper.RunCmd(runCmdSettings) if err != nil { - stepIndexStr := strconv.Itoa(stepIndex) - combinedOutput := stepOutput + " " + err.Error() - return errors.New( - stepType + "CmdStepError (" + stepIndexStr + "): " + combinedOutput, + errorMessage := stepOutput + " | " + err.Error() + if infraHelper.IsRunCmdTimeout(err) { + errorMessage = "Service" + stepsType + "TimeoutExceeded" + } + + return fmt.Errorf( + "%sCmdStepError (%s): %s", + stepsType, strconv.Itoa(stepIndex), errorMessage, ) } + + stepExecElapsedTimeSecs := uint64(time.Since(execTimeStart).Seconds()) + totalExecRemainingTime = totalExecRemainingTime - stepExecElapsedTimeSecs + if totalExecRemainingTime == 0 { + return errors.New("Service" + stepsType + "TimeoutExceeded") + } + + runCmdSettings.ExecutionTimeoutSecs = totalExecRemainingTime } time.Sleep(1 * time.Second) @@ -76,24 +99,28 @@ func (repo *ServicesCmdRepo) Start(name valueObject.ServiceName) error { return err } - err = repo.runCmdSteps("PreStart", serviceEntity.PreStartCmdSteps) + err = repo.runCmdSteps( + "PreStart", serviceEntity.PreStartCmdSteps, serviceEntity.PreStartTimeoutSecs, + ) if err != nil { return err } serviceNameStr := serviceEntity.Name.String() - startOutput, err := infraHelper.RunCmdWithSubShell( - SupervisorCtlBin + " start " + serviceNameStr, - ) + startOutput, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: SupervisorCtlBin + " start " + serviceNameStr, + ShouldRunWithSubShell: true, + }) if err != nil { combinedOutput := startOutput + " " + err.Error() if !strings.Contains(combinedOutput, "no such process") { return errors.New("SupervisorStartError: " + combinedOutput) } - addOutput, err := infraHelper.RunCmdWithSubShell( - SupervisorCtlBin + " add " + serviceNameStr, - ) + addOutput, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: SupervisorCtlBin + " add " + serviceNameStr, + ShouldRunWithSubShell: true, + }) if err != nil { combinedOutput = addOutput + " " + err.Error() return errors.New("SupervisorAddError: " + combinedOutput) @@ -102,7 +129,9 @@ func (repo *ServicesCmdRepo) Start(name valueObject.ServiceName) error { time.Sleep(1 * time.Second) - return repo.runCmdSteps("PostStart", serviceEntity.PostStartCmdSteps) + return repo.runCmdSteps( + "PostStart", serviceEntity.PostStartCmdSteps, serviceEntity.PostStartTimeoutSecs, + ) } func (repo *ServicesCmdRepo) Stop(name valueObject.ServiceName) error { @@ -116,14 +145,17 @@ func (repo *ServicesCmdRepo) Stop(name valueObject.ServiceName) error { return err } - err = repo.runCmdSteps("PreStop", serviceEntity.PreStopCmdSteps) + err = repo.runCmdSteps( + "PreStop", serviceEntity.PreStopCmdSteps, serviceEntity.PreStopTimeoutSecs, + ) if err != nil { return err } - stopOutput, err := infraHelper.RunCmdWithSubShell( - SupervisorCtlBin + " stop " + serviceEntity.Name.String(), - ) + stopOutput, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: SupervisorCtlBin + " stop " + serviceEntity.Name.String(), + ShouldRunWithSubShell: true, + }) if err != nil { combinedOutput := stopOutput + " " + err.Error() return errors.New("SupervisorStopError: " + combinedOutput) @@ -131,12 +163,16 @@ func (repo *ServicesCmdRepo) Stop(name valueObject.ServiceName) error { time.Sleep(1 * time.Second) - err = repo.runCmdSteps("Stop", serviceEntity.StopCmdSteps) + err = repo.runCmdSteps( + "Stop", serviceEntity.StopCmdSteps, serviceEntity.StopTimeoutSecs, + ) if err != nil { return err } - return repo.runCmdSteps("PostStop", serviceEntity.PostStopCmdSteps) + return repo.runCmdSteps( + "PostStop", serviceEntity.PostStopCmdSteps, serviceEntity.PostStartTimeoutSecs, + ) } func (repo *ServicesCmdRepo) Restart(name valueObject.ServiceName) error { @@ -266,7 +302,10 @@ environment={{range $index, $envVar := .Envs}}{{if $index}},{{end}}{{$envVar}}{{ return err } - reReadOutput, err := infraHelper.RunCmdWithSubShell(SupervisorCtlBin + " reread") + reReadOutput, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: SupervisorCtlBin + " reread", + ShouldRunWithSubShell: true, + }) if err != nil { combinedOutput := reReadOutput + " " + err.Error() return errors.New("SupervisorRereadError: " + combinedOutput) @@ -304,7 +343,10 @@ func (repo *ServicesCmdRepo) updateDefaultDirectoriesPermissions( serviceName valueObject.ServiceName, execUser valueObject.UnixUsername, ) error { execUserStr := execUser.String() - _, err := infraHelper.RunCmd("id", execUserStr) + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "id", + Args: []string{execUserStr}, + }) if err != nil { return errors.New("EnsureExecUserExistenceError: " + err.Error()) } @@ -312,7 +354,10 @@ func (repo *ServicesCmdRepo) updateDefaultDirectoriesPermissions( for _, defaultDir := range defaultServiceDirectories { defaultDirPath := "/app/" + defaultDir + "/" + serviceName.String() - _, err = infraHelper.RunCmd("chown", "-R", execUserStr, defaultDirPath) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "chown", + Args: []string{"-R", execUserStr, defaultDirPath}, + }) if err != nil { return errors.New("ChownDefaultDirsError: " + err.Error()) } @@ -344,7 +389,7 @@ func (repo *ServicesCmdRepo) replaceCmdStepsPlaceholders( placeholderValue = "" } - printablePlaceholderValue := shellescape.StripUnsafe(placeholderValue) + printablePlaceholderValue := infraHelper.ShellEscape{}.StripUnsafe(placeholderValue) cmdStepStr = strings.ReplaceAll( cmdStepStr, "%"+stepPlaceholder+"%", printablePlaceholderValue, @@ -365,98 +410,98 @@ func (repo *ServicesCmdRepo) replaceCmdStepsPlaceholders( func (repo *ServicesCmdRepo) CreateInstallable( createDto dto.CreateInstallableService, ) (installedServiceName valueObject.ServiceName, err error) { - readInstalledItemRequestDto := dto.ReadInstallableServicesItemsRequest{ - ServiceName: &createDto.Name, - } - installableService, err := repo.servicesQueryRepo.ReadFirstInstallableItem( - readInstalledItemRequestDto, + installableServiceEntity, err := repo.servicesQueryRepo.ReadFirstInstallableItem( + dto.ReadInstallableServicesItemsRequest{ServiceName: &createDto.Name}, ) if err != nil { return installedServiceName, err } - if installableService.Nature.String() == "multi" { + if installableServiceEntity.Nature == valueObject.ServiceNatureMulti { if createDto.StartupFile == nil { - if installableService.StartupFile == nil { - return installedServiceName, errors.New("MissingStartupFile") + if installableServiceEntity.StartupFile == nil { + return installedServiceName, errors.New("MultiNatureServiceRequiresStartupFile") } - createDto.StartupFile = installableService.StartupFile + createDto.StartupFile = installableServiceEntity.StartupFile } startupFileHash := infraHelper.GenStrongShortHash(createDto.StartupFile.String()) createDto.Name, err = valueObject.NewServiceName( - createDto.Name.String() + "-" + startupFileHash, + createDto.Name.String() + "_" + startupFileHash, ) if err != nil { return installedServiceName, errors.New( - "AddFileHashNameSuffixError: " + err.Error(), + "AppendFileHashNameSuffixError: " + err.Error(), ) } } installedServiceName = createDto.Name - serviceVersion := installableService.Versions[0] + serviceVersion := installableServiceEntity.Versions[0] if createDto.Version != nil { serviceVersion = *createDto.Version } - primaryHostname, err := infraHelper.GetPrimaryVirtualHost() + primaryHostname, err := infraHelper.ReadPrimaryVirtualHostHostname() if err != nil { return installedServiceName, err } - dummyValueGenerator := infraHelper.DummyValueGenerator{} + synthesizer := tkInfra.Synthesizer{} stepsPlaceholders := map[string]string{ - "randomPassword": dummyValueGenerator.GenPass(16), - "version": serviceVersion.String(), - "primaryHostname": primaryHostname.String(), + "randomPassword": synthesizer.PasswordFactory(16, false), + "randomPasswordWithSymbols": synthesizer.PasswordFactory(16, true), + "version": serviceVersion.String(), + "primaryHostname": primaryHostname.String(), + } + isSoloService := installableServiceEntity.Nature == valueObject.ServiceNatureSolo + if createDto.StartupFile != nil && !isSoloService { + stepsPlaceholders["startupFile"] = createDto.StartupFile.String() } installedServiceNameStr := strings.ToLower(installedServiceName.String()) installablesAssetsDirPath := fmt.Sprintf( "%s/%s/%s/assets", infraEnvs.InstallableServicesItemsDir, - installableService.Type.String(), installedServiceNameStr, + installableServiceEntity.Type.String(), installedServiceNameStr, ) stepsPlaceholders["installableServiceAssetsDirPath"] = installablesAssetsDirPath - if createDto.StartupFile != nil { - stepsPlaceholders["startupFile"] = createDto.StartupFile.String() - } - err = repo.createDefaultDirectories(installedServiceName) if err != nil { return installedServiceName, err } usableInstallCmdSteps, err := repo.replaceCmdStepsPlaceholders( - installableService.InstallCmdSteps, stepsPlaceholders, + installableServiceEntity.InstallCmdSteps, stepsPlaceholders, ) if err != nil { return installedServiceName, err } - err = repo.runCmdSteps("Install", usableInstallCmdSteps) + err = repo.runCmdSteps( + "Install", usableInstallCmdSteps, installableServiceEntity.InstallTimeoutSecs, + ) if err != nil { return installedServiceName, err } - if installableService.ExecUser != nil { + if installableServiceEntity.ExecUser != nil { err = repo.updateDefaultDirectoriesPermissions( - installableService.Name, *installableService.ExecUser, + installableServiceEntity.Name, *installableServiceEntity.ExecUser, ) if err != nil { return installedServiceName, err } } - startCmdSteps := []valueObject.UnixCommand{installableService.StartCmd} + startCmdSteps := []valueObject.UnixCommand{installableServiceEntity.StartCmd} usableCmdSteps := map[string][]valueObject.UnixCommand{ "start": startCmdSteps, - "stop": installableService.StopCmdSteps, - "preStart": installableService.PreStartCmdSteps, - "postStart": installableService.PostStartCmdSteps, - "preStop": installableService.PreStopCmdSteps, - "postStop": installableService.PostStopCmdSteps, + "stop": installableServiceEntity.StopCmdSteps, + "preStart": installableServiceEntity.PreStartCmdSteps, + "postStart": installableServiceEntity.PostStartCmdSteps, + "preStop": installableServiceEntity.PreStopCmdSteps, + "postStop": installableServiceEntity.PostStopCmdSteps, } for cmdStepType, cmdSteps := range usableCmdSteps { usableCmdSteps[cmdStepType], err = repo.replaceCmdStepsPlaceholders( @@ -474,44 +519,53 @@ func (repo *ServicesCmdRepo) CreateInstallable( usableStartCmd := usableStartCmdSteps[0] if len(createDto.PortBindings) == 0 { - createDto.PortBindings = installableService.PortBindings + createDto.PortBindings = installableServiceEntity.PortBindings } installedServiceModel := dbModel.NewInstalledService( - installedServiceName.String(), installableService.Nature.String(), - installableService.Type.String(), serviceVersion.String(), + installedServiceName.String(), installableServiceEntity.Nature.String(), + installableServiceEntity.Type.String(), serviceVersion.String(), usableStartCmd.String(), createDto.Envs, createDto.PortBindings, usableCmdSteps["stop"], usableCmdSteps["preStart"], usableCmdSteps["postStart"], usableCmdSteps["preStop"], usableCmdSteps["postStop"], nil, nil, nil, createDto.AutoStart, createDto.AutoRestart, createDto.TimeoutStartSecs, - createDto.MaxStartRetries, nil, nil, + createDto.MaxStartRetries, nil, nil, nil, ) - if installableService.ExecUser != nil { - execUserStr := installableService.ExecUser.String() + if installableServiceEntity.ExecUser != nil { + execUserStr := installableServiceEntity.ExecUser.String() installedServiceModel.ExecUser = &execUserStr } - if installableService.WorkingDirectory != nil { - workingDirectoryStr := installableService.WorkingDirectory.String() + if installableServiceEntity.WorkingDirectory != nil { + workingDirectoryStr := installableServiceEntity.WorkingDirectory.String() + installedServiceModel.WorkingDirectory = &workingDirectoryStr + } + if createDto.WorkingDir != nil { + workingDirectoryStr := createDto.WorkingDir.String() installedServiceModel.WorkingDirectory = &workingDirectoryStr } - if createDto.StartupFile != nil { + if createDto.StartupFile != nil && isSoloService { startupFileStr := createDto.StartupFile.String() installedServiceModel.StartupFile = &startupFileStr } - if installableService.LogOutputPath != nil { - logOutputPathStr := installableService.LogOutputPath.String() + if installableServiceEntity.LogOutputPath != nil { + logOutputPathStr := installableServiceEntity.LogOutputPath.String() installedServiceModel.LogOutputPath = &logOutputPathStr } - if installableService.LogErrorPath != nil { - logErrorPathStr := installableService.LogErrorPath.String() + if installableServiceEntity.LogErrorPath != nil { + logErrorPathStr := installableServiceEntity.LogErrorPath.String() installedServiceModel.LogErrorPath = &logErrorPathStr } + if installableServiceEntity.AvatarUrl != nil { + avatarUrlStr := installableServiceEntity.AvatarUrl.String() + installedServiceModel.AvatarUrl = &avatarUrlStr + } + err = repo.persistentDbSvc.Handler.Create(&installedServiceModel).Error if err != nil { return installedServiceName, err @@ -530,12 +584,12 @@ func (repo *ServicesCmdRepo) CreateCustom(createDto dto.CreateCustomService) err installedServiceModel := dbModel.NewInstalledService( createDto.Name.String(), customNature.String(), createDto.Type.String(), - createDto.Version.String(), createDto.StartCmd.String(), createDto.Envs, - createDto.PortBindings, createDto.StopCmdSteps, createDto.PreStartCmdSteps, - createDto.PostStartCmdSteps, createDto.PreStopCmdSteps, - createDto.PostStopCmdSteps, nil, nil, nil, createDto.AutoStart, - createDto.AutoRestart, createDto.TimeoutStartSecs, createDto.MaxStartRetries, - nil, nil, + createDto.Version.String(), createDto.StartCmd.String(), + createDto.Envs, createDto.PortBindings, createDto.StopCmdSteps, + createDto.PreStartCmdSteps, createDto.PostStartCmdSteps, + createDto.PreStopCmdSteps, createDto.PostStopCmdSteps, nil, nil, nil, + createDto.AutoStart, createDto.AutoRestart, createDto.TimeoutStartSecs, + createDto.MaxStartRetries, nil, nil, nil, ) if createDto.ExecUser != nil { @@ -558,6 +612,11 @@ func (repo *ServicesCmdRepo) CreateCustom(createDto dto.CreateCustomService) err installedServiceModel.LogErrorPath = &logErrorPathStr } + if createDto.AvatarUrl != nil { + avatarUrlStr := createDto.AvatarUrl.String() + installedServiceModel.AvatarUrl = &avatarUrlStr + } + err := repo.persistentDbSvc.Handler.Create(&installedServiceModel).Error if err != nil { return err @@ -629,7 +688,8 @@ func (repo *ServicesCmdRepo) Update(updateDto dto.UpdateService) error { updateMap["version"] = updateDto.Version.String() } - if updateDto.StartupFile != nil { + isSoloService := serviceEntity.Nature == valueObject.ServiceNatureSolo + if updateDto.StartupFile != nil && isSoloService { startupFileStr := updateDto.StartupFile.String() updateMap["startup_file"] = &startupFileStr } @@ -684,7 +744,7 @@ func (repo *ServicesCmdRepo) Update(updateDto dto.UpdateService) error { updateMap["working_directory"] = &workingDirectoryStr } - if updateDto.StartupFile != nil { + if updateDto.StartupFile != nil && isSoloService { startupFileStr := updateDto.StartupFile.String() updateMap["startup_file"] = &startupFileStr } @@ -715,6 +775,11 @@ func (repo *ServicesCmdRepo) Update(updateDto dto.UpdateService) error { updateMap["log_error_path"] = &logErrorPathStr } + if updateDto.AvatarUrl != nil && serviceEntity.Nature == valueObject.ServiceNatureCustom { + avatarUrlStr := updateDto.AvatarUrl.String() + updateMap["avatar_url"] = &avatarUrlStr + } + err = repo.persistentDbSvc.Handler. Model(&installedServiceModel). Where("name = ?", updateDto.Name.String()). @@ -742,15 +807,18 @@ func (repo *ServicesCmdRepo) Delete(name valueObject.ServiceName) error { return err } - err = repo.Stop(serviceEntity.Name) - if err != nil { - return err + if serviceEntity.Status.String() != "stopped" { + err = repo.Stop(serviceEntity.Name) + if err != nil { + return err + } } serviceNameStr := serviceEntity.Name.String() - removeOutput, err := infraHelper.RunCmdWithSubShell( - SupervisorCtlBin + " remove " + serviceNameStr, - ) + removeOutput, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: SupervisorCtlBin + " remove " + serviceNameStr, + ShouldRunWithSubShell: true, + }) if err != nil { combinedOutput := removeOutput + " " + err.Error() return errors.New("SupervisorRemoveError: " + combinedOutput) @@ -768,10 +836,19 @@ func (repo *ServicesCmdRepo) Delete(name valueObject.ServiceName) error { return err } - if serviceEntity.Nature.String() == "custom" { + if serviceEntity.Nature == valueObject.ServiceNatureCustom { return nil } + if serviceEntity.Nature == valueObject.ServiceNatureMulti { + nameWithoutHashStr := strings.Split(serviceNameStr, "_")[0] + nameWithoutHash, err := valueObject.NewServiceName(nameWithoutHashStr) + if err != nil { + return errors.New("CreateCustomServiceMultiNameError: " + err.Error()) + } + name = nameWithoutHash + } + readInstallableDto := dto.ReadInstallableServicesItemsRequest{ ServiceName: &name, } @@ -782,7 +859,10 @@ func (repo *ServicesCmdRepo) Delete(name valueObject.ServiceName) error { return errors.New("ReadInstallableEntityError: " + err.Error()) } - err = repo.runCmdSteps("Uninstall", installableEntity.UninstallCmdSteps) + err = repo.runCmdSteps( + "Uninstall", installableEntity.UninstallCmdSteps, + installableEntity.UninstallTimeoutSecs, + ) if err != nil { return err } @@ -792,7 +872,10 @@ func (repo *ServicesCmdRepo) Delete(name valueObject.ServiceName) error { slog.Debug("RemovingFilePath", slog.String("filePath", filePathStr)) - _, err := infraHelper.RunCmd("rm", "-rf", filePathStr) + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "rm", + Args: []string{"-rf", filePathStr}, + }) if err != nil { fileIndexStr := strconv.Itoa(fileIndex) return errors.New( @@ -816,15 +899,19 @@ func (repo *ServicesCmdRepo) RefreshInstallableItems() error { infraEnvs.InfiniteOsMainDir, infraEnvs.InstallableServicesItemsRepoBranch, infraEnvs.InstallableServicesItemsRepoUrl, ) - _, err = infraHelper.RunCmdWithSubShell(repoCloneCmd) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: repoCloneCmd, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("CloneServicesItemsRepoError: " + err.Error()) } } - _, err = infraHelper.RunCmdWithSubShell( - "cd " + infraEnvs.InstallableServicesItemsDir + ";" + + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "cd " + infraEnvs.InstallableServicesItemsDir + ";" + "git clean -f -d; git reset --hard HEAD; git pull", - ) + ShouldRunWithSubShell: true, + }) return err } diff --git a/src/infra/services/servicesCmdRepo_test.go b/src/infra/services/servicesCmdRepo_test.go index ff2702d0a..337fffa83 100644 --- a/src/infra/services/servicesCmdRepo_test.go +++ b/src/infra/services/servicesCmdRepo_test.go @@ -28,16 +28,14 @@ func TestServiceCmdRepo(t *testing.T) { serviceName, _ := valueObject.NewServiceName("python-ws") serviceType, _ := valueObject.NewServiceType("webserver") unixCommand, _ := valueObject.NewUnixCommand("python3 -m http.server") - ipAddress := valueObject.NewLocalhostIpAddress() - operatorAccountId, _ := valueObject.NewAccountId(0) - - createDto := dto.NewCreateCustomService( - serviceName, serviceType, unixCommand, []valueObject.ServiceEnv{}, - []valueObject.PortBinding{portBinding}, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, operatorAccountId, ipAddress, - ) - - err = servicesCmdRepo.CreateCustom(createDto) + err = servicesCmdRepo.CreateCustom(dto.CreateCustomService{ + Name: serviceName, + Type: serviceType, + StartCmd: unixCommand, + PortBindings: []valueObject.PortBinding{portBinding}, + OperatorAccountId: valueObject.AccountIdSystem, + OperatorIpAddress: valueObject.IpAddressSystem, + }) if err != nil { t.Errorf("CreateCustomServiceFailed : %v", err) return diff --git a/src/infra/services/servicesQueryRepo.go b/src/infra/services/servicesQueryRepo.go index 55c22f27e..53597cb7a 100644 --- a/src/infra/services/servicesQueryRepo.go +++ b/src/infra/services/servicesQueryRepo.go @@ -16,8 +16,9 @@ import ( infraEnvs "github.com/goinfinite/os/src/infra/envs" infraHelper "github.com/goinfinite/os/src/infra/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" + dbHelper "github.com/goinfinite/os/src/infra/internalDatabase/helper" dbModel "github.com/goinfinite/os/src/infra/internalDatabase/model" - "github.com/iancoleman/strcase" + tkInfra "github.com/goinfinite/tk/src/infra" "github.com/shirou/gopsutil/process" ) @@ -118,9 +119,11 @@ func (repo *ServicesQueryRepo) readPidMetrics( func (repo *ServicesQueryRepo) readStoppedServicesNames() ([]string, error) { stoppedServicesNames := []string{} - rawStoppedServices, err := infraHelper.RunCmdWithSubShell( - SupervisorCtlBin + " status | grep -v 'RUNNING' | awk '{print $1}'", - ) + readStoppedServicesCmd := SupervisorCtlBin + " status | grep -v 'RUNNING' | awk '{print $1}'" + rawStoppedServices, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: readStoppedServicesCmd, + ShouldRunWithSubShell: true, + }) if err != nil { return stoppedServicesNames, err } @@ -157,9 +160,10 @@ func (repo *ServicesQueryRepo) installedServicesMetricsFactory( serviceNameStr := installedService.Name.String() - supervisorStatus, _ := infraHelper.RunCmdWithSubShell( - SupervisorCtlBin + " status " + serviceNameStr, - ) + supervisorStatus, _ := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: SupervisorCtlBin + " status " + serviceNameStr, + ShouldRunWithSubShell: true, + }) if len(supervisorStatus) == 0 { installedServicesWithMetrics = append( installedServicesWithMetrics, serviceWithoutMetrics, @@ -240,66 +244,50 @@ func (repo *ServicesQueryRepo) installedServicesMetricsFactory( func (repo *ServicesQueryRepo) ReadInstalledItems( requestDto dto.ReadInstalledServicesItemsRequest, ) (installedItemsDto dto.ReadInstalledServicesItemsResponse, err error) { - model := dbModel.InstalledService{} - if requestDto.ServiceName != nil { - model.Name = requestDto.ServiceName.String() - } + installedServiceModel := dbModel.InstalledService{} if requestDto.ServiceNature != nil { - model.Nature = requestDto.ServiceNature.String() + installedServiceModel.Nature = requestDto.ServiceNature.String() } if requestDto.ServiceType != nil { - model.Type = requestDto.ServiceType.String() + installedServiceModel.Type = requestDto.ServiceType.String() } - dbQuery := repo.persistentDbSvc.Handler.Model(&model).Where(&model) + dbQuery := repo.persistentDbSvc.Handler. + Model(&installedServiceModel). + Where(&installedServiceModel) + if requestDto.ServiceName != nil { + serviceNameLike := "%" + requestDto.ServiceName.String() + "%" + dbQuery = dbQuery.Where("name LIKE ?", serviceNameLike) + } - var itemsTotal int64 - err = dbQuery.Count(&itemsTotal).Error + paginatedDbQuery, responsePagination, err := dbHelper.PaginationQueryBuilder( + dbQuery, requestDto.Pagination, + ) if err != nil { return installedItemsDto, errors.New( - "CountInstalledServicesItemsTotalError: " + err.Error(), + "PaginationQueryBuilderError: " + err.Error(), ) } - dbQuery = dbQuery.Limit(int(requestDto.Pagination.ItemsPerPage)) - if requestDto.Pagination.LastSeenId == nil { - offset := int(requestDto.Pagination.PageNumber) * int(requestDto.Pagination.ItemsPerPage) - dbQuery = dbQuery.Offset(offset) - } else { - dbQuery = dbQuery.Where("id > ?", requestDto.Pagination.LastSeenId.String()) - } - if requestDto.Pagination.SortBy != nil { - orderStatement := requestDto.Pagination.SortBy.String() - orderStatement = strcase.ToSnake(orderStatement) - if orderStatement == "id" { - orderStatement = "ID" - } - - if requestDto.Pagination.SortDirection != nil { - orderStatement += " " + requestDto.Pagination.SortDirection.String() - } - - dbQuery = dbQuery.Order(orderStatement) - } - - resultModels := []dbModel.InstalledService{} - err = dbQuery.Find(&resultModels).Error + installedServiceModels := []dbModel.InstalledService{} + err = paginatedDbQuery.Find(&installedServiceModels).Error if err != nil { return installedItemsDto, errors.New("ReadInstalledServicesItemsError") } - entities := []entity.InstalledService{} - for _, resultModel := range resultModels { + installedServiceEntities := []entity.InstalledService{} + for _, resultModel := range installedServiceModels { entity, err := resultModel.ToEntity() if err != nil { slog.Debug( "InstalledServiceItemModelToEntityError", - slog.String("name", resultModel.Name), slog.Any("error", err), + slog.String("name", resultModel.Name), + slog.String("err", err.Error()), ) continue } - entities = append(entities, entity) + installedServiceEntities = append(installedServiceEntities, entity) } stoppedServicesNames, err := repo.readStoppedServicesNames() @@ -310,37 +298,46 @@ func (repo *ServicesQueryRepo) ReadInstalledItems( } stoppedStatus, _ := valueObject.NewServiceStatus("stopped") - for entityIndex, entity := range entities { - if !slices.Contains(stoppedServicesNames, entity.Name.String()) { + for serviceEntityIndex, serviceEntity := range installedServiceEntities { + if !slices.Contains(stoppedServicesNames, serviceEntity.Name.String()) { continue } - entities[entityIndex].Status = stoppedStatus + installedServiceEntities[serviceEntityIndex].Status = stoppedStatus } - itemsTotalUint := uint64(itemsTotal) - pagesTotal := uint32( - math.Ceil(float64(itemsTotal) / float64(requestDto.Pagination.ItemsPerPage)), - ) + if requestDto.ServiceStatus != nil { + filteredServiceEntities := []entity.InstalledService{} + for _, serviceEntity := range installedServiceEntities { + if serviceEntity.Status != *requestDto.ServiceStatus { + continue + } + + filteredServiceEntities = append(filteredServiceEntities, serviceEntity) + } + + installedServiceEntities = filteredServiceEntities + + itemsTotal := uint64(len(filteredServiceEntities)) + responsePagination.ItemsTotal = &itemsTotal + + pagesTotal := uint32( + math.Ceil(float64(itemsTotal) / float64(responsePagination.ItemsPerPage)), + ) + responsePagination.PagesTotal = &pagesTotal + } responseDto := dto.ReadInstalledServicesItemsResponse{ - Pagination: dto.Pagination{ - PageNumber: requestDto.Pagination.PageNumber, - ItemsPerPage: requestDto.Pagination.ItemsPerPage, - SortBy: requestDto.Pagination.SortBy, - SortDirection: requestDto.Pagination.SortDirection, - PagesTotal: &pagesTotal, - ItemsTotal: &itemsTotalUint, - }, + Pagination: responsePagination, } if requestDto.ShouldIncludeMetrics != nil && *requestDto.ShouldIncludeMetrics { responseDto.InstalledServicesWithMetrics = repo.installedServicesMetricsFactory( - entities, + installedServiceEntities, ) return responseDto, nil } - responseDto.InstalledServices = entities + responseDto.InstalledServices = installedServiceEntities return responseDto, nil } @@ -398,14 +395,13 @@ func (repo *ServicesQueryRepo) parseManifestCmdSteps( func (repo *ServicesQueryRepo) installableServiceFactory( serviceFilePath valueObject.UnixFilePath, ) (installableService entity.InstallableService, err error) { - serviceMap, err := infraHelper.FileSerializedDataToMap(serviceFilePath) + serviceMap, err := tkInfra.FileDeserializer(serviceFilePath.String()) if err != nil { return installableService, err } requiredParams := []string{ - "name", "nature", "type", "startCmd", "description", - "installCmdSteps", + "name", "nature", "type", "startCmd", "description", "installCmdSteps", } for _, requiredParam := range requiredParams { if serviceMap[requiredParam] != nil { @@ -511,6 +507,16 @@ func (repo *ServicesQueryRepo) installableServiceFactory( } } + stopTimeoutSecs, _ := valueObject.NewUnixTime(600) + if serviceMap["stopTimeoutSecs"] != nil { + stopTimeoutSecs, err = valueObject.NewUnixTime( + serviceMap["stopTimeoutSecs"], + ) + if err != nil { + return installableService, err + } + } + stopCmdSteps := []valueObject.UnixCommand{} if serviceMap["stopCmdSteps"] != nil { stopCmdSteps, err = repo.parseManifestCmdSteps( @@ -521,6 +527,16 @@ func (repo *ServicesQueryRepo) installableServiceFactory( } } + installTimeoutSecs, _ := valueObject.NewUnixTime(600) + if serviceMap["installTimeoutSecs"] != nil { + installTimeoutSecs, err = valueObject.NewUnixTime( + serviceMap["installTimeoutSecs"], + ) + if err != nil { + return installableService, err + } + } + installCmdSteps := []valueObject.UnixCommand{} if serviceMap["installCmdSteps"] != nil { installCmdSteps, err = repo.parseManifestCmdSteps( @@ -531,6 +547,16 @@ func (repo *ServicesQueryRepo) installableServiceFactory( } } + uninstallTimeoutSecs, _ := valueObject.NewUnixTime(600) + if serviceMap["uninstallTimeoutSecs"] != nil { + uninstallTimeoutSecs, err = valueObject.NewUnixTime( + serviceMap["uninstallTimeoutSecs"], + ) + if err != nil { + return installableService, err + } + } + uninstallCmdSteps := []valueObject.UnixCommand{} if serviceMap["uninstallCmdSteps"] != nil { uninstallCmdSteps, err = repo.parseManifestCmdSteps( @@ -561,6 +587,16 @@ func (repo *ServicesQueryRepo) installableServiceFactory( } } + preStartTimeoutSecs, _ := valueObject.NewUnixTime(600) + if serviceMap["preStartTimeoutSecs"] != nil { + preStartTimeoutSecs, err = valueObject.NewUnixTime( + serviceMap["preStartTimeoutSecs"], + ) + if err != nil { + return installableService, err + } + } + preStartCmdSteps := []valueObject.UnixCommand{} if serviceMap["preStartCmdSteps"] != nil { preStartCmdSteps, err = repo.parseManifestCmdSteps( @@ -571,6 +607,16 @@ func (repo *ServicesQueryRepo) installableServiceFactory( } } + postStartTimeoutSecs, _ := valueObject.NewUnixTime(600) + if serviceMap["postStartTimeoutSecs"] != nil { + postStartTimeoutSecs, err = valueObject.NewUnixTime( + serviceMap["postStartTimeoutSecs"], + ) + if err != nil { + return installableService, err + } + } + postStartCmdSteps := []valueObject.UnixCommand{} if serviceMap["postStartCmdSteps"] != nil { postStartCmdSteps, err = repo.parseManifestCmdSteps( @@ -581,6 +627,16 @@ func (repo *ServicesQueryRepo) installableServiceFactory( } } + preStopTimeoutSecs, _ := valueObject.NewUnixTime(600) + if serviceMap["preStopTimeoutSecs"] != nil { + preStopTimeoutSecs, err = valueObject.NewUnixTime( + serviceMap["preStopTimeoutSecs"], + ) + if err != nil { + return installableService, err + } + } + preStopCmdSteps := []valueObject.UnixCommand{} if serviceMap["preStopCmdSteps"] != nil { preStopCmdSteps, err = repo.parseManifestCmdSteps( @@ -591,6 +647,16 @@ func (repo *ServicesQueryRepo) installableServiceFactory( } } + postStopTimeoutSecs, _ := valueObject.NewUnixTime(600) + if serviceMap["postStopTimeoutSecs"] != nil { + postStopTimeoutSecs, err = valueObject.NewUnixTime( + serviceMap["postStopTimeoutSecs"], + ) + if err != nil { + return installableService, err + } + } + postStopCmdSteps := []valueObject.UnixCommand{} if serviceMap["postStopCmdSteps"] != nil { postStopCmdSteps, err = repo.parseManifestCmdSteps( @@ -668,10 +734,12 @@ func (repo *ServicesQueryRepo) installableServiceFactory( return entity.NewInstallableService( manifestVersion, name, nature, serviceType, startCommand, description, versions, - envs, portBindings, stopCmdSteps, installCmdSteps, uninstallCmdSteps, - uninstallFilePaths, preStartCmdSteps, postStartCmdSteps, preStopCmdSteps, - postStopCmdSteps, execUserPtr, workingDirectoryPtr, startupFilePtr, - logOutputPathPtr, logErrorPathPtr, estimatedSizeBytesPtr, avatarUrlPtr, + envs, portBindings, stopTimeoutSecs, stopCmdSteps, installTimeoutSecs, + installCmdSteps, uninstallTimeoutSecs, uninstallCmdSteps, uninstallFilePaths, + preStartTimeoutSecs, preStartCmdSteps, postStartTimeoutSecs, postStartCmdSteps, + preStopTimeoutSecs, preStopCmdSteps, postStopTimeoutSecs, postStopCmdSteps, + execUserPtr, workingDirectoryPtr, startupFilePtr, logOutputPathPtr, + logErrorPathPtr, avatarUrlPtr, estimatedSizeBytesPtr, ), nil } @@ -689,11 +757,12 @@ func (repo *ServicesQueryRepo) ReadInstallableItems( } } - rawInstallableFilesList, err := infraHelper.RunCmdWithSubShell( - "find " + infraEnvs.InstallableServicesItemsDir + " -type f " + + rawInstallableFilesList, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "find " + infraEnvs.InstallableServicesItemsDir + " -type f " + "\\( -name '*.json' -o -name '*.yaml' -o -name '*.yml' \\) " + "-not -path '*/.*' -not -name '.*'", - ) + ShouldRunWithSubShell: true, + }) if err != nil { return installableItemsDto, errors.New( "ReadInstallableFilesError: " + err.Error(), @@ -721,7 +790,8 @@ func (repo *ServicesQueryRepo) ReadInstallableItems( if err != nil { slog.Debug( "CatalogMarketplaceItemFactoryError", - slog.String("filePath", itemFilePath.String()), slog.Any("err", err), + slog.String("filePath", itemFilePath.String()), + slog.String("err", err.Error()), ) continue } diff --git a/src/infra/ssl/sslCmdRepo.go b/src/infra/ssl/sslCmdRepo.go index 81521b70b..4e4a3c857 100644 --- a/src/infra/ssl/sslCmdRepo.go +++ b/src/infra/ssl/sslCmdRepo.go @@ -2,7 +2,7 @@ package sslInfra import ( "errors" - "log" + "log/slog" "os" "github.com/goinfinite/os/src/domain/dto" @@ -12,7 +12,7 @@ import ( internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" o11yInfra "github.com/goinfinite/os/src/infra/o11y" vhostInfra "github.com/goinfinite/os/src/infra/vhost" - mappingInfra "github.com/goinfinite/os/src/infra/vhost/mapping" + tkInfra "github.com/goinfinite/tk/src/infra" ) const DomainOwnershipValidationUrlPath string = "/validateOwnership" @@ -20,7 +20,8 @@ const DomainOwnershipValidationUrlPath string = "/validateOwnership" type SslCmdRepo struct { persistentDbSvc *internalDbInfra.PersistentDatabaseService transientDbSvc *internalDbInfra.TransientDatabaseService - sslQueryRepo SslQueryRepo + sslQueryRepo *SslQueryRepo + vhostQueryRepo *vhostInfra.VirtualHostQueryRepo } func NewSslCmdRepo( @@ -30,78 +31,31 @@ func NewSslCmdRepo( return &SslCmdRepo{ persistentDbSvc: persistentDbSvc, transientDbSvc: transientDbSvc, - sslQueryRepo: SslQueryRepo{}, + sslQueryRepo: &SslQueryRepo{}, + vhostQueryRepo: vhostInfra.NewVirtualHostQueryRepo(persistentDbSvc), } } -func (repo *SslCmdRepo) deleteCurrentSsl(vhost valueObject.Fqdn) error { - vhostStr := vhost.String() - - vhostCertFilePath := infraEnvs.PkiConfDir + "/" + vhostStr + ".crt" - vhostCertFileExists := infraHelper.FileExists(vhostCertFilePath) - if vhostCertFileExists { - err := os.Remove(vhostCertFilePath) - if err != nil { - return errors.New("DeleteCertFileError: " + err.Error()) - } - } - - vhostCertKeyFilePath := infraEnvs.PkiConfDir + "/" + vhostStr + ".key" - vhostCertKeyFileExists := infraHelper.FileExists(vhostCertKeyFilePath) - if vhostCertKeyFileExists { - err := os.Remove(vhostCertKeyFilePath) - if err != nil { - return errors.New("DeleteCertKeyFileError: " + err.Error()) - } - } - - return nil -} - -func (repo *SslCmdRepo) ReplaceWithSelfSigned(vhostName valueObject.Fqdn) error { - vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(repo.persistentDbSvc) - aliases, err := vhostQueryRepo.ReadAliasesByParentHostname(vhostName) - if err != nil { - return errors.New("ReadVhostAliasesError: " + err.Error()) - } - - aliasesHostname := []string{} - for _, alias := range aliases { - aliasesHostname = append(aliasesHostname, alias.Hostname.String()) - } - - err = repo.deleteCurrentSsl(vhostName) - if err != nil { - return err - } - - return infraHelper.CreateSelfSignedSsl( - infraEnvs.PkiConfDir, - vhostName.String(), - aliasesHostname, - ) -} - func (repo *SslCmdRepo) dnsFilterFunctionalHostnames( - vhostNames []valueObject.Fqdn, + vhostHostnames []valueObject.Fqdn, serverPublicIpAddress valueObject.IpAddress, ) []valueObject.Fqdn { functionalHostnames := []valueObject.Fqdn{} - for _, vhostName := range vhostNames { - wwwVhostName, err := valueObject.NewFqdn("www." + vhostName.String()) + for _, vhostHostname := range vhostHostnames { + wwwVirtualHostHostname, err := valueObject.NewFqdn("www." + vhostHostname.String()) if err != nil { continue } - vhostNames = append(vhostNames, wwwVhostName) + vhostHostnames = append(vhostHostnames, wwwVirtualHostHostname) } serverPublicIpAddressStr := serverPublicIpAddress.String() - for _, vhostName := range vhostNames { - vhostNameStr := vhostName.String() + for _, vhostHostname := range vhostHostnames { + vhostHostnameStr := vhostHostname.String() - hostnameRecords, err := infraHelper.DnsLookup(vhostNameStr, nil) + hostnameRecords, err := infraHelper.DnsLookup(vhostHostnameStr, nil) if err != nil || len(hostnameRecords) == 0 { continue } @@ -111,7 +65,7 @@ func (repo *SslCmdRepo) dnsFilterFunctionalHostnames( continue } - functionalHostnames = append(functionalHostnames, vhostName) + functionalHostnames = append(functionalHostnames, vhostHostname) break } } @@ -120,8 +74,8 @@ func (repo *SslCmdRepo) dnsFilterFunctionalHostnames( } func (repo *SslCmdRepo) createOwnershipValidationMapping( - mappingCmdRepo *mappingInfra.MappingCmdRepo, - targetVhostName valueObject.Fqdn, + mappingCmdRepo *vhostInfra.MappingCmdRepo, + targetVirtualHostHostname valueObject.Fqdn, expectedOwnershipHash valueObject.Hash, operatorAccountId valueObject.AccountId, operatorIpAddress valueObject.IpAddress, @@ -133,22 +87,19 @@ func (repo *SslCmdRepo) createOwnershipValidationMapping( targetValue, _ := valueObject.NewMappingTargetValue( expectedOwnershipHash.String(), targetType, ) + shouldUpgradeInsecureRequests := false inlineHtmlMapping := dto.NewCreateMapping( - targetVhostName, path, matchPattern, targetType, &targetValue, &httpResponseCode, + targetVirtualHostHostname, path, matchPattern, targetType, &targetValue, + &httpResponseCode, &shouldUpgradeInsecureRequests, nil, operatorAccountId, operatorIpAddress, ) - mappingId, err = mappingCmdRepo.Create(inlineHtmlMapping) - if err != nil { - return mappingId, err - } - - return mappingId, nil + return mappingCmdRepo.Create(inlineHtmlMapping) } func (repo *SslCmdRepo) httpFilterFunctionalHostnames( - vhostNames []valueObject.Fqdn, + vhostHostnames []valueObject.Fqdn, expectedOwnershipHash valueObject.Hash, serverPublicIpAddress valueObject.IpAddress, operatorAccountId valueObject.AccountId, @@ -158,12 +109,12 @@ func (repo *SslCmdRepo) httpFilterFunctionalHostnames( serverPublicIpAddressStr := serverPublicIpAddress.String() expectedHashStr := expectedOwnershipHash.String() - mappingCmdRepo := mappingInfra.NewMappingCmdRepo(repo.persistentDbSvc) + mappingCmdRepo := vhostInfra.NewMappingCmdRepo(repo.persistentDbSvc) - for _, vhostName := range vhostNames { - vhostNameStr := vhostName.String() + for _, vhostHostname := range vhostHostnames { + vhostHostnameStr := vhostHostname.String() ownershipValidationMappingId, err := repo.createOwnershipValidationMapping( - mappingCmdRepo, vhostName, expectedOwnershipHash, operatorAccountId, + mappingCmdRepo, vhostHostname, expectedOwnershipHash, operatorAccountId, operatorIpAddress, ) if err != nil { @@ -171,17 +122,19 @@ func (repo *SslCmdRepo) httpFilterFunctionalHostnames( } hashUrlPath := DomainOwnershipValidationUrlPath - hashUrlFull := "https://" + vhostNameStr + hashUrlPath + hashUrlFull := "https://" + vhostHostnameStr + hashUrlPath curlBaseCmd := "curl -skLm 10 " - sniFlag := "--resolve " + vhostNameStr + ":443:" + serverPublicIpAddressStr - ownershipHashFound, err := infraHelper.RunCmdWithSubShell( - curlBaseCmd + sniFlag + " " + hashUrlFull, - ) + sniFlag := "--resolve " + vhostHostnameStr + ":443:" + serverPublicIpAddressStr + ownershipHashFound, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: curlBaseCmd + sniFlag + " " + hashUrlFull, + ShouldRunWithSubShell: true, + }) if err != nil { hashUrlFull = "https://" + serverPublicIpAddressStr + hashUrlPath - ownershipHashFound, err = infraHelper.RunCmdWithSubShell( - curlBaseCmd + "-H \"Host: " + vhostNameStr + "\" " + hashUrlFull, - ) + ownershipHashFound, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: curlBaseCmd + "-H \"Host: " + vhostHostnameStr + "\" " + hashUrlFull, + ShouldRunWithSubShell: true, + }) if err != nil { continue } @@ -191,11 +144,11 @@ func (repo *SslCmdRepo) httpFilterFunctionalHostnames( continue } - functionalHostnames = append(functionalHostnames, vhostName) + functionalHostnames = append(functionalHostnames, vhostHostname) err = mappingCmdRepo.Delete(ownershipValidationMappingId) if err != nil { - log.Printf("DeleteOwnershipValidationMappingError: %s", err.Error()) + slog.Error("DeleteOwnershipValidationMappingError", slog.String("error", err.Error())) } } @@ -222,7 +175,10 @@ func (repo *SslCmdRepo) issueValidSsl( certbotCmd += " -d " + functionalHostname.String() } - _, err := infraHelper.RunCmdWithSubShell(certbotCmd) + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: certbotCmd, + ShouldRunWithSubShell: true, + }) if err != nil { return errors.New("GenerateValidSslCertError: " + err.Error()) } @@ -247,143 +203,175 @@ func (repo *SslCmdRepo) issueValidSsl( return infraHelper.ReloadWebServer() } -func (repo *SslCmdRepo) ReplaceWithValidSsl(replaceDto dto.ReplaceWithValidSsl) error { +func (repo *SslCmdRepo) CreatePubliclyTrusted( + createDto dto.CreatePubliclyTrustedSslPair, +) (sslPairId valueObject.SslPairId, err error) { o11yQueryRepo := o11yInfra.NewO11yQueryRepo(repo.transientDbSvc) serverPublicIpAddress, err := o11yQueryRepo.ReadServerPublicIpAddress() if err != nil { - return err + return sslPairId, err + } + + vhostReadResponse, err := repo.vhostQueryRepo.Read(dto.ReadVirtualHostsRequest{ + Pagination: dto.PaginationSingleItem, + Hostname: &createDto.VirtualHostHostname, + }) + if err != nil { + return sslPairId, errors.New("ReadVirtualHostEntitiesError: " + err.Error()) } + if len(vhostReadResponse.VirtualHosts) == 0 { + return sslPairId, errors.New("VirtualHostNotFound") + } + + virtualHostsHostnames := []valueObject.Fqdn{createDto.VirtualHostHostname} + virtualHostsHostnames = append( + virtualHostsHostnames, vhostReadResponse.VirtualHosts[0].AliasesHostnames..., + ) + dnsFunctionalHostnames := repo.dnsFilterFunctionalHostnames( - replaceDto.VirtualHostsHostnames, serverPublicIpAddress, + virtualHostsHostnames, serverPublicIpAddress, ) if len(dnsFunctionalHostnames) == 0 { - return errors.New("NoSslHostnamePointingToServerIpAddress") + return sslPairId, errors.New("NoSslHostnamePointingToServerIpAddress") } - expectedOwnershipHash, err := repo.sslQueryRepo.GetOwnershipValidationHash( - replaceDto.Certificate.CertificateContent, - ) + synthesizer := tkInfra.Synthesizer{} + dummyValue := synthesizer.PasswordFactory(32, false) + dummyHash := infraHelper.GenStrongHash(dummyValue) + + expectedOwnershipHash, err := valueObject.NewHash(dummyHash) if err != nil { - return errors.New( - "CreateOwnershipValidationHashError: " + err.Error(), - ) + return sslPairId, errors.New("CreateOwnershipValidationHashError: " + err.Error()) } + httpFunctionalHostnames := repo.httpFilterFunctionalHostnames( dnsFunctionalHostnames, expectedOwnershipHash, serverPublicIpAddress, - replaceDto.OperatorAccountId, replaceDto.OperatorIpAddress, + createDto.OperatorAccountId, createDto.OperatorIpAddress, ) if len(httpFunctionalHostnames) == 0 { - return errors.New("NoSslHostnamePassingHttpOwnershipValidation") + return sslPairId, errors.New("NoSslHostnamePassingHttpOwnershipValidation") } - return repo.issueValidSsl( - replaceDto.VirtualHostsHostnames[0], httpFunctionalHostnames, - ) + err = repo.issueValidSsl(createDto.VirtualHostHostname, httpFunctionalHostnames) + if err != nil { + return sslPairId, errors.New("IssueValidSslError: " + err.Error()) + } + + sslPairEntity, err := repo.sslQueryRepo.ReadFirst(dto.ReadSslPairsRequest{ + VirtualHostHostname: &createDto.VirtualHostHostname, + }) + if err != nil { + return sslPairId, errors.New("SslPairNotFound: " + err.Error()) + } + + return sslPairEntity.Id, nil } func (repo *SslCmdRepo) Create( - createSslPair dto.CreateSslPair, + createDto dto.CreateSslPair, ) (sslPairId valueObject.SslPairId, err error) { - if len(createSslPair.VirtualHostsHostnames) == 0 { + if len(createDto.VirtualHostsHostnames) == 0 { return sslPairId, errors.New("EmptyVirtualHosts") } - firstVhostName := createSslPair.VirtualHostsHostnames[0] - firstVhostNameStr := firstVhostName.String() - firstVhostCertFilePath := infraEnvs.PkiConfDir + "/" + firstVhostNameStr + ".crt" - firstVhostCertKeyFilePath := infraEnvs.PkiConfDir + "/" + firstVhostNameStr + ".key" - - for _, vhostName := range createSslPair.VirtualHostsHostnames { - vhostStr := vhostName.String() - vhostCertFilePath := infraEnvs.PkiConfDir + "/" + vhostStr + ".crt" - vhostCertKeyFilePath := infraEnvs.PkiConfDir + "/" + vhostStr + ".key" - - shouldBeSymlink := vhostStr != firstVhostNameStr - if shouldBeSymlink { - shouldOverwrite := true - err := infraHelper.CreateSymlink( - firstVhostCertFilePath, vhostCertFilePath, shouldOverwrite, - ) - if err != nil { - log.Printf( - "CreateSslCertSymlinkError (%s): %s", vhostName.String(), err.Error(), - ) - continue - } - - err = infraHelper.CreateSymlink( - firstVhostCertKeyFilePath, vhostCertKeyFilePath, shouldOverwrite, - ) - if err != nil { - log.Printf( - "CreateSslKeySymlinkError (%s): %s", vhostName.String(), err.Error(), - ) - continue - } + for _, vhostHostname := range createDto.VirtualHostsHostnames { + vhostHostnameStr := vhostHostname.String() + vhostCertFilePath := infraEnvs.PkiConfDir + "/" + vhostHostnameStr + ".crt" + vhostCertKeyFilePath := infraEnvs.PkiConfDir + "/" + vhostHostnameStr + ".key" - continue + certContentStr := createDto.Certificate.CertificateContent.String() + if createDto.ChainCertificates != nil { + certContentStr += "\n" + createDto.ChainCertificates.CertificateContent.String() } shouldOverwrite := true - err := infraHelper.UpdateFile( - vhostCertFilePath, - createSslPair.Certificate.CertificateContent.String(), - shouldOverwrite, - ) + err := infraHelper.UpdateFile(vhostCertFilePath, certContentStr, shouldOverwrite) if err != nil { - return sslPairId, err + return sslPairId, errors.New("UpdateCertFileError: " + err.Error()) } err = infraHelper.UpdateFile( - vhostCertKeyFilePath, createSslPair.Key.String(), shouldOverwrite, + vhostCertKeyFilePath, createDto.Key.String(), shouldOverwrite, ) if err != nil { - return sslPairId, err + return sslPairId, errors.New("UpdateCertKeyFileError: " + err.Error()) } } - createdSslPairId, err := repo.sslQueryRepo.ReadByVhostHostname(firstVhostName) + sslPairEntity, err := repo.sslQueryRepo.ReadFirst(dto.ReadSslPairsRequest{ + VirtualHostHostname: &createDto.VirtualHostsHostnames[0], + }) if err != nil { - return sslPairId, err + return sslPairId, errors.New("SslPairNotFound: " + err.Error()) } - return createdSslPairId.Id, nil + + return sslPairEntity.Id, nil } -func (repo *SslCmdRepo) Delete(sslPairId valueObject.SslPairId) error { - sslPairToDelete, err := repo.sslQueryRepo.ReadById(sslPairId) +func (repo *SslCmdRepo) ReplaceWithSelfSigned(vhostHostname valueObject.Fqdn) error { + vhostEntity, err := repo.vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: &vhostHostname, + }) if err != nil { - return errors.New("SslNotFound") + return errors.New("ReadVirtualHostEntityError: " + err.Error()) + } + if vhostEntity.Type == valueObject.VirtualHostTypeAlias { + return errors.New("AliasVirtualHostSslReliesOnParent") } - for _, vhostName := range sslPairToDelete.VirtualHostsHostnames { - err = repo.ReplaceWithSelfSigned(vhostName) - if err != nil { - log.Printf("%s (%s)", err.Error(), vhostName.String()) - continue - } + aliasesVirtualHostsReadResponse, err := repo.vhostQueryRepo.Read(dto.ReadVirtualHostsRequest{ + Pagination: dto.PaginationUnpaginated, + ParentHostname: &vhostHostname, + }) + if err != nil { + return errors.New("ReadAliasesError: " + err.Error()) } - return nil -} + aliasesHostnames := []valueObject.Fqdn{} + for _, aliasVirtualHostEntity := range aliasesVirtualHostsReadResponse.VirtualHosts { + aliasesHostnames = append(aliasesHostnames, aliasVirtualHostEntity.Hostname) + } -func (repo *SslCmdRepo) DeleteSslPairVhosts( - deleteDto dto.DeleteSslPairVhosts, -) error { - vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(repo.persistentDbSvc) - for _, vhostName := range deleteDto.VirtualHostsHostnames { - _, err := vhostQueryRepo.ReadByHostname(vhostName) + vhostHostnameStr := vhostHostname.String() + vhostCertFilePath := infraEnvs.PkiConfDir + "/" + vhostHostnameStr + ".crt" + vhostCertFileExists := infraHelper.FileExists(vhostCertFilePath) + if vhostCertFileExists { + err := os.Remove(vhostCertFilePath) if err != nil { - continue + return errors.New("DeleteCertFileError: " + err.Error()) } + } - err = repo.ReplaceWithSelfSigned(vhostName) + vhostCertKeyFilePath := infraEnvs.PkiConfDir + "/" + vhostHostnameStr + ".key" + vhostCertKeyFileExists := infraHelper.FileExists(vhostCertKeyFilePath) + if vhostCertKeyFileExists { + err := os.Remove(vhostCertKeyFilePath) if err != nil { - log.Printf( - "DeleteSslPairVhostsError (%s): %s", vhostName.String(), err.Error(), - ) + return errors.New("DeleteCertKeyFileError: " + err.Error()) } } + pkiConfDir, err := valueObject.NewUnixFilePath(infraEnvs.PkiConfDir) + if err != nil { + return errors.New("PkiConfDirError: " + err.Error()) + } + + return infraHelper.CreateSelfSignedSsl(pkiConfDir, vhostHostname, aliasesHostnames) +} + +func (repo *SslCmdRepo) Delete(sslPairId valueObject.SslPairId) error { + sslPairEntity, err := repo.sslQueryRepo.ReadFirst(dto.ReadSslPairsRequest{ + SslPairId: &sslPairId, + }) + if err != nil { + return errors.New("ReadSslPairEntityError: " + err.Error()) + } + + err = repo.ReplaceWithSelfSigned(sslPairEntity.VirtualHostHostname) + if err != nil { + return errors.New("ReplaceWithSelfSignedError: " + err.Error()) + } + return nil } diff --git a/src/infra/ssl/sslQueryRepo.go b/src/infra/ssl/sslQueryRepo.go index a69f9e99b..363ca83a1 100644 --- a/src/infra/ssl/sslQueryRepo.go +++ b/src/infra/ssl/sslQueryRepo.go @@ -4,10 +4,11 @@ import ( "crypto/md5" "encoding/hex" "errors" - "log" + "log/slog" "slices" "strings" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/valueObject" infraEnvs "github.com/goinfinite/os/src/infra/envs" @@ -16,206 +17,243 @@ import ( type SslQueryRepo struct{} -type SslCertificates struct { - MainCertificate entity.SslCertificate - ChainedCertificates []entity.SslCertificate +func NewSslQueryRepo() *SslQueryRepo { + return &SslQueryRepo{} } -func (repo SslQueryRepo) sslCertificatesFactory( - sslCertContent valueObject.SslCertificateContent, -) (SslCertificates, error) { - var certificates SslCertificates +func (repo *SslQueryRepo) sslCertificatesFactory( + sslCertsContent valueObject.SslCertificateContent, +) (entity.SslCertificate, []entity.SslCertificate, error) { + mainCert := entity.SslCertificate{} + chainedCerts := []entity.SslCertificate{} - sslCertContentSlice := strings.SplitAfter( - sslCertContent.String(), - "-----END CERTIFICATE-----\n", + rawSslCertsContent := strings.SplitAfter( + sslCertsContent.String(), "-----END CERTIFICATE-----\n", ) - for _, sslCertContentStr := range sslCertContentSlice { - if len(sslCertContentStr) == 0 { + for _, rawSslCertContent := range rawSslCertsContent { + if len(rawSslCertContent) == 0 { continue } - certificateContent, err := valueObject.NewSslCertificateContent(sslCertContentStr) + certificateContent, err := valueObject.NewSslCertificateContent(rawSslCertContent) if err != nil { - return certificates, err + return mainCert, chainedCerts, err } certificate, err := entity.NewSslCertificate(certificateContent) if err != nil { - return certificates, err + return mainCert, chainedCerts, err } if certificate.IsIntermediary { - certificates.ChainedCertificates = append(certificates.ChainedCertificates, certificate) - + chainedCerts = append(chainedCerts, certificate) continue } - certificates.MainCertificate = certificate + mainCert = certificate + } + + if mainCert.CertificateContent.String() == "" { + return mainCert, chainedCerts, errors.New("MainCertNotFound") } - return certificates, nil + return mainCert, chainedCerts, nil } -func (repo SslQueryRepo) sslPairFactory( +func (repo *SslQueryRepo) sslPairFactory( crtFilePath valueObject.UnixFilePath, -) (entity.SslPair, error) { - var ssl entity.SslPair - - crtKeyFilePath := crtFilePath.GetWithoutExtension().String() + ".key" - crtKeyContentStr, err := infraHelper.GetFileContent(crtKeyFilePath) +) (sslPairEntity entity.SslPair, err error) { + crtKeyFilePath := crtFilePath.ReadWithoutExtension().String() + ".key" + crtKeyContentStr, err := infraHelper.ReadFileContent(crtKeyFilePath) if err != nil { - return ssl, errors.New("FailedToOpenCertKeyFile: " + err.Error()) + return sslPairEntity, errors.New("OpenCertKeyFileError: " + err.Error()) } privateKey, err := valueObject.NewSslPrivateKey(crtKeyContentStr) if err != nil { - return ssl, err + return sslPairEntity, err } - crtFileContentStr, err := infraHelper.GetFileContent(crtFilePath.String()) + crtFileContentStr, err := infraHelper.ReadFileContent(crtFilePath.String()) if err != nil { - return ssl, errors.New("FailedToOpenCertFile: " + err.Error()) + return sslPairEntity, errors.New("OpenCertFileError: " + err.Error()) } certificate, err := valueObject.NewSslCertificateContent(crtFileContentStr) if err != nil { - return ssl, err + return sslPairEntity, err } - sslCertificates, err := repo.sslCertificatesFactory(certificate) + mainCert, chainedCerts, err := repo.sslCertificatesFactory(certificate) if err != nil { - return ssl, errors.New("FailedToGetMainAndChainedCerts: " + err.Error()) + return sslPairEntity, errors.New("CertsFactoryError: " + err.Error()) } - mainCertificate := sslCertificates.MainCertificate - chainCertificates := sslCertificates.ChainedCertificates - var chainCertificatesContent []valueObject.SslCertificateContent - for _, sslChainCertificate := range chainCertificates { + for _, sslChainCertificate := range chainedCerts { chainCertificatesContent = append( - chainCertificatesContent, - sslChainCertificate.CertificateContent, + chainCertificatesContent, sslChainCertificate.CertificateContent, ) } - hashId, err := valueObject.NewSslPairIdFromSslPairContent( - mainCertificate.CertificateContent, - chainCertificatesContent, - privateKey, + sslPairHashId, err := valueObject.NewSslPairIdFromSslPairContent( + mainCert.CertificateContent, chainCertificatesContent, privateKey, ) if err != nil { - return ssl, err + return sslPairEntity, err } - crtFileNameWithoutExt := crtFilePath.GetFileNameWithoutExtension() - vhost, err := valueObject.NewFqdn(crtFileNameWithoutExt.String()) + crtFileNameWithoutExt := crtFilePath.ReadFileNameWithoutExtension() + virtualHostHostname, err := valueObject.NewFqdn(crtFileNameWithoutExt.String()) if err != nil { - return ssl, err + if mainCert.CommonName == nil { + return sslPairEntity, errors.New("VirtualHostHostnameError: " + err.Error()) + } + + mainCertSslHostname, err := valueObject.NewFqdn(mainCert.CommonName.String()) + if err != nil { + return sslPairEntity, errors.New("VirtualHostHostnameFallbackError: " + err.Error()) + } + + virtualHostHostname = mainCertSslHostname } return entity.NewSslPair( - hashId, - []valueObject.Fqdn{vhost}, - mainCertificate, - privateKey, - chainCertificates, + sslPairHashId, virtualHostHostname, mainCert, privateKey, chainedCerts, ), nil } -func (repo SslQueryRepo) Read() ([]entity.SslPair, error) { - sslPairs := []entity.SslPair{} +func (repo *SslQueryRepo) Read( + requestDto dto.ReadSslPairsRequest, +) (responseDto dto.ReadSslPairsResponse, err error) { + sslPairEntities := []entity.SslPair{} - crtFilePathsStr, err := infraHelper.RunCmdWithSubShell( - "find " + infraEnvs.PkiConfDir + + rawCertFilePaths, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "find " + infraEnvs.PkiConfDir + " \\( -type f -o -type l \\) -name *.crt", - ) + ShouldRunWithSubShell: true, + }) if err != nil { - return sslPairs, errors.New("FailedToGetCertFiles: " + err.Error()) + return responseDto, errors.New("FindCertFilesError: " + err.Error()) } - crtFilePaths := strings.Split(crtFilePathsStr, "\n") - - sslPairIdsVhostsNamesMap := map[valueObject.SslPairId][]valueObject.Fqdn{} - for _, crtFilePathStr := range crtFilePaths { - crtFilePath, err := valueObject.NewUnixFilePath(crtFilePathStr) + for rawCertFilePath := range strings.SplitSeq(rawCertFilePaths, "\n") { + crtFilePath, err := valueObject.NewUnixFilePath(rawCertFilePath) if err != nil { - log.Printf("%s: %s", err.Error(), crtFilePathStr) + slog.Debug("InvalidCertFilePath", slog.String("rawCertFilePath", rawCertFilePath)) continue } - sslPair, err := repo.sslPairFactory(crtFilePath) + sslPairEntity, err := repo.sslPairFactory(crtFilePath) if err != nil { - log.Printf("FailedToReadSslPair (%s): %s", crtFilePath, err.Error()) + slog.Debug("SslPairFactoryError", slog.String("crtFilePath", crtFilePath.String())) continue } - pairMainVhostName := sslPair.VirtualHostsHostnames[0] + if requestDto.SslPairId != nil { + if sslPairEntity.Id != *requestDto.SslPairId { + continue + } + } - _, pairIdAlreadyExists := sslPairIdsVhostsNamesMap[sslPair.Id] - if pairIdAlreadyExists { - sslPairIdsVhostsNamesMap[sslPair.Id] = append( - sslPairIdsVhostsNamesMap[sslPair.Id], - pairMainVhostName, - ) - continue + if requestDto.VirtualHostHostname != nil { + if sslPairEntity.VirtualHostHostname != *requestDto.VirtualHostHostname { + continue + } } - sslPairIdsVhostsNamesMap[sslPair.Id] = []valueObject.Fqdn{pairMainVhostName} - sslPairs = append(sslPairs, sslPair) - } + for _, altName := range requestDto.AltNames { + if !slices.Contains(sslPairEntity.Certificate.AltNames, altName) { + continue + } + } - for sslPairIndex, sslPair := range sslPairs { - correctSslPairsVhostsNames := sslPairIdsVhostsNamesMap[sslPair.Id] - sslPair.VirtualHostsHostnames = correctSslPairsVhostsNames - sslPairs[sslPairIndex] = sslPair - } + if requestDto.IssuedBeforeAt != nil { + if sslPairEntity.Certificate.IssuedAt >= *requestDto.IssuedBeforeAt { + continue + } + } + if requestDto.IssuedAfterAt != nil { + if sslPairEntity.Certificate.IssuedAt <= *requestDto.IssuedAfterAt { + continue + } + } + if requestDto.ExpiresBeforeAt != nil { + if sslPairEntity.Certificate.ExpiresAt >= *requestDto.ExpiresBeforeAt { + continue + } + } + if requestDto.ExpiresAfterAt != nil { + if sslPairEntity.Certificate.ExpiresAt <= *requestDto.ExpiresAfterAt { + continue + } + } - return sslPairs, nil -} + sslPairEntities = append(sslPairEntities, sslPairEntity) + } -func (repo SslQueryRepo) ReadById( - sslPairId valueObject.SslPairId, -) (entity.SslPair, error) { - sslPairs, err := repo.Read() - if err != nil { - return entity.SslPair{}, err + sortDirectionStr := "asc" + if requestDto.Pagination.SortDirection != nil { + sortDirectionStr = requestDto.Pagination.SortDirection.String() } - if len(sslPairs) < 1 { - return entity.SslPair{}, errors.New("SslPairNotFound") + if requestDto.Pagination.SortBy != nil { + slices.SortStableFunc(sslPairEntities, func(a, b entity.SslPair) int { + firstElement := a + secondElement := b + if sortDirectionStr != "asc" { + firstElement = b + secondElement = a + } + + switch requestDto.Pagination.SortBy.String() { + case "id", "pairId", "sslPairId": + return strings.Compare( + firstElement.Id.String(), secondElement.Id.String(), + ) + case "virtualHostHostname", "vhostHostname", "hostname": + return strings.Compare( + firstElement.VirtualHostHostname.String(), secondElement.VirtualHostHostname.String(), + ) + case "issuedAt": + return strings.Compare( + firstElement.Certificate.IssuedAt.String(), secondElement.Certificate.IssuedAt.String(), + ) + case "expiresAt": + return strings.Compare( + firstElement.Certificate.ExpiresAt.String(), secondElement.Certificate.ExpiresAt.String(), + ) + default: + return 0 + } + }) } - for _, ssl := range sslPairs { - if ssl.Id.String() != sslPairId.String() { - continue - } + itemsTotal := uint64(len(sslPairEntities)) + pagesTotal := uint32(itemsTotal / uint64(requestDto.Pagination.ItemsPerPage)) - return ssl, nil - } + paginationDto := requestDto.Pagination + paginationDto.ItemsTotal = &itemsTotal + paginationDto.PagesTotal = &pagesTotal - return entity.SslPair{}, errors.New("SslPairNotFound") + return dto.ReadSslPairsResponse{ + Pagination: paginationDto, + SslPairs: sslPairEntities, + }, nil } -func (repo SslQueryRepo) ReadByVhostHostname( - sslPairVhostHostname valueObject.Fqdn, -) (entity.SslPair, error) { - sslPairs, err := repo.Read() +func (repo *SslQueryRepo) ReadFirst( + requestDto dto.ReadSslPairsRequest, +) (sslPairEntity entity.SslPair, err error) { + requestDto.Pagination = dto.PaginationSingleItem + responseDto, err := repo.Read(requestDto) if err != nil { - return entity.SslPair{}, err - } - - if len(sslPairs) < 1 { - return entity.SslPair{}, errors.New("SslPairNotFound") + return sslPairEntity, err } - for _, ssl := range sslPairs { - if !slices.Contains(ssl.VirtualHostsHostnames, sslPairVhostHostname) { - continue - } - - return ssl, nil + if len(responseDto.SslPairs) == 0 { + return sslPairEntity, errors.New("SslPairNotFound") } - return entity.SslPair{}, errors.New("SslPairNotFound") + return responseDto.SslPairs[0], nil } func (repo SslQueryRepo) GetOwnershipValidationHash( diff --git a/src/infra/vhost/mapping/mappingCmdRepo.go b/src/infra/vhost/mapping/mappingCmdRepo.go deleted file mode 100644 index 12e347def..000000000 --- a/src/infra/vhost/mapping/mappingCmdRepo.go +++ /dev/null @@ -1,512 +0,0 @@ -package mappingInfra - -import ( - "errors" - "log/slog" - "strings" - "text/template" - - "github.com/goinfinite/os/src/domain/dto" - "github.com/goinfinite/os/src/domain/valueObject" - infraHelper "github.com/goinfinite/os/src/infra/helper" - internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" - dbModel "github.com/goinfinite/os/src/infra/internalDatabase/model" - runtimeInfra "github.com/goinfinite/os/src/infra/runtime" - servicesInfra "github.com/goinfinite/os/src/infra/services" - vhostInfra "github.com/goinfinite/os/src/infra/vhost" -) - -type MappingCmdRepo struct { - persistentDbSvc *internalDbInfra.PersistentDatabaseService - mappingQueryRepo *MappingQueryRepo -} - -func NewMappingCmdRepo( - persistentDbSvc *internalDbInfra.PersistentDatabaseService, -) *MappingCmdRepo { - mappingQueryRepo := NewMappingQueryRepo(persistentDbSvc) - - return &MappingCmdRepo{ - persistentDbSvc: persistentDbSvc, - mappingQueryRepo: mappingQueryRepo, - } -} - -func (repo *MappingCmdRepo) parseCreateDtoToModel( - createDto dto.CreateMapping, - vhostName valueObject.Fqdn, -) dbModel.Mapping { - var targetValuePtr *string - if createDto.TargetValue != nil { - targetValueStr := createDto.TargetValue.String() - targetValuePtr = &targetValueStr - } - - var targetHttpResponseCodePtr *string - if createDto.TargetHttpResponseCode != nil { - targetHttpResponseCodeStr := createDto.TargetHttpResponseCode.String() - targetHttpResponseCodePtr = &targetHttpResponseCodeStr - } - - return dbModel.NewMapping( - 0, createDto.Hostname.String(), createDto.Path.String(), - createDto.MatchPattern.String(), createDto.TargetType.String(), - targetValuePtr, targetHttpResponseCodePtr, vhostName.String(), - ) -} - -func (repo *MappingCmdRepo) getServiceMappingConfig( - svcNameStr string, -) (svcMappingConfig string, err error) { - svcMappingConfig = "" - - serviceName, err := valueObject.NewServiceName(svcNameStr) - if err != nil { - return svcMappingConfig, errors.New(err.Error() + ": " + svcNameStr) - } - - servicesQueryRepo := servicesInfra.NewServicesQueryRepo(repo.persistentDbSvc) - readFirstInstalledServiceRequestDto := dto.ReadFirstInstalledServiceItemsRequest{ - ServiceName: &serviceName, - } - installedService, err := servicesQueryRepo.ReadFirstInstalledItem( - readFirstInstalledServiceRequestDto, - ) - if err != nil { - return svcMappingConfig, err - } - - protocolPortsMap := map[string]string{} - for _, svcPortBinding := range installedService.PortBindings { - svcPortBindingProtocolStr := svcPortBinding.Protocol.String() - protocolPortsMap[svcPortBindingProtocolStr] = svcPortBinding.Port.String() - } - - isHttpSupported := protocolPortsMap["http"] != "" - if isHttpSupported { - svcMappingConfig += ` - set $protocol "http"; - set $backend "127.0.0.1:` + protocolPortsMap["http"] + `"; -` - } - - isHttpsSupported := protocolPortsMap["https"] != "" - if isHttpsSupported { - svcMappingConfig += ` - set $protocol "https"; - set $backend "127.0.0.1:` + protocolPortsMap["https"] + `"; -` - } - - if isHttpSupported && isHttpsSupported { - svcMappingConfig = ` - set $protocol "http"; - set $backend "127.0.0.1:` + protocolPortsMap["http"] + `"; - - if ($scheme = https) { - set $protocol "https"; - set $backend "127.0.0.1:` + protocolPortsMap["https"] + `"; - } -` - } - - isHttpOrHttpsSupported := isHttpSupported || isHttpsSupported - - isWsSupported := protocolPortsMap["ws"] != "" - isWssSupported := protocolPortsMap["wss"] != "" - if isWsSupported && !isHttpOrHttpsSupported { - svcMappingConfig += ` - set $protocol "http"; - set $backend "127.0.0.1:` + protocolPortsMap["ws"] + `"; -` - } - - if isWsSupported && !isWssSupported && !isHttpSupported { - svcMappingConfig += ` - if ($scheme = http) { - set $protocol "http"; - set $backend "127.0.0.1:` + protocolPortsMap["ws"] + `"; - } -` - } - - if !isWsSupported && isWssSupported && !isHttpOrHttpsSupported { - svcMappingConfig += ` - set $protocol "https"; - set $backend "127.0.0.1:` + protocolPortsMap["wss"] + `"; -` - } - - if !isWsSupported && isWssSupported && !isHttpsSupported { - svcMappingConfig += ` - if ($scheme = https) { - set $protocol "https"; - set $backend "127.0.0.1:` + protocolPortsMap["wss"] + `"; - } -` - } - - isWsAndWssSupported := isWsSupported && isWssSupported - if isWsAndWssSupported && !isHttpOrHttpsSupported { - svcMappingConfig = ` - set $protocol "http"; - set $backend "127.0.0.1:` + protocolPortsMap["ws"] + `"; - - if ($scheme = https) { - set $protocol "https"; - set $backend "127.0.0.1:` + protocolPortsMap["wss"] + `"; - } -` - } - - isWsOrWssSupported := isWsSupported || isWssSupported - if isWsOrWssSupported { - svcMappingConfig += ` - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; -` - } - - isHttpOrHttpsSupported = isHttpOrHttpsSupported || isWsOrWssSupported - - isGrpcSupported := protocolPortsMap["grpc"] != "" - if isGrpcSupported && !isHttpOrHttpsSupported { - svcMappingConfig += ` - set $protocol "grpc"; - set $backend "127.0.0.1:` + protocolPortsMap["grpc"] + `"; -` - } - - if isGrpcSupported && isHttpOrHttpsSupported { - svcMappingConfig += ` - if ($scheme = grpc) { - set $protocol "grpc"; - set $backend "127.0.0.1:` + protocolPortsMap["grpc"] + `"; - } -` - } - - isGrpcsSupported := protocolPortsMap["grpcs"] != "" - if isGrpcsSupported && !isHttpOrHttpsSupported { - svcMappingConfig += ` - set $protocol "grpcs"; - set $backend "127.0.0.1:` + protocolPortsMap["grpcs"] + `"; -` - } - - if isGrpcsSupported && isHttpOrHttpsSupported { - svcMappingConfig += ` - if ($scheme = grpcs) { - set $protocol "grpcs"; - set $backend "127.0.0.1:` + protocolPortsMap["grpcs"] + `"; - } - ` - } - - if isGrpcSupported && !isGrpcsSupported && isHttpOrHttpsSupported { - svcMappingConfig += ` - grpc_set_header Host $host; - if ($protocol = grpc) { - grpc_pass $protocol://$backend; - } -` - } - - if !isGrpcSupported && isGrpcsSupported && isHttpOrHttpsSupported { - svcMappingConfig += ` - grpc_set_header Host $host; - if ($protocol = grpcs) { - grpc_pass $protocol://$backend; - } -` - } - - isGrpcAndGrpcsSupported := isGrpcSupported && isGrpcsSupported - if isGrpcAndGrpcsSupported && !isHttpOrHttpsSupported { - svcMappingConfig = ` - set $protocol "grpc"; - set $backend "127.0.0.1:` + protocolPortsMap["grpc"] + `"; - - if ($scheme = grpcs) { - set $protocol "grpcs"; - set $backend "127.0.0.1:` + protocolPortsMap["grpcs"] + `"; - } -` - } - - if isGrpcAndGrpcsSupported && isHttpOrHttpsSupported { - svcMappingConfig += ` - grpc_set_header Host $host; - if ($protocol = grpc) { - grpc_pass $protocol://$backend; - } - - if ($protocol = grpcs) { - grpc_pass $protocol://$backend; - } -` - } - - isGrpcOrGrpcsSupported := isGrpcSupported || isGrpcsSupported - if isGrpcOrGrpcsSupported && !isHttpOrHttpsSupported { - svcMappingConfig += ` - grpc_set_header Host $host; - grpc_pass $protocol://$backend; -` - } - - if isHttpOrHttpsSupported { - svcMappingConfig += ` - proxy_pass $protocol://$backend; - proxy_set_header Host $host; -` - } - - isTcpSupported := protocolPortsMap["tcp"] != "" - if isTcpSupported { - svcMappingConfig += ` - set $protocol "tcp"; - set $backend "127.0.0.1:` + protocolPortsMap["tcp"] + `"; - proxy_pass $protocol://$backend; -` - } - - svcMappingConfig = strings.Trim(svcMappingConfig, "\n") - return svcMappingConfig, nil -} - -func (repo *MappingCmdRepo) parseLocationUri( - matchPattern valueObject.MappingMatchPattern, - path valueObject.MappingPath, -) (locationUri string) { - matchPatternStr := matchPattern.String() - - modifier := "" - switch matchPatternStr { - case "contains", "ends-with": - modifier = "~" - case "equals": - modifier = "=" - } - - pathStr := path.String() - if matchPatternStr == "ends-with" { - pathStr += "$" - } - - locationUri = pathStr - if modifier != "" { - locationUri = modifier + " " + pathStr - } - - return locationUri -} - -func (repo *MappingCmdRepo) recreateMappingFile( - mappingHostname valueObject.Fqdn, -) error { - mappings, err := repo.mappingQueryRepo.ReadByHostname(mappingHostname) - if err != nil { - return err - } - - vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(repo.persistentDbSvc) - mappingFilePath, err := vhostQueryRepo.GetVirtualHostMappingsFilePath( - mappingHostname, - ) - if err != nil { - return errors.New("GetVirtualHostMappingsFilePathError: " + err.Error()) - } - - mappingConfigTemplate := `{{- range . -}} -location {{ parseLocationUri .MatchPattern .Path }} { - {{- if eq .TargetType "response-code" }} - return {{ .TargetHttpResponseCode }}; - {{- end }} - {{- if eq .TargetType "url" }} - return {{ .TargetHttpResponseCode }} {{ .TargetValue }}; - {{- end }} - {{- if eq .TargetType "inline-html" }} - add_header Content-Type text/html; - return {{ .TargetHttpResponseCode }} "{{ .TargetValue }}"; - {{- end }} - {{- if eq .TargetType "service" }} -{{ getServiceMappingConfig .TargetValue.String }} - {{- end }} - {{- if eq .TargetType "static-files" }} - try_files $uri $uri/ index.html?$query_string; - {{- end }} -} -{{ end }}` - - mappingTemplatePtr := template.New("mappingFile") - mappingTemplatePtr = mappingTemplatePtr.Funcs( - template.FuncMap{ - "parseLocationUri": repo.parseLocationUri, - "getServiceMappingConfig": repo.getServiceMappingConfig, - }, - ) - - mappingTemplatePtr, err = mappingTemplatePtr.Parse(mappingConfigTemplate) - if err != nil { - return errors.New("TemplateParsingError: " + err.Error()) - } - - var mappingFileContent strings.Builder - err = mappingTemplatePtr.Execute(&mappingFileContent, mappings) - if err != nil { - return errors.New("TemplateExecutionError: " + err.Error()) - } - - shouldOverwrite := true - return infraHelper.UpdateFile( - mappingFilePath.String(), mappingFileContent.String(), shouldOverwrite, - ) -} - -func (repo *MappingCmdRepo) Create( - createDto dto.CreateMapping, -) (mappingId valueObject.MappingId, err error) { - err = infraHelper.ValidateWebServerConfig() - if err != nil { - return mappingId, err - } - - isServiceMapping := createDto.TargetType.String() == "service" - isPhpServiceMapping := isServiceMapping && createDto.TargetValue.String() == "php-webserver" - if isPhpServiceMapping { - runtimeCmdRepo := runtimeInfra.NewRuntimeCmdRepo(repo.persistentDbSvc) - err := runtimeCmdRepo.CreatePhpVirtualHost(createDto.Hostname) - if err != nil { - return mappingId, err - } - } - - vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(repo.persistentDbSvc) - vhost, err := vhostQueryRepo.ReadByHostname(createDto.Hostname) - if err != nil { - return mappingId, errors.New("GetVhostByHostnameError: " + err.Error()) - } - - mappingModel := repo.parseCreateDtoToModel(createDto, vhost.Hostname) - createResult := repo.persistentDbSvc.Handler.Create(&mappingModel) - if createResult.Error != nil { - return mappingId, createResult.Error - } - mappingId, err = valueObject.NewMappingId(mappingModel.ID) - if err != nil { - return mappingId, err - } - - err = repo.recreateMappingFile(createDto.Hostname) - if err != nil { - return mappingId, errors.New("RecreateMappingFileError: " + err.Error()) - } - - err = infraHelper.ValidateWebServerConfig() - if err != nil { - err = repo.persistentDbSvc.Handler.Delete(&mappingModel).Error - if err != nil { - return mappingId, err - } - - err = repo.recreateMappingFile(createDto.Hostname) - if err != nil { - return mappingId, errors.New("RecreateMappingFileError: " + err.Error()) - } - } - - return mappingId, infraHelper.ReloadWebServer() -} - -func (repo *MappingCmdRepo) Delete(mappingId valueObject.MappingId) error { - err := infraHelper.ValidateWebServerConfig() - if err != nil { - return err - } - - mapping, err := repo.mappingQueryRepo.ReadById(mappingId) - if err != nil { - return err - } - - err = repo.persistentDbSvc.Handler.Delete( - dbModel.Mapping{}, - mappingId.Uint64(), - ).Error - if err != nil { - return err - } - - err = repo.recreateMappingFile(mapping.Hostname) - if err != nil { - return errors.New("RecreateMappingFileError: " + err.Error()) - } - - return infraHelper.ReloadWebServer() -} - -func (repo *MappingCmdRepo) DeleteAuto( - serviceName valueObject.ServiceName, -) error { - primaryVhost, err := infraHelper.GetPrimaryVirtualHost() - if err != nil { - return errors.New("PrimaryVhostNotFound") - } - - primaryVhostMappings, err := repo.mappingQueryRepo.ReadByHostname(primaryVhost) - if err != nil { - return errors.New("GetPrimaryVhostMappingsError: " + err.Error()) - } - - var mappingIdToDelete *valueObject.MappingId - for _, primaryVhostMapping := range primaryVhostMappings { - if primaryVhostMapping.TargetType.String() != "service" { - continue - } - - if primaryVhostMapping.TargetValue.String() != serviceName.String() { - continue - } - - mappingIdToDelete = &primaryVhostMapping.Id - } - - if mappingIdToDelete == nil { - return nil - } - - return repo.Delete(*mappingIdToDelete) -} - -func (repo *MappingCmdRepo) RecreateByServiceName( - serviceName valueObject.ServiceName, - operatorAccountId valueObject.AccountId, - operatorIpAddress valueObject.IpAddress, -) error { - mappings, err := repo.mappingQueryRepo.ReadByServiceName(serviceName) - if err != nil { - return err - } - - for _, mapping := range mappings { - err := repo.Delete(mapping.Id) - if err != nil { - return err - } - - createDto := dto.NewCreateMapping( - mapping.Hostname, mapping.Path, mapping.MatchPattern, mapping.TargetType, - mapping.TargetValue, mapping.TargetHttpResponseCode, operatorAccountId, - operatorIpAddress, - ) - - _, err = repo.Create(createDto) - if err != nil { - slog.Error(err.Error(), slog.Uint64("mappingId", uint64(mapping.Id.Uint64()))) - } - } - - return nil -} diff --git a/src/infra/vhost/mapping/mappingQueryRepo.go b/src/infra/vhost/mapping/mappingQueryRepo.go deleted file mode 100644 index 191ff6888..000000000 --- a/src/infra/vhost/mapping/mappingQueryRepo.go +++ /dev/null @@ -1,126 +0,0 @@ -package mappingInfra - -import ( - "errors" - "log/slog" - - "github.com/goinfinite/os/src/domain/dto" - "github.com/goinfinite/os/src/domain/entity" - "github.com/goinfinite/os/src/domain/valueObject" - internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" - dbModel "github.com/goinfinite/os/src/infra/internalDatabase/model" - vhostInfra "github.com/goinfinite/os/src/infra/vhost" -) - -type MappingQueryRepo struct { - persistentDbSvc *internalDbInfra.PersistentDatabaseService -} - -func NewMappingQueryRepo( - persistentDbSvc *internalDbInfra.PersistentDatabaseService, -) *MappingQueryRepo { - return &MappingQueryRepo{ - persistentDbSvc: persistentDbSvc, - } -} - -func (repo *MappingQueryRepo) ReadById( - id valueObject.MappingId, -) (entity entity.Mapping, err error) { - model := dbModel.Mapping{} - err = repo.persistentDbSvc.Handler. - Model(&dbModel.Mapping{}). - Where("id = ?", id.Uint64()). - First(&model).Error - if err != nil { - return entity, errors.New("ReadDatabaseEntryError") - } - - entity, err = model.ToEntity() - if err != nil { - return entity, errors.New("ModelToEntityError") - } - - return entity, nil -} - -func (repo *MappingQueryRepo) ReadByHostname( - hostname valueObject.Fqdn, -) ([]entity.Mapping, error) { - entities := []entity.Mapping{} - - models := []dbModel.Mapping{} - err := repo.persistentDbSvc.Handler. - Model(&dbModel.Mapping{}). - Where("hostname = ?", hostname.String()). - Find(&models).Error - if err != nil { - return entities, errors.New("ReadDatabaseEntriesError") - } - - for _, model := range models { - entity, err := model.ToEntity() - if err != nil { - slog.Error("ModelToEntityError", slog.Any("error", err)) - continue - } - - entities = append(entities, entity) - } - - return entities, nil -} - -func (repo *MappingQueryRepo) ReadByServiceName( - serviceName valueObject.ServiceName, -) (entities []entity.Mapping, err error) { - models := []dbModel.Mapping{} - err = repo.persistentDbSvc.Handler. - Model(&dbModel.Mapping{}). - Where("target_type = 'service' AND target_value = ?", serviceName.String()). - Find(&models).Error - if err != nil { - return entities, errors.New("ReadDatabaseEntriesError") - } - - for _, model := range models { - entity, err := model.ToEntity() - if err != nil { - slog.Error("ModelToEntityError", slog.Any("error", err)) - continue - } - - entities = append(entities, entity) - } - - return entities, nil -} - -func (repo *MappingQueryRepo) ReadWithMappings() ( - vhostsWithMappings []dto.VirtualHostWithMappings, err error, -) { - vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(repo.persistentDbSvc) - vhosts, err := vhostQueryRepo.Read() - if err != nil { - return vhostsWithMappings, err - } - - for _, vhost := range vhosts { - mappings, err := repo.ReadByHostname(vhost.Hostname) - if err != nil { - slog.Error( - "ReadMappingsError", - slog.String("vhostHostname", vhost.Hostname.String()), - slog.Any("error", err), - ) - continue - } - - vhostsWithMappings = append( - vhostsWithMappings, - dto.NewVirtualHostWithMappings(vhost, mappings), - ) - } - - return vhostsWithMappings, nil -} diff --git a/src/infra/vhost/mappingCmdRepo.go b/src/infra/vhost/mappingCmdRepo.go new file mode 100644 index 000000000..2405e76aa --- /dev/null +++ b/src/infra/vhost/mappingCmdRepo.go @@ -0,0 +1,856 @@ +package vhostInfra + +import ( + "errors" + "os" + "strings" + "text/template" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/valueObject" + infraEnvs "github.com/goinfinite/os/src/infra/envs" + infraHelper "github.com/goinfinite/os/src/infra/helper" + internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" + dbModel "github.com/goinfinite/os/src/infra/internalDatabase/model" + runtimeInfra "github.com/goinfinite/os/src/infra/runtime" + servicesInfra "github.com/goinfinite/os/src/infra/services" +) + +type MappingCmdRepo struct { + persistentDbSvc *internalDbInfra.PersistentDatabaseService + mappingQueryRepo *MappingQueryRepo +} + +func NewMappingCmdRepo( + persistentDbSvc *internalDbInfra.PersistentDatabaseService, +) *MappingCmdRepo { + mappingQueryRepo := NewMappingQueryRepo(persistentDbSvc) + + return &MappingCmdRepo{ + persistentDbSvc: persistentDbSvc, + mappingQueryRepo: mappingQueryRepo, + } +} + +func (repo *MappingCmdRepo) serviceMappingConfigFactory( + svcNameStr string, +) (svcMappingConfig string, err error) { + svcMappingConfig = "" + + serviceName, err := valueObject.NewServiceName(svcNameStr) + if err != nil { + return svcMappingConfig, errors.New(err.Error() + ": " + svcNameStr) + } + + servicesQueryRepo := servicesInfra.NewServicesQueryRepo(repo.persistentDbSvc) + readFirstInstalledServiceRequestDto := dto.ReadFirstInstalledServiceItemsRequest{ + ServiceName: &serviceName, + } + installedService, err := servicesQueryRepo.ReadFirstInstalledItem( + readFirstInstalledServiceRequestDto, + ) + if err != nil { + return svcMappingConfig, err + } + + protocolPortsMap := map[string]string{} + for _, svcPortBinding := range installedService.PortBindings { + svcPortBindingProtocolStr := svcPortBinding.Protocol.String() + protocolPortsMap[svcPortBindingProtocolStr] = svcPortBinding.Port.String() + } + + isHttpSupported := protocolPortsMap["http"] != "" + if isHttpSupported { + svcMappingConfig += ` + set $protocol "http"; + set $backend "127.0.0.1:` + protocolPortsMap["http"] + `"; +` + } + + isHttpsSupported := protocolPortsMap["https"] != "" + if isHttpsSupported { + svcMappingConfig += ` + set $protocol "https"; + set $backend "127.0.0.1:` + protocolPortsMap["https"] + `"; +` + } + + if isHttpSupported && isHttpsSupported { + svcMappingConfig = ` + set $protocol "http"; + set $backend "127.0.0.1:` + protocolPortsMap["http"] + `"; + + if ($scheme = https) { + set $protocol "https"; + set $backend "127.0.0.1:` + protocolPortsMap["https"] + `"; + } +` + } + + isHttpOrHttpsSupported := isHttpSupported || isHttpsSupported + + isWsSupported := protocolPortsMap["ws"] != "" + isWssSupported := protocolPortsMap["wss"] != "" + if isWsSupported && !isHttpOrHttpsSupported { + svcMappingConfig += ` + set $protocol "http"; + set $backend "127.0.0.1:` + protocolPortsMap["ws"] + `"; +` + } + + if isWsSupported && !isWssSupported && !isHttpSupported { + svcMappingConfig += ` + if ($scheme = http) { + set $protocol "http"; + set $backend "127.0.0.1:` + protocolPortsMap["ws"] + `"; + } +` + } + + if !isWsSupported && isWssSupported && !isHttpOrHttpsSupported { + svcMappingConfig += ` + set $protocol "https"; + set $backend "127.0.0.1:` + protocolPortsMap["wss"] + `"; +` + } + + if !isWsSupported && isWssSupported && !isHttpsSupported { + svcMappingConfig += ` + if ($scheme = https) { + set $protocol "https"; + set $backend "127.0.0.1:` + protocolPortsMap["wss"] + `"; + } +` + } + + isWsAndWssSupported := isWsSupported && isWssSupported + if isWsAndWssSupported && !isHttpOrHttpsSupported { + svcMappingConfig = ` + set $protocol "http"; + set $backend "127.0.0.1:` + protocolPortsMap["ws"] + `"; + + if ($scheme = https) { + set $protocol "https"; + set $backend "127.0.0.1:` + protocolPortsMap["wss"] + `"; + } +` + } + + isWsOrWssSupported := isWsSupported || isWssSupported + if isWsOrWssSupported { + svcMappingConfig += ` + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; +` + } + + isHttpOrHttpsSupported = isHttpOrHttpsSupported || isWsOrWssSupported + + isGrpcSupported := protocolPortsMap["grpc"] != "" + if isGrpcSupported && !isHttpOrHttpsSupported { + svcMappingConfig += ` + set $protocol "grpc"; + set $backend "127.0.0.1:` + protocolPortsMap["grpc"] + `"; +` + } + + if isGrpcSupported && isHttpOrHttpsSupported { + svcMappingConfig += ` + if ($scheme = grpc) { + set $protocol "grpc"; + set $backend "127.0.0.1:` + protocolPortsMap["grpc"] + `"; + } +` + } + + isGrpcsSupported := protocolPortsMap["grpcs"] != "" + if isGrpcsSupported && !isHttpOrHttpsSupported { + svcMappingConfig += ` + set $protocol "grpcs"; + set $backend "127.0.0.1:` + protocolPortsMap["grpcs"] + `"; +` + } + + if isGrpcsSupported && isHttpOrHttpsSupported { + svcMappingConfig += ` + if ($scheme = grpcs) { + set $protocol "grpcs"; + set $backend "127.0.0.1:` + protocolPortsMap["grpcs"] + `"; + } + ` + } + + if isGrpcSupported && !isGrpcsSupported && isHttpOrHttpsSupported { + svcMappingConfig += ` + grpc_set_header Host $host; + if ($protocol = grpc) { + grpc_pass $protocol://$backend; + } +` + } + + if !isGrpcSupported && isGrpcsSupported && isHttpOrHttpsSupported { + svcMappingConfig += ` + grpc_set_header Host $host; + if ($protocol = grpcs) { + grpc_pass $protocol://$backend; + } +` + } + + isGrpcAndGrpcsSupported := isGrpcSupported && isGrpcsSupported + if isGrpcAndGrpcsSupported && !isHttpOrHttpsSupported { + svcMappingConfig = ` + set $protocol "grpc"; + set $backend "127.0.0.1:` + protocolPortsMap["grpc"] + `"; + + if ($scheme = grpcs) { + set $protocol "grpcs"; + set $backend "127.0.0.1:` + protocolPortsMap["grpcs"] + `"; + } +` + } + + if isGrpcAndGrpcsSupported && isHttpOrHttpsSupported { + svcMappingConfig += ` + grpc_set_header Host $host; + if ($protocol = grpc) { + grpc_pass $protocol://$backend; + } + + if ($protocol = grpcs) { + grpc_pass $protocol://$backend; + } +` + } + + isGrpcOrGrpcsSupported := isGrpcSupported || isGrpcsSupported + if isGrpcOrGrpcsSupported && !isHttpOrHttpsSupported { + svcMappingConfig += ` + grpc_set_header Host $host; + grpc_pass $protocol://$backend; +` + } + + if isHttpOrHttpsSupported { + svcMappingConfig += ` + proxy_pass $protocol://$backend; + proxy_set_header Host $host; +` + } + + isTcpSupported := protocolPortsMap["tcp"] != "" + if isTcpSupported { + svcMappingConfig += ` + set $protocol "tcp"; + set $backend "127.0.0.1:` + protocolPortsMap["tcp"] + `"; + proxy_pass $protocol://$backend; +` + } + + svcMappingConfig = strings.Trim(svcMappingConfig, "\n") + return svcMappingConfig, nil +} + +func (repo *MappingCmdRepo) locationUriConfigFactory( + matchPattern valueObject.MappingMatchPattern, + path valueObject.MappingPath, +) (locationUri string) { + matchPatternStr := matchPattern.String() + + modifier := "" + switch matchPatternStr { + case "contains", "ends-with": + modifier = "~" + case "equals": + modifier = "=" + } + + pathStr := path.String() + if matchPatternStr == "ends-with" { + pathStr += "$" + } + + locationUri = pathStr + if modifier != "" { + locationUri = modifier + " " + pathStr + } + + return locationUri +} + +func (repo *MappingCmdRepo) RecreateMappingFile( + vhostHostname valueObject.Fqdn, +) error { + mappingsReadResponse, err := repo.mappingQueryRepo.Read(dto.ReadMappingsRequest{ + Pagination: dto.PaginationUnpaginated, + Hostname: &vhostHostname, + }) + if err != nil { + return err + } + + mappingConfigTemplate := `{{- range . -}} +location {{ locationUriConfigFactory .MatchPattern .Path }} { + {{- if boolPtrDeref .ShouldUpgradeInsecureRequests }} + if ($scheme = http) { + return 301 https://$host$request_uri; + } + {{- end }} + {{- if .MappingSecurityRuleId }} + include ` + infraEnvs.MappingsSecurityRulesConfDir + `/{{ .MappingSecurityRuleId.String }}.embeddable.conf; + {{- end }} + {{- if eq .TargetType "response-code" }} + return {{ .TargetHttpResponseCode }}; + {{- end }} + {{- if eq .TargetType "url" }} + return {{ .TargetHttpResponseCode }} {{ .TargetValue }}; + {{- end }} + {{- if eq .TargetType "inline-html" }} + add_header Content-Type text/html; + return {{ .TargetHttpResponseCode }} "{{ .TargetValue }}"; + {{- end }} + {{- if eq .TargetType "service" }} +{{ serviceMappingConfigFactory .TargetValue.String }} + {{- end }} + {{- if eq .TargetType "static-files" }} + try_files $uri $uri/ index.html?$query_string; + {{- end }} +} +{{ end }}` + + mappingTemplatePtr := template.New("mappingFile").Funcs( + template.FuncMap{ + "locationUriConfigFactory": repo.locationUriConfigFactory, + "serviceMappingConfigFactory": repo.serviceMappingConfigFactory, + "boolPtrDeref": func(boolPtr *bool) bool { + if boolPtr == nil { + return false + } + return *boolPtr + }, + }, + ) + + mappingTemplatePtr, err = mappingTemplatePtr.Parse(mappingConfigTemplate) + if err != nil { + return errors.New("TemplateParsingError: " + err.Error()) + } + + var mappingFileContent strings.Builder + err = mappingTemplatePtr.Execute(&mappingFileContent, mappingsReadResponse.Mappings) + if err != nil { + return errors.New("TemplateExecutionError: " + err.Error()) + } + + vhostQueryRepo := NewVirtualHostQueryRepo(repo.persistentDbSvc) + mappingFilePath, err := vhostQueryRepo.ReadVirtualHostMappingsFilePath( + vhostHostname, + ) + if err != nil { + return errors.New("ReadVirtualHostMappingsFilePathError: " + err.Error()) + } + + shouldOverwrite := true + return infraHelper.UpdateFile( + mappingFilePath.String(), mappingFileContent.String(), shouldOverwrite, + ) +} + +func (repo *MappingCmdRepo) Create( + createDto dto.CreateMapping, +) (mappingId valueObject.MappingId, err error) { + err = infraHelper.ValidateWebServerConfig() + if err != nil { + return mappingId, err + } + + isServiceMapping := createDto.TargetType.String() == "service" + isPhpServiceMapping := isServiceMapping && createDto.TargetValue.String() == "php-webserver" + if isPhpServiceMapping { + runtimeCmdRepo := runtimeInfra.NewRuntimeCmdRepo(repo.persistentDbSvc) + err := runtimeCmdRepo.CreatePhpVirtualHost(createDto.Hostname) + if err != nil { + return mappingId, err + } + } + + var targetValuePtr *string + if createDto.TargetValue != nil { + targetValueStr := createDto.TargetValue.String() + targetValuePtr = &targetValueStr + } + + var targetHttpResponseCodePtr *string + if createDto.TargetHttpResponseCode != nil { + targetHttpResponseCodeStr := createDto.TargetHttpResponseCode.String() + targetHttpResponseCodePtr = &targetHttpResponseCodeStr + } + + var mappingSecurityRuleIdPtr *uint64 + if createDto.MappingSecurityRuleId != nil { + ruleIdUint64 := createDto.MappingSecurityRuleId.Uint64() + mappingSecurityRuleIdPtr = &ruleIdUint64 + } + + mappingModel := dbModel.Mapping{ + Hostname: createDto.Hostname.String(), + Path: createDto.Path.String(), + MatchPattern: createDto.MatchPattern.String(), + TargetType: createDto.TargetType.String(), + TargetValue: targetValuePtr, + TargetHttpResponseCode: targetHttpResponseCodePtr, + ShouldUpgradeInsecureRequests: createDto.ShouldUpgradeInsecureRequests, + MappingSecurityRuleID: mappingSecurityRuleIdPtr, + } + err = repo.persistentDbSvc.Handler.Create(&mappingModel).Error + if err != nil { + return mappingId, err + } + + mappingId, err = valueObject.NewMappingId(mappingModel.ID) + if err != nil { + return mappingId, err + } + + err = repo.RecreateMappingFile(createDto.Hostname) + if err != nil { + return mappingId, errors.New("RecreateMappingFileError: " + err.Error()) + } + + err = infraHelper.ValidateWebServerConfig() + if err != nil { + err = repo.persistentDbSvc.Handler.Delete(&mappingModel).Error + if err != nil { + return mappingId, err + } + + err = repo.RecreateMappingFile(createDto.Hostname) + if err != nil { + return mappingId, errors.New("RecreateMappingFileError: " + err.Error()) + } + } + + return mappingId, infraHelper.ReloadWebServer() +} + +func (repo *MappingCmdRepo) UpdateMarketplaceItem( + mappingId valueObject.MappingId, + marketplaceInstalledItemName valueObject.MarketplaceItemName, +) error { + itemNameStr := marketplaceInstalledItemName.String() + mappingUpdatedModel := dbModel.Mapping{ + ID: mappingId.Uint64(), + MarketplaceInstalledItemName: &itemNameStr, + } + + return repo.persistentDbSvc.Handler. + Model(&dbModel.Mapping{}). + Where("id = ?", mappingId.Uint64()). + Updates(&mappingUpdatedModel).Error +} + +func (repo *MappingCmdRepo) Update(updateDto dto.UpdateMapping) error { + err := infraHelper.ValidateWebServerConfig() + if err != nil { + return err + } + + mappingEntity, err := repo.mappingQueryRepo.ReadFirst(dto.ReadMappingsRequest{ + MappingId: &updateDto.Id, + }) + if err != nil { + return err + } + + updateMap := map[string]interface{}{} + + if updateDto.Path != nil { + updateMap["path"] = updateDto.Path.String() + } + + if updateDto.MatchPattern != nil { + updateMap["match_pattern"] = updateDto.MatchPattern.String() + } + + if updateDto.TargetType != nil { + updateMap["target_type"] = updateDto.TargetType.String() + } + + if updateDto.TargetValue != nil { + targetValueStr := updateDto.TargetValue.String() + updateMap["target_value"] = &targetValueStr + } + + if updateDto.TargetHttpResponseCode != nil { + targetHttpResponseCodeStr := updateDto.TargetHttpResponseCode.String() + updateMap["target_http_response_code"] = &targetHttpResponseCodeStr + } + + if updateDto.ShouldUpgradeInsecureRequests != nil { + updateMap["should_upgrade_insecure_requests"] = updateDto.ShouldUpgradeInsecureRequests + } + + if updateDto.MappingSecurityRuleId != nil { + updateMap["mapping_security_rule_id"] = updateDto.MappingSecurityRuleId.Uint64() + } + + err = repo.persistentDbSvc.Handler. + Model(&dbModel.Mapping{}). + Where("id = ?", updateDto.Id.Uint64()). + Updates(updateMap).Error + if err != nil { + return errors.New("DbUpdateMappingError: " + err.Error()) + } + + err = repo.RecreateMappingFile(mappingEntity.Hostname) + if err != nil { + return errors.New("RecreateMappingFileError: " + err.Error()) + } + + return infraHelper.ReloadWebServer() +} + +func (repo *MappingCmdRepo) Delete(mappingId valueObject.MappingId) error { + err := infraHelper.ValidateWebServerConfig() + if err != nil { + return err + } + + mappingEntity, err := repo.mappingQueryRepo.ReadFirst(dto.ReadMappingsRequest{ + MappingId: &mappingId, + }) + if err != nil { + return err + } + + err = repo.persistentDbSvc.Handler.Delete(dbModel.Mapping{}, mappingId.Uint64()).Error + if err != nil { + return err + } + + err = repo.RecreateMappingFile(mappingEntity.Hostname) + if err != nil { + return errors.New("RecreateMappingFileError: " + err.Error()) + } + + return infraHelper.ReloadWebServer() +} + +func (repo *MappingCmdRepo) recreateSecurityRuleFile( + mappingSecurityRuleId valueObject.MappingSecurityRuleId, +) error { + ruleEntity, err := repo.mappingQueryRepo.ReadFirstSecurityRule( + dto.ReadMappingSecurityRulesRequest{MappingSecurityRuleId: &mappingSecurityRuleId}, + ) + if err != nil { + return errors.New("ReadMappingSecurityRuleError: " + err.Error()) + } + + ruleGlobalTemplateStr := `{{- if and .RpsSoftLimitPerIp .RpsHardLimitPerIp -}} +limit_req_zone $binary_remote_addr zone=rps_limit_{{ .Id }}:10m rate={{ .RpsSoftLimitPerIp }}r/s; #RpsSoftLimitPerIp +{{- else if .RpsSoftLimitPerIp -}} +limit_req_zone $binary_remote_addr zone=rps_limit_{{ .Id }}:10m rate={{ .RpsSoftLimitPerIp }}r/s; #RpsSoftLimitPerIp +{{- else if .RpsHardLimitPerIp -}} +limit_req_zone $binary_remote_addr zone=rps_limit_{{ .Id }}:10m rate={{ .RpsHardLimitPerIp }}r/s; #RpsHardLimitPerIp +{{- end -}} +{{- if .MaxConnectionsPerIp }} +limit_conn_zone $binary_remote_addr zone=conn_limit_{{ .Id }}:10m; #MaxConnectionsPerIp +{{- end }} +` + + ruleGlobalTemplateStrPtr, err := template.New("ruleGlobalFile").Parse(ruleGlobalTemplateStr) + if err != nil { + return errors.New("GlobalTemplateParsingError: " + err.Error()) + } + + var ruleGlobalFileContent strings.Builder + err = ruleGlobalTemplateStrPtr.Execute(&ruleGlobalFileContent, ruleEntity) + if err != nil { + return errors.New("GlobalTemplateExecutionError: " + err.Error()) + } + + err = infraHelper.MakeDir(infraEnvs.MappingsSecurityRulesConfDir) + if err != nil { + return errors.New("CreateSecurityRulesDirError: " + err.Error()) + } + + ruleGlobalFilePath := infraEnvs.MappingsSecurityRulesConfDir + "/" + + mappingSecurityRuleId.String() + ".global.conf" + err = infraHelper.UpdateFile(ruleGlobalFilePath, ruleGlobalFileContent.String(), true) + if err != nil { + return errors.New("CreateSecurityRuleGlobalFileError: " + err.Error()) + } + + ruleEmbeddableTemplateStr := `{{- if and .RpsSoftLimitPerIp .RpsHardLimitPerIp -}} +limit_req zone=rps_limit_{{ .Id }} burst={{ .RpsHardLimitPerIp }}; #RpsHardLimitPerIp +{{- else if or .RpsSoftLimitPerIp .RpsHardLimitPerIp -}} +limit_req zone=rps_limit_{{ .Id }}; #RpsLimitPerIp +{{- end -}} +{{- if or .RpsSoftLimitPerIp .RpsHardLimitPerIp -}} +{{- if .ResponseCodeOnMaxRequests }} +limit_req_status {{ .ResponseCodeOnMaxRequests }}; #ResponseCodeOnMaxRequests +{{- end }} +{{- end -}} +{{- if .MaxConnectionsPerIp }} +limit_conn conn_limit_{{ .Id }} {{ .MaxConnectionsPerIp }}; #MaxConnectionsPerIp +{{- if .ResponseCodeOnMaxConnections }} +limit_conn_status {{ .ResponseCodeOnMaxConnections }}; #ResponseCodeOnMaxConnections +{{- end }} +{{- end }} +{{- if .BandwidthBpsLimitPerConnection }} +limit_rate {{ .BandwidthBpsLimitPerConnection }}; #BandwidthBpsLimitPerConnection +{{- if .BandwidthLimitOnlyAfterBytes }} +limit_rate_after {{ .BandwidthLimitOnlyAfterBytes }}; #BandwidthLimitOnlyAfterBytes +{{- end }} +{{- end }} +{{- if .AllowedIps }} +#AllowedIps +{{- range .AllowedIps }} +allow {{ . }}; +{{- end }} +{{- end }} +{{- if .BlockedIps }} +#BlockedIps +{{- range .BlockedIps }} +deny {{ . }}; +{{- end }} +{{- end }} +` + + ruleEmbeddableTemplateStrPtr, err := template.New("ruleEmbeddableFile").Parse(ruleEmbeddableTemplateStr) + if err != nil { + return errors.New("EmbeddableTemplateParsingError: " + err.Error()) + } + + var ruleEmbeddableFileContent strings.Builder + err = ruleEmbeddableTemplateStrPtr.Execute(&ruleEmbeddableFileContent, ruleEntity) + if err != nil { + return errors.New("EmbeddableTemplateExecutionError: " + err.Error()) + } + + ruleEmbeddableFilePath := infraEnvs.MappingsSecurityRulesConfDir + "/" + + mappingSecurityRuleId.String() + ".embeddable.conf" + err = infraHelper.UpdateFile(ruleEmbeddableFilePath, ruleEmbeddableFileContent.String(), true) + if err != nil { + return errors.New("CreateSecurityRuleEmbeddableFileError: " + err.Error()) + } + + err = infraHelper.UpdateOwnershipForWebServerUse(infraEnvs.MappingsSecurityRulesConfDir, true, false) + if err != nil { + return errors.New("UpdateSecurityRulesDirOwnershipError: " + err.Error()) + } + + return nil +} + +func (repo *MappingCmdRepo) RecreateSecurityRuleFiles() error { + responseDto, err := repo.mappingQueryRepo.ReadSecurityRule( + dto.ReadMappingSecurityRulesRequest{Pagination: dto.PaginationUnpaginated}, + ) + if err != nil { + return err + } + + for _, ruleEntity := range responseDto.MappingSecurityRules { + err = repo.recreateSecurityRuleFile(ruleEntity.Id) + if err != nil { + return err + } + } + + return nil +} + +func (repo *MappingCmdRepo) CreateSecurityRule( + createDto dto.CreateMappingSecurityRule, +) (ruleId valueObject.MappingSecurityRuleId, err error) { + var descriptionPtr *string + if createDto.Description != nil { + descriptionStr := createDto.Description.String() + descriptionPtr = &descriptionStr + } + + allowedIps := []string{} + for _, ipAddress := range createDto.AllowedIps { + allowedIps = append(allowedIps, ipAddress.String()) + } + + blockedIps := []string{} + for _, ipAddress := range createDto.BlockedIps { + blockedIps = append(blockedIps, ipAddress.String()) + } + + var bandwidthBpsLimitPerConnectionPtr *uint64 + if createDto.BandwidthBpsLimitPerConnection != nil { + perConnectionUint64 := createDto.BandwidthBpsLimitPerConnection.Uint64() + bandwidthBpsLimitPerConnectionPtr = &perConnectionUint64 + } + + var bandwidthLimitOnlyAfterBytesPtr *uint64 + if createDto.BandwidthLimitOnlyAfterBytes != nil { + afterBytesUint64 := createDto.BandwidthLimitOnlyAfterBytes.Uint64() + bandwidthLimitOnlyAfterBytesPtr = &afterBytesUint64 + } + + securityRuleModel := dbModel.MappingSecurityRule{ + Name: createDto.Name.String(), + Description: descriptionPtr, + AllowedIps: allowedIps, + BlockedIps: blockedIps, + RpsSoftLimitPerIp: createDto.RpsSoftLimitPerIp, + RpsHardLimitPerIp: createDto.RpsHardLimitPerIp, + ResponseCodeOnMaxRequests: createDto.ResponseCodeOnMaxRequests, + MaxConnectionsPerIp: createDto.MaxConnectionsPerIp, + BandwidthBpsLimitPerConnection: bandwidthBpsLimitPerConnectionPtr, + BandwidthLimitOnlyAfterBytes: bandwidthLimitOnlyAfterBytesPtr, + ResponseCodeOnMaxConnections: createDto.ResponseCodeOnMaxConnections, + } + + err = repo.persistentDbSvc.Handler.Create(&securityRuleModel).Error + if err != nil { + return ruleId, errors.New("CreateMappingSecurityRuleInfraError") + } + + ruleId, err = valueObject.NewMappingSecurityRuleId(securityRuleModel.ID) + if err != nil { + return ruleId, err + } + + err = repo.recreateSecurityRuleFile(ruleId) + if err != nil { + return ruleId, errors.New("RecreateMappingSecurityRuleFileError: " + err.Error()) + } + + err = infraHelper.ValidateWebServerConfig() + if err != nil { + err = repo.persistentDbSvc.Handler.Delete(&securityRuleModel).Error + if err != nil { + return ruleId, err + } + + err = repo.recreateSecurityRuleFile(ruleId) + if err != nil { + return ruleId, errors.New("RecreateMappingSecurityRuleFileError: " + err.Error()) + } + } + + return ruleId, infraHelper.ReloadWebServer() +} + +func (repo *MappingCmdRepo) UpdateSecurityRule( + updateDto dto.UpdateMappingSecurityRule, +) error { + updateMap := map[string]interface{}{} + + if updateDto.Name != nil { + updateMap["name"] = updateDto.Name.String() + } + + if updateDto.Description != nil { + updateMap["description"] = updateDto.Description.String() + } + + if updateDto.RpsSoftLimitPerIp != nil { + updateMap["rps_soft_limit_per_ip"] = *updateDto.RpsSoftLimitPerIp + } + + if updateDto.RpsHardLimitPerIp != nil { + updateMap["rps_hard_limit_per_ip"] = *updateDto.RpsHardLimitPerIp + } + + if updateDto.ResponseCodeOnMaxRequests != nil { + updateMap["response_code_on_max_requests"] = *updateDto.ResponseCodeOnMaxRequests + } + + if updateDto.MaxConnectionsPerIp != nil { + updateMap["max_connections_per_ip"] = *updateDto.MaxConnectionsPerIp + } + + if updateDto.BandwidthBpsLimitPerConnection != nil { + updateMap["bandwidth_bps_limit_per_connection"] = updateDto.BandwidthBpsLimitPerConnection.Uint64() + } + + if updateDto.BandwidthLimitOnlyAfterBytes != nil { + updateMap["bandwidth_limit_only_after_bytes"] = updateDto.BandwidthLimitOnlyAfterBytes.Uint64() + } + + if updateDto.ResponseCodeOnMaxConnections != nil { + updateMap["response_code_on_max_connections"] = *updateDto.ResponseCodeOnMaxConnections + } + + err := repo.persistentDbSvc.Handler.Model(&dbModel.MappingSecurityRule{}). + Where("id = ?", updateDto.Id.Uint64()).Updates(updateMap).Error + if err != nil { + return errors.New("UpdateMappingSecurityRuleInfraError: " + err.Error()) + } + + updateModel := dbModel.MappingSecurityRule{} + allowedIps := []string{} + for _, ipAddress := range updateDto.AllowedIps { + allowedIps = append(allowedIps, ipAddress.String()) + } + if len(allowedIps) > 0 { + updateModel.AllowedIps = allowedIps + } + + blockedIps := []string{} + for _, ipAddress := range updateDto.BlockedIps { + blockedIps = append(blockedIps, ipAddress.String()) + } + if len(blockedIps) > 0 { + updateModel.BlockedIps = blockedIps + } + + if len(updateModel.AllowedIps) > 0 || len(updateModel.BlockedIps) > 0 { + err = repo.persistentDbSvc.Handler.Model(&dbModel.MappingSecurityRule{}). + Where("id = ?", updateDto.Id.Uint64()).Updates(updateModel).Error + if err != nil { + return errors.New("UpdateMappingSecurityRuleInfraError: " + err.Error()) + } + } + + err = repo.recreateSecurityRuleFile(updateDto.Id) + if err != nil { + return errors.New("RecreateMappingSecurityRuleFileError: " + err.Error()) + } + + return infraHelper.ReloadWebServer() +} + +func (repo *MappingCmdRepo) DeleteSecurityRule( + ruleId valueObject.MappingSecurityRuleId, +) error { + err := infraHelper.ValidateWebServerConfig() + if err != nil { + return err + } + + ruleEntity, err := repo.mappingQueryRepo.ReadFirstSecurityRule( + dto.ReadMappingSecurityRulesRequest{MappingSecurityRuleId: &ruleId}, + ) + if err != nil { + return errors.New("ReadMappingSecurityRuleError: " + err.Error()) + } + + err = repo.persistentDbSvc.Handler.Delete( + dbModel.MappingSecurityRule{}, ruleEntity.Id.Uint64(), + ).Error + if err != nil { + return err + } + + toRemoveFilePaths := []string{ + infraEnvs.MappingsSecurityRulesConfDir + "/" + ruleEntity.Id.String() + ".global.conf", + infraEnvs.MappingsSecurityRulesConfDir + "/" + ruleEntity.Id.String() + ".embeddable.conf", + } + for _, toRemoveFilePath := range toRemoveFilePaths { + err = os.Remove(toRemoveFilePath) + if err != nil { + return errors.New("RemoveSecurityRuleFileError: " + err.Error()) + } + } + + return infraHelper.ReloadWebServer() +} diff --git a/src/infra/vhost/mappingQueryRepo.go b/src/infra/vhost/mappingQueryRepo.go new file mode 100644 index 000000000..1bf9d27ed --- /dev/null +++ b/src/infra/vhost/mappingQueryRepo.go @@ -0,0 +1,212 @@ +package vhostInfra + +import ( + "errors" + "log/slog" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/entity" + "github.com/goinfinite/os/src/domain/valueObject" + internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" + dbHelper "github.com/goinfinite/os/src/infra/internalDatabase/helper" + dbModel "github.com/goinfinite/os/src/infra/internalDatabase/model" +) + +type MappingQueryRepo struct { + persistentDbSvc *internalDbInfra.PersistentDatabaseService +} + +func NewMappingQueryRepo( + persistentDbSvc *internalDbInfra.PersistentDatabaseService, +) *MappingQueryRepo { + return &MappingQueryRepo{persistentDbSvc: persistentDbSvc} +} + +func (repo *MappingQueryRepo) Read(requestDto dto.ReadMappingsRequest) ( + responseDto dto.ReadMappingsResponse, err error, +) { + mappingModel := dbModel.Mapping{} + if requestDto.MappingId != nil { + mappingModel.ID = requestDto.MappingId.Uint64() + } + if requestDto.Hostname != nil { + mappingModel.Hostname = requestDto.Hostname.String() + } + if requestDto.MappingPath != nil { + mappingModel.Path = requestDto.MappingPath.String() + } + if requestDto.MatchPattern != nil { + mappingModel.MatchPattern = requestDto.MatchPattern.String() + } + if requestDto.TargetType != nil { + mappingModel.TargetType = requestDto.TargetType.String() + } + if requestDto.TargetValue != nil { + targetValueStr := requestDto.TargetValue.String() + mappingModel.TargetValue = &targetValueStr + } + if requestDto.TargetHttpResponseCode != nil { + targetHttpResponseCodeStr := requestDto.TargetHttpResponseCode.String() + mappingModel.TargetHttpResponseCode = &targetHttpResponseCodeStr + } + if requestDto.MappingSecurityRuleId != nil { + mappingSecurityRuleId := requestDto.MappingSecurityRuleId.Uint64() + mappingModel.MappingSecurityRuleID = &mappingSecurityRuleId + } + + dbQuery := repo.persistentDbSvc.Handler.Model(mappingModel).Where(&mappingModel) + if requestDto.ShouldUpgradeInsecureRequests != nil { + dbQuery = dbQuery.Where( + "should_upgrade_insecure_requests = ?", *requestDto.ShouldUpgradeInsecureRequests, + ) + } + if requestDto.CreatedBeforeAt != nil { + dbQuery = dbQuery.Where("created_at < ?", requestDto.CreatedBeforeAt.ReadAsGoTime()) + } + if requestDto.CreatedAfterAt != nil { + dbQuery = dbQuery.Where("created_at > ?", requestDto.CreatedAfterAt.ReadAsGoTime()) + } + + if requestDto.Pagination.SortBy != nil { + sortByStr := requestDto.Pagination.SortBy.String() + switch sortByStr { + case "mappingId", "id": + sortByStr = "ID" + case "mappingPath": + sortByStr = "Path" + } + + sortBy, err := valueObject.NewPaginationSortBy(sortByStr) + if err == nil { + requestDto.Pagination.SortBy = &sortBy + } + } + paginatedDbQuery, responsePagination, err := dbHelper.PaginationQueryBuilder( + dbQuery, requestDto.Pagination, + ) + if err != nil { + return responseDto, errors.New("PaginationQueryBuilderError: " + err.Error()) + } + + mappingModels := []dbModel.Mapping{} + err = paginatedDbQuery.Find(&mappingModels).Error + if err != nil { + return responseDto, errors.New("FindMappingsError: " + err.Error()) + } + + mappingEntities := []entity.Mapping{} + for _, mappingModel := range mappingModels { + mappingEntity, err := mappingModel.ToEntity() + if err != nil { + slog.Debug( + "MappingModelToEntityError", + slog.Uint64("mappingId", mappingModel.ID), + slog.String("hostname", mappingModel.Hostname), + slog.String("error", err.Error()), + ) + continue + } + mappingEntities = append(mappingEntities, mappingEntity) + } + + return dto.ReadMappingsResponse{ + Pagination: responsePagination, + Mappings: mappingEntities, + }, nil +} + +func (repo *MappingQueryRepo) ReadFirst( + requestDto dto.ReadMappingsRequest, +) (mappingEntity entity.Mapping, err error) { + requestDto.Pagination = dto.PaginationSingleItem + responseDto, err := repo.Read(requestDto) + if err != nil { + return mappingEntity, err + } + + if len(responseDto.Mappings) == 0 { + return mappingEntity, errors.New("MappingNotFound") + } + + return responseDto.Mappings[0], nil +} + +func (repo *MappingQueryRepo) ReadSecurityRule( + requestDto dto.ReadMappingSecurityRulesRequest, +) (responseDto dto.ReadMappingSecurityRulesResponse, err error) { + securityRuleModel := dbModel.MappingSecurityRule{} + if requestDto.MappingSecurityRuleId != nil { + securityRuleModel.ID = requestDto.MappingSecurityRuleId.Uint64() + } + + if requestDto.MappingSecurityRuleName != nil { + securityRuleModel.Name = requestDto.MappingSecurityRuleName.String() + } + + dbQuery := repo.persistentDbSvc.Handler.Model(&securityRuleModel).Where(&securityRuleModel) + if requestDto.AllowedIp != nil { + dbQuery = dbQuery.Where("allowed_ips LIKE ?", "%"+requestDto.AllowedIp.String()+"%") + } + + if requestDto.BlockedIp != nil { + dbQuery = dbQuery.Where("blocked_ips LIKE ?", "%"+requestDto.BlockedIp.String()+"%") + } + + if requestDto.CreatedBeforeAt != nil { + dbQuery = dbQuery.Where("created_at < ?", requestDto.CreatedBeforeAt.ReadAsGoTime()) + } + + if requestDto.CreatedAfterAt != nil { + dbQuery = dbQuery.Where("created_at > ?", requestDto.CreatedAfterAt.ReadAsGoTime()) + } + + paginatedDbQuery, responsePagination, err := dbHelper.PaginationQueryBuilder( + dbQuery, requestDto.Pagination, + ) + if err != nil { + return responseDto, errors.New("PaginationQueryBuilderError: " + err.Error()) + } + + securityRuleModels := []dbModel.MappingSecurityRule{} + err = paginatedDbQuery.Find(&securityRuleModels).Error + if err != nil { + return responseDto, errors.New("FindMappingSecurityRulesError: " + err.Error()) + } + + mappingSecurityRuleEntities := []entity.MappingSecurityRule{} + for _, securityRuleModel := range securityRuleModels { + mappingSecurityRuleEntity, err := securityRuleModel.ToEntity() + if err != nil { + slog.Debug( + "MappingSecurityRuleModelToEntityError", + slog.Uint64("mappingSecurityRuleId", securityRuleModel.ID), + slog.String("error", err.Error()), + ) + continue + } + mappingSecurityRuleEntities = append( + mappingSecurityRuleEntities, mappingSecurityRuleEntity, + ) + } + + return dto.ReadMappingSecurityRulesResponse{ + Pagination: responsePagination, + MappingSecurityRules: mappingSecurityRuleEntities, + }, nil +} + +func (repo *MappingQueryRepo) ReadFirstSecurityRule( + requestDto dto.ReadMappingSecurityRulesRequest, +) (ruleEntity entity.MappingSecurityRule, err error) { + requestDto.Pagination = dto.PaginationSingleItem + readResponse, err := repo.ReadSecurityRule(requestDto) + if err != nil { + return ruleEntity, err + } + + if len(readResponse.MappingSecurityRules) == 0 { + return ruleEntity, errors.New("MappingSecurityRuleNotFound") + } + + return readResponse.MappingSecurityRules[0], nil +} diff --git a/src/infra/vhost/virtualHostCmdRepo.go b/src/infra/vhost/virtualHostCmdRepo.go index 8daefd7a3..5f4aff8c5 100644 --- a/src/infra/vhost/virtualHostCmdRepo.go +++ b/src/infra/vhost/virtualHostCmdRepo.go @@ -2,6 +2,7 @@ package vhostInfra import ( "errors" + "log/slog" "os" "strings" "text/template" @@ -17,71 +18,69 @@ import ( type VirtualHostCmdRepo struct { persistentDbSvc *internalDbInfra.PersistentDatabaseService - queryRepo *VirtualHostQueryRepo + vhostQueryRepo *VirtualHostQueryRepo } func NewVirtualHostCmdRepo( persistentDbSvc *internalDbInfra.PersistentDatabaseService, ) *VirtualHostCmdRepo { - vhostQueryRepo := NewVirtualHostQueryRepo(persistentDbSvc) - return &VirtualHostCmdRepo{ persistentDbSvc: persistentDbSvc, - queryRepo: vhostQueryRepo, + vhostQueryRepo: NewVirtualHostQueryRepo(persistentDbSvc), } } func (repo *VirtualHostCmdRepo) webServerUnitFileFactory( - vhostName valueObject.Fqdn, - aliasesHostnames []valueObject.Fqdn, - publicDir valueObject.UnixFilePath, + vhostEntity entity.VirtualHost, mappingFilePath valueObject.UnixFilePath, ) (string, error) { - vhostNameStr := vhostName.String() + vhostHostnameStr := vhostEntity.Hostname.String() aliasesHostnamesStr := []string{} - for _, aliasHostname := range aliasesHostnames { + for _, aliasHostname := range vhostEntity.AliasesHostnames { aliasesHostnamesStr = append(aliasesHostnamesStr, aliasHostname.String()) } - valuesToInterpolate := map[string]interface{}{ - "VhostName": vhostNameStr, - "AliasesHostnames": aliasesHostnamesStr, - "PublicDirectory": publicDir, - "CertPath": infraEnvs.PkiConfDir + "/" + vhostNameStr + ".crt", - "KeyPath": infraEnvs.PkiConfDir + "/" + vhostNameStr + ".key", - "MappingFilePath": mappingFilePath, + mainServerName := vhostHostnameStr + " www." + vhostHostnameStr + if vhostEntity.IsWildcard || vhostEntity.Type == valueObject.VirtualHostTypeWildcard { + mainServerName += " *." + vhostHostnameStr + } + + confVariables := map[string]interface{}{ + "VirtualHostHostname": vhostHostnameStr, + "MainServerName": mainServerName, + "AliasesHostnames": aliasesHostnamesStr, + "PublicDirectory": vhostEntity.RootDirectory.String(), + "CertPath": infraEnvs.PkiConfDir + "/" + vhostHostnameStr + ".crt", + "KeyPath": infraEnvs.PkiConfDir + "/" + vhostHostnameStr + ".key", + "MappingFilePath": mappingFilePath.String(), } unitConfTemplate := `server { listen 80; listen 443 ssl; - server_name {{ .VhostName }} www.{{ .VhostName }}{{ range $aliasHostname := .AliasesHostnames }} {{ $aliasHostname }} www.{{ $aliasHostname }}{{ end }}; + server_name {{ .MainServerName }}{{ range $aliasHostname := .AliasesHostnames }} {{ $aliasHostname }} www.{{ $aliasHostname }}{{ end }}; root {{ .PublicDirectory }}; ssl_certificate {{ .CertPath }}; ssl_certificate_key {{ .KeyPath }}; - access_log /app/logs/nginx/{{ .VhostName }}_access.log combined buffer=512k flush=1m; - error_log /app/logs/nginx/{{ .VhostName }}_error.log warn; + access_log /app/logs/nginx/{{ .VirtualHostHostname }}_access.log combined buffer=512k flush=1m; + error_log /app/logs/nginx/{{ .VirtualHostHostname }}_error.log warn; include /etc/nginx/std.conf; include {{ .MappingFilePath }}; -}` +} +` - unitConfTemplatePtr, err := template. - New("webServerConfUnitFile"). - Parse(unitConfTemplate) + unitConfTemplatePtr, err := template.New("webServerConfUnitFile").Parse(unitConfTemplate) if err != nil { return "", errors.New("TemplateParsingError: " + err.Error()) } var unitConfFileContent strings.Builder - err = unitConfTemplatePtr.Execute( - &unitConfFileContent, - valuesToInterpolate, - ) + err = unitConfTemplatePtr.Execute(&unitConfFileContent, confVariables) if err != nil { return "", errors.New("TemplateExecutionError: " + err.Error()) } @@ -89,236 +88,266 @@ func (repo *VirtualHostCmdRepo) webServerUnitFileFactory( return unitConfFileContent.String(), nil } +func (repo *VirtualHostCmdRepo) ReadVirtualHostWebServerUnitFileFilePath( + vhostHostname valueObject.Fqdn, +) (unitFilePath valueObject.UnixFilePath, err error) { + mappingsFilePath, err := repo.vhostQueryRepo.ReadVirtualHostMappingsFilePath(vhostHostname) + if err != nil { + return unitFilePath, errors.New("ReadVirtualHostMappingsFilePathError: " + err.Error()) + } + + mappingsFileNameStr := mappingsFilePath.ReadFileName().String() + rawUnitConfFilePath := infraEnvs.VirtualHostsConfDir + "/" + mappingsFileNameStr + return valueObject.NewUnixFilePath(rawUnitConfFilePath) +} + func (repo *VirtualHostCmdRepo) createWebServerUnitFile( - vhostName valueObject.Fqdn, - publicDir valueObject.UnixFilePath, + vhostHostname valueObject.Fqdn, ) error { - aliases, err := repo.queryRepo.ReadAliasesByParentHostname(vhostName) + vhostEntity, err := repo.vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: &vhostHostname, + }) if err != nil { - return errors.New("GetAliasesByHostnameError: " + err.Error()) + return errors.New("ReadVirtualHostEntityError: " + err.Error()) } - aliasesHostnames := []valueObject.Fqdn{} - for _, alias := range aliases { - aliasesHostnames = append(aliasesHostnames, alias.Hostname) - } + if vhostEntity.Type == valueObject.VirtualHostTypeAlias { + if vhostEntity.ParentHostname == nil { + return errors.New("AliasMissingParentHostname") + } - vhostFileNameStr := vhostName.String() + ".conf" - if infraHelper.IsPrimaryVirtualHost(vhostName) { - vhostFileNameStr = infraEnvs.PrimaryVhostFileName + vhostEntity, err = repo.vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: vhostEntity.ParentHostname, + }) + if err != nil { + return errors.New("ReadAliasParentVirtualHostError: " + err.Error()) + } + vhostHostname = vhostEntity.Hostname } - mappingFilePathStr := infraEnvs.MappingsConfDir + "/" + vhostFileNameStr - mappingFilePath, err := valueObject.NewUnixFilePath(mappingFilePathStr) + mappingsFilePath, err := repo.vhostQueryRepo.ReadVirtualHostMappingsFilePath(vhostHostname) if err != nil { - return errors.New(err.Error() + ": " + mappingFilePathStr) - } - err = infraHelper.UpdateFile(mappingFilePath.String(), "", false) - if err != nil { - return errors.New("CreateMappingFileFailed") + return errors.New("ReadVirtualHostMappingsFilePathError: " + err.Error()) } unitConfFileContent, err := repo.webServerUnitFileFactory( - vhostName, - aliasesHostnames, - publicDir, - mappingFilePath, + vhostEntity, mappingsFilePath, ) if err != nil { return err } - unitConfFilePathStr := infraEnvs.VirtualHostsConfDir + "/" + vhostFileNameStr - unitConfFilePath, err := valueObject.NewUnixFilePath(unitConfFilePathStr) + unitConfFilePath, err := repo.ReadVirtualHostWebServerUnitFileFilePath(vhostHostname) if err != nil { - return errors.New(err.Error() + ": " + unitConfFilePathStr) + return errors.New("ReadWebServerUnitConfFilePathError: " + err.Error()) } - err = infraHelper.UpdateFile( - unitConfFilePath.String(), - unitConfFileContent, - true, - ) + + err = infraHelper.UpdateFile(unitConfFilePath.String(), unitConfFileContent, true) if err != nil { - return errors.New("CreateWebServerConfUnitFileFailed") + return errors.New("CreateWebServerConfUnitFileFailed: " + err.Error()) + } + + mappingCmdRepo := NewMappingCmdRepo(repo.persistentDbSvc) + err = mappingCmdRepo.RecreateMappingFile(vhostHostname) + if err != nil { + return errors.New("RecreateMappingFileError: " + err.Error()) } return infraHelper.ReloadWebServer() } -func (repo *VirtualHostCmdRepo) persistVirtualHost( +func (repo *VirtualHostCmdRepo) createVirtualHostPublicDirectory( createDto dto.CreateVirtualHost, - publicDir valueObject.UnixFilePath, -) error { - var parentHostnamePtr *string - if createDto.ParentHostname != nil { - parentHostnameStr := createDto.ParentHostname.String() - parentHostnamePtr = &parentHostnameStr - } +) (publicDir valueObject.UnixFilePath, err error) { + if createDto.Type == valueObject.VirtualHostTypeAlias { + parentVirtualHostEntity, err := repo.vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: createDto.ParentHostname, + }) + if err != nil { + return publicDir, errors.New("ReadAliasParentVirtualHostError: " + err.Error()) + } - model := dbModel.VirtualHost{ - Hostname: createDto.Hostname.String(), - Type: createDto.Type.String(), - RootDirectory: publicDir.String(), - ParentHostname: parentHostnamePtr, + return parentVirtualHostEntity.RootDirectory, nil } - return repo.persistentDbSvc.Handler.Create(&model).Error -} -func (repo *VirtualHostCmdRepo) createAlias(createDto dto.CreateVirtualHost) error { - parentVhost, err := repo.queryRepo.ReadByHostname(*createDto.ParentHostname) + rawPublicDir := infraEnvs.PrimaryPublicDir + "/" + createDto.Hostname.String() + + publicDir, err = valueObject.NewUnixFilePath(rawPublicDir) if err != nil { - return errors.New("GetParentVhostError: " + err.Error()) + return publicDir, errors.New("InvalidVirtualHostPublicDir") } - aliases, err := repo.queryRepo.ReadAliasesByParentHostname(parentVhost.Hostname) + err = infraHelper.MakeDir(publicDir.String()) if err != nil { - return errors.New("GetParentVhostAliasesError: " + err.Error()) + return publicDir, errors.New("CreateVirtualHostPublicDirFailed") } - aliasesStr := []string{createDto.Hostname.String()} - for _, alias := range aliases { - aliasesStr = append(aliasesStr, alias.Hostname.String()) - } + return publicDir, nil +} - err = infraHelper.CreateSelfSignedSsl( - infraEnvs.PkiConfDir, - parentVhost.Hostname.String(), - aliasesStr, - ) +func (repo *VirtualHostCmdRepo) Create(createDto dto.CreateVirtualHost) error { + publicDir, err := repo.createVirtualHostPublicDirectory(createDto) if err != nil { - return errors.New("GenerateSelfSignedCertFailed") + return errors.New("CreateVirtualHostPublicDirFailed: " + err.Error()) } - err = repo.persistVirtualHost(createDto, parentVhost.RootDirectory) + pkiConfDir, err := valueObject.NewUnixFilePath(infraEnvs.PkiConfDir) if err != nil { - return err + return errors.New("InvalidPkiConfDir") } - return repo.createWebServerUnitFile( - parentVhost.Hostname, - parentVhost.RootDirectory, - ) -} + if createDto.Type != valueObject.VirtualHostTypeAlias { + aliasHostnames := []valueObject.Fqdn{} + err = infraHelper.CreateSelfSignedSsl(pkiConfDir, createDto.Hostname, aliasHostnames) + if err != nil { + return errors.New("CreateSelfSignedSslFailed: " + err.Error()) + } + } -func (repo *VirtualHostCmdRepo) updateDirsOwnership( - publicDir valueObject.UnixFilePath, -) error { - directories := []string{ - publicDir.String(), - "/app/conf/nginx", - infraEnvs.PkiConfDir, + webServerConfDir, err := valueObject.NewUnixFilePath(infraEnvs.VirtualHostsConfDir) + if err != nil { + return errors.New("InvalidWebServerConfDir") } - for _, directory := range directories { + vhostRelatedDirectories := []valueObject.UnixFilePath{ + publicDir, pkiConfDir, webServerConfDir, + } + for _, directory := range vhostRelatedDirectories { chownRecursively := true chownSymlinksToo := false - err := infraHelper.UpdatePermissionsForWebServerUse( - directory, - chownRecursively, - chownSymlinksToo, + err := infraHelper.UpdateOwnershipForWebServerUse( + directory.String(), chownRecursively, chownSymlinksToo, ) if err != nil { - return errors.New("ChownNecessaryDirectoriesFailed") + return errors.New("UpdateOwnershipForWebServerUseError: " + err.Error()) } } - return nil -} - -func (repo *VirtualHostCmdRepo) Create(createDto dto.CreateVirtualHost) error { - if createDto.Type.String() == "alias" { - return repo.createAlias(createDto) + isWildcard := false + if createDto.IsWildcard != nil { + isWildcard = *createDto.IsWildcard } - - hostnameStr := createDto.Hostname.String() - - publicDirStr := infraEnvs.PrimaryPublicDir + "/" + hostnameStr - publicDir, err := valueObject.NewUnixFilePath(publicDirStr) - if err != nil { - return errors.New(err.Error() + ": " + publicDirStr) + virtualHostModel := dbModel.VirtualHost{ + Hostname: createDto.Hostname.String(), + Type: createDto.Type.String(), + RootDirectory: publicDir.String(), + IsPrimary: false, + IsWildcard: isWildcard, } - - err = infraHelper.MakeDir(publicDirStr) - if err != nil { - return errors.New("MakePublicHtmlDirFailed") + if createDto.ParentHostname != nil { + parentHostnameStr := createDto.ParentHostname.String() + virtualHostModel.ParentHostname = &parentHostnameStr } - aliases := []string{} - err = infraHelper.CreateSelfSignedSsl( - infraEnvs.PkiConfDir, - hostnameStr, - aliases, - ) + err = repo.persistentDbSvc.Handler.Create(&virtualHostModel).Error if err != nil { - return errors.New("GenerateSelfSignedCertFailed") + return errors.New("DbCreateVirtualHostError: " + err.Error()) } - err = repo.updateDirsOwnership(publicDir) - if err != nil { - return err + return repo.createWebServerUnitFile(createDto.Hostname) +} + +func (repo *VirtualHostCmdRepo) Update(updateDto dto.UpdateVirtualHost) error { + zeroableFieldsUpdateMap := map[string]interface{}{} + if updateDto.IsWildcard != nil { + zeroableFieldsUpdateMap["is_wildcard"] = *updateDto.IsWildcard + zeroableFieldsUpdateMap["type"] = valueObject.VirtualHostTypeWildcard.String() + if !*updateDto.IsWildcard { + zeroableFieldsUpdateMap["type"] = valueObject.VirtualHostTypeTopLevel.String() + } } - err = repo.persistVirtualHost(createDto, publicDir) + err := repo.persistentDbSvc.Handler. + Model(&dbModel.VirtualHost{}). + Where("hostname = ?", updateDto.Hostname.String()). + Updates(zeroableFieldsUpdateMap).Error if err != nil { - return err + return errors.New("DbUpdateVirtualHostError: " + err.Error()) } - return repo.createWebServerUnitFile(createDto.Hostname, publicDir) + return repo.createWebServerUnitFile(updateDto.Hostname) } -func (repo *VirtualHostCmdRepo) deleteWebServerUnitFile( - vhostName valueObject.Fqdn, -) error { - vhostFileNameStr := vhostName.String() + ".conf" - if infraHelper.IsPrimaryVirtualHost(vhostName) { - vhostFileNameStr = infraEnvs.PrimaryVhostFileName +func (repo *VirtualHostCmdRepo) Delete(vhostHostname valueObject.Fqdn) error { + withMappings := true + vhostReadResponse, err := repo.vhostQueryRepo.Read(dto.ReadVirtualHostsRequest{ + Pagination: dto.PaginationSingleItem, + Hostname: &vhostHostname, + WithMappings: &withMappings, + }) + if err != nil { + return errors.New("ReadVirtualHostEntityError: " + err.Error()) } - mappingFilePathStr := infraEnvs.MappingsConfDir + "/" + vhostFileNameStr - err := os.Remove(mappingFilePathStr) - if err != nil { - return err + if len(vhostReadResponse.VirtualHostWithMappings) == 0 { + return errors.New("VirtualHostNotFound") } - webServerUnitFilePathStr := infraEnvs.VirtualHostsConfDir + "/" + vhostFileNameStr - err = os.Remove(webServerUnitFilePathStr) - if err != nil { - return err + mappingCmdRepo := NewMappingCmdRepo(repo.persistentDbSvc) + for _, mappingEntity := range vhostReadResponse.VirtualHostWithMappings[0].Mappings { + err = mappingCmdRepo.Delete(mappingEntity.Id) + if err != nil { + slog.Error( + "DeleteMappingError", + slog.String("mappingId", mappingEntity.Id.String()), + slog.String("error", err.Error()), + ) + } } - return infraHelper.ReloadWebServer() -} + vhostWebServerConfFilePath, err := repo.ReadVirtualHostWebServerUnitFileFilePath( + vhostHostname, + ) + if err != nil { + return errors.New("ReadWebServerUnitConfFilePathError: " + err.Error()) + } -func (repo *VirtualHostCmdRepo) Delete(vhost entity.VirtualHost) error { - vhostNameStr := vhost.Hostname.String() - err := repo.persistentDbSvc.Handler. - Where( - "hostname = ? OR parent_hostname = ?", - vhostNameStr, - vhostNameStr, - ). + vhostHostnameStr := vhostHostname.String() + err = repo.persistentDbSvc.Handler. + Where("hostname = ? OR parent_hostname = ?", vhostHostnameStr, vhostHostnameStr). Delete(dbModel.VirtualHost{}).Error if err != nil { return err } - if vhost.Type.String() == "alias" { - parentVhost, err := repo.queryRepo.ReadByHostname(*vhost.ParentHostname) + vhostEntity := vhostReadResponse.VirtualHostWithMappings[0].VirtualHost + if vhostEntity.Type == valueObject.VirtualHostTypeAlias { + if vhostEntity.ParentHostname == nil { + return errors.New("AliasMissingParentHostname") + } + + parentVirtualHostEntity, err := repo.vhostQueryRepo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: vhostEntity.ParentHostname, + }) if err != nil { - return errors.New("GetParentVhost: " + err.Error()) + return errors.New("ReadAliasParentVirtualHostError: " + err.Error()) } - vhost = parentVhost - return repo.createWebServerUnitFile( - vhost.Hostname, - vhost.RootDirectory, - ) + return repo.createWebServerUnitFile(parentVirtualHostEntity.Hostname) } - err = repo.deleteWebServerUnitFile(vhost.Hostname) + pkiConfDir, err := valueObject.NewUnixFilePath(infraEnvs.PkiConfDir) if err != nil { - return errors.New("DeleteWebServerUnitFileError: " + err.Error()) + return errors.New("InvalidPkiConfDir") } + pkiConfDirStr := pkiConfDir.String() - return nil + vhostCertFilePath := pkiConfDirStr + "/" + vhostHostnameStr + ".crt" + err = os.Remove(vhostCertFilePath) + if err != nil { + slog.Error("RemoveSslCertFileError", slog.String("error", err.Error())) + } + + vhostCertKeyFilePath := pkiConfDirStr + "/" + vhostHostnameStr + ".key" + err = os.Remove(vhostCertKeyFilePath) + if err != nil { + slog.Error("RemoveSslCertKeyFileError", slog.String("error", err.Error())) + } + + err = os.Remove(vhostWebServerConfFilePath.String()) + if err != nil { + return errors.New("RemoveWebServerUnitConfFileError: " + err.Error()) + } + + return infraHelper.ReloadWebServer() } diff --git a/src/infra/vhost/virtualHostCmdRepo_test.go b/src/infra/vhost/virtualHostCmdRepo_test.go index 222c46f51..ef8b31d8b 100644 --- a/src/infra/vhost/virtualHostCmdRepo_test.go +++ b/src/infra/vhost/virtualHostCmdRepo_test.go @@ -17,29 +17,48 @@ func TestVirtualHostCmdRepo(t *testing.T) { vhostCmdRepo := NewVirtualHostCmdRepo(persistentDbSvc) vhostQueryRepo := NewVirtualHostQueryRepo(persistentDbSvc) - vhostName, _ := infraHelper.GetPrimaryVirtualHost() + vhostName, _ := infraHelper.ReadPrimaryVirtualHostHostname() t.Run("Create", func(t *testing.T) { vhostType, _ := valueObject.NewVirtualHostType("top-level") operatorAccountId, _ := valueObject.NewAccountId(0) - ipAddress := valueObject.NewLocalhostIpAddress() - dto := dto.NewCreateVirtualHost( - vhostName, vhostType, nil, operatorAccountId, ipAddress, - ) + ipAddress := valueObject.IpAddressSystem - err := vhostCmdRepo.Create(dto) + err := vhostCmdRepo.Create(dto.NewCreateVirtualHost( + vhostName, vhostType, nil, nil, operatorAccountId, ipAddress, + )) if err != nil { t.Errorf("ExpectingNoErrorButGot: %v", err) } }) - t.Run("Delete", func(t *testing.T) { - vhost, err := vhostQueryRepo.ReadByHostname(vhostName) + t.Run("Update", func(t *testing.T) { + vhostReadResponse, err := vhostQueryRepo.Read(dto.ReadVirtualHostsRequest{ + Pagination: dto.PaginationUnpaginated, + }) + if err != nil || len(vhostReadResponse.VirtualHosts) == 0 { + t.Errorf("ExpectingNoErrorButGot: %v", err) + } + + isWildcard := true + err = vhostCmdRepo.Update(dto.UpdateVirtualHost{ + Hostname: vhostReadResponse.VirtualHosts[0].Hostname, + IsWildcard: &isWildcard, + }) if err != nil { t.Errorf("ExpectingNoErrorButGot: %v", err) } + }) + + t.Run("Delete", func(t *testing.T) { + vhostReadResponse, err := vhostQueryRepo.Read(dto.ReadVirtualHostsRequest{ + Pagination: dto.PaginationUnpaginated, + }) + if err != nil || len(vhostReadResponse.VirtualHosts) == 0 { + t.Errorf("ExpectingNoErrorButGot: %v", err) + } - err = vhostCmdRepo.Delete(vhost) + err = vhostCmdRepo.Delete(vhostReadResponse.VirtualHosts[0].Hostname) if err != nil { t.Errorf("ExpectingNoErrorButGot: %v", err) } diff --git a/src/infra/vhost/virtualHostQueryRepo.go b/src/infra/vhost/virtualHostQueryRepo.go index 280fa0739..800e30568 100644 --- a/src/infra/vhost/virtualHostQueryRepo.go +++ b/src/infra/vhost/virtualHostQueryRepo.go @@ -4,11 +4,13 @@ import ( "errors" "log/slog" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/valueObject" infraEnvs "github.com/goinfinite/os/src/infra/envs" infraHelper "github.com/goinfinite/os/src/infra/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" + dbHelper "github.com/goinfinite/os/src/infra/internalDatabase/helper" dbModel "github.com/goinfinite/os/src/infra/internalDatabase/model" ) @@ -24,100 +26,197 @@ func NewVirtualHostQueryRepo( } } -func (repo *VirtualHostQueryRepo) Read() ([]entity.VirtualHost, error) { - entities := []entity.VirtualHost{} +func (repo *VirtualHostQueryRepo) Read(requestDto dto.ReadVirtualHostsRequest) ( + responseDto dto.ReadVirtualHostsResponse, err error, +) { + virtualHostModel := dbModel.VirtualHost{} + if requestDto.Hostname != nil { + virtualHostModel.Hostname = requestDto.Hostname.String() + } + if requestDto.VirtualHostType != nil { + virtualHostModel.Type = requestDto.VirtualHostType.String() + } + if requestDto.RootDirectory != nil { + virtualHostModel.RootDirectory = requestDto.RootDirectory.String() + } + if requestDto.ParentHostname != nil { + parentHostnameStr := requestDto.ParentHostname.String() + virtualHostModel.ParentHostname = &parentHostnameStr + } + if requestDto.IsPrimary != nil && *requestDto.IsPrimary { + primaryHostname, err := infraHelper.ReadPrimaryVirtualHostHostname() + if err != nil { + return responseDto, errors.New("ReadPrimaryVirtualHostHostnameError: " + err.Error()) + } + virtualHostModel.Hostname = primaryHostname.String() + } + + dbQuery := repo.persistentDbSvc.Handler.Model(virtualHostModel). + Preload("Aliases").Where(&virtualHostModel) + if requestDto.IsWildcard != nil { + dbQuery = dbQuery.Where("is_wildcard = ?", *requestDto.IsWildcard) + } + if len(requestDto.AliasesHostnames) > 0 { + dbQuery = dbQuery.Where("Aliases.Hostname = ?", requestDto.AliasesHostnames) + } + if requestDto.CreatedBeforeAt != nil { + dbQuery = dbQuery.Where("created_at < ?", requestDto.CreatedBeforeAt.ReadAsGoTime()) + } + if requestDto.CreatedAfterAt != nil { + dbQuery = dbQuery.Where("created_at > ?", requestDto.CreatedAfterAt.ReadAsGoTime()) + } + + if requestDto.Pagination.SortBy != nil { + sortByStr := requestDto.Pagination.SortBy.String() + switch sortByStr { + case "virtualHostType": + sortByStr = "Type" + } - models := []dbModel.VirtualHost{} - err := repo.persistentDbSvc.Handler. - Model(&models). - Find(&models).Error + sortBy, err := valueObject.NewPaginationSortBy(sortByStr) + if err == nil { + requestDto.Pagination.SortBy = &sortBy + } + } + paginatedDbQuery, responsePagination, err := dbHelper.PaginationQueryBuilder( + dbQuery, requestDto.Pagination, + ) if err != nil { - return entities, errors.New("ReadDatabaseEntriesError") + return responseDto, errors.New("PaginationQueryBuilderError: " + err.Error()) } - for _, model := range models { - entity, err := model.ToEntity() + vhostModels := []dbModel.VirtualHost{} + err = paginatedDbQuery.Find(&vhostModels).Error + if err != nil { + return responseDto, errors.New("FindVirtualHostsError: " + err.Error()) + } + + vhostEntities := []entity.VirtualHost{} + for _, virtualHostModel := range vhostModels { + vhostEntity, err := virtualHostModel.ToEntity() if err != nil { - slog.Error("ModelToEntityError", slog.Any("error", err)) + slog.Debug( + "VirtualHostModelToEntityError", + slog.String("hostname", virtualHostModel.Hostname), + slog.String("error", err.Error()), + ) continue } - - entities = append(entities, entity) + vhostEntities = append(vhostEntities, vhostEntity) } - return entities, nil -} + responseDto = dto.ReadVirtualHostsResponse{ + Pagination: responsePagination, + VirtualHosts: vhostEntities, + } -func (repo *VirtualHostQueryRepo) ReadByHostname( - hostname valueObject.Fqdn, -) (vhostEntity entity.VirtualHost, err error) { + if requestDto.WithMappings == nil { + return responseDto, nil + } + if !*requestDto.WithMappings { + return responseDto, nil + } - model := dbModel.VirtualHost{} - err = repo.persistentDbSvc.Handler. - Model(&dbModel.VirtualHost{}). - Where("hostname = ?", hostname.String()). - First(&model).Error + mappingQueryRepo := NewMappingQueryRepo(repo.persistentDbSvc) + readMappingsResponse, err := mappingQueryRepo.Read(dto.ReadMappingsRequest{ + Pagination: dto.PaginationUnpaginated, + Hostname: requestDto.Hostname, + }) if err != nil { - errorMessage := "VhostNotFound" - if err.Error() != "record not found" { - errorMessage = "ReadDatabaseEntryError" + return responseDto, errors.New("ReadMappingsError: " + err.Error()) + } + + hostnameMappingEntitiesMap := map[valueObject.Fqdn][]entity.Mapping{} + for _, mappingEntity := range readMappingsResponse.Mappings { + hostnameMappingEntitiesMap[mappingEntity.Hostname] = append( + hostnameMappingEntitiesMap[mappingEntity.Hostname], mappingEntity, + ) + } + + virtualHostWithMappings := []dto.VirtualHostWithMappings{} + for _, virtualHostEntity := range responseDto.VirtualHosts { + mappingEntities := []entity.Mapping{} + if _, mappingExists := hostnameMappingEntitiesMap[virtualHostEntity.Hostname]; mappingExists { + mappingEntities = hostnameMappingEntitiesMap[virtualHostEntity.Hostname] } - return vhostEntity, errors.New(errorMessage) + virtualHostWithMappings = append(virtualHostWithMappings, dto.VirtualHostWithMappings{ + VirtualHost: virtualHostEntity, + Mappings: mappingEntities, + }) } - vhostEntity, err = model.ToEntity() + return dto.ReadVirtualHostsResponse{ + Pagination: responsePagination, + VirtualHostWithMappings: virtualHostWithMappings, + }, nil +} + +func (repo *VirtualHostQueryRepo) ReadFirst( + requestDto dto.ReadVirtualHostsRequest, +) (vhostEntity entity.VirtualHost, err error) { + requestDto.WithMappings = nil + requestDto.Pagination = dto.PaginationSingleItem + responseDto, err := repo.Read(requestDto) if err != nil { - return vhostEntity, errors.New("ModelToEntityError") + return vhostEntity, err } - return vhostEntity, nil + if len(responseDto.VirtualHosts) == 0 { + return vhostEntity, errors.New("VirtualHostNotFound") + } + + return responseDto.VirtualHosts[0], nil } -func (repo *VirtualHostQueryRepo) ReadAliasesByParentHostname( - hostname valueObject.Fqdn, -) ([]entity.VirtualHost, error) { - aliasesEntities := []entity.VirtualHost{} +func (repo *VirtualHostQueryRepo) ReadFirstWithMappings( + requestDto dto.ReadVirtualHostsRequest, +) (vhostWithMappingsDto dto.VirtualHostWithMappings, err error) { + withMappings := true + requestDto.WithMappings = &withMappings + requestDto.Pagination = dto.PaginationSingleItem - aliasesModels := []dbModel.VirtualHost{} - err := repo.persistentDbSvc.Handler. - Model(&aliasesModels). - Where("parent_hostname = ?", hostname.String()). - Find(&aliasesModels).Error + responseDto, err := repo.Read(requestDto) if err != nil { - return aliasesEntities, errors.New("ReadDatabaseEntriesError") + return vhostWithMappingsDto, err } - for _, aliasModel := range aliasesModels { - aliasEntity, err := aliasModel.ToEntity() - if err != nil { - slog.Error("ModelToEntityError", slog.Any("error", err)) - continue - } - - aliasesEntities = append(aliasesEntities, aliasEntity) + if len(responseDto.VirtualHostWithMappings) == 0 { + return vhostWithMappingsDto, errors.New("VirtualHostNotFound") } - return aliasesEntities, nil + return responseDto.VirtualHostWithMappings[0], nil } -func (repo *VirtualHostQueryRepo) GetVirtualHostMappingsFilePath( - vhostName valueObject.Fqdn, -) (valueObject.UnixFilePath, error) { - var vhostFilePath valueObject.UnixFilePath - - vhost, err := repo.ReadByHostname(vhostName) +func (repo *VirtualHostQueryRepo) ReadVirtualHostMappingsFilePath( + vhostHostname valueObject.Fqdn, +) (mappingsFilePath valueObject.UnixFilePath, err error) { + vhostEntity, err := repo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: &vhostHostname, + }) if err != nil { - return vhostFilePath, errors.New("VirtualHostNotFound") + return mappingsFilePath, errors.New("ReadVirtualHostEntityError: " + err.Error()) } - if vhost.Type.String() == "alias" { - vhostName = *vhost.ParentHostname + if vhostEntity.Type == valueObject.VirtualHostTypeAlias { + if vhostEntity.ParentHostname == nil { + return mappingsFilePath, errors.New("AliasMissingParentHostname") + } + + vhostEntity, err = repo.ReadFirst(dto.ReadVirtualHostsRequest{ + Hostname: vhostEntity.ParentHostname, + }) + if err != nil { + return mappingsFilePath, errors.New( + "ReadParentVirtualHostEntityError: " + err.Error(), + ) + } + vhostHostname = vhostEntity.Hostname } - vhostFileNameStr := vhostName.String() + ".conf" - if infraHelper.IsPrimaryVirtualHost(vhostName) { - vhostFileNameStr = infraEnvs.PrimaryVhostFileName + vhostFileNameStr := vhostHostname.String() + ".conf" + if vhostEntity.IsPrimary { + vhostFileNameStr = "primary.conf" } return valueObject.NewUnixFilePath( diff --git a/src/infra/vhost/virtualHostQueryRepo_test.go b/src/infra/vhost/virtualHostQueryRepo_test.go index 196f027c7..e8b8e11a8 100644 --- a/src/infra/vhost/virtualHostQueryRepo_test.go +++ b/src/infra/vhost/virtualHostQueryRepo_test.go @@ -4,7 +4,7 @@ import ( "testing" testHelpers "github.com/goinfinite/os/src/devUtils" - infraHelper "github.com/goinfinite/os/src/infra/helper" + "github.com/goinfinite/os/src/domain/dto" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" ) @@ -15,37 +15,13 @@ func TestVirtualHostQueryRepo(t *testing.T) { vhostQueryRepo := NewVirtualHostQueryRepo(persistentDbSvc) t.Run("Read", func(t *testing.T) { - vhosts, err := vhostQueryRepo.Read() + withMappings := true + _, err := vhostQueryRepo.Read(dto.ReadVirtualHostsRequest{ + Pagination: dto.PaginationUnpaginated, + WithMappings: &withMappings, + }) if err != nil { t.Errorf("ExpectingNoErrorButGot: %v", err) } - - if len(vhosts) > 0 { - t.Errorf("ExpectingEmptySliceButGot: %v", len(vhosts)) - } - }) - - t.Run("ReadByHostname", func(t *testing.T) { - hostname, _ := infraHelper.GetPrimaryVirtualHost() - vhost, err := vhostQueryRepo.ReadByHostname(hostname) - if err != nil && err.Error() != "VhostNotFound" { - t.Errorf("ExpectingNoErrorButGot: %v", err) - } - - if vhost.Hostname != "" { - t.Errorf("ExpectingEmptyVhostButGot: %v", vhost) - } - }) - - t.Run("ReadAliasesByParentHostname", func(t *testing.T) { - hostname, _ := infraHelper.GetPrimaryVirtualHost() - aliases, err := vhostQueryRepo.ReadAliasesByParentHostname(hostname) - if err != nil && err.Error() != "VhostNotFound" { - t.Errorf("ExpectingNoErrorButGot: %v", err) - } - - if len(aliases) > 0 { - t.Errorf("ExpectingEmptySliceButGot: %v", len(aliases)) - } }) } diff --git a/src/infra/webServer/webServerSetup.go b/src/infra/webServer/webServerSetup.go index 186a36fb5..e027f8295 100644 --- a/src/infra/webServer/webServerSetup.go +++ b/src/infra/webServer/webServerSetup.go @@ -15,6 +15,7 @@ import ( internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" o11yInfra "github.com/goinfinite/os/src/infra/o11y" servicesInfra "github.com/goinfinite/os/src/infra/services" + vhostInfra "github.com/goinfinite/os/src/infra/vhost" "github.com/goinfinite/os/src/presentation/service" ) @@ -46,13 +47,13 @@ func (ws *WebServerSetup) updatePhpMaxChildProcesses(memoryTotal valueObject.Byt } desiredChildProcessesStr := strconv.FormatInt(desiredChildProcesses, 10) - _, err := infraHelper.RunCmd( - "sed", - "-i", - "-e", - "s/PHP_LSAPI_CHILDREN=[0-9]+/PHP_LSAPI_CHILDREN="+desiredChildProcessesStr+";/g", - infraEnvs.PhpWebserverMainConfFilePath, - ) + _, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "sed", + Args: []string{ + "-i", "-e", "s/PHP_LSAPI_CHILDREN=[0-9]+/PHP_LSAPI_CHILDREN=" + desiredChildProcessesStr + ";/g", + infraEnvs.PhpWebserverMainConfFilePath, + }, + }) if err != nil { return errors.New("UpdateMaxChildProcessesFailed") } @@ -68,42 +69,67 @@ func (ws *WebServerSetup) FirstSetup() { log.Print("FirstBootDetected! PleaseAwait...") - primaryVhost, err := infraHelper.GetPrimaryVirtualHost() + primaryVirtualHostHostname, err := infraHelper.ReadPrimaryVirtualHostHostname() if err != nil { log.Fatal("PrimaryVirtualHostNotFound") } - - primaryVhostStr := primaryVhost.String() + primaryHostnameStr := primaryVirtualHostHostname.String() log.Print("UpdatingPrimaryVirtualHost...") - primaryConfFilePath := "/app/conf/nginx/primary.conf" - _, err = infraHelper.RunCmd( - "sed", "-i", "s/goinfinite.local/"+primaryVhostStr+"/g", primaryConfFilePath, - ) + primaryConfFilePath := infraEnvs.VirtualHostsConfDir + "/primary.conf" + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "sed", + Args: []string{ + "-i", + "s/" + infraEnvs.DefaultPrimaryVhost + "/" + primaryHostnameStr + "/g", + primaryConfFilePath, + }, + }) if err != nil { - log.Fatal("UpdateVhostFailed") + log.Fatal("UpdatePrimaryVirtualHostFileFailed") } log.Print("GeneratingDhParams...") - _, err = infraHelper.RunCmd( - "openssl", "dhparam", "-dsaparam", "-out", "/etc/nginx/dhparam.pem", "2048", - ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "openssl", + Args: []string{ + "dhparam", "-dsaparam", "-out", "/etc/nginx/dhparam.pem", "2048", + }, + }) if err != nil { log.Fatal("GenerateDhparamFailed") } log.Print("GeneratingSelfSignedCert...") - aliases := []string{} + pkiConfDir, err := valueObject.NewUnixFilePath(infraEnvs.PkiConfDir) + if err != nil { + log.Fatal("PkiConfDirNotFound") + } + + aliasesHostnames := []valueObject.Fqdn{} err = infraHelper.CreateSelfSignedSsl( - infraEnvs.PkiConfDir, primaryVhostStr, aliases, + pkiConfDir, primaryVirtualHostHostname, aliasesHostnames, ) if err != nil { log.Fatal("GenerateSelfSignedCertFailed: ", err.Error()) } + err = infraHelper.RestorePrimaryIndexFile() + if err != nil { + log.Fatal(err.Error()) + } + + log.Print("GenerateMappingSecurityRules...") + + mappingCmdRepo := vhostInfra.NewMappingCmdRepo(ws.persistentDbSvc) + err = mappingCmdRepo.RecreateSecurityRuleFiles() + if err != nil { + log.Fatal("GenerateMappingSecurityRulesFailed: ", err.Error()) + } + log.Print("ConfiguringWebServerAutoStart...") servicesCmdRepo := servicesInfra.NewServicesCmdRepo(ws.persistentDbSvc) @@ -111,7 +137,7 @@ func (ws *WebServerSetup) FirstSetup() { nginxAutoStart := true updateServiceDto := dto.NewUpdateService( nginxServiceName, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, &nginxAutoStart, nil, nil, nil, nil, nil, + nil, nil, &nginxAutoStart, nil, nil, nil, nil, nil, nil, service.LocalOperatorAccountId, service.LocalOperatorIpAddress, ) err = servicesCmdRepo.Update(updateServiceDto) @@ -125,14 +151,17 @@ func (ws *WebServerSetup) FirstSetup() { // Do not write any code after this as supervisorctl reload will restart // the OS API and any remaining code will not be executed. - _, _ = infraHelper.RunCmd("supervisorctl", "-p", "replacedOnFirstBoot", "reload") + _, _ = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "supervisorctl", + Args: []string{"-p", "replacedOnFirstBoot", "reload"}, + }) } func (ws *WebServerSetup) OnStartSetup() { defaultLogPrefix := "WsOnStartupSetup" o11yQueryRepo := o11yInfra.NewO11yQueryRepo(ws.transientDbSvc) - containerResources, err := o11yQueryRepo.ReadOverview() + containerResources, err := o11yQueryRepo.ReadOverview(false) if err != nil { log.Fatalf("%sGetContainerResourcesFailed", defaultLogPrefix) } @@ -141,9 +170,10 @@ func (ws *WebServerSetup) OnStartSetup() { cpuCoresStr := strconv.FormatInt(int64(math.Ceil(cpuCores)), 10) nginxConfFilePath := "/etc/nginx/nginx.conf" - workerCount, err := infraHelper.RunCmd( - "awk", "/worker_processes/{gsub(/[^0-9]+/, \"\"); print}", nginxConfFilePath, - ) + workerCount, err := infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "awk", + Args: []string{"/worker_processes/{gsub(/[^0-9]+/, \"\"); print}", nginxConfFilePath}, + }) if err != nil { log.Fatalf("%sGetNginxWorkersCountFailed", defaultLogPrefix) } @@ -175,10 +205,13 @@ func (ws *WebServerSetup) OnStartSetup() { log.Print("UpdatingNginxWorkersCount...") - _, err = infraHelper.RunCmd( - "sed", "-i", "-e", "s/^worker_processes.*/worker_processes "+cpuCoresStr+";/g", - nginxConfFilePath, - ) + _, err = infraHelper.RunCmd(infraHelper.RunCmdSettings{ + Command: "sed", + Args: []string{ + "-i", "-e", "s/^worker_processes.*/worker_processes " + cpuCoresStr + ";/g", + nginxConfFilePath, + }, + }) if err != nil { log.Fatalf("%sUpdateNginxWorkersCountFailed", defaultLogPrefix) } diff --git a/src/presentation/api/api.go b/src/presentation/api/api.go index 985c8bc57..385769e7e 100644 --- a/src/presentation/api/api.go +++ b/src/presentation/api/api.go @@ -14,7 +14,7 @@ const ( ) // @title OsApi -// @version 0.1.5 +// @version 0.2.5 // @description Infinite OS API // @termsOfService https://goinfinite.net/tos/ diff --git a/src/presentation/api/controller/account.go b/src/presentation/api/controller/account.go index c1fc7e387..14cf560f3 100644 --- a/src/presentation/api/controller/account.go +++ b/src/presentation/api/controller/account.go @@ -1,7 +1,6 @@ package apiController import ( - voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" apiHelper "github.com/goinfinite/os/src/presentation/api/helper" "github.com/goinfinite/os/src/presentation/service" @@ -86,15 +85,6 @@ func (controller *AccountController) Update(c echo.Context) error { return err } - shouldUpdateApiKey, err := voHelper.InterfaceToBool( - requestInputData["shouldUpdateApiKey"], - ) - if err == nil && shouldUpdateApiKey { - return apiHelper.ServiceResponseWrapper( - c, controller.accountService.Update(requestInputData), - ) - } - return apiHelper.ServiceResponseWrapper( c, controller.accountService.Update(requestInputData), ) diff --git a/src/presentation/api/controller/database.go b/src/presentation/api/controller/database.go index 31c8e1530..cb61cd731 100644 --- a/src/presentation/api/controller/database.go +++ b/src/presentation/api/controller/database.go @@ -1,14 +1,13 @@ package apiController import ( - "errors" - "log/slog" - "net/http" - + "github.com/goinfinite/os/src/domain/valueObject" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" apiHelper "github.com/goinfinite/os/src/presentation/api/helper" "github.com/goinfinite/os/src/presentation/service" "github.com/labstack/echo/v4" + + tkPresentation "github.com/goinfinite/tk/src/presentation" ) type DatabaseController struct { @@ -28,15 +27,22 @@ func NewDatabaseController( } } -// GetDatabases godoc -// @Summary GetDatabases +// ReadDatabases godoc +// @Summary ReadDatabases // @Description List databases names, users and sizes. // @Tags database // @Security Bearer // @Accept json // @Produce json // @Param dbType path string true "DatabaseType (like mysql, postgres)" -// @Success 200 {array} entity.Database +// @Param name query string false "DatabaseName" +// @Param username query string false "DatabaseUsername" +// @Param pageNumber query uint false "PageNumber (Pagination)" +// @Param itemsPerPage query uint false "ItemsPerPage (Pagination)" +// @Param sortBy query string false "SortBy (Pagination)" +// @Param sortDirection query string false "SortDirection (Pagination)" +// @Param lastSeenId query string false "LastSeenId (Pagination)" +// @Success 200 {object} dto.ReadDatabasesResponse // @Router /v1/database/{dbType}/ [get] func (controller *DatabaseController) Read(c echo.Context) error { requestInputData, err := apiHelper.ReadRequestInputData(c) @@ -93,35 +99,6 @@ func (controller *DatabaseController) Delete(c echo.Context) error { ) } -func (controller *DatabaseController) parseUserPrivileges(rawPrivileges interface{}) ( - rawPrivilegesStrSlice []string, err error, -) { - rawUniquePrivilegeStr, assertOk := rawPrivileges.(string) - if assertOk { - return []string{rawUniquePrivilegeStr}, nil - } - - rawPrivilegesStrSlice, assertOk = rawPrivileges.([]string) - if assertOk { - return rawPrivilegesStrSlice, nil - } - - rawPrivilegesInterfaceSlice, assertOk := rawPrivileges.([]interface{}) - if !assertOk { - return rawPrivilegesStrSlice, errors.New("PrivilegesMustBeStringOrStringSlice") - } - for _, rawPrivilege := range rawPrivilegesInterfaceSlice { - rawPrivilegeStr, assertOk := rawPrivilege.(string) - if !assertOk { - slog.Debug("InvalidPrivilegeType", slog.Any("privilege", rawPrivilege)) - continue - } - rawPrivilegesStrSlice = append(rawPrivilegesStrSlice, rawPrivilegeStr) - } - - return rawPrivilegesStrSlice, nil -} - // CreateDatabaseUser godoc // @Summary CreateDatabaseUser // @Description Create a new database user. @@ -140,16 +117,15 @@ func (controller *DatabaseController) CreateUser(c echo.Context) error { return err } - rawPrivilegesSlice := []string{} if requestInputData["privileges"] != nil { - rawPrivilegesSlice, err = controller.parseUserPrivileges( - requestInputData["privileges"], - ) - if err != nil { - return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) + if requestInputData["privileges"] == "" { + delete(requestInputData, "privileges") } + + requestInputData["privileges"] = tkPresentation.StringSliceValueObjectParser( + requestInputData["privileges"], valueObject.NewDatabasePrivilege, + ) } - requestInputData["privileges"] = rawPrivilegesSlice return apiHelper.ServiceResponseWrapper( c, controller.dbService.CreateUser(requestInputData), diff --git a/src/presentation/api/controller/files.go b/src/presentation/api/controller/files.go index 1946a5411..c41b9b659 100644 --- a/src/presentation/api/controller/files.go +++ b/src/presentation/api/controller/files.go @@ -1,6 +1,7 @@ package apiController import ( + "errors" "log/slog" "mime/multipart" "net/http" @@ -17,8 +18,8 @@ import ( ) type FilesController struct { - filesQueryRepo filesInfra.FilesQueryRepo - filesCmdRepo filesInfra.FilesCmdRepo + filesQueryRepo *filesInfra.FilesQueryRepo + filesCmdRepo *filesInfra.FilesCmdRepo activityRecordCmdRepo *activityRecordInfra.ActivityRecordCmdRepo } @@ -26,8 +27,8 @@ func NewFilesController( trailDbSvc *internalDbInfra.TrailDatabaseService, ) *FilesController { return &FilesController{ - filesQueryRepo: filesInfra.FilesQueryRepo{}, - filesCmdRepo: filesInfra.FilesCmdRepo{}, + filesQueryRepo: &filesInfra.FilesQueryRepo{}, + filesCmdRepo: filesInfra.NewFilesCmdRepo(), activityRecordCmdRepo: activityRecordInfra.NewActivityRecordCmdRepo(trailDbSvc), } } @@ -40,22 +41,38 @@ func NewFilesController( // @Produce json // @Security Bearer // @Param sourcePath query string true "SourcePath" -// @Success 200 {array} entity.UnixFile +// @Param shouldIncludeFileTree query bool false "ShouldIncludeFileTree" +// @Success 200 {array} dto.ReadFilesResponse // @Router /v1/files/ [get] func (controller *FilesController) Read(c echo.Context) error { + requiredParams := []string{"sourcePath"} requestInputData, err := apiHelper.ReadRequestInputData(c) if err != nil { return err } + apiHelper.CheckMissingParams(requestInputData, requiredParams) sourcePath, err := valueObject.NewUnixFilePath(requestInputData["sourcePath"]) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } - filesQueryRepo := filesInfra.FilesQueryRepo{} + shouldIncludeFileTree := false + if requestInputData["shouldIncludeFileTree"] != nil { + shouldIncludeFileTree, err = voHelper.InterfaceToBool( + requestInputData["shouldIncludeFileTree"], + ) + if err != nil { + return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) + } + } + + readFilesRequestDto := dto.ReadFilesRequest{ + SourcePath: sourcePath, + ShouldIncludeFileTree: &shouldIncludeFileTree, + } - filesList, err := useCase.ReadFiles(filesQueryRepo, sourcePath) + filesList, err := useCase.ReadFiles(controller.filesQueryRepo, readFilesRequestDto) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusInternalServerError, err.Error()) } @@ -86,27 +103,23 @@ func (controller *FilesController) Create(c echo.Context) error { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } - fileTypeStr := "generic" + fileType := valueObject.MimeTypeGeneric if requestInputData["mimeType"] != nil { - fileTypeStr, err = voHelper.InterfaceToString(requestInputData["mimeType"]) + fileType, err = valueObject.NewMimeType(requestInputData["mimeType"]) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } - if fileTypeStr != "directory" && fileTypeStr != "generic" { - fileTypeStr = "generic" + if fileType != valueObject.MimeTypeDirectory { + fileType = valueObject.MimeTypeGeneric } } - fileType, err := valueObject.NewMimeType(fileTypeStr) - if err != nil { - return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) - } successResponse := "FileCreated" - filePermissions, _ := valueObject.NewUnixFilePermissions("0644") + filePermissions := valueObject.NewUnixFileDefaultPermissions() if fileType.IsDir() { - filePermissions, _ = valueObject.NewUnixFilePermissions("0755") + filePermissions = valueObject.NewUnixDirDefaultPermissions() successResponse = "DirectoryCreated" } @@ -149,21 +162,40 @@ func (controller *FilesController) Create(c echo.Context) error { } func (controller *FilesController) parseSourcePaths( - rawSourcePaths []interface{}, + rawSourcePathsUnknownType any, ) ([]valueObject.UnixFilePath, error) { - filePaths := []valueObject.UnixFilePath{} + sourcePaths := []valueObject.UnixFilePath{} + + rawSourcePathsStrSlice := []string{} + switch rawSourcePathsValues := rawSourcePathsUnknownType.(type) { + case string: + rawSourcePathsStrSlice = []string{rawSourcePathsValues} + case []string: + rawSourcePathsStrSlice = rawSourcePathsValues + case []interface{}: + for _, rawSourcePath := range rawSourcePathsValues { + rawSourcePathStr, err := voHelper.InterfaceToString(rawSourcePath) + if err != nil { + slog.Debug(err.Error(), slog.Any("rawSourcePath", rawSourcePath)) + continue + } + rawSourcePathsStrSlice = append(rawSourcePathsStrSlice, rawSourcePathStr) + } + default: + return sourcePaths, errors.New("SourcePathsMustBeStringSlice") + } - for pathIndex, rawSourcePath := range rawSourcePaths { - filePath, err := valueObject.NewUnixFilePath(rawSourcePath) + for _, rawSourcePath := range rawSourcePathsStrSlice { + sourcePath, err := valueObject.NewUnixFilePath(rawSourcePath) if err != nil { - slog.Debug(err.Error(), slog.Int("index", pathIndex)) + slog.Debug(err.Error(), slog.String("rawSourcePath", rawSourcePath)) continue } - filePaths = append(filePaths, filePath) + sourcePaths = append(sourcePaths, sourcePath) } - return filePaths, nil + return sourcePaths, nil } // UpdateFile godoc @@ -190,27 +222,9 @@ func (controller *FilesController) Update(c echo.Context) error { } } - if requestInputData["sourcePaths"] == nil { - if _, exists := requestInputData["sourcePath"]; exists { - requestInputData["sourcePaths"] = requestInputData["sourcePath"] - } - } - apiHelper.CheckMissingParams(requestInputData, requiredParams) - _, isSourcePathsString := requestInputData["sourcePath"].(string) - if isSourcePathsString { - requestInputData["sourcePaths"] = []interface{}{requestInputData["sourcePath"]} - } - - sourcePathsSlice, assertOk := requestInputData["sourcePaths"].([]interface{}) - if !assertOk { - return apiHelper.ResponseWrapper( - c, http.StatusBadRequest, "SourcePathMustBeArray", - ) - } - - sourcePaths, err := controller.parseSourcePaths(sourcePathsSlice) + sourcePaths, err := controller.parseSourcePaths(requestInputData["sourcePaths"]) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } @@ -248,6 +262,28 @@ func (controller *FilesController) Update(c echo.Context) error { encodedContentPtr = &encodedContent } + var ownershipPtr *valueObject.UnixFileOwnership + if requestInputData["ownership"] != nil { + ownership, err := valueObject.NewUnixFileOwnership( + requestInputData["ownership"], + ) + if err != nil { + return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) + } + ownershipPtr = &ownership + } + + var shouldFixPermissionsPtr *bool + if requestInputData["shouldFixPermissions"] != nil { + shouldFixPermissions, err := voHelper.InterfaceToBool( + requestInputData["shouldFixPermissions"], + ) + if err != nil { + return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) + } + shouldFixPermissionsPtr = &shouldFixPermissions + } + operatorAccountId, err := valueObject.NewAccountId( requestInputData["operatorAccountId"], ) @@ -264,27 +300,28 @@ func (controller *FilesController) Update(c echo.Context) error { updateUnixFileDto := dto.NewUpdateUnixFiles( sourcePaths, destinationPathPtr, permissionsPtr, encodedContentPtr, - operatorAccountId, operatorIpAddress, + ownershipPtr, shouldFixPermissionsPtr, operatorAccountId, operatorIpAddress, ) updateUnixFileUc := useCase.NewUpdateUnixFiles( - controller.filesCmdRepo, controller.activityRecordCmdRepo, + controller.filesQueryRepo, controller.filesCmdRepo, controller.activityRecordCmdRepo, ) updateProcessInfo, err := updateUnixFileUc.Execute(updateUnixFileDto) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusInternalServerError, err.Error()) } - httpStatus := http.StatusOK - hasSuccess := len(updateProcessInfo.FilePathsSuccessfullyUpdated) > 0 hasFailures := len(updateProcessInfo.FailedPathsWithReason) > 0 + if !hasSuccess && hasFailures { + return apiHelper.ResponseWrapper(c, http.StatusInternalServerError, updateProcessInfo) + } wasPartiallySuccessful := hasSuccess && hasFailures if wasPartiallySuccessful { - httpStatus = http.StatusMultiStatus + return apiHelper.ResponseWrapper(c, http.StatusMultiStatus, updateProcessInfo) } - return apiHelper.ResponseWrapper(c, httpStatus, updateProcessInfo) + return apiHelper.ResponseWrapper(c, http.StatusOK, updateProcessInfo) } // CopyFile godoc @@ -379,27 +416,9 @@ func (controller *FilesController) Delete(c echo.Context) error { } } - if requestInputData["sourcePaths"] == nil { - if _, exists := requestInputData["sourcePath"]; exists { - requestInputData["sourcePaths"] = requestInputData["sourcePath"] - } - } - apiHelper.CheckMissingParams(requestInputData, requiredParams) - _, isSourcePathsString := requestInputData["sourcePath"].(string) - if isSourcePathsString { - requestInputData["sourcePaths"] = []interface{}{requestInputData["sourcePath"]} - } - - sourcePathsSlice, assertOk := requestInputData["sourcePaths"].([]interface{}) - if !assertOk { - return apiHelper.ResponseWrapper( - c, http.StatusBadRequest, "SourcePathMustBeArray", - ) - } - - sourcePaths, err := controller.parseSourcePaths(sourcePathsSlice) + sourcePaths, err := controller.parseSourcePaths(requestInputData["sourcePaths"]) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } @@ -472,19 +491,7 @@ func (controller *FilesController) Compress(c echo.Context) error { apiHelper.CheckMissingParams(requestInputData, requiredParams) - _, isSourcePathsString := requestInputData["sourcePath"].(string) - if isSourcePathsString { - requestInputData["sourcePaths"] = []interface{}{requestInputData["sourcePath"]} - } - - sourcePathsSlice, assertOk := requestInputData["sourcePaths"].([]interface{}) - if !assertOk { - return apiHelper.ResponseWrapper( - c, http.StatusBadRequest, "SourcePathMustBeArray", - ) - } - - sourcePaths, err := controller.parseSourcePaths(sourcePathsSlice) + sourcePaths, err := controller.parseSourcePaths(requestInputData["sourcePaths"]) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } @@ -662,16 +669,17 @@ func (controller *FilesController) Upload(c echo.Context) error { return apiHelper.ResponseWrapper(c, http.StatusInternalServerError, err.Error()) } - httpStatus := http.StatusCreated - hasSuccess := len(uploadProcessInfo.FileNamesSuccessfullyUploaded) > 0 hasFailures := len(uploadProcessInfo.FailedNamesWithReason) > 0 + if !hasSuccess && hasFailures { + return apiHelper.ResponseWrapper(c, http.StatusInternalServerError, uploadProcessInfo) + } wasPartiallySuccessful := hasSuccess && hasFailures if wasPartiallySuccessful { - httpStatus = http.StatusMultiStatus + return apiHelper.ResponseWrapper(c, http.StatusMultiStatus, uploadProcessInfo) } - return apiHelper.ResponseWrapper(c, httpStatus, uploadProcessInfo) + return apiHelper.ResponseWrapper(c, http.StatusOK, uploadProcessInfo) } // DownloadFile godoc @@ -695,5 +703,5 @@ func (controller *FilesController) Download(c echo.Context) error { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } - return c.Attachment(sourcePath.String(), sourcePath.GetFileName().String()) + return c.Attachment(sourcePath.String(), sourcePath.ReadFileName().String()) } diff --git a/src/presentation/api/controller/services.go b/src/presentation/api/controller/services.go index 5a6bf1301..8a3b2fd83 100644 --- a/src/presentation/api/controller/services.go +++ b/src/presentation/api/controller/services.go @@ -7,11 +7,13 @@ import ( "time" "github.com/goinfinite/os/src/domain/useCase" + "github.com/goinfinite/os/src/domain/valueObject" voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" servicesInfra "github.com/goinfinite/os/src/infra/services" apiHelper "github.com/goinfinite/os/src/presentation/api/helper" "github.com/goinfinite/os/src/presentation/service" + sharedHelper "github.com/goinfinite/os/src/presentation/shared/helper" "github.com/labstack/echo/v4" ) @@ -88,76 +90,146 @@ func (controller *ServicesController) ReadInstallablesItems(c echo.Context) erro ) } -func (controller *ServicesController) parseRawEnvs(envs interface{}) ([]string, error) { - rawEnvs := []string{} - rawEnvsSlice, assertOk := envs.([]interface{}) - if !assertOk { - rawEnvUnique, assertOk := envs.(string) +func (controller *ServicesController) transformRawEnvsInterfaceSliceToMap( + rawEnvsInterface []interface{}, +) map[string]interface{} { + rawEnvsMap := map[string]interface{}{} + + for rawEnvIndex, rawEnvInterface := range rawEnvsInterface { + rawEnvMap, assertOk := rawEnvInterface.(map[string]interface{}) if !assertOk { - return rawEnvs, errors.New("EnvsMustBeStringOrStringSlice") + slog.Debug("InvalidEnvStructure", slog.Int("envIndex", rawEnvIndex)) + continue } - rawEnvsSlice = []interface{}{rawEnvUnique} - } - for _, rawEnv := range rawEnvsSlice { - rawEnvStr, err := voHelper.InterfaceToString(rawEnv) + envVarNameStr, err := voHelper.InterfaceToString(rawEnvMap["name"]) if err != nil { - slog.Debug(err.Error(), slog.Any("env", rawEnv)) + slog.Debug("EnvVarNameMustBeString", slog.Int("envIndex", rawEnvIndex)) continue } - rawEnvs = append(rawEnvs, rawEnvStr) + rawEnvsMap[envVarNameStr] = rawEnvMap["value"] } - return rawEnvs, nil + return rawEnvsMap } -func (controller *ServicesController) parseRawPortBindings( - bindings interface{}, -) ([]string, error) { - rawPortBindings := []string{} - rawPortBindingsSlice, assertOk := bindings.([]interface{}) - if !assertOk { - rawPortBindingUnique, assertOk := bindings.(map[string]interface{}) - if !assertOk { - return rawPortBindings, errors.New("PortBindingsMustBeMapOrMapSlice") +func (controller *ServicesController) parseRawEnvs( + rawEnvsUnknownType any, +) ([]valueObject.ServiceEnv, error) { + serviceEnvs := []valueObject.ServiceEnv{} + + rawEnvsMap := map[string]interface{}{} + switch rawEnvsValues := rawEnvsUnknownType.(type) { + case string, []string: + return sharedHelper.StringSliceValueObjectParser( + rawEnvsValues, valueObject.NewServiceEnv, + ), nil + case []interface{}: + rawEnvsMap = controller.transformRawEnvsInterfaceSliceToMap(rawEnvsValues) + case map[string]interface{}: + rawEnvsMap = rawEnvsValues + default: + return serviceEnvs, errors.New("EnvsMustBeStringOrStringSliceOrMapOrMapSlice") + } + + for envVarName, envVarValue := range rawEnvsMap { + envValueStr, err := voHelper.InterfaceToString(envVarValue) + if err != nil { + slog.Debug("InvalidServiceEnvValue", slog.Any("envVarName", envVarName)) + continue } - rawPortBindingsSlice = []interface{}{rawPortBindingUnique} + + serviceEnvStr := envVarName + "=" + envValueStr + serviceEnv, err := valueObject.NewServiceEnv(serviceEnvStr) + if err != nil { + slog.Debug(err.Error(), slog.Any("envVarName", envVarName)) + continue + } + + serviceEnvs = append(serviceEnvs, serviceEnv) } - for _, rawPortBinding := range rawPortBindingsSlice { - rawPortBindingMap, assertOk := rawPortBinding.(map[string]interface{}) + return serviceEnvs, nil +} + +func (controller *ServicesController) transformRawPortBindingsInterfaceSliceToMap( + rawPortBindingsInterface []interface{}, +) map[string]interface{} { + rawPortBindingsMap := map[string]interface{}{} + + for rawPortBindingIndex, rawPortBindingInterface := range rawPortBindingsInterface { + rawPortBindingMap, assertOk := rawPortBindingInterface.(map[string]interface{}) if !assertOk { slog.Debug( - "InvalidPortBindingStructure", slog.Any("portBinding", rawPortBinding), + "InvalidPortBindingStructure", + slog.Int("portBindingIndex", rawPortBindingIndex), ) continue } - rawPortStr, err := voHelper.InterfaceToString(rawPortBindingMap["port"]) + portStr, err := voHelper.InterfaceToString(rawPortBindingMap["port"]) if err != nil { - slog.Debug(err.Error(), slog.Any("port", rawPortBindingMap["port"])) + slog.Debug( + "PortBindingPortBeString", + slog.Int("portBindingIndex", rawPortBindingIndex), + ) continue } + rawPortBindingsMap[portStr] = rawPortBindingMap["protocol"] + } - rawPortBindingStr := rawPortStr + return rawPortBindingsMap +} + +func (controller *ServicesController) parseRawPortBindings( + rawPortBindingsUnknownType any, +) ([]valueObject.PortBinding, error) { + portBindings := []valueObject.PortBinding{} + + rawPortBindingsInterfaceSlice := []interface{}{} + switch rawPortBindingsValues := rawPortBindingsUnknownType.(type) { + case string, []string: + return sharedHelper.StringSliceValueObjectParser( + rawPortBindingsValues, valueObject.NewPortBinding, + ), nil + case []interface{}: + rawPortBindingsInterfaceSlice = rawPortBindingsValues + case map[string]interface{}: + rawPortBindingsInterfaceSlice = []interface{}{rawPortBindingsValues} + default: + return portBindings, errors.New( + "PortBindingsMustBeStringOrStringSliceOrMapOrMapSlice", + ) + } + + rawPortBindingsMap := controller.transformRawPortBindingsInterfaceSliceToMap( + rawPortBindingsInterfaceSlice, + ) - if _, protocolInputExists := rawPortBindingMap["protocol"]; protocolInputExists { - rawProtocolStr, err := voHelper.InterfaceToString( - rawPortBindingMap["protocol"], + rawPortBindingIndex := -1 + for port, protocol := range rawPortBindingsMap { + rawPortBindingIndex++ + + protocolStr, err := voHelper.InterfaceToString(protocol) + if err != nil { + slog.Debug( + "InvalidPortBindingProtocol", + slog.Int("portBindingIndex", rawPortBindingIndex), ) - if err != nil { - slog.Debug(err.Error(), slog.Any( - "protocol", rawPortBindingMap["protocol"]), - ) - continue - } - rawPortBindingStr += "/" + rawProtocolStr + continue + } + + portBindingStr := port + "/" + protocolStr + portBinding, err := valueObject.NewPortBinding(portBindingStr) + if err != nil { + slog.Debug(err.Error(), slog.Any("port", port)) + continue } - rawPortBindings = append(rawPortBindings, rawPortBindingStr) + portBindings = append(portBindings, portBinding) } - return rawPortBindings, nil + return portBindings, nil } // CreateInstallableService godoc @@ -176,25 +248,25 @@ func (controller *ServicesController) CreateInstallable(c echo.Context) error { return err } - rawEnvs := []string{} + envs := []valueObject.ServiceEnv{} if requestInputData["envs"] != nil { - rawEnvs, err = controller.parseRawEnvs(requestInputData["envs"]) + envs, err = controller.parseRawEnvs(requestInputData["envs"]) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } } - requestInputData["envs"] = rawEnvs + requestInputData["envs"] = envs - rawPortBindings := []string{} + portBindings := []valueObject.PortBinding{} if requestInputData["portBindings"] != nil { - rawPortBindings, err = controller.parseRawPortBindings( + portBindings, err = controller.parseRawPortBindings( requestInputData["portBindings"], ) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } } - requestInputData["portBindings"] = rawPortBindings + requestInputData["portBindings"] = portBindings return apiHelper.ServiceResponseWrapper( c, controller.servicesService.CreateInstallable(requestInputData, true), @@ -217,25 +289,25 @@ func (controller *ServicesController) CreateCustom(c echo.Context) error { return err } - rawEnvs := []string{} + envs := []valueObject.ServiceEnv{} if requestInputData["envs"] != nil { - rawEnvs, err = controller.parseRawEnvs(requestInputData["envs"]) + envs, err = controller.parseRawEnvs(requestInputData["envs"]) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } } - requestInputData["envs"] = rawEnvs + requestInputData["envs"] = envs - rawPortBindings := []string{} + portBindings := []valueObject.PortBinding{} if requestInputData["portBindings"] != nil { - rawPortBindings, err = controller.parseRawPortBindings( + portBindings, err = controller.parseRawPortBindings( requestInputData["portBindings"], ) if err != nil { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err) } } - requestInputData["portBindings"] = rawPortBindings + requestInputData["portBindings"] = portBindings return apiHelper.ServiceResponseWrapper( c, controller.servicesService.CreateCustom(requestInputData), @@ -296,6 +368,7 @@ func (controller *ServicesController) Delete(c echo.Context) error { if err != nil { return err } + requestInputData["name"] = requestInputData["svcName"] return apiHelper.ServiceResponseWrapper( c, controller.servicesService.Delete(requestInputData), diff --git a/src/presentation/api/controller/setup.go b/src/presentation/api/controller/setup.go index 4924049e0..f1518eeb3 100644 --- a/src/presentation/api/controller/setup.go +++ b/src/presentation/api/controller/setup.go @@ -60,6 +60,8 @@ func (controller *SetupController) Setup(c echo.Context) error { return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) } + isSuperAdmin := false + operatorIpAddress := service.LocalOperatorIpAddress if requestBody["operatorIpAddress"] != nil { operatorIpAddress, err = valueObject.NewIpAddress( @@ -71,7 +73,8 @@ func (controller *SetupController) Setup(c echo.Context) error { } createDto := dto.NewCreateAccount( - username, password, service.LocalOperatorAccountId, operatorIpAddress, + username, password, isSuperAdmin, service.LocalOperatorAccountId, + operatorIpAddress, ) err = useCase.CreateFirstAccount( diff --git a/src/presentation/api/controller/ssl.go b/src/presentation/api/controller/ssl.go index 964fc3c1a..abd4d621b 100644 --- a/src/presentation/api/controller/ssl.go +++ b/src/presentation/api/controller/ssl.go @@ -2,17 +2,17 @@ package apiController import ( "errors" - "log/slog" "net/http" "time" "github.com/goinfinite/os/src/domain/useCase" "github.com/goinfinite/os/src/domain/valueObject" - voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" sslInfra "github.com/goinfinite/os/src/infra/ssl" + vhostInfra "github.com/goinfinite/os/src/infra/vhost" apiHelper "github.com/goinfinite/os/src/presentation/api/helper" "github.com/goinfinite/os/src/presentation/service" + sharedHelper "github.com/goinfinite/os/src/presentation/shared/helper" "github.com/labstack/echo/v4" ) @@ -43,41 +43,50 @@ func NewSslController( // @Accept json // @Produce json // @Security Bearer -// @Success 200 {array} entity.SslPair +// @Param sslPairId query string false "SslPairId" +// @Param virtualHostHostname query string false "VirtualHostHostname" +// @Param altNames query string false "AltNames" +// @Param issuedBeforeAt query string false "IssuedBeforeAt" +// @Param issuedAfterAt query string false "IssuedAfterAt" +// @Param expiresBeforeAt query string false "ExpiresBeforeAt" +// @Param expiresAfterAt query string false "ExpiresAfterAt" +// @Param pageNumber query uint false "PageNumber (Pagination)" +// @Param itemsPerPage query uint false "ItemsPerPage (Pagination)" +// @Param sortBy query string false "SortBy (Pagination)" +// @Param sortDirection query string false "SortDirection (Pagination)" +// @Param lastSeenId query string false "LastSeenId (Pagination)" +// @Success 200 {object} dto.ReadSslPairsResponse // @Router /v1/ssl/ [get] func (controller *SslController) Read(c echo.Context) error { - return apiHelper.ServiceResponseWrapper(c, controller.sslService.Read()) -} - -func (controller *SslController) parseRawVhosts( - rawVhostsInput interface{}, -) (rawVhostsStrSlice []string, err error) { - var assertOk bool - - rawVhostsStrSlice, assertOk = rawVhostsInput.([]string) - if assertOk { - return rawVhostsStrSlice, nil + requestInputData, err := apiHelper.ReadRequestInputData(c) + if err != nil { + return err } - rawVhostsInterfaceSlice, assertOk := rawVhostsInput.([]interface{}) - if !assertOk { - rawVhostUniqueStr, err := voHelper.InterfaceToString(rawVhostsInput) - if err != nil { - return rawVhostsStrSlice, errors.New("VirtualHostsMustBeStringOrStringSlice") - } - return append(rawVhostsStrSlice, rawVhostUniqueStr), err + if requestInputData["altNames"] != nil { + requestInputData["altNames"] = sharedHelper.StringSliceValueObjectParser( + requestInputData["altNames"], valueObject.NewSslHostname, + ) } - for _, rawVhost := range rawVhostsInterfaceSlice { - rawVhostStr, err := voHelper.InterfaceToString(rawVhost) - if err != nil { - slog.Debug(err.Error(), slog.Any("vhost", rawVhost)) - continue - } - rawVhostsStrSlice = append(rawVhostsStrSlice, rawVhostStr) + return apiHelper.ServiceResponseWrapper( + c, controller.sslService.Read(requestInputData), + ) +} + +func (controller *SslController) decodeContent( + rawContent interface{}, +) (decodedContent string, err error) { + encodedContent, err := valueObject.NewEncodedContent(rawContent) + if err != nil { + return decodedContent, err + } + decodedContent, err = encodedContent.GetDecodedContent() + if err != nil { + return decodedContent, errors.New("CannotDecodeContent") } - return rawVhostsStrSlice, nil + return decodedContent, nil } // CreateSslPair godoc @@ -87,7 +96,7 @@ func (controller *SslController) parseRawVhosts( // @Accept json // @Produce json // @Security Bearer -// @Param createSslPairDto body dto.CreateSslPair true "All props are required.
virtualHosts may be string or []string. Alias is not allowed.
certificate is a string field, i.e. ignore the structure shown.
certificate and key must be base64 encoded." +// @Param createSslPairDto body dto.CreateSslPair true "All props are required.
virtualHosts may be string or []string. Alias is not allowed.
certificate is a string field, i.e. ignore the structure shown.
certificate and key must be base64 encoded.
certificate should include the CA chain/bundle if not provided in the certificate field." // @Success 201 {object} object{} "SslPairCreated" // @Router /v1/ssl/ [post] func (controller *SslController) Create(c echo.Context) error { @@ -96,96 +105,89 @@ func (controller *SslController) Create(c echo.Context) error { return err } - rawVhosts, err := controller.parseRawVhosts(requestInputData["virtualHosts"]) - if err != nil { - return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) + if requestInputData["virtualHostsHostnames"] == nil { + return apiHelper.ResponseWrapper(c, http.StatusBadRequest, "VirtualHostHostnameIsRequired") } - requestInputData["virtualHosts"] = rawVhosts - if _, exists := requestInputData["encodedCertificate"]; !exists { - if _, exists = requestInputData["certificate"]; exists { - requestInputData["encodedCertificate"] = requestInputData["certificate"] + requestInputData["virtualHostsHostnames"] = sharedHelper.StringSliceValueObjectParser( + requestInputData["virtualHostsHostnames"], valueObject.NewFqdn, + ) + + if requestInputData["encodedCertificate"] != nil { + requestInputData["certificate"], err = controller.decodeContent( + requestInputData["encodedCertificate"], + ) + if err != nil { + return apiHelper.ResponseWrapper(c, http.StatusBadRequest, "CannotDecodeSslCertificateContent") } } - encodedCert, err := valueObject.NewEncodedContent(requestInputData["encodedCertificate"]) - if err != nil { - return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) - } - decodedCert, err := encodedCert.GetDecodedContent() - if err != nil { - return apiHelper.ResponseWrapper( - c, http.StatusBadRequest, "CannotDecodeSslCertificateContent", + + if requestInputData["encodedKey"] != nil { + requestInputData["key"], err = controller.decodeContent( + requestInputData["encodedKey"], ) + if err != nil { + return apiHelper.ResponseWrapper(c, http.StatusBadRequest, "CannotDecodeSslKeyContent") + } } - requestInputData["certificate"] = decodedCert - if _, exists := requestInputData["encodedKey"]; !exists { - if _, exists = requestInputData["key"]; exists { - requestInputData["encodedKey"] = requestInputData["key"] + if requestInputData["encodedChainCertificates"] != nil && requestInputData["encodedChainCertificates"] != "" { + requestInputData["chainCertificates"], err = controller.decodeContent( + requestInputData["encodedChainCertificates"], + ) + if err != nil { + return apiHelper.ResponseWrapper(c, http.StatusBadRequest, "CannotDecodeSslChainCertificatesContent") } } - encodedKey, err := valueObject.NewEncodedContent(requestInputData["encodedKey"]) - if err != nil { - return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) - } - decodedKey, err := encodedKey.GetDecodedContent() - if err != nil { - return apiHelper.ResponseWrapper( - c, http.StatusBadRequest, "CannotDecodeSslPrivateKeyContent", - ) + + if requestInputData["chainCertificates"] != nil && requestInputData["chainCertificates"] == "" { + requestInputData["chainCertificates"] = nil } - requestInputData["key"] = decodedKey return apiHelper.ServiceResponseWrapper( c, controller.sslService.Create(requestInputData), ) } -// DeleteSslPair godoc -// @Summary DeleteSslPair -// @Description Delete a ssl pair. +// CreatePubliclyTrusted godoc +// @Summary CreatePubliclyTrusted +// @Description Create a new publicly trusted ssl pair. // @Tags ssl // @Accept json // @Produce json // @Security Bearer -// @Param sslPairId path string true "SslPairId to delete." -// @Success 200 {object} object{} "SslPairDeleted" -// @Router /v1/ssl/{sslPairId}/ [delete] -func (controller *SslController) Delete(c echo.Context) error { +// @Param createPubliclyTrustedDto body dto.CreatePubliclyTrustedSslPair true "All props are required." +// @Success 201 {object} object{} "PubliclyTrustedSslPairCreationScheduled" +// @Router /v1/ssl/trusted/ [post] +func (controller *SslController) CreatePubliclyTrusted(c echo.Context) error { requestInputData, err := apiHelper.ReadRequestInputData(c) if err != nil { return err } return apiHelper.ServiceResponseWrapper( - c, controller.sslService.Delete(requestInputData), + c, controller.sslService.CreatePubliclyTrusted(requestInputData, true), ) } -// DeleteSslPairVhosts godoc -// @Summary DeleteSslPairVhosts -// @Description Delete vhosts from a ssl pair. +// DeleteSslPair godoc +// @Summary DeleteSslPair +// @Description Delete a ssl pair. // @Tags ssl // @Accept json // @Produce json // @Security Bearer -// @Param deleteSslPairVhostsDto body dto.DeleteSslPairVhosts true "All props are required." -// @Success 200 {object} object{} "SslPairVhostsRemoved" -// @Router /v1/ssl/vhost/ [put] -func (controller *SslController) DeleteVhosts(c echo.Context) error { +// @Param sslPairId path string true "SslPairId to delete." +// @Success 200 {object} object{} "SslPairDeleted" +// @Router /v1/ssl/{sslPairId}/ [delete] +func (controller *SslController) Delete(c echo.Context) error { requestInputData, err := apiHelper.ReadRequestInputData(c) if err != nil { return err } - rawVhosts, err := controller.parseRawVhosts(requestInputData["virtualHosts"]) - if err != nil { - return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error()) - } - requestInputData["virtualHosts"] = rawVhosts - return apiHelper.ServiceResponseWrapper( - c, controller.sslService.DeleteVhosts(requestInputData), + c, controller.sslService.Delete(requestInputData), ) } @@ -196,15 +198,16 @@ func (controller *SslController) SslCertificateWatchdog() { timer := time.NewTicker(taskInterval) defer timer.Stop() - sslQueryRepo := sslInfra.SslQueryRepo{} + vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(controller.persistentDbSvc) + sslQueryRepo := sslInfra.NewSslQueryRepo() sslCmdRepo := sslInfra.NewSslCmdRepo( controller.persistentDbSvc, controller.transientDbSvc, ) + sslWatchdogUseCase := useCase.NewSslCertificateWatchdog( + vhostQueryRepo, sslQueryRepo, sslCmdRepo, + ) for range timer.C { - useCase.SslCertificateWatchdog( - sslQueryRepo, sslCmdRepo, service.LocalOperatorAccountId, - service.LocalOperatorIpAddress, - ) + sslWatchdogUseCase.Execute() } } diff --git a/src/presentation/api/controller/virtualHost.go b/src/presentation/api/controller/virtualHost.go index aab3e110d..f7a8b4c2a 100644 --- a/src/presentation/api/controller/virtualHost.go +++ b/src/presentation/api/controller/virtualHost.go @@ -5,6 +5,9 @@ import ( apiHelper "github.com/goinfinite/os/src/presentation/api/helper" "github.com/goinfinite/os/src/presentation/service" "github.com/labstack/echo/v4" + + tkValueObject "github.com/goinfinite/tk/src/domain/valueObject" + tkPresentation "github.com/goinfinite/tk/src/presentation" ) type VirtualHostController struct { @@ -27,10 +30,29 @@ func NewVirtualHostController( // @Security Bearer // @Accept json // @Produce json -// @Success 200 {array} entity.VirtualHost -// @Router /v1/vhosts/ [get] +// @Param hostname query string false "Hostname" +// @Param type query string false "Type" +// @Param rootDirectory query string false "RootDirectory" +// @Param parentHostname query string false "ParentHostname" +// @Param withMappings query bool false "WithMappings" +// @Param createdBeforeAt query string false "CreatedBeforeAt" +// @Param createdAfterAt query string false "CreatedAfterAt" +// @Param pageNumber query uint false "PageNumber (Pagination)" +// @Param itemsPerPage query uint false "ItemsPerPage (Pagination)" +// @Param sortBy query string false "SortBy (Pagination)" +// @Param sortDirection query string false "SortDirection (Pagination)" +// @Param lastSeenId query string false "LastSeenId (Pagination)" +// @Success 200 {object} dto.ReadVirtualHostsResponse +// @Router /v1/vhost/ [get] func (controller *VirtualHostController) Read(c echo.Context) error { - return apiHelper.ServiceResponseWrapper(c, controller.virtualHostService.Read()) + requestInputData, err := apiHelper.ReadRequestInputData(c) + if err != nil { + return err + } + + return apiHelper.ServiceResponseWrapper( + c, controller.virtualHostService.Read(requestInputData), + ) } // CreateVirtualHost godoc @@ -42,7 +64,7 @@ func (controller *VirtualHostController) Read(c echo.Context) error { // @Security Bearer // @Param createVirtualHostDto body dto.CreateVirtualHost true "Only hostname is required.
type may be 'top-level', 'subdomain', 'wildcard' or 'alias'. If is not provided, it will be 'top-level'. If type is 'alias', 'parentHostname' will be required." // @Success 201 {object} object{} "VirtualHostCreated" -// @Router /v1/vhosts/ [post] +// @Router /v1/vhost/ [post] func (controller *VirtualHostController) Create(c echo.Context) error { requestInputData, err := apiHelper.ReadRequestInputData(c) if err != nil { @@ -54,6 +76,27 @@ func (controller *VirtualHostController) Create(c echo.Context) error { ) } +// UpdateVirtualHost godoc +// @Summary UpdateVirtualHost +// @Description Update a vhost. +// @Tags vhosts +// @Accept json +// @Produce json +// @Security Bearer +// @Param updateVirtualHostDto body dto.UpdateVirtualHost true "Only hostname is required." +// @Success 200 {object} object{} "VirtualHostUpdated" +// @Router /v1/vhost/ [put] +func (controller *VirtualHostController) Update(c echo.Context) error { + requestInputData, err := apiHelper.ReadRequestInputData(c) + if err != nil { + return err + } + + return apiHelper.ServiceResponseWrapper( + c, controller.virtualHostService.Update(requestInputData), + ) +} + // DeleteVirtualHost godoc // @Summary DeleteVirtualHost // @Description Delete a vhost. @@ -63,7 +106,7 @@ func (controller *VirtualHostController) Create(c echo.Context) error { // @Security Bearer // @Param hostname path string true "Hostname to delete" // @Success 200 {object} object{} "VirtualHostDeleted" -// @Router /v1/vhosts/{hostname}/ [delete] +// @Router /v1/vhost/{hostname}/ [delete] func (controller *VirtualHostController) Delete(c echo.Context) error { requestInputData, err := apiHelper.ReadRequestInputData(c) if err != nil { @@ -82,10 +125,29 @@ func (controller *VirtualHostController) Delete(c echo.Context) error { // @Security Bearer // @Accept json // @Produce json -// @Success 200 {array} dto.VirtualHostWithMappings -// @Router /v1/vhosts/mapping/ [get] +// @Param hostname query string false "Hostname" +// @Param type query string false "Type" +// @Param rootDirectory query string false "RootDirectory" +// @Param parentHostname query string false "ParentHostname" +// @Param withMappings query bool false "WithMappings" +// @Param createdBeforeAt query integer false "CreatedBeforeAt (Unix timestamp)" +// @Param createdAfterAt query integer false "CreatedAfterAt (Unix timestamp)" +// @Param pageNumber query uint false "PageNumber (Pagination)" +// @Param itemsPerPage query uint false "ItemsPerPage (Pagination)" +// @Param sortBy query string false "SortBy (Pagination)" +// @Param sortDirection query string false "SortDirection (Pagination)" +// @Param lastSeenId query string false "LastSeenId (Pagination)" +// @Success 200 {object} dto.VirtualHostWithMappings +// @Router /v1/vhost/mapping/ [get] func (controller *VirtualHostController) ReadWithMappings(c echo.Context) error { - return apiHelper.ServiceResponseWrapper(c, controller.virtualHostService.ReadWithMappings()) + requestInputData, err := apiHelper.ReadRequestInputData(c) + if err != nil { + return err + } + + return apiHelper.ServiceResponseWrapper( + c, controller.virtualHostService.ReadWithMappings(requestInputData), + ) } // CreateVirtualHostMapping godoc @@ -97,7 +159,7 @@ func (controller *VirtualHostController) ReadWithMappings(c echo.Context) error // @Security Bearer // @Param createMappingDto body dto.CreateMapping true "hostname, path and targetType are required.
matchPattern may be 'begins-with', 'contains', 'equals' or 'ends-with'. If is not provided, it will be 'begins-with'.
targetType may be 'url', 'service', 'response-code', 'inline-html' or 'static-files'. If targetType is 'url', targetHttpResponseCode may be provided. If is not provided, targetHttpResponseCode will be '200'. If targetType is 'response-code', targetHttpResponseCode may be provided. If is not provided, targetValue will be required. If both were provided, targetValue will have priority.
targetValue must have the same value as the targetType requires." // @Success 201 {object} object{} "MappingCreated" -// @Router /v1/vhosts/mapping/ [post] +// @Router /v1/vhost/mapping/ [post] func (controller *VirtualHostController) CreateMapping(c echo.Context) error { requestInputData, err := apiHelper.ReadRequestInputData(c) if err != nil { @@ -109,6 +171,27 @@ func (controller *VirtualHostController) CreateMapping(c echo.Context) error { ) } +// UpdateVirtualHostMapping godoc +// @Summary UpdateVirtualHostMapping +// @Description Update a vhost mapping. +// @Tags vhosts +// @Accept json +// @Produce json +// @Security Bearer +// @Param updateMappingDto body dto.UpdateMapping true "Only id is required. Other fields are optional and will only be updated if provided." +// @Success 200 {object} object{} "MappingUpdated" +// @Router /v1/vhost/mapping/ [put] +func (controller *VirtualHostController) UpdateMapping(c echo.Context) error { + requestInputData, err := apiHelper.ReadRequestInputData(c) + if err != nil { + return err + } + + return apiHelper.ServiceResponseWrapper( + c, controller.virtualHostService.UpdateMapping(requestInputData), + ) +} + // DeleteVirtualHostMapping godoc // @Summary DeleteVirtualHostMapping // @Description Delete a vhost mapping. @@ -118,7 +201,7 @@ func (controller *VirtualHostController) CreateMapping(c echo.Context) error { // @Security Bearer // @Param mappingId path uint true "MappingId to delete." // @Success 200 {object} object{} "MappingDeleted" -// @Router /v1/vhosts/mapping/{mappingId}/ [delete] +// @Router /v1/vhost/mapping/{mappingId}/ [delete] func (controller *VirtualHostController) DeleteMapping(c echo.Context) error { requestInputData, err := apiHelper.ReadRequestInputData(c) if err != nil { @@ -129,3 +212,123 @@ func (controller *VirtualHostController) DeleteMapping(c echo.Context) error { c, controller.virtualHostService.DeleteMapping(requestInputData), ) } + +// ReadMappingSecurityRules godoc +// @Summary ReadMappingSecurityRules +// @Description List mapping security rules. +// @Tags vhosts +// @Security Bearer +// @Accept json +// @Produce json +// @Param id query string false "MappingSecurityRuleId" +// @Param name query string false "MappingSecurityRuleName" +// @Param allowedIp query string false "AllowedIpAddress" +// @Param blockedIp query string false "BlockedIpAddress" +// @Param createdBeforeAt query integer false "CreatedBeforeAt (Unix timestamp)" +// @Param createdAfterAt query integer false "CreatedAfterAt (Unix timestamp)" +// @Param pageNumber query uint false "PageNumber (Pagination)" +// @Param itemsPerPage query uint false "ItemsPerPage (Pagination)" +// @Param sortBy query string false "SortBy (Pagination)" +// @Param sortDirection query string false "SortDirection (Pagination)" +// @Param lastSeenId query string false "LastSeenId (Pagination)" +// @Success 200 {object} dto.ReadMappingSecurityRulesResponse +// @Router /v1/vhost/mapping/security-rule/ [get] +func (controller *VirtualHostController) ReadMappingSecurityRules(c echo.Context) error { + requestInputData, err := apiHelper.ReadRequestInputData(c) + if err != nil { + return err + } + + return apiHelper.ServiceResponseWrapper( + c, controller.virtualHostService.ReadMappingSecurityRules( + requestInputData, + ), + ) +} + +// CreateMappingSecurityRule godoc +// @Summary CreateMappingSecurityRule +// @Description Create a new mapping security rule. +// @Tags vhosts +// @Accept json +// @Produce json +// @Security Bearer +// @Param createMappingSecurityRuleDto body dto.CreateMappingSecurityRule true "Only name is required." +// @Success 201 {object} object{} "MappingSecurityRuleCreated" +// @Router /v1/vhost/mapping/security-rule/ [post] +func (controller *VirtualHostController) CreateMappingSecurityRule(c echo.Context) error { + requestInputData, err := apiHelper.ReadRequestInputData(c) + if err != nil { + return err + } + + if requestInputData["allowedIps"] != nil { + requestInputData["allowedIps"] = tkPresentation.StringSliceValueObjectParser( + requestInputData["allowedIps"], tkValueObject.NewCidrBlock, + ) + } + + if requestInputData["blockedIps"] != nil { + requestInputData["blockedIps"] = tkPresentation.StringSliceValueObjectParser( + requestInputData["blockedIps"], tkValueObject.NewCidrBlock, + ) + } + + return apiHelper.ServiceResponseWrapper( + c, controller.virtualHostService.CreateMappingSecurityRule(requestInputData), + ) +} + +// UpdateMappingSecurityRule godoc +// @Summary UpdateMappingSecurityRule +// @Description Update a mapping security rule. +// @Tags vhosts +// @Accept json +// @Produce json +// @Security Bearer +// @Param updateMappingSecurityRuleDto body dto.UpdateMappingSecurityRule true "Only id is required." +// @Success 200 {object} object{} "MappingSecurityRuleUpdated" +// @Router /v1/vhost/mapping/security-rule/ [put] +func (controller *VirtualHostController) UpdateMappingSecurityRule(c echo.Context) error { + requestInputData, err := apiHelper.ReadRequestInputData(c) + if err != nil { + return err + } + + if requestInputData["allowedIps"] != nil { + requestInputData["allowedIps"] = tkPresentation.StringSliceValueObjectParser( + requestInputData["allowedIps"], tkValueObject.NewCidrBlock, + ) + } + + if requestInputData["blockedIps"] != nil { + requestInputData["blockedIps"] = tkPresentation.StringSliceValueObjectParser( + requestInputData["blockedIps"], tkValueObject.NewCidrBlock, + ) + } + + return apiHelper.ServiceResponseWrapper( + c, controller.virtualHostService.UpdateMappingSecurityRule(requestInputData), + ) +} + +// DeleteMappingSecurityRule godoc +// @Summary DeleteMappingSecurityRule +// @Description Delete a mapping security rule. +// @Tags vhosts +// @Accept json +// @Produce json +// @Security Bearer +// @Param id path uint true "MappingSecurityRuleId to delete." +// @Success 200 {object} object{} "MappingSecurityRuleDeleted" +// @Router /v1/vhost/mapping/security-rule/{id}/ [delete] +func (controller *VirtualHostController) DeleteMappingSecurityRule(c echo.Context) error { + requestInputData, err := apiHelper.ReadRequestInputData(c) + if err != nil { + return err + } + + return apiHelper.ServiceResponseWrapper( + c, controller.virtualHostService.DeleteMappingSecurityRule(requestInputData), + ) +} diff --git a/src/presentation/api/docs/docs.go b/src/presentation/api/docs/docs.go index c2e5ad0a8..60dc5239a 100644 --- a/src/presentation/api/docs/docs.go +++ b/src/presentation/api/docs/docs.go @@ -529,7 +529,7 @@ const docTemplate = `{ "tags": [ "database" ], - "summary": "GetDatabases", + "summary": "ReadDatabases", "parameters": [ { "type": "string", @@ -537,16 +537,55 @@ const docTemplate = `{ "name": "dbType", "in": "path", "required": true + }, + { + "type": "string", + "description": "DatabaseName", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "DatabaseUsername", + "name": "username", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/entity.Database" - } + "$ref": "#/definitions/dto.ReadDatabasesResponse" } } } @@ -769,6 +808,12 @@ const docTemplate = `{ "name": "sourcePath", "in": "query", "required": true + }, + { + "type": "boolean", + "description": "ShouldIncludeFileTree", + "name": "shouldIncludeFileTree", + "in": "query" } ], "responses": { @@ -777,7 +822,7 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/entity.UnixFile" + "$ref": "#/definitions/dto.ReadFilesResponse" } } } @@ -1995,14 +2040,85 @@ const docTemplate = `{ "ssl" ], "summary": "ReadSslPairs", + "parameters": [ + { + "type": "string", + "description": "SslPairId", + "name": "sslPairId", + "in": "query" + }, + { + "type": "string", + "description": "VirtualHostHostname", + "name": "virtualHostHostname", + "in": "query" + }, + { + "type": "string", + "description": "AltNames", + "name": "altNames", + "in": "query" + }, + { + "type": "string", + "description": "IssuedBeforeAt", + "name": "issuedBeforeAt", + "in": "query" + }, + { + "type": "string", + "description": "IssuedAfterAt", + "name": "issuedAfterAt", + "in": "query" + }, + { + "type": "string", + "description": "ExpiresBeforeAt", + "name": "expiresBeforeAt", + "in": "query" + }, + { + "type": "string", + "description": "ExpiresAfterAt", + "name": "expiresAfterAt", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/entity.SslPair" - } + "$ref": "#/definitions/dto.ReadSslPairsResponse" } } } @@ -2026,7 +2142,7 @@ const docTemplate = `{ "summary": "CreateSslPair", "parameters": [ { - "description": "All props are required.\u003cbr /\u003evirtualHosts may be string or []string. Alias is not allowed.\u003cbr /\u003ecertificate is a string field, i.e. ignore the structure shown.\u003cbr /\u003ecertificate and key must be base64 encoded.", + "description": "All props are required.\u003cbr /\u003evirtualHosts may be string or []string. Alias is not allowed.\u003cbr /\u003ecertificate is a string field, i.e. ignore the structure shown.\u003cbr /\u003ecertificate and key must be base64 encoded.\u003cbr /\u003ecertificate should include the CA chain/bundle if not provided in the certificate field.", "name": "createSslPairDto", "in": "body", "required": true, @@ -2045,14 +2161,14 @@ const docTemplate = `{ } } }, - "/v1/ssl/vhost/": { - "put": { + "/v1/ssl/trusted/": { + "post": { "security": [ { "Bearer": [] } ], - "description": "Delete vhosts from a ssl pair.", + "description": "Create a new publicly trusted ssl pair.", "consumes": [ "application/json" ], @@ -2062,21 +2178,21 @@ const docTemplate = `{ "tags": [ "ssl" ], - "summary": "DeleteSslPairVhosts", + "summary": "CreatePubliclyTrusted", "parameters": [ { "description": "All props are required.", - "name": "deleteSslPairVhostsDto", + "name": "createPubliclyTrustedDto", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dto.DeleteSslPairVhosts" + "$ref": "#/definitions/dto.CreatePubliclyTrustedSslPair" } } ], "responses": { - "200": { - "description": "SslPairVhostsRemoved", + "201": { + "description": "PubliclyTrustedSslPairCreationScheduled", "schema": { "type": "object" } @@ -2121,7 +2237,7 @@ const docTemplate = `{ } } }, - "/v1/vhosts/": { + "/v1/vhost/": { "get": { "security": [ { @@ -2139,25 +2255,96 @@ const docTemplate = `{ "vhosts" ], "summary": "ReadVirtualHosts", + "parameters": [ + { + "type": "string", + "description": "Hostname", + "name": "hostname", + "in": "query" + }, + { + "type": "string", + "description": "Type", + "name": "type", + "in": "query" + }, + { + "type": "string", + "description": "RootDirectory", + "name": "rootDirectory", + "in": "query" + }, + { + "type": "string", + "description": "ParentHostname", + "name": "parentHostname", + "in": "query" + }, + { + "type": "boolean", + "description": "WithMappings", + "name": "withMappings", + "in": "query" + }, + { + "type": "string", + "description": "CreatedBeforeAt", + "name": "createdBeforeAt", + "in": "query" + }, + { + "type": "string", + "description": "CreatedAfterAt", + "name": "createdAfterAt", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/entity.VirtualHost" - } + "$ref": "#/definitions/dto.ReadVirtualHostsResponse" } } } }, - "post": { + "put": { "security": [ { "Bearer": [] } ], - "description": "Create a new vhost.", + "description": "Update a vhost.", "consumes": [ "application/json" ], @@ -2167,54 +2354,23 @@ const docTemplate = `{ "tags": [ "vhosts" ], - "summary": "CreateVirtualHost", + "summary": "UpdateVirtualHost", "parameters": [ { - "description": "Only hostname is required.\u003cbr /\u003etype may be 'top-level', 'subdomain', 'wildcard' or 'alias'. If is not provided, it will be 'top-level'. If type is 'alias', 'parentHostname' will be required.", - "name": "createVirtualHostDto", + "description": "Only hostname is required.", + "name": "updateVirtualHostDto", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dto.CreateVirtualHost" - } - } - ], - "responses": { - "201": { - "description": "VirtualHostCreated", - "schema": { - "type": "object" + "$ref": "#/definitions/dto.UpdateVirtualHost" } } - } - } - }, - "/v1/vhosts/mapping/": { - "get": { - "security": [ - { - "Bearer": [] - } - ], - "description": "List virtual hosts with mappings.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "vhosts" ], - "summary": "ReadVirtualHostsWithMappings", "responses": { "200": { - "description": "OK", + "description": "VirtualHostUpdated", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/dto.VirtualHostWithMappings" - } + "type": "object" } } } @@ -2225,7 +2381,7 @@ const docTemplate = `{ "Bearer": [] } ], - "description": "Create a new vhost mapping.", + "description": "Create a new vhost.", "consumes": [ "application/json" ], @@ -2235,21 +2391,21 @@ const docTemplate = `{ "tags": [ "vhosts" ], - "summary": "CreateVirtualHostMapping", + "summary": "CreateVirtualHost", "parameters": [ { - "description": "hostname, path and targetType are required.\u003cbr /\u003ematchPattern may be 'begins-with', 'contains', 'equals' or 'ends-with'. If is not provided, it will be 'begins-with'.\u003cbr /\u003etargetType may be 'url', 'service', 'response-code', 'inline-html' or 'static-files'. If targetType is 'url', targetHttpResponseCode may be provided. If is not provided, targetHttpResponseCode will be '200'. If targetType is 'response-code', targetHttpResponseCode may be provided. If is not provided, targetValue will be required. If both were provided, targetValue will have priority.\u003cbr /\u003etargetValue must have the same value as the targetType requires.", - "name": "createMappingDto", + "description": "Only hostname is required.\u003cbr /\u003etype may be 'top-level', 'subdomain', 'wildcard' or 'alias'. If is not provided, it will be 'top-level'. If type is 'alias', 'parentHostname' will be required.", + "name": "createVirtualHostDto", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dto.CreateMapping" + "$ref": "#/definitions/dto.CreateVirtualHost" } } ], "responses": { "201": { - "description": "MappingCreated", + "description": "VirtualHostCreated", "schema": { "type": "object" } @@ -2257,14 +2413,14 @@ const docTemplate = `{ } } }, - "/v1/vhosts/mapping/{mappingId}/": { - "delete": { + "/v1/vhost/mapping/": { + "get": { "security": [ { "Bearer": [] } ], - "description": "Delete a vhost mapping.", + "description": "List virtual hosts with mappings.", "consumes": [ "application/json" ], @@ -2274,27 +2430,410 @@ const docTemplate = `{ "tags": [ "vhosts" ], - "summary": "DeleteVirtualHostMapping", + "summary": "ReadVirtualHostsWithMappings", "parameters": [ { - "type": "integer", - "description": "MappingId to delete.", - "name": "mappingId", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "MappingDeleted", - "schema": { - "type": "object" + "type": "string", + "description": "Hostname", + "name": "hostname", + "in": "query" + }, + { + "type": "string", + "description": "Type", + "name": "type", + "in": "query" + }, + { + "type": "string", + "description": "RootDirectory", + "name": "rootDirectory", + "in": "query" + }, + { + "type": "string", + "description": "ParentHostname", + "name": "parentHostname", + "in": "query" + }, + { + "type": "boolean", + "description": "WithMappings", + "name": "withMappings", + "in": "query" + }, + { + "type": "integer", + "description": "CreatedBeforeAt (Unix timestamp)", + "name": "createdBeforeAt", + "in": "query" + }, + { + "type": "integer", + "description": "CreatedAfterAt (Unix timestamp)", + "name": "createdAfterAt", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.VirtualHostWithMappings" + } + } + } + }, + "put": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Update a vhost mapping.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "UpdateVirtualHostMapping", + "parameters": [ + { + "description": "Only id is required. Other fields are optional and will only be updated if provided.", + "name": "updateMappingDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.UpdateMapping" + } + } + ], + "responses": { + "200": { + "description": "MappingUpdated", + "schema": { + "type": "object" + } + } + } + }, + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Create a new vhost mapping.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "CreateVirtualHostMapping", + "parameters": [ + { + "description": "hostname, path and targetType are required.\u003cbr /\u003ematchPattern may be 'begins-with', 'contains', 'equals' or 'ends-with'. If is not provided, it will be 'begins-with'.\u003cbr /\u003etargetType may be 'url', 'service', 'response-code', 'inline-html' or 'static-files'. If targetType is 'url', targetHttpResponseCode may be provided. If is not provided, targetHttpResponseCode will be '200'. If targetType is 'response-code', targetHttpResponseCode may be provided. If is not provided, targetValue will be required. If both were provided, targetValue will have priority.\u003cbr /\u003etargetValue must have the same value as the targetType requires.", + "name": "createMappingDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CreateMapping" + } + } + ], + "responses": { + "201": { + "description": "MappingCreated", + "schema": { + "type": "object" + } + } + } + } + }, + "/v1/vhost/mapping/security-rule/": { + "get": { + "security": [ + { + "Bearer": [] + } + ], + "description": "List mapping security rules.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "ReadMappingSecurityRules", + "parameters": [ + { + "type": "string", + "description": "MappingSecurityRuleId", + "name": "id", + "in": "query" + }, + { + "type": "string", + "description": "MappingSecurityRuleName", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "AllowedIpAddress", + "name": "allowedIp", + "in": "query" + }, + { + "type": "string", + "description": "BlockedIpAddress", + "name": "blockedIp", + "in": "query" + }, + { + "type": "integer", + "description": "CreatedBeforeAt (Unix timestamp)", + "name": "createdBeforeAt", + "in": "query" + }, + { + "type": "integer", + "description": "CreatedAfterAt (Unix timestamp)", + "name": "createdAfterAt", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.ReadMappingSecurityRulesResponse" + } + } + } + }, + "put": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Update a mapping security rule.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "UpdateMappingSecurityRule", + "parameters": [ + { + "description": "Only id is required.", + "name": "updateMappingSecurityRuleDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.UpdateMappingSecurityRule" + } + } + ], + "responses": { + "200": { + "description": "MappingSecurityRuleUpdated", + "schema": { + "type": "object" + } + } + } + }, + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Create a new mapping security rule.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "CreateMappingSecurityRule", + "parameters": [ + { + "description": "Only name is required.", + "name": "createMappingSecurityRuleDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CreateMappingSecurityRule" + } + } + ], + "responses": { + "201": { + "description": "MappingSecurityRuleCreated", + "schema": { + "type": "object" + } + } + } + } + }, + "/v1/vhost/mapping/security-rule/{id}/": { + "delete": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Delete a mapping security rule.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "DeleteMappingSecurityRule", + "parameters": [ + { + "type": "integer", + "description": "MappingSecurityRuleId to delete.", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "MappingSecurityRuleDeleted", + "schema": { + "type": "object" + } + } + } + } + }, + "/v1/vhost/mapping/{mappingId}/": { + "delete": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Delete a vhost mapping.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "DeleteVirtualHostMapping", + "parameters": [ + { + "type": "integer", + "description": "MappingId to delete.", + "name": "mappingId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "MappingDeleted", + "schema": { + "type": "object" } } } } }, - "/v1/vhosts/{hostname}/": { + "/v1/vhost/{hostname}/": { "delete": { "security": [ { @@ -2340,12 +2879,12 @@ const docTemplate = `{ "type": "string" }, "destinationPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "sourcePaths": { "type": "array", "items": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } } @@ -2354,19 +2893,22 @@ const docTemplate = `{ "type": "object", "properties": { "destinationPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "shouldOverwrite": { "type": "boolean" }, "sourcePath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, "dto.CreateAccount": { "type": "object", "properties": { + "isSuperAdmin": { + "type": "boolean" + }, "password": { "type": "string" }, @@ -2401,6 +2943,9 @@ const docTemplate = `{ "autoStart": { "type": "boolean" }, + "avatarUrl": { + "type": "string" + }, "envs": { "type": "array", "items": { @@ -2411,11 +2956,20 @@ const docTemplate = `{ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { + "$ref": "#/definitions/valueObject.UnixFilePath" + }, + "mappingHostname": { "type": "string" }, + "mappingPath": { + "type": "string" + }, + "mappingUpgradeInsecureRequests": { + "type": "boolean" + }, "maxStartRetries": { "type": "integer" }, @@ -2465,13 +3019,13 @@ const docTemplate = `{ "type": "integer" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "version": { "type": "string" }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -2521,6 +3075,15 @@ const docTemplate = `{ "type": "string" } }, + "mappingHostname": { + "type": "string" + }, + "mappingPath": { + "type": "string" + }, + "mappingUpgradeInsecureRequests": { + "type": "boolean" + }, "maxStartRetries": { "type": "integer" }, @@ -2534,13 +3097,16 @@ const docTemplate = `{ } }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "timeoutStartSecs": { "type": "integer" }, "version": { "type": "string" + }, + "workingDir": { + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -2550,23 +3116,81 @@ const docTemplate = `{ "hostname": { "type": "string" }, + "mappingSecurityRuleId": { + "type": "integer" + }, "matchPattern": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingMatchPattern" }, "path": { "type": "string" }, + "shouldUpgradeInsecureRequests": { + "type": "boolean" + }, "targetHttpResponseCode": { "type": "integer" }, "targetType": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingTargetType" }, "targetValue": { "type": "string" } } }, + "dto.CreateMappingSecurityRule": { + "type": "object", + "properties": { + "allowedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "bandwidthBpsLimitPerConnection": { + "type": "integer" + }, + "bandwidthLimitOnlyAfterBytes": { + "type": "integer" + }, + "blockedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": { + "type": "string" + }, + "maxConnectionsPerIp": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "responseCodeOnMaxConnections": { + "type": "integer" + }, + "responseCodeOnMaxRequests": { + "type": "integer" + }, + "rpsHardLimitPerIp": { + "type": "integer" + }, + "rpsSoftLimitPerIp": { + "type": "integer" + } + } + }, + "dto.CreatePubliclyTrustedSslPair": { + "type": "object", + "properties": { + "virtualHostHostname": { + "type": "string" + } + } + }, "dto.CreateSecureAccessPublicKey": { "type": "object", "properties": { @@ -2598,6 +3222,9 @@ const docTemplate = `{ "certificate": { "$ref": "#/definitions/entity.SslCertificate" }, + "chainCertificates": { + "$ref": "#/definitions/entity.SslCertificate" + }, "key": { "type": "string" }, @@ -2613,10 +3240,10 @@ const docTemplate = `{ "type": "object", "properties": { "filePath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "mimeType": { - "type": "string" + "$ref": "#/definitions/valueObject.MimeType" }, "permissions": { "type": "string" @@ -2629,25 +3256,14 @@ const docTemplate = `{ "hostname": { "type": "string" }, + "isWildcard": { + "type": "boolean" + }, "parentHostname": { "type": "string" }, "type": { - "type": "string" - } - } - }, - "dto.DeleteSslPairVhosts": { - "type": "object", - "properties": { - "sslPairId": { - "type": "string" - }, - "virtualHostsHostnames": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/definitions/valueObject.VirtualHostType" } } }, @@ -2655,10 +3271,10 @@ const docTemplate = `{ "type": "object", "properties": { "destinationPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "sourcePath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -2694,6 +3310,9 @@ const docTemplate = `{ "autoStart": { "type": "boolean" }, + "avatarUrl": { + "type": "string" + }, "createdAt": { "type": "integer" }, @@ -2707,10 +3326,10 @@ const docTemplate = `{ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "maxStartRetries": { "type": "integer" @@ -2722,7 +3341,7 @@ const docTemplate = `{ "type": "string" }, "nature": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceNature" }, "portBindings": { "type": "array", @@ -2730,50 +3349,20 @@ const docTemplate = `{ "$ref": "#/definitions/valueObject.PortBinding" } }, - "postStartCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "postStopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "preStartCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "preStopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, "startCmd": { "type": "string" }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "status": { "type": "string" }, - "stopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, "timeoutStartSecs": { "type": "integer" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "updatedAt": { "type": "integer" @@ -2782,7 +3371,7 @@ const docTemplate = `{ "type": "string" }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -2840,6 +3429,34 @@ const docTemplate = `{ } } }, + "dto.ReadDatabasesResponse": { + "type": "object", + "properties": { + "databases": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.Database" + } + }, + "pagination": { + "$ref": "#/definitions/dto.Pagination" + } + } + }, + "dto.ReadFilesResponse": { + "type": "object", + "properties": { + "fileTree": { + "$ref": "#/definitions/dto.UnixFileBranch" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.UnixFile" + } + } + } + }, "dto.ReadInstallableServicesItemsResponse": { "type": "object", "properties": { @@ -2874,6 +3491,20 @@ const docTemplate = `{ } } }, + "dto.ReadMappingSecurityRulesResponse": { + "type": "object", + "properties": { + "mappingSecurityRules": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.MappingSecurityRule" + } + }, + "pagination": { + "$ref": "#/definitions/dto.Pagination" + } + } + }, "dto.ReadMarketplaceCatalogItemsResponse": { "type": "object", "properties": { @@ -2916,12 +3547,69 @@ const docTemplate = `{ } } }, + "dto.ReadSslPairsResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/dto.Pagination" + }, + "sslPairs": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.SslPair" + } + } + } + }, + "dto.ReadVirtualHostsResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/dto.Pagination" + }, + "virtualHostWithMappings": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.VirtualHostWithMappings" + } + }, + "virtualHosts": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.VirtualHost" + } + } + } + }, + "dto.UnixFileBranch": { + "type": "object", + "properties": { + "branches": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/dto.UnixFileBranch" + } + }, + "mimeType": { + "$ref": "#/definitions/valueObject.MimeType" + }, + "name": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/valueObject.UnixFilePath" + } + } + }, "dto.UpdateAccount": { "type": "object", "properties": { "accountId": { "type": "integer" }, + "isSuperAdmin": { + "type": "boolean" + }, "password": { "type": "string" }, @@ -2947,6 +3635,82 @@ const docTemplate = `{ } } }, + "dto.UpdateMapping": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "mappingSecurityRuleId": { + "type": "integer" + }, + "matchPattern": { + "$ref": "#/definitions/valueObject.MappingMatchPattern" + }, + "path": { + "type": "string" + }, + "shouldUpgradeInsecureRequests": { + "type": "boolean" + }, + "targetHttpResponseCode": { + "type": "integer" + }, + "targetType": { + "$ref": "#/definitions/valueObject.MappingTargetType" + }, + "targetValue": { + "type": "string" + } + } + }, + "dto.UpdateMappingSecurityRule": { + "type": "object", + "properties": { + "allowedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "bandwidthBpsLimitPerConnection": { + "type": "integer" + }, + "bandwidthLimitOnlyAfterBytes": { + "type": "integer" + }, + "blockedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "maxConnectionsPerIp": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "responseCodeOnMaxConnections": { + "type": "integer" + }, + "responseCodeOnMaxRequests": { + "type": "integer" + }, + "rpsHardLimitPerIp": { + "type": "integer" + }, + "rpsSoftLimitPerIp": { + "type": "integer" + } + } + }, "dto.UpdatePhpConfigs": { "type": "object", "properties": { @@ -2993,6 +3757,9 @@ const docTemplate = `{ "autoStart": { "type": "boolean" }, + "avatarUrl": { + "type": "string" + }, "envs": { "type": "array", "items": { @@ -3003,10 +3770,10 @@ const docTemplate = `{ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "maxStartRetries": { "type": "integer" @@ -3048,7 +3815,7 @@ const docTemplate = `{ "type": "string" }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "status": { "type": "string" @@ -3063,13 +3830,13 @@ const docTemplate = `{ "type": "integer" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "version": { "type": "string" }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -3077,28 +3844,60 @@ const docTemplate = `{ "type": "object", "properties": { "destinationPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "encodedContent": { "type": "string" }, + "ownership": { + "$ref": "#/definitions/valueObject.UnixFileOwnership" + }, "permissions": { "type": "string" }, + "shouldFixPermissions": { + "type": "boolean" + }, "sourcePaths": { "type": "array", "items": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } } }, + "dto.UpdateVirtualHost": { + "type": "object", + "properties": { + "hostname": { + "type": "string" + }, + "isWildcard": { + "type": "boolean" + } + } + }, "dto.VirtualHostWithMappings": { "type": "object", "properties": { + "aliasesHostnames": { + "type": "array", + "items": { + "type": "string" + } + }, + "createdAt": { + "type": "integer" + }, "hostname": { "type": "string" }, + "isPrimary": { + "type": "boolean" + }, + "isWildcard": { + "type": "boolean" + }, "mappings": { "type": "array", "items": { @@ -3109,10 +3908,10 @@ const docTemplate = `{ "type": "string" }, "rootDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.VirtualHostType" } } }, @@ -3140,11 +3939,14 @@ const docTemplate = `{ "type": "integer" }, "homeDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "id": { "type": "integer" }, + "isSuperAdmin": { + "type": "boolean" + }, "secureAccessPublicKeys": { "type": "array", "items": { @@ -3238,10 +4040,10 @@ const docTemplate = `{ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "manifestVersion": { "type": "string" @@ -3250,7 +4052,7 @@ const docTemplate = `{ "type": "string" }, "nature": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceNature" }, "portBindings": { "type": "array", @@ -3262,10 +4064,10 @@ const docTemplate = `{ "type": "string" }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "versions": { "type": "array", @@ -3274,7 +4076,7 @@ const docTemplate = `{ } }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -3287,6 +4089,9 @@ const docTemplate = `{ "autoStart": { "type": "boolean" }, + "avatarUrl": { + "type": "string" + }, "createdAt": { "type": "integer" }, @@ -3300,10 +4105,10 @@ const docTemplate = `{ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "maxStartRetries": { "type": "integer" @@ -3312,7 +4117,7 @@ const docTemplate = `{ "type": "string" }, "nature": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceNature" }, "portBindings": { "type": "array", @@ -3320,50 +4125,20 @@ const docTemplate = `{ "$ref": "#/definitions/valueObject.PortBinding" } }, - "postStartCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "postStopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "preStartCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "preStopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, "startCmd": { "type": "string" }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "status": { "type": "string" }, - "stopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, "timeoutStartSecs": { "type": "integer" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "updatedAt": { "type": "integer" @@ -3372,30 +4147,104 @@ const docTemplate = `{ "type": "string" }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, "entity.Mapping": { "type": "object", "properties": { + "createdAt": { + "type": "integer" + }, + "hostname": { + "type": "string" + }, "id": { "type": "integer" }, - "matchPattern": { + "mappingSecurityRuleId": { + "type": "integer" + }, + "marketplaceInstalledItemId": { + "type": "integer" + }, + "marketplaceInstalledItemName": { "type": "string" }, + "matchPattern": { + "$ref": "#/definitions/valueObject.MappingMatchPattern" + }, "path": { "type": "string" }, + "shouldUpgradeInsecureRequests": { + "type": "boolean" + }, "targetHttpResponseCode": { "type": "integer" }, "targetType": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingTargetType" }, "targetValue": { "type": "string" + }, + "updatedAt": { + "type": "integer" + } + } + }, + "entity.MappingSecurityRule": { + "type": "object", + "properties": { + "allowedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "bandwidthBpsLimitPerConnection": { + "type": "integer" + }, + "bandwidthLimitOnlyAfterBytes": { + "type": "integer" + }, + "blockedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "createdAt": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "maxConnectionsPerIp": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "responseCodeOnMaxConnections": { + "type": "integer" + }, + "responseCodeOnMaxRequests": { + "type": "integer" + }, + "rpsHardLimitPerIp": { + "type": "integer" + }, + "rpsSoftLimitPerIp": { + "type": "integer" + }, + "updatedAt": { + "type": "integer" } } }, @@ -3471,7 +4320,7 @@ const docTemplate = `{ "type": "integer" }, "installDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "installUuid": { "type": "string" @@ -3713,11 +4562,8 @@ const docTemplate = `{ "sslPairId": { "type": "string" }, - "virtualHostsHostnames": { - "type": "array", - "items": { - "type": "string" - } + "virtualHostHostname": { + "type": "string" } } }, @@ -3737,7 +4583,7 @@ const docTemplate = `{ "type": "string" }, "mimeType": { - "type": "string" + "$ref": "#/definitions/valueObject.MimeType" }, "name": { "type": "string" @@ -3746,7 +4592,7 @@ const docTemplate = `{ "type": "string" }, "path": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "permissions": { "type": "string" @@ -3765,17 +4611,32 @@ const docTemplate = `{ "entity.VirtualHost": { "type": "object", "properties": { + "aliasesHostnames": { + "type": "array", + "items": { + "type": "string" + } + }, + "createdAt": { + "type": "integer" + }, "hostname": { "type": "string" }, + "isPrimary": { + "type": "boolean" + }, + "isWildcard": { + "type": "boolean" + }, "parentHostname": { "type": "string" }, "rootDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.VirtualHostType" } } }, @@ -3822,6 +4683,38 @@ const docTemplate = `{ } } }, + "valueObject.MappingMatchPattern": { + "type": "string", + "enum": [ + "begins-with", + "contains", + "equals", + "ends-with" + ], + "x-enum-varnames": [ + "MappingMatchPatternBeginsWith", + "MappingMatchPatternContains", + "MappingMatchPatternEquals", + "MappingMatchPatternEndsWith" + ] + }, + "valueObject.MappingTargetType": { + "type": "string", + "enum": [ + "url", + "service", + "response-code", + "inline-html", + "static-files" + ], + "x-enum-varnames": [ + "MappingTargetTypeUrl", + "MappingTargetTypeService", + "MappingTargetTypeResponseCode", + "MappingTargetTypeInlineHtml", + "MappingTargetTypeStaticFiles" + ] + }, "valueObject.MarketplaceCatalogItemDataField": { "type": "object", "properties": { @@ -3866,22 +4759,36 @@ const docTemplate = `{ "type": "object", "properties": { "matchPattern": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingMatchPattern" }, "path": { "type": "string" }, + "shouldUpgradeInsecureRequests": { + "type": "boolean" + }, "targetHttpResponseCode": { "type": "integer" }, "targetType": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingTargetType" }, "targetValue": { "type": "string" } } }, + "valueObject.MimeType": { + "type": "string", + "enum": [ + "directory", + "generic" + ], + "x-enum-varnames": [ + "MimeTypeDirectory", + "MimeTypeGeneric" + ] + }, "valueObject.PortBinding": { "type": "object", "properties": { @@ -3923,6 +4830,75 @@ const docTemplate = `{ "type": "string" } } + }, + "valueObject.ServiceNature": { + "type": "string", + "enum": [ + "solo", + "multi", + "custom" + ], + "x-enum-varnames": [ + "ServiceNatureSolo", + "ServiceNatureMulti", + "ServiceNatureCustom" + ] + }, + "valueObject.ServiceType": { + "type": "string", + "enum": [ + "system", + "database", + "runtime", + "webserver", + "other" + ], + "x-enum-varnames": [ + "ServiceTypeSystem", + "ServiceTypeDatabase", + "ServiceTypeRuntime", + "ServiceTypeWebServer", + "ServiceTypeOther" + ] + }, + "valueObject.UnixFileOwnership": { + "type": "string", + "enum": [ + "nobody:nogroup" + ], + "x-enum-varnames": [ + "UnixFileOwnershipAppWorkingDir" + ] + }, + "valueObject.UnixFilePath": { + "type": "string", + "enum": [ + "/", + "/app", + "/app/.trash" + ], + "x-enum-varnames": [ + "UnixFilePathFileSystemRootDir", + "UnixFilePathAppWorkingDir", + "UnixFilePathTrashDir" + ] + }, + "valueObject.VirtualHostType": { + "type": "string", + "enum": [ + "top-level", + "subdomain", + "alias", + "wildcard", + "primary" + ], + "x-enum-varnames": [ + "VirtualHostTypeTopLevel", + "VirtualHostTypeSubdomain", + "VirtualHostTypeAlias", + "VirtualHostTypeWildcard", + "VirtualHostTypePrimary" + ] } }, "securityDefinitions": { @@ -3937,7 +4913,7 @@ const docTemplate = `{ // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ - Version: "0.1.5", + Version: "0.2.5", Host: "localhost:1618", BasePath: "/api", Schemes: []string{}, diff --git a/src/presentation/api/docs/swagger.json b/src/presentation/api/docs/swagger.json index 2403b837f..902c57955 100644 --- a/src/presentation/api/docs/swagger.json +++ b/src/presentation/api/docs/swagger.json @@ -13,7 +13,7 @@ "name": "Eclipse Public License v2.0", "url": "https://www.eclipse.org/legal/epl-2.0/" }, - "version": "0.1.5" + "version": "0.2.5" }, "host": "localhost:1618", "basePath": "/api", @@ -523,7 +523,7 @@ "tags": [ "database" ], - "summary": "GetDatabases", + "summary": "ReadDatabases", "parameters": [ { "type": "string", @@ -531,16 +531,55 @@ "name": "dbType", "in": "path", "required": true + }, + { + "type": "string", + "description": "DatabaseName", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "DatabaseUsername", + "name": "username", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/entity.Database" - } + "$ref": "#/definitions/dto.ReadDatabasesResponse" } } } @@ -763,6 +802,12 @@ "name": "sourcePath", "in": "query", "required": true + }, + { + "type": "boolean", + "description": "ShouldIncludeFileTree", + "name": "shouldIncludeFileTree", + "in": "query" } ], "responses": { @@ -771,7 +816,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/entity.UnixFile" + "$ref": "#/definitions/dto.ReadFilesResponse" } } } @@ -1989,14 +2034,85 @@ "ssl" ], "summary": "ReadSslPairs", + "parameters": [ + { + "type": "string", + "description": "SslPairId", + "name": "sslPairId", + "in": "query" + }, + { + "type": "string", + "description": "VirtualHostHostname", + "name": "virtualHostHostname", + "in": "query" + }, + { + "type": "string", + "description": "AltNames", + "name": "altNames", + "in": "query" + }, + { + "type": "string", + "description": "IssuedBeforeAt", + "name": "issuedBeforeAt", + "in": "query" + }, + { + "type": "string", + "description": "IssuedAfterAt", + "name": "issuedAfterAt", + "in": "query" + }, + { + "type": "string", + "description": "ExpiresBeforeAt", + "name": "expiresBeforeAt", + "in": "query" + }, + { + "type": "string", + "description": "ExpiresAfterAt", + "name": "expiresAfterAt", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/entity.SslPair" - } + "$ref": "#/definitions/dto.ReadSslPairsResponse" } } } @@ -2020,7 +2136,7 @@ "summary": "CreateSslPair", "parameters": [ { - "description": "All props are required.\u003cbr /\u003evirtualHosts may be string or []string. Alias is not allowed.\u003cbr /\u003ecertificate is a string field, i.e. ignore the structure shown.\u003cbr /\u003ecertificate and key must be base64 encoded.", + "description": "All props are required.\u003cbr /\u003evirtualHosts may be string or []string. Alias is not allowed.\u003cbr /\u003ecertificate is a string field, i.e. ignore the structure shown.\u003cbr /\u003ecertificate and key must be base64 encoded.\u003cbr /\u003ecertificate should include the CA chain/bundle if not provided in the certificate field.", "name": "createSslPairDto", "in": "body", "required": true, @@ -2039,14 +2155,14 @@ } } }, - "/v1/ssl/vhost/": { - "put": { + "/v1/ssl/trusted/": { + "post": { "security": [ { "Bearer": [] } ], - "description": "Delete vhosts from a ssl pair.", + "description": "Create a new publicly trusted ssl pair.", "consumes": [ "application/json" ], @@ -2056,21 +2172,21 @@ "tags": [ "ssl" ], - "summary": "DeleteSslPairVhosts", + "summary": "CreatePubliclyTrusted", "parameters": [ { "description": "All props are required.", - "name": "deleteSslPairVhostsDto", + "name": "createPubliclyTrustedDto", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dto.DeleteSslPairVhosts" + "$ref": "#/definitions/dto.CreatePubliclyTrustedSslPair" } } ], "responses": { - "200": { - "description": "SslPairVhostsRemoved", + "201": { + "description": "PubliclyTrustedSslPairCreationScheduled", "schema": { "type": "object" } @@ -2115,7 +2231,7 @@ } } }, - "/v1/vhosts/": { + "/v1/vhost/": { "get": { "security": [ { @@ -2133,25 +2249,96 @@ "vhosts" ], "summary": "ReadVirtualHosts", + "parameters": [ + { + "type": "string", + "description": "Hostname", + "name": "hostname", + "in": "query" + }, + { + "type": "string", + "description": "Type", + "name": "type", + "in": "query" + }, + { + "type": "string", + "description": "RootDirectory", + "name": "rootDirectory", + "in": "query" + }, + { + "type": "string", + "description": "ParentHostname", + "name": "parentHostname", + "in": "query" + }, + { + "type": "boolean", + "description": "WithMappings", + "name": "withMappings", + "in": "query" + }, + { + "type": "string", + "description": "CreatedBeforeAt", + "name": "createdBeforeAt", + "in": "query" + }, + { + "type": "string", + "description": "CreatedAfterAt", + "name": "createdAfterAt", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" + } + ], "responses": { "200": { "description": "OK", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/entity.VirtualHost" - } + "$ref": "#/definitions/dto.ReadVirtualHostsResponse" } } } }, - "post": { + "put": { "security": [ { "Bearer": [] } ], - "description": "Create a new vhost.", + "description": "Update a vhost.", "consumes": [ "application/json" ], @@ -2161,54 +2348,23 @@ "tags": [ "vhosts" ], - "summary": "CreateVirtualHost", + "summary": "UpdateVirtualHost", "parameters": [ { - "description": "Only hostname is required.\u003cbr /\u003etype may be 'top-level', 'subdomain', 'wildcard' or 'alias'. If is not provided, it will be 'top-level'. If type is 'alias', 'parentHostname' will be required.", - "name": "createVirtualHostDto", + "description": "Only hostname is required.", + "name": "updateVirtualHostDto", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dto.CreateVirtualHost" - } - } - ], - "responses": { - "201": { - "description": "VirtualHostCreated", - "schema": { - "type": "object" + "$ref": "#/definitions/dto.UpdateVirtualHost" } } - } - } - }, - "/v1/vhosts/mapping/": { - "get": { - "security": [ - { - "Bearer": [] - } - ], - "description": "List virtual hosts with mappings.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "vhosts" ], - "summary": "ReadVirtualHostsWithMappings", "responses": { "200": { - "description": "OK", + "description": "VirtualHostUpdated", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/dto.VirtualHostWithMappings" - } + "type": "object" } } } @@ -2219,7 +2375,7 @@ "Bearer": [] } ], - "description": "Create a new vhost mapping.", + "description": "Create a new vhost.", "consumes": [ "application/json" ], @@ -2229,21 +2385,21 @@ "tags": [ "vhosts" ], - "summary": "CreateVirtualHostMapping", + "summary": "CreateVirtualHost", "parameters": [ { - "description": "hostname, path and targetType are required.\u003cbr /\u003ematchPattern may be 'begins-with', 'contains', 'equals' or 'ends-with'. If is not provided, it will be 'begins-with'.\u003cbr /\u003etargetType may be 'url', 'service', 'response-code', 'inline-html' or 'static-files'. If targetType is 'url', targetHttpResponseCode may be provided. If is not provided, targetHttpResponseCode will be '200'. If targetType is 'response-code', targetHttpResponseCode may be provided. If is not provided, targetValue will be required. If both were provided, targetValue will have priority.\u003cbr /\u003etargetValue must have the same value as the targetType requires.", - "name": "createMappingDto", + "description": "Only hostname is required.\u003cbr /\u003etype may be 'top-level', 'subdomain', 'wildcard' or 'alias'. If is not provided, it will be 'top-level'. If type is 'alias', 'parentHostname' will be required.", + "name": "createVirtualHostDto", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/dto.CreateMapping" + "$ref": "#/definitions/dto.CreateVirtualHost" } } ], "responses": { "201": { - "description": "MappingCreated", + "description": "VirtualHostCreated", "schema": { "type": "object" } @@ -2251,14 +2407,14 @@ } } }, - "/v1/vhosts/mapping/{mappingId}/": { - "delete": { + "/v1/vhost/mapping/": { + "get": { "security": [ { "Bearer": [] } ], - "description": "Delete a vhost mapping.", + "description": "List virtual hosts with mappings.", "consumes": [ "application/json" ], @@ -2268,27 +2424,410 @@ "tags": [ "vhosts" ], - "summary": "DeleteVirtualHostMapping", + "summary": "ReadVirtualHostsWithMappings", "parameters": [ { - "type": "integer", - "description": "MappingId to delete.", - "name": "mappingId", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "MappingDeleted", - "schema": { - "type": "object" + "type": "string", + "description": "Hostname", + "name": "hostname", + "in": "query" + }, + { + "type": "string", + "description": "Type", + "name": "type", + "in": "query" + }, + { + "type": "string", + "description": "RootDirectory", + "name": "rootDirectory", + "in": "query" + }, + { + "type": "string", + "description": "ParentHostname", + "name": "parentHostname", + "in": "query" + }, + { + "type": "boolean", + "description": "WithMappings", + "name": "withMappings", + "in": "query" + }, + { + "type": "integer", + "description": "CreatedBeforeAt (Unix timestamp)", + "name": "createdBeforeAt", + "in": "query" + }, + { + "type": "integer", + "description": "CreatedAfterAt (Unix timestamp)", + "name": "createdAfterAt", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.VirtualHostWithMappings" + } + } + } + }, + "put": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Update a vhost mapping.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "UpdateVirtualHostMapping", + "parameters": [ + { + "description": "Only id is required. Other fields are optional and will only be updated if provided.", + "name": "updateMappingDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.UpdateMapping" + } + } + ], + "responses": { + "200": { + "description": "MappingUpdated", + "schema": { + "type": "object" + } + } + } + }, + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Create a new vhost mapping.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "CreateVirtualHostMapping", + "parameters": [ + { + "description": "hostname, path and targetType are required.\u003cbr /\u003ematchPattern may be 'begins-with', 'contains', 'equals' or 'ends-with'. If is not provided, it will be 'begins-with'.\u003cbr /\u003etargetType may be 'url', 'service', 'response-code', 'inline-html' or 'static-files'. If targetType is 'url', targetHttpResponseCode may be provided. If is not provided, targetHttpResponseCode will be '200'. If targetType is 'response-code', targetHttpResponseCode may be provided. If is not provided, targetValue will be required. If both were provided, targetValue will have priority.\u003cbr /\u003etargetValue must have the same value as the targetType requires.", + "name": "createMappingDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CreateMapping" + } + } + ], + "responses": { + "201": { + "description": "MappingCreated", + "schema": { + "type": "object" + } + } + } + } + }, + "/v1/vhost/mapping/security-rule/": { + "get": { + "security": [ + { + "Bearer": [] + } + ], + "description": "List mapping security rules.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "ReadMappingSecurityRules", + "parameters": [ + { + "type": "string", + "description": "MappingSecurityRuleId", + "name": "id", + "in": "query" + }, + { + "type": "string", + "description": "MappingSecurityRuleName", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "AllowedIpAddress", + "name": "allowedIp", + "in": "query" + }, + { + "type": "string", + "description": "BlockedIpAddress", + "name": "blockedIp", + "in": "query" + }, + { + "type": "integer", + "description": "CreatedBeforeAt (Unix timestamp)", + "name": "createdBeforeAt", + "in": "query" + }, + { + "type": "integer", + "description": "CreatedAfterAt (Unix timestamp)", + "name": "createdAfterAt", + "in": "query" + }, + { + "type": "integer", + "description": "PageNumber (Pagination)", + "name": "pageNumber", + "in": "query" + }, + { + "type": "integer", + "description": "ItemsPerPage (Pagination)", + "name": "itemsPerPage", + "in": "query" + }, + { + "type": "string", + "description": "SortBy (Pagination)", + "name": "sortBy", + "in": "query" + }, + { + "type": "string", + "description": "SortDirection (Pagination)", + "name": "sortDirection", + "in": "query" + }, + { + "type": "string", + "description": "LastSeenId (Pagination)", + "name": "lastSeenId", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.ReadMappingSecurityRulesResponse" + } + } + } + }, + "put": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Update a mapping security rule.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "UpdateMappingSecurityRule", + "parameters": [ + { + "description": "Only id is required.", + "name": "updateMappingSecurityRuleDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.UpdateMappingSecurityRule" + } + } + ], + "responses": { + "200": { + "description": "MappingSecurityRuleUpdated", + "schema": { + "type": "object" + } + } + } + }, + "post": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Create a new mapping security rule.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "CreateMappingSecurityRule", + "parameters": [ + { + "description": "Only name is required.", + "name": "createMappingSecurityRuleDto", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CreateMappingSecurityRule" + } + } + ], + "responses": { + "201": { + "description": "MappingSecurityRuleCreated", + "schema": { + "type": "object" + } + } + } + } + }, + "/v1/vhost/mapping/security-rule/{id}/": { + "delete": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Delete a mapping security rule.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "DeleteMappingSecurityRule", + "parameters": [ + { + "type": "integer", + "description": "MappingSecurityRuleId to delete.", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "MappingSecurityRuleDeleted", + "schema": { + "type": "object" + } + } + } + } + }, + "/v1/vhost/mapping/{mappingId}/": { + "delete": { + "security": [ + { + "Bearer": [] + } + ], + "description": "Delete a vhost mapping.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "vhosts" + ], + "summary": "DeleteVirtualHostMapping", + "parameters": [ + { + "type": "integer", + "description": "MappingId to delete.", + "name": "mappingId", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "MappingDeleted", + "schema": { + "type": "object" } } } } }, - "/v1/vhosts/{hostname}/": { + "/v1/vhost/{hostname}/": { "delete": { "security": [ { @@ -2334,12 +2873,12 @@ "type": "string" }, "destinationPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "sourcePaths": { "type": "array", "items": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } } @@ -2348,19 +2887,22 @@ "type": "object", "properties": { "destinationPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "shouldOverwrite": { "type": "boolean" }, "sourcePath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, "dto.CreateAccount": { "type": "object", "properties": { + "isSuperAdmin": { + "type": "boolean" + }, "password": { "type": "string" }, @@ -2395,6 +2937,9 @@ "autoStart": { "type": "boolean" }, + "avatarUrl": { + "type": "string" + }, "envs": { "type": "array", "items": { @@ -2405,11 +2950,20 @@ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { + "$ref": "#/definitions/valueObject.UnixFilePath" + }, + "mappingHostname": { "type": "string" }, + "mappingPath": { + "type": "string" + }, + "mappingUpgradeInsecureRequests": { + "type": "boolean" + }, "maxStartRetries": { "type": "integer" }, @@ -2459,13 +3013,13 @@ "type": "integer" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "version": { "type": "string" }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -2515,6 +3069,15 @@ "type": "string" } }, + "mappingHostname": { + "type": "string" + }, + "mappingPath": { + "type": "string" + }, + "mappingUpgradeInsecureRequests": { + "type": "boolean" + }, "maxStartRetries": { "type": "integer" }, @@ -2528,13 +3091,16 @@ } }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "timeoutStartSecs": { "type": "integer" }, "version": { "type": "string" + }, + "workingDir": { + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -2544,23 +3110,81 @@ "hostname": { "type": "string" }, + "mappingSecurityRuleId": { + "type": "integer" + }, "matchPattern": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingMatchPattern" }, "path": { "type": "string" }, + "shouldUpgradeInsecureRequests": { + "type": "boolean" + }, "targetHttpResponseCode": { "type": "integer" }, "targetType": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingTargetType" }, "targetValue": { "type": "string" } } }, + "dto.CreateMappingSecurityRule": { + "type": "object", + "properties": { + "allowedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "bandwidthBpsLimitPerConnection": { + "type": "integer" + }, + "bandwidthLimitOnlyAfterBytes": { + "type": "integer" + }, + "blockedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": { + "type": "string" + }, + "maxConnectionsPerIp": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "responseCodeOnMaxConnections": { + "type": "integer" + }, + "responseCodeOnMaxRequests": { + "type": "integer" + }, + "rpsHardLimitPerIp": { + "type": "integer" + }, + "rpsSoftLimitPerIp": { + "type": "integer" + } + } + }, + "dto.CreatePubliclyTrustedSslPair": { + "type": "object", + "properties": { + "virtualHostHostname": { + "type": "string" + } + } + }, "dto.CreateSecureAccessPublicKey": { "type": "object", "properties": { @@ -2592,6 +3216,9 @@ "certificate": { "$ref": "#/definitions/entity.SslCertificate" }, + "chainCertificates": { + "$ref": "#/definitions/entity.SslCertificate" + }, "key": { "type": "string" }, @@ -2607,10 +3234,10 @@ "type": "object", "properties": { "filePath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "mimeType": { - "type": "string" + "$ref": "#/definitions/valueObject.MimeType" }, "permissions": { "type": "string" @@ -2623,25 +3250,14 @@ "hostname": { "type": "string" }, + "isWildcard": { + "type": "boolean" + }, "parentHostname": { "type": "string" }, "type": { - "type": "string" - } - } - }, - "dto.DeleteSslPairVhosts": { - "type": "object", - "properties": { - "sslPairId": { - "type": "string" - }, - "virtualHostsHostnames": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/definitions/valueObject.VirtualHostType" } } }, @@ -2649,10 +3265,10 @@ "type": "object", "properties": { "destinationPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "sourcePath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -2688,6 +3304,9 @@ "autoStart": { "type": "boolean" }, + "avatarUrl": { + "type": "string" + }, "createdAt": { "type": "integer" }, @@ -2701,10 +3320,10 @@ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "maxStartRetries": { "type": "integer" @@ -2716,7 +3335,7 @@ "type": "string" }, "nature": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceNature" }, "portBindings": { "type": "array", @@ -2724,50 +3343,20 @@ "$ref": "#/definitions/valueObject.PortBinding" } }, - "postStartCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "postStopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "preStartCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "preStopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, "startCmd": { "type": "string" }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "status": { "type": "string" }, - "stopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, "timeoutStartSecs": { "type": "integer" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "updatedAt": { "type": "integer" @@ -2776,7 +3365,7 @@ "type": "string" }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -2834,6 +3423,34 @@ } } }, + "dto.ReadDatabasesResponse": { + "type": "object", + "properties": { + "databases": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.Database" + } + }, + "pagination": { + "$ref": "#/definitions/dto.Pagination" + } + } + }, + "dto.ReadFilesResponse": { + "type": "object", + "properties": { + "fileTree": { + "$ref": "#/definitions/dto.UnixFileBranch" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.UnixFile" + } + } + } + }, "dto.ReadInstallableServicesItemsResponse": { "type": "object", "properties": { @@ -2868,6 +3485,20 @@ } } }, + "dto.ReadMappingSecurityRulesResponse": { + "type": "object", + "properties": { + "mappingSecurityRules": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.MappingSecurityRule" + } + }, + "pagination": { + "$ref": "#/definitions/dto.Pagination" + } + } + }, "dto.ReadMarketplaceCatalogItemsResponse": { "type": "object", "properties": { @@ -2910,12 +3541,69 @@ } } }, + "dto.ReadSslPairsResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/dto.Pagination" + }, + "sslPairs": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.SslPair" + } + } + } + }, + "dto.ReadVirtualHostsResponse": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/definitions/dto.Pagination" + }, + "virtualHostWithMappings": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.VirtualHostWithMappings" + } + }, + "virtualHosts": { + "type": "array", + "items": { + "$ref": "#/definitions/entity.VirtualHost" + } + } + } + }, + "dto.UnixFileBranch": { + "type": "object", + "properties": { + "branches": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/dto.UnixFileBranch" + } + }, + "mimeType": { + "$ref": "#/definitions/valueObject.MimeType" + }, + "name": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/valueObject.UnixFilePath" + } + } + }, "dto.UpdateAccount": { "type": "object", "properties": { "accountId": { "type": "integer" }, + "isSuperAdmin": { + "type": "boolean" + }, "password": { "type": "string" }, @@ -2941,6 +3629,82 @@ } } }, + "dto.UpdateMapping": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "mappingSecurityRuleId": { + "type": "integer" + }, + "matchPattern": { + "$ref": "#/definitions/valueObject.MappingMatchPattern" + }, + "path": { + "type": "string" + }, + "shouldUpgradeInsecureRequests": { + "type": "boolean" + }, + "targetHttpResponseCode": { + "type": "integer" + }, + "targetType": { + "$ref": "#/definitions/valueObject.MappingTargetType" + }, + "targetValue": { + "type": "string" + } + } + }, + "dto.UpdateMappingSecurityRule": { + "type": "object", + "properties": { + "allowedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "bandwidthBpsLimitPerConnection": { + "type": "integer" + }, + "bandwidthLimitOnlyAfterBytes": { + "type": "integer" + }, + "blockedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "maxConnectionsPerIp": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "responseCodeOnMaxConnections": { + "type": "integer" + }, + "responseCodeOnMaxRequests": { + "type": "integer" + }, + "rpsHardLimitPerIp": { + "type": "integer" + }, + "rpsSoftLimitPerIp": { + "type": "integer" + } + } + }, "dto.UpdatePhpConfigs": { "type": "object", "properties": { @@ -2987,6 +3751,9 @@ "autoStart": { "type": "boolean" }, + "avatarUrl": { + "type": "string" + }, "envs": { "type": "array", "items": { @@ -2997,10 +3764,10 @@ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "maxStartRetries": { "type": "integer" @@ -3042,7 +3809,7 @@ "type": "string" }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "status": { "type": "string" @@ -3057,13 +3824,13 @@ "type": "integer" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "version": { "type": "string" }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -3071,28 +3838,60 @@ "type": "object", "properties": { "destinationPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "encodedContent": { "type": "string" }, + "ownership": { + "$ref": "#/definitions/valueObject.UnixFileOwnership" + }, "permissions": { "type": "string" }, + "shouldFixPermissions": { + "type": "boolean" + }, "sourcePaths": { "type": "array", "items": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } } }, + "dto.UpdateVirtualHost": { + "type": "object", + "properties": { + "hostname": { + "type": "string" + }, + "isWildcard": { + "type": "boolean" + } + } + }, "dto.VirtualHostWithMappings": { "type": "object", "properties": { + "aliasesHostnames": { + "type": "array", + "items": { + "type": "string" + } + }, + "createdAt": { + "type": "integer" + }, "hostname": { "type": "string" }, + "isPrimary": { + "type": "boolean" + }, + "isWildcard": { + "type": "boolean" + }, "mappings": { "type": "array", "items": { @@ -3103,10 +3902,10 @@ "type": "string" }, "rootDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.VirtualHostType" } } }, @@ -3134,11 +3933,14 @@ "type": "integer" }, "homeDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "id": { "type": "integer" }, + "isSuperAdmin": { + "type": "boolean" + }, "secureAccessPublicKeys": { "type": "array", "items": { @@ -3232,10 +4034,10 @@ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "manifestVersion": { "type": "string" @@ -3244,7 +4046,7 @@ "type": "string" }, "nature": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceNature" }, "portBindings": { "type": "array", @@ -3256,10 +4058,10 @@ "type": "string" }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "versions": { "type": "array", @@ -3268,7 +4070,7 @@ } }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, @@ -3281,6 +4083,9 @@ "autoStart": { "type": "boolean" }, + "avatarUrl": { + "type": "string" + }, "createdAt": { "type": "integer" }, @@ -3294,10 +4099,10 @@ "type": "string" }, "logErrorPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "logOutputPath": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "maxStartRetries": { "type": "integer" @@ -3306,7 +4111,7 @@ "type": "string" }, "nature": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceNature" }, "portBindings": { "type": "array", @@ -3314,50 +4119,20 @@ "$ref": "#/definitions/valueObject.PortBinding" } }, - "postStartCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "postStopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "preStartCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, - "preStopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, "startCmd": { "type": "string" }, "startupFile": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "status": { "type": "string" }, - "stopCmdSteps": { - "type": "array", - "items": { - "type": "string" - } - }, "timeoutStartSecs": { "type": "integer" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.ServiceType" }, "updatedAt": { "type": "integer" @@ -3366,30 +4141,104 @@ "type": "string" }, "workingDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" } } }, "entity.Mapping": { "type": "object", "properties": { + "createdAt": { + "type": "integer" + }, + "hostname": { + "type": "string" + }, "id": { "type": "integer" }, - "matchPattern": { + "mappingSecurityRuleId": { + "type": "integer" + }, + "marketplaceInstalledItemId": { + "type": "integer" + }, + "marketplaceInstalledItemName": { "type": "string" }, + "matchPattern": { + "$ref": "#/definitions/valueObject.MappingMatchPattern" + }, "path": { "type": "string" }, + "shouldUpgradeInsecureRequests": { + "type": "boolean" + }, "targetHttpResponseCode": { "type": "integer" }, "targetType": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingTargetType" }, "targetValue": { "type": "string" + }, + "updatedAt": { + "type": "integer" + } + } + }, + "entity.MappingSecurityRule": { + "type": "object", + "properties": { + "allowedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "bandwidthBpsLimitPerConnection": { + "type": "integer" + }, + "bandwidthLimitOnlyAfterBytes": { + "type": "integer" + }, + "blockedIps": { + "type": "array", + "items": { + "type": "string" + } + }, + "createdAt": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "maxConnectionsPerIp": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "responseCodeOnMaxConnections": { + "type": "integer" + }, + "responseCodeOnMaxRequests": { + "type": "integer" + }, + "rpsHardLimitPerIp": { + "type": "integer" + }, + "rpsSoftLimitPerIp": { + "type": "integer" + }, + "updatedAt": { + "type": "integer" } } }, @@ -3465,7 +4314,7 @@ "type": "integer" }, "installDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "installUuid": { "type": "string" @@ -3707,11 +4556,8 @@ "sslPairId": { "type": "string" }, - "virtualHostsHostnames": { - "type": "array", - "items": { - "type": "string" - } + "virtualHostHostname": { + "type": "string" } } }, @@ -3731,7 +4577,7 @@ "type": "string" }, "mimeType": { - "type": "string" + "$ref": "#/definitions/valueObject.MimeType" }, "name": { "type": "string" @@ -3740,7 +4586,7 @@ "type": "string" }, "path": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "permissions": { "type": "string" @@ -3759,17 +4605,32 @@ "entity.VirtualHost": { "type": "object", "properties": { + "aliasesHostnames": { + "type": "array", + "items": { + "type": "string" + } + }, + "createdAt": { + "type": "integer" + }, "hostname": { "type": "string" }, + "isPrimary": { + "type": "boolean" + }, + "isWildcard": { + "type": "boolean" + }, "parentHostname": { "type": "string" }, "rootDirectory": { - "type": "string" + "$ref": "#/definitions/valueObject.UnixFilePath" }, "type": { - "type": "string" + "$ref": "#/definitions/valueObject.VirtualHostType" } } }, @@ -3816,6 +4677,38 @@ } } }, + "valueObject.MappingMatchPattern": { + "type": "string", + "enum": [ + "begins-with", + "contains", + "equals", + "ends-with" + ], + "x-enum-varnames": [ + "MappingMatchPatternBeginsWith", + "MappingMatchPatternContains", + "MappingMatchPatternEquals", + "MappingMatchPatternEndsWith" + ] + }, + "valueObject.MappingTargetType": { + "type": "string", + "enum": [ + "url", + "service", + "response-code", + "inline-html", + "static-files" + ], + "x-enum-varnames": [ + "MappingTargetTypeUrl", + "MappingTargetTypeService", + "MappingTargetTypeResponseCode", + "MappingTargetTypeInlineHtml", + "MappingTargetTypeStaticFiles" + ] + }, "valueObject.MarketplaceCatalogItemDataField": { "type": "object", "properties": { @@ -3860,22 +4753,36 @@ "type": "object", "properties": { "matchPattern": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingMatchPattern" }, "path": { "type": "string" }, + "shouldUpgradeInsecureRequests": { + "type": "boolean" + }, "targetHttpResponseCode": { "type": "integer" }, "targetType": { - "type": "string" + "$ref": "#/definitions/valueObject.MappingTargetType" }, "targetValue": { "type": "string" } } }, + "valueObject.MimeType": { + "type": "string", + "enum": [ + "directory", + "generic" + ], + "x-enum-varnames": [ + "MimeTypeDirectory", + "MimeTypeGeneric" + ] + }, "valueObject.PortBinding": { "type": "object", "properties": { @@ -3917,6 +4824,75 @@ "type": "string" } } + }, + "valueObject.ServiceNature": { + "type": "string", + "enum": [ + "solo", + "multi", + "custom" + ], + "x-enum-varnames": [ + "ServiceNatureSolo", + "ServiceNatureMulti", + "ServiceNatureCustom" + ] + }, + "valueObject.ServiceType": { + "type": "string", + "enum": [ + "system", + "database", + "runtime", + "webserver", + "other" + ], + "x-enum-varnames": [ + "ServiceTypeSystem", + "ServiceTypeDatabase", + "ServiceTypeRuntime", + "ServiceTypeWebServer", + "ServiceTypeOther" + ] + }, + "valueObject.UnixFileOwnership": { + "type": "string", + "enum": [ + "nobody:nogroup" + ], + "x-enum-varnames": [ + "UnixFileOwnershipAppWorkingDir" + ] + }, + "valueObject.UnixFilePath": { + "type": "string", + "enum": [ + "/", + "/app", + "/app/.trash" + ], + "x-enum-varnames": [ + "UnixFilePathFileSystemRootDir", + "UnixFilePathAppWorkingDir", + "UnixFilePathTrashDir" + ] + }, + "valueObject.VirtualHostType": { + "type": "string", + "enum": [ + "top-level", + "subdomain", + "alias", + "wildcard", + "primary" + ], + "x-enum-varnames": [ + "VirtualHostTypeTopLevel", + "VirtualHostTypeSubdomain", + "VirtualHostTypeAlias", + "VirtualHostTypeWildcard", + "VirtualHostTypePrimary" + ] } }, "securityDefinitions": { diff --git a/src/presentation/api/docs/swagger.yaml b/src/presentation/api/docs/swagger.yaml index 04c6cc81b..b9f8d5892 100644 --- a/src/presentation/api/docs/swagger.yaml +++ b/src/presentation/api/docs/swagger.yaml @@ -5,23 +5,25 @@ definitions: compressionType: type: string destinationPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' sourcePaths: items: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: array type: object dto.CopyUnixFile: properties: destinationPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' shouldOverwrite: type: boolean sourcePath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: object dto.CreateAccount: properties: + isSuperAdmin: + type: boolean password: type: string username: @@ -44,6 +46,8 @@ definitions: type: boolean autoStart: type: boolean + avatarUrl: + type: string envs: items: type: string @@ -51,9 +55,15 @@ definitions: execUser: type: string logErrorPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' logOutputPath: + $ref: '#/definitions/valueObject.UnixFilePath' + mappingHostname: type: string + mappingPath: + type: string + mappingUpgradeInsecureRequests: + type: boolean maxStartRetries: type: integer name: @@ -87,11 +97,11 @@ definitions: timeoutStartSecs: type: integer type: - type: string + $ref: '#/definitions/valueObject.ServiceType' version: type: string workingDirectory: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: object dto.CreateDatabase: properties: @@ -123,6 +133,12 @@ definitions: items: type: string type: array + mappingHostname: + type: string + mappingPath: + type: string + mappingUpgradeInsecureRequests: + type: boolean maxStartRetries: type: integer name: @@ -132,27 +148,67 @@ definitions: $ref: '#/definitions/valueObject.PortBinding' type: array startupFile: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' timeoutStartSecs: type: integer version: type: string + workingDir: + $ref: '#/definitions/valueObject.UnixFilePath' type: object dto.CreateMapping: properties: hostname: type: string + mappingSecurityRuleId: + type: integer matchPattern: - type: string + $ref: '#/definitions/valueObject.MappingMatchPattern' path: type: string + shouldUpgradeInsecureRequests: + type: boolean targetHttpResponseCode: type: integer targetType: - type: string + $ref: '#/definitions/valueObject.MappingTargetType' targetValue: type: string type: object + dto.CreateMappingSecurityRule: + properties: + allowedIps: + items: + type: string + type: array + bandwidthBpsLimitPerConnection: + type: integer + bandwidthLimitOnlyAfterBytes: + type: integer + blockedIps: + items: + type: string + type: array + description: + type: string + maxConnectionsPerIp: + type: integer + name: + type: string + responseCodeOnMaxConnections: + type: integer + responseCodeOnMaxRequests: + type: integer + rpsHardLimitPerIp: + type: integer + rpsSoftLimitPerIp: + type: integer + type: object + dto.CreatePubliclyTrustedSslPair: + properties: + virtualHostHostname: + type: string + type: object dto.CreateSecureAccessPublicKey: properties: accountId: @@ -173,6 +229,8 @@ definitions: properties: certificate: $ref: '#/definitions/entity.SslCertificate' + chainCertificates: + $ref: '#/definitions/entity.SslCertificate' key: type: string virtualHostsHostnames: @@ -183,9 +241,9 @@ definitions: dto.CreateUnixFile: properties: filePath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' mimeType: - type: string + $ref: '#/definitions/valueObject.MimeType' permissions: type: string type: object @@ -193,26 +251,19 @@ definitions: properties: hostname: type: string + isWildcard: + type: boolean parentHostname: type: string type: - type: string - type: object - dto.DeleteSslPairVhosts: - properties: - sslPairId: - type: string - virtualHostsHostnames: - items: - type: string - type: array + $ref: '#/definitions/valueObject.VirtualHostType' type: object dto.ExtractUnixFiles: properties: destinationPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' sourcePath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: object dto.InstallMarketplaceCatalogItem: properties: @@ -235,6 +286,8 @@ definitions: type: boolean autoStart: type: boolean + avatarUrl: + type: string createdAt: type: integer envs: @@ -244,9 +297,9 @@ definitions: execUser: type: string logErrorPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' logOutputPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' maxStartRetries: type: integer metrics: @@ -254,47 +307,27 @@ definitions: name: type: string nature: - type: string + $ref: '#/definitions/valueObject.ServiceNature' portBindings: items: $ref: '#/definitions/valueObject.PortBinding' type: array - postStartCmdSteps: - items: - type: string - type: array - postStopCmdSteps: - items: - type: string - type: array - preStartCmdSteps: - items: - type: string - type: array - preStopCmdSteps: - items: - type: string - type: array startCmd: type: string startupFile: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' status: type: string - stopCmdSteps: - items: - type: string - type: array timeoutStartSecs: type: integer type: - type: string + $ref: '#/definitions/valueObject.ServiceType' updatedAt: type: integer version: type: string workingDirectory: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: object dto.Pagination: properties: @@ -331,6 +364,24 @@ definitions: pagination: $ref: '#/definitions/dto.Pagination' type: object + dto.ReadDatabasesResponse: + properties: + databases: + items: + $ref: '#/definitions/entity.Database' + type: array + pagination: + $ref: '#/definitions/dto.Pagination' + type: object + dto.ReadFilesResponse: + properties: + fileTree: + $ref: '#/definitions/dto.UnixFileBranch' + files: + items: + $ref: '#/definitions/entity.UnixFile' + type: array + type: object dto.ReadInstallableServicesItemsResponse: properties: installableServices: @@ -353,6 +404,15 @@ definitions: pagination: $ref: '#/definitions/dto.Pagination' type: object + dto.ReadMappingSecurityRulesResponse: + properties: + mappingSecurityRules: + items: + $ref: '#/definitions/entity.MappingSecurityRule' + type: array + pagination: + $ref: '#/definitions/dto.Pagination' + type: object dto.ReadMarketplaceCatalogItemsResponse: properties: marketplaceCatalogItems: @@ -380,10 +440,47 @@ definitions: $ref: '#/definitions/entity.ScheduledTask' type: array type: object + dto.ReadSslPairsResponse: + properties: + pagination: + $ref: '#/definitions/dto.Pagination' + sslPairs: + items: + $ref: '#/definitions/entity.SslPair' + type: array + type: object + dto.ReadVirtualHostsResponse: + properties: + pagination: + $ref: '#/definitions/dto.Pagination' + virtualHostWithMappings: + items: + $ref: '#/definitions/dto.VirtualHostWithMappings' + type: array + virtualHosts: + items: + $ref: '#/definitions/entity.VirtualHost' + type: array + type: object + dto.UnixFileBranch: + properties: + branches: + additionalProperties: + $ref: '#/definitions/dto.UnixFileBranch' + type: object + mimeType: + $ref: '#/definitions/valueObject.MimeType' + name: + type: string + path: + $ref: '#/definitions/valueObject.UnixFilePath' + type: object dto.UpdateAccount: properties: accountId: type: integer + isSuperAdmin: + type: boolean password: type: string shouldUpdateApiKey: @@ -400,6 +497,56 @@ definitions: schedule: type: string type: object + dto.UpdateMapping: + properties: + id: + type: integer + mappingSecurityRuleId: + type: integer + matchPattern: + $ref: '#/definitions/valueObject.MappingMatchPattern' + path: + type: string + shouldUpgradeInsecureRequests: + type: boolean + targetHttpResponseCode: + type: integer + targetType: + $ref: '#/definitions/valueObject.MappingTargetType' + targetValue: + type: string + type: object + dto.UpdateMappingSecurityRule: + properties: + allowedIps: + items: + type: string + type: array + bandwidthBpsLimitPerConnection: + type: integer + bandwidthLimitOnlyAfterBytes: + type: integer + blockedIps: + items: + type: string + type: array + description: + type: string + id: + type: integer + maxConnectionsPerIp: + type: integer + name: + type: string + responseCodeOnMaxConnections: + type: integer + responseCodeOnMaxRequests: + type: integer + rpsHardLimitPerIp: + type: integer + rpsSoftLimitPerIp: + type: integer + type: object dto.UpdatePhpConfigs: properties: hostname: @@ -430,6 +577,8 @@ definitions: type: boolean autoStart: type: boolean + avatarUrl: + type: string envs: items: type: string @@ -437,9 +586,9 @@ definitions: execUser: type: string logErrorPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' logOutputPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' maxStartRetries: type: integer name: @@ -467,7 +616,7 @@ definitions: startCmd: type: string startupFile: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' status: type: string stopCmdSteps: @@ -477,29 +626,50 @@ definitions: timeoutStartSecs: type: integer type: - type: string + $ref: '#/definitions/valueObject.ServiceType' version: type: string workingDirectory: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: object dto.UpdateUnixFiles: properties: destinationPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' encodedContent: type: string + ownership: + $ref: '#/definitions/valueObject.UnixFileOwnership' permissions: type: string + shouldFixPermissions: + type: boolean sourcePaths: items: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: array type: object + dto.UpdateVirtualHost: + properties: + hostname: + type: string + isWildcard: + type: boolean + type: object dto.VirtualHostWithMappings: properties: + aliasesHostnames: + items: + type: string + type: array + createdAt: + type: integer hostname: type: string + isPrimary: + type: boolean + isWildcard: + type: boolean mappings: items: $ref: '#/definitions/entity.Mapping' @@ -507,9 +677,9 @@ definitions: parentHostname: type: string rootDirectory: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: - type: string + $ref: '#/definitions/valueObject.VirtualHostType' type: object entity.AccessToken: properties: @@ -527,9 +697,11 @@ definitions: groupId: type: integer homeDirectory: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' id: type: integer + isSuperAdmin: + type: boolean secureAccessPublicKeys: items: $ref: '#/definitions/entity.SecureAccessPublicKey' @@ -591,15 +763,15 @@ definitions: execUser: type: string logErrorPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' logOutputPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' manifestVersion: type: string name: type: string nature: - type: string + $ref: '#/definitions/valueObject.ServiceNature' portBindings: items: $ref: '#/definitions/valueObject.PortBinding' @@ -607,15 +779,15 @@ definitions: startCmd: type: string startupFile: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: - type: string + $ref: '#/definitions/valueObject.ServiceType' versions: items: type: string type: array workingDirectory: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: object entity.InstalledService: properties: @@ -623,6 +795,8 @@ definitions: type: boolean autoStart: type: boolean + avatarUrl: + type: string createdAt: type: integer envs: @@ -632,70 +806,99 @@ definitions: execUser: type: string logErrorPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' logOutputPath: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' maxStartRetries: type: integer name: type: string nature: - type: string + $ref: '#/definitions/valueObject.ServiceNature' portBindings: items: $ref: '#/definitions/valueObject.PortBinding' type: array - postStartCmdSteps: - items: - type: string - type: array - postStopCmdSteps: - items: - type: string - type: array - preStartCmdSteps: - items: - type: string - type: array - preStopCmdSteps: - items: - type: string - type: array startCmd: type: string startupFile: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' status: type: string - stopCmdSteps: - items: - type: string - type: array timeoutStartSecs: type: integer type: - type: string + $ref: '#/definitions/valueObject.ServiceType' updatedAt: type: integer version: type: string workingDirectory: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: object entity.Mapping: properties: + createdAt: + type: integer + hostname: + type: string id: type: integer - matchPattern: + mappingSecurityRuleId: + type: integer + marketplaceInstalledItemId: + type: integer + marketplaceInstalledItemName: type: string + matchPattern: + $ref: '#/definitions/valueObject.MappingMatchPattern' path: type: string + shouldUpgradeInsecureRequests: + type: boolean targetHttpResponseCode: type: integer targetType: - type: string + $ref: '#/definitions/valueObject.MappingTargetType' targetValue: type: string + updatedAt: + type: integer + type: object + entity.MappingSecurityRule: + properties: + allowedIps: + items: + type: string + type: array + bandwidthBpsLimitPerConnection: + type: integer + bandwidthLimitOnlyAfterBytes: + type: integer + blockedIps: + items: + type: string + type: array + createdAt: + type: integer + description: + type: string + id: + type: integer + maxConnectionsPerIp: + type: integer + name: + type: string + responseCodeOnMaxConnections: + type: integer + responseCodeOnMaxRequests: + type: integer + rpsHardLimitPerIp: + type: integer + rpsSoftLimitPerIp: + type: integer + updatedAt: + type: integer type: object entity.MarketplaceCatalogItem: properties: @@ -745,7 +948,7 @@ definitions: id: type: integer installDirectory: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' installUuid: type: string mappings: @@ -903,10 +1106,8 @@ definitions: type: string sslPairId: type: string - virtualHostsHostnames: - items: - type: string - type: array + virtualHostHostname: + type: string type: object entity.UnixFile: properties: @@ -919,13 +1120,13 @@ definitions: group: type: string mimeType: - type: string + $ref: '#/definitions/valueObject.MimeType' name: type: string owner: type: string path: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' permissions: type: string size: @@ -937,14 +1138,24 @@ definitions: type: object entity.VirtualHost: properties: + aliasesHostnames: + items: + type: string + type: array + createdAt: + type: integer hostname: type: string + isPrimary: + type: boolean + isWildcard: + type: boolean parentHostname: type: string rootDirectory: - type: string + $ref: '#/definitions/valueObject.UnixFilePath' type: - type: string + $ref: '#/definitions/valueObject.VirtualHostType' type: object valueObject.CurrentResourceUsage: properties: @@ -974,6 +1185,32 @@ definitions: storageTotal: type: integer type: object + valueObject.MappingMatchPattern: + enum: + - begins-with + - contains + - equals + - ends-with + type: string + x-enum-varnames: + - MappingMatchPatternBeginsWith + - MappingMatchPatternContains + - MappingMatchPatternEquals + - MappingMatchPatternEndsWith + valueObject.MappingTargetType: + enum: + - url + - service + - response-code + - inline-html + - static-files + type: string + x-enum-varnames: + - MappingTargetTypeUrl + - MappingTargetTypeService + - MappingTargetTypeResponseCode + - MappingTargetTypeInlineHtml + - MappingTargetTypeStaticFiles valueObject.MarketplaceCatalogItemDataField: properties: defaultValue: @@ -1003,16 +1240,26 @@ definitions: valueObject.MarketplaceItemMapping: properties: matchPattern: - type: string + $ref: '#/definitions/valueObject.MappingMatchPattern' path: type: string + shouldUpgradeInsecureRequests: + type: boolean targetHttpResponseCode: type: integer targetType: - type: string + $ref: '#/definitions/valueObject.MappingTargetType' targetValue: type: string type: object + valueObject.MimeType: + enum: + - directory + - generic + type: string + x-enum-varnames: + - MimeTypeDirectory + - MimeTypeGeneric valueObject.PortBinding: properties: port: @@ -1040,6 +1287,60 @@ definitions: version: type: string type: object + valueObject.ServiceNature: + enum: + - solo + - multi + - custom + type: string + x-enum-varnames: + - ServiceNatureSolo + - ServiceNatureMulti + - ServiceNatureCustom + valueObject.ServiceType: + enum: + - system + - database + - runtime + - webserver + - other + type: string + x-enum-varnames: + - ServiceTypeSystem + - ServiceTypeDatabase + - ServiceTypeRuntime + - ServiceTypeWebServer + - ServiceTypeOther + valueObject.UnixFileOwnership: + enum: + - nobody:nogroup + type: string + x-enum-varnames: + - UnixFileOwnershipAppWorkingDir + valueObject.UnixFilePath: + enum: + - / + - /app + - /app/.trash + type: string + x-enum-varnames: + - UnixFilePathFileSystemRootDir + - UnixFilePathAppWorkingDir + - UnixFilePathTrashDir + valueObject.VirtualHostType: + enum: + - top-level + - subdomain + - alias + - wildcard + - primary + type: string + x-enum-varnames: + - VirtualHostTypeTopLevel + - VirtualHostTypeSubdomain + - VirtualHostTypeAlias + - VirtualHostTypeWildcard + - VirtualHostTypePrimary host: localhost:1618 info: contact: @@ -1052,7 +1353,7 @@ info: url: https://www.eclipse.org/legal/epl-2.0/ termsOfService: https://goinfinite.net/tos/ title: OsApi - version: 0.1.5 + version: 0.2.5 paths: /v1/account/: get: @@ -1375,18 +1676,44 @@ paths: name: dbType required: true type: string + - description: DatabaseName + in: query + name: name + type: string + - description: DatabaseUsername + in: query + name: username + type: string + - description: PageNumber (Pagination) + in: query + name: pageNumber + type: integer + - description: ItemsPerPage (Pagination) + in: query + name: itemsPerPage + type: integer + - description: SortBy (Pagination) + in: query + name: sortBy + type: string + - description: SortDirection (Pagination) + in: query + name: sortDirection + type: string + - description: LastSeenId (Pagination) + in: query + name: lastSeenId + type: string produces: - application/json responses: "200": description: OK schema: - items: - $ref: '#/definitions/entity.Database' - type: array + $ref: '#/definitions/dto.ReadDatabasesResponse' security: - Bearer: [] - summary: GetDatabases + summary: ReadDatabases tags: - database post: @@ -1524,6 +1851,10 @@ paths: name: sourcePath required: true type: string + - description: ShouldIncludeFileTree + in: query + name: shouldIncludeFileTree + type: boolean produces: - application/json responses: @@ -1531,7 +1862,7 @@ paths: description: OK schema: items: - $ref: '#/definitions/entity.UnixFile' + $ref: '#/definitions/dto.ReadFilesResponse' type: array security: - Bearer: [] @@ -2308,15 +2639,62 @@ paths: consumes: - application/json description: List ssl pairs. + parameters: + - description: SslPairId + in: query + name: sslPairId + type: string + - description: VirtualHostHostname + in: query + name: virtualHostHostname + type: string + - description: AltNames + in: query + name: altNames + type: string + - description: IssuedBeforeAt + in: query + name: issuedBeforeAt + type: string + - description: IssuedAfterAt + in: query + name: issuedAfterAt + type: string + - description: ExpiresBeforeAt + in: query + name: expiresBeforeAt + type: string + - description: ExpiresAfterAt + in: query + name: expiresAfterAt + type: string + - description: PageNumber (Pagination) + in: query + name: pageNumber + type: integer + - description: ItemsPerPage (Pagination) + in: query + name: itemsPerPage + type: integer + - description: SortBy (Pagination) + in: query + name: sortBy + type: string + - description: SortDirection (Pagination) + in: query + name: sortDirection + type: string + - description: LastSeenId (Pagination) + in: query + name: lastSeenId + type: string produces: - application/json responses: "200": description: OK schema: - items: - $ref: '#/definitions/entity.SslPair' - type: array + $ref: '#/definitions/dto.ReadSslPairsResponse' security: - Bearer: [] summary: ReadSslPairs @@ -2329,7 +2707,8 @@ paths: parameters: - description: All props are required.
virtualHosts may be string or []string. Alias is not allowed.
certificate is a string field, i.e. ignore the - structure shown.
certificate and key must be base64 encoded. + structure shown.
certificate and key must be base64 encoded.
certificate + should include the CA chain/bundle if not provided in the certificate field. in: body name: createSslPairDto required: true @@ -2370,44 +2749,91 @@ paths: summary: DeleteSslPair tags: - ssl - /v1/ssl/vhost/: - put: + /v1/ssl/trusted/: + post: consumes: - application/json - description: Delete vhosts from a ssl pair. + description: Create a new publicly trusted ssl pair. parameters: - description: All props are required. in: body - name: deleteSslPairVhostsDto + name: createPubliclyTrustedDto required: true schema: - $ref: '#/definitions/dto.DeleteSslPairVhosts' + $ref: '#/definitions/dto.CreatePubliclyTrustedSslPair' produces: - application/json responses: - "200": - description: SslPairVhostsRemoved + "201": + description: PubliclyTrustedSslPairCreationScheduled schema: type: object security: - Bearer: [] - summary: DeleteSslPairVhosts + summary: CreatePubliclyTrusted tags: - ssl - /v1/vhosts/: + /v1/vhost/: get: consumes: - application/json description: List virtual hosts. + parameters: + - description: Hostname + in: query + name: hostname + type: string + - description: Type + in: query + name: type + type: string + - description: RootDirectory + in: query + name: rootDirectory + type: string + - description: ParentHostname + in: query + name: parentHostname + type: string + - description: WithMappings + in: query + name: withMappings + type: boolean + - description: CreatedBeforeAt + in: query + name: createdBeforeAt + type: string + - description: CreatedAfterAt + in: query + name: createdAfterAt + type: string + - description: PageNumber (Pagination) + in: query + name: pageNumber + type: integer + - description: ItemsPerPage (Pagination) + in: query + name: itemsPerPage + type: integer + - description: SortBy (Pagination) + in: query + name: sortBy + type: string + - description: SortDirection (Pagination) + in: query + name: sortDirection + type: string + - description: LastSeenId (Pagination) + in: query + name: lastSeenId + type: string produces: - application/json responses: "200": description: OK schema: - items: - $ref: '#/definitions/entity.VirtualHost' - type: array + $ref: '#/definitions/dto.ReadVirtualHostsResponse' security: - Bearer: [] summary: ReadVirtualHosts @@ -2438,7 +2864,30 @@ paths: summary: CreateVirtualHost tags: - vhosts - /v1/vhosts/{hostname}/: + put: + consumes: + - application/json + description: Update a vhost. + parameters: + - description: Only hostname is required. + in: body + name: updateVirtualHostDto + required: true + schema: + $ref: '#/definitions/dto.UpdateVirtualHost' + produces: + - application/json + responses: + "200": + description: VirtualHostUpdated + schema: + type: object + security: + - Bearer: [] + summary: UpdateVirtualHost + tags: + - vhosts + /v1/vhost/{hostname}/: delete: consumes: - application/json @@ -2461,20 +2910,67 @@ paths: summary: DeleteVirtualHost tags: - vhosts - /v1/vhosts/mapping/: + /v1/vhost/mapping/: get: consumes: - application/json description: List virtual hosts with mappings. + parameters: + - description: Hostname + in: query + name: hostname + type: string + - description: Type + in: query + name: type + type: string + - description: RootDirectory + in: query + name: rootDirectory + type: string + - description: ParentHostname + in: query + name: parentHostname + type: string + - description: WithMappings + in: query + name: withMappings + type: boolean + - description: CreatedBeforeAt (Unix timestamp) + in: query + name: createdBeforeAt + type: integer + - description: CreatedAfterAt (Unix timestamp) + in: query + name: createdAfterAt + type: integer + - description: PageNumber (Pagination) + in: query + name: pageNumber + type: integer + - description: ItemsPerPage (Pagination) + in: query + name: itemsPerPage + type: integer + - description: SortBy (Pagination) + in: query + name: sortBy + type: string + - description: SortDirection (Pagination) + in: query + name: sortDirection + type: string + - description: LastSeenId (Pagination) + in: query + name: lastSeenId + type: string produces: - application/json responses: "200": description: OK schema: - items: - $ref: '#/definitions/dto.VirtualHostWithMappings' - type: array + $ref: '#/definitions/dto.VirtualHostWithMappings' security: - Bearer: [] summary: ReadVirtualHostsWithMappings @@ -2511,7 +3007,31 @@ paths: summary: CreateVirtualHostMapping tags: - vhosts - /v1/vhosts/mapping/{mappingId}/: + put: + consumes: + - application/json + description: Update a vhost mapping. + parameters: + - description: Only id is required. Other fields are optional and will only + be updated if provided. + in: body + name: updateMappingDto + required: true + schema: + $ref: '#/definitions/dto.UpdateMapping' + produces: + - application/json + responses: + "200": + description: MappingUpdated + schema: + type: object + security: + - Bearer: [] + summary: UpdateVirtualHostMapping + tags: + - vhosts + /v1/vhost/mapping/{mappingId}/: delete: consumes: - application/json @@ -2534,6 +3054,137 @@ paths: summary: DeleteVirtualHostMapping tags: - vhosts + /v1/vhost/mapping/security-rule/: + get: + consumes: + - application/json + description: List mapping security rules. + parameters: + - description: MappingSecurityRuleId + in: query + name: id + type: string + - description: MappingSecurityRuleName + in: query + name: name + type: string + - description: AllowedIpAddress + in: query + name: allowedIp + type: string + - description: BlockedIpAddress + in: query + name: blockedIp + type: string + - description: CreatedBeforeAt (Unix timestamp) + in: query + name: createdBeforeAt + type: integer + - description: CreatedAfterAt (Unix timestamp) + in: query + name: createdAfterAt + type: integer + - description: PageNumber (Pagination) + in: query + name: pageNumber + type: integer + - description: ItemsPerPage (Pagination) + in: query + name: itemsPerPage + type: integer + - description: SortBy (Pagination) + in: query + name: sortBy + type: string + - description: SortDirection (Pagination) + in: query + name: sortDirection + type: string + - description: LastSeenId (Pagination) + in: query + name: lastSeenId + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.ReadMappingSecurityRulesResponse' + security: + - Bearer: [] + summary: ReadMappingSecurityRules + tags: + - vhosts + post: + consumes: + - application/json + description: Create a new mapping security rule. + parameters: + - description: Only name is required. + in: body + name: createMappingSecurityRuleDto + required: true + schema: + $ref: '#/definitions/dto.CreateMappingSecurityRule' + produces: + - application/json + responses: + "201": + description: MappingSecurityRuleCreated + schema: + type: object + security: + - Bearer: [] + summary: CreateMappingSecurityRule + tags: + - vhosts + put: + consumes: + - application/json + description: Update a mapping security rule. + parameters: + - description: Only id is required. + in: body + name: updateMappingSecurityRuleDto + required: true + schema: + $ref: '#/definitions/dto.UpdateMappingSecurityRule' + produces: + - application/json + responses: + "200": + description: MappingSecurityRuleUpdated + schema: + type: object + security: + - Bearer: [] + summary: UpdateMappingSecurityRule + tags: + - vhosts + /v1/vhost/mapping/security-rule/{id}/: + delete: + consumes: + - application/json + description: Delete a mapping security rule. + parameters: + - description: MappingSecurityRuleId to delete. + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: MappingSecurityRuleDeleted + schema: + type: object + security: + - Bearer: [] + summary: DeleteMappingSecurityRule + tags: + - vhosts securityDefinitions: Bearer: description: Type "Bearer" + JWT token or API key. diff --git a/src/presentation/api/helper/readRequestInputData.go b/src/presentation/api/helper/readRequestInputData.go index 4b33a98ca..9857e5252 100644 --- a/src/presentation/api/helper/readRequestInputData.go +++ b/src/presentation/api/helper/readRequestInputData.go @@ -3,6 +3,7 @@ package apiHelper import ( "mime/multipart" "net/http" + "strconv" "strings" "github.com/labstack/echo/v4" @@ -85,15 +86,20 @@ func ReadRequestInputData(c echo.Context) (map[string]interface{}, error) { } if len(multipartForm.File) > 0 { - multipartFiles := map[string]*multipart.FileHeader{} - for fileKey, fileValues := range multipartForm.File { - if len(fileValues) != 1 { + requestFileHeaders := map[string]*multipart.FileHeader{} + for fileKey, fileHandlers := range multipartForm.File { + isSingleFile := len(fileHandlers) == 1 + if isSingleFile { + requestFileHeaders[fileKey] = fileHandlers[0] continue } - multipartFiles[fileKey] = fileValues[0] + for fileIndex, fileHandler := range fileHandlers { + adjustedFileName := fileKey + "_" + strconv.Itoa(fileIndex) + requestFileHeaders[adjustedFileName] = fileHandler + } } - requestBody["files"] = multipartFiles + requestBody["files"] = requestFileHeaders } default: return nil, echo.NewHTTPError(http.StatusBadRequest, "InvalidContentType") diff --git a/src/presentation/api/router.go b/src/presentation/api/router.go index d3a95f227..8b80b980e 100644 --- a/src/presentation/api/router.go +++ b/src/presentation/api/router.go @@ -2,6 +2,9 @@ package api import ( _ "embed" + "net/http" + "net/url" + "strings" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" apiController "github.com/goinfinite/os/src/presentation/api/controller" @@ -185,29 +188,48 @@ func (router Router) sslRoutes() { sslGroup.GET("/", sslController.Read) sslGroup.POST("/", sslController.Create) + sslGroup.POST("/trusted/", sslController.CreatePubliclyTrusted) sslGroup.DELETE("/:sslPairId/", sslController.Delete) - sslGroup.PUT("/vhost/", sslController.DeleteVhosts) go sslController.SslCertificateWatchdog() } -func (router Router) vhostsRoutes() { +func (router Router) vhostRoutes() { vhostsGroup := router.baseRoute.Group("/v1/vhosts") + vhostsGroup.Any("/*", func(c echo.Context) error { + originalPath := c.Request().URL.Path + parsedPath, err := url.Parse(originalPath) + if err != nil { + return c.String(http.StatusBadRequest, "InvalidUrl") + } + newPath := strings.ReplaceAll(parsedPath.Path, "/v1/vhosts", "/v1/vhost") + return c.Redirect(http.StatusTemporaryRedirect, newPath) + }) + + vhostGroup := router.baseRoute.Group("/v1/vhost") vhostController := apiController.NewVirtualHostController( router.persistentDbSvc, router.trailDbSvc, ) - vhostsGroup.GET("/", vhostController.Read) - vhostsGroup.POST("/", vhostController.Create) - vhostsGroup.DELETE("/:hostname/", vhostController.Delete) + vhostGroup.GET("/", vhostController.Read) + vhostGroup.POST("/", vhostController.Create) + vhostGroup.PUT("/", vhostController.Update) + vhostGroup.DELETE("/:hostname/", vhostController.Delete) - mappingsGroup := vhostsGroup.Group("/mapping") + mappingsGroup := vhostGroup.Group("/mapping") mappingsGroup.GET("/", vhostController.ReadWithMappings) mappingsGroup.POST("/", vhostController.CreateMapping) + mappingsGroup.PUT("/", vhostController.UpdateMapping) mappingsGroup.DELETE( "/:mappingId/", vhostController.DeleteMapping, ) + + mappingSecurityRuleGroup := mappingsGroup.Group("/security-rule") + mappingSecurityRuleGroup.GET("/", vhostController.ReadMappingSecurityRules) + mappingSecurityRuleGroup.POST("/", vhostController.CreateMappingSecurityRule) + mappingSecurityRuleGroup.PUT("/", vhostController.UpdateMappingSecurityRule) + mappingSecurityRuleGroup.DELETE("/:id/", vhostController.DeleteMappingSecurityRule) } func (router Router) RegisterRoutes() { @@ -224,5 +246,5 @@ func (router Router) RegisterRoutes() { router.servicesRoutes() router.setupRoutes() router.sslRoutes() - router.vhostsRoutes() + router.vhostRoutes() } diff --git a/src/presentation/cli/controller/account.go b/src/presentation/cli/controller/account.go index 080ef5818..2f7e0b37a 100644 --- a/src/presentation/cli/controller/account.go +++ b/src/presentation/cli/controller/account.go @@ -100,15 +100,16 @@ func (controller *AccountController) Read() *cobra.Command { } func (controller *AccountController) Create() *cobra.Command { - var usernameStr, passwordStr string + var usernameStr, passwordStr, isSuperAdminStr string cmd := &cobra.Command{ Use: "create", Short: "CreateNewAccount", Run: func(cmd *cobra.Command, args []string) { requestBody := map[string]interface{}{ - "username": usernameStr, - "password": passwordStr, + "username": usernameStr, + "password": passwordStr, + "isSuperAdmin": isSuperAdminStr, } cliHelper.ServiceResponseWrapper( @@ -121,12 +122,15 @@ func (controller *AccountController) Create() *cobra.Command { cmd.MarkFlagRequired("username") cmd.Flags().StringVarP(&passwordStr, "password", "p", "", "Password") cmd.MarkFlagRequired("password") + cmd.Flags().StringVarP( + &isSuperAdminStr, "is-super-admin", "s", "false", "IsSuperAdmin", + ) return cmd } func (controller *AccountController) Update() *cobra.Command { var accountIdUint64 uint64 - var usernameStr, passwordStr, shouldUpdateApiKeyStr string + var usernameStr, passwordStr, isSuperAdminStr, shouldUpdateApiKeyStr string cmd := &cobra.Command{ Use: "update", @@ -148,6 +152,10 @@ func (controller *AccountController) Update() *cobra.Command { requestBody["password"] = passwordStr } + if isSuperAdminStr != "" { + requestBody["isSuperAdmin"] = isSuperAdminStr + } + cliHelper.ServiceResponseWrapper( controller.accountService.Update(requestBody), ) @@ -157,6 +165,7 @@ func (controller *AccountController) Update() *cobra.Command { cmd.Flags().Uint64VarP(&accountIdUint64, "account-id", "i", 0, "AccountId") cmd.Flags().StringVarP(&usernameStr, "username", "u", "", "Username") cmd.Flags().StringVarP(&passwordStr, "password", "p", "", "Password") + cmd.Flags().StringVarP(&isSuperAdminStr, "is-super-admin", "s", "", "IsSuperAdmin") cmd.Flags().StringVarP( &shouldUpdateApiKeyStr, "update-api-key", "k", "false", "ShouldUpdateApiKey", ) diff --git a/src/presentation/cli/controller/database.go b/src/presentation/cli/controller/database.go index 618b13658..ec137b588 100644 --- a/src/presentation/cli/controller/database.go +++ b/src/presentation/cli/controller/database.go @@ -1,9 +1,11 @@ package cliController import ( + "github.com/goinfinite/os/src/domain/valueObject" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" cliHelper "github.com/goinfinite/os/src/presentation/cli/helper" "github.com/goinfinite/os/src/presentation/service" + tkPresentation "github.com/goinfinite/tk/src/presentation" "github.com/spf13/cobra" ) @@ -25,7 +27,12 @@ func NewDatabaseController( } func (controller *DatabaseController) Read() *cobra.Command { - var dbTypeStr string + var ( + dbTypeStr, dbNameStr, usernameStr string + paginationPageNumberUint32 uint32 + paginationItemsPerPageUint16 uint16 + paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr string + ) cmd := &cobra.Command{ Use: "get", @@ -35,6 +42,19 @@ func (controller *DatabaseController) Read() *cobra.Command { "dbType": dbTypeStr, } + if dbNameStr != "" { + requestBody["name"] = dbNameStr + } + + if usernameStr != "" { + requestBody["username"] = usernameStr + } + + requestBody = cliHelper.PaginationParser( + requestBody, paginationPageNumberUint32, paginationItemsPerPageUint16, + paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr, + ) + cliHelper.ServiceResponseWrapper( controller.dbService.Read(requestBody), ) @@ -43,6 +63,23 @@ func (controller *DatabaseController) Read() *cobra.Command { cmd.Flags().StringVarP(&dbTypeStr, "db-type", "t", "", "DatabaseType") cmd.MarkFlagRequired("db-type") + cmd.Flags().StringVarP(&dbNameStr, "name", "n", "", "DatabaseName") + cmd.Flags().StringVarP(&usernameStr, "username", "u", "", "DatabaseUsername") + cmd.Flags().Uint32VarP( + &paginationPageNumberUint32, "page-number", "o", 0, "PageNumber (Pagination)", + ) + cmd.Flags().Uint16VarP( + &paginationItemsPerPageUint16, "items-per-page", "j", 0, "ItemsPerPage (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortByStr, "sort-by", "y", "", "SortBy (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortDirectionStr, "sort-direction", "x", "", "SortDirection (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationLastSeenIdStr, "last-seen-id", "l", "", "LastSeenId (Pagination)", + ) return cmd } @@ -112,7 +149,9 @@ func (controller *DatabaseController) CreateUser() *cobra.Command { } if len(privilegesSlice) > 0 { - requestBody["privileges"] = privilegesSlice + requestBody["privileges"] = tkPresentation.StringSliceValueObjectParser( + privilegesSlice, valueObject.NewDatabasePrivilege, + ) } cliHelper.ServiceResponseWrapper( @@ -131,7 +170,7 @@ func (controller *DatabaseController) CreateUser() *cobra.Command { cmd.MarkFlagRequired("password") cmd.Flags().StringSliceVarP( &privilegesSlice, "privileges", "r", []string{}, - "DatabasePrivileges (Comma-separated)", + "DatabasePrivileges (Comma or semicolon separated)", ) return cmd diff --git a/src/presentation/cli/controller/runtime.go b/src/presentation/cli/controller/runtime.go index 1e5aa9958..93358dd56 100644 --- a/src/presentation/cli/controller/runtime.go +++ b/src/presentation/cli/controller/runtime.go @@ -26,7 +26,7 @@ func NewRuntimeController( } func getHostname(hostnameStr string) (hostname valueObject.Fqdn, err error) { - primaryVhost, err := infraHelper.GetPrimaryVirtualHost() + primaryVhost, err := infraHelper.ReadPrimaryVirtualHostHostname() if err != nil { return hostname, errors.New("PrimaryVirtualHostNotFound") } diff --git a/src/presentation/cli/controller/services.go b/src/presentation/cli/controller/services.go index 64d1a011c..193988342 100644 --- a/src/presentation/cli/controller/services.go +++ b/src/presentation/cli/controller/services.go @@ -1,9 +1,11 @@ package cliController import ( + "github.com/goinfinite/os/src/domain/valueObject" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" cliHelper "github.com/goinfinite/os/src/presentation/cli/helper" "github.com/goinfinite/os/src/presentation/service" + sharedHelper "github.com/goinfinite/os/src/presentation/shared/helper" "github.com/spf13/cobra" ) @@ -190,45 +192,57 @@ func (controller *ServicesController) ReadInstallableItems() *cobra.Command { } func (controller *ServicesController) CreateInstallable() *cobra.Command { - var nameStr, versionStr, startupFileStr, autoStartStr, autoRestartStr, - autoCreateMappingStr string - var envsSlice, portBindingsSlice []string - var timeoutStartSecsInt, maxStartRetriesInt int + var ( + nameStr, versionStr, startupFileStr, workingDirStr, autoStartBoolStr, + autoRestartBoolStr, autoCreateMappingBoolStr, mappingHostname, mappingPath, + mappingUpgradeInsecureRequestsBoolStr string + envsSlice, portBindingsSlice []string + timeoutStartSecsInt, maxStartRetriesInt int + ) cmd := &cobra.Command{ Use: "create-installable", Short: "CreateInstallableService", Run: func(cmd *cobra.Command, args []string) { requestBody := map[string]interface{}{ - "name": nameStr, - "autoStart": autoStartStr, - "autoRestart": autoRestartStr, - "autoCreateMapping": autoCreateMappingStr, + "name": nameStr, + "autoStart": autoStartBoolStr, + "autoRestart": autoRestartBoolStr, + "autoCreateMapping": autoCreateMappingBoolStr, + "mappingUpgradeInsecureRequests": mappingUpgradeInsecureRequestsBoolStr, } if len(envsSlice) > 0 { - requestBody["envs"] = envsSlice + requestBody["envs"] = sharedHelper.StringSliceValueObjectParser( + envsSlice, valueObject.NewServiceEnv, + ) } - if versionStr != "" { requestBody["version"] = versionStr } - if startupFileStr != "" { requestBody["startupFile"] = startupFileStr } - + if workingDirStr != "" { + requestBody["workingDir"] = workingDirStr + } if len(portBindingsSlice) > 0 { - requestBody["portBindings"] = portBindingsSlice + requestBody["portBindings"] = sharedHelper.StringSliceValueObjectParser( + portBindingsSlice, valueObject.NewPortBinding, + ) } - if timeoutStartSecsInt != 0 { requestBody["timeoutStartSecs"] = uint(timeoutStartSecsInt) } - if maxStartRetriesInt != 0 { requestBody["maxStartRetries"] = uint(maxStartRetriesInt) } + if mappingHostname != "" { + requestBody["mappingHostname"] = mappingHostname + } + if mappingPath != "" { + requestBody["mappingPath"] = mappingPath + } cliHelper.ServiceResponseWrapper( controller.servicesService.CreateInstallable(requestBody, false), @@ -243,6 +257,7 @@ func (controller *ServicesController) CreateInstallable() *cobra.Command { ) cmd.Flags().StringVarP(&versionStr, "version", "v", "", "ServiceVersion") cmd.Flags().StringVarP(&startupFileStr, "startup-file", "f", "", "StartupFile") + cmd.Flags().StringVarP(&workingDirStr, "working-dir", "w", "", "WorkingDir") cmd.Flags().StringSliceVarP( &portBindingsSlice, "port-bindings", "p", []string{}, "PortBindings (port/protocol)", @@ -251,58 +266,80 @@ func (controller *ServicesController) CreateInstallable() *cobra.Command { &timeoutStartSecsInt, "timeout-start-secs", "o", 0, "TimeoutStartSecs", ) cmd.Flags().StringVarP( - &autoStartStr, "auto-start", "s", "true", "AutoStart", + &autoStartBoolStr, "auto-start", "s", "true", "AutoStart (true|false)", + ) + cmd.Flags().StringVarP( + &autoRestartBoolStr, "auto-restart", "r", "true", "AutoRestart (true|false)", ) cmd.Flags().IntVarP( &maxStartRetriesInt, "max-start-retries", "m", 0, "MaxStartRetries", ) cmd.Flags().StringVarP( - &autoRestartStr, "auto-restart", "r", "true", "AutoRestart", + &autoCreateMappingBoolStr, "auto-create-mapping", "a", "true", + "AutoCreateMapping (true|false)", + ) + cmd.Flags().StringVarP( + &mappingHostname, "mapping-hostname", "H", "", "MappingHostname (for AutoCreateMapping)", + ) + cmd.Flags().StringVarP( + &mappingPath, "mapping-path", "P", "", "MappingPath (for AutoCreateMapping)", ) cmd.Flags().StringVarP( - &autoCreateMappingStr, "auto-create-mapping", "a", "true", "AutoCreateMapping", + &mappingUpgradeInsecureRequestsBoolStr, "mapping-upgrade-insecure-requests", "u", + "false", "MappingUpgradeInsecureRequests (true|false)", ) + return cmd } func (controller *ServicesController) CreateCustom() *cobra.Command { - var nameStr, typeStr, startCmdStr, versionStr, autoStartStr, autoRestartStr, - autoCreateMappingStr string - var envsSlice, portBindingsSlice []string - var timeoutStartSecsInt, maxStartRetriesInt int + var ( + nameStr, typeStr, startCmdStr, versionStr, autoStartBoolStr, autoRestartBoolStr, + autoCreateMappingBoolStr, mappingHostname, mappingPath, + mappingUpgradeInsecureRequestsBoolStr string + envsSlice, portBindingsSlice []string + timeoutStartSecsInt, maxStartRetriesInt int + ) cmd := &cobra.Command{ Use: "create-custom", Short: "CreateCustomService", Run: func(cmd *cobra.Command, args []string) { requestBody := map[string]interface{}{ - "name": nameStr, - "type": typeStr, - "startCmd": startCmdStr, - "autoStart": autoStartStr, - "autoRestart": autoRestartStr, - "autoCreateMapping": autoCreateMappingStr, + "name": nameStr, + "type": typeStr, + "startCmd": startCmdStr, + "autoStart": autoStartBoolStr, + "autoRestart": autoRestartBoolStr, + "autoCreateMapping": autoCreateMappingBoolStr, + "mappingUpgradeInsecureRequests": mappingUpgradeInsecureRequestsBoolStr, } if len(envsSlice) > 0 { - requestBody["envs"] = envsSlice + requestBody["envs"] = sharedHelper.StringSliceValueObjectParser( + envsSlice, valueObject.NewServiceEnv, + ) } - if versionStr != "" { requestBody["version"] = versionStr } - if len(portBindingsSlice) > 0 { - requestBody["portBindings"] = portBindingsSlice + requestBody["portBindings"] = sharedHelper.StringSliceValueObjectParser( + portBindingsSlice, valueObject.NewPortBinding, + ) } - if timeoutStartSecsInt != 0 { requestBody["timeoutStartSecs"] = uint(timeoutStartSecsInt) } - if maxStartRetriesInt != 0 { requestBody["maxStartRetries"] = uint(maxStartRetriesInt) } + if mappingHostname != "" { + requestBody["mappingHostname"] = mappingHostname + } + if mappingPath != "" { + requestBody["mappingPath"] = mappingPath + } cliHelper.ServiceResponseWrapper( controller.servicesService.CreateCustom(requestBody), @@ -330,16 +367,27 @@ func (controller *ServicesController) CreateCustom() *cobra.Command { &timeoutStartSecsInt, "timeout-start-secs", "o", 0, "TimeoutStartSecs", ) cmd.Flags().StringVarP( - &autoStartStr, "auto-start", "s", "true", "AutoStart", + &autoStartBoolStr, "auto-start", "s", "true", "AutoStart (true|false)", ) cmd.Flags().IntVarP( &maxStartRetriesInt, "max-start-retries", "m", 0, "MaxStartRetries", ) cmd.Flags().StringVarP( - &autoRestartStr, "auto-restart", "r", "true", "AutoRestart", + &autoRestartBoolStr, "auto-restart", "r", "true", "AutoRestart (true|false)", + ) + cmd.Flags().StringVarP( + &autoCreateMappingBoolStr, "auto-create-mapping", "a", "true", + "AutoCreateMapping (true|false)", + ) + cmd.Flags().StringVarP( + &mappingHostname, "mapping-hostname", "H", "", "MappingHostname (for AutoCreateMapping)", + ) + cmd.Flags().StringVarP( + &mappingPath, "mapping-path", "P", "", "MappingPath (for AutoCreateMapping)", ) cmd.Flags().StringVarP( - &autoCreateMappingStr, "auto-create-mapping", "a", "true", "AutoCreateMapping", + &mappingUpgradeInsecureRequestsBoolStr, "mapping-upgrade-insecure-requests", "u", + "false", "MappingUpgradeInsecureRequests (true|false) (for AutoCreateMapping)", ) return cmd } diff --git a/src/presentation/cli/controller/ssl.go b/src/presentation/cli/controller/ssl.go index 97fec908d..4cf7dc045 100644 --- a/src/presentation/cli/controller/ssl.go +++ b/src/presentation/cli/controller/ssl.go @@ -6,6 +6,7 @@ import ( internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" cliHelper "github.com/goinfinite/os/src/presentation/cli/helper" "github.com/goinfinite/os/src/presentation/service" + tkPresentation "github.com/goinfinite/tk/src/presentation" "github.com/spf13/cobra" ) @@ -24,14 +25,60 @@ func NewSslController( } func (controller *SslController) Read() *cobra.Command { + var sslPairIdStr, virtualHostHostnameStr string + var altNamesSlice []string + var paginationPageNumberUint32 uint32 + var paginationItemsPerPageUint16 uint16 + var paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr string + cmd := &cobra.Command{ Use: "get", Short: "ReadSslPairs", Run: func(cmd *cobra.Command, args []string) { - cliHelper.ServiceResponseWrapper(controller.sslService.Read()) + requestBody := map[string]interface{}{} + if sslPairIdStr != "" { + requestBody["sslPairId"] = sslPairIdStr + } + if virtualHostHostnameStr != "" { + requestBody["virtualHostHostname"] = virtualHostHostnameStr + } + if len(altNamesSlice) > 0 { + requestBody["altNames"] = altNamesSlice + } + + requestBody = cliHelper.PaginationParser( + requestBody, paginationPageNumberUint32, paginationItemsPerPageUint16, + paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr, + ) + + cliHelper.ServiceResponseWrapper( + controller.sslService.Read(requestBody), + ) }, } + cmd.Flags().StringVarP(&sslPairIdStr, "pairId", "i", "", "SslPairId") + cmd.Flags().StringVarP( + &virtualHostHostnameStr, "hostname", "n", "", "VirtualHostHostname", + ) + cmd.Flags().StringSliceVarP( + &altNamesSlice, "altNames", "a", []string{}, "AltNames", + ) + cmd.Flags().Uint32VarP( + &paginationPageNumberUint32, "page-number", "o", 0, "PageNumber (Pagination)", + ) + cmd.Flags().Uint16VarP( + &paginationItemsPerPageUint16, "items-per-page", "j", 0, "ItemsPerPage (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortByStr, "sort-by", "y", "", "SortBy (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortDirectionStr, "sort-direction", "x", "", "SortDirection (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationLastSeenIdStr, "last-seen-id", "l", "", "LastSeenId (Pagination)", + ) return cmd } @@ -43,15 +90,18 @@ func (controller *SslController) Create() *cobra.Command { Use: "create", Short: "CreateSslPair", Run: func(cmd *cobra.Command, args []string) { - requestBody := map[string]interface{}{ - "virtualHosts": virtualHostsSlice, - } + requestBody := map[string]interface{}{} + + vhostHostnames := tkPresentation.StringSliceValueObjectParser( + virtualHostsSlice, valueObject.NewFqdn, + ) + requestBody["virtualHostsHostnames"] = vhostHostnames certFilePath, err := valueObject.NewUnixFilePath(certFilePathStr) if err != nil { cliHelper.ResponseWrapper(false, "InvalidCertificateFilePath") } - certContentStr, err := infraHelper.GetFileContent(certFilePath.String()) + certContentStr, err := infraHelper.ReadFileContent(certFilePath.String()) if err != nil { cliHelper.ResponseWrapper(false, "OpenSslCertificateFileError") } @@ -61,7 +111,7 @@ func (controller *SslController) Create() *cobra.Command { if err != nil { cliHelper.ResponseWrapper(false, "InvalidSslPrivateKeyFilePath") } - privateKeyContentStr, err := infraHelper.GetFileContent( + privateKeyContentStr, err := infraHelper.ReadFileContent( privateKeyFilePath.String(), ) if err != nil { @@ -86,50 +136,44 @@ func (controller *SslController) Create() *cobra.Command { return cmd } -func (controller *SslController) Delete() *cobra.Command { - var sslPairIdStr string +func (controller *SslController) CreatePubliclyTrusted() *cobra.Command { + var hostnameStr string cmd := &cobra.Command{ - Use: "delete", - Short: "DeleteSslPair", + Use: "create-trusted", + Short: "CreatePubliclyTrusted", Run: func(cmd *cobra.Command, args []string) { requestBody := map[string]interface{}{ - "id": sslPairIdStr, + "virtualHostHostname": hostnameStr, } - cliHelper.ServiceResponseWrapper(controller.sslService.Delete(requestBody)) + cliHelper.ServiceResponseWrapper( + controller.sslService.CreatePubliclyTrusted(requestBody, false), + ) }, } - cmd.Flags().StringVarP(&sslPairIdStr, "pairId", "i", "", "SslPairId") - cmd.MarkFlagRequired("pairId") + cmd.Flags().StringVarP(&hostnameStr, "hostname", "n", "", "VirtualHostHostname") + cmd.MarkFlagRequired("hostname") return cmd } -func (controller *SslController) DeleteVhosts() *cobra.Command { +func (controller *SslController) Delete() *cobra.Command { var sslPairIdStr string - var virtualHostsSlice []string cmd := &cobra.Command{ - Use: "delete-vhosts", - Short: "RemoveSslPairVhosts", + Use: "delete", + Short: "DeleteSslPair", Run: func(cmd *cobra.Command, args []string) { requestBody := map[string]interface{}{ - "id": sslPairIdStr, - "virtualHosts": virtualHostsSlice, + "id": sslPairIdStr, } - cliHelper.ServiceResponseWrapper( - controller.sslService.DeleteVhosts(requestBody), - ) + cliHelper.ServiceResponseWrapper(controller.sslService.Delete(requestBody)) }, } - cmd.Flags().StringVarP(&sslPairIdStr, "id", "i", "", "SslPairId") - cmd.MarkFlagRequired("sslPairId") - cmd.Flags().StringSliceVarP( - &virtualHostsSlice, "virtualHosts", "v", []string{}, "VirtualHosts", - ) - cmd.MarkFlagRequired("virtualHosts") + cmd.Flags().StringVarP(&sslPairIdStr, "pairId", "i", "", "SslPairId") + cmd.MarkFlagRequired("pairId") return cmd } diff --git a/src/presentation/cli/controller/virtualHost.go b/src/presentation/cli/controller/virtualHost.go index 03c038e87..2b40bce63 100644 --- a/src/presentation/cli/controller/virtualHost.go +++ b/src/presentation/cli/controller/virtualHost.go @@ -4,6 +4,8 @@ import ( internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" cliHelper "github.com/goinfinite/os/src/presentation/cli/helper" "github.com/goinfinite/os/src/presentation/service" + tkValueObject "github.com/goinfinite/tk/src/domain/valueObject" + tkPresentation "github.com/goinfinite/tk/src/presentation" "github.com/spf13/cobra" ) @@ -21,26 +23,79 @@ func NewVirtualHostController( } func (controller *VirtualHostController) Read() *cobra.Command { + var hostnameStr, typeStr, rootDirectoryStr, parentHostnameStr, withMappingsBoolStr string + var paginationPageNumberUint32 uint32 + var paginationItemsPerPageUint16 uint16 + var paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr string + cmd := &cobra.Command{ Use: "get", Short: "ReadVirtualHosts", Run: func(cmd *cobra.Command, args []string) { - cliHelper.ServiceResponseWrapper(controller.virtualHostService.Read()) + requestBody := map[string]interface{}{} + + if hostnameStr != "" { + requestBody["hostname"] = hostnameStr + } + if typeStr != "" { + requestBody["type"] = typeStr + } + if rootDirectoryStr != "" { + requestBody["rootDirectory"] = rootDirectoryStr + } + if parentHostnameStr != "" { + requestBody["parentHostname"] = parentHostnameStr + } + if withMappingsBoolStr != "" { + requestBody["withMappings"] = withMappingsBoolStr + } + + requestBody = cliHelper.PaginationParser( + requestBody, paginationPageNumberUint32, paginationItemsPerPageUint16, + paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr, + ) + + cliHelper.ServiceResponseWrapper( + controller.virtualHostService.Read(requestBody), + ) }, } + cmd.Flags().StringVarP(&hostnameStr, "hostname", "n", "", "VirtualHostHostname") + cmd.Flags().StringVarP(&typeStr, "type", "t", "", "VirtualHostType") + cmd.Flags().StringVarP(&rootDirectoryStr, "root", "r", "", "RootDirectory") + cmd.Flags().StringVarP(&parentHostnameStr, "parent", "p", "", "ParentHostname") + cmd.Flags().StringVarP( + &withMappingsBoolStr, "with-mappings", "w", "false", "WithMappings (true|false)", + ) + cmd.Flags().Uint32VarP( + &paginationPageNumberUint32, "page-number", "o", 0, "PageNumber (Pagination)", + ) + cmd.Flags().Uint16VarP( + &paginationItemsPerPageUint16, "items-per-page", "j", 0, "ItemsPerPage (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortByStr, "sort-by", "y", "", "SortBy (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortDirectionStr, "sort-direction", "x", "", "SortDirection (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationLastSeenIdStr, "last-seen-id", "l", "", "LastSeenId (Pagination)", + ) return cmd } func (controller *VirtualHostController) Create() *cobra.Command { - var hostnameStr, typeStr, parentHostnameStr string + var hostnameStr, typeStr, parentHostnameStr, isWildcardBoolStr string cmd := &cobra.Command{ Use: "create", Short: "CreateVirtualHost", Run: func(cmd *cobra.Command, args []string) { requestBody := map[string]interface{}{ - "hostname": hostnameStr, + "hostname": hostnameStr, + "isWildcard": isWildcardBoolStr, } if typeStr != "" { @@ -63,6 +118,35 @@ func (controller *VirtualHostController) Create() *cobra.Command { &typeStr, "type", "t", "", "VirtualHostType (top-level|subdomain|alias)", ) cmd.Flags().StringVarP(&parentHostnameStr, "parent", "p", "", "ParentHostname") + cmd.Flags().StringVarP( + &isWildcardBoolStr, "is-wildcard", "w", "false", "IsWildcard (true|false)", + ) + return cmd +} + +func (controller *VirtualHostController) Update() *cobra.Command { + var hostnameStr, isWildcardBoolStr string + + cmd := &cobra.Command{ + Use: "update", + Short: "UpdateVirtualHost", + Run: func(cmd *cobra.Command, args []string) { + requestBody := map[string]interface{}{ + "hostname": hostnameStr, + "isWildcard": isWildcardBoolStr, + } + + cliHelper.ServiceResponseWrapper( + controller.virtualHostService.Update(requestBody), + ) + }, + } + + cmd.Flags().StringVarP(&hostnameStr, "hostname", "n", "", "VirtualHostHostname") + cmd.MarkFlagRequired("hostname") + cmd.Flags().StringVarP( + &isWildcardBoolStr, "is-wildcard", "w", "false", "IsWildcard (true|false)", + ) return cmd } @@ -89,31 +173,81 @@ func (controller *VirtualHostController) Delete() *cobra.Command { } func (controller *VirtualHostController) ReadWithMappings() *cobra.Command { + var hostnameStr, typeStr, rootDirectoryStr, parentHostnameStr string + var paginationPageNumberUint32 uint32 + var paginationItemsPerPageUint16 uint16 + var paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr string + cmd := &cobra.Command{ Use: "get", Short: "ReadVirtualHostsWithMappings", Run: func(cmd *cobra.Command, args []string) { + requestBody := map[string]interface{}{ + "withMappings": true, + } + + if hostnameStr != "" { + requestBody["hostname"] = hostnameStr + } + if typeStr != "" { + requestBody["type"] = typeStr + } + if rootDirectoryStr != "" { + requestBody["rootDirectory"] = rootDirectoryStr + } + if parentHostnameStr != "" { + requestBody["parentHostname"] = parentHostnameStr + } + + requestBody = cliHelper.PaginationParser( + requestBody, paginationPageNumberUint32, paginationItemsPerPageUint16, + paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr, + ) + cliHelper.ServiceResponseWrapper( - controller.virtualHostService.ReadWithMappings(), + controller.virtualHostService.Read(requestBody), ) }, } + cmd.Flags().StringVarP(&hostnameStr, "hostname", "n", "", "VirtualHostHostname") + cmd.Flags().StringVarP(&typeStr, "type", "t", "", "VirtualHostType") + cmd.Flags().StringVarP(&rootDirectoryStr, "root", "r", "", "RootDirectory") + cmd.Flags().StringVarP(&parentHostnameStr, "parent", "p", "", "ParentHostname") + cmd.Flags().Uint32VarP( + &paginationPageNumberUint32, "page-number", "o", 0, "PageNumber (Pagination)", + ) + cmd.Flags().Uint16VarP( + &paginationItemsPerPageUint16, "items-per-page", "j", 0, "ItemsPerPage (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortByStr, "sort-by", "y", "", "SortBy (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortDirectionStr, "sort-direction", "x", "", "SortDirection (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationLastSeenIdStr, "last-seen-id", "l", "", "LastSeenId (Pagination)", + ) return cmd } func (controller *VirtualHostController) CreateMapping() *cobra.Command { - var hostnameStr, pathStr, matchPatternStr, targetTypeStr, targetValueStr string - var targetHttpResponseCodeUint uint + var ( + hostnameStr, pathStr, matchPatternStr, targetTypeStr, targetValueStr, + shouldUpgradeInsecureRequestsBoolStr string + targetHttpResponseCodeUint, mappingSecurityRuleIdUint uint + ) cmd := &cobra.Command{ Use: "create", Short: "CreateVirtualHostMapping", Run: func(cmd *cobra.Command, args []string) { requestBody := map[string]interface{}{ - "hostname": hostnameStr, - "path": pathStr, - "targetType": targetTypeStr, + "hostname": hostnameStr, + "path": pathStr, + "targetType": targetTypeStr, + "shouldUpgradeInsecureRequests": shouldUpgradeInsecureRequestsBoolStr, } if matchPatternStr != "" { @@ -128,6 +262,10 @@ func (controller *VirtualHostController) CreateMapping() *cobra.Command { requestBody["targetHttpResponseCode"] = targetHttpResponseCodeUint } + if mappingSecurityRuleIdUint != 0 { + requestBody["mappingSecurityRuleId"] = mappingSecurityRuleIdUint + } + cliHelper.ServiceResponseWrapper( controller.virtualHostService.CreateMapping(requestBody), ) @@ -151,6 +289,88 @@ func (controller *VirtualHostController) CreateMapping() *cobra.Command { cmd.Flags().UintVarP( &targetHttpResponseCodeUint, "response-code", "r", 0, "TargetHttpResponseCode", ) + cmd.Flags().StringVarP( + &shouldUpgradeInsecureRequestsBoolStr, "should-upgrade-insecure-requests", "u", + "false", "ShouldUpgradeInsecureRequests (true|false)", + ) + cmd.Flags().UintVarP( + &mappingSecurityRuleIdUint, "mapping-security-rule-id", "s", 0, "MappingSecurityRuleId", + ) + return cmd +} + +func (controller *VirtualHostController) UpdateMapping() *cobra.Command { + var ( + mappingIdUint uint + pathStr, matchPatternStr, targetTypeStr, targetValueStr, + shouldUpgradeInsecureRequestsBoolStr string + targetHttpResponseCodeUint, mappingSecurityRuleIdUint uint + ) + + cmd := &cobra.Command{ + Use: "update", + Short: "UpdateVirtualHostMapping", + Run: func(cmd *cobra.Command, args []string) { + requestBody := map[string]interface{}{ + "id": mappingIdUint, + } + + if pathStr != "" { + requestBody["path"] = pathStr + } + + if matchPatternStr != "" { + requestBody["matchPattern"] = matchPatternStr + } + + if targetTypeStr != "" { + requestBody["targetType"] = targetTypeStr + } + + if targetValueStr != "" { + requestBody["targetValue"] = targetValueStr + } + + if targetHttpResponseCodeUint != 0 { + requestBody["targetHttpResponseCode"] = targetHttpResponseCodeUint + } + + if shouldUpgradeInsecureRequestsBoolStr != "" { + requestBody["shouldUpgradeInsecureRequests"] = shouldUpgradeInsecureRequestsBoolStr + } + + if mappingSecurityRuleIdUint != 0 { + requestBody["mappingSecurityRuleId"] = mappingSecurityRuleIdUint + } + + cliHelper.ServiceResponseWrapper( + controller.virtualHostService.UpdateMapping(requestBody), + ) + }, + } + + cmd.Flags().UintVarP(&mappingIdUint, "id", "i", 0, "MappingId") + cmd.MarkFlagRequired("id") + cmd.Flags().StringVarP(&pathStr, "path", "p", "", "MappingPath") + cmd.Flags().StringVarP( + &matchPatternStr, "match", "m", "", + "MatchPattern (begins-with|contains|ends-with)", + ) + cmd.Flags().StringVarP( + &targetTypeStr, "type", "t", "", + "MappingTargetType (url|service|response-code|inline-html|static-files)", + ) + cmd.Flags().StringVarP(&targetValueStr, "value", "v", "", "MappingTargetValue") + cmd.Flags().UintVarP( + &targetHttpResponseCodeUint, "response-code", "r", 0, "TargetHttpResponseCode", + ) + cmd.Flags().StringVarP( + &shouldUpgradeInsecureRequestsBoolStr, "should-upgrade-insecure-requests", "u", + "", "ShouldUpgradeInsecureRequests (true|false)", + ) + cmd.Flags().UintVarP( + &mappingSecurityRuleIdUint, "mapping-security-rule-id", "s", 0, "MappingSecurityRuleId", + ) return cmd } @@ -175,3 +395,317 @@ func (controller *VirtualHostController) DeleteMapping() *cobra.Command { cmd.MarkFlagRequired("id") return cmd } + +func (controller *VirtualHostController) ReadMappingSecurityRules() *cobra.Command { + var ruleIdUint uint + var ruleNameStr, allowedIpStr, blockedIpStr string + var createdBeforeAtInt, createdAfterAtInt int64 + var paginationPageNumberUint32 uint32 + var paginationItemsPerPageUint16 uint16 + var paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr string + + cmd := &cobra.Command{ + Use: "get", + Short: "ReadMappingSecurityRules", + Run: func(cmd *cobra.Command, args []string) { + requestBody := map[string]interface{}{} + + if ruleIdUint != 0 { + requestBody["id"] = ruleIdUint + } + if ruleNameStr != "" { + requestBody["name"] = ruleNameStr + } + if allowedIpStr != "" { + requestBody["allowedIp"] = allowedIpStr + } + if blockedIpStr != "" { + requestBody["blockedIp"] = blockedIpStr + } + if createdBeforeAtInt != 0 { + requestBody["createdBeforeAt"] = createdBeforeAtInt + } + if createdAfterAtInt != 0 { + requestBody["createdAfterAt"] = createdAfterAtInt + } + + requestBody = cliHelper.PaginationParser( + requestBody, paginationPageNumberUint32, paginationItemsPerPageUint16, + paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr, + ) + + cliHelper.ServiceResponseWrapper( + controller.virtualHostService.ReadMappingSecurityRules(requestBody), + ) + }, + } + + cmd.Flags().UintVarP(&ruleIdUint, "id", "i", 0, "MappingSecurityRuleId") + cmd.Flags().StringVarP(&ruleNameStr, "name", "n", "", "MappingSecurityRuleName") + cmd.Flags().StringVarP(&allowedIpStr, "allowed-ip", "a", "", "AllowedIpAddress") + cmd.Flags().StringVarP(&blockedIpStr, "blocked-ip", "b", "", "BlockedIpAddress") + cmd.Flags().Int64VarP( + &createdBeforeAtInt, "created-before", "e", 0, "CreatedBeforeAt (Unix timestamp)", + ) + cmd.Flags().Int64VarP( + &createdAfterAtInt, "created-after", "f", 0, "CreatedAfterAt (Unix timestamp)", + ) + cmd.Flags().Uint32VarP( + &paginationPageNumberUint32, "page-number", "o", 0, "PageNumber (Pagination)", + ) + cmd.Flags().Uint16VarP( + &paginationItemsPerPageUint16, "items-per-page", "j", 0, "ItemsPerPage (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortByStr, "sort-by", "y", "", "SortBy (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationSortDirectionStr, "sort-direction", "x", "", "SortDirection (Pagination)", + ) + cmd.Flags().StringVarP( + &paginationLastSeenIdStr, "last-seen-id", "l", "", "LastSeenId (Pagination)", + ) + return cmd +} + +func (controller *VirtualHostController) CreateMappingSecurityRule() *cobra.Command { + var nameStr, descriptionStr string + var allowedIpsSlice, blockedIpsSlice []string + var rpsSoftLimitPerIpUint, rpsHardLimitPerIpUint, responseCodeOnMaxRequestsUint uint + var maxConnectionsPerIpUint uint + var bandwidthBpsLimitPerConnectionUint64, bandwidthLimitOnlyAfterBytesUint64 uint64 + var responseCodeOnMaxConnectionsUint uint + + cmd := &cobra.Command{ + Use: "create", + Short: "CreateMappingSecurityRule", + Run: func(cmd *cobra.Command, args []string) { + requestBody := map[string]interface{}{ + "name": nameStr, + } + + if descriptionStr != "" { + requestBody["description"] = descriptionStr + } + + if len(allowedIpsSlice) > 0 { + requestBody["allowedIps"] = tkPresentation.StringSliceValueObjectParser( + allowedIpsSlice, tkValueObject.NewCidrBlock, + ) + } + + if len(blockedIpsSlice) > 0 { + requestBody["blockedIps"] = tkPresentation.StringSliceValueObjectParser( + blockedIpsSlice, tkValueObject.NewCidrBlock, + ) + } + + if rpsSoftLimitPerIpUint != 0 { + requestBody["rpsSoftLimitPerIp"] = rpsSoftLimitPerIpUint + } + + if rpsHardLimitPerIpUint != 0 { + requestBody["rpsHardLimitPerIp"] = rpsHardLimitPerIpUint + } + + if responseCodeOnMaxRequestsUint != 0 { + requestBody["responseCodeOnMaxRequests"] = responseCodeOnMaxRequestsUint + } + + if maxConnectionsPerIpUint != 0 { + requestBody["maxConnectionsPerIp"] = maxConnectionsPerIpUint + } + + if bandwidthBpsLimitPerConnectionUint64 != 0 { + requestBody["bandwidthBpsLimitPerConnection"] = bandwidthBpsLimitPerConnectionUint64 + } + + if bandwidthLimitOnlyAfterBytesUint64 != 0 { + requestBody["bandwidthLimitOnlyAfterBytes"] = bandwidthLimitOnlyAfterBytesUint64 + } + + if responseCodeOnMaxConnectionsUint != 0 { + requestBody["responseCodeOnMaxConnections"] = responseCodeOnMaxConnectionsUint + } + + cliHelper.ServiceResponseWrapper( + controller.virtualHostService.CreateMappingSecurityRule(requestBody), + ) + }, + } + + cmd.Flags().StringVarP(&nameStr, "name", "n", "", "MappingSecurityRuleName") + cmd.MarkFlagRequired("name") + cmd.Flags().StringVarP( + &descriptionStr, "description", "d", "", "MappingSecurityRuleDescription", + ) + cmd.Flags().StringSliceVarP( + &allowedIpsSlice, "allowed-ips", "a", []string{}, + "AllowedIps (comma-separated CIDR blocks)", + ) + cmd.Flags().StringSliceVarP( + &blockedIpsSlice, "blocked-ips", "b", []string{}, + "BlockedIps (comma-separated CIDR blocks)", + ) + cmd.Flags().UintVarP( + &rpsSoftLimitPerIpUint, "rps-soft-limit", "S", 0, "RpsSoftLimitPerIp", + ) + cmd.Flags().UintVarP( + &rpsHardLimitPerIpUint, "rps-hard-limit", "H", 0, "RpsHardLimitPerIp", + ) + cmd.Flags().UintVarP( + &responseCodeOnMaxRequestsUint, "response-code-requests", "r", 0, + "ResponseCodeOnMaxRequests", + ) + cmd.Flags().UintVarP( + &maxConnectionsPerIpUint, "max-connections", "m", 0, "MaxConnectionsPerIp", + ) + cmd.Flags().Uint64VarP( + &bandwidthBpsLimitPerConnectionUint64, "bandwidth-limit", "l", 0, + "BandwidthBpsLimitPerConnection", + ) + cmd.Flags().Uint64VarP( + &bandwidthLimitOnlyAfterBytesUint64, "bandwidth-limit-after", "f", 0, + "BandwidthLimitOnlyAfterBytes", + ) + cmd.Flags().UintVarP( + &responseCodeOnMaxConnectionsUint, "response-code-connections", "c", 0, + "ResponseCodeOnMaxConnections", + ) + return cmd +} + +func (controller *VirtualHostController) UpdateMappingSecurityRule() *cobra.Command { + var ruleIdUint uint + var nameStr, descriptionStr string + var allowedIpsSlice, blockedIpsSlice []string + var rpsSoftLimitPerIpUint, rpsHardLimitPerIpUint, responseCodeOnMaxRequestsUint uint + var maxConnectionsPerIpUint uint + var bandwidthBpsLimitPerConnectionUint64, bandwidthLimitOnlyAfterBytesUint64 uint64 + var responseCodeOnMaxConnectionsUint uint + + cmd := &cobra.Command{ + Use: "update", + Short: "UpdateMappingSecurityRule", + Run: func(cmd *cobra.Command, args []string) { + requestBody := map[string]interface{}{ + "id": ruleIdUint, + } + + if nameStr != "" { + requestBody["name"] = nameStr + } + + if descriptionStr != "" { + requestBody["description"] = descriptionStr + } + + if len(allowedIpsSlice) > 0 { + requestBody["allowedIps"] = tkPresentation.StringSliceValueObjectParser( + allowedIpsSlice, tkValueObject.NewCidrBlock, + ) + } + + if len(blockedIpsSlice) > 0 { + requestBody["blockedIps"] = tkPresentation.StringSliceValueObjectParser( + blockedIpsSlice, tkValueObject.NewCidrBlock, + ) + } + + if rpsSoftLimitPerIpUint != 0 { + requestBody["rpsSoftLimitPerIp"] = rpsSoftLimitPerIpUint + } + + if rpsHardLimitPerIpUint != 0 { + requestBody["rpsHardLimitPerIp"] = rpsHardLimitPerIpUint + } + + if responseCodeOnMaxRequestsUint != 0 { + requestBody["responseCodeOnMaxRequests"] = responseCodeOnMaxRequestsUint + } + + if maxConnectionsPerIpUint != 0 { + requestBody["maxConnectionsPerIp"] = maxConnectionsPerIpUint + } + + if bandwidthBpsLimitPerConnectionUint64 != 0 { + requestBody["bandwidthBpsLimitPerConnection"] = bandwidthBpsLimitPerConnectionUint64 + } + + if bandwidthLimitOnlyAfterBytesUint64 != 0 { + requestBody["bandwidthLimitOnlyAfterBytes"] = bandwidthLimitOnlyAfterBytesUint64 + } + + if responseCodeOnMaxConnectionsUint != 0 { + requestBody["responseCodeOnMaxConnections"] = responseCodeOnMaxConnectionsUint + } + + cliHelper.ServiceResponseWrapper( + controller.virtualHostService.UpdateMappingSecurityRule(requestBody), + ) + }, + } + + cmd.Flags().UintVarP(&ruleIdUint, "id", "i", 0, "MappingSecurityRuleId") + cmd.MarkFlagRequired("id") + cmd.Flags().StringVarP(&nameStr, "name", "n", "", "MappingSecurityRuleName") + cmd.Flags().StringVarP( + &descriptionStr, "description", "d", "", "MappingSecurityRuleDescription", + ) + cmd.Flags().StringSliceVarP( + &allowedIpsSlice, "allowed-ips", "a", []string{}, + "AllowedIps (comma-separated CIDR blocks)", + ) + cmd.Flags().StringSliceVarP( + &blockedIpsSlice, "blocked-ips", "b", []string{}, + "BlockedIps (comma-separated CIDR blocks)", + ) + cmd.Flags().UintVarP( + &rpsSoftLimitPerIpUint, "rps-soft-limit", "S", 0, "RpsSoftLimitPerIp", + ) + cmd.Flags().UintVarP( + &rpsHardLimitPerIpUint, "rps-hard-limit", "H", 0, "RpsHardLimitPerIp", + ) + cmd.Flags().UintVarP( + &responseCodeOnMaxRequestsUint, "response-code-requests", "r", 0, + "ResponseCodeOnMaxRequests", + ) + cmd.Flags().UintVarP( + &maxConnectionsPerIpUint, "max-connections", "m", 0, "MaxConnectionsPerIp", + ) + cmd.Flags().Uint64VarP( + &bandwidthBpsLimitPerConnectionUint64, "bandwidth-limit", "l", 0, + "BandwidthBpsLimitPerConnection", + ) + cmd.Flags().Uint64VarP( + &bandwidthLimitOnlyAfterBytesUint64, "bandwidth-limit-after", "f", 0, + "BandwidthLimitOnlyAfterBytes", + ) + cmd.Flags().UintVarP( + &responseCodeOnMaxConnectionsUint, "response-code-connections", "c", 0, + "ResponseCodeOnMaxConnections", + ) + return cmd +} + +func (controller *VirtualHostController) DeleteMappingSecurityRule() *cobra.Command { + var ruleIdUint uint + + cmd := &cobra.Command{ + Use: "delete", + Short: "DeleteMappingSecurityRule", + Run: func(cmd *cobra.Command, args []string) { + requestBody := map[string]interface{}{ + "id": ruleIdUint, + } + + cliHelper.ServiceResponseWrapper( + controller.virtualHostService.DeleteMappingSecurityRule(requestBody), + ) + }, + } + + cmd.Flags().UintVarP(&ruleIdUint, "id", "i", 0, "MappingSecurityRuleId") + cmd.MarkFlagRequired("id") + return cmd +} diff --git a/src/presentation/cli/helper/paginationParser.go b/src/presentation/cli/helper/paginationParser.go new file mode 100644 index 000000000..5e6ea4670 --- /dev/null +++ b/src/presentation/cli/helper/paginationParser.go @@ -0,0 +1,26 @@ +package cliHelper + +func PaginationParser( + requestBody map[string]interface{}, + paginationPageNumberUint32 uint32, + paginationItemsPerPageUint16 uint16, + paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr string, +) map[string]interface{} { + if paginationPageNumberUint32 != 0 { + requestBody["pageNumber"] = paginationPageNumberUint32 + } + if paginationItemsPerPageUint16 != 0 { + requestBody["itemsPerPage"] = paginationItemsPerPageUint16 + } + if paginationSortByStr != "" { + requestBody["sortBy"] = paginationSortByStr + } + if paginationSortDirectionStr != "" { + requestBody["sortDirection"] = paginationSortDirectionStr + } + if paginationLastSeenIdStr != "" { + requestBody["lastSeenId"] = paginationLastSeenIdStr + } + + return requestBody +} diff --git a/src/presentation/cli/middleware/checkEnvs.go b/src/presentation/cli/middleware/checkEnvs.go index b8e5b0248..5c940c7aa 100644 --- a/src/presentation/cli/middleware/checkEnvs.go +++ b/src/presentation/cli/middleware/checkEnvs.go @@ -36,7 +36,7 @@ func genSecret() (string, error) { } func CheckEnvs() { - primaryHostname, err := infraHelper.GetPrimaryVirtualHost() + primaryHostname, err := infraHelper.ReadPrimaryVirtualHostHostname() if err != nil { log.Fatalf("PrimaryHostnameUnidentifiable") } diff --git a/src/presentation/cli/router.go b/src/presentation/cli/router.go index 5d39f05f3..8b8943bf6 100644 --- a/src/presentation/cli/router.go +++ b/src/presentation/cli/router.go @@ -166,7 +166,7 @@ func (router *Router) scheduledTaskRoutes() { func (router Router) serveRoutes() { var serveCmd = &cobra.Command{ Use: "serve", - Short: "Start Infinite OS HTTPS server (port 1618)", + Short: "Start Infinite OS HTTPS server (port " + infraEnvs.InfiniteOsApiHttpPublicPort + ")", Run: func(cmd *cobra.Command, args []string) { presentation.HttpServerInit( router.persistentDbSvc, router.transientDbSvc, router.trailDbSvc, @@ -208,7 +208,7 @@ func (router Router) sslRoutes() { ) sslCmd.AddCommand(sslController.Read()) sslCmd.AddCommand(sslController.Create()) - sslCmd.AddCommand(sslController.DeleteVhosts()) + sslCmd.AddCommand(sslController.CreatePubliclyTrusted()) sslCmd.AddCommand(sslController.Delete()) } @@ -224,6 +224,7 @@ func (router Router) virtualHostRoutes() { ) vhostCmd.AddCommand(vhostController.Read()) vhostCmd.AddCommand(vhostController.Create()) + vhostCmd.AddCommand(vhostController.Update()) vhostCmd.AddCommand(vhostController.Delete()) var mappingCmd = &cobra.Command{ @@ -234,7 +235,19 @@ func (router Router) virtualHostRoutes() { mappingCmd.AddCommand(vhostController.ReadWithMappings()) mappingCmd.AddCommand(vhostController.CreateMapping()) + mappingCmd.AddCommand(vhostController.UpdateMapping()) mappingCmd.AddCommand(vhostController.DeleteMapping()) + + var securityRuleCmd = &cobra.Command{ + Use: "security", + Short: "MappingSecurityRuleManagement", + } + mappingCmd.AddCommand(securityRuleCmd) + + securityRuleCmd.AddCommand(vhostController.ReadMappingSecurityRules()) + securityRuleCmd.AddCommand(vhostController.CreateMappingSecurityRule()) + securityRuleCmd.AddCommand(vhostController.UpdateMappingSecurityRule()) + securityRuleCmd.AddCommand(vhostController.DeleteMappingSecurityRule()) } func (router Router) RegisterRoutes() { diff --git a/src/presentation/http.go b/src/presentation/http.go index 58a4af2da..a26c38ddb 100644 --- a/src/presentation/http.go +++ b/src/presentation/http.go @@ -1,12 +1,15 @@ package presentation import ( + "errors" "fmt" "log/slog" "net/http" "os" + "github.com/goinfinite/os/src/domain/valueObject" voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" + infraEnvs "github.com/goinfinite/os/src/infra/envs" infraHelper "github.com/goinfinite/os/src/infra/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" o11yInfra "github.com/goinfinite/os/src/infra/o11y" @@ -25,42 +28,52 @@ func webServerSetup( ws.OnStartSetup() } -func HttpServerInit( - persistentDbSvc *internalDbInfra.PersistentDatabaseService, - transientDbSvc *internalDbInfra.TransientDatabaseService, - trailDbSvc *internalDbInfra.TrailDatabaseService, +func initialSslSetup() ( + certFilePath valueObject.UnixFilePath, + keyFilePath valueObject.UnixFilePath, + err error, ) { - e := echo.New() - - api.ApiInit(e, persistentDbSvc, transientDbSvc, trailDbSvc) - ui.UiInit(e, persistentDbSvc, transientDbSvc, trailDbSvc) + rawOsPkiDir := "/infinite/pki" + pkiDir, err := valueObject.NewUnixFilePath(rawOsPkiDir) + if err != nil { + return certFilePath, keyFilePath, errors.New("InvalidPkiDir") + } + osPkiDirStr := pkiDir.String() - httpServer := http.Server{Addr: ":1618", Handler: e} + rawCertFilePath := osPkiDirStr + "/os.crt" + certFilePath, err = valueObject.NewUnixFilePath(rawCertFilePath) + if err != nil { + return certFilePath, keyFilePath, errors.New("InvalidCertFilePath") + } - webServerSetup(persistentDbSvc, transientDbSvc) + rawKeyFilePath := osPkiDirStr + "/os.key" + keyFilePath, err = valueObject.NewUnixFilePath(rawKeyFilePath) + if err != nil { + return certFilePath, keyFilePath, errors.New("InvalidKeyFilePath") + } - pkiDir := "/infinite/pki" - certFile := pkiDir + "/os.crt" - keyFile := pkiDir + "/os.key" - if !infraHelper.FileExists(certFile) { - err := infraHelper.MakeDir(pkiDir) + if !infraHelper.FileExists(certFilePath.String()) { + err := infraHelper.MakeDir(osPkiDirStr) if err != nil { - slog.Error("MakePkiDirFailed", slog.Any("error", err)) - os.Exit(1) + return certFilePath, keyFilePath, errors.New("CreatePkiDirFailed") } - aliases := []string{"localhost", "127.0.0.1"} - err = infraHelper.CreateSelfSignedSsl(pkiDir, "os", aliases) + err = infraHelper.CreateSelfSignedSsl(pkiDir, "os", []valueObject.Fqdn{}) if err != nil { - slog.Error("GenerateSelfSignedCertFailed", slog.Any("error", err)) - os.Exit(1) + return certFilePath, keyFilePath, errors.New("CreateSelfSignedSslFailed") } } - osBanner := `Infinite OS server started on [::]:1618! 🎉` + return certFilePath, keyFilePath, nil +} + +func initialBannerSetup( + transientDbSvc *internalDbInfra.TransientDatabaseService, +) { + osBanner := `Infinite OS server started on [::]:` + infraEnvs.InfiniteOsApiHttpPublicPort + `! 🎉` o11yQueryRepo := o11yInfra.NewO11yQueryRepo(transientDbSvc) - o11yOverview, err := o11yQueryRepo.ReadOverview() + o11yOverview, err := o11yQueryRepo.ReadOverview(false) if err == nil { devModeStr := "" if isDevMode, _ := voHelper.InterfaceToBool(os.Getenv("DEV_MODE")); isDevMode { @@ -69,7 +82,7 @@ func HttpServerInit( osBanner = ` INFINITE - ▄▄█▀▀██▄ ▄█▀▀▀█▄█ | 🔒 HTTPS server started on [::]:1618! ` + devModeStr + ` + ▄▄█▀▀██▄ ▄█▀▀▀█▄█ | 🔒 HTTPS server started on [::]:` + infraEnvs.InfiniteOsApiHttpPublicPort + `! ` + devModeStr + ` ▄██▀ ▀██▄██ ▀█ | ██▀ ▀█████▄ | 🏠 Primary Hostname: ` + o11yOverview.Hostname.String() + ` ██ ██ ▀█████▄ | ⏰ Uptime: ` + o11yOverview.UptimeRelative.String() + ` @@ -79,10 +92,35 @@ func HttpServerInit( } fmt.Println(osBanner) +} - err = httpServer.ListenAndServeTLS(certFile, keyFile) +func HttpServerInit( + persistentDbSvc *internalDbInfra.PersistentDatabaseService, + transientDbSvc *internalDbInfra.TransientDatabaseService, + trailDbSvc *internalDbInfra.TrailDatabaseService, +) { + echoInstance := echo.New() + + api.ApiInit(echoInstance, persistentDbSvc, transientDbSvc, trailDbSvc) + ui.UiInit(echoInstance, persistentDbSvc, transientDbSvc, trailDbSvc) + + webServerSetup(persistentDbSvc, transientDbSvc) + + certFilePath, keyFilePath, err := initialSslSetup() + if err != nil { + slog.Error("InitialSslSetupError", slog.String("err", err.Error())) + os.Exit(1) + } + + initialBannerSetup(transientDbSvc) + + httpServer := http.Server{ + Addr: ":" + infraEnvs.InfiniteOsApiHttpPublicPort, + Handler: echoInstance, + } + err = httpServer.ListenAndServeTLS(certFilePath.String(), keyFilePath.String()) if err != http.ErrServerClosed { - slog.Error("HttpServerError", slog.Any("error", err)) + slog.Error("HttpServerError", slog.String("err", err.Error())) os.Exit(1) } } diff --git a/src/presentation/service/account.go b/src/presentation/service/account.go index 26927f482..3a7c79d4d 100644 --- a/src/presentation/service/account.go +++ b/src/presentation/service/account.go @@ -14,7 +14,7 @@ import ( ) var LocalOperatorAccountId, _ = valueObject.NewAccountId(0) -var LocalOperatorIpAddress = valueObject.NewLocalhostIpAddress() +var LocalOperatorIpAddress = valueObject.IpAddressSystem type AccountService struct { persistentDbSvc *internalDbInfra.PersistentDatabaseService @@ -144,6 +144,14 @@ func (service *AccountService) Create(input map[string]interface{}) ServiceOutpu return NewServiceOutput(UserError, err.Error()) } + isSuperAdmin := false + if input["isSuperAdmin"] != nil { + isSuperAdmin, err = voHelper.InterfaceToBool(input["isSuperAdmin"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + operatorAccountId := LocalOperatorAccountId if input["operatorAccountId"] != nil { operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) @@ -161,7 +169,7 @@ func (service *AccountService) Create(input map[string]interface{}) ServiceOutpu } createDto := dto.NewCreateAccount( - username, password, operatorAccountId, operatorIpAddress, + username, password, isSuperAdmin, operatorAccountId, operatorIpAddress, ) err = useCase.CreateAccount( @@ -192,7 +200,7 @@ func (service *AccountService) Update(input map[string]interface{}) ServiceOutpu } var passwordPtr *valueObject.Password - if input["password"] != nil { + if input["password"] != nil && input["password"] != "" { password, err := valueObject.NewPassword(input["password"]) if err != nil { return NewServiceOutput(UserError, err.Error()) @@ -200,6 +208,15 @@ func (service *AccountService) Update(input map[string]interface{}) ServiceOutpu passwordPtr = &password } + var isSuperAdminPtr *bool + if input["isSuperAdmin"] != nil { + isSuperAdmin, err := voHelper.InterfaceToBool(input["isSuperAdmin"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + isSuperAdminPtr = &isSuperAdmin + } + var shouldUpdateApiKeyPtr *bool if input["shouldUpdateApiKey"] != nil { shouldUpdateApiKey, err := voHelper.InterfaceToBool(input["shouldUpdateApiKey"]) @@ -226,8 +243,8 @@ func (service *AccountService) Update(input map[string]interface{}) ServiceOutpu } updateDto := dto.NewUpdateAccount( - accountId, passwordPtr, shouldUpdateApiKeyPtr, operatorAccountId, - operatorIpAddress, + accountId, passwordPtr, isSuperAdminPtr, shouldUpdateApiKeyPtr, + operatorAccountId, operatorIpAddress, ) if updateDto.ShouldUpdateApiKey != nil && *updateDto.ShouldUpdateApiKey { diff --git a/src/presentation/service/database.go b/src/presentation/service/database.go index 056ede85b..029bd5ec3 100644 --- a/src/presentation/service/database.go +++ b/src/presentation/service/database.go @@ -50,14 +50,46 @@ func (service *DatabaseService) Read(input map[string]interface{}) ServiceOutput return NewServiceOutput(InfraError, sharedHelper.ServiceUnavailableError) } + requestPagination, err := serviceHelper.PaginationParser( + input, useCase.DatabasesDefaultPagination, + ) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + var databaseNamePtr *valueObject.DatabaseName + if input["name"] != nil { + databaseName, err := valueObject.NewDatabaseName(input["name"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + databaseNamePtr = &databaseName + } + + var usernamePtr *valueObject.DatabaseUsername + if input["username"] != nil { + username, err := valueObject.NewDatabaseUsername(input["username"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + usernamePtr = &username + } + + requestDto := dto.ReadDatabasesRequest{ + Pagination: requestPagination, + DatabaseName: databaseNamePtr, + DatabaseType: &dbType, + Username: usernamePtr, + } + databaseQueryRepo := databaseInfra.NewDatabaseQueryRepo(dbType) - databasesList, err := useCase.ReadDatabases(databaseQueryRepo) + responseDto, err := useCase.ReadDatabases(databaseQueryRepo, requestDto) if err != nil { return NewServiceOutput(InfraError, err.Error()) } - return NewServiceOutput(Success, databasesList) + return NewServiceOutput(Success, responseDto) } func (service *DatabaseService) Create(input map[string]interface{}) ServiceOutput { @@ -209,14 +241,14 @@ func (service *DatabaseService) CreateUser( return NewServiceOutput(UserError, err.Error()) } - dbPrivileges := []valueObject.DatabasePrivilege{} + dbPrivileges := []valueObject.DatabasePrivilege{ + valueObject.DatabasePrivilege("ALL"), + } if input["privileges"] != nil { - for _, rawPrivilege := range input["privileges"].([]string) { - dbPrivilege, err := valueObject.NewDatabasePrivilege(rawPrivilege) - if err != nil { - return NewServiceOutput(UserError, err.Error()) - } - dbPrivileges = append(dbPrivileges, dbPrivilege) + var assertOk bool + dbPrivileges, assertOk = input["privileges"].([]valueObject.DatabasePrivilege) + if !assertOk { + return NewServiceOutput(UserError, "InvalidDatabasePrivileges") } } diff --git a/src/presentation/service/helper/paginationParser.go b/src/presentation/service/helper/paginationParser.go new file mode 100644 index 000000000..3990bf4f2 --- /dev/null +++ b/src/presentation/service/helper/paginationParser.go @@ -0,0 +1,58 @@ +package serviceHelper + +import ( + "errors" + + "github.com/goinfinite/os/src/domain/dto" + "github.com/goinfinite/os/src/domain/valueObject" + voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" +) + +func PaginationParser( + userInput map[string]interface{}, + defaultPagination dto.Pagination, +) (requestPagination dto.Pagination, err error) { + requestPagination = defaultPagination + + if userInput["pageNumber"] != nil { + pageNumber, err := voHelper.InterfaceToUint32(userInput["pageNumber"]) + if err != nil { + return requestPagination, errors.New("InvalidPageNumber") + } + requestPagination.PageNumber = pageNumber + } + + if userInput["itemsPerPage"] != nil { + itemsPerPage, err := voHelper.InterfaceToUint16(userInput["itemsPerPage"]) + if err != nil { + return requestPagination, errors.New("InvalidItemsPerPage") + } + requestPagination.ItemsPerPage = itemsPerPage + } + + if userInput["sortBy"] != nil { + sortBy, err := valueObject.NewPaginationSortBy(userInput["sortBy"]) + if err != nil { + return requestPagination, err + } + requestPagination.SortBy = &sortBy + } + + if userInput["sortDirection"] != nil { + sortDirection, err := valueObject.NewPaginationSortDirection(userInput["sortDirection"]) + if err != nil { + return requestPagination, err + } + requestPagination.SortDirection = &sortDirection + } + + if userInput["lastSeenId"] != nil { + lastSeenId, err := valueObject.NewPaginationLastSeenId(userInput["lastSeenId"]) + if err != nil { + return requestPagination, err + } + requestPagination.LastSeenId = &lastSeenId + } + + return requestPagination, nil +} diff --git a/src/presentation/service/helper/timeParamsParser.go b/src/presentation/service/helper/timeParamsParser.go new file mode 100644 index 000000000..0549ce226 --- /dev/null +++ b/src/presentation/service/helper/timeParamsParser.go @@ -0,0 +1,31 @@ +package serviceHelper + +import ( + "log/slog" + + "github.com/goinfinite/os/src/domain/valueObject" +) + +func TimeParamsParser( + timeParamNames []string, + userInput map[string]interface{}, +) map[string]*valueObject.UnixTime { + timeParamPtrs := map[string]*valueObject.UnixTime{} + + for _, timeParamName := range timeParamNames { + if userInput[timeParamName] == nil { + continue + } + + timeParam, err := valueObject.NewUnixTime(userInput[timeParamName]) + if err != nil { + slog.Debug("InvalidTimeParam", slog.String("timeParamName", timeParamName)) + timeParamPtrs[timeParamName] = nil + continue + } + + timeParamPtrs[timeParamName] = &timeParam + } + + return timeParamPtrs +} diff --git a/src/presentation/service/marketplace.go b/src/presentation/service/marketplace.go index be52c1b2d..00053da79 100644 --- a/src/presentation/service/marketplace.go +++ b/src/presentation/service/marketplace.go @@ -5,7 +5,6 @@ import ( "strconv" "strings" - "github.com/alessio/shellescape" "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/useCase" "github.com/goinfinite/os/src/domain/valueObject" @@ -16,6 +15,7 @@ import ( internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" marketplaceInfra "github.com/goinfinite/os/src/infra/marketplace" scheduledTaskInfra "github.com/goinfinite/os/src/infra/scheduledTask" + servicesInfra "github.com/goinfinite/os/src/infra/services" vhostInfra "github.com/goinfinite/os/src/infra/vhost" serviceHelper "github.com/goinfinite/os/src/presentation/service/helper" ) @@ -144,7 +144,7 @@ func (service *MarketplaceService) InstallCatalogItem( input map[string]interface{}, shouldSchedule bool, ) ServiceOutput { - hostname, err := infraHelper.GetPrimaryVirtualHost() + hostname, err := infraHelper.ReadPrimaryVirtualHostHostname() if err != nil { return NewServiceOutput(InfraError, err.Error()) } @@ -211,7 +211,7 @@ func (service *MarketplaceService) InstallCatalogItem( } for _, dataField := range dataFields { - escapedField := shellescape.Quote(dataField.String()) + escapedField := infraHelper.ShellEscape{}.Quote(dataField.String()) installParams = append(installParams, "--data-fields", escapedField) } @@ -222,10 +222,10 @@ func (service *MarketplaceService) InstallCatalogItem( taskCmd, _ := valueObject.NewUnixCommand(cliCmd) taskTag, _ := valueObject.NewScheduledTaskTag("marketplace") taskTags := []valueObject.ScheduledTaskTag{taskTag} - timeoutSeconds := uint16(600) + timeoutSecs := uint16(1800) scheduledTaskCreateDto := dto.NewCreateScheduledTask( - taskName, taskCmd, taskTags, &timeoutSeconds, nil, + taskName, taskCmd, taskTags, &timeoutSecs, nil, ) err = useCase.CreateScheduledTask(scheduledTaskCmdRepo, scheduledTaskCreateDto) @@ -252,17 +252,16 @@ func (service *MarketplaceService) InstallCatalogItem( } } - dto := dto.NewInstallMarketplaceCatalogItem( + installDto := dto.NewInstallMarketplaceCatalogItem( hostname, idPtr, slugPtr, urlPathPtr, dataFields, operatorAccountId, operatorIpAddress, ) vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(service.persistentDbSvc) - vhostCmdRepo := vhostInfra.NewVirtualHostCmdRepo(service.persistentDbSvc) err = useCase.InstallMarketplaceCatalogItem( - service.marketplaceQueryRepo, service.marketplaceCmdRepo, vhostQueryRepo, - vhostCmdRepo, service.activityRecordCmdRepo, dto, + vhostQueryRepo, service.marketplaceQueryRepo, service.marketplaceCmdRepo, + service.activityRecordCmdRepo, installDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) @@ -452,8 +451,14 @@ func (service *MarketplaceService) DeleteInstalledItem( installedId, shouldUninstallServices, operatorAccountId, operatorIpAddress, ) + mappingQueryRepo := vhostInfra.NewMappingQueryRepo(service.persistentDbSvc) + mappingCmdRepo := vhostInfra.NewMappingCmdRepo(service.persistentDbSvc) + servicesQueryRepo := servicesInfra.NewServicesQueryRepo(service.persistentDbSvc) + servicesCmdRepo := servicesInfra.NewServicesCmdRepo(service.persistentDbSvc) + err = useCase.DeleteMarketplaceInstalledItem( service.marketplaceQueryRepo, service.marketplaceCmdRepo, + mappingQueryRepo, mappingCmdRepo, servicesQueryRepo, servicesCmdRepo, service.activityRecordCmdRepo, deleteMarketplaceInstalledItem, ) if err != nil { diff --git a/src/presentation/service/o11y.go b/src/presentation/service/o11y.go index 34545df56..2bd94d829 100644 --- a/src/presentation/service/o11y.go +++ b/src/presentation/service/o11y.go @@ -21,7 +21,7 @@ func NewO11yService( func (service *O11yService) ReadOverview() ServiceOutput { o11yQueryRepo := o11yInfra.NewO11yQueryRepo(service.transientDbSvc) - o11yOverview, err := useCase.ReadO11yOverview(o11yQueryRepo) + o11yOverview, err := useCase.ReadO11yOverview(o11yQueryRepo, true) if err != nil { return NewServiceOutput(InfraError, err.Error()) } diff --git a/src/presentation/service/services.go b/src/presentation/service/services.go index 7875f95f3..9b1ad9fef 100644 --- a/src/presentation/service/services.go +++ b/src/presentation/service/services.go @@ -6,18 +6,17 @@ import ( "strconv" "strings" - "github.com/alessio/shellescape" "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/useCase" "github.com/goinfinite/os/src/domain/valueObject" voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" activityRecordInfra "github.com/goinfinite/os/src/infra/activityRecord" infraEnvs "github.com/goinfinite/os/src/infra/envs" + infraHelper "github.com/goinfinite/os/src/infra/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" scheduledTaskInfra "github.com/goinfinite/os/src/infra/scheduledTask" servicesInfra "github.com/goinfinite/os/src/infra/services" vhostInfra "github.com/goinfinite/os/src/infra/vhost" - mappingInfra "github.com/goinfinite/os/src/infra/vhost/mapping" serviceHelper "github.com/goinfinite/os/src/presentation/service/helper" ) @@ -25,8 +24,8 @@ type ServicesService struct { persistentDbService *internalDbInfra.PersistentDatabaseService servicesQueryRepo *servicesInfra.ServicesQueryRepo servicesCmdRepo *servicesInfra.ServicesCmdRepo - mappingQueryRepo *mappingInfra.MappingQueryRepo - mappingCmdRepo *mappingInfra.MappingCmdRepo + mappingQueryRepo *vhostInfra.MappingQueryRepo + mappingCmdRepo *vhostInfra.MappingCmdRepo activityRecordCmdRepo *activityRecordInfra.ActivityRecordCmdRepo } @@ -38,8 +37,8 @@ func NewServicesService( persistentDbService: persistentDbService, servicesQueryRepo: servicesInfra.NewServicesQueryRepo(persistentDbService), servicesCmdRepo: servicesInfra.NewServicesCmdRepo(persistentDbService), - mappingQueryRepo: mappingInfra.NewMappingQueryRepo(persistentDbService), - mappingCmdRepo: mappingInfra.NewMappingCmdRepo(persistentDbService), + mappingQueryRepo: vhostInfra.NewMappingQueryRepo(persistentDbService), + mappingCmdRepo: vhostInfra.NewMappingCmdRepo(persistentDbService), activityRecordCmdRepo: activityRecordInfra.NewActivityRecordCmdRepo(trailDbSvc), } } @@ -65,6 +64,15 @@ func (service *ServicesService) ReadInstalledItems( naturePtr = &nature } + var statusPtr *valueObject.ServiceStatus + if input["status"] != nil { + status, err := valueObject.NewServiceStatus(input["status"]) + if err != nil { + return NewServiceOutput(UserError, err) + } + statusPtr = &status + } + var typePtr *valueObject.ServiceType if input["type"] != nil { itemType, err := valueObject.NewServiceType(input["type"]) @@ -131,6 +139,7 @@ func (service *ServicesService) ReadInstalledItems( ServiceName: namePtr, ServiceNature: naturePtr, ServiceType: typePtr, + ServiceStatus: statusPtr, ShouldIncludeMetrics: &shouldIncludeMetrics, } @@ -267,37 +276,30 @@ func (service *ServicesService) CreateInstallable( startupFilePtr = &startupFile } + var workingDirPtr *valueObject.UnixFilePath + if input["workingDir"] != nil { + workingDir, err := valueObject.NewUnixFilePath(input["workingDir"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + workingDirPtr = &workingDir + } + envs := []valueObject.ServiceEnv{} if input["envs"] != nil { - rawEnvs, assertOk := input["envs"].([]string) + var assertOk bool + envs, assertOk = input["envs"].([]valueObject.ServiceEnv) if !assertOk { - return NewServiceOutput(UserError, "EnvsMustBeStringArray") - } - - for _, rawEnv := range rawEnvs { - env, err := valueObject.NewServiceEnv(rawEnv) - if err != nil { - slog.Debug(err.Error(), slog.String("env", rawEnv)) - continue - } - envs = append(envs, env) + return NewServiceOutput(UserError, "InvalidServiceEnvs") } } portBindings := []valueObject.PortBinding{} if input["portBindings"] != nil { - rawPortBindings, assertOk := input["portBindings"].([]string) + var assertOk bool + portBindings, assertOk = input["portBindings"].([]valueObject.PortBinding) if !assertOk { - return NewServiceOutput(UserError, "PortBindingsMustBeStringArray") - } - - for _, rawPortBinding := range rawPortBindings { - portBinding, err := valueObject.NewPortBinding(rawPortBinding) - if err != nil { - slog.Debug(err.Error(), slog.String("portBinding", rawPortBinding)) - continue - } - portBindings = append(portBindings, portBinding) + return NewServiceOutput(UserError, "InvalidPortBindings") } } @@ -347,6 +349,35 @@ func (service *ServicesService) CreateInstallable( } } + var mappingHostnamePtr *valueObject.Fqdn + if input["mappingHostname"] != nil { + mappingHostname, err := valueObject.NewFqdn(input["mappingHostname"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + mappingHostnamePtr = &mappingHostname + } + + var mappingPathPtr *valueObject.MappingPath + if input["mappingPath"] != nil { + mappingPath, err := valueObject.NewMappingPath(input["mappingPath"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + mappingPathPtr = &mappingPath + } + + var mappingUpgradeInsecureRequestsPtr *bool + if input["mappingUpgradeInsecureRequests"] != nil { + mappingUpgradeInsecureRequests, err := voHelper.InterfaceToBool( + input["mappingUpgradeInsecureRequests"], + ) + if err != nil { + return NewServiceOutput(UserError, "InvalidMappingUpgradeInsecureRequests") + } + mappingUpgradeInsecureRequestsPtr = &mappingUpgradeInsecureRequests + } + operatorAccountId := LocalOperatorAccountId if input["operatorAccountId"] != nil { operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) @@ -372,14 +403,14 @@ func (service *ServicesService) CreateInstallable( if len(envs) > 0 { for _, env := range envs { - escapedField := shellescape.Quote(env.String()) + escapedField := infraHelper.ShellEscape{}.Quote(env.String()) installParams = append(installParams, "--envs", escapedField) } } if len(portBindings) > 0 { for _, portBinding := range portBindings { - escapedField := shellescape.Quote(portBinding.String()) + escapedField := infraHelper.ShellEscape{}.Quote(portBinding.String()) installParams = append(installParams, "--port-bindings", escapedField) } } @@ -392,6 +423,10 @@ func (service *ServicesService) CreateInstallable( installParams = append(installParams, "--startup-file", startupFilePtr.String()) } + if workingDirPtr != nil { + installParams = append(installParams, "--working-dir", workingDirPtr.String()) + } + if autoStartPtr != nil { autoStartStr := strconv.FormatBool(*autoStartPtr) installParams = append(installParams, "--auto-start", autoStartStr) @@ -412,6 +447,22 @@ func (service *ServicesService) CreateInstallable( installParams = append(installParams, "--max-start-retries", maxStartRetriesStr) } + if mappingHostnamePtr != nil { + installParams = append(installParams, "--mapping-hostname", mappingHostnamePtr.String()) + } + + if mappingPathPtr != nil { + installParams = append(installParams, "--mapping-path", mappingPathPtr.String()) + } + + if mappingUpgradeInsecureRequestsPtr != nil { + installParams = append( + installParams, + "--mapping-upgrade-insecure-requests", + strconv.FormatBool(*mappingUpgradeInsecureRequestsPtr), + ) + } + cliCmd += " " + strings.Join(installParams, " ") scheduledTaskCmdRepo := scheduledTaskInfra.NewScheduledTaskCmdRepo(service.persistentDbService) @@ -419,10 +470,10 @@ func (service *ServicesService) CreateInstallable( taskCmd, _ := valueObject.NewUnixCommand(cliCmd) taskTag, _ := valueObject.NewScheduledTaskTag("services") taskTags := []valueObject.ScheduledTaskTag{taskTag} - timeoutSeconds := uint16(600) + timeoutSecs := uint16(1800) scheduledTaskCreateDto := dto.NewCreateScheduledTask( - taskName, taskCmd, taskTags, &timeoutSeconds, nil, + taskName, taskCmd, taskTags, &timeoutSecs, nil, ) err = useCase.CreateScheduledTask(scheduledTaskCmdRepo, scheduledTaskCreateDto) @@ -434,17 +485,17 @@ func (service *ServicesService) CreateInstallable( } createDto := dto.NewCreateInstallableService( - name, envs, portBindings, versionPtr, startupFilePtr, autoStartPtr, - timeoutStartSecsPtr, autoRestartPtr, maxStartRetriesPtr, &autoCreateMapping, - operatorAccountId, operatorIpAddress, + name, envs, portBindings, versionPtr, startupFilePtr, workingDirPtr, + autoStartPtr, timeoutStartSecsPtr, autoRestartPtr, maxStartRetriesPtr, + &autoCreateMapping, mappingHostnamePtr, mappingPathPtr, + mappingUpgradeInsecureRequestsPtr, operatorAccountId, operatorIpAddress, ) vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(service.persistentDbService) err = useCase.CreateInstallableService( - service.servicesQueryRepo, service.servicesCmdRepo, service.mappingQueryRepo, - service.mappingCmdRepo, vhostQueryRepo, service.activityRecordCmdRepo, - createDto, + service.servicesQueryRepo, service.servicesCmdRepo, vhostQueryRepo, + service.mappingCmdRepo, service.activityRecordCmdRepo, createDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) @@ -486,21 +537,96 @@ func (service *ServicesService) CreateCustom( versionPtr = &version } + var execUserPtr *valueObject.UnixUsername + if input["execUser"] != nil { + execUser, err := valueObject.NewUnixUsername(input["execUser"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + execUserPtr = &execUser + } + + envs := []valueObject.ServiceEnv{} + if input["envs"] != nil { + var assertOk bool + envs, assertOk = input["envs"].([]valueObject.ServiceEnv) + if !assertOk { + return NewServiceOutput(UserError, "InvalidServiceEnvs") + } + } + portBindings := []valueObject.PortBinding{} - if _, exists := input["portBindings"]; exists { - rawPortBindings, assertOk := input["portBindings"].([]string) + if input["portBindings"] != nil { + var assertOk bool + portBindings, assertOk = input["portBindings"].([]valueObject.PortBinding) if !assertOk { - return NewServiceOutput(UserError, "PortBindingsMustBeStringArray") + return NewServiceOutput(UserError, "InvalidPortBindings") } + } - for _, rawPortBinding := range rawPortBindings { - portBinding, err := valueObject.NewPortBinding(rawPortBinding) - if err != nil { - slog.Debug(err.Error(), slog.String("portBinding", rawPortBinding)) - continue - } - portBindings = append(portBindings, portBinding) + var autoStartPtr *bool + if input["autoStart"] != nil { + autoStart, err := voHelper.InterfaceToBool(input["autoStart"]) + if err != nil { + return NewServiceOutput(UserError, "AutoStartMustBeBool") + } + autoStartPtr = &autoStart + } + + var timeoutStartSecsPtr *uint + if input["timeoutStartSecs"] != nil { + timeoutStartSecs, err := voHelper.InterfaceToUint(input["timeoutStartSecs"]) + if err != nil { + return NewServiceOutput(UserError, "TimeoutStartSecsMustBeUint") + } + timeoutStartSecsPtr = &timeoutStartSecs + } + + var autoRestartPtr *bool + if input["autoRestart"] != nil { + autoRestart, err := voHelper.InterfaceToBool( + input["autoRestart"], + ) + if err != nil { + return NewServiceOutput(UserError, "AutoRestartMustBeBool") + } + autoRestartPtr = &autoRestart + } + + var maxStartRetriesPtr *uint + if input["maxStartRetries"] != nil { + maxStartRetries, err := voHelper.InterfaceToUint(input["maxStartRetries"]) + if err != nil { + return NewServiceOutput(UserError, "MaxStartRetriesMustBeUint") + } + maxStartRetriesPtr = &maxStartRetries + } + + var logOutputPathPtr *valueObject.UnixFilePath + if input["logOutputPath"] != nil { + logOutputPath, err := valueObject.NewUnixFilePath(input["logOutputPath"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + logOutputPathPtr = &logOutputPath + } + + var logErrorPathPtr *valueObject.UnixFilePath + if input["logErrorPath"] != nil { + logErrorPath, err := valueObject.NewUnixFilePath(input["logErrorPath"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + logErrorPathPtr = &logErrorPath + } + + var avatarUrlPtr *valueObject.Url + if input["avatarUrl"] != nil { + avatarUrl, err := valueObject.NewUrl(input["avatarUrl"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) } + avatarUrlPtr = &avatarUrl } autoCreateMapping := true @@ -511,6 +637,35 @@ func (service *ServicesService) CreateCustom( } } + var mappingHostnamePtr *valueObject.Fqdn + if input["mappingHostname"] != nil { + mappingHostname, err := valueObject.NewFqdn(input["mappingHostname"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + mappingHostnamePtr = &mappingHostname + } + + var mappingPathPtr *valueObject.MappingPath + if input["mappingPath"] != nil { + mappingPath, err := valueObject.NewMappingPath(input["mappingPath"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + mappingPathPtr = &mappingPath + } + + var mappingUpgradeInsecureRequestsPtr *bool + if input["mappingUpgradeInsecureRequests"] != nil { + mappingUpgradeInsecureRequests, err := voHelper.InterfaceToBool( + input["mappingUpgradeInsecureRequests"], + ) + if err != nil { + return NewServiceOutput(UserError, "InvalidMappingUpgradeInsecureRequests") + } + mappingUpgradeInsecureRequestsPtr = &mappingUpgradeInsecureRequests + } + operatorAccountId := LocalOperatorAccountId if input["operatorAccountId"] != nil { operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) @@ -528,17 +683,18 @@ func (service *ServicesService) CreateCustom( } createCustomDto := dto.NewCreateCustomService( - name, svcType, startCmd, []valueObject.ServiceEnv{}, portBindings, - nil, nil, nil, nil, nil, versionPtr, nil, nil, nil, nil, nil, nil, nil, nil, - &autoCreateMapping, operatorAccountId, operatorIpAddress, + name, svcType, startCmd, envs, portBindings, nil, nil, nil, nil, nil, + versionPtr, execUserPtr, nil, autoStartPtr, autoRestartPtr, + timeoutStartSecsPtr, maxStartRetriesPtr, logOutputPathPtr, logErrorPathPtr, + avatarUrlPtr, &autoCreateMapping, mappingHostnamePtr, mappingPathPtr, + mappingUpgradeInsecureRequestsPtr, operatorAccountId, operatorIpAddress, ) vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(service.persistentDbService) err = useCase.CreateCustomService( - service.servicesQueryRepo, service.servicesCmdRepo, service.mappingQueryRepo, - service.mappingCmdRepo, vhostQueryRepo, service.activityRecordCmdRepo, - createCustomDto, + service.servicesQueryRepo, service.servicesCmdRepo, vhostQueryRepo, + service.mappingCmdRepo, service.activityRecordCmdRepo, createCustomDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) @@ -595,6 +751,23 @@ func (service *ServicesService) Update(input map[string]interface{}) ServiceOutp versionPtr = &version } + envs := []valueObject.ServiceEnv{} + if input["envs"] != nil { + rawEnvs, assertOk := input["envs"].([]string) + if !assertOk { + return NewServiceOutput(UserError, "EnvsMustBeStringArray") + } + + for _, rawEnv := range rawEnvs { + env, err := valueObject.NewServiceEnv(rawEnv) + if err != nil { + slog.Debug(err.Error(), slog.String("env", rawEnv)) + continue + } + envs = append(envs, env) + } + } + portBindings := []valueObject.PortBinding{} if _, exists := input["portBindings"]; exists { rawPortBindings, assertOk := input["portBindings"].([]string) @@ -603,6 +776,10 @@ func (service *ServicesService) Update(input map[string]interface{}) ServiceOutp } for _, rawPortBinding := range rawPortBindings { + if len(rawPortBinding) == 0 { + continue + } + portBinding, err := valueObject.NewPortBinding(rawPortBinding) if err != nil { slog.Debug(err.Error(), slog.String("portBinding", rawPortBinding)) @@ -621,6 +798,69 @@ func (service *ServicesService) Update(input map[string]interface{}) ServiceOutp startupFilePtr = &startupFile } + var autoStartPtr *bool + if input["autoStart"] != nil { + autoStart, err := voHelper.InterfaceToBool(input["autoStart"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + autoStartPtr = &autoStart + } + + var autoRestartPtr *bool + if input["autoRestart"] != nil { + autoRestart, err := voHelper.InterfaceToBool(input["autoRestart"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + autoRestartPtr = &autoRestart + } + + var timeoutStartSecsPtr *uint + if input["timeoutStartSecs"] != nil { + timeoutStartSecs, err := voHelper.InterfaceToUint(input["timeoutStartSecs"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + timeoutStartSecsPtr = &timeoutStartSecs + } + + var maxStartRetriesPtr *uint + if input["maxStartRetries"] != nil { + maxStartRetries, err := voHelper.InterfaceToUint(input["maxStartRetries"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + maxStartRetriesPtr = &maxStartRetries + } + + var logOutputPathPtr *valueObject.UnixFilePath + if input["logOutputPath"] != nil { + logOutputPath, err := valueObject.NewUnixFilePath(input["logOutputPath"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + logOutputPathPtr = &logOutputPath + } + + var logErrorPathPtr *valueObject.UnixFilePath + if input["logErrorPath"] != nil { + logErrorPath, err := valueObject.NewUnixFilePath(input["logErrorPath"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + logErrorPathPtr = &logErrorPath + } + + var avatarUrlPtr *valueObject.Url + if input["avatarUrl"] != nil { + avatarUrl, err := valueObject.NewUrl(input["avatarUrl"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + avatarUrlPtr = &avatarUrl + } + operatorAccountId := LocalOperatorAccountId if input["operatorAccountId"] != nil { operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) @@ -638,9 +878,10 @@ func (service *ServicesService) Update(input map[string]interface{}) ServiceOutp } updateDto := dto.NewUpdateService( - name, typePtr, versionPtr, statusPtr, startCmdPtr, nil, portBindings, nil, - nil, nil, nil, nil, nil, nil, startupFilePtr, nil, nil, nil, nil, nil, nil, - operatorAccountId, operatorIpAddress, + name, typePtr, versionPtr, statusPtr, startCmdPtr, envs, portBindings, nil, + nil, nil, nil, nil, nil, nil, startupFilePtr, autoStartPtr, autoRestartPtr, + timeoutStartSecsPtr, maxStartRetriesPtr, logOutputPathPtr, logErrorPathPtr, + avatarUrlPtr, operatorAccountId, operatorIpAddress, ) err = useCase.UpdateService( @@ -685,8 +926,8 @@ func (service *ServicesService) Delete(input map[string]interface{}) ServiceOutp deleteDto := dto.NewDeleteService(name, operatorAccountId, operatorIpAddress) err = useCase.DeleteService( - service.servicesQueryRepo, service.servicesCmdRepo, service.mappingCmdRepo, - service.activityRecordCmdRepo, deleteDto, + service.servicesQueryRepo, service.servicesCmdRepo, service.mappingQueryRepo, + service.mappingCmdRepo, service.activityRecordCmdRepo, deleteDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) diff --git a/src/presentation/service/ssl.go b/src/presentation/service/ssl.go index 6de59ea4b..068b161c5 100644 --- a/src/presentation/service/ssl.go +++ b/src/presentation/service/ssl.go @@ -1,12 +1,17 @@ package service import ( + "errors" + "strings" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/useCase" "github.com/goinfinite/os/src/domain/valueObject" activityRecordInfra "github.com/goinfinite/os/src/infra/activityRecord" + infraEnvs "github.com/goinfinite/os/src/infra/envs" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" + scheduledTaskInfra "github.com/goinfinite/os/src/infra/scheduledTask" sslInfra "github.com/goinfinite/os/src/infra/ssl" vhostInfra "github.com/goinfinite/os/src/infra/vhost" serviceHelper "github.com/goinfinite/os/src/presentation/service/helper" @@ -14,7 +19,7 @@ import ( type SslService struct { persistentDbSvc *internalDbInfra.PersistentDatabaseService - sslQueryRepo sslInfra.SslQueryRepo + sslQueryRepo *sslInfra.SslQueryRepo sslCmdRepo *sslInfra.SslCmdRepo activityRecordCmdRepo *activityRecordInfra.ActivityRecordCmdRepo } @@ -26,46 +31,125 @@ func NewSslService( ) *SslService { return &SslService{ persistentDbSvc: persistentDbSvc, - sslQueryRepo: sslInfra.SslQueryRepo{}, + sslQueryRepo: sslInfra.NewSslQueryRepo(), sslCmdRepo: sslInfra.NewSslCmdRepo(persistentDbSvc, transientDbSvc), activityRecordCmdRepo: activityRecordInfra.NewActivityRecordCmdRepo(trailDbSvc), } } -func (service *SslService) Read() ServiceOutput { - pairsList, err := useCase.ReadSslPairs(service.sslQueryRepo) +func (service *SslService) SslPairReadRequestFactory( + serviceInput map[string]interface{}, + withMappings bool, +) (readRequestDto dto.ReadSslPairsRequest, err error) { + if serviceInput["sslPairId"] == nil && serviceInput["id"] != nil { + serviceInput["sslPairId"] = serviceInput["id"] + } + + var sslPairIdPtr *valueObject.SslPairId + if serviceInput["sslPairId"] != nil { + sslPairId, err := valueObject.NewSslPairId(serviceInput["sslPairId"]) + if err != nil { + return readRequestDto, err + } + sslPairIdPtr = &sslPairId + } + + if serviceInput["virtualHostHostname"] == nil && serviceInput["hostname"] != nil { + serviceInput["virtualHostHostname"] = serviceInput["hostname"] + } + + var vhostHostnamePtr *valueObject.Fqdn + if serviceInput["virtualHostHostname"] != nil { + vhostHostname, err := valueObject.NewFqdn(serviceInput["virtualHostHostname"]) + if err != nil { + return readRequestDto, err + } + vhostHostnamePtr = &vhostHostname + } + + altNames := []valueObject.SslHostname{} + if serviceInput["altNames"] != nil { + var assertOk bool + altNames, assertOk = serviceInput["altNames"].([]valueObject.SslHostname) + if !assertOk { + return readRequestDto, errors.New("InvalidAltNamesStructure") + } + } + + timeParamNames := []string{ + "issuedBeforeAt", "issuedAfterAt", "expiresBeforeAt", "expiresAfterAt", + } + timeParamPtrs := serviceHelper.TimeParamsParser(timeParamNames, serviceInput) + + requestPagination, err := serviceHelper.PaginationParser( + serviceInput, useCase.SslPairsDefaultPagination, + ) + if err != nil { + return readRequestDto, err + } + + return dto.ReadSslPairsRequest{ + Pagination: requestPagination, + SslPairId: sslPairIdPtr, + VirtualHostHostname: vhostHostnamePtr, + AltNames: altNames, + IssuedBeforeAt: timeParamPtrs["issuedBeforeAt"], + IssuedAfterAt: timeParamPtrs["issuedAfterAt"], + ExpiresBeforeAt: timeParamPtrs["expiresBeforeAt"], + ExpiresAfterAt: timeParamPtrs["expiresAfterAt"], + }, nil +} + +func (service *SslService) Read( + serviceInput map[string]interface{}, +) ServiceOutput { + readRequestDto, err := service.SslPairReadRequestFactory(serviceInput, false) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + readResponseDto, err := useCase.ReadSslPairs(service.sslQueryRepo, readRequestDto) if err != nil { return NewServiceOutput(InfraError, err.Error()) } - return NewServiceOutput(Success, pairsList) + return NewServiceOutput(Success, readResponseDto) } func (service *SslService) Create(input map[string]interface{}) ServiceOutput { - requiredParams := []string{"virtualHosts", "certificate", "key"} + requiredParams := []string{"virtualHostsHostnames", "certificate", "key"} err := serviceHelper.RequiredParamsInspector(input, requiredParams) if err != nil { return NewServiceOutput(UserError, err.Error()) } - vhosts := []valueObject.Fqdn{} - for _, rawVhost := range input["virtualHosts"].([]string) { - vhost, err := valueObject.NewFqdn(rawVhost) - if err != nil { - return NewServiceOutput(UserError, err.Error()) - } - vhosts = append(vhosts, vhost) + vhostHostnames, assertOk := input["virtualHostsHostnames"].([]valueObject.Fqdn) + if !assertOk { + return NewServiceOutput(UserError, errors.New("InvalidVirtualHostsStructure")) } certContent, err := valueObject.NewSslCertificateContent(input["certificate"]) if err != nil { return NewServiceOutput(UserError, err.Error()) } - cert, err := entity.NewSslCertificate(certContent) + certEntity, err := entity.NewSslCertificate(certContent) if err != nil { return NewServiceOutput(UserError, err.Error()) } + var chainCertsPtr *entity.SslCertificate + if input["chainCertificates"] != nil { + chainCertContent, err := valueObject.NewSslCertificateContent(input["chainCertificates"]) + if err != nil { + return NewServiceOutput(UserError, errors.New("SslCertificateChainContentError")) + } + chainCertEntity, err := entity.NewSslCertificate(chainCertContent) + if err != nil { + return NewServiceOutput(UserError, errors.New("SslCertificateChainParseError")) + } + chainCertsPtr = &chainCertEntity + } + privateKeyContent, err := valueObject.NewSslPrivateKey(input["key"]) if err != nil { return NewServiceOutput(UserError, err.Error()) @@ -88,13 +172,14 @@ func (service *SslService) Create(input map[string]interface{}) ServiceOutput { } createDto := dto.NewCreateSslPair( - vhosts, cert, privateKeyContent, operatorAccountId, operatorIpAddress, + vhostHostnames, certEntity, chainCertsPtr, privateKeyContent, + operatorAccountId, operatorIpAddress, ) vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(service.persistentDbSvc) err = useCase.CreateSslPair( - service.sslCmdRepo, vhostQueryRepo, service.activityRecordCmdRepo, createDto, + vhostQueryRepo, service.sslCmdRepo, service.activityRecordCmdRepo, createDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) @@ -103,14 +188,25 @@ func (service *SslService) Create(input map[string]interface{}) ServiceOutput { return NewServiceOutput(Created, "SslPairCreated") } -func (service *SslService) Delete(input map[string]interface{}) ServiceOutput { - requiredParams := []string{"id"} +func (service *SslService) CreatePubliclyTrusted( + input map[string]interface{}, + shouldSchedule bool, +) ServiceOutput { + if input["hostname"] != nil && input["virtualHostHostname"] == nil { + input["virtualHostHostname"] = input["hostname"] + } + + if input["vhostHostname"] != nil && input["virtualHostHostname"] == nil { + input["virtualHostHostname"] = input["vhostHostname"] + } + + requiredParams := []string{"virtualHostHostname"} err := serviceHelper.RequiredParamsInspector(input, requiredParams) if err != nil { return NewServiceOutput(UserError, err.Error()) } - pairId, err := valueObject.NewSslPairId(input["id"]) + vhostHostname, err := valueObject.NewFqdn(input["virtualHostHostname"]) if err != nil { return NewServiceOutput(UserError, err.Error()) } @@ -131,21 +227,54 @@ func (service *SslService) Delete(input map[string]interface{}) ServiceOutput { } } - deleteDto := dto.NewDeleteSslPair(pairId, operatorAccountId, operatorIpAddress) + if shouldSchedule { + cliCmd := infraEnvs.InfiniteOsBinary + " ssl create-trusted" + installParams := []string{ + "--hostname", vhostHostname.String(), + } + cliCmd += " " + strings.Join(installParams, " ") + + scheduledTaskCmdRepo := scheduledTaskInfra.NewScheduledTaskCmdRepo(service.persistentDbSvc) + taskName, _ := valueObject.NewScheduledTaskName("CreatePubliclyTrustedSslPair") + taskCmd, _ := valueObject.NewUnixCommand(cliCmd) + taskTag, _ := valueObject.NewScheduledTaskTag("ssl") + taskTags := []valueObject.ScheduledTaskTag{taskTag} + timeoutSecs := uint16(1800) - err = useCase.DeleteSslPair( - service.sslQueryRepo, service.sslCmdRepo, service.activityRecordCmdRepo, - deleteDto, + scheduledTaskCreateDto := dto.NewCreateScheduledTask( + taskName, taskCmd, taskTags, &timeoutSecs, nil, + ) + + err = useCase.CreateScheduledTask(scheduledTaskCmdRepo, scheduledTaskCreateDto) + if err != nil { + return NewServiceOutput(InfraError, err.Error()) + } + + return NewServiceOutput(Created, "PubliclyTrustedSslPairCreationScheduled") + } + + createDto := dto.NewCreatePubliclyTrustedSslPair( + vhostHostname, operatorAccountId, operatorIpAddress, + ) + + vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(service.persistentDbSvc) + + _, err = useCase.CreatePubliclyTrustedSslPair( + vhostQueryRepo, service.sslCmdRepo, service.activityRecordCmdRepo, createDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) } - return NewServiceOutput(Success, "SslPairDeleted") + return NewServiceOutput(Created, "PubliclyTrustedSslPairCreated") } -func (service *SslService) DeleteVhosts(input map[string]interface{}) ServiceOutput { - requiredParams := []string{"id", "virtualHosts"} +func (service *SslService) Delete(input map[string]interface{}) ServiceOutput { + if input["id"] == nil && input["sslPairId"] != nil { + input["id"] = input["sslPairId"] + } + + requiredParams := []string{"id"} err := serviceHelper.RequiredParamsInspector(input, requiredParams) if err != nil { return NewServiceOutput(UserError, err.Error()) @@ -156,15 +285,6 @@ func (service *SslService) DeleteVhosts(input map[string]interface{}) ServiceOut return NewServiceOutput(UserError, err.Error()) } - vhosts := []valueObject.Fqdn{} - for _, rawVhost := range input["virtualHosts"].([]string) { - vhost, err := valueObject.NewFqdn(rawVhost) - if err != nil { - return NewServiceOutput(UserError, err.Error()) - } - vhosts = append(vhosts, vhost) - } - operatorAccountId := LocalOperatorAccountId if input["operatorAccountId"] != nil { operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) @@ -181,17 +301,13 @@ func (service *SslService) DeleteVhosts(input map[string]interface{}) ServiceOut } } - deleteDto := dto.NewDeleteSslPairVhosts( - pairId, vhosts, operatorAccountId, operatorIpAddress, - ) - - err = useCase.DeleteSslPairVhosts( + err = useCase.DeleteSslPair( service.sslQueryRepo, service.sslCmdRepo, service.activityRecordCmdRepo, - deleteDto, + dto.NewDeleteSslPair(pairId, operatorAccountId, operatorIpAddress), ) if err != nil { return NewServiceOutput(InfraError, err.Error()) } - return NewServiceOutput(Success, "SslPairVhostsDeleted") + return NewServiceOutput(Success, "SslPairDeleted") } diff --git a/src/presentation/service/virtualHost.go b/src/presentation/service/virtualHost.go index 8ea321635..1f2d27287 100644 --- a/src/presentation/service/virtualHost.go +++ b/src/presentation/service/virtualHost.go @@ -1,25 +1,29 @@ package service import ( + "errors" + "github.com/goinfinite/os/src/domain/dto" "github.com/goinfinite/os/src/domain/useCase" "github.com/goinfinite/os/src/domain/valueObject" voHelper "github.com/goinfinite/os/src/domain/valueObject/helper" activityRecordInfra "github.com/goinfinite/os/src/infra/activityRecord" - infraHelper "github.com/goinfinite/os/src/infra/helper" internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase" servicesInfra "github.com/goinfinite/os/src/infra/services" vhostInfra "github.com/goinfinite/os/src/infra/vhost" - mappingInfra "github.com/goinfinite/os/src/infra/vhost/mapping" serviceHelper "github.com/goinfinite/os/src/presentation/service/helper" + + tkValueObject "github.com/goinfinite/tk/src/domain/valueObject" + tkVoUtil "github.com/goinfinite/tk/src/domain/valueObject/util" ) type VirtualHostService struct { persistentDbSvc *internalDbInfra.PersistentDatabaseService + trailDbSvc *internalDbInfra.TrailDatabaseService vhostQueryRepo *vhostInfra.VirtualHostQueryRepo vhostCmdRepo *vhostInfra.VirtualHostCmdRepo - mappingQueryRepo *mappingInfra.MappingQueryRepo - mappingCmdRepo *mappingInfra.MappingCmdRepo + mappingQueryRepo *vhostInfra.MappingQueryRepo + mappingCmdRepo *vhostInfra.MappingCmdRepo activityRecordCmdRepo *activityRecordInfra.ActivityRecordCmdRepo } @@ -29,21 +33,98 @@ func NewVirtualHostService( ) *VirtualHostService { return &VirtualHostService{ persistentDbSvc: persistentDbSvc, + trailDbSvc: trailDbSvc, vhostQueryRepo: vhostInfra.NewVirtualHostQueryRepo(persistentDbSvc), vhostCmdRepo: vhostInfra.NewVirtualHostCmdRepo(persistentDbSvc), - mappingQueryRepo: mappingInfra.NewMappingQueryRepo(persistentDbSvc), - mappingCmdRepo: mappingInfra.NewMappingCmdRepo(persistentDbSvc), + mappingQueryRepo: vhostInfra.NewMappingQueryRepo(persistentDbSvc), + mappingCmdRepo: vhostInfra.NewMappingCmdRepo(persistentDbSvc), activityRecordCmdRepo: activityRecordInfra.NewActivityRecordCmdRepo(trailDbSvc), } } -func (service *VirtualHostService) Read() ServiceOutput { - vhostsList, err := useCase.ReadVirtualHosts(service.vhostQueryRepo) +func (service *VirtualHostService) VirtualHostReadRequestFactory( + serviceInput map[string]interface{}, + withMappings bool, +) (readRequestDto dto.ReadVirtualHostsRequest, err error) { + var hostnamePtr *valueObject.Fqdn + if serviceInput["hostname"] != nil { + hostname, err := valueObject.NewFqdn(serviceInput["hostname"]) + if err != nil { + return readRequestDto, err + } + hostnamePtr = &hostname + } + + var typePtr *valueObject.VirtualHostType + if serviceInput["type"] != nil { + vhostType, err := valueObject.NewVirtualHostType(serviceInput["type"]) + if err != nil { + return readRequestDto, err + } + typePtr = &vhostType + } + + var rootDirectoryPtr *valueObject.UnixFilePath + if serviceInput["rootDirectory"] != nil { + rootDirectory, err := valueObject.NewUnixFilePath(serviceInput["rootDirectory"]) + if err != nil { + return readRequestDto, err + } + rootDirectoryPtr = &rootDirectory + } + + var parentHostnamePtr *valueObject.Fqdn + if serviceInput["parentHostname"] != nil { + parentHostname, err := valueObject.NewFqdn(serviceInput["parentHostname"]) + if err != nil { + return readRequestDto, err + } + parentHostnamePtr = &parentHostname + } + + if serviceInput["withMappings"] != nil { + withMappings, err = voHelper.InterfaceToBool(serviceInput["withMappings"]) + if err != nil { + return readRequestDto, err + } + } + + timeParamNames := []string{"createdBeforeAt", "createdAfterAt"} + timeParamPtrs := serviceHelper.TimeParamsParser(timeParamNames, serviceInput) + + requestPagination, err := serviceHelper.PaginationParser( + serviceInput, useCase.VirtualHostsDefaultPagination, + ) + if err != nil { + return readRequestDto, err + } + + return dto.ReadVirtualHostsRequest{ + Pagination: requestPagination, + Hostname: hostnamePtr, + VirtualHostType: typePtr, + RootDirectory: rootDirectoryPtr, + ParentHostname: parentHostnamePtr, + WithMappings: &withMappings, + CreatedBeforeAt: timeParamPtrs["createdBeforeAt"], + CreatedAfterAt: timeParamPtrs["createdAfterAt"], + }, nil +} + +func (service *VirtualHostService) Read( + serviceInput map[string]interface{}, +) ServiceOutput { + readRequestDto, err := service.VirtualHostReadRequestFactory(serviceInput, false) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + readResponseDto, err := useCase.ReadVirtualHosts(service.vhostQueryRepo, readRequestDto) if err != nil { return NewServiceOutput(InfraError, err.Error()) } - return NewServiceOutput(Success, vhostsList) + return NewServiceOutput(Success, readResponseDto) } func (service *VirtualHostService) Create(input map[string]interface{}) ServiceOutput { @@ -58,16 +139,20 @@ func (service *VirtualHostService) Create(input map[string]interface{}) ServiceO return NewServiceOutput(UserError, err.Error()) } - rawVhostType := "top-level" + vhostType := valueObject.VirtualHostTypeTopLevel if input["type"] != nil { - rawVhostType, err = voHelper.InterfaceToString(input["type"]) + vhostType, err = valueObject.NewVirtualHostType(input["type"]) if err != nil { return NewServiceOutput(UserError, err.Error()) } } - vhostType, err := valueObject.NewVirtualHostType(rawVhostType) - if err != nil { - return NewServiceOutput(UserError, err.Error()) + + isWildcard := false + if input["isWildcard"] != nil { + isWildcard, err = voHelper.InterfaceToBool(input["isWildcard"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } } var parentHostnamePtr *valueObject.Fqdn @@ -96,7 +181,8 @@ func (service *VirtualHostService) Create(input map[string]interface{}) ServiceO } createDto := dto.NewCreateVirtualHost( - hostname, vhostType, parentHostnamePtr, operatorAccountId, operatorIpAddress, + hostname, vhostType, &isWildcard, parentHostnamePtr, + operatorAccountId, operatorIpAddress, ) err = useCase.CreateVirtualHost( @@ -110,7 +196,7 @@ func (service *VirtualHostService) Create(input map[string]interface{}) ServiceO return NewServiceOutput(Created, "VirtualHostCreated") } -func (service *VirtualHostService) Delete(input map[string]interface{}) ServiceOutput { +func (service *VirtualHostService) Update(input map[string]interface{}) ServiceOutput { requiredParams := []string{"hostname"} err := serviceHelper.RequiredParamsInspector(input, requiredParams) if err != nil { @@ -122,9 +208,13 @@ func (service *VirtualHostService) Delete(input map[string]interface{}) ServiceO return NewServiceOutput(UserError, err.Error()) } - primaryVhost, err := infraHelper.GetPrimaryVirtualHost() - if err != nil { - return NewServiceOutput(InfraError, err.Error()) + var isWildcardPtr *bool + if input["isWildcard"] != nil { + isWildcard, err := voHelper.InterfaceToBool(input["isWildcard"]) + if err != nil { + return NewServiceOutput(UserError, errors.New("InvalidIsWildcard")) + } + isWildcardPtr = &isWildcard } operatorAccountId := LocalOperatorAccountId @@ -143,30 +233,75 @@ func (service *VirtualHostService) Delete(input map[string]interface{}) ServiceO } } - deleteDto := dto.NewDeleteVirtualHost( - hostname, primaryVhost, operatorAccountId, operatorIpAddress, + updateDto := dto.NewUpdateVirtualHost( + hostname, isWildcardPtr, operatorAccountId, operatorIpAddress, ) - err = useCase.DeleteVirtualHost( + err = useCase.UpdateVirtualHost( service.vhostQueryRepo, service.vhostCmdRepo, service.activityRecordCmdRepo, - deleteDto, + updateDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) } - return NewServiceOutput(Success, "VirtualHostDeleted") + return NewServiceOutput(Success, "VirtualHostUpdated") } -func (service *VirtualHostService) ReadWithMappings() ServiceOutput { - vhostsWithMappings, err := useCase.ReadVirtualHostsWithMappings( - service.mappingQueryRepo, +func (service *VirtualHostService) Delete(input map[string]interface{}) ServiceOutput { + requiredParams := []string{"hostname"} + err := serviceHelper.RequiredParamsInspector(input, requiredParams) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + hostname, err := valueObject.NewFqdn(input["hostname"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + operatorAccountId := LocalOperatorAccountId + if input["operatorAccountId"] != nil { + operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + operatorIpAddress := LocalOperatorIpAddress + if input["operatorIpAddress"] != nil { + operatorIpAddress, err = valueObject.NewIpAddress(input["operatorIpAddress"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + deleteDto := dto.NewDeleteVirtualHost(hostname, operatorAccountId, operatorIpAddress) + err = useCase.DeleteVirtualHost( + service.vhostQueryRepo, service.vhostCmdRepo, + service.activityRecordCmdRepo, deleteDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) } - return NewServiceOutput(Success, vhostsWithMappings) + return NewServiceOutput(Success, "VirtualHostDeleted") +} + +func (service *VirtualHostService) ReadWithMappings( + serviceInput map[string]interface{}, +) ServiceOutput { + readRequestDto, err := service.VirtualHostReadRequestFactory(serviceInput, true) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + readResponseDto, err := useCase.ReadVirtualHosts(service.vhostQueryRepo, readRequestDto) + if err != nil { + return NewServiceOutput(InfraError, err.Error()) + } + + return NewServiceOutput(Success, readResponseDto) } func (service *VirtualHostService) CreateMapping( @@ -188,20 +323,12 @@ func (service *VirtualHostService) CreateMapping( return NewServiceOutput(UserError, err.Error()) } - rawMatchPattern := "begins-with" + matchPattern := valueObject.MappingMatchPatternBeginsWith if input["matchPattern"] != nil { - typedRawMatchPattern, err := voHelper.InterfaceToString(input["matchPattern"]) + matchPattern, err = valueObject.NewMappingMatchPattern(input["matchPattern"]) if err != nil { return NewServiceOutput(UserError, err.Error()) } - - if len(typedRawMatchPattern) > 0 { - rawMatchPattern = typedRawMatchPattern - } - } - matchPattern, err := valueObject.NewMappingMatchPattern(rawMatchPattern) - if err != nil { - return NewServiceOutput(UserError, err.Error()) } targetType, err := valueObject.NewMappingTargetType(input["targetType"]) @@ -222,6 +349,9 @@ func (service *VirtualHostService) CreateMapping( var targetHttpResponseCodePtr *valueObject.HttpResponseCode if input["targetHttpResponseCode"] != nil { + if input["targetHttpResponseCode"] == "" { + input["targetHttpResponseCode"] = 301 + } targetHttpResponseCode, err := valueObject.NewHttpResponseCode( input["targetHttpResponseCode"], ) @@ -231,6 +361,28 @@ func (service *VirtualHostService) CreateMapping( targetHttpResponseCodePtr = &targetHttpResponseCode } + var shouldUpgradeInsecureRequestsPtr *bool + if input["shouldUpgradeInsecureRequests"] != nil { + shouldUpgradeInsecureRequests, err := tkVoUtil.InterfaceToBool( + input["shouldUpgradeInsecureRequests"], + ) + if err != nil { + return NewServiceOutput(UserError, "InvalidShouldUpgradeInsecureRequests") + } + shouldUpgradeInsecureRequestsPtr = &shouldUpgradeInsecureRequests + } + + var mappingSecurityRuleIdPtr *valueObject.MappingSecurityRuleId + if input["mappingSecurityRuleId"] != nil && input["mappingSecurityRuleId"] != "" { + mappingSecurityRuleId, err := valueObject.NewMappingSecurityRuleId( + input["mappingSecurityRuleId"], + ) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + mappingSecurityRuleIdPtr = &mappingSecurityRuleId + } + operatorAccountId := LocalOperatorAccountId if input["operatorAccountId"] != nil { operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) @@ -249,14 +401,15 @@ func (service *VirtualHostService) CreateMapping( createDto := dto.NewCreateMapping( hostname, path, matchPattern, targetType, targetValuePtr, - targetHttpResponseCodePtr, operatorAccountId, operatorIpAddress, + targetHttpResponseCodePtr, shouldUpgradeInsecureRequestsPtr, + mappingSecurityRuleIdPtr, operatorAccountId, operatorIpAddress, ) servicesQueryRepo := servicesInfra.NewServicesQueryRepo(service.persistentDbSvc) err = useCase.CreateMapping( - service.mappingQueryRepo, service.mappingCmdRepo, service.vhostQueryRepo, - servicesQueryRepo, service.activityRecordCmdRepo, createDto, + service.vhostQueryRepo, service.mappingCmdRepo, servicesQueryRepo, + service.activityRecordCmdRepo, createDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) @@ -268,13 +421,17 @@ func (service *VirtualHostService) CreateMapping( func (service *VirtualHostService) DeleteMapping( input map[string]interface{}, ) ServiceOutput { - requiredParams := []string{"id"} + if input["mappingId"] == nil && input["id"] != nil { + input["mappingId"] = input["id"] + } + + requiredParams := []string{"mappingId"} err := serviceHelper.RequiredParamsInspector(input, requiredParams) if err != nil { return NewServiceOutput(UserError, err.Error()) } - id, err := valueObject.NewMappingId(input["id"]) + id, err := valueObject.NewMappingId(input["mappingId"]) if err != nil { return NewServiceOutput(UserError, err.Error()) } @@ -296,10 +453,9 @@ func (service *VirtualHostService) DeleteMapping( } deleteDto := dto.NewDeleteMapping(id, operatorAccountId, operatorIpAddress) - err = useCase.DeleteMapping( - service.mappingQueryRepo, service.mappingCmdRepo, service.activityRecordCmdRepo, - deleteDto, + service.mappingQueryRepo, service.mappingCmdRepo, + service.activityRecordCmdRepo, deleteDto, ) if err != nil { return NewServiceOutput(InfraError, err.Error()) @@ -307,3 +463,532 @@ func (service *VirtualHostService) DeleteMapping( return NewServiceOutput(Created, "MappingDeleted") } + +func (service *VirtualHostService) UpdateMapping(input map[string]interface{}) ServiceOutput { + requiredParams := []string{"id"} + err := serviceHelper.RequiredParamsInspector(input, requiredParams) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + id, err := valueObject.NewMappingId(input["id"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + var pathPtr *valueObject.MappingPath + if input["path"] != nil { + path, err := valueObject.NewMappingPath(input["path"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + pathPtr = &path + } + + var matchPatternPtr *valueObject.MappingMatchPattern + if input["matchPattern"] != nil { + matchPattern, err := valueObject.NewMappingMatchPattern(input["matchPattern"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + matchPatternPtr = &matchPattern + } + + var targetTypePtr *valueObject.MappingTargetType + if input["targetType"] != nil { + targetType, err := valueObject.NewMappingTargetType(input["targetType"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + targetTypePtr = &targetType + } + + var targetValuePtr *valueObject.MappingTargetValue + if input["targetValue"] != nil { + if targetTypePtr == nil { + mappingEntity, err := service.mappingQueryRepo.ReadFirst( + dto.ReadMappingsRequest{MappingId: &id}, + ) + if err != nil { + return NewServiceOutput(InfraError, "ReadMappingEntityToRetrieveTargetTypeError") + } + targetTypePtr = &mappingEntity.TargetType + } + + targetValue, err := valueObject.NewMappingTargetValue(input["targetValue"], *targetTypePtr) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + targetValuePtr = &targetValue + } + + var targetHttpResponseCodePtr *valueObject.HttpResponseCode + if input["targetHttpResponseCode"] != nil { + targetHttpResponseCode, err := valueObject.NewHttpResponseCode(input["targetHttpResponseCode"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + targetHttpResponseCodePtr = &targetHttpResponseCode + } + + var shouldUpgradeInsecureRequestsPtr *bool + if input["shouldUpgradeInsecureRequests"] != nil { + shouldUpgradeInsecureRequests, err := tkVoUtil.InterfaceToBool(input["shouldUpgradeInsecureRequests"]) + if err != nil { + return NewServiceOutput(UserError, errors.New("InvalidShouldUpgradeInsecureRequests")) + } + shouldUpgradeInsecureRequestsPtr = &shouldUpgradeInsecureRequests + } + + var mappingSecurityRuleIdPtr *valueObject.MappingSecurityRuleId + if input["mappingSecurityRuleId"] != nil && input["mappingSecurityRuleId"] != "" { + mappingSecurityRuleId, err := valueObject.NewMappingSecurityRuleId(input["mappingSecurityRuleId"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + mappingSecurityRuleIdPtr = &mappingSecurityRuleId + } + + operatorAccountId := LocalOperatorAccountId + if input["operatorAccountId"] != nil { + operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + operatorIpAddress := LocalOperatorIpAddress + if input["operatorIpAddress"] != nil { + operatorIpAddress, err = valueObject.NewIpAddress(input["operatorIpAddress"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + updateDto := dto.NewUpdateMapping( + id, pathPtr, matchPatternPtr, targetTypePtr, targetValuePtr, + targetHttpResponseCodePtr, shouldUpgradeInsecureRequestsPtr, + mappingSecurityRuleIdPtr, operatorAccountId, operatorIpAddress, + ) + + err = useCase.UpdateMapping( + service.mappingQueryRepo, service.mappingCmdRepo, + service.activityRecordCmdRepo, updateDto, + ) + if err != nil { + return NewServiceOutput(InfraError, err.Error()) + } + + return NewServiceOutput(Success, "MappingUpdated") +} + +func (service *VirtualHostService) MappingSecurityRuleReadRequestFactory( + serviceInput map[string]interface{}, +) (readRequestDto dto.ReadMappingSecurityRulesRequest, err error) { + var mappingSecurityRuleIdPtr *valueObject.MappingSecurityRuleId + if serviceInput["id"] != nil { + id, err := valueObject.NewMappingSecurityRuleId(serviceInput["id"]) + if err != nil { + return readRequestDto, err + } + mappingSecurityRuleIdPtr = &id + } + + var mappingSecurityRuleNamePtr *valueObject.MappingSecurityRuleName + if serviceInput["name"] != nil { + name, err := valueObject.NewMappingSecurityRuleName(serviceInput["name"]) + if err != nil { + return readRequestDto, err + } + mappingSecurityRuleNamePtr = &name + } + + var allowedIpPtr *tkValueObject.CidrBlock + if serviceInput["allowedIp"] != nil { + allowedIp, err := tkValueObject.NewCidrBlock(serviceInput["allowedIp"]) + if err != nil { + return readRequestDto, err + } + allowedIpPtr = &allowedIp + } + + var blockedIpPtr *tkValueObject.CidrBlock + if serviceInput["blockedIp"] != nil { + blockedIp, err := tkValueObject.NewCidrBlock(serviceInput["blockedIp"]) + if err != nil { + return readRequestDto, err + } + blockedIpPtr = &blockedIp + } + + timeParamNames := []string{"createdBeforeAt", "createdAfterAt"} + timeParamPtrs := serviceHelper.TimeParamsParser(timeParamNames, serviceInput) + + requestPagination, err := serviceHelper.PaginationParser( + serviceInput, useCase.MappingSecurityRulesDefaultPagination, + ) + if err != nil { + return readRequestDto, err + } + + return dto.ReadMappingSecurityRulesRequest{ + Pagination: requestPagination, + MappingSecurityRuleId: mappingSecurityRuleIdPtr, + MappingSecurityRuleName: mappingSecurityRuleNamePtr, + AllowedIp: allowedIpPtr, + BlockedIp: blockedIpPtr, + CreatedBeforeAt: timeParamPtrs["createdBeforeAt"], + CreatedAfterAt: timeParamPtrs["createdAfterAt"], + }, nil +} + +func (service *VirtualHostService) ReadMappingSecurityRules( + serviceInput map[string]interface{}, +) ServiceOutput { + readRequestDto, err := service.MappingSecurityRuleReadRequestFactory(serviceInput) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + readResponseDto, err := useCase.ReadMappingSecurityRules( + service.mappingQueryRepo, readRequestDto, + ) + if err != nil { + return NewServiceOutput(InfraError, err.Error()) + } + + return NewServiceOutput(Success, readResponseDto) +} + +func (service *VirtualHostService) CreateMappingSecurityRule( + input map[string]interface{}, +) ServiceOutput { + requiredParams := []string{"name"} + err := serviceHelper.RequiredParamsInspector(input, requiredParams) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + name, err := valueObject.NewMappingSecurityRuleName(input["name"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + var descriptionPtr *valueObject.MappingSecurityRuleDescription + if input["description"] != nil { + description, err := valueObject.NewMappingSecurityRuleDescription(input["description"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + descriptionPtr = &description + } + + allowedIps := []tkValueObject.CidrBlock{} + if input["allowedIps"] != nil { + allowedIpsInput, assertOk := input["allowedIps"].([]tkValueObject.CidrBlock) + if !assertOk { + return NewServiceOutput(UserError, "InvalidAllowedIps") + } + allowedIps = allowedIpsInput + } + + blockedIps := []tkValueObject.CidrBlock{} + if input["blockedIps"] != nil { + blockedIpsInput, assertOk := input["blockedIps"].([]tkValueObject.CidrBlock) + if !assertOk { + return NewServiceOutput(UserError, "InvalidBlockedIps") + } + blockedIps = blockedIpsInput + } + + var rpsSoftLimitPerIpPtr *uint + if input["rpsSoftLimitPerIp"] != nil && input["rpsSoftLimitPerIp"] != "" { + softLimit, err := tkVoUtil.InterfaceToUint(input["rpsSoftLimitPerIp"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidRpsSoftLimitPerIp") + } + rpsSoftLimitPerIpPtr = &softLimit + } + + var rpsHardLimitPerIpPtr *uint + if input["rpsHardLimitPerIp"] != nil && input["rpsHardLimitPerIp"] != "" { + hardLimit, err := tkVoUtil.InterfaceToUint(input["rpsHardLimitPerIp"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidRpsHardLimitPerIp") + } + rpsHardLimitPerIpPtr = &hardLimit + } + + var responseCodeOnMaxRequestsPtr *uint + if input["responseCodeOnMaxRequests"] != nil && input["responseCodeOnMaxRequests"] != "" { + responseCode, err := tkVoUtil.InterfaceToUint(input["responseCodeOnMaxRequests"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidResponseCodeOnMaxRequests") + } + responseCodeOnMaxRequestsPtr = &responseCode + } + + var maxConnectionsPerIpPtr *uint + if input["maxConnectionsPerIp"] != nil && input["maxConnectionsPerIp"] != "" { + maxConns, err := tkVoUtil.InterfaceToUint(input["maxConnectionsPerIp"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidMaxConnectionsPerIp") + } + maxConnectionsPerIpPtr = &maxConns + } + + var bandwidthBpsLimitPerConnectionPtr *valueObject.Byte + if input["bandwidthBpsLimitPerConnection"] != nil && input["bandwidthBpsLimitPerConnection"] != "" { + bandwidthBpsLimit, err := valueObject.NewByte(input["bandwidthBpsLimitPerConnection"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidBandwidthBpsLimitPerConnection") + } + bandwidthBpsLimitPerConnectionPtr = &bandwidthBpsLimit + } + + var bandwidthLimitOnlyAfterBytesPtr *valueObject.Byte + if input["bandwidthLimitOnlyAfterBytes"] != nil && input["bandwidthLimitOnlyAfterBytes"] != "" { + bandwidthLimitOnlyAfterBytes, err := valueObject.NewByte(input["bandwidthLimitOnlyAfterBytes"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidBandwidthLimitOnlyAfterBytes") + } + bandwidthLimitOnlyAfterBytesPtr = &bandwidthLimitOnlyAfterBytes + } + + var responseCodeOnMaxConnectionsPtr *uint + if input["responseCodeOnMaxConnections"] != nil && input["responseCodeOnMaxConnections"] != "" { + responseCode, err := tkVoUtil.InterfaceToUint(input["responseCodeOnMaxConnections"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidResponseCodeOnMaxConnections") + } + responseCodeOnMaxConnectionsPtr = &responseCode + } + + operatorAccountId := LocalOperatorAccountId + if input["operatorAccountId"] != nil { + operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + operatorIpAddress := LocalOperatorIpAddress + if input["operatorIpAddress"] != nil { + operatorIpAddress, err = valueObject.NewIpAddress(input["operatorIpAddress"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + createDto := dto.NewCreateMappingSecurityRule( + name, descriptionPtr, allowedIps, blockedIps, rpsSoftLimitPerIpPtr, + rpsHardLimitPerIpPtr, responseCodeOnMaxRequestsPtr, maxConnectionsPerIpPtr, + bandwidthBpsLimitPerConnectionPtr, bandwidthLimitOnlyAfterBytesPtr, + responseCodeOnMaxConnectionsPtr, operatorAccountId, operatorIpAddress, + ) + + mappingSecurityRuleId, err := useCase.CreateMappingSecurityRule( + service.mappingQueryRepo, service.mappingCmdRepo, + service.activityRecordCmdRepo, createDto, + ) + if err != nil { + return NewServiceOutput(InfraError, err.Error()) + } + + return NewServiceOutput(Created, map[string]interface{}{ + "id": mappingSecurityRuleId.Uint64(), + }) +} + +func (service *VirtualHostService) UpdateMappingSecurityRule( + input map[string]interface{}, +) ServiceOutput { + requiredParams := []string{"id"} + err := serviceHelper.RequiredParamsInspector(input, requiredParams) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + id, err := valueObject.NewMappingSecurityRuleId(input["id"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + var namePtr *valueObject.MappingSecurityRuleName + if input["name"] != nil { + name, err := valueObject.NewMappingSecurityRuleName(input["name"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + namePtr = &name + } + + var descriptionPtr *valueObject.MappingSecurityRuleDescription + if input["description"] != nil { + description, err := valueObject.NewMappingSecurityRuleDescription(input["description"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + descriptionPtr = &description + } + + allowedIps := []tkValueObject.CidrBlock{} + if input["allowedIps"] != nil { + var assertOk bool + allowedIps, assertOk = input["allowedIps"].([]tkValueObject.CidrBlock) + if !assertOk { + return NewServiceOutput(UserError, "InvalidAllowedIps") + } + } + + blockedIps := []tkValueObject.CidrBlock{} + if input["blockedIps"] != nil { + var assertOk bool + blockedIps, assertOk = input["blockedIps"].([]tkValueObject.CidrBlock) + if !assertOk { + return NewServiceOutput(UserError, "InvalidBlockedIps") + } + } + + var rpsSoftLimitPerIpPtr *uint + if input["rpsSoftLimitPerIp"] != nil && input["rpsSoftLimitPerIp"] != "" { + softLimit, err := tkVoUtil.InterfaceToUint(input["rpsSoftLimitPerIp"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidRpsSoftLimitPerIp") + } + rpsSoftLimitPerIpPtr = &softLimit + } + + var rpsHardLimitPerIpPtr *uint + if input["rpsHardLimitPerIp"] != nil && input["rpsHardLimitPerIp"] != "" { + hardLimit, err := tkVoUtil.InterfaceToUint(input["rpsHardLimitPerIp"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidRpsHardLimitPerIp") + } + rpsHardLimitPerIpPtr = &hardLimit + } + + var responseCodeOnMaxRequestsPtr *uint + if input["responseCodeOnMaxRequests"] != nil && input["responseCodeOnMaxRequests"] != "" { + responseCode, err := tkVoUtil.InterfaceToUint(input["responseCodeOnMaxRequests"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidResponseCodeOnMaxRequests") + } + responseCodeOnMaxRequestsPtr = &responseCode + } + + var maxConnectionsPerIpPtr *uint + if input["maxConnectionsPerIp"] != nil && input["maxConnectionsPerIp"] != "" { + maxConns, err := tkVoUtil.InterfaceToUint(input["maxConnectionsPerIp"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidMaxConnectionsPerIp") + } + maxConnectionsPerIpPtr = &maxConns + } + + var bandwidthBpsLimitPerConnectionPtr *valueObject.Byte + if input["bandwidthBpsLimitPerConnection"] != nil && input["bandwidthBpsLimitPerConnection"] != "" { + bandwidthBpsLimit, err := valueObject.NewByte(input["bandwidthBpsLimitPerConnection"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidBandwidthBpsLimitPerConnection") + } + bandwidthBpsLimitPerConnectionPtr = &bandwidthBpsLimit + } + + var bandwidthLimitOnlyAfterBytesPtr *valueObject.Byte + if input["bandwidthLimitOnlyAfterBytes"] != nil && input["bandwidthLimitOnlyAfterBytes"] != "" { + bandwidthLimitOnlyAfterBytes, err := valueObject.NewByte(input["bandwidthLimitOnlyAfterBytes"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidBandwidthLimitOnlyAfterBytes") + } + bandwidthLimitOnlyAfterBytesPtr = &bandwidthLimitOnlyAfterBytes + } + + var responseCodeOnMaxConnectionsPtr *uint + if input["responseCodeOnMaxConnections"] != nil && input["responseCodeOnMaxConnections"] != "" { + responseCode, err := tkVoUtil.InterfaceToUint(input["responseCodeOnMaxConnections"]) + if err != nil { + return NewServiceOutput(UserError, "InvalidResponseCodeOnMaxConnections") + } + responseCodeOnMaxConnectionsPtr = &responseCode + } + + operatorAccountId := LocalOperatorAccountId + if input["operatorAccountId"] != nil { + operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + operatorIpAddress := LocalOperatorIpAddress + if input["operatorIpAddress"] != nil { + operatorIpAddress, err = valueObject.NewIpAddress(input["operatorIpAddress"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + updateDto := dto.NewUpdateMappingSecurityRule( + id, namePtr, descriptionPtr, allowedIps, blockedIps, + rpsSoftLimitPerIpPtr, rpsHardLimitPerIpPtr, responseCodeOnMaxRequestsPtr, + maxConnectionsPerIpPtr, bandwidthBpsLimitPerConnectionPtr, + bandwidthLimitOnlyAfterBytesPtr, responseCodeOnMaxConnectionsPtr, + operatorAccountId, operatorIpAddress, + ) + + err = useCase.UpdateMappingSecurityRule( + service.mappingQueryRepo, service.mappingCmdRepo, + service.activityRecordCmdRepo, updateDto, + ) + if err != nil { + return NewServiceOutput(InfraError, err.Error()) + } + + return NewServiceOutput(Success, "MappingSecurityRuleUpdated") +} + +func (service *VirtualHostService) DeleteMappingSecurityRule( + input map[string]interface{}, +) ServiceOutput { + requiredParams := []string{"id"} + err := serviceHelper.RequiredParamsInspector(input, requiredParams) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + ruleId, err := valueObject.NewMappingSecurityRuleId(input["id"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + + operatorAccountId := LocalOperatorAccountId + if input["operatorAccountId"] != nil { + operatorAccountId, err = valueObject.NewAccountId(input["operatorAccountId"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + operatorIpAddress := LocalOperatorIpAddress + if input["operatorIpAddress"] != nil { + operatorIpAddress, err = valueObject.NewIpAddress(input["operatorIpAddress"]) + if err != nil { + return NewServiceOutput(UserError, err.Error()) + } + } + + deleteDto := dto.NewDeleteMappingSecurityRule( + ruleId, operatorAccountId, operatorIpAddress, + ) + + err = useCase.DeleteMappingSecurityRule( + service.mappingQueryRepo, service.mappingCmdRepo, + service.activityRecordCmdRepo, deleteDto, + ) + if err != nil { + return NewServiceOutput(InfraError, err.Error()) + } + + return NewServiceOutput(Success, "MappingSecurityRuleDeleted") +} diff --git a/src/presentation/shared/helper/stringSliceMapParser.go b/src/presentation/shared/helper/stringSliceMapParser.go new file mode 100644 index 000000000..cb025592c --- /dev/null +++ b/src/presentation/shared/helper/stringSliceMapParser.go @@ -0,0 +1,50 @@ +package sharedHelper + +import ( + "log/slog" + "reflect" + "strings" +) + +func StringSliceValueObjectParser[TypedObject any]( + rawInputValues any, + valueObjectConstructor func(any) (TypedObject, error), +) []TypedObject { + resultObjects := make([]TypedObject, 0) + + if rawInputValues == nil { + return resultObjects + } + + rawReflectedSlice := make([]interface{}, 0) + + reflectedRawValues := reflect.ValueOf(rawInputValues) + rawInputValuesKind := reflectedRawValues.Kind() + switch rawInputValuesKind { + case reflect.String: + rawInputValues = strings.Split(reflectedRawValues.String(), ";") + for _, rawValue := range rawInputValues.([]string) { + rawReflectedSlice = append(rawReflectedSlice, rawValue) + } + case reflect.Slice: + for valueIndex := 0; valueIndex < reflectedRawValues.Len(); valueIndex++ { + rawReflectedSlice = append( + rawReflectedSlice, reflectedRawValues.Index(valueIndex).Interface(), + ) + } + default: + rawReflectedSlice = append(rawReflectedSlice, rawInputValues) + } + + for _, rawValue := range rawReflectedSlice { + valueObject, err := valueObjectConstructor(rawValue) + if err != nil { + slog.Debug(err.Error(), slog.Any("rawValue", rawValue)) + continue + } + + resultObjects = append(resultObjects, valueObject) + } + + return resultObjects +} diff --git a/src/presentation/ui/assets/additional.css b/src/presentation/ui/assets/additional.css index 2c8ac1d36..b1dd356b6 100644 --- a/src/presentation/ui/assets/additional.css +++ b/src/presentation/ui/assets/additional.css @@ -1,19 +1,35 @@ -body { - font-family: "Lato", sans-serif; +#sidebarMenu::-webkit-scrollbar { + width: 0; + height: 0; } -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: "Julius Sans One", sans-serif; - text-shadow: -1px 0 0 #fff; - word-spacing: -.1618rem; +#vg-tooltip-element.dark-theme { + background-color: rgba(26, 45, 56, 0.9); + border: none; } -#sidebarMenu::-webkit-scrollbar { - width: 0; - height: 0; +#vg-tooltip-element table tr td.value { + font-weight: bold; +} + +::-webkit-scrollbar { + width: 5px; +} + +::-webkit-scrollbar-track { + background-color: rgba(255, 255, 255, 0.15); +} + +::-webkit-scrollbar-thumb { + background-color: rgba(255, 255, 255, 0.25); +} + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +[un-cloak] { + display: none; } \ No newline at end of file diff --git a/src/presentation/ui/assets/additional.js b/src/presentation/ui/assets/additional.js index c91e8b43e..a7d6dd4ad 100644 --- a/src/presentation/ui/assets/additional.js +++ b/src/presentation/ui/assets/additional.js @@ -4,92 +4,178 @@ window.__unocss = { theme: { colors: { - 'infinite': { - '50': '#dea893', - '100': '#d89a81', - '200': '#d38b6f', - '300': '#cd7d5d', - '400': '#ca7654', - '500': '#c97350', - '600': '#c46f4d', - '700': '#ba6949', - '800': '#a55e41', - '900': '#905239', - '950': '#7c4631', + infinite: { + 50: "#dea893", + 100: "#d89a81", + 200: "#d38b6f", + 300: "#cd7d5d", + 400: "#ca7654", + 500: "#c97350", + 600: "#c46f4d", + 700: "#ba6949", + 800: "#a55e41", + 900: "#905239", + 950: "#7c4631", + }, + os: { + 5: "#66737a", + 100: "#4d5b64", + 200: "#34444e", + 300: "#1a2d38", + 400: "#0d212d", + 500: "#071b27", + 600: "#071a26", + 700: "#061924", + 800: "#061620", + 900: "#05131c", + 950: "#041118", + }, + primary: { + 5: "#66737a", + 100: "#4d5b64", + 200: "#34444e", + 300: "#1a2d38", + 400: "#0d212d", + 500: "#071b27", + 600: "#071a26", + 700: "#061924", + 800: "#061620", + 900: "#05131c", + 950: "#041118", + }, + secondary: { + 50: "#dea893", + 100: "#d89a81", + 200: "#d38b6f", + 300: "#cd7d5d", + 400: "#ca7654", + 500: "#c97350", + 600: "#c46f4d", + 700: "#ba6949", + 800: "#a55e41", + 900: "#905239", + 950: "#7c4631", }, - 'os': { - '5': '#66737a', - '100': '#4d5b64', - '200': '#34444e', - '300': '#1a2d38', - '400': '#0d212d', - '500': '#071b27', - '600': '#071a26', - '700': '#061924', - '800': '#061620', - '900': '#05131c', - '950': '#041118', - } }, - } + }, }; -document.addEventListener("alpine:init", () => { - async function jsonAjax(method, url, payload, shouldDisplayToast) { - const loadingOverlayElement = document.getElementById("loading-overlay"); - loadingOverlayElement.classList.add("htmx-request"); - - try { - const response = await fetch(url, { - method: method, - headers: { - Accept: "application/json", - "Content-Type": "application/json", - }, - body: JSON.stringify(payload), - }); - const parsedResponse = await response.json(); - - loadingOverlayElement.classList.remove("htmx-request"); - - if (!response.ok) { - throw new Error(parsedResponse.body); - } - - if (shouldDisplayToast) { - Alpine.store("toast").displayToast(parsedResponse.body, "success"); - } - return parsedResponse.body; - } catch (error) { - loadingOverlayElement.classList.remove("htmx-request"); - - if (shouldDisplayToast) { - Alpine.store("toast").displayToast(error.message, "danger"); - return; - } - throw error; +async function jsonAjax(method, url, payload, shouldDisplayToast = true) { + const loadingOverlayElement = document.getElementById("loading-overlay"); + loadingOverlayElement.classList.add("htmx-request"); + + try { + const requestSettings = { + method: method, + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + }; + if (Object.keys(payload).length > 0) { + requestSettings.body = JSON.stringify(payload); + } + const response = await fetch(url, requestSettings); + const parsedResponse = await response.json(); + + loadingOverlayElement.classList.remove("htmx-request"); + + if (!response.ok) { + throw new Error(parsedResponse.body); + } + + if (shouldDisplayToast) { + Alpine.store("toast").displayToast(parsedResponse.body, "success"); + } + return parsedResponse.body; + } catch (error) { + loadingOverlayElement.classList.remove("htmx-request"); + + if (shouldDisplayToast) { + Alpine.store("toast").displayToast(error.message, "danger"); + return; } + throw error; } +} - function createRandomPassword() { - const passwordLength = 16; - const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+'; +function createRandomPassword() { + const passwordLength = 16; + const chars = + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+"; - let passwordContent = ''; - let passwordIterationCount = 0; - while (passwordIterationCount < passwordLength) { - const randomIndex = Math.floor(Math.random() * chars.length); - const indexAfterRandomIndex = randomIndex + 1; - passwordContent += chars.substring(randomIndex, indexAfterRandomIndex); + let passwordContent = ""; + let passwordIterationCount = 0; + while (passwordIterationCount < passwordLength) { + const randomIndex = Math.floor(Math.random() * chars.length); + const indexAfterRandomIndex = randomIndex + 1; + passwordContent += chars.substring(randomIndex, indexAfterRandomIndex); - passwordIterationCount++; + passwordIterationCount++; + } + + return passwordContent; +} + +function createFilterQueryParams(filtersObject, paginationObject) { + const queryParams = new URLSearchParams(); + + const filtersAndPaginationObject = { + ...filtersObject, + ...paginationObject, + }; + for (let [key, value] of Object.entries(filtersAndPaginationObject)) { + if (typeof value === "number") { + queryParams.set(key, value); + continue; } - return passwordContent; + const trimValue = value.trim(); + if (trimValue === "") { + continue; + } + queryParams.set(key, trimValue); } - window.Infinite = { - JsonAjax: jsonAjax, - CreateRandomPassword: createRandomPassword + return queryParams; +} + +// JavaScript doesn't provide any API capable of directly downloading a blob +// file, so it's necessary to create an invisible anchor element and artificially +// trigger a click on it to emulate this process. +function downloadFile(nameWithExtension, content, mimeType = "text/plain") { + const blobFile = new Blob([content], { type: mimeType }); + const blobFileUrlObject = window.URL.createObjectURL(blobFile); + const downloadFileElement = document.createElement("a"); + + downloadFileElement.href = blobFileUrlObject; + downloadFileElement.download = nameWithExtension; + document.body.appendChild(downloadFileElement); + + downloadFileElement.click(); + window.URL.revokeObjectURL(blobFileUrlObject); + document.body.removeChild(downloadFileElement); +} + +function registerAlpineState(stateFunction) { + if (window.Alpine) { + stateFunction(); + return; } + + document.addEventListener("alpine:init", stateFunction); +} + +window.Infinite = { + Envs: { + AccessTokenCookieKey: "os-access-token", + }, + CreateRandomPassword: createRandomPassword, + CreateFilterQueryParams: createFilterQueryParams, + DownloadFile: downloadFile, + RegisterAlpineState: registerAlpineState, +}; + +document.addEventListener("alpine:init", () => { + window.Infinite.JsonAjax = jsonAjax; }); diff --git a/src/presentation/ui/assets/default-avatar.jpg b/src/presentation/ui/assets/default-avatar.jpg new file mode 100644 index 000000000..388e786ad Binary files /dev/null and b/src/presentation/ui/assets/default-avatar.jpg differ diff --git a/src/presentation/ui/assets/placeholder-100x100.svg b/src/presentation/ui/assets/placeholder-100x100.svg new file mode 100644 index 000000000..53f77e609 --- /dev/null +++ b/src/presentation/ui/assets/placeholder-100x100.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/presentation/ui/component/databases/databaseUserPrivilegesCheckboxInputsSwitchToggles.templ b/src/presentation/ui/component/databases/databaseUserPrivilegesCheckboxInputsSwitchToggles.templ index 5095fd6b4..95bc67aac 100644 --- a/src/presentation/ui/component/databases/databaseUserPrivilegesCheckboxInputsSwitchToggles.templ +++ b/src/presentation/ui/component/databases/databaseUserPrivilegesCheckboxInputsSwitchToggles.templ @@ -15,12 +15,17 @@ func transformDbUserPrivilegeIntoComponentValueFormat( templ DatabaseUserPrivilegesCheckboxInputsSwitchToggles() { -
- for _, databaseUserPrivilege := range valueObject.AvailableDatabasePrivileges { - @componentForm.CheckboxInputSwitchToggle( - "privileges", databaseUserPrivilege, "databaseUser.privileges", - transformDbUserPrivilegeIntoComponentValueFormat(databaseUserPrivilege), - ) - } +
+ +

If none are selected, the "ALL" privilege will be granted by default.

+
+ for _, databaseUserPrivilege := range valueObject.AvailableDatabasePrivileges { + @componentForm.CheckboxInputSwitchToggle(componentForm.CheckboxInputSwitchToggleDto{ + Label: databaseUserPrivilege, + BindModelPath: "databaseUser.privileges", + CustomValue: transformDbUserPrivilegeIntoComponentValueFormat(databaseUserPrivilege), + }) + } +
} diff --git a/src/presentation/ui/component/form/checkboxInput.templ b/src/presentation/ui/component/form/checkboxInput.templ new file mode 100644 index 000000000..8cf36569a --- /dev/null +++ b/src/presentation/ui/component/form/checkboxInput.templ @@ -0,0 +1,64 @@ +package componentForm + +type CheckboxInputDto struct { + Id, Name, Label, OnChange, CustomValue, BindIsCheckedCondition string +} + +templ CheckboxInput(inputDto CheckboxInputDto) { + +} + +type CheckboxInputSwitchToggleDto struct { + Id, Label, BindModelPath, CustomValue string +} + +// Note: "bindModelPath" may be an array (in which case the "customValue" will be +// pushed into the array) OR "bindModelPath" may be just a boolean state (in which +// case the "customValue" is not necessary and will be ignored). +templ CheckboxInputSwitchToggle(inputDto CheckboxInputSwitchToggleDto) { + + if inputDto.Id != "" { + + } + +} diff --git a/src/presentation/ui/component/form/checkboxInputSwitchToggle.templ b/src/presentation/ui/component/form/checkboxInputSwitchToggle.templ deleted file mode 100644 index ec8557c33..000000000 --- a/src/presentation/ui/component/form/checkboxInputSwitchToggle.templ +++ /dev/null @@ -1,25 +0,0 @@ -package componentForm - -// Note: "bindModelPath" may be an array (in which case the "customValue" will be -// pushed into the array) OR "bindModelPath" may be just a boolean state (in which -// case the "customValue" is not necessary and will be ignored). -templ CheckboxInputSwitchToggle( - id, label, bindModelPath, customValue string, -) { - - -} diff --git a/src/presentation/ui/component/form/dropzone.templ b/src/presentation/ui/component/form/dropzone.templ new file mode 100644 index 000000000..26273bc10 --- /dev/null +++ b/src/presentation/ui/component/form/dropzone.templ @@ -0,0 +1,68 @@ +package componentForm + +import _ "embed" + +//go:embed dropzoneState.js +var dropzoneAlpineState string + +type DropzoneInputDto struct { + Id string + Description string + AcceptAttribute string + AllowMultipleFiles bool +} + +templ Dropzone(inputDto DropzoneInputDto) { + + @templ.Raw(``) + +
+ +
+} diff --git a/src/presentation/ui/component/form/dropzoneState.js b/src/presentation/ui/component/form/dropzoneState.js new file mode 100644 index 000000000..3489f33df --- /dev/null +++ b/src/presentation/ui/component/form/dropzoneState.js @@ -0,0 +1,32 @@ +Infinite.RegisterAlpineState(dropzoneAlpineState); + +function dropzoneAlpineState() { + Alpine.data("dropzone", () => ({ + files: [], + updateFileInput() { + const dataTransfer = new DataTransfer(); + this.files.forEach((file) => dataTransfer.items.add(file)); + this.$refs.dropzone.files = dataTransfer.files; + }, + removeFile(index) { + this.files.splice(index, 1); + this.updateFileInput(); + }, + handleDrop(event) { + const droppedFiles = Array.from(event.dataTransfer.files); + this.files = this.files.concat(droppedFiles); + this.updateFileInput(); + }, + resetState() { + this.files = []; + this.updateFileInput(); + }, + init() { + this.resetState(); + + document.addEventListener("delete:dropzone-state", () => { + this.resetState(); + }); + }, + })); +} diff --git a/src/presentation/ui/component/form/fileUploadTextInputFileContentReader.templ b/src/presentation/ui/component/form/fileUploadTextInputFileContentReader.templ index 295c728c1..72d06efcd 100644 --- a/src/presentation/ui/component/form/fileUploadTextInputFileContentReader.templ +++ b/src/presentation/ui/component/form/fileUploadTextInputFileContentReader.templ @@ -1,7 +1,9 @@ package componentForm script FileUploadTextInputFileContentReaderLocalState() { - document.addEventListener('alpine:init', () => { + Infinite.RegisterAlpineState(fileUploadTextInputFileContentReaderAlpineState); + + function fileUploadTextInputFileContentReaderAlpineState() { Alpine.data('fileUploadTextInputFileContentReader', () => ({ uploadedFileName: '', get uploadedFileNameLabel() { @@ -30,7 +32,7 @@ script FileUploadTextInputFileContentReaderLocalState() { reader.readAsText(uploadedFile); } })); - }); + } } templ FileUploadTextInputFileContentReader( @@ -49,7 +51,7 @@ templ FileUploadTextInputFileContentReader( />
diff --git a/src/presentation/ui/component/form/inputField.templ b/src/presentation/ui/component/form/inputField.templ index b69419aac..42d8b5e95 100644 --- a/src/presentation/ui/component/form/inputField.templ +++ b/src/presentation/ui/component/form/inputField.templ @@ -13,6 +13,9 @@ templ InputField(inputDto InputFieldDto) {
- @@ -83,9 +86,11 @@ templ InputFieldWithPrefix(inputDto InputFieldWithPrefixDto) { - @@ -117,12 +122,12 @@ templ InputFieldReadOnly( id={ id } name={ id } if clientSideValuePath != "" { - x-model:value={ clientSideValuePath } + :value={ clientSideValuePath } } if serverSideValue != "" { value={ serverSideValue } } - class="bg-os-300 border-os-200 hover:border-os-100 autofill:bg-os-300 focus:border-os-50 peer relative h-10 w-full cursor-default rounded-md border px-3 text-sm text-neutral-100 text-slate-400 placeholder-transparent outline-none transition-all" + class="bg-os-300 border-os-200 hover:border-os-100 autofill:bg-os-300 focus:border-os-50 peer relative h-10 w-full cursor-default rounded-md border px-3 text-sm text-neutral-100 placeholder-transparent outline-none transition-all" readonly /> if label != "" { diff --git a/src/presentation/ui/component/form/multiColumnRepeatableFieldset.templ b/src/presentation/ui/component/form/multiColumnRepeatableFieldset.templ new file mode 100644 index 000000000..879e556e3 --- /dev/null +++ b/src/presentation/ui/component/form/multiColumnRepeatableFieldset.templ @@ -0,0 +1,140 @@ +package componentForm + +type RepeatableField struct { + InputType string + Id string + Label string + Options []string +} + +script MultiColumnRepeatableFieldsetLocalState(id string) { + Infinite.RegisterAlpineState(multiColumnRepeatableFieldsetAlpineState); + + function multiColumnRepeatableFieldsetAlpineState() { + Alpine.data(id+'MultiColumnRepeatableFieldset', () => ({ + newFieldset: {}, + registeredFieldsets: [], + registeredFieldsetsFlattened: '', + flattenRegisteredFieldsets() { + let fieldsetsStr = ""; + + this.registeredFieldsets.forEach((registeredFieldset) => { + let fieldsetStr = ""; + + for (const [key, value] of Object.entries(registeredFieldset)) { + fieldsetStr += value + "|"; + } + + fieldsetStrWithoutLastPipe = fieldsetStr.slice(0, -1); + fieldsetsStr += fieldsetStrWithoutLastPipe + ";"; + }); + + if (fieldsetsStr.length > 0) { + fieldsetsStrWithoutLastSemicolon = fieldsetsStr.slice(0, -1); + fieldsetsStr = fieldsetsStrWithoutLastSemicolon; + } + + this.registeredFieldsetsFlattened = fieldsetsStr; + }, + createFieldset() { + if (Object.keys(this.newFieldset).length === 0) { + return; + } + + this.registeredFieldsets.push(this.newFieldset); + this.newFieldset = {}; + }, + removeRegisteredFieldset(id) { + this.registeredFieldsets.splice(id, 1); + }, + resetState() { + this.newFieldSet = {}; + this.registeredFieldsets = []; + }, + init() { + this.resetState(); + document.addEventListener('clear:component-state', () => { + this.resetState(); + }); + }, + })); + }; +} + +templ MultiColumnRepeatableFieldset( + id, title, description, bindValuePath string, + repeatableFields []RepeatableField, +) { + + @MultiColumnRepeatableFieldsetLocalState(id) + +
{registeredFieldsets = value; flattenRegisteredFieldsets()})" } + > + +
+

{ title }

+ if description != "" { +

{ description }

+ } +
+
+ +
+
+ for _, repeatableField := range repeatableFields { + switch repeatableField.InputType { + case "select": + @SelectInput( + "", repeatableField.Label, "newFieldset['"+repeatableField.Id+"']", "", + repeatableField.Options, true, + ) + case "text": + @InputField(InputFieldDto{ + Type: repeatableField.InputType, + Label: repeatableField.Label, + BindModelValuePath: "newFieldset['" + repeatableField.Id + "']", + }) + } + } + +
+
+} diff --git a/src/presentation/ui/component/form/multiSelectInputState.js b/src/presentation/ui/component/form/multiSelectInputState.js new file mode 100644 index 000000000..a4556e314 --- /dev/null +++ b/src/presentation/ui/component/form/multiSelectInputState.js @@ -0,0 +1,29 @@ +Infinite.RegisterAlpineState(multiSelectInputAlpineState); + +function multiSelectInputAlpineState() { + Alpine.data("multiSelectInput", () => ({ + getFormattedSelectedItems(bindSelectedItemsPath) { + if (bindSelectedItemsPath.length == 0) { + return "--"; + } + + let formattedSelectedItems = bindSelectedItemsPath.join(", "); + if (formattedSelectedItems.length > 80) { + return formattedSelectedItems.substr(0, 80) + "..."; + } + return formattedSelectedItems; + }, + shouldExpandOptions: false, + closeDropdown() { + this.shouldExpandOptions = false; + }, + toggleDropdownDisplay() { + if (this.shouldExpandOptions) { + this.closeDropdown(); + return; + } + + this.shouldExpandOptions = true; + }, + })); +} diff --git a/src/presentation/ui/component/form/passwordInput.templ b/src/presentation/ui/component/form/passwordInput.templ index daa8ff537..cbab128b9 100755 --- a/src/presentation/ui/component/form/passwordInput.templ +++ b/src/presentation/ui/component/form/passwordInput.templ @@ -1,68 +1,12 @@ package componentForm -import "strconv" +import ( + _ "embed" + "strconv" +) -script PasswordInputLocalState() { - document.addEventListener('alpine:init', () => { - Alpine.data('passwordInput', () => ({ - // Random Password Generator States - isPasswordReadable: false, - generateRandomPassword() { - const passwordContent = Infinite.CreateRandomPassword(); - - this.displayPasswordStrengthCriteria = false; - this.updatePasswordStrengthPercentage(passwordContent); - - return passwordContent; - }, - // Password Strength Criteria States - displayPasswordStrengthCriteria: false, - passwordStrengthPercentage: 0, - passwordStrengthCriteria: {}, - resetPasswordStrengthParams() { - this.passwordStrengthPercentage = 0; - this.passwordStrengthCriteria = { - isLongEnough: false, - hasNumbers: false, - hasUppercaseChars: false, - hasLowercaseChars: false, - hasSpecialChars: false, - }; - }, - updatePasswordStrengthPercentage(password) { - this.resetPasswordStrengthParams(); - - let passwordStrengthPercentage = 0 - if (password.length >= 6 && password.length <= 64) { - this.passwordStrengthCriteria.isLongEnough = true; - passwordStrengthPercentage += 20; - } - - if (/[1-9]/.test(password)) { - this.passwordStrengthCriteria.hasNumbers = true; - passwordStrengthPercentage += 20; - } - - if (/[A-Z]/.test(password)) { - this.passwordStrengthCriteria.hasUppercaseChars = true; - passwordStrengthPercentage += 20; - } - - if (/[a-z]/.test(password)) { - this.passwordStrengthCriteria.hasLowercaseChars = true; - passwordStrengthPercentage += 20; - } - - if (/[!@#\$%\^\&*\)\(+=._-]/.test(password)) { - this.passwordStrengthCriteria.hasSpecialChars = true; - passwordStrengthPercentage += 20; - } - - this.passwordStrengthPercentage = passwordStrengthPercentage; - }, - })); - }); -} +//go:embed passwordInputState.js +var passwordInputAlpineState string templ togglePasswordReadabilityButton() {
@@ -98,7 +42,7 @@ type PasswordInputDto struct { templ PasswordInput(passwordInputDto PasswordInputDto) { - @PasswordInputLocalState() + @templ.Raw(``)
@@ -134,27 +78,27 @@ templ PasswordInput(passwordInputDto PasswordInputDto) {
  • Must be between 6 and 64 characters + > Should be between 6 and 64 characters
  • Must have at least 1 number + > Should have at least 1 number
  • Must have at least 1 uppercase letter + > Should have at least 1 uppercase letter
  • Must have at least 1 lowercase letter + > Should have at least 1 lowercase letter
  • Must have at least 1 special character + > Should have at least 1 special character
  • diff --git a/src/presentation/ui/component/form/passwordInputState.js b/src/presentation/ui/component/form/passwordInputState.js new file mode 100644 index 000000000..3f0091ca5 --- /dev/null +++ b/src/presentation/ui/component/form/passwordInputState.js @@ -0,0 +1,61 @@ +Infinite.RegisterAlpineState(passwordInputAlpineState); + +function passwordInputAlpineState() { + Alpine.data("passwordInput", () => ({ + // RandomPasswordGeneratorState + isPasswordReadable: false, + generateRandomPassword() { + const passwordContent = Infinite.CreateRandomPassword(); + + this.displayPasswordStrengthCriteria = false; + this.updatePasswordStrengthPercentage(passwordContent); + + return passwordContent; + }, + // Password Strength Criteria States + displayPasswordStrengthCriteria: false, + passwordStrengthPercentage: 0, + passwordStrengthCriteria: {}, + resetPasswordStrengthParams() { + this.passwordStrengthPercentage = 0; + this.passwordStrengthCriteria = { + isLongEnough: false, + hasNumbers: false, + hasUppercaseChars: false, + hasLowercaseChars: false, + hasSpecialChars: false, + }; + }, + updatePasswordStrengthPercentage(password) { + this.resetPasswordStrengthParams(); + + let passwordStrengthPercentage = 0; + if (password.length >= 6 && password.length <= 64) { + this.passwordStrengthCriteria.isLongEnough = true; + passwordStrengthPercentage += 20; + } + + if (/[1-9]/.test(password)) { + this.passwordStrengthCriteria.hasNumbers = true; + passwordStrengthPercentage += 20; + } + + if (/[A-Z]/.test(password)) { + this.passwordStrengthCriteria.hasUppercaseChars = true; + passwordStrengthPercentage += 20; + } + + if (/[a-z]/.test(password)) { + this.passwordStrengthCriteria.hasLowercaseChars = true; + passwordStrengthPercentage += 20; + } + + if (/[!@#\$%\^\&*\)\(+=._-]/.test(password)) { + this.passwordStrengthCriteria.hasSpecialChars = true; + passwordStrengthPercentage += 20; + } + + this.passwordStrengthPercentage = passwordStrengthPercentage; + }, + })); +} diff --git a/src/presentation/ui/component/form/selectInput.templ b/src/presentation/ui/component/form/selectInput.templ index 0fb55ada5..4ceb35d4e 100644 --- a/src/presentation/ui/component/form/selectInput.templ +++ b/src/presentation/ui/component/form/selectInput.templ @@ -1,5 +1,7 @@ package componentForm +import _ "embed" + templ SelectInput( id, label, bindModelPath, onSelect string, options []string, @@ -41,9 +43,10 @@ templ SelectInput( } type SelectInputClientSideDto struct { - BindLabel string - BindModelPath string - BindOptions string + BindLabel string + BindModelPath string + BindOptions string + ShouldIncludeBlankOption bool } templ SelectInputClientSide(selectInputDto SelectInputClientSideDto) { @@ -53,11 +56,14 @@ templ SelectInputClientSide(selectInputDto SelectInputClientSideDto) { x-model={ selectInputDto.BindModelPath } class="bg-os-300 hover:border-os-100 border-os-200 autofill:bg-os-300 focus:border-os-50 peer relative h-10 w-full appearance-none rounded-md border px-3 text-sm text-neutral-100 placeholder-transparent outline-none transition-all" > - + if selectInputDto.ShouldIncludeBlankOption { + + } @@ -97,7 +103,7 @@ templ SelectInputWithLabelValuePair( class="bg-os-300 hover:border-os-100 border-os-200 autofill:bg-os-300 focus:border-os-50 peer relative h-10 w-full appearance-none rounded-md border px-3 text-sm text-neutral-100 placeholder-transparent outline-none transition-all" > if shouldIncludeBlankOption { - + } for _, option := range options {
    - @componentStructural.Alert("info", "Set up direct redirects to an URL.") + @componentStructural.Alert("info", "Set up direct redirects to an URL, optionally with a custom HTTP response code.")
    - @componentStructural.Alert("info", "Configure how requests are forwarded to backend services, such as PHP, for handling dynamic content.") + @componentStructural.Alert("info", "Configure a service to handle the incoming requests, such as a web server, REST API, or a gRPC service.")
    @componentStructural.Alert("info", "Define custom responses for different HTTP status codes, such as 404 (Not Found) or 500 (Internal Server Error).") @@ -38,6 +38,6 @@ templ MappingTypeRadioInput(id, label, bindModelPath string) { @componentStructural.Alert("info", "Send a specific HTTP status code along with HTML content in the server's response.")
    - @componentStructural.Alert("info", "Set the root directory to make static files accessible. The server will attempt to locate files in various locations until it finds one that exists.") + @componentStructural.Alert("info", "URLs will act as file paths, serving static files from the specified directory.")
    } diff --git a/src/presentation/ui/component/mappings/matchPatternSelectInput.templ b/src/presentation/ui/component/mappings/matchPatternSelectInput.templ deleted file mode 100644 index e6a55639c..000000000 --- a/src/presentation/ui/component/mappings/matchPatternSelectInput.templ +++ /dev/null @@ -1,16 +0,0 @@ -package componentMappings - -import componentForm "github.com/goinfinite/os/src/presentation/ui/component/form" - -templ MatchPatternSelectInput(id, label, bindValuePath string) { - - @componentForm.SelectInputWithLabelValuePair( - id, label, bindValuePath, - []componentForm.SelectLabelValuePair{ - {Label: "Begins With", Value: "begins-with"}, - {Label: "Contains", Value: "contains"}, - {Label: "Equals", Value: "equals"}, - {Label: "Ends With", Value: "ends-with"}, - }, false, - ) -} diff --git a/src/presentation/ui/component/mappings/vhostMappingsList.templ b/src/presentation/ui/component/mappings/vhostMappingsList.templ index 91e867f0a..e0e266335 100644 --- a/src/presentation/ui/component/mappings/vhostMappingsList.templ +++ b/src/presentation/ui/component/mappings/vhostMappingsList.templ @@ -4,39 +4,125 @@ import ( "github.com/goinfinite/os/src/domain/entity" "github.com/goinfinite/os/src/domain/valueObject" componentStructural "github.com/goinfinite/os/src/presentation/ui/component/structural" + "github.com/goinfinite/ui/src/display" ) -templ VhostMappingsList( - mapping entity.Mapping, +templ VirtualHostMappingsList( + mappingEntity entity.Mapping, rootDirectory valueObject.UnixFilePath, - deleteOnClick string, ) { - -
    -
    -
    - { mapping.Path.String() } - switch mapping.TargetType.String() { - case "service": - @componentStructural.Tag("", "service", mapping.TargetValue.String(), "teal-900") - case "url": - @componentStructural.Tag("", "url", mapping.TargetValue.String(), "purple-900") - case "response-code": - @componentStructural.Tag("", "response code", mapping.TargetHttpResponseCode.String(), "cyan-900") - case "inline-html": - if len(mapping.TargetValue.String()) > 50 { - @componentStructural.Tag("", "inline html", mapping.TargetValue.String()[:50]+"...", "sky-700") - } else { - @componentStructural.Tag("", "inline html", mapping.TargetValue.String(), "sky-700") - } - case "static-files": - @componentStructural.Tag("", "static files", rootDirectory.String(), "yellow-600") - } - @componentStructural.Tag("", "match pattern", mapping.MatchPattern.String(), "infinite-300") -
    -
    - @componentStructural.CircularIconButtonWithTooltip("ph-trash", "red-800", "red-600", deleteOnClick, "delete mapping", "red-500") -
    + +
    + @templ.JSONScript("mappingEntity_"+mappingEntity.Id.String(), mappingEntity) +
    +

    { mappingEntity.Path.String() }

    + switch mappingEntity.TargetType.String() { + case "service": + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterBackgroundColor: "teal-950", + OuterLeftLabel: "service", + InnerLabel: mappingEntity.TargetValue.String(), + }) + case "url": + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterBackgroundColor: "violet-950", + OuterLeftLabel: "url", + InnerLabel: mappingEntity.TargetValue.String(), + }) + if mappingEntity.TargetHttpResponseCode != nil && + mappingEntity.TargetHttpResponseCode.String() != "301" && + mappingEntity.TargetHttpResponseCode.String() != "302" { + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterBackgroundColor: "cyan-950", + OuterLeftLabel: "responseCode", + InnerLabel: mappingEntity.TargetHttpResponseCode.String(), + }) + } + case "response-code": + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterBackgroundColor: "cyan-950", + OuterLeftLabel: "responseCode", + InnerLabel: mappingEntity.TargetHttpResponseCode.String(), + }) + case "inline-html": + {{ inlineHtmlValue := mappingEntity.TargetValue.String() }} + if len(mappingEntity.TargetValue.String()) > 50 { + {{ inlineHtmlValue = mappingEntity.TargetValue.String()[:50] + "..." }} + } + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterBackgroundColor: "stone-700", + OuterLeftLabel: "inlineHtml", + InnerLabel: inlineHtmlValue, + }) + case "static-files": + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterBackgroundColor: "yellow-700", + OuterLeftLabel: "staticFiles", + InnerLabel: rootDirectory.String(), + }) + } + if mappingEntity.MatchPattern != valueObject.MappingMatchPatternBeginsWith { + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterRingColor: "neutral-400", + OuterRingThickness: uiDisplay.TagRingThicknessXs, + OuterBackgroundColor: "transparent", + OuterTextColor: "neutral-400", + OuterLeftIcon: "ph-map-pin", + InnerLabel: mappingEntity.MatchPattern.String(), + }) + } + if mappingEntity.MarketplaceInstalledItemName != nil { + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterRingColor: "amber-500", + OuterRingThickness: uiDisplay.TagRingThicknessXs, + OuterBackgroundColor: "transparent", + OuterTextColor: "amber-500", + OuterLeftIcon: "ph-storefront", + InnerLabel: mappingEntity.MarketplaceInstalledItemName.String() + " (#" + mappingEntity.MarketplaceInstalledItemId.String() + ")", + }) + } + if mappingEntity.ShouldUpgradeInsecureRequests != nil && *mappingEntity.ShouldUpgradeInsecureRequests { + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterRingColor: "lime-700", + OuterRingThickness: uiDisplay.TagRingThicknessXs, + OuterBackgroundColor: "transparent", + OuterTextColor: "lime-700", + OuterLeftIcon: "ph-lock", + InnerLabel: "httpsOnly", + }) + } + if mappingEntity.MappingSecurityRuleId != nil { + @uiDisplay.Tag(uiDisplay.TagSettings{ + Size: uiDisplay.TagSizeXs, + OuterRingColor: "red-600", + OuterRingThickness: uiDisplay.TagRingThicknessXs, + OuterBackgroundColor: "transparent", + OuterTextColor: "red-600", + OuterLeftIcon: "ph-shield", + InnerLabel: "#" + mappingEntity.MappingSecurityRuleId.String(), + }) + } +
    +
    + @componentStructural.CircularIconButtonWithTooltip( + "ph-pencil", "neutral-50/10", "neutral-50/30", + "openUpdateMappingModal('"+mappingEntity.Id.String()+"')", "update", + "neutral-50/10", + ) + @componentStructural.CircularIconButtonWithTooltip( + "ph-trash", "red-800", "red-600", + "openDeleteMappingModal('"+mappingEntity.Id.String()+"', '"+mappingEntity.Path.String()+"')", + "delete", "red-500", + )
    } diff --git a/src/presentation/ui/component/misc/progressBar.templ b/src/presentation/ui/component/misc/progressBar.templ index 179bc5792..440cfb341 100644 --- a/src/presentation/ui/component/misc/progressBar.templ +++ b/src/presentation/ui/component/misc/progressBar.templ @@ -21,13 +21,21 @@ func progressBarCssClassesFactory(completionRate uint8) string { return baseClasses + " " + bgClass } -templ ProgressBar(completionRate uint8, label string) { -
    - if label != "" { -
    - { label } +type ProgressBarInputDto struct { + ComponentColor string + CompletionRate uint8 + Label string + LabelBackgroundColor string +} + +templ ProgressBar(inputDto ProgressBarInputDto) { + +
    + if inputDto.Label != "" { +
    + { inputDto.Label }
    } -
    +
    } diff --git a/src/presentation/ui/component/structural/deleteModal.templ b/src/presentation/ui/component/structural/deleteModal.templ index f468c68d9..2b4fc808b 100644 --- a/src/presentation/ui/component/structural/deleteModal.templ +++ b/src/presentation/ui/component/structural/deleteModal.templ @@ -2,7 +2,7 @@ package componentStructural templ DeleteCriticalContent(elNameStatePath, elIdStatePath string) {

    - Are you sure you want to delete + Are you sure you want to delete? if elNameStatePath != "" { ? }

    -

    This process cannot be undone. This will permanently delete the element.

    +

    This process cannot be undone. This will permanently delete the element(s).

    } templ DeleteModal( diff --git a/src/presentation/ui/component/structural/modal.templ b/src/presentation/ui/component/structural/modal.templ index 74fd9f047..e77924031 100644 --- a/src/presentation/ui/component/structural/modal.templ +++ b/src/presentation/ui/component/structural/modal.templ @@ -1,7 +1,7 @@ package componentStructural -templ Modal(title, isOpenState, closeModalFunction, elementIdStatePath string) { - +templ RegularModal(title, isOpenState, closeModalFunction, elementIdStatePath string) { +
    -
    + {{ regularModalClasses := "'bg-os-400 relative rounded-md p-6 drop-shadow-xl'" }} + {{ regularModalClasses += "+ (isFullScreenActive ? ' w-full h-full' : ' max-w-3/5 mx-auto mt-20 xl:mt-24 xl:max-w-3xl')" }} +

    { title } @@ -20,13 +22,23 @@ templ Modal(title, isOpenState, closeModalFunction, elementIdStatePath string) { # }

    -
    - +
    +
    + @CircularIconButtonWithTooltip( + "ph-arrows-out", "os-200", "os-100", + "isFullScreenActive = true", "", "", + ) +
    +
    + @CircularIconButtonWithTooltip( + "ph-arrows-in", "os-200", "os-100", + "isFullScreenActive = false", "", "", + ) +
    + @CircularIconButtonWithTooltip( + "ph-x", "os-200", "os-100", + closeModalFunction+"; setTimeout(() => isFullScreenActive = false, 150)", "", "", + )
    { children... } diff --git a/src/presentation/ui/component/structural/pageSubHeading.templ b/src/presentation/ui/component/structural/pageSubHeading.templ new file mode 100644 index 000000000..e2f0b8157 --- /dev/null +++ b/src/presentation/ui/component/structural/pageSubHeading.templ @@ -0,0 +1,14 @@ +package componentStructural + +templ PageSubHeading(subHeading string, description string, icon string) { + +
    + + +

    { subHeading }

    +
    + if description != "" { +

    { description }

    + } +
    +} diff --git a/src/presentation/ui/component/structural/pageTitle.templ b/src/presentation/ui/component/structural/pageTitle.templ index 339164131..36c49359f 100644 --- a/src/presentation/ui/component/structural/pageTitle.templ +++ b/src/presentation/ui/component/structural/pageTitle.templ @@ -2,11 +2,11 @@ package componentStructural templ PageTitle(pageName string, pageDescription string, pageIcon string) { -
    - - +
    + +

    { pageName }

    -

    { pageDescription }

    +

    { pageDescription }

    } diff --git a/src/presentation/ui/component/structural/pagination.templ b/src/presentation/ui/component/structural/pagination.templ new file mode 100644 index 000000000..c987600a8 --- /dev/null +++ b/src/presentation/ui/component/structural/pagination.templ @@ -0,0 +1,86 @@ +package componentStructural + +import ( + "github.com/goinfinite/os/src/domain/dto" + componentForm "github.com/goinfinite/os/src/presentation/ui/component/form" + "strconv" +) + +func readPaginationPageNumbers(paginationDto dto.Pagination) []int { + currentPageNumber := int(paginationDto.PageNumber) + sidePageCount := 2 + countStart := currentPageNumber - sidePageCount + countEnd := currentPageNumber + sidePageCount + if countStart < 0 { + countStart = 0 + countEnd = countStart + sidePageCount*2 + } + + if paginationDto.PagesTotal == nil { + return []int{0} + } + + pagesTotal := int(*paginationDto.PagesTotal) + if countEnd >= pagesTotal { + countEnd = pagesTotal - 1 + countStart = countEnd - sidePageCount*2 + } + + if countStart < 0 { + countStart = 0 + } + + pageNumbers := []int{} + for i := countStart; i <= countEnd; i++ { + pageNumbers = append(pageNumbers, i) + } + + return pageNumbers +} + +templ Pagination( + componentId string, + paginationDto dto.Pagination, + selectedPageNumberBindValuePath, selectedItemsPerPageBindValuePath string, +) { + +
    +
    + if paginationDto.PageNumber > 0 { + + + + } + for pageNumber := range readPaginationPageNumbers(paginationDto) { + + { strconv.Itoa(pageNumber) } + + } + if paginationDto.PagesTotal != nil && paginationDto.PageNumber < *paginationDto.PagesTotal-1 { + + + + } +
    +
    + @componentForm.SelectInput( + "itemsPerPage", "items per page", selectedItemsPerPageBindValuePath, + "$dispatch('update:"+componentId+"-pagination')", + []string{"5", "10", "30", "50"}, false, + ) +
    +
    +} diff --git a/src/presentation/ui/component/structural/portBindingsTable.templ b/src/presentation/ui/component/structural/portBindingsTable.templ new file mode 100644 index 000000000..f4034f17b --- /dev/null +++ b/src/presentation/ui/component/structural/portBindingsTable.templ @@ -0,0 +1,42 @@ +package componentStructural + +import ( + "github.com/goinfinite/os/src/domain/valueObject" + "strconv" +) + +templ PortBindingsTable(portBindings []valueObject.PortBinding) { +
    + + + + + + + + + for bindingIndex, portBinding := range portBindings { + + + + + } + +
    PortProtocol
    { portBinding.Port.String() }{ portBinding.Protocol.String() }
    + if len(portBindings) > 5 { + + } +
    +} diff --git a/src/presentation/ui/component/structural/recordFilters.templ b/src/presentation/ui/component/structural/recordFilters.templ new file mode 100644 index 000000000..aab23a2c1 --- /dev/null +++ b/src/presentation/ui/component/structural/recordFilters.templ @@ -0,0 +1,80 @@ +package componentStructural + +templ RecordFilters(componentId, filtersBindPath string) { + +
    +
    + +
    + + + +
    +} diff --git a/src/presentation/ui/component/structural/responsibleRoundedSquareButton.templ b/src/presentation/ui/component/structural/responsibleRoundedSquareButton.templ new file mode 100644 index 000000000..3d3cd8882 --- /dev/null +++ b/src/presentation/ui/component/structural/responsibleRoundedSquareButton.templ @@ -0,0 +1,43 @@ +package componentStructural + +type ResponsibleRoundedSquareButtonDto struct { + Icon string + Description string + DefaultColor string + HoverColor string + OnClick string + HideTextBelowBreakpoint string + DeactivateButtonCondition string +} + +templ ResponsibleRoundedSquareButton(inputDto ResponsibleRoundedSquareButtonDto) { + +
    + {{ + bindButtonClasses := "'inline-flex items-center gap-1.5 px-3 py-2 rounded-md bg-" + inputDto.DefaultColor + " text-center'" + bindIconClasses := "'ph-duotone " + inputDto.Icon + " text-xl'" + bindDescriptionClasses := "'font-medium max-" + inputDto.HideTextBelowBreakpoint + ":hidden'" + if inputDto.DeactivateButtonCondition != "" { + bindButtonClasses += "+ (" + inputDto.DeactivateButtonCondition + " ? '' : ' hover:bg-" + inputDto.HoverColor + "')" + bindIconClasses += "+ (" + inputDto.DeactivateButtonCondition + " ? ' text-gray-500' : '')" + bindDescriptionClasses += "+ (" + inputDto.DeactivateButtonCondition + " ? ' text-gray-500' : '')" + } else { + bindButtonClasses += " + ' hover:bg-" + inputDto.HoverColor + "'" + } + }} + +
    +} diff --git a/src/presentation/ui/component/structural/roundedSquareButton.templ b/src/presentation/ui/component/structural/roundedSquareButton.templ new file mode 100644 index 000000000..85956f776 --- /dev/null +++ b/src/presentation/ui/component/structural/roundedSquareButton.templ @@ -0,0 +1,25 @@ +package componentStructural + +type RoundedSquareButtonDto struct { + Icon string + TooltipText string + DefaultColor string + HoverColor string + OnClick string +} + +templ RoundedSquareButton(buttonDto RoundedSquareButtonDto) { + +
    + +
    +} diff --git a/src/presentation/ui/component/structural/tabHeader.templ b/src/presentation/ui/component/structural/tabHeader.templ index 92bca1c71..46df5070a 100644 --- a/src/presentation/ui/component/structural/tabHeader.templ +++ b/src/presentation/ui/component/structural/tabHeader.templ @@ -32,7 +32,7 @@ templ VerticalTabHeader( bindValuePath string, ) { -
      +
        for _, item := range tabHeaderItems {
      • } + +type TagWithFilterDto struct { + HighlightedIcon string + HighlightedLabel string + TagValue string + TagColor string + FilterValue string + FilterBindPath string +} + +templ TagWithFilter(tagWithFilterDto TagWithFilterDto) { + +
        +
        +
        + if tagWithFilterDto.HighlightedIcon != "" { + + } + if tagWithFilterDto.HighlightedLabel != "" { + { tagWithFilterDto.HighlightedLabel } + } +
        +
        + + @templ.Raw(tagWithFilterDto.TagValue) + + +
        +} + +type TinyTagDto struct { + HighlightedIcon string + HighlightedLabel string + TagValue string + TagColor string +} + +templ TinyTag(tinyTagDto TinyTagDto) { + +
        +
        +
        + if tinyTagDto.HighlightedIcon != "" { + + } + if tinyTagDto.HighlightedLabel != "" { + { tinyTagDto.HighlightedLabel } + } +
        +
        + + @templ.Raw(tinyTagDto.TagValue) + +
        +} diff --git a/src/presentation/ui/component/structural/warningModal.templ b/src/presentation/ui/component/structural/warningModal.templ index 385784be1..8b71477e3 100644 --- a/src/presentation/ui/component/structural/warningModal.templ +++ b/src/presentation/ui/component/structural/warningModal.templ @@ -2,7 +2,7 @@ package componentStructural templ WarningModal( isOpenState, closeFunction, declineButtonLabel, confirmFunction, confirmButtonId, - confirmButtonIcon, confirmButonLabel string, + confirmButtonIcon, confirmButtonLabel string, ) {
        - { confirmButonLabel } + { confirmButtonLabel }
    diff --git a/src/presentation/ui/component/util/loadingOverlay.templ b/src/presentation/ui/component/util/loadingOverlay.templ deleted file mode 100644 index fd11758e4..000000000 --- a/src/presentation/ui/component/util/loadingOverlay.templ +++ /dev/null @@ -1,13 +0,0 @@ -package componentUtil - -templ LoadingOverlay() { - - - - -} diff --git a/src/presentation/ui/component/util/toast.templ b/src/presentation/ui/component/util/toast.templ deleted file mode 100644 index c222efa08..000000000 --- a/src/presentation/ui/component/util/toast.templ +++ /dev/null @@ -1,78 +0,0 @@ -package componentUtil - -script ToastGlobalState() { - document.addEventListener('alpine:init', () => { - Alpine.store('toast', { - toastVisible: false, - toastMessage: '', - toastType: 'danger', - - displayToast(message, type) { - this.toastVisible = true; - this.toastMessage = message; - this.toastType = type; - setTimeout(() => {this.clearToast()}, 3000); - }, - - clearToast() { - this.toastVisible = false; - this.toastMessage = ''; - } - }); - }); - - document.addEventListener('htmx:afterRequest', (event) => { - const httpResponseObject = event.detail.xhr; - - const contentType = httpResponseObject.getResponseHeader("Content-Type"); - if (contentType !== 'application/json') { - return; - } - - const responseData = httpResponseObject.responseText; - if (responseData === '') { - return; - } - - let toastType = 'success'; - const isResponseError = httpResponseObject.status >= 400; - if (isResponseError) { - toastType = 'danger'; - } - - const parsedResponse = JSON.parse(responseData); - if (parsedResponse.body === undefined || parsedResponse.body === '') { - return; - } - const toastMessage = parsedResponse.body; - - Alpine.store('toast').displayToast(toastMessage, toastType); - }); -} - -templ Toast() { - - @ToastGlobalState() - - -} diff --git a/src/presentation/ui/dist/assets/os-logo-dark.svg b/src/presentation/ui/dist/assets/os-logo-dark.svg deleted file mode 100644 index e88560911..000000000 --- a/src/presentation/ui/dist/assets/os-logo-dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/presentation/ui/dist/assets/os-logo-light.svg b/src/presentation/ui/dist/assets/os-logo-light.svg deleted file mode 100644 index 635a76854..000000000 --- a/src/presentation/ui/dist/assets/os-logo-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/presentation/ui/dist/assets/sos-coloured-logo-128.png b/src/presentation/ui/dist/assets/sos-coloured-logo-128.png deleted file mode 100644 index 66909b4d9..000000000 Binary files a/src/presentation/ui/dist/assets/sos-coloured-logo-128.png and /dev/null differ diff --git a/src/presentation/ui/dist/css/381.451ac5f1.css b/src/presentation/ui/dist/css/381.451ac5f1.css deleted file mode 100644 index a74299794..000000000 --- a/src/presentation/ui/dist/css/381.451ac5f1.css +++ /dev/null @@ -1 +0,0 @@ -.marketplace-table .q-table__top{padding-left:0;padding-right:0}.marketplace-align-cards{-moz-column-gap:1rem;column-gap:1rem;flex:1 1 auto;justify-content:space-between;row-gap:1rem}.marketplace-col-app{min-width:350px;width:40%}@media screen and (max-width:1280px){.marketplace-col-app{width:49%}}.body--light .default-chip-text{color:#c97350}.body--dark .default-chip-text{color:#fff}.td-main-avatar{border-radius:50%;height:40px;width:40px}.td-main-app-name{font-size:1.2135rem;font-weight:700;margin-left:12px}.on-left{margin-right:8px}.marketplace-table-th{background:transparent!important;text-align:center;width:auto}.marketplace-table-th,.marketplace-table-th-main{font-size:14px!important;font-weight:700!important}.marketplace-table-th-main{background:#c97350!important;color:#fff!important;text-align:left;width:30%}.body--dark .generator-password-color[data-v-617700b8]{color:#fff}.body--light .generator-password-color[data-v-617700b8]{color:#c97350}.marketplace-data-fields-box{background:rgba(233,236,241,.1);border:1px solid #eee;margin:4px;padding:12px 8px}.body--dark .marketplace-data-fields-box{background:rgba(0,0,0,.1);border:1px solid #616161}.body--light .bg-card{background-color:#def3fa}.marketplace-tabs .q-tab__label{font-size:1.618rem}.marketplace-tabs .q-tab__icon{font-size:32px;height:32px;width:32px}.marketplace-tabs .q-tab--active .q-tab__label{font-weight:700}.marketplace-tabs .q-tab__content{padding:16px 0}.marketplace-tabs .q-tab-panel{padding:16px 36px} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/437.c31f08a2.css b/src/presentation/ui/dist/css/437.c31f08a2.css deleted file mode 100644 index 7a6cb85cd..000000000 --- a/src/presentation/ui/dist/css/437.c31f08a2.css +++ /dev/null @@ -1 +0,0 @@ -.refresh-rate-select{padding-bottom:0!important;width:150px}.top-bar-text{color:#171717}.body--dark .top-bar-text{color:#fff}.icon-menu-bg{background-color:rgba(0,0,0,.25)}.q-drawer__content{overflow:hidden!important}.q-drawer--mini{min-width:64px}.body--light .q-drawer--mini{background-color:#def3fa;color:#000}.body--dark .q-drawer--mini{background-color:rgba(0,0,0,.4)}.body--light .q-footer[data-v-12090e64]{background-color:#def3fa;color:#000}.body--dark .q-footer[data-v-12090e64]{background-color:#030a0f} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/506.bc12730f.css b/src/presentation/ui/dist/css/506.bc12730f.css deleted file mode 100644 index bd42b6c58..000000000 --- a/src/presentation/ui/dist/css/506.bc12730f.css +++ /dev/null @@ -1 +0,0 @@ -.on-left{margin-right:8px}.body--dark .generator-password-color[data-v-617700b8]{color:#fff}.body--light .generator-password-color[data-v-617700b8]{color:#c97350}.box-api-key{background:#e0e0e0;border-radius:5px;margin-bottom:20px;min-height:75px;padding:10px}.icon-copy-api-key{color:#212121}.body--dark .box-api-key{background:#3b3c40}.body--dark .icon-copy-api-key{color:#fff}.body--light .bg-card{background-color:#def3fa} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/517.295044ed.css b/src/presentation/ui/dist/css/517.295044ed.css deleted file mode 100644 index 272401c9c..000000000 --- a/src/presentation/ui/dist/css/517.295044ed.css +++ /dev/null @@ -1 +0,0 @@ -.on-left{margin-right:8px}.body--dark .generator-password-color[data-v-617700b8]{color:#fff}.body--light .generator-password-color[data-v-617700b8]{color:#c97350}.box-api-key{word-wrap:break-word!important;background:#e0e0e0;border-radius:5px;margin-bottom:20px;min-height:75px;padding:10px;text-overflow:clip!important;white-space:normal!important;word-spacing:.1324rem}.icon-copy-api-key{color:#212121}.body--dark .box-api-key{background:#3b3c40}.body--dark .icon-copy-api-key{color:#fff} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/628.203c03df.css b/src/presentation/ui/dist/css/628.203c03df.css deleted file mode 100644 index 479f3dae2..000000000 --- a/src/presentation/ui/dist/css/628.203c03df.css +++ /dev/null @@ -1 +0,0 @@ -.on-left{margin-right:8px}.php-options-select{min-width:310px}.php-options-select .q-field__label{font-size:1.1326rem}.php-tabs .q-tab__label{font-size:.9rem}.php-tabs .q-tab--active .q-tab__label{font-weight:700}.php-tabs .q-tab__content{padding:16px 0}.php-tabs .q-tab-panel{padding:16px 36px}.runtime-tabs .q-tab__label{font-size:1.618rem}.runtime-tabs .q-tab__icon{font-size:32px;height:32px;width:32px}.runtime-tabs .q-tab--active .q-tab__label{font-weight:700}.runtime-tabs .q-tab__content{padding:16px 0}.runtime-tabs .q-tab-panel{padding:16px 36px} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/646.2d094734.css b/src/presentation/ui/dist/css/646.2d094734.css deleted file mode 100644 index 4bf5cbc54..000000000 --- a/src/presentation/ui/dist/css/646.2d094734.css +++ /dev/null @@ -1 +0,0 @@ -.body--light .default-chip-text{color:#c97350}.body--dark .default-chip-text{color:#fff}.on-left{margin-right:8px} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/664.0514e9c1.css b/src/presentation/ui/dist/css/664.0514e9c1.css deleted file mode 100644 index 19588a18b..000000000 --- a/src/presentation/ui/dist/css/664.0514e9c1.css +++ /dev/null @@ -1 +0,0 @@ -.on-left{margin-right:8px}.body--light .bg-card{background-color:#def3fa}.file-manager-editor-toolbar{border-radius:8px}.body--light .file-manager-editor-toolbar{background:#eee}.body--dark .file-manager-editor-toolbar{background:transparent}.file-manager-box-selected-path{border-radius:8px;height:150px;line-height:.7rem;overflow-y:auto;padding:10px 20px}.body--light .file-manager-toolbar-bg{background:#c2e6f3;color:#c97350}.body--dark .file-manager-toolbar-bg{background:#071a26;color:#dedede}.file-manager-menu{margin-top:10px}.file-manager-menu .q-item__section--avatar{min-width:25px}.file-manager-td-user{word-wrap:break-word;text-overflow:clip;white-space:normal!important;width:250px}.bg-row-active{background:rgba(201,115,80,.2)}.body--light .file-manager-table-th-bg{background:#c2e6f3}.body--dark .file-manager-table-th-bg{background:#071a26} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/693.e6ad8e07.css b/src/presentation/ui/dist/css/693.e6ad8e07.css deleted file mode 100644 index 3c636b03c..000000000 --- a/src/presentation/ui/dist/css/693.e6ad8e07.css +++ /dev/null @@ -1 +0,0 @@ -.on-left{margin-right:8px}.body--light .bg-card{background-color:#def3fa}.body--dark .generator-password-color[data-v-617700b8]{color:#fff}.body--light .generator-password-color[data-v-617700b8]{color:#c97350}.databases-label-expansion-item .q-item__label{font-size:1.1rem;font-weight:700}.databases-space-35{flex-basis:35%}.databases-th-font{font-size:14px!important;font-weight:700!important}.databases-th-bg{background:#c97350}.databases-th-bg th.databases-th-font{color:#fff!important}.databases-tabs .q-tab__label{font-size:1.618rem}.databases-tabs .q-tab__icon{font-size:32px;height:32px;width:32px}.databases-tabs .q-tab--active .q-tab__label{font-weight:700}.databases-tabs .q-tab__content{padding:16px 0}.databases-tabs .q-tab-panel{padding:16px 36px} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/755.25177ab5.css b/src/presentation/ui/dist/css/755.25177ab5.css deleted file mode 100644 index 0812e70cf..000000000 --- a/src/presentation/ui/dist/css/755.25177ab5.css +++ /dev/null @@ -1 +0,0 @@ -.vhost-card-title{word-wrap:break-word!important;height:auto;white-space:normal!important;width:85%}.vhost-card{height:200px!important;margin-bottom:8px;margin-top:8px}.card-section-vhost{padding:8px 0}.body--light .default-chip-text{color:#c97350}.body--dark .default-chip-text{color:#fff}.body--light .mappings-td-card-bg{background-color:rgba(0,0,0,.1)}.body--dark .mappings-td-card-bg{background-color:hsla(0,0%,39%,.25)}.on-left{margin-right:8px}.virtual-hosts-td-main{padding:0 6px!important;width:300px}.body--light .virtual-hosts-td-main{border-right:1px solid #cdcfd4}.body--dark .virtual-hosts-td-main{border-right:1px solid #55575a}.body--light .bg-card{background-color:#def3fa} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/870.f35f2e51.css b/src/presentation/ui/dist/css/870.f35f2e51.css deleted file mode 100644 index 5061acb2e..000000000 --- a/src/presentation/ui/dist/css/870.f35f2e51.css +++ /dev/null @@ -1 +0,0 @@ -.body--light .default-chip-text{color:#c97350}.body--dark .default-chip-text{color:#fff}.td-main-avatar{border-radius:50%;height:40px;width:40px}.td-main-app-name{font-size:1.2135rem;font-weight:700;margin-left:12px}.on-left{margin-right:8px}.marketplace-table-th{background:transparent!important;text-align:center;width:auto}.marketplace-table-th,.marketplace-table-th-main{font-size:14px!important;font-weight:700!important}.marketplace-table-th-main{background:#c97350!important;color:#fff!important;text-align:left;width:30%}.body--light .bg-card{background-color:#def3fa}.bg-app-slide{background:rgba(0,0,0,.3);border-radius:8px;cursor:pointer;height:auto;margin:0 8px;text-align:center;width:125px}.bg-app-slide:hover{background:rgba(201,115,80,.2)}.bg-app-slide.active{background:rgba(201,115,80,.3);border:1px solid #c97350}.body--dark .bg-app-slide{background:rgba(0,0,0,.2);border-radius:8px;cursor:pointer;height:auto;margin:0 8px;text-align:center;width:125px}.body--dark .bg-app-slide:hover{background:rgba(233,236,241,.1)}.body--dark .bg-app-slide.active{background:rgba(233,236,241,.1);border:1px solid #fff}.body--dark .generator-password-color[data-v-617700b8]{color:#fff}.body--light .generator-password-color[data-v-617700b8]{color:#c97350}.marketplace-data-fields-box{background:rgba(233,236,241,.1);border:1px solid #eee;margin:4px;padding:12px 8px}.body--dark .marketplace-data-fields-box{background:rgba(0,0,0,.1);border:1px solid #616161}.home-system-info-table-td{word-wrap:break-word!important;max-width:200px;text-overflow:clip!important;white-space:normal!important}.body--light .system-info-text-chip{color:#c97350}.body--dark .system-info-text-chip{color:#fff}.overview-system-info-table{width:28%}.overview-resources-chart{border:1px solid #e0d8ce;border-radius:5px;padding-left:12px;width:70%}@media screen and (max-width:600px){.overview-system-info-table{width:100%}.overview-disk-usage,.overview-resources-chart{padding-left:0;width:100%}.overview-disk-usage{padding-top:0}}@media screen and (max-width:1440px){.overview-system-info-table{width:38%}.overview-resources-chart{padding-left:12px;width:60%}}.body--dark .overview-resources-chart{border:1px solid #4c5a62}.body--light .services-status-text-chip{color:#c97350}.body--dark .services-status-text-chip{color:#fff}.services-table-th{cursor:pointer;font-size:.809rem!important;font-weight:700!important;text-align:center}.port-bindings-bg{background-color:rgba(0,0,0,.1)}.body--dark .port-bindings-bg{background-color:#f5f5f510}.service-tab-custom-box{border:1px solid hsla(0,0%,100%,.1);border-radius:5px;margin:0 0 30px;padding:25px}.startup-file-box{border:1px solid #c97350}.body--dark .startup-file-box{border:1px solid #4b575e}.services-tab-installable-icon .q-item__section--avatar{min-width:0!important}.overview-services-tabs .q-tab__label{font-size:.9rem}.overview-services-tabs .q-tab--active .q-tab__label{font-weight:700}.overview-services-tabs .q-tab__content{padding:16px 0}.overview-services-tabs .q-tab-panel{padding:16px 36px} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/915.dd13f0d1.css b/src/presentation/ui/dist/css/915.dd13f0d1.css deleted file mode 100644 index c0831c01c..000000000 --- a/src/presentation/ui/dist/css/915.dd13f0d1.css +++ /dev/null @@ -1 +0,0 @@ -.on-left{margin-right:8px}.cron-table-td-command{word-wrap:break-word;text-overflow:clip;white-space:normal!important}.shadow-primary{box-shadow:0 0 8px 2px #f39d4d!important}.cron-tabs .q-tab__label{font-size:.9rem}.cron-tabs .q-tab--active .q-tab__label{font-weight:700}.cron-tabs .q-tab__content{padding:16px 0}.cron-tabs .q-tab-panel{padding:16px 36px}.body--light .bg-card{background-color:#def3fa} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/app.5c00cfe6.css b/src/presentation/ui/dist/css/app.5c00cfe6.css deleted file mode 100644 index bd15af75c..000000000 --- a/src/presentation/ui/dist/css/app.5c00cfe6.css +++ /dev/null @@ -1 +0,0 @@ -:root{--heading-font:"Julius Sans One",sans-serif;--body-font:"Lato",sans-serif}h1,h2,h3,h4,h5,h6{font-family:var(--heading-font);text-shadow:-1px 0 0 #fff;word-spacing:-.1618rem}h1{font-size:3.236rem}h2{font-size:2.427rem}h3{font-size:2.023rem}h4{font-size:1.82rem}h5{font-size:1.618rem}h6{font-size:1.2135rem}.border-radius-xs{border-radius:.3236rem}.border-radius-sm{border-radius:.6472rem}.border-radius-md{border-radius:.9708rem}.border-radius-lg{border-radius:1.2944rem}.border-radius-xl{border-radius:1.618rem}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb{background:rgba(201,115,80,.8)}::-webkit-scrollbar-thumb:hover{background:#c97350}.title-h4{font-size:1.82rem}.title-h4,.title-h6{font-family:var(--heading-font);font-weight:500;text-shadow:-1px 0 0 #fff}.title-h6{font-size:1.2135rem}.title-dialog{font-family:var(--heading-font);font-size:1.618rem;font-weight:900;text-shadow:-1px 0 0 #fff}.title-dialog.text-negative{text-shadow:-1px 0 0 #894242}.dialog-info{font-size:.85rem;font-weight:200;opacity:.8}.th-custom-component{cursor:pointer}.th-custom-component span{word-wrap:break-word!important;font-size:14px;font-weight:700;white-space:normal!important}.icon-sort{margin-left:5px;visibility:hidden}.th-custom-component:hover .icon-sort{visibility:visible}.dialog-card-bg{border-radius:16px;padding:12px 16px}body.body--light{background-color:#c2e6f3;font-family:var(--body-font)}.body--light .title-h4,.body--light .title-h6,.body--light h6{text-shadow:-1px 0 0 #000}.body--light .td-main-table{background:rgba(0,0,0,.1)!important}.body--light .td-action-bg-15{background-color:rgba(0,0,0,.15)}.body--light .td-action-bg-20{background-color:rgba(0,0,0,.2)}.body--light .td-action-bg-25{background-color:rgba(0,0,0,.25)}.body--light .td-action-bg-30{background-color:rgba(0,0,0,.3)}.body--light .title-dialog{color:#c97350;text-shadow:-1px 0 0 #c97350}.body--light .q-field--filled .q-field__control{background-color:rgba(0,0,0,.1)}.body--light .q-card{background-color:#def3fa}.body--light .q-menu{background-color:#c2e6f3}.body--light .q-tab-panel,.body--light .q-table__card{background-color:#def3fa}.body--light .q-expansion-item .q-item{background-color:rgba(0,0,0,.1)}.body--light .dialog-info{background-color:#fef08a}body.body--dark{background-color:#071a26;font-family:var(--body-font)}.body--dark .td-main-table{background:rgba(0,0,0,.1)}.body--dark .td-action-bg-15{background-color:rgba(233,236,241,.15)}.body--dark .td-action-bg-20{background-color:rgba(233,236,241,.2)}.body--dark .td-action-bg-25{background-color:rgba(233,236,241,.25)}.body--dark .td-action-bg-30{background-color:rgba(233,236,241,.3)}.body--dark .q-card{background-color:#061620}.body--dark .q-menu--dark,.body--dark .q-table__card{background-color:#071a26}.body--dark .q-tab-panels--dark{background-color:#061620}.body--dark .q-field--error .q-field__label,.body--dark .q-field__messages{color:#fff}.body--dark .dialog-info{background-color:#164e63} \ No newline at end of file diff --git a/src/presentation/ui/dist/css/vendor.764141f0.css b/src/presentation/ui/dist/css/vendor.764141f0.css deleted file mode 100644 index 080c953ec..000000000 --- a/src/presentation/ui/dist/css/vendor.764141f0.css +++ /dev/null @@ -1,12 +0,0 @@ -@charset "UTF-8";@font-face{font-display:block;font-family:Material Symbols Sharp;font-style:normal;font-weight:100 700;src:url(../fonts/gNMVW2J8Roq16WD5tFNRaeLQk6-SHQ_R00k4aWHSSmlN.72e220e1.woff2) format("woff2"),url(../fonts/gNNBW2J8Roq16WD5tFNRaeLQk6-SHQ_R00k4c2_whPnoY9ruReaU4bHmz74m0ZkGH-VBYe1x0TV6x4yFH8F-H_OdzEL3sVTgJtfbYxOLozCN.b713defd.woff) format("woff")}.material-symbols-sharp{word-wrap:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga";direction:ltr;display:inline-block;font-family:Material Symbols Sharp;font-style:normal;font-weight:400;letter-spacing:normal;line-height:1;text-rendering:optimizeLegibility;text-transform:none;white-space:nowrap} - -/*! - * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2023 Fonticons, Inc. - */.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:Font Awesome\ 6 Free}.fa-brands,.fab{font-family:Font Awesome\ 6 Brands}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);line-height:inherit;position:absolute;text-align:center;width:var(--fa-li-width,2em)}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-beat;animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-bounce;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-fade;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-beat-fade;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-flip;animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-shake;animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-spin;animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-spin;animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}24%,8%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-display:block;font-family:Font Awesome\ 6 Brands;font-style:normal;font-weight:400;src:url(../fonts/fa-brands-400.e033a13e.woff2) format("woff2"),url(../fonts/fa-brands-400.150de8ea.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:400;src:url(../fonts/fa-regular-400.3223dc79.woff2) format("woff2"),url(../fonts/fa-regular-400.d8747423.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:900;src:url(../fonts/fa-solid-900.bb975c96.woff2) format("woff2"),url(../fonts/fa-solid-900.4a2cd718.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-display:block;font-family:Font Awesome\ 5 Brands;font-weight:400;src:url(../fonts/fa-brands-400.e033a13e.woff2) format("woff2"),url(../fonts/fa-brands-400.150de8ea.ttf) format("truetype")}@font-face{font-display:block;font-family:Font Awesome\ 5 Free;font-weight:900;src:url(../fonts/fa-solid-900.bb975c96.woff2) format("woff2"),url(../fonts/fa-solid-900.4a2cd718.ttf) format("truetype")}@font-face{font-display:block;font-family:Font Awesome\ 5 Free;font-weight:400;src:url(../fonts/fa-regular-400.3223dc79.woff2) format("woff2"),url(../fonts/fa-regular-400.d8747423.ttf) format("truetype")}@font-face{font-display:block;font-family:FontAwesome;src:url(../fonts/fa-solid-900.bb975c96.woff2) format("woff2"),url(../fonts/fa-solid-900.4a2cd718.ttf) format("truetype")}@font-face{font-display:block;font-family:FontAwesome;src:url(../fonts/fa-brands-400.e033a13e.woff2) format("woff2"),url(../fonts/fa-brands-400.150de8ea.ttf) format("truetype")}@font-face{font-display:block;font-family:FontAwesome;src:url(../fonts/fa-regular-400.3223dc79.woff2) format("woff2"),url(../fonts/fa-regular-400.d8747423.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-display:block;font-family:FontAwesome;src:url(data:font/woff2;base64,d09GMgABAAAAABHUAAoAAAAAJIQAABGMAwQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgCJAQgBmADgRwAghzKugDLUAWJAAcghUESEVW1HwKgkbJw/n4/vXP/nTNtZjJpMpM2TQbovVQCGbgGJTQBzxPzPjHvGu/58taUFfOsypd+seZl/Sv1/z+ddp8k9PnSlwQuKOnfYIzTgCAQLim1zoAdxiYFMUZTumdV+qrWvvWZVa2r5P/mSn8FchWGR4mWZYXsq69Qf2YWZuEgW0qJd/coOeBkDrMlRLfJEWa3hEKeLBBrliSMrhC6zvQx3Pe3vahLgyGCEt6PcAABSmWEH/7kFxtXyLX/QIX8DwAr7R59TfCpN8rJAHMAMAHEDseWg/koByADAAByIjb1N6ZLO2l4BBjDLxVk1WX8OW6DAYCn4nUAcEK6pP/AOLwUgIBRQjozuvh1jrrgnNMgHx71z4foGIs5ZHRVAoDL+C4AaAHg4GdvBIpiXl3XZwbK2yIZwE5hWI7P75IBpHl8YvnxWYFkoEkGbBumMaujOAg8LSNV0hIA1KFE2p+6OpTRBIANaEEZJodHDU8YXjd8bDgYPjN8frg9fMPwg8MPDz8+/Mnwp8PfDv+6V9kL9zb2Tto7de/8vcv3rty7eu+BvVfv/f+f4/98aDQCGB41PGF47fBRHE2sZif21d+7eu/eH1rm8gvyLfJJ+YR8VD4sH5J3yr68Ql4qN+WKPCwjycU/xc/Fj8UPxTfEl8QXxRfE+8Xz4pCwnQ/KucC/NQoDYJTjAHOowxjsgxZMAWC7w6hfrasgbi+kSa+6qKOQVXXKdCxJtUnCFPtFLjjnXGCWDql18cWDiz95cXTxxdHFn7wYc85FUd0wzAXnDxX/3to6dWtrZQvtrZWtLYHFjL7afsYJ0AAqSbs/gkQ60pRRFqjzZY8X0lKgAkZZpKM0SX/e0Lo5SUiSnH12khAy2dS6YQlhjU15tZo39SWN20vp6uphKDNJcvbh1dV0qW3beDc2W60mbjBQ/78Z5QQwh5MAMAq7HYlUBSr2w16kI4nUrzcxSJO0F/shZbSJQbywiYmOdNiL/UAFm5j0FucwYpT5YS9O0mQOUVmOY2WCcb/VR89zM84z1/Ow3/I5E5nlOFYmTNNv9dHz3IzzzPU87Ld8zkSGn+E8cz0P+y2fM5FZjmNlwjT9Vh89z8UHvMX9aqAPBwEwDpRPGZ1DRucw2kROVlwKI91L0qSJadLEQCKXX1W8cDsgKIStL6hWW0JcoCuUuh+t+CQtg7qYk2DbpbSiLxCiVa1eoG0hsIDL5itSINClbFdBTB6onRk/07KFxNkWLxC20wqlLn5ut1Az2+J/+1hbCJR/BO6kA+BF4ZkvaxDso32FaVnmDRZlcmlJMmrdUPaw+FnTvKMiHczRkZU77kQp3sQmAcygAzA9cPijDYbWXOL/UU7Th+kh8/tnuEsAd6ABc3A0nA83AngLqhv41UC1F1Tg1xkN25GOdHUxTWK1oLrBfqwzGnZ0tI6LaRKnftH6WFCBD5qpJThHidt6QKe4o6MC5FwM9AJOuQe5doLzjFubFXc4F8VHJRYZBqqDZwrOc87FkbJMcJ7tYCFJX4tz0S+V9QXn/V0IsmMdhHlk2ITjAVAFfl1ixyzdG7qKvc8BOtSMnlXkX5uDGJukSRqz1AgferhSedgSwrK6u/OBZQlh/ZJYQ85FNttoIDYas2XGeP7DFdetPGxZltgA1dsQlmVZnIsRHG8oOMdGYxZhttHghwbmF5voC2gqL6N+XakrpsZVCIs6OogGZV3KqoEKVDupyRh2GN2PlLU7MzZeSBP4hmDf50wceD/nluNY75t1PU+EkmLYUQGKwZmJFYQtL3KJKO/o6FnfgTl6njv7PstxLM7ff0Aw7g8E5y0MVKfI0dBDdkciSsxkv5Ty6RFvgBfbKslB7OioV28QqEBVKaMsLJ6L+Jfi6RVbu1F8j3OBl66MTCOoUY6zmMMYwHQa9hbTJI17Hd5fUuaHfuzHPVTiIrsyOYOBvy9tt/Css67ZuWytLiSeUSq1WuvHX7a768UQPXrKq3ASXA2QqqCJgfIDFSi/roI02cRkE5NUvWQ8iJ05jHS0qXBj0kT/6ydz2Akpo8yINDNp3iYmvbbxhbkrU4GijM7vvx0d6RXujK80CEqJnNvjJmFjpkJRFvWDVdlhxJDUqihhMlNI6QqrZBgn9Ho+vgbHJ2zDKLu0up8U89jurK0fc8z6WqeN2O6srR9zzPpap40jV7Eq3z9TM82athklfLzScAyxz6yLsjDrZebyklFm5Ypdcf26V62XcWYm21w6bBmVirNQLZtCHL+yMtXpTK2sHH/8yspUpzO1snI8AJQBAAjgAMowAU3oAWDYi/1pyrqU+YGaCXdIpCPdRr/da1dXlw8GxR114SA6oo47uaNS9HF7BAiv7K1Wq4+OqGflkNlCsdtqZV/gNOu3Rru4izuQAXghLd5NVEybCiFQ/oWYKmaqMIVjJep0lguR9lGyMJ0mOtLfMZcpZs44Y8YWFjHFzBlnzFSoMc0LxHLDHXIIDyGxP2JOWmP/FI5ADKfCtQAeo369SYJ4YZMkvcU5Yne9Jep3666VM/WmblPYYRyZTpVxzBwJVtzIXyLDiAQxDCJyBl8SIhR1T+KjZ7PFS/AzN47dOFaEprnkl0yz5C8ztrwteQn7NQFfjfpTjQwjKnak58lQCHxUenURClG8BJduHLtxrPO2h6a55I9gEwBitleEZDgAH/ZBCAchhtPgagCPqmtWHY1BvLAXqEDpXjyPwWW+YT9MI92NdOwbix+9+fXKe2mg/JCyQK1ikkY6HDDFZY1aDbFWa2CeE4ssq4nJspt/gLVao/SGio9KOTExOTkxIeXJ1KkoyzVCamNjNUJqZVJza+TQgSNoAvaYIsfL8jagUSHLnzy00NQxzbvleVKrEVKrkWNrhNQAqA58wsbhIBwHF8CN8DBAqr/GTC/qrq7F5nBcmvRKQUYxaaIjiZ1upxtsBC7Bx7KFtJtYSajJBefcAOo2AVvmDBs11uJG9mrGPL+SIfJGcyac+8zcJpwL7KOYYq7k3DsgYzgXBTczNWov+BXmvSI/oYbomqdVOBfbaDWt2gDgR/gSAK8dH2CvKFZHute2owydSHAesb9+DlFvcRMTFSi/3cIMPc/tc953PQ/DRJKepcghTGGG/cznTPQtx7H6wjT9jEBhBLtlb8v7EkfyY0Y55rGERMMhAE+q7ra9xx5tYJSWxGtX21UY2Jah37RwAzNKEJwPihwzHIBZcovioHBfGUIzoKuf7ijHO1rETcJueB3Dalx1XbttQkbzE6KW15m7u9dgBNJRTk7EHCZjLX+kqSROIRgUcAauwDTR0RwpVVXQREabqKMQz2dSsmNfL42ydfsEsW3nqacc2yYTt1tlQ77+2KBnOPedb2L9RoPixx1E5zlFhLBue5PgnJ10EuNcvOk2S4hS8FzxHC7cUilVz+P2A0slQICR3Fzz/MG+hhikibnCIT+E2Fz7e05hbxsD1RnzPIvajm2XDVrrdA6tz84Qlx0WoZ7KEOc7KkDH9u1y2aC27UwHAZKZ2fV59UMZCBnn/Ppa0FGOV2AO0wCYGCAaCoKTDx4y+P1AV2hxkuLlhvUksyz2pGUweSHnYvpWeGYyPYUXSoZCVrZNcztiw8MG4qHdmppOcnTajZkOwg5xDiPnkHqxxMUF727Z4kC1exvuFPY2Y9u2EGc6xx92F3PcAR/mADBQ3UkjS9IkbZdMg6MeQZDVjo1VECfppGiRv7pZhvIpn7D20ZROUdOkR7cZ9wnuwIIFCPMPT0kkPmfto6lp0ilKj24z4suhxl3McAdOBPAW026yWgqyRgQqzvsoo0wtBzkp08YvpEnq4ptYxUhHB0lHRz3gXGTuR+fs2CXBwtlrfspqt4+8YJWIaTq2vVulTJ057tXFwa+f3DdyPe9onxxbYnNO011ITJn2oc2dMYONRC0hDFWJ3mYnOsmyEmDnYFmc29CQOTGhOHQbkliGkzAEuOJN5ruJmRSPjx3x0rFuwqFOM8orugu+O3RujJuYqfTal+nJUSoTcqZnseKXmZdhzxm2bezhRNwUlmF4zEnDEiYn4nsu5twe7+TMXufpL0XB5a60G0tiEU0TQgjG9jAmhBCaFoktMdo7ejs6EoZRMYVlcCLeTVn1Z/L4F92ciBvCMit0jc05tbfH1rZMs6f4GsXHpRCCRTRN2LbQtAgTQsjxOF3d2+sfetmJCWUJr/aHEtZgPxo3BYtInLdAvM7iabiOd877bCRJdlnhrDRwVhbyyTnNMwpevdKRxwIO3/q/j3U4CWNj3GRmfq+V6xYzqlSeL97hPhQwB/O3awyeFMyTzMsmUXE19j7JEm6yHqY7FPfxHPFSvMjrTfc4pEda4xOLqdNuDxxUFkiSloo58t35+siRWZzGS4g4EteUFrKn+ja2VWnYlLKdvKVHNE2Ylu63Cfl8jyUxq8sSAsCSfuOyqKKYpiX4/E6aPDmdnjyZKBafKoffy7CEWTFe4JGYJkzL0iOaUnzbaSVmfKhHmukohH4ql0YVxVw2vfuSfPLk9IyEy/X2Tb5GS+g1TAXKK6ZkJUaH6Z3xlM4U3TSYflNnzpoVFO0ao+WkIRNzfMJcEfxNF3PsMlmBO1TZL8U9v0yLrLGyAZUVdh5f+vOQtL8ySAV0Mu1qD9ZTcBdAN+rq1NkTWJQ0zo2VbJXQrsCvTf9uwNXlSuzM6+pMuLSZAUoSp9ZuANtJ/zjdhs3ruMJ0mucbM92hzizzfJUMftn3Em5iut3Ea2Z0rC68mErZF1As+17F5vwMS5iaquvWJefwlhS7uzUyuG3xqO77myo25y5EkVmbyLm9SntDqaSq65YlTC0z/RXuDZRMlqIWjxI37Ogmz1M4t+9j4DOZMzanr++c8POlU5BBAQt9gzi/7CVmWklXKibZeJDKrMv7Z64bCR7klL1s0ot4x5kdnOlz6tcvUmEjkeuRVBwixyFyMnJ6JE4Ut6cyntCzsxue0dJNOJTAfQw+QSfoPqhgEIj9DuLqccspl3kZdw655bSXYRFVTyUzas9i8gepMJMS7P7dex79ds2F/YUnnnjiiePXXLi2j574npkm+940mkz8LljTMOnMgwenbtx43ltv5Tdu7D2BaJTgONcZxnWOA0AD1lZvNIel2I4akPZ/94ZvHp0F0xlYRyrf2a/pjmCcX054mQjQIgNuaQrPLZbn+8IKIZnpKRHW9A8kk0TJ5ED/mvxLzEXiUaYqxNSIMbcn1Z7vi7HUL3VIrA+aOi2XGxjI5aZNpefLWFlMT7GZphAxw1DiMaftdyGpNo2sgd8DN/px/EhFOp+eoV+V85Xv1A3qY+o3WkN7JzI38pq+i2lsD7uDfR8tRMejL0T/5sv4PcaA8ZXZFNPEOnGmuEd8Za2zXrD+t8cBJMgGAQCAKQAIem1YGhvqkAJGM5CKOTi1qAaHIihgCtKRxJPIwFx8jUy4uAnFMJ2IxdswUkEaB1CkdB4R1tHLSIGtVpGKXQorqu0ogkO0F+lYoVyGDOxRPkUmsspBFMOAmvkx4rDV6vKgedZYfWQ0lL3Ds+SqoBHKpWfUWsGx2q7aWKseNGS5XMjm815/3i+UZO9VkKdfDmNA+tliNj+r/m1flMuDY81qWB+qH62HZ8lttZHTjlbHPtg8pPqjYdhsDeRypwSNsIo6S3Y4OLYqaIRIZj292E6zeZ/1O0Zr8ozaUKYljwWtUDaD5mlHq2OyPhw0ZKsWymrjkAyD4OiRepilieC8BFiOAE2chTHUMYJRhJDoxTBmQWIVAjRKG7oUZ6CGFgIcQw27UMMYWqjDNFyijDIKyCKPPDz0Iw8fBZSw5QnPohKn3zIOQMJHFsXb1M86VixC0v5vyjE0UUWIOoZQx1HUEeIsSGxDDSM4DUdRxRi2ovOorHoUIUI00cIAcsjhFJq11XbELIZppz3iULG0p6PYl67NE3dglAcVn4EahpBBCxLHEKAlN9aUJe23KFFvXdqARAs1yVZcRQOHIBEiQICjOMKzGZXlNudK/qRLXr8ZAw==) format("woff2"),url(../fonts/fa-v4compatibility.0e3a648b.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}@keyframes bounce{0%,20%,53%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{transform:translateZ(0) scaleY(.95);transition-timing-function:cubic-bezier(.215,.61,.355,1)}90%{transform:translate3d(0,-4px,0) scaleY(1.02)}}.bounce{animation-name:bounce;transform-origin:center bottom}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{animation-name:flash}@keyframes flip{0%{animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn)}40%{animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg)}50%{animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg)}80%{animation-timing-function:ease-in;transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg)}to{animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg)}}.animated.flip{animation-name:flip;backface-visibility:visible}@keyframes headShake{0%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}50%{transform:translateX(0)}}.headShake{animation-name:headShake;animation-timing-function:ease-in-out}@keyframes heartBeat{0%{transform:scale(1)}14%{transform:scale(1.3)}28%{transform:scale(1)}42%{transform:scale(1.3)}70%{transform:scale(1)}}.heartBeat{animation-duration:calc(var(--animate-duration)*1.3);animation-name:heartBeat;animation-timing-function:ease-in-out}@keyframes hinge{0%{animation-timing-function:ease-in-out}20%,60%{animation-timing-function:ease-in-out;transform:rotate(80deg)}40%,80%{animation-timing-function:ease-in-out;opacity:1;transform:rotate(60deg)}to{opacity:0;transform:translate3d(0,700px,0)}}.hinge{animation-duration:calc(var(--animate-duration)*2);animation-name:hinge;transform-origin:top left}@keyframes jello{0%,11.1%,to{transform:translateZ(0)}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{transform:skewX(.390625deg) skewY(.390625deg)}88.8%{transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{animation-name:jello;transform-origin:center}@keyframes pulse{0%{transform:scaleX(1)}50%{transform:scale3d(1.05,1.05,1.05)}to{transform:scaleX(1)}}.pulse{animation-name:pulse;animation-timing-function:ease-in-out}@keyframes rubberBand{0%{transform:scaleX(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleX(1)}}.rubberBand{animation-name:rubberBand}@keyframes shake{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.shake{animation-name:shake}@keyframes shakeX{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.shakeX{animation-name:shakeX}@keyframes shakeY{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(0,-10px,0)}20%,40%,60%,80%{transform:translate3d(0,10px,0)}}.shakeY{animation-name:shakeY}@keyframes swing{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}to{transform:rotate(0deg)}}.swing{animation-name:swing;transform-origin:top center}@keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{transform:scaleX(1)}}.tada{animation-name:tada}@keyframes wobble{0%{transform:translateZ(0)}15%{transform:translate3d(-25%,0,0) rotate(-5deg)}30%{transform:translate3d(20%,0,0) rotate(3deg)}45%{transform:translate3d(-15%,0,0) rotate(-3deg)}60%{transform:translate3d(10%,0,0) rotate(2deg)}75%{transform:translate3d(-5%,0,0) rotate(-1deg)}to{transform:translateZ(0)}}.wobble{animation-name:wobble}@keyframes backInDown{0%{opacity:.7;transform:translateY(-1200px) scale(.7)}80%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:1;transform:scale(1)}}.backInDown{animation-name:backInDown}@keyframes backInLeft{0%{opacity:.7;transform:translateX(-2000px) scale(.7)}80%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:1;transform:scale(1)}}.backInLeft{animation-name:backInLeft}@keyframes backInRight{0%{opacity:.7;transform:translateX(2000px) scale(.7)}80%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:1;transform:scale(1)}}.backInRight{animation-name:backInRight}@keyframes backInUp{0%{opacity:.7;transform:translateY(1200px) scale(.7)}80%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:1;transform:scale(1)}}.backInUp{animation-name:backInUp}@keyframes bounceIn{0%,20%,40%,60%,80%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scaleX(1)}}.bounceIn{animation-duration:calc(var(--animate-duration)*.75);animation-name:bounceIn}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;transform:translate3d(0,25px,0) scaleY(.9)}75%{transform:translate3d(0,-10px,0) scaleY(.95)}90%{transform:translate3d(0,5px,0) scaleY(.985)}to{transform:translateZ(0)}}.bounceInDown{animation-name:bounceInDown}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;transform:translate3d(25px,0,0) scaleX(1)}75%{transform:translate3d(-10px,0,0) scaleX(.98)}90%{transform:translate3d(5px,0,0) scaleX(.995)}to{transform:translateZ(0)}}.bounceInLeft{animation-name:bounceInLeft}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;transform:translate3d(-25px,0,0) scaleX(1)}75%{transform:translate3d(10px,0,0) scaleX(.98)}90%{transform:translate3d(-5px,0,0) scaleX(.995)}to{transform:translateZ(0)}}.bounceInRight{animation-name:bounceInRight}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;transform:translate3d(0,-20px,0) scaleY(.9)}75%{transform:translate3d(0,10px,0) scaleY(.95)}90%{transform:translate3d(0,-5px,0) scaleY(.985)}to{transform:translateZ(0)}}.bounceInUp{animation-name:bounceInUp}.fadeIn{animation-name:fadeIn}@keyframes fadeInBottomLeft{0%{opacity:0;transform:translate3d(-100%,100%,0)}to{opacity:1;transform:translateZ(0)}}.fadeInBottomLeft{animation-name:fadeInBottomLeft}@keyframes fadeInBottomRight{0%{opacity:0;transform:translate3d(100%,100%,0)}to{opacity:1;transform:translateZ(0)}}.fadeInBottomRight{animation-name:fadeInBottomRight}@keyframes fadeInDown{0%{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:translateZ(0)}}.fadeInDown{animation-name:fadeInDown}@keyframes fadeInDownBig{0%{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:translateZ(0)}}.fadeInDownBig{animation-name:fadeInDownBig}@keyframes fadeInLeft{0%{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:translateZ(0)}}.fadeInLeft{animation-name:fadeInLeft}@keyframes fadeInLeftBig{0%{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:translateZ(0)}}.fadeInLeftBig{animation-name:fadeInLeftBig}@keyframes fadeInRight{0%{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:translateZ(0)}}.fadeInRight{animation-name:fadeInRight}@keyframes fadeInRightBig{0%{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:translateZ(0)}}.fadeInRightBig{animation-name:fadeInRightBig}@keyframes fadeInTopLeft{0%{opacity:0;transform:translate3d(-100%,-100%,0)}to{opacity:1;transform:translateZ(0)}}.fadeInTopLeft{animation-name:fadeInTopLeft}@keyframes fadeInTopRight{0%{opacity:0;transform:translate3d(100%,-100%,0)}to{opacity:1;transform:translateZ(0)}}.fadeInTopRight{animation-name:fadeInTopRight}@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:translateZ(0)}}.fadeInUp{animation-name:fadeInUp}@keyframes fadeInUpBig{0%{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:translateZ(0)}}.fadeInUpBig{animation-name:fadeInUpBig}@keyframes flipInX{0%{animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateX(90deg)}40%{animation-timing-function:ease-in;transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;transform:perspective(400px) rotateX(10deg)}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.flipInX{animation-name:flipInX;backface-visibility:visible!important}@keyframes flipInY{0%{animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateY(90deg)}40%{animation-timing-function:ease-in;transform:perspective(400px) rotateY(-20deg)}60%{opacity:1;transform:perspective(400px) rotateY(10deg)}80%{transform:perspective(400px) rotateY(-5deg)}to{transform:perspective(400px)}}.flipInY{animation-name:flipInY;backface-visibility:visible!important}@keyframes jackInTheBox{0%{opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{opacity:1;transform:scale(1)}}.jackInTheBox{animation-name:jackInTheBox}@keyframes lightSpeedInLeft{0%{opacity:0;transform:translate3d(-100%,0,0) skewX(30deg)}60%{opacity:1;transform:skewX(-20deg)}80%{transform:skewX(5deg)}to{transform:translateZ(0)}}.lightSpeedInLeft{animation-name:lightSpeedInLeft;animation-timing-function:ease-out}@keyframes lightSpeedInRight{0%{opacity:0;transform:translate3d(100%,0,0) skewX(-30deg)}60%{opacity:1;transform:skewX(20deg)}80%{transform:skewX(-5deg)}to{transform:translateZ(0)}}.lightSpeedInRight{animation-name:lightSpeedInRight;animation-timing-function:ease-out}@keyframes rollIn{0%{opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;transform:translateZ(0)}}.rollIn{animation-name:rollIn}@keyframes rotateIn{0%{opacity:0;transform:rotate(-200deg)}to{opacity:1;transform:translateZ(0)}}.rotateIn{animation-name:rotateIn;transform-origin:center}@keyframes rotateInDownLeft{0%{opacity:0;transform:rotate(-45deg)}to{opacity:1;transform:translateZ(0)}}.rotateInDownLeft{animation-name:rotateInDownLeft;transform-origin:left bottom}@keyframes rotateInDownRight{0%{opacity:0;transform:rotate(45deg)}to{opacity:1;transform:translateZ(0)}}.rotateInDownRight{animation-name:rotateInDownRight;transform-origin:right bottom}@keyframes rotateInUpLeft{0%{opacity:0;transform:rotate(45deg)}to{opacity:1;transform:translateZ(0)}}.rotateInUpLeft{animation-name:rotateInUpLeft;transform-origin:left bottom}@keyframes rotateInUpRight{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:translateZ(0)}}.rotateInUpRight{animation-name:rotateInUpRight;transform-origin:right bottom}@keyframes slideInDown{0%{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translateZ(0)}}.slideInDown{animation-name:slideInDown}@keyframes slideInLeft{0%{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInLeft{animation-name:slideInLeft}@keyframes slideInRight{0%{transform:translate3d(100%,0,0);visibility:visible}to{transform:translateZ(0)}}.slideInRight{animation-name:slideInRight}@keyframes slideInUp{0%{transform:translate3d(0,100%,0);visibility:visible}to{transform:translateZ(0)}}.slideInUp{animation-name:slideInUp}@keyframes zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{animation-name:zoomIn}@keyframes zoomInDown{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}}.zoomInDown{animation-name:zoomInDown}@keyframes zoomInLeft{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0)}}.zoomInLeft{animation-name:zoomInLeft}@keyframes zoomInRight{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0)}}.zoomInRight{animation-name:zoomInRight}@keyframes zoomInUp{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}}.zoomInUp{animation-name:zoomInUp}@keyframes backOutDown{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:.7;transform:translateY(700px) scale(.7)}}.backOutDown{animation-name:backOutDown}@keyframes backOutLeft{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:.7;transform:translateX(-2000px) scale(.7)}}.backOutLeft{animation-name:backOutLeft}@keyframes backOutRight{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:.7;transform:translateX(2000px) scale(.7)}}.backOutRight{animation-name:backOutRight}@keyframes backOutUp{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:.7;transform:translateY(-700px) scale(.7)}}.backOutUp{animation-name:backOutUp}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{animation-duration:calc(var(--animate-duration)*.75);animation-name:bounceOut}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;transform:translate3d(0,2000px,0) scaleY(3)}}.bounceOutDown{animation-name:bounceOutDown}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;transform:translate3d(-2000px,0,0) scaleX(2)}}.bounceOutLeft{animation-name:bounceOutLeft}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;transform:translate3d(2000px,0,0) scaleX(2)}}.bounceOutRight{animation-name:bounceOutRight}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;transform:translate3d(0,-2000px,0) scaleY(3)}}.bounceOutUp{animation-name:bounceOutUp}.fadeOut{animation-name:fadeOut}@keyframes fadeOutBottomLeft{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(-100%,100%,0)}}.fadeOutBottomLeft{animation-name:fadeOutBottomLeft}@keyframes fadeOutBottomRight{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(100%,100%,0)}}.fadeOutBottomRight{animation-name:fadeOutBottomRight}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{animation-name:fadeOutDown}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}.fadeOutDownBig{animation-name:fadeOutDownBig}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}.fadeOutLeft{animation-name:fadeOutLeft}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{animation-name:fadeOutLeftBig}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}.fadeOutRight{animation-name:fadeOutRight}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}.fadeOutRightBig{animation-name:fadeOutRightBig}@keyframes fadeOutTopLeft{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(-100%,-100%,0)}}.fadeOutTopLeft{animation-name:fadeOutTopLeft}@keyframes fadeOutTopRight{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(100%,-100%,0)}}.fadeOutTopRight{animation-name:fadeOutTopRight}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{animation-name:fadeOutUp}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{animation-name:fadeOutUpBig}@keyframes flipOutX{0%{transform:perspective(400px)}30%{opacity:1;transform:perspective(400px) rotateX(-20deg)}to{opacity:0;transform:perspective(400px) rotateX(90deg)}}.flipOutX{animation-duration:calc(var(--animate-duration)*.75);animation-name:flipOutX;backface-visibility:visible!important}@keyframes flipOutY{0%{transform:perspective(400px)}30%{opacity:1;transform:perspective(400px) rotateY(-15deg)}to{opacity:0;transform:perspective(400px) rotateY(90deg)}}.flipOutY{animation-duration:calc(var(--animate-duration)*.75);animation-name:flipOutY;backface-visibility:visible!important}@keyframes lightSpeedOutLeft{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0) skewX(-30deg)}}.lightSpeedOutLeft{animation-name:lightSpeedOutLeft;animation-timing-function:ease-in}@keyframes lightSpeedOutRight{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) skewX(30deg)}}.lightSpeedOutRight{animation-name:lightSpeedOutRight;animation-timing-function:ease-in}@keyframes rollOut{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{animation-name:rollOut}@keyframes rotateOut{0%{opacity:1}to{opacity:0;transform:rotate(200deg)}}.rotateOut{animation-name:rotateOut;transform-origin:center}@keyframes rotateOutDownLeft{0%{opacity:1}to{opacity:0;transform:rotate(45deg)}}.rotateOutDownLeft{animation-name:rotateOutDownLeft;transform-origin:left bottom}@keyframes rotateOutDownRight{0%{opacity:1}to{opacity:0;transform:rotate(-45deg)}}.rotateOutDownRight{animation-name:rotateOutDownRight;transform-origin:right bottom}@keyframes rotateOutUpLeft{0%{opacity:1}to{opacity:0;transform:rotate(-45deg)}}.rotateOutUpLeft{animation-name:rotateOutUpLeft;transform-origin:left bottom}@keyframes rotateOutUpRight{0%{opacity:1}to{opacity:0;transform:rotate(90deg)}}.rotateOutUpRight{animation-name:rotateOutUpRight;transform-origin:right bottom}@keyframes slideOutDown{0%{transform:translateZ(0)}to{transform:translate3d(0,100%,0);visibility:hidden}}.slideOutDown{animation-name:slideOutDown}@keyframes slideOutLeft{0%{transform:translateZ(0)}to{transform:translate3d(-100%,0,0);visibility:hidden}}.slideOutLeft{animation-name:slideOutLeft}@keyframes slideOutRight{0%{transform:translateZ(0)}to{transform:translate3d(100%,0,0);visibility:hidden}}.slideOutRight{animation-name:slideOutRight}@keyframes slideOutUp{0%{transform:translateZ(0)}to{transform:translate3d(0,-100%,0);visibility:hidden}}.slideOutUp{animation-name:slideOutUp}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{animation-name:zoomOut}@keyframes zoomOutDown{40%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}to{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0)}}.zoomOutDown{animation-name:zoomOutDown;transform-origin:center bottom}@keyframes zoomOutLeft{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(-2000px,0,0)}}.zoomOutLeft{animation-name:zoomOutLeft;transform-origin:left center}@keyframes zoomOutRight{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(2000px,0,0)}}.zoomOutRight{animation-name:zoomOutRight;transform-origin:right center}@keyframes zoomOutUp{40%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}to{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0)}}.zoomOutUp{animation-name:zoomOutUp;transform-origin:center bottom} -/*! - * * Quasar Framework v2.12.0 - * * (c) 2015-present Razvan Stoenescu - * * Released under the MIT License. - * */*,:after,:before{-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;box-sizing:inherit}#q-app,body,html{direction:ltr;width:100%}body.platform-ios.within-iframe,body.platform-ios.within-iframe #q-app{min-width:100%;width:100px}body,html{box-sizing:border-box;margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;font-family:inherit;margin:0}optgroup{font-weight:700}button,input,select{overflow:visible;text-transform:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button:-moz-focusring,input:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.q-icon{word-wrap:normal;fill:currentColor;box-sizing:content-box;direction:ltr;flex-shrink:0;height:1em;letter-spacing:normal;line-height:1;position:relative;text-align:center;text-transform:none;white-space:nowrap;width:1em}.q-icon:after,.q-icon:before{align-items:center;display:flex!important;height:100%;justify-content:center;width:100%}.q-icon>img,.q-icon>svg{height:100%;width:100%}.material-icons,.material-icons-outlined,.material-icons-round,.material-icons-sharp,.material-symbols-outlined,.material-symbols-rounded,.material-symbols-sharp,.q-icon{align-items:center;cursor:inherit;display:inline-flex;font-size:inherit;justify-content:center;-webkit-user-select:none;user-select:none;vertical-align:middle}.q-panel,.q-panel>div{height:100%;width:100%}.q-panel-parent{overflow:hidden;position:relative}.q-loading-bar{background:#f44336;position:fixed;transition:transform .5s cubic-bezier(0,0,.2,1),opacity .5s;z-index:9998}.q-loading-bar--top{left:0;right:0;top:0;width:100%}.q-loading-bar--bottom{bottom:0;left:0;right:0;width:100%}.q-loading-bar--right{bottom:0;height:100%;right:0;top:0}.q-loading-bar--left{bottom:0;height:100%;left:0;top:0}.q-avatar{border-radius:50%;display:inline-block;font-size:48px;height:1em;position:relative;vertical-align:middle;width:1em}.q-avatar__content{font-size:.5em;line-height:.5em}.q-avatar img:not(.q-icon):not(.q-img__image),.q-avatar__content{border-radius:inherit;height:inherit;width:inherit}.q-avatar--square{border-radius:0}.q-badge{background-color:var(--q-primary);border-radius:4px;color:#fff;font-size:12px;font-weight:400;line-height:12px;min-height:12px;padding:2px 6px;vertical-align:baseline}.q-badge--single-line{white-space:nowrap}.q-badge--multi-line{word-wrap:break-word;word-break:break-all}.q-badge--floating{cursor:inherit;position:absolute;right:-3px;top:-4px}.q-badge--transparent{opacity:.8}.q-badge--outline{background-color:transparent;border:1px solid}.q-badge--rounded{border-radius:1em}.q-banner{background:#fff;min-height:54px;padding:8px 16px}.q-banner--top-padding{padding-top:14px}.q-banner__avatar{min-width:1px!important}.q-banner__avatar>.q-avatar{font-size:46px}.q-banner__avatar>.q-icon{font-size:40px}.q-banner__actions.col-auto,.q-banner__avatar:not(:empty)+.q-banner__content{padding-left:16px}.q-banner__actions.col-all .q-btn-item{margin:4px 0 0 4px}.q-banner--dense{min-height:32px;padding:8px}.q-banner--dense.q-banner--top-padding{padding-top:12px}.q-banner--dense .q-banner__avatar>.q-avatar,.q-banner--dense .q-banner__avatar>.q-icon{font-size:28px}.q-banner--dense .q-banner__actions.col-auto,.q-banner--dense .q-banner__avatar:not(:empty)+.q-banner__content{padding-left:8px}.q-bar{background:rgba(0,0,0,.2)}.q-bar>.q-icon{margin-left:2px}.q-bar>div,.q-bar>div+.q-icon{margin-left:8px}.q-bar>.q-btn{margin-left:2px}.q-bar>.q-btn:first-child,.q-bar>.q-icon:first-child,.q-bar>div:first-child{margin-left:0}.q-bar--standard{font-size:18px;height:32px;padding:0 12px}.q-bar--standard>div{font-size:16px}.q-bar--standard .q-btn{font-size:11px}.q-bar--dense{font-size:14px;height:24px;padding:0 8px}.q-bar--dense .q-btn{font-size:8px}.q-bar--dark{background:hsla(0,0%,100%,.15)}.q-breadcrumbs__el{color:inherit}.q-breadcrumbs__el-icon{font-size:125%}.q-breadcrumbs__el-icon--with-label{margin-right:8px}[dir=rtl] .q-breadcrumbs__separator .q-icon{transform:scaleX(-1)}.q-btn{align-items:stretch;background:transparent;border:0;color:inherit;cursor:default;display:inline-flex;flex-direction:column;font-size:14px;font-weight:500;height:auto;line-height:1.715em;min-height:2.572em;outline:0;padding:4px 16px;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;vertical-align:middle;width:auto}.q-btn .q-icon,.q-btn .q-spinner{font-size:1.715em}.q-btn.disabled{opacity:.7!important}.q-btn:before{border-radius:inherit;bottom:0;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);content:"";display:block;left:0;position:absolute;right:0;top:0}.q-btn--actionable{cursor:pointer}.q-btn--actionable.q-btn--standard:before{transition:box-shadow .3s cubic-bezier(.25,.8,.5,1)}.q-btn--actionable.q-btn--standard.q-btn--active:before,.q-btn--actionable.q-btn--standard:active:before{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px rgba(0,0,0,.14),0 1px 14px rgba(0,0,0,.12)}.q-btn--no-uppercase{text-transform:none}.q-btn--rectangle{border-radius:3px}.q-btn--outline{background:transparent!important}.q-btn--outline:before{border:1px solid}.q-btn--push{border-radius:7px}.q-btn--push:before{border-bottom:3px solid rgba(0,0,0,.15)}.q-btn--push.q-btn--actionable{transition:transform .3s cubic-bezier(.25,.8,.5,1)}.q-btn--push.q-btn--actionable:before{transition:border-width .3s cubic-bezier(.25,.8,.5,1)}.q-btn--push.q-btn--actionable.q-btn--active,.q-btn--push.q-btn--actionable:active{transform:translateY(2px)}.q-btn--push.q-btn--actionable.q-btn--active:before,.q-btn--push.q-btn--actionable:active:before{border-bottom-width:0}.q-btn--rounded{border-radius:28px}.q-btn--round{border-radius:50%;min-height:3em;min-width:3em;padding:0}.q-btn--square{border-radius:0}.q-btn--flat:before,.q-btn--outline:before,.q-btn--unelevated:before{box-shadow:none}.q-btn--dense{min-height:2em;padding:.285em}.q-btn--dense.q-btn--round{min-height:2.4em;min-width:2.4em;padding:0}.q-btn--dense .on-left{margin-right:6px}.q-btn--dense .on-right{margin-left:6px}.q-btn--fab .q-icon,.q-btn--fab-mini .q-icon{font-size:24px}.q-btn--fab{min-height:56px;min-width:56px;padding:16px}.q-btn--fab .q-icon{margin:auto}.q-btn--fab-mini{min-height:40px;min-width:40px;padding:8px}.q-btn__content{transition:opacity .3s;z-index:0}.q-btn__content--hidden{opacity:0;pointer-events:none}.q-btn__progress{border-radius:inherit;z-index:0}.q-btn__progress-indicator{background:hsla(0,0%,100%,.25);transform:translateX(-100%);z-index:-1}.q-btn__progress--dark .q-btn__progress-indicator{background:rgba(0,0,0,.2)}.q-btn--flat .q-btn__progress-indicator,.q-btn--outline .q-btn__progress-indicator{background:currentColor;opacity:.2}.q-btn-dropdown--split .q-btn-dropdown__arrow-container{padding:0 4px}.q-btn-dropdown--split .q-btn-dropdown__arrow-container.q-btn--outline{border-left:1px solid}.q-btn-dropdown--split .q-btn-dropdown__arrow-container:not(.q-btn--outline){border-left:1px solid hsla(0,0%,100%,.3)}.q-btn-dropdown--simple *+.q-btn-dropdown__arrow{margin-left:8px}.q-btn-dropdown__arrow{transition:transform .28s}.q-btn-dropdown--current{flex-grow:1}.q-btn-group{border-radius:3px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);vertical-align:middle}.q-btn-group>.q-btn-item{align-self:stretch;border-radius:inherit}.q-btn-group>.q-btn-item:before{box-shadow:none}.q-btn-group>.q-btn-item .q-badge--floating{right:0}.q-btn-group>.q-btn-group{box-shadow:none}.q-btn-group>.q-btn-group:first-child>.q-btn:first-child{border-bottom-left-radius:inherit;border-top-left-radius:inherit}.q-btn-group>.q-btn-group:last-child>.q-btn:last-child{border-bottom-right-radius:inherit;border-top-right-radius:inherit}.q-btn-group>.q-btn-group:not(:first-child)>.q-btn:first-child:before{border-left:0}.q-btn-group>.q-btn-group:not(:last-child)>.q-btn:last-child:before{border-right:0}.q-btn-group>.q-btn-item:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.q-btn-group>.q-btn-item:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.q-btn-group>.q-btn-item.q-btn--standard:before{z-index:-1}.q-btn-group--push{border-radius:7px}.q-btn-group--push>.q-btn--push.q-btn--actionable{transform:none}.q-btn-group--push>.q-btn--push.q-btn--actionable .q-btn__content{transition:margin-top .3s cubic-bezier(.25,.8,.5,1),margin-bottom .3s cubic-bezier(.25,.8,.5,1)}.q-btn-group--push>.q-btn--push.q-btn--actionable.q-btn--active .q-btn__content,.q-btn-group--push>.q-btn--push.q-btn--actionable:active .q-btn__content{margin-bottom:-2px;margin-top:2px}.q-btn-group--rounded{border-radius:28px}.q-btn-group--square{border-radius:0}.q-btn-group--flat,.q-btn-group--outline,.q-btn-group--unelevated{box-shadow:none}.q-btn-group--outline>.q-separator{display:none}.q-btn-group--outline>.q-btn-item+.q-btn-item:before{border-left:0}.q-btn-group--outline>.q-btn-item:not(:last-child):before{border-right:0}.q-btn-group--stretch{align-self:stretch;border-radius:0}.q-btn-group--glossy>.q-btn-item{background-image:linear-gradient(180deg,hsla(0,0%,100%,.3),hsla(0,0%,100%,0) 50%,rgba(0,0,0,.12) 51%,rgba(0,0,0,.04))!important}.q-btn-group--spread>.q-btn-group{display:flex!important}.q-btn-group--spread>.q-btn-group>.q-btn-item:not(.q-btn-dropdown__arrow-container),.q-btn-group--spread>.q-btn-item{flex:10000 1 0%;max-width:100%;min-width:0;width:auto}.q-btn-toggle,.q-card{position:relative}.q-card{background:#fff;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);vertical-align:top}.q-card>div:first-child,.q-card>img:first-child{border-top:0;border-top-left-radius:inherit;border-top-right-radius:inherit}.q-card>div:last-child,.q-card>img:last-child{border-bottom:0;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.q-card>div:not(:first-child),.q-card>img:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.q-card>div:not(:last-child),.q-card>img:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0}.q-card>div{border-left:0;border-right:0;box-shadow:none}.q-card--bordered{border:1px solid rgba(0,0,0,.12)}.q-card--dark{border-color:hsla(0,0%,100%,.28);box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}.q-card__section{position:relative}.q-card__section--vert{padding:16px}.q-card__section--horiz>div:first-child,.q-card__section--horiz>img:first-child{border-bottom-left-radius:inherit;border-top-left-radius:inherit}.q-card__section--horiz>div:last-child,.q-card__section--horiz>img:last-child{border-bottom-right-radius:inherit;border-top-right-radius:inherit}.q-card__section--horiz>div:not(:first-child),.q-card__section--horiz>img:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.q-card__section--horiz>div:not(:last-child),.q-card__section--horiz>img:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.q-card__section--horiz>div{border-bottom:0;border-top:0;box-shadow:none}.q-card__actions{align-items:center;padding:8px}.q-card__actions .q-btn--rectangle{padding:0 8px}.q-card__actions--horiz>.q-btn-group+.q-btn-item,.q-card__actions--horiz>.q-btn-item+.q-btn-group,.q-card__actions--horiz>.q-btn-item+.q-btn-item{margin-left:8px}.q-card__actions--vert>.q-btn-item.q-btn--round{align-self:center}.q-card__actions--vert>.q-btn-group+.q-btn-item,.q-card__actions--vert>.q-btn-item+.q-btn-group,.q-card__actions--vert>.q-btn-item+.q-btn-item{margin-top:4px}.q-card__actions--vert>.q-btn-group>.q-btn-item{flex-grow:1}.q-card>img{border:0;display:block;max-width:100%;width:100%}.q-carousel{background-color:#fff;height:400px}.q-carousel__slide{background-position:50%;background-size:cover;min-height:100%}.q-carousel .q-carousel--padding,.q-carousel__slide{padding:16px}.q-carousel__slides-container{height:100%}.q-carousel__control{color:#fff}.q-carousel__arrow{pointer-events:none}.q-carousel__arrow .q-icon{font-size:28px}.q-carousel__arrow .q-btn{pointer-events:all}.q-carousel__next-arrow--horizontal,.q-carousel__prev-arrow--horizontal{bottom:16px;top:16px}.q-carousel__prev-arrow--horizontal{left:16px}.q-carousel__next-arrow--horizontal{right:16px}.q-carousel__next-arrow--vertical,.q-carousel__prev-arrow--vertical{left:16px;right:16px}.q-carousel__prev-arrow--vertical{top:16px}.q-carousel__next-arrow--vertical{bottom:16px}.q-carousel__navigation--bottom,.q-carousel__navigation--top{left:16px;overflow-x:auto;overflow-y:hidden;right:16px}.q-carousel__navigation--top{top:16px}.q-carousel__navigation--bottom{bottom:16px}.q-carousel__navigation--left,.q-carousel__navigation--right{bottom:16px;overflow-x:hidden;overflow-y:auto;top:16px}.q-carousel__navigation--left>.q-carousel__navigation-inner,.q-carousel__navigation--right>.q-carousel__navigation-inner{flex-direction:column}.q-carousel__navigation--left{left:16px}.q-carousel__navigation--right{right:16px}.q-carousel__navigation-inner{flex:1 1 auto}.q-carousel__navigation .q-btn{margin:6px 4px;padding:5px}.q-carousel__navigation-icon--inactive{opacity:.7}.q-carousel .q-carousel__thumbnail{border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;height:50px;margin:2px;opacity:.7;transition:opacity .3s;vertical-align:middle;width:auto}.q-carousel .q-carousel__thumbnail--active,.q-carousel .q-carousel__thumbnail:hover{opacity:1}.q-carousel .q-carousel__thumbnail--active{border-color:currentColor;cursor:default}.q-carousel--arrows-vertical .q-carousel--padding,.q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-top .q-carousel--padding,.q-carousel--navigation-top.q-carousel--with-padding .q-carousel__slide{padding-top:60px}.q-carousel--arrows-vertical .q-carousel--padding,.q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-bottom .q-carousel--padding,.q-carousel--navigation-bottom.q-carousel--with-padding .q-carousel__slide{padding-bottom:60px}.q-carousel--arrows-horizontal .q-carousel--padding,.q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-left .q-carousel--padding,.q-carousel--navigation-left.q-carousel--with-padding .q-carousel__slide{padding-left:60px}.q-carousel--arrows-horizontal .q-carousel--padding,.q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-right .q-carousel--padding,.q-carousel--navigation-right.q-carousel--with-padding .q-carousel__slide{padding-right:60px}.q-carousel.fullscreen{height:100%}.q-message-label,.q-message-name,.q-message-stamp{font-size:small}.q-message-label{margin:24px 0;text-align:center}.q-message-stamp{color:inherit;display:none;margin-top:4px;opacity:.6}.q-message-avatar{border-radius:50%;height:48px;min-width:48px;width:48px}.q-message{margin-bottom:8px}.q-message:first-child .q-message-label{margin-top:0}.q-message-avatar--received{margin-right:8px}.q-message-text--received{border-radius:4px 4px 4px 0;color:#81c784}.q-message-text--received:last-child:before{border-bottom:8px solid;border-left:8px solid transparent;border-right:0 solid transparent;right:100%}.q-message-text-content--received{color:#000}.q-message-name--sent{text-align:right}.q-message-avatar--sent{margin-left:8px}.q-message-container--sent{flex-direction:row-reverse}.q-message-text--sent{border-radius:4px 4px 0 4px;color:#e0e0e0}.q-message-text--sent:last-child:before{border-bottom:8px solid;border-left:0 solid transparent;border-right:8px solid transparent;left:100%}.q-message-text-content--sent{color:#000}.q-message-text{background:currentColor;line-height:1.2;padding:8px;position:relative;word-break:break-word}.q-message-text+.q-message-text{margin-top:3px}.q-message-text:last-child{min-height:48px}.q-message-text:last-child .q-message-stamp{display:block}.q-message-text:last-child:before{bottom:0;content:"";height:0;position:absolute;width:0}.q-checkbox{vertical-align:middle}.q-checkbox__native{height:1px;width:1px}.q-checkbox__bg,.q-checkbox__icon-container{-webkit-user-select:none;user-select:none}.q-checkbox__bg{border:2px solid;border-radius:2px;height:50%;left:25%;-webkit-print-color-adjust:exact;top:25%;transition:background .22s cubic-bezier(0,0,.2,1) 0ms;width:50%}.q-checkbox__icon{color:currentColor;font-size:.5em}.q-checkbox__svg{color:#fff}.q-checkbox__truthy{stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.78334;stroke-dasharray:29.78334}.q-checkbox__indet{fill:currentColor;transform:rotate(-280deg) scale(0);transform-origin:50% 50%}.q-checkbox__inner{border-radius:50%;color:rgba(0,0,0,.54);font-size:40px;height:1em;min-width:1em;outline:0;width:1em}.q-checkbox__inner--indet,.q-checkbox__inner--truthy{color:var(--q-primary)}.q-checkbox__inner--indet .q-checkbox__bg,.q-checkbox__inner--truthy .q-checkbox__bg{background:currentColor}.q-checkbox__inner--truthy path{stroke-dashoffset:0;transition:stroke-dashoffset .18s cubic-bezier(.4,0,.6,1) 0ms}.q-checkbox__inner--indet .q-checkbox__indet{transform:rotate(0) scale(1);transition:transform .22s cubic-bezier(0,0,.2,1) 0ms}.q-checkbox.disabled{opacity:.75!important}.q-checkbox--dark .q-checkbox__inner{color:hsla(0,0%,100%,.7)}.q-checkbox--dark .q-checkbox__inner:before{opacity:.32!important}.q-checkbox--dark .q-checkbox__inner--indet,.q-checkbox--dark .q-checkbox__inner--truthy{color:var(--q-primary)}.q-checkbox--dense .q-checkbox__inner{height:.5em;min-width:.5em;width:.5em}.q-checkbox--dense .q-checkbox__bg{height:90%;left:5%;top:5%;width:90%}.q-checkbox--dense .q-checkbox__label{padding-left:.5em}.q-checkbox--dense.reverse .q-checkbox__label{padding-left:0;padding-right:.5em}body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before{background:currentColor;border-radius:50%;bottom:0;content:"";left:0;opacity:.12;position:absolute;right:0;top:0;transform:scale3d(0,0,1);transition:transform .22s cubic-bezier(0,0,.2,1)}body.desktop .q-checkbox:not(.disabled):focus .q-checkbox__inner:before,body.desktop .q-checkbox:not(.disabled):hover .q-checkbox__inner:before{transform:scaleX(1)}body.desktop .q-checkbox--dense:not(.disabled):focus .q-checkbox__inner:before,body.desktop .q-checkbox--dense:not(.disabled):hover .q-checkbox__inner:before{transform:scale3d(1.4,1.4,1)}.q-chip{background:#e0e0e0;border-radius:16px;color:rgba(0,0,0,.87);font-size:14px;height:2em;margin:4px;max-width:100%;outline:0;padding:.5em .9em;position:relative;vertical-align:middle}.q-chip--colored .q-chip__icon,.q-chip--dark .q-chip__icon{color:inherit}.q-chip--outline{background:transparent!important;border:1px solid}.q-chip .q-avatar{border-radius:16px;font-size:2em;margin-left:-.45em;margin-right:.2em}.q-chip--selected .q-avatar{display:none}.q-chip__icon{color:rgba(0,0,0,.54);font-size:1.5em;margin:-.2em}.q-chip__icon--left{margin-right:.2em}.q-chip__icon--right{margin-left:.2em}.q-chip__icon--remove{margin-left:.1em;margin-right:-.5em;opacity:.6;outline:0}.q-chip__icon--remove:focus,.q-chip__icon--remove:hover{opacity:1}.q-chip__content{white-space:nowrap}.q-chip--dense{border-radius:12px;height:1.5em;padding:0 .4em}.q-chip--dense .q-avatar{border-radius:12px;font-size:1.5em;margin-left:-.27em;margin-right:.1em}.q-chip--dense .q-chip__icon{font-size:1.25em}.q-chip--dense .q-chip__icon--left{margin-right:.195em}.q-chip--dense .q-chip__icon--remove{margin-right:-.25em}.q-chip--square{border-radius:4px}.q-chip--square .q-avatar{border-radius:3px 0 0 3px}body.desktop .q-chip--clickable:focus{box-shadow:0 1px 3px rgba(0,0,0,.2),0 1px 1px rgba(0,0,0,.14),0 2px 1px -1px rgba(0,0,0,.12)}body.desktop.body--dark .q-chip--clickable:focus{box-shadow:0 1px 3px hsla(0,0%,100%,.2),0 1px 1px hsla(0,0%,100%,.14),0 2px 1px -1px hsla(0,0%,100%,.12)}.q-circular-progress{display:inline-block;height:1em;line-height:1;position:relative;vertical-align:middle;width:1em}.q-circular-progress.q-focusable{border-radius:50%}.q-circular-progress__svg{height:100%;width:100%}.q-circular-progress__text{font-size:.25em}.q-circular-progress--indeterminate .q-circular-progress__svg{animation:q-spin 2s linear infinite;transform-origin:50% 50%}.q-circular-progress--indeterminate .q-circular-progress__circle{stroke-dasharray:1 400;stroke-dashoffset:0;animation:q-circular-progress-circle 1.5s ease-in-out infinite}@keyframes q-circular-progress-circle{0%{stroke-dasharray:1,400;stroke-dashoffset:0}50%{stroke-dasharray:400,400;stroke-dashoffset:-100}to{stroke-dasharray:400,400;stroke-dashoffset:-300}}.q-color-picker{background:#fff;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);max-width:350px;min-width:180px;overflow:hidden;vertical-align:top}.q-color-picker .q-tab{padding:0!important}.q-color-picker--bordered{border:1px solid rgba(0,0,0,.12)}.q-color-picker__header-tabs{height:32px}.q-color-picker__header input{border:0;line-height:24px}.q-color-picker__header .q-tab{height:32px!important;min-height:32px!important}.q-color-picker__header .q-tab--inactive{background:linear-gradient(0deg,rgba(0,0,0,.3) 0,rgba(0,0,0,.15) 25%,rgba(0,0,0,.1))}.q-color-picker__error-icon{bottom:2px;font-size:24px;opacity:0;right:2px;transition:opacity .3s ease-in}.q-color-picker__header-content{background:#fff;position:relative}.q-color-picker__header-content--light{color:#000}.q-color-picker__header-content--dark{color:#fff}.q-color-picker__header-content--dark .q-tab--inactive:before{background:hsla(0,0%,100%,.2);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.q-color-picker__header-banner{height:36px}.q-color-picker__header-bg{background:#fff;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==")!important}.q-color-picker__footer{height:36px}.q-color-picker__footer .q-tab{height:36px!important;min-height:36px!important}.q-color-picker__footer .q-tab--inactive{background:linear-gradient(180deg,rgba(0,0,0,.3) 0,rgba(0,0,0,.15) 25%,rgba(0,0,0,.1))}.q-color-picker__spectrum{height:100%;width:100%}.q-color-picker__spectrum-tab{padding:0!important}.q-color-picker__spectrum-white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.q-color-picker__spectrum-black{background:linear-gradient(0deg,#000,transparent)}.q-color-picker__spectrum-circle{border-radius:50%;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);height:10px;transform:translate(-5px,-5px);width:10px}.q-color-picker__hue .q-slider__track{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)!important;opacity:1}.q-color-picker__alpha .q-slider__track-container{padding-top:0}.q-color-picker__alpha .q-slider__track:before{background:linear-gradient(90deg,hsla(0,0%,100%,0),#757575);border-radius:inherit;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.q-color-picker__sliders{padding:0 16px}.q-color-picker__sliders .q-slider__thumb{color:#424242}.q-color-picker__sliders .q-slider__thumb path{stroke-width:2px;fill:transparent}.q-color-picker__sliders .q-slider--active path{stroke-width:3px}.q-color-picker__tune-tab .q-slider{margin-left:18px;margin-right:18px}.q-color-picker__tune-tab input{border:1px solid #e0e0e0;border-radius:4px;font-size:11px;width:3.5em}.q-color-picker__palette-tab{padding:0!important}.q-color-picker__palette-rows--editable .q-color-picker__cube{cursor:pointer}.q-color-picker__cube{padding-bottom:10%;width:10%!important}.q-color-picker input{background:transparent;color:inherit;outline:0;text-align:center}.q-color-picker .q-tabs{overflow:hidden}.q-color-picker .q-tab--active{box-shadow:0 0 14px 3px rgba(0,0,0,.2)}.q-color-picker .q-tab--active .q-focus-helper,.q-color-picker .q-tab__indicator{display:none}.q-color-picker .q-tab-panels{background:inherit}.q-color-picker--dark{box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}.q-color-picker--dark .q-color-picker__tune-tab input{border:1px solid hsla(0,0%,100%,.3)}.q-color-picker--dark .q-slider__thumb{color:#fafafa}.q-date{background:#fff;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);display:inline-flex;max-width:100%;min-width:290px;width:290px}.q-date--bordered{border:1px solid rgba(0,0,0,.12)}.q-date__header{background-color:var(--q-primary);border-top-left-radius:inherit;color:#fff;padding:16px}.q-date__actions{padding:0 16px 16px}.q-date__content,.q-date__main{outline:0}.q-date__content .q-btn{font-weight:400}.q-date__header-link{opacity:.64;outline:0;transition:opacity .3s ease-out}.q-date__header-link--active,.q-date__header-link:focus,.q-date__header-link:hover{opacity:1}.q-date__header-subtitle{font-size:14px;letter-spacing:.00938em;line-height:1.75}.q-date__header-title-label{font-size:24px;letter-spacing:.00735em;line-height:1.2}.q-date__view{height:100%;min-height:290px;padding:16px;width:100%}.q-date__navigation{height:12.5%}.q-date__navigation>div:first-child{justify-content:flex-end;min-width:24px;width:8%}.q-date__navigation>div:last-child{justify-content:flex-start;min-width:24px;width:8%}.q-date__calendar-weekdays{height:12.5%}.q-date__calendar-weekdays>div{font-size:12px;opacity:.38}.q-date__calendar-item{align-items:center;display:inline-flex;height:12.5%!important;justify-content:center;padding:1px;position:relative;vertical-align:middle;width:14.285%!important}.q-date__calendar-item:after{border:1px dashed transparent;bottom:1px;content:"";left:0;pointer-events:none;position:absolute;right:0;top:1px}.q-date__calendar-item button,.q-date__calendar-item>div{border-radius:50%;height:30px;width:30px}.q-date__calendar-item>div{line-height:30px;text-align:center}.q-date__calendar-item>button{line-height:22px}.q-date__calendar-item--out{opacity:.18}.q-date__calendar-item--fill{visibility:hidden}.q-date__range-from:before,.q-date__range-to:before,.q-date__range:before{background-color:currentColor;bottom:1px;content:"";left:0;opacity:.3;position:absolute;right:0;top:1px}.q-date__range-from:nth-child(7n-6):before,.q-date__range-to:nth-child(7n-6):before,.q-date__range:nth-child(7n-6):before{border-bottom-left-radius:0;border-top-left-radius:0}.q-date__range-from:nth-child(7n):before,.q-date__range-to:nth-child(7n):before,.q-date__range:nth-child(7n):before{border-bottom-right-radius:0;border-top-right-radius:0}.q-date__range-from:before{left:50%}.q-date__range-to:before{right:50%}.q-date__edit-range:after{border-color:currentColor transparent}.q-date__edit-range:nth-child(7n-6):after{border-bottom-left-radius:0;border-top-left-radius:0}.q-date__edit-range:nth-child(7n):after{border-bottom-right-radius:0;border-top-right-radius:0}.q-date__edit-range-from-to:after,.q-date__edit-range-from:after{border-bottom-color:currentColor;border-bottom-left-radius:28px;border-left-color:currentColor;border-top-color:currentColor;border-top-left-radius:28px;left:4px}.q-date__edit-range-from-to:after,.q-date__edit-range-to:after{border-bottom-color:currentColor;border-bottom-right-radius:28px;border-right-color:currentColor;border-top-color:currentColor;border-top-right-radius:28px;right:4px}.q-date__calendar-days-container{height:75%;min-height:192px}.q-date__calendar-days>div{height:16.66%!important}.q-date__event{background-color:var(--q-secondary);border-radius:5px;bottom:2px;height:5px;left:50%;position:absolute;transform:translate3d(-50%,0,0);width:8px}.q-date__today{box-shadow:0 0 1px 0 currentColor}.q-date__years-content{padding:0 8px}.q-date__months-item,.q-date__years-item{flex:0 0 33.3333%}.q-date--readonly .q-date__content,.q-date--readonly .q-date__header,.q-date.disabled .q-date__content,.q-date.disabled .q-date__header{pointer-events:none}.q-date--readonly .q-date__navigation{display:none}.q-date--portrait{flex-direction:column}.q-date--portrait-standard .q-date__content{height:calc(100% - 86px)}.q-date--portrait-standard .q-date__header{border-top-right-radius:inherit;height:86px}.q-date--portrait-standard .q-date__header-title{align-items:center;height:30px}.q-date--portrait-minimal .q-date__content{height:100%}.q-date--landscape{align-items:stretch;flex-direction:row;min-width:420px}.q-date--landscape>div{display:flex;flex-direction:column}.q-date--landscape .q-date__content{height:100%}.q-date--landscape-standard{min-width:420px}.q-date--landscape-standard .q-date__header{border-bottom-left-radius:inherit;min-width:110px;width:110px}.q-date--landscape-standard .q-date__header-title{flex-direction:column}.q-date--landscape-standard .q-date__header-today{margin-left:-8px;margin-top:12px}.q-date--landscape-minimal{width:310px}.q-date--dark{border-color:hsla(0,0%,100%,.28);box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}.q-dialog__title{font-size:1.25rem;font-weight:500;letter-spacing:.0125em;line-height:2rem}.q-dialog__progress{font-size:4rem}.q-dialog__inner{outline:0}.q-dialog__inner>div{-webkit-overflow-scrolling:touch;border-radius:4px;overflow:auto;pointer-events:all;will-change:scroll-position}.q-dialog__inner--square>div{border-radius:0!important}.q-dialog__inner>.q-card>.q-card__actions .q-btn--rectangle{min-width:64px}.q-dialog__inner--minimized{padding:24px}.q-dialog__inner--minimized>div{max-height:calc(100vh - 48px)}.q-dialog__inner--maximized>div{border-radius:0!important;height:100%;left:0!important;max-height:100vh;max-width:100vw;top:0!important;width:100%}.q-dialog__inner--bottom,.q-dialog__inner--top{padding-bottom:0!important;padding-top:0!important}.q-dialog__inner--left,.q-dialog__inner--right{padding-left:0!important;padding-right:0!important}.q-dialog__inner--left:not(.q-dialog__inner--animating)>div,.q-dialog__inner--top:not(.q-dialog__inner--animating)>div{border-top-left-radius:0}.q-dialog__inner--right:not(.q-dialog__inner--animating)>div,.q-dialog__inner--top:not(.q-dialog__inner--animating)>div{border-top-right-radius:0}.q-dialog__inner--bottom:not(.q-dialog__inner--animating)>div,.q-dialog__inner--left:not(.q-dialog__inner--animating)>div{border-bottom-left-radius:0}.q-dialog__inner--bottom:not(.q-dialog__inner--animating)>div,.q-dialog__inner--right:not(.q-dialog__inner--animating)>div{border-bottom-right-radius:0}.q-dialog__inner--fullwidth>div{max-width:100%!important;width:100%!important}.q-dialog__inner--fullheight>div{height:100%!important;max-height:100%!important}.q-dialog__backdrop{background:rgba(0,0,0,.4);outline:0;pointer-events:all;z-index:-1}body.platform-android:not(.native-mobile) .q-dialog__inner--minimized>div,body.platform-ios .q-dialog__inner--minimized>div{max-height:calc(100vh - 108px)}body.q-ios-padding .q-dialog__inner{padding-bottom:env(safe-area-inset-bottom)!important;padding-top:env(safe-area-inset-top)!important}body.q-ios-padding .q-dialog__inner>div{max-height:calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom))!important}@media (max-width:599.98px){.q-dialog__inner--bottom,.q-dialog__inner--top{padding-left:0;padding-right:0}.q-dialog__inner--bottom>div,.q-dialog__inner--top>div{width:100%!important}}@media (min-width:600px){.q-dialog__inner--minimized>div{max-width:560px}}.q-body--dialog{overflow:hidden}.q-bottom-sheet{padding-bottom:8px}.q-bottom-sheet__avatar{border-radius:50%}.q-bottom-sheet--list{width:400px}.q-bottom-sheet--list .q-icon,.q-bottom-sheet--list img{font-size:24px;height:24px;width:24px}.q-bottom-sheet--grid{width:700px}.q-bottom-sheet--grid .q-bottom-sheet__item{min-width:100px;padding:8px;text-align:center}.q-bottom-sheet--grid .q-bottom-sheet__empty-icon,.q-bottom-sheet--grid .q-icon,.q-bottom-sheet--grid img{font-size:48px;height:48px;margin-bottom:8px;width:48px}.q-bottom-sheet--grid .q-separator{margin:12px 0}.q-bottom-sheet__item{flex:0 0 33.3333%}@media (min-width:600px){.q-bottom-sheet__item{flex:0 0 25%}}.q-dialog-plugin{width:400px}.q-dialog-plugin__form{max-height:50vh}.q-dialog-plugin .q-card__section+.q-card__section{padding-top:0}.q-dialog-plugin--progress{text-align:center}.q-editor{background-color:#fff;border:1px solid rgba(0,0,0,.12);border-radius:4px}.q-editor.disabled{border-style:dashed}.q-editor>div:first-child,.q-editor__toolbars-container,.q-editor__toolbars-container>div:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-editor__content{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;max-width:100%;min-height:10em;outline:0;overflow:auto;padding:10px}.q-editor__content pre{white-space:pre-wrap}.q-editor__content hr{background:rgba(0,0,0,.12);border:0;height:1px;margin:1px;outline:0}.q-editor__content:empty:not(:focus):before{content:attr(placeholder);opacity:.7}.q-editor__toolbar{border-bottom:1px solid rgba(0,0,0,.12);min-height:32px}.q-editor__toolbars-container{max-width:100%}.q-editor .q-btn{margin:4px}.q-editor__toolbar-group{margin:0 4px;position:relative}.q-editor__toolbar-group+.q-editor__toolbar-group:before{background:rgba(0,0,0,.12);bottom:4px;content:"";left:-4px;position:absolute;top:4px;width:1px}.q-editor__link-input{background:none;border:none;border-radius:0;color:inherit;outline:0;text-decoration:none;text-transform:none}.q-editor--flat,.q-editor--flat .q-editor__toolbar{border:0}.q-editor--dense .q-editor__toolbar-group{align-items:center;display:flex;flex-wrap:nowrap}.q-editor--dark{border-color:hsla(0,0%,100%,.28)}.q-editor--dark .q-editor__content hr{background:hsla(0,0%,100%,.28)}.q-editor--dark .q-editor__toolbar{border-color:hsla(0,0%,100%,.28)}.q-editor--dark .q-editor__toolbar-group+.q-editor__toolbar-group:before{background:hsla(0,0%,100%,.28)}.q-expansion-item__border{opacity:0}.q-expansion-item__toggle-icon{position:relative;transition:transform .3s}.q-expansion-item__toggle-icon--rotated{transform:rotate(180deg)}.q-expansion-item__toggle-focus{height:1em!important;position:relative!important;width:1em!important}.q-expansion-item__toggle-focus+.q-expansion-item__toggle-icon{margin-top:-1em}.q-expansion-item--standard.q-expansion-item--expanded>div>.q-expansion-item__border{opacity:1}.q-expansion-item--popup{transition:padding .5s}.q-expansion-item--popup>.q-expansion-item__container{border:1px solid rgba(0,0,0,.12)}.q-expansion-item--popup>.q-expansion-item__container>.q-separator{display:none}.q-expansion-item--popup.q-expansion-item--collapsed{padding:0 15px}.q-expansion-item--popup.q-expansion-item--expanded{padding:15px 0}.q-expansion-item--popup.q-expansion-item--expanded+.q-expansion-item--popup.q-expansion-item--expanded{padding-top:0}.q-expansion-item--popup.q-expansion-item--collapsed:not(:first-child)>.q-expansion-item__container{border-top-width:0}.q-expansion-item--popup.q-expansion-item--expanded+.q-expansion-item--popup.q-expansion-item--collapsed>.q-expansion-item__container{border-top-width:1px}.q-expansion-item__content>.q-card{border-radius:0;box-shadow:none}.q-expansion-item--expanded+.q-expansion-item--expanded>div>.q-expansion-item__border--top,.q-expansion-item:first-child>div>.q-expansion-item__border--top,.q-expansion-item:last-child>div>.q-expansion-item__border--bottom{opacity:0}.q-expansion-item--expanded .q-textarea--autogrow textarea{animation:q-expansion-done 0s}@keyframes q-expansion-done{0%{--q-exp-done:1}}.z-fab{z-index:990}.q-fab{position:relative;vertical-align:middle}.q-fab>.q-btn{width:100%}.q-fab--form-rounded{border-radius:28px}.q-fab--form-square{border-radius:4px}.q-fab__active-icon,.q-fab__icon{transition:opacity .4s,transform .4s}.q-fab__icon{opacity:1;transform:rotate(0deg)}.q-fab__active-icon{opacity:0;transform:rotate(-180deg)}.q-fab__label--external{padding:0 8px;position:absolute;transition:opacity .18s cubic-bezier(.65,.815,.735,.395)}.q-fab__label--external-hidden{opacity:0;pointer-events:none}.q-fab__label--external-left{left:-12px;top:50%;transform:translate(-100%,-50%)}.q-fab__label--external-right{right:-12px;top:50%;transform:translate(100%,-50%)}.q-fab__label--external-bottom{bottom:-12px;left:50%;transform:translate(-50%,100%)}.q-fab__label--external-top{left:50%;top:-12px;transform:translate(-50%,-100%)}.q-fab__label--internal{max-height:30px;padding:0;transition:font-size .12s cubic-bezier(.65,.815,.735,.395),max-height .12s cubic-bezier(.65,.815,.735,.395),opacity .07s cubic-bezier(.65,.815,.735,.395)}.q-fab__label--internal-hidden{font-size:0;opacity:0}.q-fab__label--internal-top{padding-bottom:.12em}.q-fab__label--internal-bottom{padding-top:.12em}.q-fab__label--internal-bottom.q-fab__label--internal-hidden,.q-fab__label--internal-top.q-fab__label--internal-hidden{max-height:0}.q-fab__label--internal-left{padding-left:.285em;padding-right:.571em}.q-fab__label--internal-right{padding-left:.571em;padding-right:.285em}.q-fab__icon-holder{min-height:24px;min-width:24px;position:relative}.q-fab__icon-holder--opened .q-fab__icon{opacity:0;transform:rotate(180deg)}.q-fab__icon-holder--opened .q-fab__active-icon{opacity:1;transform:rotate(0deg)}.q-fab__actions{align-items:center;align-self:center;justify-content:center;opacity:0;padding:3px;pointer-events:none;position:absolute;transition:transform .18s ease-in,opacity .18s ease-in}.q-fab__actions .q-btn{margin:5px}.q-fab__actions--right{height:56px;left:100%;margin-left:9px;transform:scale(.4) translateX(-62px);transform-origin:0 50%}.q-fab__actions--left{flex-direction:row-reverse;height:56px;margin-right:9px;right:100%;transform:scale(.4) translateX(62px);transform-origin:100% 50%}.q-fab__actions--up{bottom:100%;flex-direction:column-reverse;margin-bottom:9px;transform:scale(.4) translateY(62px);transform-origin:50% 100%;width:56px}.q-fab__actions--down{flex-direction:column;margin-top:9px;top:100%;transform:scale(.4) translateY(-62px);transform-origin:50% 0;width:56px}.q-fab__actions--down,.q-fab__actions--up{left:50%;margin-left:-28px}.q-fab__actions--opened{opacity:1;pointer-events:all;transform:scale(1) translate(.1px)}.q-fab--align-left>.q-fab__actions--down,.q-fab--align-left>.q-fab__actions--up{align-items:flex-start;left:28px}.q-fab--align-right>.q-fab__actions--down,.q-fab--align-right>.q-fab__actions--up{align-items:flex-end;left:auto;right:0}.q-field{font-size:14px}.q-field ::-ms-clear,.q-field ::-ms-reveal{display:none}.q-field--with-bottom{padding-bottom:20px}.q-field__marginal{color:rgba(0,0,0,.54);font-size:24px;height:56px}.q-field__marginal>*+*{margin-left:2px}.q-field__marginal .q-avatar{font-size:32px}.q-field__before,.q-field__prepend{padding-right:12px}.q-field__after,.q-field__append{padding-left:12px}.q-field__after:empty,.q-field__append:empty{display:none}.q-field__append+.q-field__append{padding-left:2px}.q-field__inner{text-align:left}.q-field__bottom{-webkit-backface-visibility:hidden;backface-visibility:hidden;color:rgba(0,0,0,.54);font-size:12px;line-height:1;min-height:20px;padding:8px 12px 0}.q-field__bottom--animated{bottom:0;left:0;position:absolute;right:0;transform:translateY(100%)}.q-field__messages{line-height:1}.q-field__messages>div{word-wrap:break-word;overflow-wrap:break-word;word-break:break-word}.q-field__messages>div+div{margin-top:4px}.q-field__counter{line-height:1;padding-left:8px}.q-field--item-aligned{padding:8px 16px}.q-field--item-aligned .q-field__before{min-width:56px}.q-field__control-container{height:inherit}.q-field__control{color:var(--q-primary);height:56px;max-width:100%;outline:none}.q-field__control:after,.q-field__control:before{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.q-field__control:before{border-radius:inherit}.q-field__shadow{opacity:0;overflow:hidden;top:8px;transition:opacity .36s cubic-bezier(.4,0,.2,1);white-space:pre-wrap}.q-field__shadow+.q-field__native::placeholder{transition:opacity .36s cubic-bezier(.4,0,.2,1)}.q-field__shadow+.q-field__native:focus::placeholder{opacity:0}.q-field__input,.q-field__native,.q-field__prefix,.q-field__suffix{background:none;border:none;border-radius:0;color:rgba(0,0,0,.87);font-weight:400;letter-spacing:.00937em;line-height:28px;outline:0;padding:6px 0;text-decoration:inherit;text-transform:inherit}.q-field__input,.q-field__native{min-width:0;outline:0!important;-webkit-user-select:auto;user-select:auto;width:100%}.q-field__input:-webkit-autofill,.q-field__native:-webkit-autofill{-webkit-animation-fill-mode:both;-webkit-animation-name:q-autofill}.q-field__input:-webkit-autofill+.q-field__label,.q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-40%) scale(.75)}.q-field__input[type=color]+.q-field__label,.q-field__input[type=date]+.q-field__label,.q-field__input[type=datetime-local]+.q-field__label,.q-field__input[type=month]+.q-field__label,.q-field__input[type=time]+.q-field__label,.q-field__input[type=week]+.q-field__label,.q-field__native[type=color]+.q-field__label,.q-field__native[type=date]+.q-field__label,.q-field__native[type=datetime-local]+.q-field__label,.q-field__native[type=month]+.q-field__label,.q-field__native[type=time]+.q-field__label,.q-field__native[type=week]+.q-field__label{transform:translateY(-40%) scale(.75)}.q-field__input:invalid,.q-field__native:invalid{box-shadow:none}.q-field__native[type=file]{line-height:1em}.q-field__input{height:0;line-height:24px;min-height:24px;padding:0}.q-field__prefix,.q-field__suffix{transition:opacity .36s cubic-bezier(.4,0,.2,1);white-space:nowrap}.q-field__prefix{padding-right:4px}.q-field__suffix{padding-left:4px}.q-field--disabled .q-placeholder,.q-field--readonly .q-placeholder{opacity:1!important}.q-field--readonly.q-field--labeled .q-field__input,.q-field--readonly.q-field--labeled .q-field__native{cursor:default}.q-field--readonly.q-field--float .q-field__input,.q-field--readonly.q-field--float .q-field__native{cursor:text}.q-field--disabled .q-field__inner{cursor:not-allowed}.q-field--disabled .q-field__control{pointer-events:none}.q-field--disabled .q-field__control>div{opacity:.6!important}.q-field--disabled .q-field__control>div,.q-field--disabled .q-field__control>div *{outline:0!important}.q-field__label{-webkit-backface-visibility:hidden;backface-visibility:hidden;color:rgba(0,0,0,.6);font-size:16px;font-weight:400;left:0;letter-spacing:.00937em;line-height:20px;max-width:100%;text-decoration:inherit;text-transform:inherit;top:18px;transform-origin:left top;transition:transform .36s cubic-bezier(.4,0,.2,1),max-width .324s cubic-bezier(.4,0,.2,1)}.q-field--float .q-field__label{max-width:133%;transform:translateY(-40%) scale(.75);transition:transform .36s cubic-bezier(.4,0,.2,1),max-width .396s cubic-bezier(.4,0,.2,1)}.q-field--highlighted .q-field__label{color:currentColor}.q-field--highlighted .q-field__shadow{opacity:.5}.q-field--filled .q-field__control{background:rgba(0,0,0,.05);border-radius:4px 4px 0 0;padding:0 12px}.q-field--filled .q-field__control:before{background:rgba(0,0,0,.05);border-bottom:1px solid rgba(0,0,0,.42);opacity:0;transition:opacity .36s cubic-bezier(.4,0,.2,1),background .36s cubic-bezier(.4,0,.2,1)}.q-field--filled .q-field__control:hover:before{opacity:1}.q-field--filled .q-field__control:after{background:currentColor;height:2px;top:auto;transform:scaleX(0);transform-origin:center bottom;transition:transform .36s cubic-bezier(.4,0,.2,1)}.q-field--filled.q-field--rounded .q-field__control{border-radius:28px 28px 0 0}.q-field--filled.q-field--highlighted .q-field__control:before{background:rgba(0,0,0,.12);opacity:1}.q-field--filled.q-field--highlighted .q-field__control:after{transform:scaleX(1)}.q-field--filled.q-field--dark .q-field__control,.q-field--filled.q-field--dark .q-field__control:before{background:hsla(0,0%,100%,.07)}.q-field--filled.q-field--dark.q-field--highlighted .q-field__control:before{background:hsla(0,0%,100%,.1)}.q-field--filled.q-field--readonly .q-field__control:before{background:transparent;border-bottom-style:dashed;opacity:1}.q-field--outlined .q-field__control{border-radius:4px;padding:0 12px}.q-field--outlined .q-field__control:before{border:1px solid rgba(0,0,0,.24);transition:border-color .36s cubic-bezier(.4,0,.2,1)}.q-field--outlined .q-field__control:hover:before{border-color:#000}.q-field--outlined .q-field__control:after{border:2px solid transparent;border-radius:inherit;height:inherit;transition:border-color .36s cubic-bezier(.4,0,.2,1)}.q-field--outlined .q-field__input:-webkit-autofill,.q-field--outlined .q-field__native:-webkit-autofill{margin-bottom:1px;margin-top:1px}.q-field--outlined.q-field--rounded .q-field__control{border-radius:28px}.q-field--outlined.q-field--highlighted .q-field__control:hover:before{border-color:transparent}.q-field--outlined.q-field--highlighted .q-field__control:after{border-color:currentColor;border-width:2px;transform:scaleX(1)}.q-field--outlined.q-field--readonly .q-field__control:before{border-style:dashed}.q-field--standard .q-field__control:before{border-bottom:1px solid rgba(0,0,0,.24);transition:border-color .36s cubic-bezier(.4,0,.2,1)}.q-field--standard .q-field__control:hover:before{border-color:#000}.q-field--standard .q-field__control:after{background:currentColor;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;height:2px;top:auto;transform:scaleX(0);transform-origin:center bottom;transition:transform .36s cubic-bezier(.4,0,.2,1)}.q-field--standard.q-field--highlighted .q-field__control:after{transform:scaleX(1)}.q-field--standard.q-field--readonly .q-field__control:before{border-bottom-style:dashed}.q-field--dark .q-field__control:before{border-color:hsla(0,0%,100%,.6)}.q-field--dark .q-field__control:hover:before{border-color:#fff}.q-field--dark .q-field__input,.q-field--dark .q-field__native,.q-field--dark .q-field__prefix,.q-field--dark .q-field__suffix{color:#fff}.q-field--dark .q-field__bottom,.q-field--dark .q-field__marginal,.q-field--dark:not(.q-field--highlighted) .q-field__label{color:hsla(0,0%,100%,.7)}.q-field--standout .q-field__control{background:rgba(0,0,0,.05);border-radius:4px;padding:0 12px;transition:box-shadow .36s cubic-bezier(.4,0,.2,1),background-color .36s cubic-bezier(.4,0,.2,1)}.q-field--standout .q-field__control:before{background:rgba(0,0,0,.07);opacity:0;transition:opacity .36s cubic-bezier(.4,0,.2,1),background .36s cubic-bezier(.4,0,.2,1)}.q-field--standout .q-field__control:hover:before{opacity:1}.q-field--standout.q-field--rounded .q-field__control{border-radius:28px}.q-field--standout.q-field--highlighted .q-field__control{background:#000;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12)}.q-field--standout.q-field--highlighted .q-field__append,.q-field--standout.q-field--highlighted .q-field__input,.q-field--standout.q-field--highlighted .q-field__native,.q-field--standout.q-field--highlighted .q-field__prefix,.q-field--standout.q-field--highlighted .q-field__prepend,.q-field--standout.q-field--highlighted .q-field__suffix{color:#fff}.q-field--standout.q-field--readonly .q-field__control:before{background:transparent;border:1px dashed rgba(0,0,0,.24);opacity:1}.q-field--standout.q-field--dark .q-field__control,.q-field--standout.q-field--dark .q-field__control:before{background:hsla(0,0%,100%,.07)}.q-field--standout.q-field--dark.q-field--highlighted .q-field__control{background:#fff}.q-field--standout.q-field--dark.q-field--highlighted .q-field__append,.q-field--standout.q-field--dark.q-field--highlighted .q-field__input,.q-field--standout.q-field--dark.q-field--highlighted .q-field__native,.q-field--standout.q-field--dark.q-field--highlighted .q-field__prefix,.q-field--standout.q-field--dark.q-field--highlighted .q-field__prepend,.q-field--standout.q-field--dark.q-field--highlighted .q-field__suffix{color:#000}.q-field--standout.q-field--dark.q-field--readonly .q-field__control:before{border-color:hsla(0,0%,100%,.24)}.q-field--labeled .q-field__native,.q-field--labeled .q-field__prefix,.q-field--labeled .q-field__suffix{line-height:24px;padding-bottom:8px;padding-top:24px}.q-field--labeled .q-field__shadow{top:0}.q-field--labeled:not(.q-field--float) .q-field__prefix,.q-field--labeled:not(.q-field--float) .q-field__suffix{opacity:0}.q-field--labeled:not(.q-field--float) .q-field__input::placeholder,.q-field--labeled:not(.q-field--float) .q-field__native::placeholder{color:transparent}.q-field--labeled.q-field--dense .q-field__native,.q-field--labeled.q-field--dense .q-field__prefix,.q-field--labeled.q-field--dense .q-field__suffix{padding-bottom:2px;padding-top:14px}.q-field--dense .q-field__shadow{top:0}.q-field--dense .q-field__control,.q-field--dense .q-field__marginal{height:40px}.q-field--dense .q-field__bottom{font-size:11px}.q-field--dense .q-field__label{font-size:14px;top:10px}.q-field--dense .q-field__before,.q-field--dense .q-field__prepend{padding-right:6px}.q-field--dense .q-field__after,.q-field--dense .q-field__append{padding-left:6px}.q-field--dense .q-field__append+.q-field__append{padding-left:2px}.q-field--dense .q-field__marginal .q-avatar{font-size:24px}.q-field--dense.q-field--float .q-field__label{transform:translateY(-30%) scale(.75)}.q-field--dense .q-field__input:-webkit-autofill+.q-field__label,.q-field--dense .q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-30%) scale(.75)}.q-field--dense .q-field__input[type=color]+.q-field__label,.q-field--dense .q-field__input[type=date]+.q-field__label,.q-field--dense .q-field__input[type=datetime-local]+.q-field__label,.q-field--dense .q-field__input[type=month]+.q-field__label,.q-field--dense .q-field__input[type=time]+.q-field__label,.q-field--dense .q-field__input[type=week]+.q-field__label,.q-field--dense .q-field__native[type=color]+.q-field__label,.q-field--dense .q-field__native[type=date]+.q-field__label,.q-field--dense .q-field__native[type=datetime-local]+.q-field__label,.q-field--dense .q-field__native[type=month]+.q-field__label,.q-field--dense .q-field__native[type=time]+.q-field__label,.q-field--dense .q-field__native[type=week]+.q-field__label{transform:translateY(-30%) scale(.75)}.q-field--borderless .q-field__bottom,.q-field--borderless.q-field--dense .q-field__control,.q-field--standard .q-field__bottom,.q-field--standard.q-field--dense .q-field__control{padding-left:0;padding-right:0}.q-field--error .q-field__label{animation:q-field-label .36s}.q-field--error .q-field__bottom{color:var(--q-negative)}.q-field__focusable-action{background:transparent;border:0;color:inherit;cursor:pointer;opacity:.6;outline:0!important;padding:0}.q-field__focusable-action:focus,.q-field__focusable-action:hover{opacity:1}.q-field--auto-height .q-field__control{height:auto}.q-field--auto-height .q-field__control,.q-field--auto-height .q-field__native{min-height:56px}.q-field--auto-height .q-field__native{align-items:center}.q-field--auto-height .q-field__control-container{padding-top:0}.q-field--auto-height .q-field__native,.q-field--auto-height .q-field__prefix,.q-field--auto-height .q-field__suffix{line-height:18px}.q-field--auto-height.q-field--labeled .q-field__control-container{padding-top:24px}.q-field--auto-height.q-field--labeled .q-field__shadow{top:24px}.q-field--auto-height.q-field--labeled .q-field__native,.q-field--auto-height.q-field--labeled .q-field__prefix,.q-field--auto-height.q-field--labeled .q-field__suffix{padding-top:0}.q-field--auto-height.q-field--labeled .q-field__native{min-height:24px}.q-field--auto-height.q-field--dense .q-field__control,.q-field--auto-height.q-field--dense .q-field__native{min-height:40px}.q-field--auto-height.q-field--dense.q-field--labeled .q-field__control-container{padding-top:14px}.q-field--auto-height.q-field--dense.q-field--labeled .q-field__shadow{top:14px}.q-field--auto-height.q-field--dense.q-field--labeled .q-field__native{min-height:24px}.q-field--square .q-field__control{border-radius:0!important}.q-transition--field-message-enter-active,.q-transition--field-message-leave-active{transition:transform .6s cubic-bezier(.86,0,.07,1),opacity .6s cubic-bezier(.86,0,.07,1)}.q-transition--field-message-enter-from,.q-transition--field-message-leave-to{opacity:0;transform:translateY(-10px)}.q-transition--field-message-leave-active,.q-transition--field-message-leave-from{position:absolute}@keyframes q-field-label{40%{margin-left:2px}60%,80%{margin-left:-2px}70%,90%{margin-left:2px}}@keyframes q-autofill{to{background:transparent;color:inherit}}.q-file .q-field__native{overflow:hidden;word-break:break-all}.q-file .q-field__input{opacity:0!important}.q-file .q-field__input::-webkit-file-upload-button{cursor:pointer}.q-file__filler{border:none;padding:0;visibility:hidden;width:100%}.q-file__dnd{outline:1px dashed currentColor;outline-offset:-4px}.q-form,.q-img{position:relative}.q-img{display:inline-block;overflow:hidden;vertical-align:middle;width:100%}.q-img__loading .q-spinner{font-size:50px}.q-img__container{border-radius:inherit;font-size:0}.q-img__image{border-radius:inherit;height:100%;opacity:0;width:100%}.q-img__image--with-transition{transition:opacity .28s ease-in}.q-img__image--loaded{opacity:1}.q-img__content{border-radius:inherit;pointer-events:none}.q-img__content>div{background:rgba(0,0,0,.47);color:#fff;padding:16px;pointer-events:all;position:absolute}.q-img--no-menu .q-img__image,.q-img--no-menu .q-img__placeholder{pointer-events:none}.q-inner-loading{background:hsla(0,0%,100%,.6)}.q-inner-loading--dark{background:rgba(0,0,0,.4)}.q-inner-loading__label{margin-top:8px}.q-textarea .q-field__control{height:auto;min-height:56px}.q-textarea .q-field__control-container{padding-bottom:2px;padding-top:2px}.q-textarea .q-field__shadow{bottom:2px;top:2px}.q-textarea .q-field__native,.q-textarea .q-field__prefix,.q-textarea .q-field__suffix{line-height:18px}.q-textarea .q-field__native{min-height:52px;padding-top:17px;resize:vertical}.q-textarea.q-field--labeled .q-field__control-container{padding-top:26px}.q-textarea.q-field--labeled .q-field__shadow{top:26px}.q-textarea.q-field--labeled .q-field__native,.q-textarea.q-field--labeled .q-field__prefix,.q-textarea.q-field--labeled .q-field__suffix{padding-top:0}.q-textarea.q-field--labeled .q-field__native{min-height:26px;padding-top:1px}.q-textarea--autogrow .q-field__native{resize:none}.q-textarea.q-field--dense .q-field__control,.q-textarea.q-field--dense .q-field__native{min-height:36px}.q-textarea.q-field--dense .q-field__native{padding-top:9px}.q-textarea.q-field--dense.q-field--labeled .q-field__control-container{padding-top:14px}.q-textarea.q-field--dense.q-field--labeled .q-field__shadow{top:14px}.q-textarea.q-field--dense.q-field--labeled .q-field__native{min-height:24px;padding-top:3px}.q-textarea.q-field--dense.q-field--labeled .q-field__prefix,.q-textarea.q-field--dense.q-field--labeled .q-field__suffix{padding-top:2px}.q-textarea.disabled .q-field__native,body.mobile .q-textarea .q-field__native{resize:none}.q-intersection{position:relative}.q-item{color:inherit;min-height:48px;padding:8px 16px;transition:color .3s,background-color .3s}.q-item__section--side{align-items:flex-start;color:#757575;max-width:100%;min-width:0;padding-right:16px;width:auto}.q-item__section--side>.q-icon{font-size:24px}.q-item__section--side>.q-avatar{font-size:40px}.q-item__section--avatar{color:inherit;min-width:56px}.q-item__section--thumbnail img{height:56px;width:100px}.q-item__section--nowrap{white-space:nowrap}.q-item>.q-focus-helper+.q-item__section--thumbnail,.q-item>.q-item__section--thumbnail:first-child{margin-left:-16px}.q-item>.q-item__section--thumbnail:last-of-type{margin-right:-16px}.q-item__label{line-height:1.2em!important;max-width:100%}.q-item__label--overline{color:rgba(0,0,0,.7)}.q-item__label--caption{color:rgba(0,0,0,.54)}.q-item__label--header{color:#757575;font-size:.875rem;letter-spacing:.01786em;line-height:1.25rem;padding:16px}.q-list--padding .q-item__label--header,.q-separator--spaced+.q-item__label--header{padding-top:8px}.q-item__label+.q-item__label{margin-top:4px}.q-item__section--main{flex:10000 1 0%;max-width:100%;min-width:0;width:auto}.q-item__section--main+.q-item__section--main{margin-left:8px}.q-item__section--main~.q-item__section--side{align-items:flex-end;padding-left:16px;padding-right:0}.q-item__section--main.q-item__section--thumbnail{margin-left:0;margin-right:-16px}.q-list--bordered{border:1px solid rgba(0,0,0,.12)}.q-list--separator>.q-item-type+.q-item-type,.q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top:1px solid rgba(0,0,0,.12)}.q-list--padding{padding:8px 0}.q-item--dense,.q-list--dense>.q-item{min-height:32px;padding:2px 16px}.q-list--dark.q-list--separator>.q-item-type+.q-item-type,.q-list--dark.q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top-color:hsla(0,0%,100%,.28)}.q-item--dark,.q-list--dark{border-color:hsla(0,0%,100%,.28);color:#fff}.q-item--dark .q-item__section--side:not(.q-item__section--avatar),.q-list--dark .q-item__section--side:not(.q-item__section--avatar){color:hsla(0,0%,100%,.7)}.q-item--dark .q-item__label--header,.q-list--dark .q-item__label--header{color:hsla(0,0%,100%,.64)}.q-item--dark .q-item__label--caption,.q-item--dark .q-item__label--overline,.q-list--dark .q-item__label--caption,.q-list--dark .q-item__label--overline{color:hsla(0,0%,100%,.8)}.q-item{position:relative}.q-item--active,.q-item.q-router-link--active{color:var(--q-primary)}.q-knob{font-size:48px}.q-knob--editable{cursor:pointer;outline:0}.q-knob--editable:before{border-radius:50%;bottom:0;box-shadow:none;content:"";left:0;position:absolute;right:0;top:0;transition:box-shadow .24s ease-in-out}.q-knob--editable:focus:before{box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12)}body.body--dark .q-knob--editable:focus:before{box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}.q-layout{outline:0;width:100%}.q-layout-container{height:100%;position:relative;width:100%}.q-layout-container .q-layout{min-height:100%}.q-layout-container>div{transform:translateZ(0)}.q-layout-container>div>div{max-height:100%;min-height:0}.q-layout__shadow{width:100%}.q-layout__shadow:after{bottom:0;box-shadow:0 0 10px 2px rgba(0,0,0,.2),0 0 10px rgba(0,0,0,.24);content:"";left:0;position:absolute;right:0;top:0}.q-layout__section--marginal{background-color:var(--q-primary);color:#fff}.q-header--hidden{transform:translateY(-110%)}.q-header--bordered{border-bottom:1px solid rgba(0,0,0,.12)}.q-header .q-layout__shadow{bottom:-10px}.q-header .q-layout__shadow:after{bottom:10px}.q-footer--hidden{transform:translateY(110%)}.q-footer--bordered{border-top:1px solid rgba(0,0,0,.12)}.q-footer .q-layout__shadow{top:-10px}.q-footer .q-layout__shadow:after{top:10px}.q-footer,.q-header{z-index:2000}.q-drawer{background:#fff;bottom:0;position:absolute;top:0;z-index:1000}.q-drawer--on-top{z-index:3000}.q-drawer--left{left:0;transform:translateX(-100%)}.q-drawer--left.q-drawer--bordered{border-right:1px solid rgba(0,0,0,.12)}.q-drawer--left .q-layout__shadow{left:10px;right:-10px}.q-drawer--left .q-layout__shadow:after{right:10px}.q-drawer--right{right:0;transform:translateX(100%)}.q-drawer--right.q-drawer--bordered{border-left:1px solid rgba(0,0,0,.12)}.q-drawer--right .q-layout__shadow{left:-10px}.q-drawer--right .q-layout__shadow:after{left:10px}.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini{padding:0!important}.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section{justify-content:center;min-width:0;padding-left:0;padding-right:0;text-align:center}.q-drawer--mini .q-expansion-item__content,.q-drawer--mini .q-mini-drawer-hide,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__label,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--main,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--side~.q-item__section--side{display:none}.q-drawer--mini-animate .q-drawer__content{overflow-x:hidden!important;white-space:nowrap}.q-drawer--mobile .q-mini-drawer-hide,.q-drawer--mobile .q-mini-drawer-only,.q-drawer--standard .q-mini-drawer-only{display:none}.q-drawer__backdrop{will-change:background-color;z-index:2999!important}.q-drawer__opener{height:100%;-webkit-user-select:none;user-select:none;width:15px;z-index:2001}.q-footer,.q-header,.q-layout,.q-page{position:relative}.q-page-sticky--shrink{pointer-events:none}.q-page-sticky--shrink>div{display:inline-block;pointer-events:auto}body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content,body.q-ios-padding .q-layout--standard .q-header>.q-tabs:first-child .q-tabs-head,body.q-ios-padding .q-layout--standard .q-header>.q-toolbar:first-child{min-height:70px;min-height:calc(env(safe-area-inset-top) + 50px);padding-top:env(safe-area-inset-top)}body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content,body.q-ios-padding .q-layout--standard .q-footer>.q-tabs:last-child .q-tabs-head,body.q-ios-padding .q-layout--standard .q-footer>.q-toolbar:last-child{min-height:calc(env(safe-area-inset-bottom) + 50px);padding-bottom:env(safe-area-inset-bottom)}.q-body--layout-animate .q-drawer__backdrop{transition:background-color .12s!important}.q-body--layout-animate .q-drawer{transition:transform .12s,width .12s,top .12s,bottom .12s!important}.q-body--layout-animate .q-layout__section--marginal{transition:transform .12s,left .12s,right .12s!important}.q-body--layout-animate .q-page-container{transition:padding-top .12s,padding-right .12s,padding-bottom .12s,padding-left .12s!important}.q-body--layout-animate .q-page-sticky{transition:transform .12s,left .12s,right .12s,top .12s,bottom .12s!important}body:not(.q-body--layout-animate) .q-layout--prevent-focus{visibility:hidden}.q-body--drawer-toggle{overflow-x:hidden!important}@media (max-width:599.98px){.q-layout-padding{padding:8px}}@media (min-width:600px) and (max-width:1439.98px){.q-layout-padding{padding:16px}}@media (min-width:1440px){.q-layout-padding{padding:24px}}body.body--dark .q-drawer,body.body--dark .q-footer,body.body--dark .q-header{border-color:hsla(0,0%,100%,.28)}body.body--dark .q-layout__shadow:after{box-shadow:0 0 10px 2px hsla(0,0%,100%,.2),0 0 10px hsla(0,0%,100%,.24)}body.platform-ios .q-layout--containerized{position:unset!important}.q-linear-progress{--q-linear-progress-speed:.3s;color:var(--q-primary);font-size:4px;height:1em;overflow:hidden;position:relative;transform:scaleX(1);width:100%}.q-linear-progress__model,.q-linear-progress__track{transform-origin:0 0}.q-linear-progress__model--with-transition,.q-linear-progress__track--with-transition{transition:transform var(--q-linear-progress-speed)}.q-linear-progress--reverse .q-linear-progress__model,.q-linear-progress--reverse .q-linear-progress__track{transform-origin:0 100%}.q-linear-progress__model--determinate{background:currentColor}.q-linear-progress__model--indeterminate,.q-linear-progress__model--query{transition:none}.q-linear-progress__model--indeterminate:after,.q-linear-progress__model--indeterminate:before,.q-linear-progress__model--query:after,.q-linear-progress__model--query:before{background:currentColor;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transform-origin:0 0}.q-linear-progress__model--indeterminate:before,.q-linear-progress__model--query:before{animation:q-linear-progress--indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite}.q-linear-progress__model--indeterminate:after,.q-linear-progress__model--query:after{animation:q-linear-progress--indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;animation-delay:1.15s;transform:translate3d(-101%,0,0) scaleX(1)}.q-linear-progress__track{opacity:.4}.q-linear-progress__track--light{background:rgba(0,0,0,.26)}.q-linear-progress__track--dark{background:hsla(0,0%,100%,.6)}.q-linear-progress__stripe{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0) 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))!important;background-size:40px 40px!important}.q-linear-progress__stripe--with-transition{transition:width var(--q-linear-progress-speed)}@keyframes q-linear-progress--indeterminate{0%{transform:translate3d(-35%,0,0) scaleX(.35)}60%{transform:translate3d(100%,0,0) scaleX(.9)}to{transform:translate3d(100%,0,0) scaleX(.9)}}@keyframes q-linear-progress--indeterminate-short{0%{transform:translate3d(-101%,0,0) scaleX(1)}60%{transform:translate3d(107%,0,0) scaleX(.01)}to{transform:translate3d(107%,0,0) scaleX(.01)}}.q-menu{background:#fff;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);display:inline-block;max-height:65vh;max-width:95vw;outline:0;overflow-x:hidden;overflow-y:auto;position:fixed!important;z-index:6000}.q-menu--square{border-radius:0}.q-menu--dark{box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}.q-option-group--inline>div{display:inline-block}.q-pagination input{-moz-appearance:textfield;text-align:center}.q-pagination input::-webkit-inner-spin-button,.q-pagination input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.q-pagination__content{--q-pagination-gutter-parent:-2px;--q-pagination-gutter-child:2px;margin-left:var(--q-pagination-gutter-parent);margin-top:var(--q-pagination-gutter-parent)}.q-pagination__content>.q-btn,.q-pagination__content>.q-input,.q-pagination__middle>.q-btn{margin-left:var(--q-pagination-gutter-child);margin-top:var(--q-pagination-gutter-child)}.q-parallax{border-radius:inherit;overflow:hidden;position:relative;width:100%}.q-parallax__media>img,.q-parallax__media>video{bottom:0;display:none;left:50%;min-height:100%;min-width:100%;position:absolute;will-change:transform}.q-popup-edit{padding:8px 16px}.q-popup-edit__buttons{margin-top:8px}.q-popup-edit__buttons .q-btn+.q-btn{margin-left:8px}.q-pull-to-refresh{position:relative}.q-pull-to-refresh__puller{background:#fff;border-radius:50%;box-shadow:0 0 4px 0 rgba(0,0,0,.3);color:var(--q-primary);height:40px;width:40px}.q-pull-to-refresh__puller--animating{transition:transform .3s,opacity .3s}.q-radio{vertical-align:middle}.q-radio__native{height:1px;width:1px}.q-radio__bg,.q-radio__icon-container{-webkit-user-select:none;user-select:none}.q-radio__bg{height:50%;left:25%;-webkit-print-color-adjust:exact;top:25%;width:50%}.q-radio__bg path{fill:currentColor}.q-radio__icon{color:currentColor;font-size:.5em}.q-radio__check{transform:scale3d(0,0,1);transform-origin:50% 50%;transition:transform .22s cubic-bezier(0,0,.2,1) 0ms}.q-radio__inner{border-radius:50%;color:rgba(0,0,0,.54);font-size:40px;height:1em;min-width:1em;outline:0;width:1em}.q-radio__inner--truthy{color:var(--q-primary)}.q-radio__inner--truthy .q-radio__check{transform:scaleX(1)}.q-radio.disabled{opacity:.75!important}.q-radio--dark .q-radio__inner{color:hsla(0,0%,100%,.7)}.q-radio--dark .q-radio__inner:before{opacity:.32!important}.q-radio--dark .q-radio__inner--truthy{color:var(--q-primary)}.q-radio--dense .q-radio__inner{height:.5em;min-width:.5em;width:.5em}.q-radio--dense .q-radio__bg{height:100%;left:0;top:0;width:100%}.q-radio--dense .q-radio__label{padding-left:.5em}.q-radio--dense.reverse .q-radio__label{padding-left:0;padding-right:.5em}body.desktop .q-radio:not(.disabled) .q-radio__inner:before{background:currentColor;border-radius:50%;bottom:0;content:"";left:0;opacity:.12;position:absolute;right:0;top:0;transform:scale3d(0,0,1);transition:transform .22s cubic-bezier(0,0,.2,1) 0ms}body.desktop .q-radio:not(.disabled):focus .q-radio__inner:before,body.desktop .q-radio:not(.disabled):hover .q-radio__inner:before{transform:scaleX(1)}body.desktop .q-radio--dense:not(.disabled):focus .q-radio__inner:before,body.desktop .q-radio--dense:not(.disabled):hover .q-radio__inner:before{transform:scale3d(1.5,1.5,1)}.q-rating{color:#ffeb3b;vertical-align:middle}.q-rating__icon-container{height:1em;outline:0}.q-rating__icon-container+.q-rating__icon-container{margin-left:2px}.q-rating__icon{color:currentColor;opacity:.4;position:relative;text-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);transition:transform .2s ease-in,opacity .2s ease-in}.q-rating__icon--hovered{transform:scale(1.3)}.q-rating__icon--active{opacity:1}.q-rating__icon--exselected{opacity:.7}.q-rating--no-dimming .q-rating__icon{opacity:1}.q-rating--editable .q-rating__icon-container{cursor:pointer}.q-responsive{max-height:100%;max-width:100%;position:relative}.q-responsive__filler{height:inherit;max-height:inherit;max-width:inherit;width:inherit}.q-responsive__content{border-radius:inherit}.q-responsive__content>*{height:100%!important;max-height:100%!important;max-width:100%!important;width:100%!important}.q-scrollarea{contain:strict;position:relative}.q-scrollarea__bar,.q-scrollarea__thumb{cursor:grab;opacity:.2;transition:opacity .3s;will-change:opacity}.q-scrollarea__bar--v,.q-scrollarea__thumb--v{right:0;width:10px}.q-scrollarea__bar--h,.q-scrollarea__thumb--h{bottom:0;height:10px}.q-scrollarea__bar--invisible,.q-scrollarea__thumb--invisible{opacity:0!important;pointer-events:none}.q-scrollarea__thumb{background:#000;border-radius:3px}.q-scrollarea__thumb:hover{opacity:.3}.q-scrollarea__thumb:active{opacity:.5}.q-scrollarea__content{min-height:100%;min-width:100%}.q-scrollarea--dark .q-scrollarea__thumb{background:#fff}.q-select--without-input .q-field__control{cursor:pointer}.q-select--with-input .q-field__control{cursor:text}.q-select .q-field__input{cursor:text;min-width:50px!important}.q-select .q-field__input--padding{padding-left:4px}.q-select__autocomplete-input,.q-select__focus-target{border:0;height:1px;opacity:0;outline:0!important;padding:0;position:absolute;width:1px}.q-select__dropdown-icon{cursor:pointer;transition:transform .28s}.q-select.q-field--readonly .q-field__control,.q-select.q-field--readonly .q-select__dropdown-icon{cursor:default}.q-select__dialog{background:#fff;display:flex;flex-direction:column;max-height:calc(100vh - 70px)!important;max-width:90vw!important;width:90vw!important}.q-select__dialog>.scroll{background:inherit;position:relative}body.mobile:not(.native-mobile) .q-select__dialog{max-height:calc(100vh - 108px)!important}body.platform-android.native-mobile .q-dialog__inner--top .q-select__dialog{max-height:calc(100vh - 24px)!important}body.platform-android:not(.native-mobile) .q-dialog__inner--top .q-select__dialog{max-height:calc(100vh - 80px)!important}body.platform-ios.native-mobile .q-dialog__inner--top>div{border-radius:4px}body.platform-ios.native-mobile .q-dialog__inner--top .q-select__dialog--focused{max-height:47vh!important}body.platform-ios:not(.native-mobile) .q-dialog__inner--top .q-select__dialog--focused{max-height:50vh!important}.q-separator{background:rgba(0,0,0,.12);border:0;flex-shrink:0;margin:0;transition:background .3s,opacity .3s}.q-separator--dark{background:hsla(0,0%,100%,.28)}.q-separator--horizontal{display:block;height:1px}.q-separator--horizontal-inset{margin-left:16px;margin-right:16px}.q-separator--horizontal-item-inset{margin-left:72px;margin-right:0}.q-separator--horizontal-item-thumbnail-inset{margin-left:116px;margin-right:0}.q-separator--vertical{align-self:stretch;height:auto;width:1px}.q-separator--vertical-inset{margin-bottom:8px;margin-top:8px}.q-skeleton{--q-skeleton-speed:1500ms;background:rgba(0,0,0,.12);border-radius:4px;box-sizing:border-box}.q-skeleton--anim{cursor:wait}.q-skeleton:before{content:" "}.q-skeleton--type-text{transform:scaleY(.5)}.q-skeleton--type-QAvatar,.q-skeleton--type-circle{border-radius:50%;height:48px;width:48px}.q-skeleton--type-QBtn{height:36px;width:90px}.q-skeleton--type-QBadge{height:16px;width:70px}.q-skeleton--type-QChip{border-radius:16px;height:28px;width:90px}.q-skeleton--type-QToolbar{height:50px}.q-skeleton--type-QCheckbox,.q-skeleton--type-QRadio{border-radius:50%;height:40px;width:40px}.q-skeleton--type-QToggle{border-radius:7px;height:40px;width:56px}.q-skeleton--type-QRange,.q-skeleton--type-QSlider{height:40px}.q-skeleton--type-QInput{height:56px}.q-skeleton--bordered{border:1px solid rgba(0,0,0,.05)}.q-skeleton--square{border-radius:0}.q-skeleton--anim-fade{animation:q-skeleton--fade var(--q-skeleton-speed) linear .5s infinite}.q-skeleton--anim-pulse{animation:q-skeleton--pulse var(--q-skeleton-speed) ease-in-out .5s infinite}.q-skeleton--anim-pulse-x{animation:q-skeleton--pulse-x var(--q-skeleton-speed) ease-in-out .5s infinite}.q-skeleton--anim-pulse-y{animation:q-skeleton--pulse-y var(--q-skeleton-speed) ease-in-out .5s infinite}.q-skeleton--anim-blink,.q-skeleton--anim-pop,.q-skeleton--anim-wave{overflow:hidden;position:relative;z-index:1}.q-skeleton--anim-blink:after,.q-skeleton--anim-pop:after,.q-skeleton--anim-wave:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:0}.q-skeleton--anim-blink:after{animation:q-skeleton--fade var(--q-skeleton-speed) linear .5s infinite;background:hsla(0,0%,100%,.7)}.q-skeleton--anim-wave:after{animation:q-skeleton--wave var(--q-skeleton-speed) linear .5s infinite;background:linear-gradient(90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.5),hsla(0,0%,100%,0))}.q-skeleton--dark{background:hsla(0,0%,100%,.05)}.q-skeleton--dark.q-skeleton--bordered{border:1px solid hsla(0,0%,100%,.25)}.q-skeleton--dark.q-skeleton--anim-wave:after{background:linear-gradient(90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.1),hsla(0,0%,100%,0))}.q-skeleton--dark.q-skeleton--anim-blink:after{background:hsla(0,0%,100%,.2)}@keyframes q-skeleton--fade{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes q-skeleton--pulse{0%{transform:scale(1)}50%{transform:scale(.85)}to{transform:scale(1)}}@keyframes q-skeleton--pulse-x{0%{transform:scaleX(1)}50%{transform:scaleX(.75)}to{transform:scaleX(1)}}@keyframes q-skeleton--pulse-y{0%{transform:scaleY(1)}50%{transform:scaleY(.75)}to{transform:scaleY(1)}}@keyframes q-skeleton--wave{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}.q-slide-item{background:#fff;position:relative}.q-slide-item__bottom,.q-slide-item__left,.q-slide-item__right,.q-slide-item__top{color:#fff;font-size:14px;visibility:hidden}.q-slide-item__bottom .q-icon,.q-slide-item__left .q-icon,.q-slide-item__right .q-icon,.q-slide-item__top .q-icon{font-size:1.714em}.q-slide-item__left{background:#4caf50;padding:8px 16px}.q-slide-item__left>div{transform-origin:left center}.q-slide-item__right{background:#ff9800;padding:8px 16px}.q-slide-item__right>div{transform-origin:right center}.q-slide-item__top{background:#2196f3;padding:16px 8px}.q-slide-item__top>div{transform-origin:top center}.q-slide-item__bottom{background:#9c27b0;padding:16px 8px}.q-slide-item__bottom>div{transform-origin:bottom center}.q-slide-item__content{background:inherit;cursor:pointer;transition:transform .2s ease-in;-webkit-user-select:none;user-select:none}.q-slider{position:relative}.q-slider--h{width:100%}.q-slider--v{height:200px}.q-slider--editable .q-slider__track-container{cursor:grab}.q-slider__track-container{outline:0}.q-slider__track-container--h{padding:12px 0;width:100%}.q-slider__track-container--h .q-slider__selection{will-change:width,left}.q-slider__track-container--v{height:100%;padding:0 12px}.q-slider__track-container--v .q-slider__selection{will-change:height,top}.q-slider__track{background:rgba(0,0,0,.1);border-radius:4px;color:var(--q-primary);height:inherit;width:inherit}.q-slider__inner{background:rgba(0,0,0,.1)}.q-slider__inner,.q-slider__selection{border-radius:inherit;height:100%;width:100%}.q-slider__selection{background:currentColor}.q-slider__markers{border-radius:inherit;color:rgba(0,0,0,.3);height:100%;width:100%}.q-slider__markers:after{background:currentColor;content:"";position:absolute}.q-slider__markers--h{background-image:repeating-linear-gradient(90deg,currentColor,currentColor 2px,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))}.q-slider__markers--h:after{height:100%;right:0;top:0;width:2px}.q-slider__markers--v{background-image:repeating-linear-gradient(180deg,currentColor,currentColor 2px,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))}.q-slider__markers--v:after{bottom:0;height:2px;left:0;width:100%}.q-slider__marker-labels-container{height:100%;min-height:24px;min-width:24px;position:relative;width:100%}.q-slider__marker-labels{position:absolute}.q-slider__marker-labels--h-standard{top:0}.q-slider__marker-labels--h-switched{bottom:0}.q-slider__marker-labels--h-ltr{transform:translateX(-50%)}.q-slider__marker-labels--h-rtl{transform:translateX(50%)}.q-slider__marker-labels--v-standard{left:4px}.q-slider__marker-labels--v-switched{right:4px}.q-slider__marker-labels--v-ltr{transform:translateY(-50%)}.q-slider__marker-labels--v-rtl{transform:translateY(50%)}.q-slider__thumb{color:var(--q-primary);outline:0;transition:transform .18s ease-out,fill .18s ease-out,stroke .18s ease-out;z-index:1}.q-slider__thumb.q-slider--focus{opacity:1!important}.q-slider__thumb--h{top:50%;will-change:left}.q-slider__thumb--h-ltr{transform:scale(1) translate(-50%,-50%)}.q-slider__thumb--h-rtl{transform:scale(1) translate(50%,-50%)}.q-slider__thumb--v{left:50%;will-change:top}.q-slider__thumb--v-ltr{transform:scale(1) translate(-50%,-50%)}.q-slider__thumb--v-rtl{transform:scale(1) translate(-50%,50%)}.q-slider__thumb-shape{stroke-width:3.5;stroke:currentColor;left:0;top:0;transition:transform .28s}.q-slider__thumb-shape path{stroke:currentColor;fill:currentColor}.q-slider__focus-ring{border-radius:50%;opacity:0;transition:transform .26667s ease-out,opacity .26667s ease-out,background-color .26667s ease-out;transition-delay:.14s}.q-slider__pin{opacity:0;transition:opacity .28s ease-out;transition-delay:.14s;white-space:nowrap}.q-slider__pin:before{content:"";height:0;position:absolute;width:0}.q-slider__pin--h:before{border-left:6px solid transparent;border-right:6px solid transparent;left:50%;transform:translateX(-50%)}.q-slider__pin--h-standard{bottom:100%}.q-slider__pin--h-standard:before{border-top:6px solid;bottom:2px}.q-slider__pin--h-switched{top:100%}.q-slider__pin--h-switched:before{border-bottom:6px solid;top:2px}.q-slider__pin--v{top:0}.q-slider__pin--v:before{border-bottom:6px solid transparent;border-top:6px solid transparent;top:50%;transform:translateY(-50%)}.q-slider__pin--v-standard{left:100%}.q-slider__pin--v-standard:before{border-right:6px solid;left:2px}.q-slider__pin--v-switched{right:100%}.q-slider__pin--v-switched:before{border-left:6px solid;right:2px}.q-slider__label{position:absolute;white-space:nowrap;z-index:1}.q-slider__label--h{left:50%;transform:translateX(-50%)}.q-slider__label--h-standard{bottom:7px}.q-slider__label--h-switched{top:7px}.q-slider__label--v{top:50%;transform:translateY(-50%)}.q-slider__label--v-standard{left:7px}.q-slider__label--v-switched{right:7px}.q-slider__text-container{background:currentColor;border-radius:4px;min-height:25px;padding:2px 8px;position:relative;text-align:center}.q-slider__text{color:#fff;font-size:12px}.q-slider--no-value .q-slider__inner,.q-slider--no-value .q-slider__selection,.q-slider--no-value .q-slider__thumb{opacity:0}.q-slider--focus .q-slider__focus-ring,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__focus-ring{background:currentColor;opacity:.25;transform:scale3d(1.55,1.55,1)}.q-slider--focus .q-slider__inner,.q-slider--focus .q-slider__selection,.q-slider--focus .q-slider__thumb,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__inner,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__selection,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__thumb{opacity:1}.q-slider--inactive .q-slider__thumb--h{transition:left .28s,right .28s}.q-slider--inactive .q-slider__thumb--v{transition:top .28s,bottom .28s}.q-slider--inactive .q-slider__selection{transition:width .28s,left .28s,right .28s,height .28s,top .28s,bottom .28s}.q-slider--inactive .q-slider__text-container{transition:transform .28s}.q-slider--active{cursor:grabbing}.q-slider--active .q-slider__thumb-shape{transform:scale(1.5)}.q-slider--active .q-slider__focus-ring,.q-slider--active.q-slider--label .q-slider__thumb-shape{transform:scale(0)!important}.q-slider--label .q-slider--focus .q-slider__pin,.q-slider--label.q-slider--active .q-slider__pin,.q-slider--label.q-slider--label-always .q-slider__pin,body.desktop .q-slider.q-slider--enabled .q-slider__track-container:hover .q-slider__pin{opacity:1}.q-slider--dark .q-slider__inner,.q-slider--dark .q-slider__track{background:hsla(0,0%,100%,.1)}.q-slider--dark .q-slider__markers{color:hsla(0,0%,100%,.3)}.q-slider--dense .q-slider__track-container--h{padding:6px 0}.q-slider--dense .q-slider__track-container--v{padding:0 6px}.q-space{flex-grow:1!important}.q-spinner{vertical-align:middle}.q-spinner-mat{animation:q-spin 2s linear infinite;transform-origin:center center}.q-spinner-mat .path{stroke-dasharray:1,200;stroke-dashoffset:0;animation:q-mat-dash 1.5s ease-in-out infinite}@keyframes q-spin{0%{transform:rotate(0deg)}25%{transform:rotate(90deg)}50%{transform:rotate(180deg)}75%{transform:rotate(270deg)}to{transform:rotate(359deg)}}@keyframes q-mat-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}.q-splitter__panel{position:relative;z-index:0}.q-splitter__panel>.q-splitter{height:100%;width:100%}.q-splitter__separator{background-color:rgba(0,0,0,.12);position:relative;-webkit-user-select:none;user-select:none;z-index:1}.q-splitter__separator-area>*{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.q-splitter--dark .q-splitter__separator{background-color:hsla(0,0%,100%,.28)}.q-splitter--vertical>.q-splitter__panel{height:100%}.q-splitter--vertical.q-splitter--active{cursor:col-resize}.q-splitter--vertical>.q-splitter__separator{width:1px}.q-splitter--vertical>.q-splitter__separator>div{left:-6px;right:-6px}.q-splitter--vertical.q-splitter--workable>.q-splitter__separator{cursor:col-resize}.q-splitter--horizontal>.q-splitter__panel{width:100%}.q-splitter--horizontal.q-splitter--active{cursor:row-resize}.q-splitter--horizontal>.q-splitter__separator{height:1px}.q-splitter--horizontal>.q-splitter__separator>div{bottom:-6px;top:-6px}.q-splitter--horizontal.q-splitter--workable>.q-splitter__separator{cursor:row-resize}.q-splitter__after,.q-splitter__before{overflow:auto}.q-stepper{background:#fff;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12)}.q-stepper__title{font-size:14px;letter-spacing:.1px;line-height:18px}.q-stepper__caption{font-size:12px;line-height:14px}.q-stepper__dot{background:currentColor;border-radius:50%;contain:layout;font-size:14px;height:24px;margin-right:8px;min-width:24px;width:24px}.q-stepper__dot span{color:#fff}.q-stepper__tab{color:#9e9e9e;flex-direction:row;font-size:14px;padding:8px 24px}.q-stepper--dark{box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}.q-stepper--dark .q-stepper__dot span{color:#000}.q-stepper__tab--navigation{cursor:pointer;-webkit-user-select:none;user-select:none}.q-stepper__tab--active,.q-stepper__tab--done{color:var(--q-primary)}.q-stepper__tab--active .q-stepper__dot,.q-stepper__tab--active .q-stepper__label,.q-stepper__tab--done .q-stepper__dot,.q-stepper__tab--done .q-stepper__label{text-shadow:0 0 0 currentColor}.q-stepper__tab--disabled .q-stepper__dot{background:rgba(0,0,0,.22)}.q-stepper__tab--disabled .q-stepper__label{color:rgba(0,0,0,.32)}.q-stepper__tab--error{color:var(--q-negative)}.q-stepper__tab--error-with-icon .q-stepper__dot{background:transparent!important}.q-stepper__tab--error-with-icon .q-stepper__dot span{color:currentColor;font-size:24px}.q-stepper__header{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-stepper__header--border{border-bottom:1px solid rgba(0,0,0,.12)}.q-stepper__header--standard-labels .q-stepper__tab{justify-content:center;min-height:72px}.q-stepper__header--standard-labels .q-stepper__tab:first-child{justify-content:flex-start}.q-stepper__header--standard-labels .q-stepper__tab:last-child{justify-content:flex-end}.q-stepper__header--standard-labels .q-stepper__tab:only-child{justify-content:center}.q-stepper__header--standard-labels .q-stepper__dot:after{display:none}.q-stepper__header--alternative-labels .q-stepper__tab{flex-direction:column;justify-content:flex-start;min-height:104px;padding:24px 32px}.q-stepper__header--alternative-labels .q-stepper__dot{margin-right:0}.q-stepper__header--alternative-labels .q-stepper__label{margin-top:8px;text-align:center}.q-stepper__header--alternative-labels .q-stepper__label:after,.q-stepper__header--alternative-labels .q-stepper__label:before{display:none}.q-stepper__header--contracted,.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab{min-height:72px}.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:first-child{align-items:flex-start}.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:last-child{align-items:flex-end}.q-stepper__header--contracted .q-stepper__tab{padding:24px 0}.q-stepper__header--contracted .q-stepper__tab:first-child .q-stepper__dot{transform:translateX(24px)}.q-stepper__header--contracted .q-stepper__tab:last-child .q-stepper__dot{transform:translateX(-24px)}.q-stepper__header--contracted .q-stepper__tab:not(:last-child) .q-stepper__dot:after{display:block!important}.q-stepper__header--contracted .q-stepper__dot{margin:0}.q-stepper__header--contracted .q-stepper__label{display:none}.q-stepper__nav{padding-top:24px}.q-stepper--flat{box-shadow:none}.q-stepper--bordered{border:1px solid rgba(0,0,0,.12)}.q-stepper--horizontal .q-stepper__step-inner{padding:24px}.q-stepper--horizontal .q-stepper__tab:first-child{border-top-left-radius:inherit}.q-stepper--horizontal .q-stepper__tab:last-child{border-top-right-radius:inherit}.q-stepper--horizontal .q-stepper__tab:first-child .q-stepper__dot:before,.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__dot:after,.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__label:after{display:none}.q-stepper--horizontal .q-stepper__tab{overflow:hidden}.q-stepper--horizontal .q-stepper__line{contain:layout}.q-stepper--horizontal .q-stepper__line:after,.q-stepper--horizontal .q-stepper__line:before{background:rgba(0,0,0,.12);height:1px;position:absolute;top:50%;width:100vw}.q-stepper--horizontal .q-stepper__dot:after,.q-stepper--horizontal .q-stepper__label:after{content:"";left:100%;margin-left:8px}.q-stepper--horizontal .q-stepper__dot:before{content:"";margin-right:8px;right:100%}.q-stepper--horizontal>.q-stepper__nav{padding:0 24px 24px}.q-stepper--vertical{padding:16px 0}.q-stepper--vertical .q-stepper__tab{padding:12px 24px}.q-stepper--vertical .q-stepper__title{line-height:18px}.q-stepper--vertical .q-stepper__step-inner{padding:0 24px 32px 60px}.q-stepper--vertical>.q-stepper__nav{padding:24px 24px 0}.q-stepper--vertical .q-stepper__step{overflow:hidden}.q-stepper--vertical .q-stepper__dot{margin-right:12px}.q-stepper--vertical .q-stepper__dot:after,.q-stepper--vertical .q-stepper__dot:before{background:rgba(0,0,0,.12);content:"";height:99999px;left:50%;position:absolute;width:1px}.q-stepper--vertical .q-stepper__dot:before{bottom:100%;margin-bottom:8px}.q-stepper--vertical .q-stepper__dot:after{margin-top:8px;top:100%}.q-stepper--vertical .q-stepper__step:first-child .q-stepper__dot:before,.q-stepper--vertical .q-stepper__step:last-child .q-stepper__dot:after{display:none}.q-stepper--vertical .q-stepper__step:last-child .q-stepper__step-inner{padding-bottom:8px}.q-stepper--dark .q-stepper__header--border,.q-stepper--dark.q-stepper--bordered{border-color:hsla(0,0%,100%,.28)}.q-stepper--dark.q-stepper--horizontal .q-stepper__line:after,.q-stepper--dark.q-stepper--horizontal .q-stepper__line:before,.q-stepper--dark.q-stepper--vertical .q-stepper__dot:after,.q-stepper--dark.q-stepper--vertical .q-stepper__dot:before{background:hsla(0,0%,100%,.28)}.q-stepper--dark .q-stepper__tab--disabled{color:hsla(0,0%,100%,.28)}.q-stepper--dark .q-stepper__tab--disabled .q-stepper__dot{background:hsla(0,0%,100%,.28)}.q-stepper--dark .q-stepper__tab--disabled .q-stepper__label{color:hsla(0,0%,100%,.54)}.q-tab-panels{background:#fff}.q-tab-panel{padding:16px}.q-markup-table{background:#fff;overflow:auto}.q-table{border-collapse:separate;border-spacing:0;max-width:100%;width:100%}.q-table tbody td,.q-table thead tr{height:48px}.q-table th{font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none}.q-table th.sortable{cursor:pointer}.q-table th.sortable:hover .q-table__sort-icon{opacity:.64}.q-table th.sorted .q-table__sort-icon{opacity:.86!important}.q-table th.sort-desc .q-table__sort-icon{transform:rotate(180deg)}.q-table td,.q-table th{background-color:inherit;padding:7px 16px}.q-table td,.q-table th,.q-table thead{border-style:solid;border-width:0}.q-table tbody td{font-size:13px}.q-table__card{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);color:#000}.q-table__card .q-table__middle{flex:1 1 auto}.q-table__card .q-table__bottom,.q-table__card .q-table__top{flex:0 0 auto}.q-table__container{position:relative}.q-table__container>div:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-table__container>div:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.q-table__container>.q-inner-loading{border-radius:inherit!important}.q-table__top{padding:12px 16px}.q-table__top .q-table__control{flex-wrap:wrap}.q-table__title{font-size:20px;font-weight:400;letter-spacing:.005em}.q-table__separator{min-width:8px!important}.q-table__progress{height:0!important}.q-table__progress th{border:0!important;padding:0!important}.q-table__progress .q-linear-progress{bottom:0;position:absolute}.q-table__middle{max-width:100%}.q-table__bottom{font-size:12px;min-height:50px;padding:4px 14px 4px 16px}.q-table__bottom .q-table__control{min-height:24px}.q-table__bottom-nodata-icon{font-size:200%;margin-right:8px}.q-table__bottom-item{margin-right:16px}.q-table__control{align-items:center;display:flex}.q-table__sort-icon{font-size:120%;opacity:0;transition:transform .3s cubic-bezier(.25,.8,.5,1)}.q-table__sort-icon--center,.q-table__sort-icon--left{margin-left:4px}.q-table__sort-icon--right{margin-right:4px}.q-table--col-auto-width{width:1px}.q-table--dark,.q-table__card--dark{box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}.q-table--flat{box-shadow:none}.q-table--bordered{border:1px solid rgba(0,0,0,.12)}.q-table--square{border-radius:0}.q-table__linear-progress{height:2px}.q-table--no-wrap td,.q-table--no-wrap th{white-space:nowrap}.q-table--grid{border-radius:4px;box-shadow:none}.q-table--grid .q-table__top{padding-bottom:4px}.q-table--grid .q-table__middle{margin-bottom:4px;min-height:2px}.q-table--grid .q-table__middle thead,.q-table--grid .q-table__middle thead th{border:0!important}.q-table--grid .q-table__linear-progress{bottom:0}.q-table--grid .q-table__bottom{border-top:0}.q-table--grid .q-table__grid-content{flex:1 1 auto}.q-table--grid.fullscreen{background:inherit}.q-table__grid-item-card{padding:12px;vertical-align:top}.q-table__grid-item-card .q-separator{margin:12px 0}.q-table__grid-item-row+.q-table__grid-item-row{margin-top:8px}.q-table__grid-item-title{font-size:12px;font-weight:500;opacity:.54}.q-table__grid-item-value{font-size:13px}.q-table__grid-item{padding:4px;transition:transform .3s cubic-bezier(.25,.8,.5,1)}.q-table__grid-item--selected{transform:scale(.95)}.q-table--cell-separator tbody tr:not(:last-child)>td,.q-table--cell-separator thead th,.q-table--horizontal-separator tbody tr:not(:last-child)>td,.q-table--horizontal-separator thead th{border-bottom-width:1px}.q-table--cell-separator td,.q-table--cell-separator th,.q-table--vertical-separator td,.q-table--vertical-separator th{border-left-width:1px}.q-table--cell-separator thead tr:last-child th,.q-table--cell-separator.q-table--loading tr:nth-last-child(2) th,.q-table--vertical-separator thead tr:last-child th,.q-table--vertical-separator.q-table--loading tr:nth-last-child(2) th{border-bottom-width:1px}.q-table--cell-separator td:first-child,.q-table--cell-separator th:first-child,.q-table--vertical-separator td:first-child,.q-table--vertical-separator th:first-child{border-left:0}.q-table--cell-separator .q-table__top,.q-table--vertical-separator .q-table__top{border-bottom:1px solid rgba(0,0,0,.12)}.q-table--dense .q-table__top{padding:6px 16px}.q-table--dense .q-table__bottom{min-height:33px}.q-table--dense .q-table__sort-icon{font-size:110%}.q-table--dense .q-table td,.q-table--dense .q-table th{padding:4px 8px}.q-table--dense .q-table tbody td,.q-table--dense .q-table tbody tr,.q-table--dense .q-table thead tr{height:28px}.q-table--dense .q-table td:first-child,.q-table--dense .q-table th:first-child{padding-left:16px}.q-table--dense .q-table td:last-child,.q-table--dense .q-table th:last-child{padding-right:16px}.q-table--dense .q-table__bottom-item{margin-right:8px}.q-table--dense .q-table__select .q-field__control,.q-table--dense .q-table__select .q-field__native{min-height:24px;padding:0}.q-table--dense .q-table__select .q-field__marginal{height:24px}.q-table__bottom{border-top:1px solid rgba(0,0,0,.12)}.q-table td,.q-table th,.q-table thead,.q-table tr{border-color:rgba(0,0,0,.12)}.q-table tbody td{position:relative}.q-table tbody td:after,.q-table tbody td:before{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0}.q-table tbody td:before{background:rgba(0,0,0,.03)}.q-table tbody td:after{background:rgba(0,0,0,.06)}.q-table tbody tr.selected td:after,body.desktop .q-table>tbody>tr:not(.q-tr--no-hover):hover>td:not(.q-td--no-hover):before{content:""}.q-table--dark,.q-table--dark .q-table__bottom,.q-table--dark td,.q-table--dark th,.q-table--dark thead,.q-table--dark tr,.q-table__card--dark{border-color:hsla(0,0%,100%,.28)}.q-table--dark tbody td:before{background:hsla(0,0%,100%,.07)}.q-table--dark tbody td:after{background:hsla(0,0%,100%,.1)}.q-table--dark.q-table--cell-separator .q-table__top,.q-table--dark.q-table--vertical-separator .q-table__top{border-color:hsla(0,0%,100%,.28)}.q-tab{color:inherit;min-height:48px;padding:0 16px;text-decoration:none;text-transform:uppercase;transition:color .3s,background-color .3s;white-space:nowrap}.q-tab--full{min-height:72px}.q-tab--no-caps{text-transform:none}.q-tab__content{height:inherit;min-width:40px;padding:4px 0}.q-tab__content--inline .q-tab__icon+.q-tab__label{padding-left:8px}.q-tab__content .q-chip--floating{right:-16px;top:0}.q-tab__icon{font-size:24px;height:24px;width:24px}.q-tab__label{font-size:14px;font-weight:500;line-height:1.715em}.q-tab .q-badge{right:-12px;top:3px}.q-tab__alert,.q-tab__alert-icon{position:absolute}.q-tab__alert{background:currentColor;border-radius:50%;height:10px;right:-9px;top:7px;width:10px}.q-tab__alert-icon{font-size:18px;right:-12px;top:2px}.q-tab__indicator{background:currentColor;height:2px;opacity:0}.q-tab--active .q-tab__indicator{opacity:1;transform-origin:left}.q-tab--inactive{opacity:.85}.q-tabs{position:relative;transition:color .3s,background-color .3s}.q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--horizontal{padding-left:36px;padding-right:36px}.q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--vertical{padding-bottom:36px;padding-top:36px}.q-tabs--scrollable.q-tabs__arrows--outside .q-tabs__arrow--faded{opacity:.3;pointer-events:none}.q-tabs--scrollable.q-tabs__arrows--inside .q-tabs__arrow--faded{display:none}.q-tabs--not-scrollable.q-tabs__arrows--outside,body.mobile .q-tabs--scrollable.q-tabs--mobile-without-arrows.q-tabs__arrows--outside{padding-left:0;padding-right:0}.q-tabs--not-scrollable .q-tabs__arrow,body.mobile .q-tabs--scrollable.q-tabs--mobile-without-arrows .q-tabs__arrow{display:none}.q-tabs--not-scrollable .q-tabs__content,body.mobile .q-tabs--scrollable.q-tabs--mobile-without-arrows .q-tabs__content{border-radius:inherit}.q-tabs__arrow{cursor:pointer;font-size:32px;min-width:36px;text-shadow:0 0 3px #fff,0 0 1px #fff,0 0 1px #000;transition:opacity .3s}.q-tabs__content{flex:1 1 auto;overflow:hidden}.q-tabs__content--align-center{justify-content:center}.q-tabs__content--align-right{justify-content:flex-end}.q-tabs__content--align-justify .q-tab{flex:1 1 auto}.q-tabs__offset{display:none}.q-tabs--horizontal .q-tabs__arrow{height:100%}.q-tabs--horizontal .q-tabs__arrow--left{bottom:0;left:0;top:0}.q-tabs--horizontal .q-tabs__arrow--right{bottom:0;right:0;top:0}.q-tabs--vertical,.q-tabs--vertical .q-tabs__content{display:block!important;height:100%}.q-tabs--vertical .q-tabs__arrow{height:36px;text-align:center;width:100%}.q-tabs--vertical .q-tabs__arrow--left{left:0;right:0;top:0}.q-tabs--vertical .q-tabs__arrow--right{bottom:0;left:0;right:0}.q-tabs--vertical .q-tab{padding:0 8px}.q-tabs--vertical .q-tab__indicator{height:unset;width:2px}.q-tabs--vertical.q-tabs--not-scrollable .q-tabs__content{height:100%}.q-tabs--vertical.q-tabs--dense .q-tab__content{min-width:24px}.q-tabs--dense .q-tab{min-height:36px}.q-tabs--dense .q-tab--full{min-height:52px}.q-time{background:#fff;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);max-width:100%;min-width:290px;outline:0;width:290px}.q-time--bordered{border:1px solid rgba(0,0,0,.12)}.q-time__header{background-color:var(--q-primary);border-top-left-radius:inherit;color:#fff;font-weight:300;padding:16px}.q-time__actions{padding:0 16px 16px}.q-time__header-label{font-size:28px;letter-spacing:-.00833em;line-height:1}.q-time__header-label>div+div{margin-left:4px}.q-time__link{opacity:.56;outline:0;transition:opacity .3s ease-out}.q-time__link--active,.q-time__link:focus,.q-time__link:hover{opacity:1}.q-time__header-ampm{font-size:16px;letter-spacing:.1em}.q-time__content{padding:16px}.q-time__content:before{content:"";display:block;padding-bottom:100%}.q-time__container-parent{padding:16px}.q-time__container-child{background:rgba(0,0,0,.12);border-radius:50%}.q-time__clock{font-size:14px;height:100%;max-height:100%;max-width:100%;padding:24px;width:100%}.q-time__clock-circle{position:relative}.q-time__clock-center{background:currentColor;border-radius:50%;height:6px;margin:auto;min-height:0;width:6px}.q-time__clock-pointer{background:currentColor;bottom:0;color:var(--q-primary);height:50%;left:50%;min-height:0;position:absolute;right:0;transform:translateX(-50%);transform-origin:0 0;width:2px}.q-time__clock-pointer:after,.q-time__clock-pointer:before{background:currentColor;border-radius:50%;content:"";left:50%;position:absolute;transform:translateX(-50%)}.q-time__clock-pointer:before{bottom:-4px;height:8px;width:8px}.q-time__clock-pointer:after{height:6px;top:-3px;width:6px}.q-time__clock-position{border-radius:50%;font-size:12px;height:32px;line-height:32px;margin:0;min-height:32px;padding:0;position:absolute;transform:translate(-50%,-50%);width:32px}.q-time__clock-position--disable{opacity:.4}.q-time__clock-position--active{background-color:var(--q-primary);color:#fff}.q-time__clock-pos-0{left:50%;top:0}.q-time__clock-pos-1{left:75%;top:6.7%}.q-time__clock-pos-2{left:93.3%;top:25%}.q-time__clock-pos-3{left:100%;top:50%}.q-time__clock-pos-4{left:93.3%;top:75%}.q-time__clock-pos-5{left:75%;top:93.3%}.q-time__clock-pos-6{left:50%;top:100%}.q-time__clock-pos-7{left:25%;top:93.3%}.q-time__clock-pos-8{left:6.7%;top:75%}.q-time__clock-pos-9{left:0;top:50%}.q-time__clock-pos-10{left:6.7%;top:25%}.q-time__clock-pos-11{left:25%;top:6.7%}.q-time__clock-pos-12{left:50%;top:15%}.q-time__clock-pos-13{left:67.5%;top:19.69%}.q-time__clock-pos-14{left:80.31%;top:32.5%}.q-time__clock-pos-15{left:85%;top:50%}.q-time__clock-pos-16{left:80.31%;top:67.5%}.q-time__clock-pos-17{left:67.5%;top:80.31%}.q-time__clock-pos-18{left:50%;top:85%}.q-time__clock-pos-19{left:32.5%;top:80.31%}.q-time__clock-pos-20{left:19.69%;top:67.5%}.q-time__clock-pos-21{left:15%;top:50%}.q-time__clock-pos-22{left:19.69%;top:32.5%}.q-time__clock-pos-23{left:32.5%;top:19.69%}.q-time__now-button{background-color:var(--q-primary);color:#fff;right:12px;top:12px}.q-time--readonly .q-time__content,.q-time--readonly .q-time__header-ampm,.q-time.disabled .q-time__content,.q-time.disabled .q-time__header-ampm{pointer-events:none}.q-time--portrait{display:inline-flex;flex-direction:column}.q-time--portrait .q-time__header{border-top-right-radius:inherit;min-height:86px}.q-time--portrait .q-time__header-ampm{margin-left:12px}.q-time--portrait.q-time--bordered .q-time__content{margin:1px 0}.q-time--landscape{align-items:stretch;display:inline-flex;min-width:420px}.q-time--landscape>div{display:flex;flex-direction:column;justify-content:center}.q-time--landscape .q-time__header{border-bottom-left-radius:inherit;min-width:156px}.q-time--landscape .q-time__header-ampm{margin-top:12px}.q-time--dark{border-color:hsla(0,0%,100%,.28);box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}.q-timeline{list-style:none;padding:0;width:100%}.q-timeline h6{line-height:inherit}.q-timeline--dark{color:#fff}.q-timeline--dark .q-timeline__subtitle{opacity:.7}.q-timeline__content{padding-bottom:24px}.q-timeline__title{margin-bottom:16px;margin-top:0}.q-timeline__subtitle{font-size:12px;font-weight:700;letter-spacing:1px;margin-bottom:8px;opacity:.6;text-transform:uppercase}.q-timeline__dot{bottom:0;position:absolute;top:0;width:15px}.q-timeline__dot:after,.q-timeline__dot:before{background:currentColor;content:"";display:block;position:absolute}.q-timeline__dot:before{border:3px solid transparent;border-radius:100%;height:15px;left:0;top:4px;transition:background .3s ease-in-out,border .3s ease-in-out;width:15px}.q-timeline__dot:after{bottom:0;left:6px;opacity:.4;top:24px;width:3px}.q-timeline__dot .q-icon{color:#fff;font-size:16px;height:38px;left:0;line-height:38px;position:absolute;right:0;top:0;width:100%}.q-timeline__dot .q-icon>img,.q-timeline__dot .q-icon>svg{height:1em;width:1em}.q-timeline__dot-img{background:currentColor;border-radius:50%;height:31px;left:0;position:absolute;right:0;top:4px;width:31px}.q-timeline__heading{position:relative}.q-timeline__heading:first-child .q-timeline__heading-title{padding-top:0}.q-timeline__heading:last-child .q-timeline__heading-title{padding-bottom:0}.q-timeline__heading-title{margin:0;padding:32px 0}.q-timeline__entry{line-height:22px;position:relative}.q-timeline__entry:last-child{padding-bottom:0!important}.q-timeline__entry:last-child .q-timeline__dot:after{content:none}.q-timeline__entry--icon .q-timeline__dot{width:31px}.q-timeline__entry--icon .q-timeline__dot:before{height:31px;width:31px}.q-timeline__entry--icon .q-timeline__dot:after{left:14px;top:41px}.q-timeline__entry--icon .q-timeline__subtitle{padding-top:8px}.q-timeline--dense--right .q-timeline__entry{padding-left:40px}.q-timeline--dense--right .q-timeline__entry--icon .q-timeline__dot{left:-8px}.q-timeline--dense--right .q-timeline__dot{left:0}.q-timeline--dense--left .q-timeline__heading{text-align:right}.q-timeline--dense--left .q-timeline__entry{padding-right:40px}.q-timeline--dense--left .q-timeline__entry--icon .q-timeline__dot{right:-8px}.q-timeline--dense--left .q-timeline__content,.q-timeline--dense--left .q-timeline__subtitle,.q-timeline--dense--left .q-timeline__title{text-align:right}.q-timeline--dense--left .q-timeline__dot{right:0}.q-timeline--comfortable{display:table}.q-timeline--comfortable .q-timeline__heading{display:table-row;font-size:200%}.q-timeline--comfortable .q-timeline__heading>div{display:table-cell}.q-timeline--comfortable .q-timeline__entry{display:table-row;padding:0}.q-timeline--comfortable .q-timeline__entry--icon .q-timeline__content{padding-top:8px}.q-timeline--comfortable .q-timeline__content,.q-timeline--comfortable .q-timeline__dot,.q-timeline--comfortable .q-timeline__subtitle{display:table-cell;vertical-align:top}.q-timeline--comfortable .q-timeline__subtitle{width:35%}.q-timeline--comfortable .q-timeline__dot{min-width:31px;position:relative}.q-timeline--comfortable--right .q-timeline__heading .q-timeline__heading-title{margin-left:-50px}.q-timeline--comfortable--right .q-timeline__subtitle{padding-right:30px;text-align:right}.q-timeline--comfortable--right .q-timeline__content{padding-left:30px}.q-timeline--comfortable--right .q-timeline__entry--icon .q-timeline__dot{left:-8px}.q-timeline--comfortable--left .q-timeline__heading{text-align:right}.q-timeline--comfortable--left .q-timeline__heading .q-timeline__heading-title{margin-right:-50px}.q-timeline--comfortable--left .q-timeline__subtitle{padding-left:30px}.q-timeline--comfortable--left .q-timeline__content{padding-right:30px}.q-timeline--comfortable--left .q-timeline__content,.q-timeline--comfortable--left .q-timeline__title{text-align:right}.q-timeline--comfortable--left .q-timeline__entry--icon .q-timeline__dot{right:0}.q-timeline--comfortable--left .q-timeline__dot{right:-8px}.q-timeline--loose .q-timeline__heading-title{margin-left:0;text-align:center}.q-timeline--loose .q-timeline__content,.q-timeline--loose .q-timeline__dot,.q-timeline--loose .q-timeline__entry,.q-timeline--loose .q-timeline__subtitle{display:block;margin:0;padding:0}.q-timeline--loose .q-timeline__dot{left:50%;margin-left:-7.15px;position:absolute}.q-timeline--loose .q-timeline__entry{overflow:hidden;padding-bottom:24px}.q-timeline--loose .q-timeline__entry--icon .q-timeline__dot{margin-left:-15px}.q-timeline--loose .q-timeline__entry--icon .q-timeline__subtitle{line-height:38px}.q-timeline--loose .q-timeline__entry--icon .q-timeline__content{padding-top:8px}.q-timeline--loose .q-timeline__entry--left .q-timeline__content,.q-timeline--loose .q-timeline__entry--right .q-timeline__subtitle{float:left;padding-right:30px;text-align:right}.q-timeline--loose .q-timeline__entry--left .q-timeline__subtitle,.q-timeline--loose .q-timeline__entry--right .q-timeline__content{float:right;padding-left:30px;text-align:left}.q-timeline--loose .q-timeline__content,.q-timeline--loose .q-timeline__subtitle{width:50%}.q-toggle{vertical-align:middle}.q-toggle__native{height:1px;width:1px}.q-toggle__track{background:currentColor;border-radius:.175em;height:.35em;opacity:.38}.q-toggle__thumb{height:.5em;left:.25em;top:.25em;transition:left .22s cubic-bezier(.4,0,.2,1);-webkit-user-select:none;user-select:none;width:.5em;z-index:0}.q-toggle__thumb:after{background:#fff;border-radius:50%;bottom:0;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12);content:"";left:0;position:absolute;right:0;top:0}.q-toggle__thumb .q-icon{color:#000;font-size:.3em;min-width:1em;opacity:.54;z-index:1}.q-toggle__inner{font-size:40px;height:1em;min-width:1.4em;padding:.325em .3em;-webkit-print-color-adjust:exact;width:1.4em}.q-toggle__inner--indet .q-toggle__thumb{left:.45em}.q-toggle__inner--truthy{color:var(--q-primary)}.q-toggle__inner--truthy .q-toggle__track{opacity:.54}.q-toggle__inner--truthy .q-toggle__thumb{left:.65em}.q-toggle__inner--truthy .q-toggle__thumb:after{background-color:currentColor}.q-toggle__inner--truthy .q-toggle__thumb .q-icon{color:#fff;opacity:1}.q-toggle.disabled{opacity:.75!important}.q-toggle--dark .q-toggle__inner{color:#fff}.q-toggle--dark .q-toggle__inner--truthy{color:var(--q-primary)}.q-toggle--dark .q-toggle__thumb:after{box-shadow:none}.q-toggle--dark .q-toggle__thumb:before{opacity:.32!important}.q-toggle--dense .q-toggle__inner{height:.5em;min-width:.8em;padding:.07625em 0;width:.8em}.q-toggle--dense .q-toggle__thumb{left:0;top:0}.q-toggle--dense .q-toggle__inner--indet .q-toggle__thumb{left:.15em}.q-toggle--dense .q-toggle__inner--truthy .q-toggle__thumb{left:.3em}.q-toggle--dense .q-toggle__label{padding-left:.5em}.q-toggle--dense.reverse .q-toggle__label{padding-left:0;padding-right:.5em}body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before{background:currentColor;border-radius:50%;bottom:0;content:"";left:0;opacity:.12;position:absolute;right:0;top:0;transform:scale3d(0,0,1);transition:transform .22s cubic-bezier(0,0,.2,1)}body.desktop .q-toggle:not(.disabled):focus .q-toggle__thumb:before,body.desktop .q-toggle:not(.disabled):hover .q-toggle__thumb:before{transform:scale3d(2,2,1)}body.desktop .q-toggle--dense:not(.disabled):focus .q-toggle__thumb:before,body.desktop .q-toggle--dense:not(.disabled):hover .q-toggle__thumb:before{transform:scale3d(1.5,1.5,1)}.q-toolbar{min-height:50px;padding:0 12px;position:relative;width:100%}.q-toolbar--inset{padding-left:58px}.q-toolbar .q-avatar{font-size:38px}.q-toolbar__title{flex:1 1 0%;font-size:21px;font-weight:400;letter-spacing:.01em;max-width:100%;min-width:1px;padding:0 12px}.q-toolbar__title:first-child{padding-left:0}.q-toolbar__title:last-child{padding-right:0}.q-tooltip--style{background:#757575;border-radius:4px;color:#fafafa;font-size:10px;font-weight:400;text-transform:none}.q-tooltip{overflow-x:hidden;overflow-y:auto;padding:6px 10px;position:fixed!important;z-index:9000}@media (max-width:599.98px){.q-tooltip{font-size:14px;padding:8px 16px}}.q-tree{color:#9e9e9e;position:relative}.q-tree__node{padding:0 0 3px 22px}.q-tree__node:after{border-left:1px solid;bottom:0;content:"";left:-13px;position:absolute;right:auto;top:-3px;width:2px}.q-tree__node:last-child:after{display:none}.q-tree__node--disabled{pointer-events:none}.q-tree__node--disabled .disabled{opacity:1!important}.q-tree__node--disabled>.disabled,.q-tree__node--disabled>div,.q-tree__node--disabled>i{opacity:.6!important}.q-tree__node--disabled>.disabled .q-tree__node--disabled>.disabled,.q-tree__node--disabled>.disabled .q-tree__node--disabled>div,.q-tree__node--disabled>.disabled .q-tree__node--disabled>i,.q-tree__node--disabled>div .q-tree__node--disabled>.disabled,.q-tree__node--disabled>div .q-tree__node--disabled>div,.q-tree__node--disabled>div .q-tree__node--disabled>i,.q-tree__node--disabled>i .q-tree__node--disabled>.disabled,.q-tree__node--disabled>i .q-tree__node--disabled>div,.q-tree__node--disabled>i .q-tree__node--disabled>i{opacity:1!important}.q-tree__node-header:before{border-bottom:1px solid;border-left:1px solid;bottom:50%;content:"";left:-35px;position:absolute;top:-3px;width:31px}.q-tree__children{padding-left:25px}.q-tree__node-body{padding:5px 0 8px 5px}.q-tree__node--parent{padding-left:2px}.q-tree__node--parent>.q-tree__node-header:before{left:-15px;width:15px}.q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:5px 0 8px 27px}.q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{border-left:1px solid;bottom:50px;content:"";height:100%;left:12px;position:absolute;right:auto;top:0;width:2px}.q-tree__node--link{cursor:pointer}.q-tree__node-header{border-radius:4px;margin-top:3px;outline:0;padding:4px}.q-tree__node-header-content{color:#000;transition:color .3s}.q-tree__node--selected .q-tree__node-header-content{color:#9e9e9e}.q-tree__icon,.q-tree__node-header-content .q-icon{font-size:21px}.q-tree__img{border-radius:2px;height:42px}.q-tree__avatar,.q-tree__node-header-content .q-avatar{border-radius:50%;font-size:28px;height:28px;width:28px}.q-tree__arrow,.q-tree__spinner{font-size:16px;margin-right:4px}.q-tree__arrow{transition:transform .3s}.q-tree__arrow--rotate{transform:rotate(90deg)}.q-tree__tickbox{margin-right:4px}.q-tree>.q-tree__node{padding:0}.q-tree>.q-tree__node:after,.q-tree>.q-tree__node>.q-tree__node-header:before{display:none}.q-tree>.q-tree__node--child>.q-tree__node-header{padding-left:24px}.q-tree--dark .q-tree__node-header-content{color:#fff}.q-tree--no-connectors .q-tree__node-body:after,.q-tree--no-connectors .q-tree__node-header:before,.q-tree--no-connectors .q-tree__node:after{display:none!important}.q-tree--dense>.q-tree__node--child>.q-tree__node-header{padding-left:1px}.q-tree--dense .q-tree__arrow,.q-tree--dense .q-tree__spinner{margin-right:1px}.q-tree--dense .q-tree__img{height:32px}.q-tree--dense .q-tree__tickbox{margin-right:3px}.q-tree--dense .q-tree__node{padding:0}.q-tree--dense .q-tree__node:after{left:-8px;top:0}.q-tree--dense .q-tree__node-header{margin-top:0;padding:1px}.q-tree--dense .q-tree__node-header:before{left:-8px;top:0;width:8px}.q-tree--dense .q-tree__node--child{padding-left:17px}.q-tree--dense .q-tree__node--child>.q-tree__node-header:before{left:-25px;width:21px}.q-tree--dense .q-tree__node-body{padding:0 0 2px}.q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:0 0 2px 20px}.q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{left:8px}.q-tree--dense .q-tree__children{padding-left:16px}[dir=rtl] .q-tree__arrow{transform:rotate(180deg)}[dir=rtl] .q-tree__arrow--rotate{transform:rotate(90deg)}.q-uploader{background:#fff;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);max-height:320px;position:relative;vertical-align:top;width:320px}.q-uploader--bordered{border:1px solid rgba(0,0,0,.12)}.q-uploader__input{cursor:pointer!important;height:100%;opacity:0;width:100%;z-index:1}.q-uploader__input::-webkit-file-upload-button{cursor:pointer}.q-uploader__file:before{background:currentColor;bottom:0;content:"";left:0;opacity:.04;pointer-events:none;position:absolute;right:0;top:0}.q-uploader__file:before,.q-uploader__header{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-uploader__header{background-color:var(--q-primary);color:#fff;position:relative;width:100%}.q-uploader__spinner{font-size:24px;margin-right:4px}.q-uploader__header-content{padding:8px}.q-uploader__dnd{background:hsla(0,0%,100%,.6);outline:1px dashed currentColor;outline-offset:-4px}.q-uploader__overlay{background-color:hsla(0,0%,100%,.6);color:#000;font-size:36px}.q-uploader__list{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;flex:1 1 auto;min-height:60px;padding:8px;position:relative}.q-uploader__file{border:1px solid rgba(0,0,0,.12);border-radius:4px 4px 0 0}.q-uploader__file .q-circular-progress{font-size:24px}.q-uploader__file--img{background-position:50% 50%;background-repeat:no-repeat;background-size:cover;color:#fff;height:200px;min-width:200px}.q-uploader__file--img:before{content:none}.q-uploader__file--img .q-circular-progress{color:#fff}.q-uploader__file--img .q-uploader__file-header{background:linear-gradient(180deg,rgba(0,0,0,.7) 20%,hsla(0,0%,100%,0));padding-bottom:24px}.q-uploader__file+.q-uploader__file{margin-top:8px}.q-uploader__file-header{border-top-left-radius:inherit;border-top-right-radius:inherit;padding:4px 8px;position:relative}.q-uploader__file-header-content{padding-right:8px}.q-uploader__file-status{font-size:24px;margin-right:4px}.q-uploader__title{font-size:14px;font-weight:700;line-height:18px;word-break:break-word}.q-uploader__subtitle{font-size:12px;line-height:18px}.q-uploader--disable .q-uploader__header,.q-uploader--disable .q-uploader__list{pointer-events:none}.q-uploader--dark{box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}.q-uploader--dark,.q-uploader--dark .q-uploader__file{border-color:hsla(0,0%,100%,.28)}.q-uploader--dark .q-uploader__dnd,.q-uploader--dark .q-uploader__overlay{background:hsla(0,0%,100%,.3)}.q-uploader--dark .q-uploader__overlay{color:#fff}.q-video{border-radius:inherit;overflow:hidden;position:relative}.q-video embed,.q-video iframe,.q-video object{height:100%;width:100%}.q-video--responsive{height:0}.q-video--responsive embed,.q-video--responsive iframe,.q-video--responsive object{left:0;position:absolute;top:0}.q-virtual-scroll:focus{outline:0}.q-virtual-scroll__content{contain:content;outline:none}.q-virtual-scroll__content>*{overflow-anchor:none}.q-virtual-scroll__content>[data-q-vs-anchor]{overflow-anchor:auto}.q-virtual-scroll__padding{background:linear-gradient(hsla(0,0%,100%,0),hsla(0,0%,100%,0) 20%,hsla(0,0%,50%,.03) 0,hsla(0,0%,50%,.08) 50%,hsla(0,0%,50%,.03) 80%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0));background-size:var(--q-virtual-scroll-item-width,100%) var(--q-virtual-scroll-item-height,50px)}.q-table .q-virtual-scroll__padding tr{height:0!important}.q-table .q-virtual-scroll__padding td{padding:0!important}.q-virtual-scroll--horizontal{align-items:stretch}.q-virtual-scroll--horizontal,.q-virtual-scroll--horizontal .q-virtual-scroll__content{display:flex;flex-direction:row;flex-wrap:nowrap}.q-virtual-scroll--horizontal .q-virtual-scroll__content,.q-virtual-scroll--horizontal .q-virtual-scroll__content>*,.q-virtual-scroll--horizontal .q-virtual-scroll__padding{flex:0 0 auto}.q-virtual-scroll--horizontal .q-virtual-scroll__padding{background:linear-gradient(270deg,hsla(0,0%,100%,0),hsla(0,0%,100%,0) 20%,hsla(0,0%,50%,.03) 0,hsla(0,0%,50%,.08) 50%,hsla(0,0%,50%,.03) 80%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0));background-size:var(--q-virtual-scroll-item-width,50px) var(--q-virtual-scroll-item-height,100%)}.q-ripple{border-radius:inherit;contain:strict;height:100%;overflow:hidden;width:100%;z-index:0}.q-ripple,.q-ripple__inner{color:inherit;left:0;pointer-events:none;position:absolute;top:0}.q-ripple__inner{background:currentColor;border-radius:50%;opacity:0;will-change:transform,opacity}.q-ripple__inner--enter{transition:transform .225s cubic-bezier(.4,0,.2,1),opacity .1s cubic-bezier(.4,0,.2,1)}.q-ripple__inner--leave{transition:opacity .25s cubic-bezier(.4,0,.2,1)}.q-morph--internal,.q-morph--invisible{bottom:200vh!important;opacity:0!important;pointer-events:none!important;position:fixed!important;right:200vw!important}.q-loading{color:#000;position:fixed!important}.q-loading__backdrop{background-color:#000;bottom:0;left:0;opacity:.5;position:fixed;right:0;top:0;transition:background-color .28s;z-index:-1}.q-loading__box{border-radius:4px;color:#fff;max-width:450px;padding:18px}.q-loading__message{margin:40px 20px 0;text-align:center}.q-notifications__list{left:0;margin-bottom:10px;pointer-events:none;position:relative;right:0;z-index:9500}.q-notifications__list--center{bottom:0;top:0}.q-notifications__list--top{top:0}.q-notifications__list--bottom{bottom:0}body.q-ios-padding .q-notifications__list--center,body.q-ios-padding .q-notifications__list--top{top:20px;top:env(safe-area-inset-top)}body.q-ios-padding .q-notifications__list--bottom,body.q-ios-padding .q-notifications__list--center{bottom:env(safe-area-inset-bottom)}.q-notification{background:#323232;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12);color:#fff;display:inline-flex;flex-shrink:0;font-size:14px;margin:10px 10px 0;max-width:95vw;pointer-events:all;transition:transform 1s,opacity 1s;z-index:9500}.q-notification__icon{flex:0 0 1em;font-size:24px}.q-notification__icon--additional{margin-right:16px}.q-notification__avatar{font-size:32px}.q-notification__avatar--additional{margin-right:8px}.q-notification__spinner{font-size:32px}.q-notification__spinner--additional{margin-right:8px}.q-notification__message{padding:8px 0}.q-notification__caption{font-size:.9em;opacity:.7}.q-notification__actions{color:var(--q-primary)}.q-notification__badge{animation:q-notif-badge .42s;background-color:var(--q-negative);border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,.2),0 1px 1px rgba(0,0,0,.14),0 2px 1px -1px rgba(0,0,0,.12);color:#fff;font-size:12px;line-height:12px;padding:4px 8px;position:absolute}.q-notification__badge--top-left,.q-notification__badge--top-right{top:-6px}.q-notification__badge--bottom-left,.q-notification__badge--bottom-right{bottom:-6px}.q-notification__badge--bottom-left,.q-notification__badge--top-left{left:-22px}.q-notification__badge--bottom-right,.q-notification__badge--top-right{right:-22px}.q-notification__progress{animation:q-notif-progress linear;background:currentColor;border-radius:4px 4px 0 0;bottom:0;height:3px;left:-10px;opacity:.3;position:absolute;right:-10px;transform:scaleX(0);transform-origin:0 50%;z-index:-1}.q-notification--standard{min-height:48px;padding:0 16px}.q-notification--standard .q-notification__actions{margin-right:-8px;padding:6px 0 6px 8px}.q-notification--multi-line{min-height:68px;padding:8px 16px}.q-notification--multi-line .q-notification__badge--top-left,.q-notification--multi-line .q-notification__badge--top-right{top:-15px}.q-notification--multi-line .q-notification__badge--bottom-left,.q-notification--multi-line .q-notification__badge--bottom-right{bottom:-15px}.q-notification--multi-line .q-notification__progress{bottom:-8px}.q-notification--multi-line .q-notification__actions{padding:0}.q-notification--multi-line .q-notification__actions--with-media{padding-left:25px}.q-notification--top-enter-from,.q-notification--top-leave-to,.q-notification--top-left-enter-from,.q-notification--top-left-leave-to,.q-notification--top-right-enter-from,.q-notification--top-right-leave-to{opacity:0;transform:translateY(-50px);z-index:9499}.q-notification--center-enter-from,.q-notification--center-leave-to,.q-notification--left-enter-from,.q-notification--left-leave-to,.q-notification--right-enter-from,.q-notification--right-leave-to{opacity:0;transform:rotateX(90deg);z-index:9499}.q-notification--bottom-enter-from,.q-notification--bottom-leave-to,.q-notification--bottom-left-enter-from,.q-notification--bottom-left-leave-to,.q-notification--bottom-right-enter-from,.q-notification--bottom-right-leave-to{opacity:0;transform:translateY(50px);z-index:9499}.q-notification--bottom-leave-active,.q-notification--bottom-left-leave-active,.q-notification--bottom-right-leave-active,.q-notification--center-leave-active,.q-notification--left-leave-active,.q-notification--right-leave-active,.q-notification--top-leave-active,.q-notification--top-left-leave-active,.q-notification--top-right-leave-active{margin-left:0;margin-right:0;position:absolute;z-index:9499}.q-notification--center-leave-active,.q-notification--top-leave-active{top:0}.q-notification--bottom-leave-active,.q-notification--bottom-left-leave-active,.q-notification--bottom-right-leave-active{bottom:0}@media (min-width:600px){.q-notification{max-width:65vw}}@keyframes q-notif-badge{15%{transform:translate3d(-25%,0,0) rotate(-5deg)}30%{transform:translate3d(20%,0,0) rotate(3deg)}45%{transform:translate3d(-15%,0,0) rotate(-3deg)}60%{transform:translate3d(10%,0,0) rotate(2deg)}75%{transform:translate3d(-5%,0,0) rotate(-1deg)}}@keyframes q-notif-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}:root{--animate-duration:0.3s;--animate-delay:0.3s;--animate-repeat:1}.animated{animation-duration:var(--animate-duration);animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}.animated.repeat-1{animation-iteration-count:var(--animate-repeat)}.animated.repeat-2{animation-iteration-count:calc(var(--animate-repeat)*2)}.animated.repeat-3{animation-iteration-count:calc(var(--animate-repeat)*3)}.animated.delay-1s{animation-delay:var(--animate-delay)}.animated.delay-2s{animation-delay:calc(var(--animate-delay)*2)}.animated.delay-3s{animation-delay:calc(var(--animate-delay)*3)}.animated.delay-4s{animation-delay:calc(var(--animate-delay)*4)}.animated.delay-5s{animation-delay:calc(var(--animate-delay)*5)}.animated.faster{animation-duration:calc(var(--animate-duration)/2)}.animated.fast{animation-duration:calc(var(--animate-duration)*.8)}.animated.slow{animation-duration:calc(var(--animate-duration)*2)}.animated.slower{animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animated{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}.animated[class*=Out]{opacity:0}}.q-animate--scale{animation:q-scale .15s;animation-timing-function:cubic-bezier(.25,.8,.25,1)}@keyframes q-scale{0%{transform:scale(1)}50%{transform:scale(1.04)}to{transform:scale(1)}}.q-animate--fade{animation:q-fade .2s}@keyframes q-fade{0%{opacity:0}to{opacity:1}}:root{--q-primary:#c97350;--q-secondary:#3a4d59;--q-accent:#9c27b0;--q-positive:#21ba45;--q-negative:#894242;--q-info:#31ccec;--q-warning:#f2c037;--q-dark:#3a4d59;--q-dark-page:#121212}.text-dark{color:var(--q-dark)!important}.bg-dark{background:var(--q-dark)!important}.text-primary{color:var(--q-primary)!important}.bg-primary{background:var(--q-primary)!important}.text-secondary{color:var(--q-secondary)!important}.bg-secondary{background:var(--q-secondary)!important}.text-accent{color:var(--q-accent)!important}.bg-accent{background:var(--q-accent)!important}.text-positive{color:var(--q-positive)!important}.bg-positive{background:var(--q-positive)!important}.text-negative{color:var(--q-negative)!important}.bg-negative{background:var(--q-negative)!important}.text-info{color:var(--q-info)!important}.bg-info{background:var(--q-info)!important}.text-warning{color:var(--q-warning)!important}.bg-warning{background:var(--q-warning)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.text-transparent{color:transparent!important}.bg-transparent{background:transparent!important}.text-separator{color:rgba(0,0,0,.12)!important}.bg-separator{background:rgba(0,0,0,.12)!important}.text-dark-separator{color:hsla(0,0%,100%,.28)!important}.bg-dark-separator{background:hsla(0,0%,100%,.28)!important}.text-red{color:#f44336!important}.text-red-1{color:#ffebee!important}.text-red-2{color:#ffcdd2!important}.text-red-3{color:#ef9a9a!important}.text-red-4{color:#e57373!important}.text-red-5{color:#ef5350!important}.text-red-6{color:#f44336!important}.text-red-7{color:#e53935!important}.text-red-8{color:#d32f2f!important}.text-red-9{color:#c62828!important}.text-red-10{color:#b71c1c!important}.text-red-11{color:#ff8a80!important}.text-red-12{color:#ff5252!important}.text-red-13{color:#ff1744!important}.text-red-14{color:#d50000!important}.text-pink{color:#e91e63!important}.text-pink-1{color:#fce4ec!important}.text-pink-2{color:#f8bbd0!important}.text-pink-3{color:#f48fb1!important}.text-pink-4{color:#f06292!important}.text-pink-5{color:#ec407a!important}.text-pink-6{color:#e91e63!important}.text-pink-7{color:#d81b60!important}.text-pink-8{color:#c2185b!important}.text-pink-9{color:#ad1457!important}.text-pink-10{color:#880e4f!important}.text-pink-11{color:#ff80ab!important}.text-pink-12{color:#ff4081!important}.text-pink-13{color:#f50057!important}.text-pink-14{color:#c51162!important}.text-purple{color:#9c27b0!important}.text-purple-1{color:#f3e5f5!important}.text-purple-2{color:#e1bee7!important}.text-purple-3{color:#ce93d8!important}.text-purple-4{color:#ba68c8!important}.text-purple-5{color:#ab47bc!important}.text-purple-6{color:#9c27b0!important}.text-purple-7{color:#8e24aa!important}.text-purple-8{color:#7b1fa2!important}.text-purple-9{color:#6a1b9a!important}.text-purple-10{color:#4a148c!important}.text-purple-11{color:#ea80fc!important}.text-purple-12{color:#e040fb!important}.text-purple-13{color:#d500f9!important}.text-purple-14{color:#a0f!important}.text-deep-purple{color:#673ab7!important}.text-deep-purple-1{color:#ede7f6!important}.text-deep-purple-2{color:#d1c4e9!important}.text-deep-purple-3{color:#b39ddb!important}.text-deep-purple-4{color:#9575cd!important}.text-deep-purple-5{color:#7e57c2!important}.text-deep-purple-6{color:#673ab7!important}.text-deep-purple-7{color:#5e35b1!important}.text-deep-purple-8{color:#512da8!important}.text-deep-purple-9{color:#4527a0!important}.text-deep-purple-10{color:#311b92!important}.text-deep-purple-11{color:#b388ff!important}.text-deep-purple-12{color:#7c4dff!important}.text-deep-purple-13{color:#651fff!important}.text-deep-purple-14{color:#6200ea!important}.text-indigo{color:#3f51b5!important}.text-indigo-1{color:#e8eaf6!important}.text-indigo-2{color:#c5cae9!important}.text-indigo-3{color:#9fa8da!important}.text-indigo-4{color:#7986cb!important}.text-indigo-5{color:#5c6bc0!important}.text-indigo-6{color:#3f51b5!important}.text-indigo-7{color:#3949ab!important}.text-indigo-8{color:#303f9f!important}.text-indigo-9{color:#283593!important}.text-indigo-10{color:#1a237e!important}.text-indigo-11{color:#8c9eff!important}.text-indigo-12{color:#536dfe!important}.text-indigo-13{color:#3d5afe!important}.text-indigo-14{color:#304ffe!important}.text-blue{color:#2196f3!important}.text-blue-1{color:#e3f2fd!important}.text-blue-2{color:#bbdefb!important}.text-blue-3{color:#90caf9!important}.text-blue-4{color:#64b5f6!important}.text-blue-5{color:#42a5f5!important}.text-blue-6{color:#2196f3!important}.text-blue-7{color:#1e88e5!important}.text-blue-8{color:#1976d2!important}.text-blue-9{color:#1565c0!important}.text-blue-10{color:#0d47a1!important}.text-blue-11{color:#82b1ff!important}.text-blue-12{color:#448aff!important}.text-blue-13{color:#2979ff!important}.text-blue-14{color:#2962ff!important}.text-light-blue{color:#03a9f4!important}.text-light-blue-1{color:#e1f5fe!important}.text-light-blue-2{color:#b3e5fc!important}.text-light-blue-3{color:#81d4fa!important}.text-light-blue-4{color:#4fc3f7!important}.text-light-blue-5{color:#29b6f6!important}.text-light-blue-6{color:#03a9f4!important}.text-light-blue-7{color:#039be5!important}.text-light-blue-8{color:#0288d1!important}.text-light-blue-9{color:#0277bd!important}.text-light-blue-10{color:#01579b!important}.text-light-blue-11{color:#80d8ff!important}.text-light-blue-12{color:#40c4ff!important}.text-light-blue-13{color:#00b0ff!important}.text-light-blue-14{color:#0091ea!important}.text-cyan{color:#00bcd4!important}.text-cyan-1{color:#e0f7fa!important}.text-cyan-2{color:#b2ebf2!important}.text-cyan-3{color:#80deea!important}.text-cyan-4{color:#4dd0e1!important}.text-cyan-5{color:#26c6da!important}.text-cyan-6{color:#00bcd4!important}.text-cyan-7{color:#00acc1!important}.text-cyan-8{color:#0097a7!important}.text-cyan-9{color:#00838f!important}.text-cyan-10{color:#006064!important}.text-cyan-11{color:#84ffff!important}.text-cyan-12{color:#18ffff!important}.text-cyan-13{color:#00e5ff!important}.text-cyan-14{color:#00b8d4!important}.text-teal{color:#009688!important}.text-teal-1{color:#e0f2f1!important}.text-teal-2{color:#b2dfdb!important}.text-teal-3{color:#80cbc4!important}.text-teal-4{color:#4db6ac!important}.text-teal-5{color:#26a69a!important}.text-teal-6{color:#009688!important}.text-teal-7{color:#00897b!important}.text-teal-8{color:#00796b!important}.text-teal-9{color:#00695c!important}.text-teal-10{color:#004d40!important}.text-teal-11{color:#a7ffeb!important}.text-teal-12{color:#64ffda!important}.text-teal-13{color:#1de9b6!important}.text-teal-14{color:#00bfa5!important}.text-green{color:#4caf50!important}.text-green-1{color:#e8f5e9!important}.text-green-2{color:#c8e6c9!important}.text-green-3{color:#a5d6a7!important}.text-green-4{color:#81c784!important}.text-green-5{color:#66bb6a!important}.text-green-6{color:#4caf50!important}.text-green-7{color:#43a047!important}.text-green-8{color:#388e3c!important}.text-green-9{color:#2e7d32!important}.text-green-10{color:#1b5e20!important}.text-green-11{color:#b9f6ca!important}.text-green-12{color:#69f0ae!important}.text-green-13{color:#00e676!important}.text-green-14{color:#00c853!important}.text-light-green{color:#8bc34a!important}.text-light-green-1{color:#f1f8e9!important}.text-light-green-2{color:#dcedc8!important}.text-light-green-3{color:#c5e1a5!important}.text-light-green-4{color:#aed581!important}.text-light-green-5{color:#9ccc65!important}.text-light-green-6{color:#8bc34a!important}.text-light-green-7{color:#7cb342!important}.text-light-green-8{color:#689f38!important}.text-light-green-9{color:#558b2f!important}.text-light-green-10{color:#33691e!important}.text-light-green-11{color:#ccff90!important}.text-light-green-12{color:#b2ff59!important}.text-light-green-13{color:#76ff03!important}.text-light-green-14{color:#64dd17!important}.text-lime{color:#cddc39!important}.text-lime-1{color:#f9fbe7!important}.text-lime-2{color:#f0f4c3!important}.text-lime-3{color:#e6ee9c!important}.text-lime-4{color:#dce775!important}.text-lime-5{color:#d4e157!important}.text-lime-6{color:#cddc39!important}.text-lime-7{color:#c0ca33!important}.text-lime-8{color:#afb42b!important}.text-lime-9{color:#9e9d24!important}.text-lime-10{color:#827717!important}.text-lime-11{color:#f4ff81!important}.text-lime-12{color:#eeff41!important}.text-lime-13{color:#c6ff00!important}.text-lime-14{color:#aeea00!important}.text-yellow{color:#ffeb3b!important}.text-yellow-1{color:#fffde7!important}.text-yellow-2{color:#fff9c4!important}.text-yellow-3{color:#fff59d!important}.text-yellow-4{color:#fff176!important}.text-yellow-5{color:#ffee58!important}.text-yellow-6{color:#ffeb3b!important}.text-yellow-7{color:#fdd835!important}.text-yellow-8{color:#fbc02d!important}.text-yellow-9{color:#f9a825!important}.text-yellow-10{color:#f57f17!important}.text-yellow-11{color:#ffff8d!important}.text-yellow-12{color:#ff0!important}.text-yellow-13{color:#ffea00!important}.text-yellow-14{color:#ffd600!important}.text-amber{color:#ffc107!important}.text-amber-1{color:#fff8e1!important}.text-amber-2{color:#ffecb3!important}.text-amber-3{color:#ffe082!important}.text-amber-4{color:#ffd54f!important}.text-amber-5{color:#ffca28!important}.text-amber-6{color:#ffc107!important}.text-amber-7{color:#ffb300!important}.text-amber-8{color:#ffa000!important}.text-amber-9{color:#ff8f00!important}.text-amber-10{color:#ff6f00!important}.text-amber-11{color:#ffe57f!important}.text-amber-12{color:#ffd740!important}.text-amber-13{color:#ffc400!important}.text-amber-14{color:#ffab00!important}.text-orange{color:#ff9800!important}.text-orange-1{color:#fff3e0!important}.text-orange-2{color:#ffe0b2!important}.text-orange-3{color:#ffcc80!important}.text-orange-4{color:#ffb74d!important}.text-orange-5{color:#ffa726!important}.text-orange-6{color:#ff9800!important}.text-orange-7{color:#fb8c00!important}.text-orange-8{color:#f57c00!important}.text-orange-9{color:#ef6c00!important}.text-orange-10{color:#e65100!important}.text-orange-11{color:#ffd180!important}.text-orange-12{color:#ffab40!important}.text-orange-13{color:#ff9100!important}.text-orange-14{color:#ff6d00!important}.text-deep-orange{color:#ff5722!important}.text-deep-orange-1{color:#fbe9e7!important}.text-deep-orange-2{color:#ffccbc!important}.text-deep-orange-3{color:#ffab91!important}.text-deep-orange-4{color:#ff8a65!important}.text-deep-orange-5{color:#ff7043!important}.text-deep-orange-6{color:#ff5722!important}.text-deep-orange-7{color:#f4511e!important}.text-deep-orange-8{color:#e64a19!important}.text-deep-orange-9{color:#d84315!important}.text-deep-orange-10{color:#bf360c!important}.text-deep-orange-11{color:#ff9e80!important}.text-deep-orange-12{color:#ff6e40!important}.text-deep-orange-13{color:#ff3d00!important}.text-deep-orange-14{color:#dd2c00!important}.text-brown{color:#795548!important}.text-brown-1{color:#efebe9!important}.text-brown-2{color:#d7ccc8!important}.text-brown-3{color:#bcaaa4!important}.text-brown-4{color:#a1887f!important}.text-brown-5{color:#8d6e63!important}.text-brown-6{color:#795548!important}.text-brown-7{color:#6d4c41!important}.text-brown-8{color:#5d4037!important}.text-brown-9{color:#4e342e!important}.text-brown-10{color:#3e2723!important}.text-brown-11{color:#d7ccc8!important}.text-brown-12{color:#bcaaa4!important}.text-brown-13{color:#8d6e63!important}.text-brown-14{color:#5d4037!important}.text-grey{color:#9e9e9e!important}.text-grey-1{color:#fafafa!important}.text-grey-2{color:#f5f5f5!important}.text-grey-3{color:#eee!important}.text-grey-4{color:#e0e0e0!important}.text-grey-5{color:#bdbdbd!important}.text-grey-6{color:#9e9e9e!important}.text-grey-7{color:#757575!important}.text-grey-8{color:#616161!important}.text-grey-9{color:#424242!important}.text-grey-10{color:#212121!important}.text-grey-11{color:#f5f5f5!important}.text-grey-12{color:#eee!important}.text-grey-13{color:#bdbdbd!important}.text-grey-14{color:#616161!important}.text-blue-grey{color:#607d8b!important}.text-blue-grey-1{color:#eceff1!important}.text-blue-grey-2{color:#cfd8dc!important}.text-blue-grey-3{color:#b0bec5!important}.text-blue-grey-4{color:#90a4ae!important}.text-blue-grey-5{color:#78909c!important}.text-blue-grey-6{color:#607d8b!important}.text-blue-grey-7{color:#546e7a!important}.text-blue-grey-8{color:#455a64!important}.text-blue-grey-9{color:#37474f!important}.text-blue-grey-10{color:#263238!important}.text-blue-grey-11{color:#cfd8dc!important}.text-blue-grey-12{color:#b0bec5!important}.text-blue-grey-13{color:#78909c!important}.text-blue-grey-14{color:#455a64!important}.bg-red{background:#f44336!important}.bg-red-1{background:#ffebee!important}.bg-red-2{background:#ffcdd2!important}.bg-red-3{background:#ef9a9a!important}.bg-red-4{background:#e57373!important}.bg-red-5{background:#ef5350!important}.bg-red-6{background:#f44336!important}.bg-red-7{background:#e53935!important}.bg-red-8{background:#d32f2f!important}.bg-red-9{background:#c62828!important}.bg-red-10{background:#b71c1c!important}.bg-red-11{background:#ff8a80!important}.bg-red-12{background:#ff5252!important}.bg-red-13{background:#ff1744!important}.bg-red-14{background:#d50000!important}.bg-pink{background:#e91e63!important}.bg-pink-1{background:#fce4ec!important}.bg-pink-2{background:#f8bbd0!important}.bg-pink-3{background:#f48fb1!important}.bg-pink-4{background:#f06292!important}.bg-pink-5{background:#ec407a!important}.bg-pink-6{background:#e91e63!important}.bg-pink-7{background:#d81b60!important}.bg-pink-8{background:#c2185b!important}.bg-pink-9{background:#ad1457!important}.bg-pink-10{background:#880e4f!important}.bg-pink-11{background:#ff80ab!important}.bg-pink-12{background:#ff4081!important}.bg-pink-13{background:#f50057!important}.bg-pink-14{background:#c51162!important}.bg-purple{background:#9c27b0!important}.bg-purple-1{background:#f3e5f5!important}.bg-purple-2{background:#e1bee7!important}.bg-purple-3{background:#ce93d8!important}.bg-purple-4{background:#ba68c8!important}.bg-purple-5{background:#ab47bc!important}.bg-purple-6{background:#9c27b0!important}.bg-purple-7{background:#8e24aa!important}.bg-purple-8{background:#7b1fa2!important}.bg-purple-9{background:#6a1b9a!important}.bg-purple-10{background:#4a148c!important}.bg-purple-11{background:#ea80fc!important}.bg-purple-12{background:#e040fb!important}.bg-purple-13{background:#d500f9!important}.bg-purple-14{background:#a0f!important}.bg-deep-purple{background:#673ab7!important}.bg-deep-purple-1{background:#ede7f6!important}.bg-deep-purple-2{background:#d1c4e9!important}.bg-deep-purple-3{background:#b39ddb!important}.bg-deep-purple-4{background:#9575cd!important}.bg-deep-purple-5{background:#7e57c2!important}.bg-deep-purple-6{background:#673ab7!important}.bg-deep-purple-7{background:#5e35b1!important}.bg-deep-purple-8{background:#512da8!important}.bg-deep-purple-9{background:#4527a0!important}.bg-deep-purple-10{background:#311b92!important}.bg-deep-purple-11{background:#b388ff!important}.bg-deep-purple-12{background:#7c4dff!important}.bg-deep-purple-13{background:#651fff!important}.bg-deep-purple-14{background:#6200ea!important}.bg-indigo{background:#3f51b5!important}.bg-indigo-1{background:#e8eaf6!important}.bg-indigo-2{background:#c5cae9!important}.bg-indigo-3{background:#9fa8da!important}.bg-indigo-4{background:#7986cb!important}.bg-indigo-5{background:#5c6bc0!important}.bg-indigo-6{background:#3f51b5!important}.bg-indigo-7{background:#3949ab!important}.bg-indigo-8{background:#303f9f!important}.bg-indigo-9{background:#283593!important}.bg-indigo-10{background:#1a237e!important}.bg-indigo-11{background:#8c9eff!important}.bg-indigo-12{background:#536dfe!important}.bg-indigo-13{background:#3d5afe!important}.bg-indigo-14{background:#304ffe!important}.bg-blue{background:#2196f3!important}.bg-blue-1{background:#e3f2fd!important}.bg-blue-2{background:#bbdefb!important}.bg-blue-3{background:#90caf9!important}.bg-blue-4{background:#64b5f6!important}.bg-blue-5{background:#42a5f5!important}.bg-blue-6{background:#2196f3!important}.bg-blue-7{background:#1e88e5!important}.bg-blue-8{background:#1976d2!important}.bg-blue-9{background:#1565c0!important}.bg-blue-10{background:#0d47a1!important}.bg-blue-11{background:#82b1ff!important}.bg-blue-12{background:#448aff!important}.bg-blue-13{background:#2979ff!important}.bg-blue-14{background:#2962ff!important}.bg-light-blue{background:#03a9f4!important}.bg-light-blue-1{background:#e1f5fe!important}.bg-light-blue-2{background:#b3e5fc!important}.bg-light-blue-3{background:#81d4fa!important}.bg-light-blue-4{background:#4fc3f7!important}.bg-light-blue-5{background:#29b6f6!important}.bg-light-blue-6{background:#03a9f4!important}.bg-light-blue-7{background:#039be5!important}.bg-light-blue-8{background:#0288d1!important}.bg-light-blue-9{background:#0277bd!important}.bg-light-blue-10{background:#01579b!important}.bg-light-blue-11{background:#80d8ff!important}.bg-light-blue-12{background:#40c4ff!important}.bg-light-blue-13{background:#00b0ff!important}.bg-light-blue-14{background:#0091ea!important}.bg-cyan{background:#00bcd4!important}.bg-cyan-1{background:#e0f7fa!important}.bg-cyan-2{background:#b2ebf2!important}.bg-cyan-3{background:#80deea!important}.bg-cyan-4{background:#4dd0e1!important}.bg-cyan-5{background:#26c6da!important}.bg-cyan-6{background:#00bcd4!important}.bg-cyan-7{background:#00acc1!important}.bg-cyan-8{background:#0097a7!important}.bg-cyan-9{background:#00838f!important}.bg-cyan-10{background:#006064!important}.bg-cyan-11{background:#84ffff!important}.bg-cyan-12{background:#18ffff!important}.bg-cyan-13{background:#00e5ff!important}.bg-cyan-14{background:#00b8d4!important}.bg-teal{background:#009688!important}.bg-teal-1{background:#e0f2f1!important}.bg-teal-2{background:#b2dfdb!important}.bg-teal-3{background:#80cbc4!important}.bg-teal-4{background:#4db6ac!important}.bg-teal-5{background:#26a69a!important}.bg-teal-6{background:#009688!important}.bg-teal-7{background:#00897b!important}.bg-teal-8{background:#00796b!important}.bg-teal-9{background:#00695c!important}.bg-teal-10{background:#004d40!important}.bg-teal-11{background:#a7ffeb!important}.bg-teal-12{background:#64ffda!important}.bg-teal-13{background:#1de9b6!important}.bg-teal-14{background:#00bfa5!important}.bg-green{background:#4caf50!important}.bg-green-1{background:#e8f5e9!important}.bg-green-2{background:#c8e6c9!important}.bg-green-3{background:#a5d6a7!important}.bg-green-4{background:#81c784!important}.bg-green-5{background:#66bb6a!important}.bg-green-6{background:#4caf50!important}.bg-green-7{background:#43a047!important}.bg-green-8{background:#388e3c!important}.bg-green-9{background:#2e7d32!important}.bg-green-10{background:#1b5e20!important}.bg-green-11{background:#b9f6ca!important}.bg-green-12{background:#69f0ae!important}.bg-green-13{background:#00e676!important}.bg-green-14{background:#00c853!important}.bg-light-green{background:#8bc34a!important}.bg-light-green-1{background:#f1f8e9!important}.bg-light-green-2{background:#dcedc8!important}.bg-light-green-3{background:#c5e1a5!important}.bg-light-green-4{background:#aed581!important}.bg-light-green-5{background:#9ccc65!important}.bg-light-green-6{background:#8bc34a!important}.bg-light-green-7{background:#7cb342!important}.bg-light-green-8{background:#689f38!important}.bg-light-green-9{background:#558b2f!important}.bg-light-green-10{background:#33691e!important}.bg-light-green-11{background:#ccff90!important}.bg-light-green-12{background:#b2ff59!important}.bg-light-green-13{background:#76ff03!important}.bg-light-green-14{background:#64dd17!important}.bg-lime{background:#cddc39!important}.bg-lime-1{background:#f9fbe7!important}.bg-lime-2{background:#f0f4c3!important}.bg-lime-3{background:#e6ee9c!important}.bg-lime-4{background:#dce775!important}.bg-lime-5{background:#d4e157!important}.bg-lime-6{background:#cddc39!important}.bg-lime-7{background:#c0ca33!important}.bg-lime-8{background:#afb42b!important}.bg-lime-9{background:#9e9d24!important}.bg-lime-10{background:#827717!important}.bg-lime-11{background:#f4ff81!important}.bg-lime-12{background:#eeff41!important}.bg-lime-13{background:#c6ff00!important}.bg-lime-14{background:#aeea00!important}.bg-yellow{background:#ffeb3b!important}.bg-yellow-1{background:#fffde7!important}.bg-yellow-2{background:#fff9c4!important}.bg-yellow-3{background:#fff59d!important}.bg-yellow-4{background:#fff176!important}.bg-yellow-5{background:#ffee58!important}.bg-yellow-6{background:#ffeb3b!important}.bg-yellow-7{background:#fdd835!important}.bg-yellow-8{background:#fbc02d!important}.bg-yellow-9{background:#f9a825!important}.bg-yellow-10{background:#f57f17!important}.bg-yellow-11{background:#ffff8d!important}.bg-yellow-12{background:#ff0!important}.bg-yellow-13{background:#ffea00!important}.bg-yellow-14{background:#ffd600!important}.bg-amber{background:#ffc107!important}.bg-amber-1{background:#fff8e1!important}.bg-amber-2{background:#ffecb3!important}.bg-amber-3{background:#ffe082!important}.bg-amber-4{background:#ffd54f!important}.bg-amber-5{background:#ffca28!important}.bg-amber-6{background:#ffc107!important}.bg-amber-7{background:#ffb300!important}.bg-amber-8{background:#ffa000!important}.bg-amber-9{background:#ff8f00!important}.bg-amber-10{background:#ff6f00!important}.bg-amber-11{background:#ffe57f!important}.bg-amber-12{background:#ffd740!important}.bg-amber-13{background:#ffc400!important}.bg-amber-14{background:#ffab00!important}.bg-orange{background:#ff9800!important}.bg-orange-1{background:#fff3e0!important}.bg-orange-2{background:#ffe0b2!important}.bg-orange-3{background:#ffcc80!important}.bg-orange-4{background:#ffb74d!important}.bg-orange-5{background:#ffa726!important}.bg-orange-6{background:#ff9800!important}.bg-orange-7{background:#fb8c00!important}.bg-orange-8{background:#f57c00!important}.bg-orange-9{background:#ef6c00!important}.bg-orange-10{background:#e65100!important}.bg-orange-11{background:#ffd180!important}.bg-orange-12{background:#ffab40!important}.bg-orange-13{background:#ff9100!important}.bg-orange-14{background:#ff6d00!important}.bg-deep-orange{background:#ff5722!important}.bg-deep-orange-1{background:#fbe9e7!important}.bg-deep-orange-2{background:#ffccbc!important}.bg-deep-orange-3{background:#ffab91!important}.bg-deep-orange-4{background:#ff8a65!important}.bg-deep-orange-5{background:#ff7043!important}.bg-deep-orange-6{background:#ff5722!important}.bg-deep-orange-7{background:#f4511e!important}.bg-deep-orange-8{background:#e64a19!important}.bg-deep-orange-9{background:#d84315!important}.bg-deep-orange-10{background:#bf360c!important}.bg-deep-orange-11{background:#ff9e80!important}.bg-deep-orange-12{background:#ff6e40!important}.bg-deep-orange-13{background:#ff3d00!important}.bg-deep-orange-14{background:#dd2c00!important}.bg-brown{background:#795548!important}.bg-brown-1{background:#efebe9!important}.bg-brown-2{background:#d7ccc8!important}.bg-brown-3{background:#bcaaa4!important}.bg-brown-4{background:#a1887f!important}.bg-brown-5{background:#8d6e63!important}.bg-brown-6{background:#795548!important}.bg-brown-7{background:#6d4c41!important}.bg-brown-8{background:#5d4037!important}.bg-brown-9{background:#4e342e!important}.bg-brown-10{background:#3e2723!important}.bg-brown-11{background:#d7ccc8!important}.bg-brown-12{background:#bcaaa4!important}.bg-brown-13{background:#8d6e63!important}.bg-brown-14{background:#5d4037!important}.bg-grey{background:#9e9e9e!important}.bg-grey-1{background:#fafafa!important}.bg-grey-2{background:#f5f5f5!important}.bg-grey-3{background:#eee!important}.bg-grey-4{background:#e0e0e0!important}.bg-grey-5{background:#bdbdbd!important}.bg-grey-6{background:#9e9e9e!important}.bg-grey-7{background:#757575!important}.bg-grey-8{background:#616161!important}.bg-grey-9{background:#424242!important}.bg-grey-10{background:#212121!important}.bg-grey-11{background:#f5f5f5!important}.bg-grey-12{background:#eee!important}.bg-grey-13{background:#bdbdbd!important}.bg-grey-14{background:#616161!important}.bg-blue-grey{background:#607d8b!important}.bg-blue-grey-1{background:#eceff1!important}.bg-blue-grey-2{background:#cfd8dc!important}.bg-blue-grey-3{background:#b0bec5!important}.bg-blue-grey-4{background:#90a4ae!important}.bg-blue-grey-5{background:#78909c!important}.bg-blue-grey-6{background:#607d8b!important}.bg-blue-grey-7{background:#546e7a!important}.bg-blue-grey-8{background:#455a64!important}.bg-blue-grey-9{background:#37474f!important}.bg-blue-grey-10{background:#263238!important}.bg-blue-grey-11{background:#cfd8dc!important}.bg-blue-grey-12{background:#b0bec5!important}.bg-blue-grey-13{background:#78909c!important}.bg-blue-grey-14{background:#455a64!important}.shadow-transition{transition:box-shadow .28s cubic-bezier(.4,0,.2,1)!important}.shadow-1{box-shadow:0 1px 3px rgba(0,0,0,.2),0 1px 1px rgba(0,0,0,.14),0 2px 1px -1px rgba(0,0,0,.12)}.shadow-up-1{box-shadow:0 -1px 3px rgba(0,0,0,.2),0 -1px 1px rgba(0,0,0,.14),0 -2px 1px -1px rgba(0,0,0,.12)}.shadow-2{box-shadow:0 1px 5px rgba(0,0,0,.2),0 2px 2px rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12)}.shadow-up-2{box-shadow:0 -1px 5px rgba(0,0,0,.2),0 -2px 2px rgba(0,0,0,.14),0 -3px 1px -2px rgba(0,0,0,.12)}.shadow-3{box-shadow:0 1px 8px rgba(0,0,0,.2),0 3px 4px rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.12)}.shadow-up-3{box-shadow:0 -1px 8px rgba(0,0,0,.2),0 -3px 4px rgba(0,0,0,.14),0 -3px 3px -2px rgba(0,0,0,.12)}.shadow-4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px rgba(0,0,0,.14),0 1px 10px rgba(0,0,0,.12)}.shadow-up-4{box-shadow:0 -2px 4px -1px rgba(0,0,0,.2),0 -4px 5px rgba(0,0,0,.14),0 -1px 10px rgba(0,0,0,.12)}.shadow-5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px rgba(0,0,0,.14),0 1px 14px rgba(0,0,0,.12)}.shadow-up-5{box-shadow:0 -3px 5px -1px rgba(0,0,0,.2),0 -5px 8px rgba(0,0,0,.14),0 -1px 14px rgba(0,0,0,.12)}.shadow-6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12)}.shadow-up-6{box-shadow:0 -3px 5px -1px rgba(0,0,0,.2),0 -6px 10px rgba(0,0,0,.14),0 -1px 18px rgba(0,0,0,.12)}.shadow-7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)}.shadow-up-7{box-shadow:0 -4px 5px -2px rgba(0,0,0,.2),0 -7px 10px 1px rgba(0,0,0,.14),0 -2px 16px 1px rgba(0,0,0,.12)}.shadow-8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.shadow-up-8{box-shadow:0 -5px 5px -3px rgba(0,0,0,.2),0 -8px 10px 1px rgba(0,0,0,.14),0 -3px 14px 2px rgba(0,0,0,.12)}.shadow-9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)}.shadow-up-9{box-shadow:0 -5px 6px -3px rgba(0,0,0,.2),0 -9px 12px 1px rgba(0,0,0,.14),0 -3px 16px 2px rgba(0,0,0,.12)}.shadow-10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)}.shadow-up-10{box-shadow:0 -6px 6px -3px rgba(0,0,0,.2),0 -10px 14px 1px rgba(0,0,0,.14),0 -4px 18px 3px rgba(0,0,0,.12)}.shadow-11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)}.shadow-up-11{box-shadow:0 -6px 7px -4px rgba(0,0,0,.2),0 -11px 15px 1px rgba(0,0,0,.14),0 -4px 20px 3px rgba(0,0,0,.12)}.shadow-12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.shadow-up-12{box-shadow:0 -7px 8px -4px rgba(0,0,0,.2),0 -12px 17px 2px rgba(0,0,0,.14),0 -5px 22px 4px rgba(0,0,0,.12)}.shadow-13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)}.shadow-up-13{box-shadow:0 -7px 8px -4px rgba(0,0,0,.2),0 -13px 19px 2px rgba(0,0,0,.14),0 -5px 24px 4px rgba(0,0,0,.12)}.shadow-14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)}.shadow-up-14{box-shadow:0 -7px 9px -4px rgba(0,0,0,.2),0 -14px 21px 2px rgba(0,0,0,.14),0 -5px 26px 4px rgba(0,0,0,.12)}.shadow-15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)}.shadow-up-15{box-shadow:0 -8px 9px -5px rgba(0,0,0,.2),0 -15px 22px 2px rgba(0,0,0,.14),0 -6px 28px 5px rgba(0,0,0,.12)}.shadow-16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.shadow-up-16{box-shadow:0 -8px 10px -5px rgba(0,0,0,.2),0 -16px 24px 2px rgba(0,0,0,.14),0 -6px 30px 5px rgba(0,0,0,.12)}.shadow-17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)}.shadow-up-17{box-shadow:0 -8px 11px -5px rgba(0,0,0,.2),0 -17px 26px 2px rgba(0,0,0,.14),0 -6px 32px 5px rgba(0,0,0,.12)}.shadow-18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)}.shadow-up-18{box-shadow:0 -9px 11px -5px rgba(0,0,0,.2),0 -18px 28px 2px rgba(0,0,0,.14),0 -7px 34px 6px rgba(0,0,0,.12)}.shadow-19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)}.shadow-up-19{box-shadow:0 -9px 12px -6px rgba(0,0,0,.2),0 -19px 29px 2px rgba(0,0,0,.14),0 -7px 36px 6px rgba(0,0,0,.12)}.shadow-20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)}.shadow-up-20{box-shadow:0 -10px 13px -6px rgba(0,0,0,.2),0 -20px 31px 3px rgba(0,0,0,.14),0 -8px 38px 7px rgba(0,0,0,.12)}.shadow-21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)}.shadow-up-21{box-shadow:0 -10px 13px -6px rgba(0,0,0,.2),0 -21px 33px 3px rgba(0,0,0,.14),0 -8px 40px 7px rgba(0,0,0,.12)}.shadow-22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)}.shadow-up-22{box-shadow:0 -10px 14px -6px rgba(0,0,0,.2),0 -22px 35px 3px rgba(0,0,0,.14),0 -8px 42px 7px rgba(0,0,0,.12)}.shadow-23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)}.shadow-up-23{box-shadow:0 -11px 14px -7px rgba(0,0,0,.2),0 -23px 36px 3px rgba(0,0,0,.14),0 -9px 44px 8px rgba(0,0,0,.12)}.shadow-24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.shadow-up-24{box-shadow:0 -11px 15px -7px rgba(0,0,0,.2),0 -24px 38px 3px rgba(0,0,0,.14),0 -9px 46px 8px rgba(0,0,0,.12)}.inset-shadow{box-shadow:inset 0 7px 9px -7px rgba(0,0,0,.7)}.inset-shadow-down{box-shadow:inset 0 -7px 9px -7px rgba(0,0,0,.7)}body.body--dark .shadow-1{box-shadow:0 1px 3px hsla(0,0%,100%,.2),0 1px 1px hsla(0,0%,100%,.14),0 2px 1px -1px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-1{box-shadow:0 -1px 3px hsla(0,0%,100%,.2),0 -1px 1px hsla(0,0%,100%,.14),0 -2px 1px -1px hsla(0,0%,100%,.12)}body.body--dark .shadow-2{box-shadow:0 1px 5px hsla(0,0%,100%,.2),0 2px 2px hsla(0,0%,100%,.14),0 3px 1px -2px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-2{box-shadow:0 -1px 5px hsla(0,0%,100%,.2),0 -2px 2px hsla(0,0%,100%,.14),0 -3px 1px -2px hsla(0,0%,100%,.12)}body.body--dark .shadow-3{box-shadow:0 1px 8px hsla(0,0%,100%,.2),0 3px 4px hsla(0,0%,100%,.14),0 3px 3px -2px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-3{box-shadow:0 -1px 8px hsla(0,0%,100%,.2),0 -3px 4px hsla(0,0%,100%,.14),0 -3px 3px -2px hsla(0,0%,100%,.12)}body.body--dark .shadow-4{box-shadow:0 2px 4px -1px hsla(0,0%,100%,.2),0 4px 5px hsla(0,0%,100%,.14),0 1px 10px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-4{box-shadow:0 -2px 4px -1px hsla(0,0%,100%,.2),0 -4px 5px hsla(0,0%,100%,.14),0 -1px 10px hsla(0,0%,100%,.12)}body.body--dark .shadow-5{box-shadow:0 3px 5px -1px hsla(0,0%,100%,.2),0 5px 8px hsla(0,0%,100%,.14),0 1px 14px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-5{box-shadow:0 -3px 5px -1px hsla(0,0%,100%,.2),0 -5px 8px hsla(0,0%,100%,.14),0 -1px 14px hsla(0,0%,100%,.12)}body.body--dark .shadow-6{box-shadow:0 3px 5px -1px hsla(0,0%,100%,.2),0 6px 10px hsla(0,0%,100%,.14),0 1px 18px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-6{box-shadow:0 -3px 5px -1px hsla(0,0%,100%,.2),0 -6px 10px hsla(0,0%,100%,.14),0 -1px 18px hsla(0,0%,100%,.12)}body.body--dark .shadow-7{box-shadow:0 4px 5px -2px hsla(0,0%,100%,.2),0 7px 10px 1px hsla(0,0%,100%,.14),0 2px 16px 1px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-7{box-shadow:0 -4px 5px -2px hsla(0,0%,100%,.2),0 -7px 10px 1px hsla(0,0%,100%,.14),0 -2px 16px 1px hsla(0,0%,100%,.12)}body.body--dark .shadow-8{box-shadow:0 5px 5px -3px hsla(0,0%,100%,.2),0 8px 10px 1px hsla(0,0%,100%,.14),0 3px 14px 2px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-8{box-shadow:0 -5px 5px -3px hsla(0,0%,100%,.2),0 -8px 10px 1px hsla(0,0%,100%,.14),0 -3px 14px 2px hsla(0,0%,100%,.12)}body.body--dark .shadow-9{box-shadow:0 5px 6px -3px hsla(0,0%,100%,.2),0 9px 12px 1px hsla(0,0%,100%,.14),0 3px 16px 2px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-9{box-shadow:0 -5px 6px -3px hsla(0,0%,100%,.2),0 -9px 12px 1px hsla(0,0%,100%,.14),0 -3px 16px 2px hsla(0,0%,100%,.12)}body.body--dark .shadow-10{box-shadow:0 6px 6px -3px hsla(0,0%,100%,.2),0 10px 14px 1px hsla(0,0%,100%,.14),0 4px 18px 3px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-10{box-shadow:0 -6px 6px -3px hsla(0,0%,100%,.2),0 -10px 14px 1px hsla(0,0%,100%,.14),0 -4px 18px 3px hsla(0,0%,100%,.12)}body.body--dark .shadow-11{box-shadow:0 6px 7px -4px hsla(0,0%,100%,.2),0 11px 15px 1px hsla(0,0%,100%,.14),0 4px 20px 3px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-11{box-shadow:0 -6px 7px -4px hsla(0,0%,100%,.2),0 -11px 15px 1px hsla(0,0%,100%,.14),0 -4px 20px 3px hsla(0,0%,100%,.12)}body.body--dark .shadow-12{box-shadow:0 7px 8px -4px hsla(0,0%,100%,.2),0 12px 17px 2px hsla(0,0%,100%,.14),0 5px 22px 4px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-12{box-shadow:0 -7px 8px -4px hsla(0,0%,100%,.2),0 -12px 17px 2px hsla(0,0%,100%,.14),0 -5px 22px 4px hsla(0,0%,100%,.12)}body.body--dark .shadow-13{box-shadow:0 7px 8px -4px hsla(0,0%,100%,.2),0 13px 19px 2px hsla(0,0%,100%,.14),0 5px 24px 4px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-13{box-shadow:0 -7px 8px -4px hsla(0,0%,100%,.2),0 -13px 19px 2px hsla(0,0%,100%,.14),0 -5px 24px 4px hsla(0,0%,100%,.12)}body.body--dark .shadow-14{box-shadow:0 7px 9px -4px hsla(0,0%,100%,.2),0 14px 21px 2px hsla(0,0%,100%,.14),0 5px 26px 4px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-14{box-shadow:0 -7px 9px -4px hsla(0,0%,100%,.2),0 -14px 21px 2px hsla(0,0%,100%,.14),0 -5px 26px 4px hsla(0,0%,100%,.12)}body.body--dark .shadow-15{box-shadow:0 8px 9px -5px hsla(0,0%,100%,.2),0 15px 22px 2px hsla(0,0%,100%,.14),0 6px 28px 5px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-15{box-shadow:0 -8px 9px -5px hsla(0,0%,100%,.2),0 -15px 22px 2px hsla(0,0%,100%,.14),0 -6px 28px 5px hsla(0,0%,100%,.12)}body.body--dark .shadow-16{box-shadow:0 8px 10px -5px hsla(0,0%,100%,.2),0 16px 24px 2px hsla(0,0%,100%,.14),0 6px 30px 5px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-16{box-shadow:0 -8px 10px -5px hsla(0,0%,100%,.2),0 -16px 24px 2px hsla(0,0%,100%,.14),0 -6px 30px 5px hsla(0,0%,100%,.12)}body.body--dark .shadow-17{box-shadow:0 8px 11px -5px hsla(0,0%,100%,.2),0 17px 26px 2px hsla(0,0%,100%,.14),0 6px 32px 5px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-17{box-shadow:0 -8px 11px -5px hsla(0,0%,100%,.2),0 -17px 26px 2px hsla(0,0%,100%,.14),0 -6px 32px 5px hsla(0,0%,100%,.12)}body.body--dark .shadow-18{box-shadow:0 9px 11px -5px hsla(0,0%,100%,.2),0 18px 28px 2px hsla(0,0%,100%,.14),0 7px 34px 6px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-18{box-shadow:0 -9px 11px -5px hsla(0,0%,100%,.2),0 -18px 28px 2px hsla(0,0%,100%,.14),0 -7px 34px 6px hsla(0,0%,100%,.12)}body.body--dark .shadow-19{box-shadow:0 9px 12px -6px hsla(0,0%,100%,.2),0 19px 29px 2px hsla(0,0%,100%,.14),0 7px 36px 6px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-19{box-shadow:0 -9px 12px -6px hsla(0,0%,100%,.2),0 -19px 29px 2px hsla(0,0%,100%,.14),0 -7px 36px 6px hsla(0,0%,100%,.12)}body.body--dark .shadow-20{box-shadow:0 10px 13px -6px hsla(0,0%,100%,.2),0 20px 31px 3px hsla(0,0%,100%,.14),0 8px 38px 7px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-20{box-shadow:0 -10px 13px -6px hsla(0,0%,100%,.2),0 -20px 31px 3px hsla(0,0%,100%,.14),0 -8px 38px 7px hsla(0,0%,100%,.12)}body.body--dark .shadow-21{box-shadow:0 10px 13px -6px hsla(0,0%,100%,.2),0 21px 33px 3px hsla(0,0%,100%,.14),0 8px 40px 7px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-21{box-shadow:0 -10px 13px -6px hsla(0,0%,100%,.2),0 -21px 33px 3px hsla(0,0%,100%,.14),0 -8px 40px 7px hsla(0,0%,100%,.12)}body.body--dark .shadow-22{box-shadow:0 10px 14px -6px hsla(0,0%,100%,.2),0 22px 35px 3px hsla(0,0%,100%,.14),0 8px 42px 7px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-22{box-shadow:0 -10px 14px -6px hsla(0,0%,100%,.2),0 -22px 35px 3px hsla(0,0%,100%,.14),0 -8px 42px 7px hsla(0,0%,100%,.12)}body.body--dark .shadow-23{box-shadow:0 11px 14px -7px hsla(0,0%,100%,.2),0 23px 36px 3px hsla(0,0%,100%,.14),0 9px 44px 8px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-23{box-shadow:0 -11px 14px -7px hsla(0,0%,100%,.2),0 -23px 36px 3px hsla(0,0%,100%,.14),0 -9px 44px 8px hsla(0,0%,100%,.12)}body.body--dark .shadow-24{box-shadow:0 11px 15px -7px hsla(0,0%,100%,.2),0 24px 38px 3px hsla(0,0%,100%,.14),0 9px 46px 8px hsla(0,0%,100%,.12)}body.body--dark .shadow-up-24{box-shadow:0 -11px 15px -7px hsla(0,0%,100%,.2),0 -24px 38px 3px hsla(0,0%,100%,.14),0 -9px 46px 8px hsla(0,0%,100%,.12)}body.body--dark .inset-shadow{box-shadow:inset 0 7px 9px -7px hsla(0,0%,100%,.7)}body.body--dark .inset-shadow-down{box-shadow:inset 0 -7px 9px -7px hsla(0,0%,100%,.7)}.no-shadow,.shadow-0{box-shadow:none!important}.z-marginals{z-index:2000}.z-notify{z-index:9500}.z-fullscreen{z-index:6000}.z-inherit{z-index:inherit!important}.column,.flex,.row{display:flex;flex-wrap:wrap}.column.inline,.flex.inline,.row.inline{display:inline-flex}.row.reverse{flex-direction:row-reverse}.column{flex-direction:column}.column.reverse{flex-direction:column-reverse}.wrap{flex-wrap:wrap}.no-wrap{flex-wrap:nowrap}.reverse-wrap{flex-wrap:wrap-reverse}.order-first{order:-10000}.order-last{order:10000}.order-none{order:0}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.flex-center,.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.flex-center,.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-center{align-content:center}.content-stretch{align-content:stretch}.content-between{align-content:space-between}.content-around{align-content:space-around}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-baseline{align-self:baseline}.self-stretch{align-self:stretch}.q-gutter-none,.q-gutter-none>*,.q-gutter-x-none,.q-gutter-x-none>*{margin-left:0}.q-gutter-none,.q-gutter-none>*,.q-gutter-y-none,.q-gutter-y-none>*{margin-top:0}.q-col-gutter-none,.q-col-gutter-x-none{margin-left:0}.q-col-gutter-none>*,.q-col-gutter-x-none>*{padding-left:0}.q-col-gutter-none,.q-col-gutter-y-none{margin-top:0}.q-col-gutter-none>*,.q-col-gutter-y-none>*{padding-top:0}.q-gutter-x-xs,.q-gutter-xs{margin-left:-4px}.q-gutter-x-xs>*,.q-gutter-xs>*{margin-left:4px}.q-gutter-xs,.q-gutter-y-xs{margin-top:-4px}.q-gutter-xs>*,.q-gutter-y-xs>*{margin-top:4px}.q-col-gutter-x-xs,.q-col-gutter-xs{margin-left:-4px}.q-col-gutter-x-xs>*,.q-col-gutter-xs>*{padding-left:4px}.q-col-gutter-xs,.q-col-gutter-y-xs{margin-top:-4px}.q-col-gutter-xs>*,.q-col-gutter-y-xs>*{padding-top:4px}.q-gutter-sm,.q-gutter-x-sm{margin-left:-8px}.q-gutter-sm>*,.q-gutter-x-sm>*{margin-left:8px}.q-gutter-sm,.q-gutter-y-sm{margin-top:-8px}.q-gutter-sm>*,.q-gutter-y-sm>*{margin-top:8px}.q-col-gutter-sm,.q-col-gutter-x-sm{margin-left:-8px}.q-col-gutter-sm>*,.q-col-gutter-x-sm>*{padding-left:8px}.q-col-gutter-sm,.q-col-gutter-y-sm{margin-top:-8px}.q-col-gutter-sm>*,.q-col-gutter-y-sm>*{padding-top:8px}.q-gutter-md,.q-gutter-x-md{margin-left:-16px}.q-gutter-md>*,.q-gutter-x-md>*{margin-left:16px}.q-gutter-md,.q-gutter-y-md{margin-top:-16px}.q-gutter-md>*,.q-gutter-y-md>*{margin-top:16px}.q-col-gutter-md,.q-col-gutter-x-md{margin-left:-16px}.q-col-gutter-md>*,.q-col-gutter-x-md>*{padding-left:16px}.q-col-gutter-md,.q-col-gutter-y-md{margin-top:-16px}.q-col-gutter-md>*,.q-col-gutter-y-md>*{padding-top:16px}.q-gutter-lg,.q-gutter-x-lg{margin-left:-24px}.q-gutter-lg>*,.q-gutter-x-lg>*{margin-left:24px}.q-gutter-lg,.q-gutter-y-lg{margin-top:-24px}.q-gutter-lg>*,.q-gutter-y-lg>*{margin-top:24px}.q-col-gutter-lg,.q-col-gutter-x-lg{margin-left:-24px}.q-col-gutter-lg>*,.q-col-gutter-x-lg>*{padding-left:24px}.q-col-gutter-lg,.q-col-gutter-y-lg{margin-top:-24px}.q-col-gutter-lg>*,.q-col-gutter-y-lg>*{padding-top:24px}.q-gutter-x-xl,.q-gutter-xl{margin-left:-48px}.q-gutter-x-xl>*,.q-gutter-xl>*{margin-left:48px}.q-gutter-xl,.q-gutter-y-xl{margin-top:-48px}.q-gutter-xl>*,.q-gutter-y-xl>*{margin-top:48px}.q-col-gutter-x-xl,.q-col-gutter-xl{margin-left:-48px}.q-col-gutter-x-xl>*,.q-col-gutter-xl>*{padding-left:48px}.q-col-gutter-xl,.q-col-gutter-y-xl{margin-top:-48px}.q-col-gutter-xl>*,.q-col-gutter-y-xl>*{padding-top:48px}@media (min-width:0){.flex>.col,.flex>.col-0,.flex>.col-1,.flex>.col-10,.flex>.col-11,.flex>.col-12,.flex>.col-2,.flex>.col-3,.flex>.col-4,.flex>.col-5,.flex>.col-6,.flex>.col-7,.flex>.col-8,.flex>.col-9,.flex>.col-auto,.flex>.col-grow,.flex>.col-shrink,.flex>.col-xs,.flex>.col-xs-0,.flex>.col-xs-1,.flex>.col-xs-10,.flex>.col-xs-11,.flex>.col-xs-12,.flex>.col-xs-2,.flex>.col-xs-3,.flex>.col-xs-4,.flex>.col-xs-5,.flex>.col-xs-6,.flex>.col-xs-7,.flex>.col-xs-8,.flex>.col-xs-9,.flex>.col-xs-auto,.flex>.col-xs-grow,.flex>.col-xs-shrink,.row>.col,.row>.col-0,.row>.col-1,.row>.col-10,.row>.col-11,.row>.col-12,.row>.col-2,.row>.col-3,.row>.col-4,.row>.col-5,.row>.col-6,.row>.col-7,.row>.col-8,.row>.col-9,.row>.col-auto,.row>.col-grow,.row>.col-shrink,.row>.col-xs,.row>.col-xs-0,.row>.col-xs-1,.row>.col-xs-10,.row>.col-xs-11,.row>.col-xs-12,.row>.col-xs-2,.row>.col-xs-3,.row>.col-xs-4,.row>.col-xs-5,.row>.col-xs-6,.row>.col-xs-7,.row>.col-xs-8,.row>.col-xs-9,.row>.col-xs-auto,.row>.col-xs-grow,.row>.col-xs-shrink{max-width:100%;min-width:0;width:auto}.column>.col,.column>.col-0,.column>.col-1,.column>.col-10,.column>.col-11,.column>.col-12,.column>.col-2,.column>.col-3,.column>.col-4,.column>.col-5,.column>.col-6,.column>.col-7,.column>.col-8,.column>.col-9,.column>.col-auto,.column>.col-grow,.column>.col-shrink,.column>.col-xs,.column>.col-xs-0,.column>.col-xs-1,.column>.col-xs-10,.column>.col-xs-11,.column>.col-xs-12,.column>.col-xs-2,.column>.col-xs-3,.column>.col-xs-4,.column>.col-xs-5,.column>.col-xs-6,.column>.col-xs-7,.column>.col-xs-8,.column>.col-xs-9,.column>.col-xs-auto,.column>.col-xs-grow,.column>.col-xs-shrink,.flex>.col,.flex>.col-0,.flex>.col-1,.flex>.col-10,.flex>.col-11,.flex>.col-12,.flex>.col-2,.flex>.col-3,.flex>.col-4,.flex>.col-5,.flex>.col-6,.flex>.col-7,.flex>.col-8,.flex>.col-9,.flex>.col-auto,.flex>.col-grow,.flex>.col-shrink,.flex>.col-xs,.flex>.col-xs-0,.flex>.col-xs-1,.flex>.col-xs-10,.flex>.col-xs-11,.flex>.col-xs-12,.flex>.col-xs-2,.flex>.col-xs-3,.flex>.col-xs-4,.flex>.col-xs-5,.flex>.col-xs-6,.flex>.col-xs-7,.flex>.col-xs-8,.flex>.col-xs-9,.flex>.col-xs-auto,.flex>.col-xs-grow,.flex>.col-xs-shrink{height:auto;max-height:100%;min-height:0}.col,.col-xs{flex:10000 1 0%}.col-0,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-xs-0,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-auto{flex:0 0 auto}.col-grow,.col-xs-grow{flex:1 0 auto}.col-shrink,.col-xs-shrink{flex:0 1 auto}.row>.col-0,.row>.col-xs-0{height:auto;width:0}.row>.offset-0,.row>.offset-xs-0{margin-left:0}.column>.col-0,.column>.col-xs-0{height:0;width:auto}.row>.col-1,.row>.col-xs-1{height:auto;width:8.3333%}.row>.offset-1,.row>.offset-xs-1{margin-left:8.3333%}.column>.col-1,.column>.col-xs-1{height:8.3333%;width:auto}.row>.col-2,.row>.col-xs-2{height:auto;width:16.6667%}.row>.offset-2,.row>.offset-xs-2{margin-left:16.6667%}.column>.col-2,.column>.col-xs-2{height:16.6667%;width:auto}.row>.col-3,.row>.col-xs-3{height:auto;width:25%}.row>.offset-3,.row>.offset-xs-3{margin-left:25%}.column>.col-3,.column>.col-xs-3{height:25%;width:auto}.row>.col-4,.row>.col-xs-4{height:auto;width:33.3333%}.row>.offset-4,.row>.offset-xs-4{margin-left:33.3333%}.column>.col-4,.column>.col-xs-4{height:33.3333%;width:auto}.row>.col-5,.row>.col-xs-5{height:auto;width:41.6667%}.row>.offset-5,.row>.offset-xs-5{margin-left:41.6667%}.column>.col-5,.column>.col-xs-5{height:41.6667%;width:auto}.row>.col-6,.row>.col-xs-6{height:auto;width:50%}.row>.offset-6,.row>.offset-xs-6{margin-left:50%}.column>.col-6,.column>.col-xs-6{height:50%;width:auto}.row>.col-7,.row>.col-xs-7{height:auto;width:58.3333%}.row>.offset-7,.row>.offset-xs-7{margin-left:58.3333%}.column>.col-7,.column>.col-xs-7{height:58.3333%;width:auto}.row>.col-8,.row>.col-xs-8{height:auto;width:66.6667%}.row>.offset-8,.row>.offset-xs-8{margin-left:66.6667%}.column>.col-8,.column>.col-xs-8{height:66.6667%;width:auto}.row>.col-9,.row>.col-xs-9{height:auto;width:75%}.row>.offset-9,.row>.offset-xs-9{margin-left:75%}.column>.col-9,.column>.col-xs-9{height:75%;width:auto}.row>.col-10,.row>.col-xs-10{height:auto;width:83.3333%}.row>.offset-10,.row>.offset-xs-10{margin-left:83.3333%}.column>.col-10,.column>.col-xs-10{height:83.3333%;width:auto}.row>.col-11,.row>.col-xs-11{height:auto;width:91.6667%}.row>.offset-11,.row>.offset-xs-11{margin-left:91.6667%}.column>.col-11,.column>.col-xs-11{height:91.6667%;width:auto}.row>.col-12,.row>.col-xs-12{height:auto;width:100%}.row>.offset-12,.row>.offset-xs-12{margin-left:100%}.column>.col-12,.column>.col-xs-12{height:100%;width:auto}.row>.col-all{flex:0 0 100%;height:auto}}@media (min-width:600px){.flex>.col-sm,.flex>.col-sm-0,.flex>.col-sm-1,.flex>.col-sm-10,.flex>.col-sm-11,.flex>.col-sm-12,.flex>.col-sm-2,.flex>.col-sm-3,.flex>.col-sm-4,.flex>.col-sm-5,.flex>.col-sm-6,.flex>.col-sm-7,.flex>.col-sm-8,.flex>.col-sm-9,.flex>.col-sm-auto,.flex>.col-sm-grow,.flex>.col-sm-shrink,.row>.col-sm,.row>.col-sm-0,.row>.col-sm-1,.row>.col-sm-10,.row>.col-sm-11,.row>.col-sm-12,.row>.col-sm-2,.row>.col-sm-3,.row>.col-sm-4,.row>.col-sm-5,.row>.col-sm-6,.row>.col-sm-7,.row>.col-sm-8,.row>.col-sm-9,.row>.col-sm-auto,.row>.col-sm-grow,.row>.col-sm-shrink{max-width:100%;min-width:0;width:auto}.column>.col-sm,.column>.col-sm-0,.column>.col-sm-1,.column>.col-sm-10,.column>.col-sm-11,.column>.col-sm-12,.column>.col-sm-2,.column>.col-sm-3,.column>.col-sm-4,.column>.col-sm-5,.column>.col-sm-6,.column>.col-sm-7,.column>.col-sm-8,.column>.col-sm-9,.column>.col-sm-auto,.column>.col-sm-grow,.column>.col-sm-shrink,.flex>.col-sm,.flex>.col-sm-0,.flex>.col-sm-1,.flex>.col-sm-10,.flex>.col-sm-11,.flex>.col-sm-12,.flex>.col-sm-2,.flex>.col-sm-3,.flex>.col-sm-4,.flex>.col-sm-5,.flex>.col-sm-6,.flex>.col-sm-7,.flex>.col-sm-8,.flex>.col-sm-9,.flex>.col-sm-auto,.flex>.col-sm-grow,.flex>.col-sm-shrink{height:auto;max-height:100%;min-height:0}.col-sm{flex:10000 1 0%}.col-sm-0,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto{flex:0 0 auto}.col-sm-grow{flex:1 0 auto}.col-sm-shrink{flex:0 1 auto}.row>.col-sm-0{height:auto;width:0}.row>.offset-sm-0{margin-left:0}.column>.col-sm-0{height:0;width:auto}.row>.col-sm-1{height:auto;width:8.3333%}.row>.offset-sm-1{margin-left:8.3333%}.column>.col-sm-1{height:8.3333%;width:auto}.row>.col-sm-2{height:auto;width:16.6667%}.row>.offset-sm-2{margin-left:16.6667%}.column>.col-sm-2{height:16.6667%;width:auto}.row>.col-sm-3{height:auto;width:25%}.row>.offset-sm-3{margin-left:25%}.column>.col-sm-3{height:25%;width:auto}.row>.col-sm-4{height:auto;width:33.3333%}.row>.offset-sm-4{margin-left:33.3333%}.column>.col-sm-4{height:33.3333%;width:auto}.row>.col-sm-5{height:auto;width:41.6667%}.row>.offset-sm-5{margin-left:41.6667%}.column>.col-sm-5{height:41.6667%;width:auto}.row>.col-sm-6{height:auto;width:50%}.row>.offset-sm-6{margin-left:50%}.column>.col-sm-6{height:50%;width:auto}.row>.col-sm-7{height:auto;width:58.3333%}.row>.offset-sm-7{margin-left:58.3333%}.column>.col-sm-7{height:58.3333%;width:auto}.row>.col-sm-8{height:auto;width:66.6667%}.row>.offset-sm-8{margin-left:66.6667%}.column>.col-sm-8{height:66.6667%;width:auto}.row>.col-sm-9{height:auto;width:75%}.row>.offset-sm-9{margin-left:75%}.column>.col-sm-9{height:75%;width:auto}.row>.col-sm-10{height:auto;width:83.3333%}.row>.offset-sm-10{margin-left:83.3333%}.column>.col-sm-10{height:83.3333%;width:auto}.row>.col-sm-11{height:auto;width:91.6667%}.row>.offset-sm-11{margin-left:91.6667%}.column>.col-sm-11{height:91.6667%;width:auto}.row>.col-sm-12{height:auto;width:100%}.row>.offset-sm-12{margin-left:100%}.column>.col-sm-12{height:100%;width:auto}}@media (min-width:1024px){.flex>.col-md,.flex>.col-md-0,.flex>.col-md-1,.flex>.col-md-10,.flex>.col-md-11,.flex>.col-md-12,.flex>.col-md-2,.flex>.col-md-3,.flex>.col-md-4,.flex>.col-md-5,.flex>.col-md-6,.flex>.col-md-7,.flex>.col-md-8,.flex>.col-md-9,.flex>.col-md-auto,.flex>.col-md-grow,.flex>.col-md-shrink,.row>.col-md,.row>.col-md-0,.row>.col-md-1,.row>.col-md-10,.row>.col-md-11,.row>.col-md-12,.row>.col-md-2,.row>.col-md-3,.row>.col-md-4,.row>.col-md-5,.row>.col-md-6,.row>.col-md-7,.row>.col-md-8,.row>.col-md-9,.row>.col-md-auto,.row>.col-md-grow,.row>.col-md-shrink{max-width:100%;min-width:0;width:auto}.column>.col-md,.column>.col-md-0,.column>.col-md-1,.column>.col-md-10,.column>.col-md-11,.column>.col-md-12,.column>.col-md-2,.column>.col-md-3,.column>.col-md-4,.column>.col-md-5,.column>.col-md-6,.column>.col-md-7,.column>.col-md-8,.column>.col-md-9,.column>.col-md-auto,.column>.col-md-grow,.column>.col-md-shrink,.flex>.col-md,.flex>.col-md-0,.flex>.col-md-1,.flex>.col-md-10,.flex>.col-md-11,.flex>.col-md-12,.flex>.col-md-2,.flex>.col-md-3,.flex>.col-md-4,.flex>.col-md-5,.flex>.col-md-6,.flex>.col-md-7,.flex>.col-md-8,.flex>.col-md-9,.flex>.col-md-auto,.flex>.col-md-grow,.flex>.col-md-shrink{height:auto;max-height:100%;min-height:0}.col-md{flex:10000 1 0%}.col-md-0,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto{flex:0 0 auto}.col-md-grow{flex:1 0 auto}.col-md-shrink{flex:0 1 auto}.row>.col-md-0{height:auto;width:0}.row>.offset-md-0{margin-left:0}.column>.col-md-0{height:0;width:auto}.row>.col-md-1{height:auto;width:8.3333%}.row>.offset-md-1{margin-left:8.3333%}.column>.col-md-1{height:8.3333%;width:auto}.row>.col-md-2{height:auto;width:16.6667%}.row>.offset-md-2{margin-left:16.6667%}.column>.col-md-2{height:16.6667%;width:auto}.row>.col-md-3{height:auto;width:25%}.row>.offset-md-3{margin-left:25%}.column>.col-md-3{height:25%;width:auto}.row>.col-md-4{height:auto;width:33.3333%}.row>.offset-md-4{margin-left:33.3333%}.column>.col-md-4{height:33.3333%;width:auto}.row>.col-md-5{height:auto;width:41.6667%}.row>.offset-md-5{margin-left:41.6667%}.column>.col-md-5{height:41.6667%;width:auto}.row>.col-md-6{height:auto;width:50%}.row>.offset-md-6{margin-left:50%}.column>.col-md-6{height:50%;width:auto}.row>.col-md-7{height:auto;width:58.3333%}.row>.offset-md-7{margin-left:58.3333%}.column>.col-md-7{height:58.3333%;width:auto}.row>.col-md-8{height:auto;width:66.6667%}.row>.offset-md-8{margin-left:66.6667%}.column>.col-md-8{height:66.6667%;width:auto}.row>.col-md-9{height:auto;width:75%}.row>.offset-md-9{margin-left:75%}.column>.col-md-9{height:75%;width:auto}.row>.col-md-10{height:auto;width:83.3333%}.row>.offset-md-10{margin-left:83.3333%}.column>.col-md-10{height:83.3333%;width:auto}.row>.col-md-11{height:auto;width:91.6667%}.row>.offset-md-11{margin-left:91.6667%}.column>.col-md-11{height:91.6667%;width:auto}.row>.col-md-12{height:auto;width:100%}.row>.offset-md-12{margin-left:100%}.column>.col-md-12{height:100%;width:auto}}@media (min-width:1440px){.flex>.col-lg,.flex>.col-lg-0,.flex>.col-lg-1,.flex>.col-lg-10,.flex>.col-lg-11,.flex>.col-lg-12,.flex>.col-lg-2,.flex>.col-lg-3,.flex>.col-lg-4,.flex>.col-lg-5,.flex>.col-lg-6,.flex>.col-lg-7,.flex>.col-lg-8,.flex>.col-lg-9,.flex>.col-lg-auto,.flex>.col-lg-grow,.flex>.col-lg-shrink,.row>.col-lg,.row>.col-lg-0,.row>.col-lg-1,.row>.col-lg-10,.row>.col-lg-11,.row>.col-lg-12,.row>.col-lg-2,.row>.col-lg-3,.row>.col-lg-4,.row>.col-lg-5,.row>.col-lg-6,.row>.col-lg-7,.row>.col-lg-8,.row>.col-lg-9,.row>.col-lg-auto,.row>.col-lg-grow,.row>.col-lg-shrink{max-width:100%;min-width:0;width:auto}.column>.col-lg,.column>.col-lg-0,.column>.col-lg-1,.column>.col-lg-10,.column>.col-lg-11,.column>.col-lg-12,.column>.col-lg-2,.column>.col-lg-3,.column>.col-lg-4,.column>.col-lg-5,.column>.col-lg-6,.column>.col-lg-7,.column>.col-lg-8,.column>.col-lg-9,.column>.col-lg-auto,.column>.col-lg-grow,.column>.col-lg-shrink,.flex>.col-lg,.flex>.col-lg-0,.flex>.col-lg-1,.flex>.col-lg-10,.flex>.col-lg-11,.flex>.col-lg-12,.flex>.col-lg-2,.flex>.col-lg-3,.flex>.col-lg-4,.flex>.col-lg-5,.flex>.col-lg-6,.flex>.col-lg-7,.flex>.col-lg-8,.flex>.col-lg-9,.flex>.col-lg-auto,.flex>.col-lg-grow,.flex>.col-lg-shrink{height:auto;max-height:100%;min-height:0}.col-lg{flex:10000 1 0%}.col-lg-0,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto{flex:0 0 auto}.col-lg-grow{flex:1 0 auto}.col-lg-shrink{flex:0 1 auto}.row>.col-lg-0{height:auto;width:0}.row>.offset-lg-0{margin-left:0}.column>.col-lg-0{height:0;width:auto}.row>.col-lg-1{height:auto;width:8.3333%}.row>.offset-lg-1{margin-left:8.3333%}.column>.col-lg-1{height:8.3333%;width:auto}.row>.col-lg-2{height:auto;width:16.6667%}.row>.offset-lg-2{margin-left:16.6667%}.column>.col-lg-2{height:16.6667%;width:auto}.row>.col-lg-3{height:auto;width:25%}.row>.offset-lg-3{margin-left:25%}.column>.col-lg-3{height:25%;width:auto}.row>.col-lg-4{height:auto;width:33.3333%}.row>.offset-lg-4{margin-left:33.3333%}.column>.col-lg-4{height:33.3333%;width:auto}.row>.col-lg-5{height:auto;width:41.6667%}.row>.offset-lg-5{margin-left:41.6667%}.column>.col-lg-5{height:41.6667%;width:auto}.row>.col-lg-6{height:auto;width:50%}.row>.offset-lg-6{margin-left:50%}.column>.col-lg-6{height:50%;width:auto}.row>.col-lg-7{height:auto;width:58.3333%}.row>.offset-lg-7{margin-left:58.3333%}.column>.col-lg-7{height:58.3333%;width:auto}.row>.col-lg-8{height:auto;width:66.6667%}.row>.offset-lg-8{margin-left:66.6667%}.column>.col-lg-8{height:66.6667%;width:auto}.row>.col-lg-9{height:auto;width:75%}.row>.offset-lg-9{margin-left:75%}.column>.col-lg-9{height:75%;width:auto}.row>.col-lg-10{height:auto;width:83.3333%}.row>.offset-lg-10{margin-left:83.3333%}.column>.col-lg-10{height:83.3333%;width:auto}.row>.col-lg-11{height:auto;width:91.6667%}.row>.offset-lg-11{margin-left:91.6667%}.column>.col-lg-11{height:91.6667%;width:auto}.row>.col-lg-12{height:auto;width:100%}.row>.offset-lg-12{margin-left:100%}.column>.col-lg-12{height:100%;width:auto}}@media (min-width:1920px){.flex>.col-xl,.flex>.col-xl-0,.flex>.col-xl-1,.flex>.col-xl-10,.flex>.col-xl-11,.flex>.col-xl-12,.flex>.col-xl-2,.flex>.col-xl-3,.flex>.col-xl-4,.flex>.col-xl-5,.flex>.col-xl-6,.flex>.col-xl-7,.flex>.col-xl-8,.flex>.col-xl-9,.flex>.col-xl-auto,.flex>.col-xl-grow,.flex>.col-xl-shrink,.row>.col-xl,.row>.col-xl-0,.row>.col-xl-1,.row>.col-xl-10,.row>.col-xl-11,.row>.col-xl-12,.row>.col-xl-2,.row>.col-xl-3,.row>.col-xl-4,.row>.col-xl-5,.row>.col-xl-6,.row>.col-xl-7,.row>.col-xl-8,.row>.col-xl-9,.row>.col-xl-auto,.row>.col-xl-grow,.row>.col-xl-shrink{max-width:100%;min-width:0;width:auto}.column>.col-xl,.column>.col-xl-0,.column>.col-xl-1,.column>.col-xl-10,.column>.col-xl-11,.column>.col-xl-12,.column>.col-xl-2,.column>.col-xl-3,.column>.col-xl-4,.column>.col-xl-5,.column>.col-xl-6,.column>.col-xl-7,.column>.col-xl-8,.column>.col-xl-9,.column>.col-xl-auto,.column>.col-xl-grow,.column>.col-xl-shrink,.flex>.col-xl,.flex>.col-xl-0,.flex>.col-xl-1,.flex>.col-xl-10,.flex>.col-xl-11,.flex>.col-xl-12,.flex>.col-xl-2,.flex>.col-xl-3,.flex>.col-xl-4,.flex>.col-xl-5,.flex>.col-xl-6,.flex>.col-xl-7,.flex>.col-xl-8,.flex>.col-xl-9,.flex>.col-xl-auto,.flex>.col-xl-grow,.flex>.col-xl-shrink{height:auto;max-height:100%;min-height:0}.col-xl{flex:10000 1 0%}.col-xl-0,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{flex:0 0 auto}.col-xl-grow{flex:1 0 auto}.col-xl-shrink{flex:0 1 auto}.row>.col-xl-0{height:auto;width:0}.row>.offset-xl-0{margin-left:0}.column>.col-xl-0{height:0;width:auto}.row>.col-xl-1{height:auto;width:8.3333%}.row>.offset-xl-1{margin-left:8.3333%}.column>.col-xl-1{height:8.3333%;width:auto}.row>.col-xl-2{height:auto;width:16.6667%}.row>.offset-xl-2{margin-left:16.6667%}.column>.col-xl-2{height:16.6667%;width:auto}.row>.col-xl-3{height:auto;width:25%}.row>.offset-xl-3{margin-left:25%}.column>.col-xl-3{height:25%;width:auto}.row>.col-xl-4{height:auto;width:33.3333%}.row>.offset-xl-4{margin-left:33.3333%}.column>.col-xl-4{height:33.3333%;width:auto}.row>.col-xl-5{height:auto;width:41.6667%}.row>.offset-xl-5{margin-left:41.6667%}.column>.col-xl-5{height:41.6667%;width:auto}.row>.col-xl-6{height:auto;width:50%}.row>.offset-xl-6{margin-left:50%}.column>.col-xl-6{height:50%;width:auto}.row>.col-xl-7{height:auto;width:58.3333%}.row>.offset-xl-7{margin-left:58.3333%}.column>.col-xl-7{height:58.3333%;width:auto}.row>.col-xl-8{height:auto;width:66.6667%}.row>.offset-xl-8{margin-left:66.6667%}.column>.col-xl-8{height:66.6667%;width:auto}.row>.col-xl-9{height:auto;width:75%}.row>.offset-xl-9{margin-left:75%}.column>.col-xl-9{height:75%;width:auto}.row>.col-xl-10{height:auto;width:83.3333%}.row>.offset-xl-10{margin-left:83.3333%}.column>.col-xl-10{height:83.3333%;width:auto}.row>.col-xl-11{height:auto;width:91.6667%}.row>.offset-xl-11{margin-left:91.6667%}.column>.col-xl-11{height:91.6667%;width:auto}.row>.col-xl-12{height:auto;width:100%}.row>.offset-xl-12{margin-left:100%}.column>.col-xl-12{height:100%;width:auto}}.rounded-borders{border-radius:4px}.border-radius-inherit{border-radius:inherit}.no-transition{transition:none!important}.transition-0{transition:0s!important}.glossy{background-image:linear-gradient(180deg,hsla(0,0%,100%,.3),hsla(0,0%,100%,0) 50%,rgba(0,0,0,.12) 51%,rgba(0,0,0,.04))!important}.q-placeholder::placeholder{color:inherit;opacity:.7}.q-body--fullscreen-mixin,.q-body--prevent-scroll{position:fixed!important}.q-body--force-scrollbar-x{overflow-x:scroll}.q-body--force-scrollbar-y{overflow-y:scroll}.q-no-input-spinner{-moz-appearance:textfield!important}.q-no-input-spinner::-webkit-inner-spin-button,.q-no-input-spinner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.q-link{outline:0;text-decoration:none}.q-link--focusable:focus-visible{-webkit-text-decoration:underline dashed currentColor 1px;text-decoration:underline dashed currentColor 1px}body.electron .q-electron-drag{-webkit-app-region:drag;-webkit-user-select:none}body.electron .q-electron-drag .q-btn-item,body.electron .q-electron-drag--exception{-webkit-app-region:no-drag}img.responsive{height:auto;max-width:100%}.non-selectable{-webkit-user-select:none!important;user-select:none!important}.scroll,body.mobile .scroll--mobile{overflow:auto}.scroll,.scroll-x,.scroll-y{-webkit-overflow-scrolling:touch;will-change:scroll-position}.scroll-x{overflow-x:auto}.scroll-y{overflow-y:auto}.no-scroll{overflow:hidden!important}.no-pointer-events,.no-pointer-events--children,.no-pointer-events--children *{pointer-events:none!important}.all-pointer-events{pointer-events:all!important}.cursor-pointer{cursor:pointer!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-inherit{cursor:inherit!important}.cursor-none{cursor:none!important}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}.rotate-45{transform:rotate(45deg)}.rotate-90{transform:rotate(90deg)}.rotate-135{transform:rotate(135deg)}.rotate-180{transform:rotate(180deg)}.rotate-225{transform:rotate(225deg)}.rotate-270{transform:rotate(270deg)}.rotate-315{transform:rotate(315deg)}.flip-horizontal{transform:scaleX(-1)}.flip-vertical{transform:scaleY(-1)}.float-left{float:left}.float-right{float:right}.relative-position{position:relative}.fixed,.fixed-bottom,.fixed-bottom-left,.fixed-bottom-right,.fixed-center,.fixed-full,.fixed-left,.fixed-right,.fixed-top,.fixed-top-left,.fixed-top-right,.fullscreen{position:fixed}.absolute,.absolute-bottom,.absolute-bottom-left,.absolute-bottom-right,.absolute-center,.absolute-full,.absolute-left,.absolute-right,.absolute-top,.absolute-top-left,.absolute-top-right{position:absolute}.absolute-top,.fixed-top{left:0;right:0;top:0}.absolute-right,.fixed-right{bottom:0;right:0;top:0}.absolute-bottom,.fixed-bottom{bottom:0;left:0;right:0}.absolute-left,.fixed-left{bottom:0;left:0;top:0}.absolute-top-left,.fixed-top-left{left:0;top:0}.absolute-top-right,.fixed-top-right{right:0;top:0}.absolute-bottom-left,.fixed-bottom-left{bottom:0;left:0}.absolute-bottom-right,.fixed-bottom-right{bottom:0;right:0}.fullscreen{border-radius:0!important;max-height:100vh;max-width:100vw;z-index:6000}body.q-ios-padding .fullscreen{padding-bottom:env(safe-area-inset-bottom)!important;padding-top:env(safe-area-inset-top)!important}.absolute-full,.fixed-full,.fullscreen{bottom:0;left:0;right:0;top:0}.absolute-center,.fixed-center{left:50%;top:50%;transform:translate(-50%,-50%)}.vertical-top{vertical-align:top!important}.vertical-middle{vertical-align:middle!important}.vertical-bottom{vertical-align:bottom!important}.on-left{margin-right:12px}.on-right{margin-left:12px}.q-position-engine{margin-left:var(--q-pe-left,0)!important;margin-top:var(--q-pe-top,0)!important;visibility:collapse;will-change:auto}:root{--q-size-xs:0;--q-size-sm:600px;--q-size-md:1024px;--q-size-lg:1440px;--q-size-xl:1920px}.fit{width:100%!important}.fit,.full-height{height:100%!important}.full-width{margin-left:0!important;margin-right:0!important;width:100%!important}.window-height{height:100vh!important;margin-bottom:0!important;margin-top:0!important}.window-width{margin-left:0!important;margin-right:0!important;width:100vw!important}.block{display:block!important}.inline-block{display:inline-block!important}.q-pa-none{padding:0}.q-pl-none{padding-left:0}.q-pr-none{padding-right:0}.q-pt-none{padding-top:0}.q-pb-none{padding-bottom:0}.q-px-none{padding-left:0;padding-right:0}.q-py-none{padding-bottom:0;padding-top:0}.q-ma-none{margin:0}.q-ml-none{margin-left:0}.q-mr-none{margin-right:0}.q-mt-none{margin-top:0}.q-mb-none{margin-bottom:0}.q-mx-none{margin-left:0;margin-right:0}.q-my-none{margin-bottom:0;margin-top:0}.q-pa-xs{padding:4px}.q-pl-xs{padding-left:4px}.q-pr-xs{padding-right:4px}.q-pt-xs{padding-top:4px}.q-pb-xs{padding-bottom:4px}.q-px-xs{padding-left:4px;padding-right:4px}.q-py-xs{padding-bottom:4px;padding-top:4px}.q-ma-xs{margin:4px}.q-ml-xs{margin-left:4px}.q-mr-xs{margin-right:4px}.q-mt-xs{margin-top:4px}.q-mb-xs{margin-bottom:4px}.q-mx-xs{margin-left:4px;margin-right:4px}.q-my-xs{margin-bottom:4px;margin-top:4px}.q-pa-sm{padding:8px}.q-pl-sm{padding-left:8px}.q-pr-sm{padding-right:8px}.q-pt-sm{padding-top:8px}.q-pb-sm{padding-bottom:8px}.q-px-sm{padding-left:8px;padding-right:8px}.q-py-sm{padding-bottom:8px;padding-top:8px}.q-ma-sm{margin:8px}.q-ml-sm{margin-left:8px}.q-mr-sm{margin-right:8px}.q-mt-sm{margin-top:8px}.q-mb-sm{margin-bottom:8px}.q-mx-sm{margin-left:8px;margin-right:8px}.q-my-sm{margin-bottom:8px;margin-top:8px}.q-pa-md{padding:16px}.q-pl-md{padding-left:16px}.q-pr-md{padding-right:16px}.q-pt-md{padding-top:16px}.q-pb-md{padding-bottom:16px}.q-px-md{padding-left:16px;padding-right:16px}.q-py-md{padding-bottom:16px;padding-top:16px}.q-ma-md{margin:16px}.q-ml-md{margin-left:16px}.q-mr-md{margin-right:16px}.q-mt-md{margin-top:16px}.q-mb-md{margin-bottom:16px}.q-mx-md{margin-left:16px;margin-right:16px}.q-my-md{margin-bottom:16px;margin-top:16px}.q-pa-lg{padding:24px}.q-pl-lg{padding-left:24px}.q-pr-lg{padding-right:24px}.q-pt-lg{padding-top:24px}.q-pb-lg{padding-bottom:24px}.q-px-lg{padding-left:24px;padding-right:24px}.q-py-lg{padding-bottom:24px;padding-top:24px}.q-ma-lg{margin:24px}.q-ml-lg{margin-left:24px}.q-mr-lg{margin-right:24px}.q-mt-lg{margin-top:24px}.q-mb-lg{margin-bottom:24px}.q-mx-lg{margin-left:24px;margin-right:24px}.q-my-lg{margin-bottom:24px;margin-top:24px}.q-pa-xl{padding:48px}.q-pl-xl{padding-left:48px}.q-pr-xl{padding-right:48px}.q-pt-xl{padding-top:48px}.q-pb-xl{padding-bottom:48px}.q-px-xl{padding-left:48px;padding-right:48px}.q-py-xl{padding-bottom:48px;padding-top:48px}.q-ma-xl{margin:48px}.q-ml-xl{margin-left:48px}.q-mr-xl{margin-right:48px}.q-mt-xl{margin-top:48px}.q-mb-xl{margin-bottom:48px}.q-mx-xl{margin-left:48px;margin-right:48px}.q-my-xl{margin-bottom:48px;margin-top:48px}.q-mt-auto,.q-my-auto{margin-top:auto}.q-ml-auto{margin-left:auto}.q-mb-auto,.q-my-auto{margin-bottom:auto}.q-mr-auto,.q-mx-auto{margin-right:auto}.q-mx-auto{margin-left:auto}.q-touch{user-drag:none;-khtml-user-drag:none;-webkit-user-drag:none;-webkit-user-select:none;user-select:none}.q-touch-x{touch-action:pan-x}.q-touch-y{touch-action:pan-y}:root{--q-transition-duration:.3s}.q-transition--fade-enter-active,.q-transition--fade-leave-active,.q-transition--flip-enter-active,.q-transition--flip-leave-active,.q-transition--jump-down-enter-active,.q-transition--jump-down-leave-active,.q-transition--jump-left-enter-active,.q-transition--jump-left-leave-active,.q-transition--jump-right-enter-active,.q-transition--jump-right-leave-active,.q-transition--jump-up-enter-active,.q-transition--jump-up-leave-active,.q-transition--rotate-enter-active,.q-transition--rotate-leave-active,.q-transition--scale-enter-active,.q-transition--scale-leave-active,.q-transition--slide-down-enter-active,.q-transition--slide-down-leave-active,.q-transition--slide-left-enter-active,.q-transition--slide-left-leave-active,.q-transition--slide-right-enter-active,.q-transition--slide-right-leave-active,.q-transition--slide-up-enter-active,.q-transition--slide-up-leave-active{--q-transition-duration:.3s;--q-transition-easing:cubic-bezier(0.215,0.61,0.355,1)}.q-transition--fade-leave-active,.q-transition--flip-leave-active,.q-transition--jump-down-leave-active,.q-transition--jump-left-leave-active,.q-transition--jump-right-leave-active,.q-transition--jump-up-leave-active,.q-transition--rotate-leave-active,.q-transition--scale-leave-active,.q-transition--slide-down-leave-active,.q-transition--slide-left-leave-active,.q-transition--slide-right-leave-active,.q-transition--slide-up-leave-active{position:absolute}.q-transition--slide-down-enter-active,.q-transition--slide-down-leave-active,.q-transition--slide-left-enter-active,.q-transition--slide-left-leave-active,.q-transition--slide-right-enter-active,.q-transition--slide-right-leave-active,.q-transition--slide-up-enter-active,.q-transition--slide-up-leave-active{transition:transform var(--q-transition-duration) var(--q-transition-easing)}.q-transition--slide-right-enter-from{transform:translate3d(-100%,0,0)}.q-transition--slide-left-enter-from,.q-transition--slide-right-leave-to{transform:translate3d(100%,0,0)}.q-transition--slide-left-leave-to{transform:translate3d(-100%,0,0)}.q-transition--slide-up-enter-from{transform:translate3d(0,100%,0)}.q-transition--slide-down-enter-from,.q-transition--slide-up-leave-to{transform:translate3d(0,-100%,0)}.q-transition--slide-down-leave-to{transform:translate3d(0,100%,0)}.q-transition--jump-down-enter-active,.q-transition--jump-down-leave-active,.q-transition--jump-left-enter-active,.q-transition--jump-left-leave-active,.q-transition--jump-right-enter-active,.q-transition--jump-right-leave-active,.q-transition--jump-up-enter-active,.q-transition--jump-up-leave-active{transition:opacity var(--q-transition-duration),transform var(--q-transition-duration)}.q-transition--jump-down-enter-from,.q-transition--jump-down-leave-to,.q-transition--jump-left-enter-from,.q-transition--jump-left-leave-to,.q-transition--jump-right-enter-from,.q-transition--jump-right-leave-to,.q-transition--jump-up-enter-from,.q-transition--jump-up-leave-to{opacity:0}.q-transition--jump-right-enter-from{transform:translate3d(-15px,0,0)}.q-transition--jump-left-enter-from,.q-transition--jump-right-leave-to{transform:translate3d(15px,0,0)}.q-transition--jump-left-leave-to{transform:translateX(-15px)}.q-transition--jump-up-enter-from{transform:translate3d(0,15px,0)}.q-transition--jump-down-enter-from,.q-transition--jump-up-leave-to{transform:translate3d(0,-15px,0)}.q-transition--jump-down-leave-to{transform:translate3d(0,15px,0)}.q-transition--fade-enter-active,.q-transition--fade-leave-active{transition:opacity var(--q-transition-duration) ease-out}.q-transition--fade-enter-from,.q-transition--fade-leave-to{opacity:0}.q-transition--scale-enter-active,.q-transition--scale-leave-active{transition:opacity var(--q-transition-duration),transform var(--q-transition-duration) var(--q-transition-easing)}.q-transition--scale-enter-from,.q-transition--scale-leave-to{opacity:0;transform:scale3d(0,0,1)}.q-transition--rotate-enter-active,.q-transition--rotate-leave-active{transform-style:preserve-3d;transition:opacity var(--q-transition-duration),transform var(--q-transition-duration) var(--q-transition-easing)}.q-transition--rotate-enter-from,.q-transition--rotate-leave-to{opacity:0;transform:scale3d(0,0,1) rotate(90deg)}.q-transition--flip-down-enter-active,.q-transition--flip-down-leave-active,.q-transition--flip-left-enter-active,.q-transition--flip-left-leave-active,.q-transition--flip-right-enter-active,.q-transition--flip-right-leave-active,.q-transition--flip-up-enter-active,.q-transition--flip-up-leave-active{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform var(--q-transition-duration)}.q-transition--flip-down-enter-to,.q-transition--flip-down-leave-from,.q-transition--flip-left-enter-to,.q-transition--flip-left-leave-from,.q-transition--flip-right-enter-to,.q-transition--flip-right-leave-from,.q-transition--flip-up-enter-to,.q-transition--flip-up-leave-from{transform:perspective(400px) rotate3d(1,1,0,0deg)}.q-transition--flip-right-enter-from{transform:perspective(400px) rotateY(-180deg)}.q-transition--flip-left-enter-from,.q-transition--flip-right-leave-to{transform:perspective(400px) rotateY(180deg)}.q-transition--flip-left-leave-to{transform:perspective(400px) rotateY(-180deg)}.q-transition--flip-up-enter-from{transform:perspective(400px) rotateX(-180deg)}.q-transition--flip-down-enter-from,.q-transition--flip-up-leave-to{transform:perspective(400px) rotateX(180deg)}.q-transition--flip-down-leave-to{transform:perspective(400px) rotateX(-180deg)}body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;font-family:Roboto,-apple-system,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.5;min-height:100%;min-width:100px}h1{font-size:6rem;letter-spacing:-.01562em;line-height:6rem}h1,h2{font-weight:300}h2{font-size:3.75rem;letter-spacing:-.00833em;line-height:3.75rem}h3{font-size:3rem;letter-spacing:normal;line-height:3.125rem}h3,h4{font-weight:400}h4{font-size:2.125rem;letter-spacing:.00735em;line-height:2.5rem}h5{font-size:1.5rem;font-weight:400;letter-spacing:normal}h5,h6{line-height:2rem}h6{font-size:1.25rem;font-weight:500;letter-spacing:.0125em}p{margin:0 0 16px}.text-h1{font-size:6rem;font-weight:300;letter-spacing:-.01562em;line-height:6rem}.text-h2{font-size:3.75rem;font-weight:300;letter-spacing:-.00833em;line-height:3.75rem}.text-h3{font-size:3rem;font-weight:400;letter-spacing:normal;line-height:3.125rem}.text-h4{font-size:2.125rem;font-weight:400;letter-spacing:.00735em;line-height:2.5rem}.text-h5{font-size:1.5rem;font-weight:400;letter-spacing:normal;line-height:2rem}.text-h6{font-size:1.25rem;font-weight:500;letter-spacing:.0125em;line-height:2rem}.text-subtitle1{font-size:1rem;font-weight:400;letter-spacing:.00937em;line-height:1.75rem}.text-subtitle2{font-size:.875rem;font-weight:500;letter-spacing:.00714em;line-height:1.375rem}.text-body1{font-size:1rem;font-weight:400;letter-spacing:.03125em;line-height:1.5rem}.text-body2{font-size:.875rem;font-weight:400;letter-spacing:.01786em;line-height:1.25rem}.text-overline{font-size:.75rem;font-weight:500;letter-spacing:.16667em;line-height:2rem}.text-caption{font-size:.75rem;font-weight:400;letter-spacing:.03333em;line-height:1.25rem}.text-uppercase{text-transform:uppercase}.text-lowercase{text-transform:lowercase}.text-capitalize{text-transform:capitalize}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-justify{-webkit-hyphens:auto;hyphens:auto;text-align:justify}.text-italic{font-style:italic}.text-bold{font-weight:700}.text-no-wrap{white-space:nowrap}.text-strike{text-decoration:line-through}.text-weight-thin{font-weight:100}.text-weight-light{font-weight:300}.text-weight-regular{font-weight:400}.text-weight-medium{font-weight:500}.text-weight-bold{font-weight:700}.text-weight-bolder{font-weight:900}small{font-size:80%}big{font-size:170%}sub{bottom:-.25em}sup{top:-.5em}.no-margin{margin:0!important}.no-padding{padding:0!important}.no-border{border:0!important}.no-border-radius{border-radius:0!important}.no-box-shadow{box-shadow:none!important}.no-outline{outline:0!important}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ellipsis-2-lines,.ellipsis-3-lines{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ellipsis-2-lines{-webkit-line-clamp:2}.ellipsis-3-lines{-webkit-line-clamp:3}.readonly{cursor:default!important}.disabled,.disabled *,[disabled],[disabled] *{cursor:not-allowed!important;outline:0!important}.disabled,[disabled]{opacity:.6!important}.hidden{display:none!important}.invisible,.invisible *{animation:none!important;transition:none!important;visibility:hidden!important}.transparent{background:transparent!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-hidden-y{overflow-y:hidden!important}.hide-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.hide-scrollbar::-webkit-scrollbar{display:none;height:0;width:0}.dimmed:after,.light-dimmed:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0}.dimmed:after{background:rgba(0,0,0,.4)!important}.light-dimmed:after{background:hsla(0,0%,100%,.6)!important}.z-top{z-index:7000!important}.z-max{z-index:9998!important}body.capacitor .capacitor-hide,body.cordova .cordova-hide,body.desktop .desktop-hide,body.electron .electron-hide,body.mobile .mobile-hide,body.native-mobile .native-mobile-hide,body.platform-android .platform-android-hide,body.platform-ios .platform-ios-hide,body.touch .touch-hide,body.within-iframe .within-iframe-hide,body:not(.capacitor) .capacitor-only,body:not(.cordova) .cordova-only,body:not(.desktop) .desktop-only,body:not(.electron) .electron-only,body:not(.mobile) .mobile-only,body:not(.native-mobile) .native-mobile-only,body:not(.platform-android) .platform-android-only,body:not(.platform-ios) .platform-ios-only,body:not(.touch) .touch-only,body:not(.within-iframe) .within-iframe-only{display:none!important}@media (orientation:portrait){.orientation-landscape{display:none!important}}@media (orientation:landscape){.orientation-portrait{display:none!important}}@media screen{.print-only{display:none!important}}@media print{.print-hide{display:none!important}}@media (max-width:599.98px){.gt-lg,.gt-md,.gt-sm,.gt-xs,.lg,.md,.sm,.xl,.xs-hide{display:none!important}}@media (min-width:600px) and (max-width:1023.98px){.gt-lg,.gt-md,.gt-sm,.lg,.lt-sm,.md,.sm-hide,.xl,.xs{display:none!important}}@media (min-width:1024px) and (max-width:1439.98px){.gt-lg,.gt-md,.lg,.lt-md,.lt-sm,.md-hide,.sm,.xl,.xs{display:none!important}}@media (min-width:1440px) and (max-width:1919.98px){.gt-lg,.lg-hide,.lt-lg,.lt-md,.lt-sm,.md,.sm,.xl,.xs{display:none!important}}@media (min-width:1920px){.lg,.lt-lg,.lt-md,.lt-sm,.lt-xl,.md,.sm,.xl-hide,.xs{display:none!important}}.q-focus-helper,.q-focusable,.q-hoverable,.q-manual-focusable{outline:0}body.desktop .q-focus-helper{border-radius:inherit;height:100%;left:0;opacity:0;pointer-events:none;position:absolute;top:0;transition:background-color .3s cubic-bezier(.25,.8,.5,1),opacity .4s cubic-bezier(.25,.8,.5,1);width:100%}body.desktop .q-focus-helper:after,body.desktop .q-focus-helper:before{border-radius:inherit;content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:background-color .3s cubic-bezier(.25,.8,.5,1),opacity .6s cubic-bezier(.25,.8,.5,1);width:100%}body.desktop .q-focus-helper:before{background:#000}body.desktop .q-focus-helper:after{background:#fff}body.desktop .q-focus-helper--rounded{border-radius:4px}body.desktop .q-focus-helper--round{border-radius:50%}body.desktop .q-focusable:focus>.q-focus-helper,body.desktop .q-hoverable:hover>.q-focus-helper,body.desktop .q-manual-focusable--focused>.q-focus-helper{background:currentColor;opacity:.15}body.desktop .q-focusable:focus>.q-focus-helper:before,body.desktop .q-hoverable:hover>.q-focus-helper:before,body.desktop .q-manual-focusable--focused>.q-focus-helper:before{opacity:.1}body.desktop .q-focusable:focus>.q-focus-helper:after,body.desktop .q-hoverable:hover>.q-focus-helper:after,body.desktop .q-manual-focusable--focused>.q-focus-helper:after{opacity:.4}body.desktop .q-focusable:focus>.q-focus-helper,body.desktop .q-manual-focusable--focused>.q-focus-helper{opacity:.22}body.body--dark{background:var(--q-dark-page);color:#fff}.q-dark{background:var(--q-dark);color:#fff}.monaco-editor{--monaco-monospace-font:"SF Mono",Monaco,Menlo,Consolas,"Ubuntu Mono","Liberation Mono","DejaVu Sans Mono","Courier New",monospace;font-family:-apple-system,BlinkMacSystemFont,Segoe WPC,Segoe UI,HelveticaNeue-Light,system-ui,Ubuntu,Droid Sans,sans-serif}.monaco-editor.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.hc-light .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-hover p{margin:0}.monaco-aria-container{clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;left:-999em;margin:-1px;overflow:hidden;padding:0;position:absolute!important;position:absolute;top:0;width:1px}::-ms-clear{display:none}.monaco-editor .editor-widget input{color:inherit}.monaco-editor{-webkit-text-size-adjust:100%;color:var(--vscode-editor-foreground);overflow:visible;position:relative}.monaco-editor,.monaco-editor-background{background-color:var(--vscode-editor-background)}.monaco-editor .rangeHighlight{background-color:var(--vscode-editor-rangeHighlightBackground);border:1px solid var(--vscode-editor-rangeHighlightBorder);box-sizing:border-box}.monaco-editor.hc-black .rangeHighlight,.monaco-editor.hc-light .rangeHighlight{border-style:dotted}.monaco-editor .symbolHighlight{background-color:var(--vscode-editor-symbolHighlightBackground);border:1px solid var(--vscode-editor-symbolHighlightBorder);box-sizing:border-box}.monaco-editor.hc-black .symbolHighlight,.monaco-editor.hc-light .symbolHighlight{border-style:dotted}.monaco-editor .overflow-guard{overflow:hidden;position:relative}.monaco-editor .view-overlays{position:absolute;top:0}.monaco-editor .squiggly-error{border-bottom:4px double var(--vscode-editorError-border)}.monaco-editor .squiggly-error:before{background:var(--vscode-editorError-background);content:"";display:block;height:100%;width:100%}.monaco-editor .squiggly-warning{border-bottom:4px double var(--vscode-editorWarning-border)}.monaco-editor .squiggly-warning:before{background:var(--vscode-editorWarning-background);content:"";display:block;height:100%;width:100%}.monaco-editor .squiggly-info{border-bottom:4px double var(--vscode-editorInfo-border)}.monaco-editor .squiggly-info:before{background:var(--vscode-editorInfo-background);content:"";display:block;height:100%;width:100%}.monaco-editor .squiggly-hint{border-bottom:2px dotted var(--vscode-editorHint-border)}.monaco-editor.showUnused .squiggly-unnecessary{border-bottom:2px dashed var(--vscode-editorUnnecessaryCode-border)}.monaco-editor.showDeprecated .squiggly-inline-deprecated{text-decoration:line-through;text-decoration-color:var(--vscode-editor-foreground,inherit)}.monaco-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.monaco-scrollable-element>.visible{background:transparent;opacity:1;transition:opacity .1s linear;z-index:11}.monaco-scrollable-element>.invisible{opacity:0;pointer-events:none}.monaco-scrollable-element>.invisible.fade{transition:opacity .8s linear}.monaco-scrollable-element>.shadow{display:none;position:absolute}.monaco-scrollable-element>.shadow.top{box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset;display:block;height:3px;left:3px;top:0;width:100%}.monaco-scrollable-element>.shadow.left{box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset;display:block;height:100%;left:0;top:3px;width:3px}.monaco-scrollable-element>.shadow.top-left-corner{display:block;height:3px;left:0;top:0;width:3px}.monaco-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset}.monaco-scrollable-element>.scrollbar>.slider{background:var(--vscode-scrollbarSlider-background)}.monaco-scrollable-element>.scrollbar>.slider:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-scrollable-element>.scrollbar>.slider.active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-editor .inputarea{background-color:transparent;border:none;color:transparent;margin:0;min-height:0;min-width:0;outline:none!important;overflow:hidden;padding:0;position:absolute;resize:none;z-index:-10}.monaco-editor .inputarea.ime-input{caret-color:var(--vscode-editorCursor-foreground);color:var(--vscode-editor-foreground);z-index:10}.monaco-editor .margin-view-overlays .line-numbers{box-sizing:border-box;cursor:default;display:inline-block;font-variant-numeric:tabular-nums;height:100%;position:absolute;text-align:right;vertical-align:middle}.monaco-editor .relative-current-line-number{display:inline-block;text-align:left;width:100%}.monaco-editor .margin-view-overlays .line-numbers.lh-odd{margin-top:1px}.monaco-editor .line-numbers{color:var(--vscode-editorLineNumber-foreground)}.monaco-editor .line-numbers.active-line-number{color:var(--vscode-editorLineNumber-activeForeground)}.monaco-editor .margin{background-color:var(--vscode-editorGutter-background)}.monaco-mouse-cursor-text{cursor:text}.monaco-editor .margin-view-overlays .current-line,.monaco-editor .view-overlays .current-line{box-sizing:border-box;display:block;left:0;position:absolute;top:0}.monaco-editor .margin-view-overlays .current-line.current-line-margin.current-line-margin-both{border-right:0}.monaco-editor .lines-content .cdr{position:absolute}.monaco-editor .lines-content .core-guide{box-sizing:border-box;position:absolute}.mtkcontrol{background:#960000!important;color:#fff!important}.mtkoverflow{background-color:var(--vscode-button-background,var(--vscode-editor-background));border-color:var(--vscode-contrastBorder);border-radius:2px;border-style:solid;border-width:1px;color:var(--vscode-button-foreground,var(--vscode-editor-foreground));cursor:pointer;padding:4px}.mtkoverflow:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-editor.no-user-select .lines-content,.monaco-editor.no-user-select .view-line,.monaco-editor.no-user-select .view-lines{-moz-user-select:none;user-select:none;-webkit-user-select:none}.monaco-editor.mac .lines-content:hover,.monaco-editor.mac .view-line:hover,.monaco-editor.mac .view-lines:hover{-moz-user-select:text;user-select:text;-webkit-user-select:text;-ms-user-select:text}.monaco-editor.enable-user-select{-moz-user-select:initial;user-select:auto;-webkit-user-select:initial}.monaco-editor .view-lines{white-space:nowrap}.monaco-editor .view-line{position:absolute;width:100%}.monaco-editor .mtkw,.monaco-editor .mtkz{color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .mtkz{display:inline-block}.monaco-editor .lines-decorations{background:#fff;position:absolute;top:0}.monaco-editor .margin-view-overlays .cldr{height:100%;position:absolute}.monaco-editor .glyph-margin{position:absolute;top:0}.monaco-editor .glyph-margin-widgets .cgmr{align-items:center;display:flex;justify-content:center;position:absolute}.monaco-editor .glyph-margin-widgets .cgmr.codicon-modifier-spin:before{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.monaco-editor .margin-view-overlays .cmdr{height:100%;left:0;position:absolute;width:100%}.monaco-editor .minimap.slider-mouseover .minimap-slider{opacity:0;transition:opacity .1s linear}.monaco-editor .minimap.slider-mouseover .minimap-slider.active,.monaco-editor .minimap.slider-mouseover:hover .minimap-slider{opacity:1}.monaco-editor .minimap-slider .minimap-slider-horizontal{background:var(--vscode-minimapSlider-background)}.monaco-editor .minimap-slider:hover .minimap-slider-horizontal{background:var(--vscode-minimapSlider-hoverBackground)}.monaco-editor .minimap-slider.active .minimap-slider-horizontal{background:var(--vscode-minimapSlider-activeBackground)}.monaco-editor .minimap-shadow-visible{box-shadow:var(--vscode-scrollbar-shadow) -6px 0 6px -6px inset}.monaco-editor .minimap-shadow-hidden{position:absolute;width:0}.monaco-editor .minimap-shadow-visible{left:-6px;position:absolute;width:6px}.monaco-editor.no-minimap-shadow .minimap-shadow-visible{left:-1px;position:absolute;width:1px}.minimap.autohide{opacity:0;transition:opacity .5s}.minimap.autohide:hover{opacity:1}.monaco-editor .minimap{z-index:5}.monaco-editor .overlayWidgets{left:0;position:absolute;top:0}.monaco-editor .view-ruler{box-shadow:1px 0 0 0 var(--vscode-editorRuler-foreground) inset;position:absolute;top:0}.monaco-editor .scroll-decoration{box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset;height:6px;left:0;position:absolute;top:0}.monaco-editor .lines-content .cslr{position:absolute}.monaco-editor .focused .selected-text{background-color:var(--vscode-editor-selectionBackground)}.monaco-editor .selected-text{background-color:var(--vscode-editor-inactiveSelectionBackground)}.monaco-editor .top-left-radius{border-top-left-radius:3px}.monaco-editor .bottom-left-radius{border-bottom-left-radius:3px}.monaco-editor .top-right-radius{border-top-right-radius:3px}.monaco-editor .bottom-right-radius{border-bottom-right-radius:3px}.monaco-editor.hc-black .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-black .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-black .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-black .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor.hc-light .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-light .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-light .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-light .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor .cursors-layer{position:absolute;top:0}.monaco-editor .cursors-layer>.cursor{box-sizing:border-box;overflow:hidden;position:absolute}.monaco-editor .cursors-layer.cursor-smooth-caret-animation>.cursor{transition:all 80ms}.monaco-editor .cursors-layer.cursor-block-outline-style>.cursor{background:transparent!important;border-style:solid;border-width:1px}.monaco-editor .cursors-layer.cursor-underline-style>.cursor{background:transparent!important;border-bottom-style:solid;border-bottom-width:2px}.monaco-editor .cursors-layer.cursor-underline-thin-style>.cursor{background:transparent!important;border-bottom-style:solid;border-bottom-width:1px}@keyframes monaco-cursor-smooth{0%,20%{opacity:1}60%,to{opacity:0}}@keyframes monaco-cursor-phase{0%,20%{opacity:1}90%,to{opacity:0}}@keyframes monaco-cursor-expand{0%,20%{transform:scaleY(1)}80%,to{transform:scaleY(0)}}.cursor-smooth{animation:monaco-cursor-smooth .5s ease-in-out 0s 20 alternate}.cursor-phase{animation:monaco-cursor-phase .5s ease-in-out 0s 20 alternate}.cursor-expand>.cursor{animation:monaco-cursor-expand .5s ease-in-out 0s 20 alternate}.monaco-editor .blockDecorations-container{pointer-events:none;position:absolute;top:0}.monaco-editor .blockDecorations-block{box-sizing:border-box;position:absolute}.monaco-editor .mwh{color:var(--vscode-editorWhitespace-foreground)!important;position:absolute}.context-view{position:absolute}.context-view.fixed{all:initial;color:inherit;font-family:inherit;font-size:13px;position:fixed}.monaco-list{height:100%;position:relative;white-space:nowrap;width:100%}.monaco-list.mouse-support{-moz-user-select:none;user-select:none;-webkit-user-select:none}.monaco-list>.monaco-scrollable-element{height:100%}.monaco-list-rows{height:100%;position:relative;width:100%}.monaco-list.horizontal-scrolling .monaco-list-rows{min-width:100%;width:auto}.monaco-list-row{box-sizing:border-box;overflow:hidden;position:absolute;width:100%}.monaco-list.mouse-support .monaco-list-row{cursor:pointer;touch-action:none}.monaco-list .monaco-scrollable-element>.scrollbar.vertical,.monaco-pane-view>.monaco-split-view2.vertical>.monaco-scrollable-element>.scrollbar.vertical{z-index:14}.monaco-list-row.scrolling{display:none!important}.monaco-list.element-focused,.monaco-list.selection-multiple,.monaco-list.selection-single{outline:0!important}.monaco-drag-image{border-radius:10px;display:inline-block;font-size:12px;padding:1px 7px;position:absolute;z-index:1000}.monaco-list-type-filter-message{box-sizing:border-box;height:100%;left:0;opacity:.7;padding:40px 1em 1em;pointer-events:none;position:absolute;text-align:center;top:0;white-space:normal;width:100%}.monaco-list-type-filter-message:empty{display:none}.monaco-select-box-dropdown-padding{--dropdown-padding-top:1px;--dropdown-padding-bottom:1px}.hc-black .monaco-select-box-dropdown-padding,.hc-light .monaco-select-box-dropdown-padding{--dropdown-padding-top:3px;--dropdown-padding-bottom:4px}.monaco-select-box-dropdown-container{box-sizing:border-box;display:none}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown *{margin:0}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown a:focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown code{font-family:var(--monaco-monospace-font);line-height:15px}.monaco-select-box-dropdown-container.visible{border-bottom-left-radius:3px;border-bottom-right-radius:3px;display:flex;flex-direction:column;overflow:hidden;text-align:left;width:1px}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container{align-self:flex-start;box-sizing:border-box;flex:0 0 auto;overflow:hidden;padding-bottom:var(--dropdown-padding-bottom);padding-left:1px;padding-right:1px;padding-top:var(--dropdown-padding-top);width:100%}.monaco-select-box-dropdown-container>.select-box-details-pane{padding:5px}.hc-black .monaco-select-box-dropdown-container>.select-box-dropdown-list-container{padding-bottom:var(--dropdown-padding-bottom);padding-top:var(--dropdown-padding-top)}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row{cursor:pointer}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-text{float:left;overflow:hidden;padding-left:3.5px;text-overflow:ellipsis;white-space:nowrap}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-detail{float:left;opacity:.7;overflow:hidden;padding-left:3.5px;text-overflow:ellipsis;white-space:nowrap}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-decorator-right{float:right;overflow:hidden;padding-right:10px;text-overflow:ellipsis;white-space:nowrap}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.visually-hidden{height:1px;left:-10000px;overflow:hidden;position:absolute;top:auto;width:1px}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control{align-self:flex-start;flex:1 1 auto;opacity:0}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div{max-height:0;overflow:hidden}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div>.option-text-width-control{padding-left:4px;padding-right:8px;white-space:nowrap}.monaco-select-box{border-radius:2px;cursor:pointer;width:100%}.monaco-select-box-dropdown-container{font-size:13px;font-weight:400;text-transform:none}.monaco-action-bar .action-item.select-container{cursor:default}.monaco-action-bar .action-item .monaco-select-box{cursor:pointer;min-height:18px;min-width:100px;padding:2px 23px 2px 8px}.mac .monaco-action-bar .action-item .monaco-select-box{border-radius:5px;font-size:11px}.monaco-action-bar{height:100%;white-space:nowrap}.monaco-action-bar .actions-container{align-items:center;display:flex;height:100%;margin:0 auto;padding:0;width:100%}.monaco-action-bar.vertical .actions-container{display:inline-block}.monaco-action-bar .action-item{align-items:center;cursor:pointer;display:block;justify-content:center;position:relative}.monaco-action-bar .action-item.disabled{cursor:default}.monaco-action-bar .action-item .codicon,.monaco-action-bar .action-item .icon{display:block}.monaco-action-bar .action-item .codicon{align-items:center;display:flex;height:16px;width:16px}.monaco-action-bar .action-label{border-radius:5px;display:flex;font-size:11px;padding:3px}.monaco-action-bar .action-item.disabled .action-label,.monaco-action-bar .action-item.disabled .action-label:before,.monaco-action-bar .action-item.disabled .action-label:hover{opacity:.6}.monaco-action-bar.vertical{text-align:left}.monaco-action-bar.vertical .action-item{display:block}.monaco-action-bar.vertical .action-label.separator{border-bottom:1px solid #bbb;display:block;margin-left:.8em;margin-right:.8em;padding-top:1px}.monaco-action-bar .action-item .action-label.separator{background-color:#bbb;cursor:default;height:16px;margin:5px 4px!important;min-width:1px;padding:0;width:1px}.secondary-actions .monaco-action-bar .action-label{margin-left:6px}.monaco-action-bar .action-item.select-container{align-items:center;display:flex;flex:1;justify-content:center;margin-right:10px;max-width:170px;min-width:60px;overflow:hidden}.monaco-action-bar .action-item.action-dropdown-item{display:flex}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator{align-items:center;cursor:default;display:flex}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator>div{width:1px}.monaco-dropdown{height:100%;padding:0}.monaco-dropdown>.dropdown-label{align-items:center;cursor:pointer;display:flex;height:100%;justify-content:center}.monaco-dropdown>.dropdown-label>.action-label.disabled{cursor:default}.monaco-dropdown-with-primary{border-radius:5px;display:flex!important;flex-direction:row}.monaco-dropdown-with-primary>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;line-height:16px;margin-left:-3px;padding-left:0;padding-right:0}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{background-position:50%;background-repeat:no-repeat;background-size:16px;display:block}.monaco-action-bar .action-item.menu-entry .action-label.icon{background-position:50%;background-repeat:no-repeat;background-size:16px;height:16px;width:16px}.monaco-dropdown-with-default{border-radius:5px;display:flex!important;flex-direction:row}.monaco-dropdown-with-default>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-default>.action-container.menu-entry>.action-label.icon{background-position:50%;background-repeat:no-repeat;background-size:16px;height:16px;width:16px}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;line-height:16px;margin-left:-3px;padding-left:0;padding-right:0}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{background-position:50%;background-repeat:no-repeat;background-size:16px;display:block}.quick-input-widget{font-size:13px}.quick-input-widget .monaco-highlighted-label .highlight{color:#0066bf}.vs .quick-input-widget .monaco-list-row.focused .monaco-highlighted-label .highlight{color:#9dddff}.vs-dark .quick-input-widget .monaco-highlighted-label .highlight{color:#0097fb}.hc-black .quick-input-widget .monaco-highlighted-label .highlight{color:#f38518}.hc-light .quick-input-widget .monaco-highlighted-label .highlight{color:#0f4a85}.monaco-keybinding>.monaco-keybinding-key{background-color:hsla(0,0%,87%,.4);border:1px solid hsla(0,0%,80%,.4);border-bottom-color:hsla(0,0%,73%,.4);box-shadow:inset 0 -1px 0 hsla(0,0%,73%,.4);color:#555}.hc-black .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:1px solid #6fc3df;box-shadow:none;color:#fff}.hc-light .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:1px solid #0f4a85;box-shadow:none;color:#292929}.vs-dark .monaco-keybinding>.monaco-keybinding-key{background-color:hsla(0,0%,50%,.17);border:1px solid rgba(51,51,51,.6);border-bottom-color:rgba(68,68,68,.6);box-shadow:inset 0 -1px 0 rgba(68,68,68,.6);color:#ccc}:root{--vscode-sash-size:4px;--vscode-sash-hover-size:4px}.monaco-sash{position:absolute;touch-action:none;z-index:35}.monaco-sash.disabled{pointer-events:none}.monaco-sash.mac.vertical{cursor:col-resize}.monaco-sash.vertical.minimum{cursor:e-resize}.monaco-sash.vertical.maximum{cursor:w-resize}.monaco-sash.mac.horizontal{cursor:row-resize}.monaco-sash.horizontal.minimum{cursor:s-resize}.monaco-sash.horizontal.maximum{cursor:n-resize}.monaco-sash.disabled{cursor:default!important;pointer-events:none!important}.monaco-sash.vertical{cursor:ew-resize;height:100%;top:0;width:var(--vscode-sash-size)}.monaco-sash.horizontal{cursor:ns-resize;height:var(--vscode-sash-size);left:0;width:100%}.monaco-sash:not(.disabled)>.orthogonal-drag-handle{content:" ";cursor:all-scroll;display:block;height:calc(var(--vscode-sash-size)*2);position:absolute;width:calc(var(--vscode-sash-size)*2);z-index:100}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.start,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.end{cursor:nwse-resize}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.end,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.start{cursor:nesw-resize}.monaco-sash.vertical>.orthogonal-drag-handle.start{left:calc(var(--vscode-sash-size)*-.5);top:calc(var(--vscode-sash-size)*-1)}.monaco-sash.vertical>.orthogonal-drag-handle.end{bottom:calc(var(--vscode-sash-size)*-1);left:calc(var(--vscode-sash-size)*-.5)}.monaco-sash.horizontal>.orthogonal-drag-handle.start{left:calc(var(--vscode-sash-size)*-1);top:calc(var(--vscode-sash-size)*-.5)}.monaco-sash.horizontal>.orthogonal-drag-handle.end{right:calc(var(--vscode-sash-size)*-1);top:calc(var(--vscode-sash-size)*-.5)}.monaco-sash:before{background:transparent;content:"";height:100%;pointer-events:none;position:absolute;width:100%}.monaco-workbench:not(.reduce-motion) .monaco-sash:before{transition:background-color .1s ease-out}.monaco-sash.active:before,.monaco-sash.hover:before{background:var(--vscode-sash-hoverBorder)}.monaco-sash.vertical:before{left:calc(50% - var(--vscode-sash-hover-size)/2);width:var(--vscode-sash-hover-size)}.monaco-sash.horizontal:before{height:var(--vscode-sash-hover-size);top:calc(50% - var(--vscode-sash-hover-size)/2)}.pointer-events-disabled{pointer-events:none!important}.monaco-sash.debug{background:cyan}.monaco-sash.debug.disabled{background:rgba(0,255,255,.2)}.monaco-sash.debug:not(.disabled)>.orthogonal-drag-handle{background:red}.monaco-split-view2{height:100%;position:relative;width:100%}.monaco-split-view2>.sash-container{height:100%;pointer-events:none;position:absolute;width:100%}.monaco-split-view2>.sash-container>.monaco-sash{pointer-events:auto}.monaco-split-view2>.monaco-scrollable-element{height:100%;width:100%}.monaco-split-view2>.monaco-scrollable-element>.split-view-container{height:100%;position:relative;white-space:nowrap;width:100%}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view{position:absolute;white-space:normal}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view:not(.visible){display:none}.monaco-split-view2.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view{width:100%}.monaco-split-view2.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view{height:100%}.monaco-split-view2.separator-border>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{background-color:var(--separator-border);content:" ";left:0;pointer-events:none;position:absolute;top:0;z-index:5}.monaco-split-view2.separator-border.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:100%;width:1px}.monaco-split-view2.separator-border.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:1px;width:100%}.monaco-table{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;white-space:nowrap;width:100%}.monaco-table>.monaco-split-view2{border-bottom:1px solid transparent}.monaco-table>.monaco-list{flex:1}.monaco-table-tr{display:flex;height:100%}.monaco-table-th{font-weight:700;height:100%;overflow:hidden;text-overflow:ellipsis;width:100%}.monaco-table-td,.monaco-table-th{box-sizing:border-box;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{border-left:1px solid transparent;content:"";left:calc(var(--vscode-sash-size)/2);position:absolute;width:0}.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2,.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{transition:border-color .2s ease-out}.monaco-custom-toggle{border:1px solid transparent;border-radius:3px;box-sizing:border-box;cursor:pointer;float:left;height:20px;margin-left:2px;overflow:hidden;padding:1px;-moz-user-select:none;user-select:none;-webkit-user-select:none;width:20px}.monaco-custom-toggle:hover{background-color:var(--vscode-inputOption-hoverBackground)}.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle:hover{border:1px dashed var(--vscode-focusBorder)}.hc-black .monaco-custom-toggle,.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle,.hc-light .monaco-custom-toggle:hover{background:none}.monaco-custom-toggle.monaco-checkbox{background-size:16px!important;border:1px solid transparent;border-radius:3px;height:18px;margin-left:0;margin-right:9px;opacity:1;padding:0;width:18px}.monaco-action-bar .checkbox-action-item{align-items:center;display:flex}.monaco-action-bar .checkbox-action-item>.monaco-custom-toggle.monaco-checkbox{margin-right:4px}.monaco-action-bar .checkbox-action-item>.checkbox-label{font-size:12px}.monaco-custom-toggle.monaco-checkbox:not(.checked):before{visibility:hidden}.monaco-inputbox{border-radius:2px;box-sizing:border-box;display:block;font-size:inherit;padding:0;position:relative}.monaco-inputbox>.ibwrapper>.input,.monaco-inputbox>.ibwrapper>.mirror{padding:4px 6px}.monaco-inputbox>.ibwrapper{height:100%;position:relative;width:100%}.monaco-inputbox>.ibwrapper>.input{border:none;box-sizing:border-box;color:inherit;display:inline-block;font-family:inherit;font-size:inherit;height:100%;line-height:inherit;resize:none;width:100%}.monaco-inputbox>.ibwrapper>input{text-overflow:ellipsis}.monaco-inputbox>.ibwrapper>textarea.input{display:block;outline:none;scrollbar-width:none}.monaco-inputbox>.ibwrapper>textarea.input::-webkit-scrollbar{display:none}.monaco-inputbox>.ibwrapper>textarea.input.empty{white-space:nowrap}.monaco-inputbox>.ibwrapper>.mirror{word-wrap:break-word;box-sizing:border-box;display:inline-block;left:0;position:absolute;top:0;visibility:hidden;white-space:pre-wrap;width:100%}.monaco-inputbox-container{text-align:right}.monaco-inputbox-container .monaco-inputbox-message{word-wrap:break-word;box-sizing:border-box;display:inline-block;font-size:12px;line-height:17px;margin-top:-1px;overflow:hidden;padding:.4em;text-align:left;width:100%}.monaco-inputbox .monaco-action-bar{position:absolute;right:2px;top:4px}.monaco-inputbox .monaco-action-bar .action-item{margin-left:2px}.monaco-inputbox .monaco-action-bar .action-item .codicon{background-repeat:no-repeat;height:16px;width:16px}.monaco-findInput{position:relative}.monaco-findInput .monaco-inputbox{font-size:13px;width:100%}.monaco-findInput>.controls{position:absolute;right:2px;top:3px}.vs .monaco-findInput.disabled{background-color:#e1e1e1}.vs-dark .monaco-findInput.disabled{background-color:#333}.hc-light .monaco-findInput.highlight-0 .controls,.monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-0 .1s linear 0s}.hc-light .monaco-findInput.highlight-1 .controls,.monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-1 .1s linear 0s}.hc-black .monaco-findInput.highlight-0 .controls,.vs-dark .monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-dark-0 .1s linear 0s}.hc-black .monaco-findInput.highlight-1 .controls,.vs-dark .monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-dark-1 .1s linear 0s}@keyframes monaco-findInput-highlight-0{0%{background:rgba(253,255,0,.8)}to{background:transparent}}@keyframes monaco-findInput-highlight-1{0%{background:rgba(253,255,0,.8)}99%{background:transparent}}@keyframes monaco-findInput-highlight-dark-0{0%{background:hsla(0,0%,100%,.44)}to{background:transparent}}@keyframes monaco-findInput-highlight-dark-1{0%{background:hsla(0,0%,100%,.44)}99%{background:transparent}}.monaco-tl-row{align-items:center;display:flex;height:100%;position:relative}.monaco-tl-row.disabled{cursor:default}.monaco-tl-indent{height:100%;left:16px;pointer-events:none;position:absolute;top:0}.hide-arrows .monaco-tl-indent{left:12px}.monaco-tl-indent>.indent-guide{border-left:1px solid transparent;box-sizing:border-box;display:inline-block;height:100%}.monaco-workbench:not(.reduce-motion) .monaco-tl-indent>.indent-guide{transition:border-color .1s linear}.monaco-tl-contents,.monaco-tl-twistie{height:100%}.monaco-tl-twistie{align-items:center;display:flex!important;flex-shrink:0;font-size:10px;justify-content:center;padding-right:6px;text-align:right;transform:translateX(3px);width:16px}.monaco-tl-contents{flex:1;overflow:hidden}.monaco-tl-twistie:before{border-radius:20px}.monaco-tl-twistie.collapsed:before{transform:rotate(-90deg)}.monaco-tl-twistie.codicon-tree-item-loading:before{animation:codicon-spin 1.25s steps(30) infinite}.monaco-tree-type-filter{border:1px solid var(--vscode-widget-border);border-bottom-left-radius:4px;border-bottom-right-radius:4px;display:flex;margin:0 6px;max-width:200px;padding:3px;position:absolute;top:0;z-index:100}.monaco-workbench:not(.reduce-motion) .monaco-tree-type-filter{transition:top .3s}.monaco-tree-type-filter.disabled{top:-40px!important}.monaco-tree-type-filter-grab{align-items:center;cursor:grab;display:flex!important;justify-content:center;margin-right:2px}.monaco-tree-type-filter-grab.grabbing{cursor:grabbing}.monaco-tree-type-filter-input{flex:1}.monaco-tree-type-filter-input .monaco-inputbox{height:23px}.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.input,.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.mirror{padding:2px 4px}.monaco-tree-type-filter-input .monaco-findInput>.controls{top:2px}.monaco-tree-type-filter-actionbar{margin-left:4px}.monaco-tree-type-filter-actionbar .monaco-action-bar .action-label{padding:2px}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container{background-color:var(--vscode-sideBar-background);height:0;left:0;position:absolute;top:0;width:100%;z-index:13}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row.monaco-list-row{background-color:var(--vscode-sideBar-background);opacity:1!important;overflow:hidden;position:absolute;width:100%}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row:hover{background-color:var(--vscode-list-hoverBackground)!important;cursor:pointer}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-container-shadow{bottom:-3px;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset;height:3px;left:0;position:absolute;width:100%}.monaco-text-button{align-items:center;border:1px solid var(--vscode-button-border,transparent);border-radius:2px;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;line-height:18px;padding:4px;text-align:center;width:100%}.monaco-text-button:focus{outline-offset:2px!important}.monaco-text-button:hover{text-decoration:none!important}.monaco-button.disabled,.monaco-button.disabled:focus{cursor:default;opacity:.4!important}.monaco-text-button .codicon{color:inherit!important;margin:0 .2em}.monaco-text-button.monaco-text-button-with-short-label{flex-direction:row;flex-wrap:wrap;height:28px;overflow:hidden;padding:0 4px}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label{flex-basis:100%}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{flex-grow:1;overflow:hidden;width:0}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label,.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{align-items:center;display:flex;font-style:inherit;font-weight:400;justify-content:center;padding:4px 0}.monaco-button-dropdown{cursor:pointer;display:flex}.monaco-button-dropdown.disabled{cursor:default}.monaco-button-dropdown>.monaco-button:focus{outline-offset:-1px!important}.monaco-button-dropdown.disabled>.monaco-button-dropdown-separator,.monaco-button-dropdown.disabled>.monaco-button.disabled,.monaco-button-dropdown.disabled>.monaco-button.disabled:focus{opacity:.4!important}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-right-width:0!important}.monaco-button-dropdown .monaco-button-dropdown-separator{cursor:default;padding:4px 0}.monaco-button-dropdown .monaco-button-dropdown-separator>div{height:100%;width:1px}.monaco-button-dropdown>.monaco-button.monaco-dropdown-button{align-items:center;border:1px solid var(--vscode-button-border,transparent);border-left-width:0!important;border-radius:0 2px 2px 0;display:flex}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-radius:2px 0 0 2px}.monaco-description-button{align-items:center;display:flex;flex-direction:column;margin:4px 5px}.monaco-description-button .monaco-button-description{font-size:11px;font-style:italic;padding:4px 20px}.monaco-description-button .monaco-button-description,.monaco-description-button .monaco-button-label{align-items:center;display:flex;justify-content:center}.monaco-description-button .monaco-button-description>.codicon,.monaco-description-button .monaco-button-label>.codicon{color:inherit!important;margin:0 .2em}.monaco-button-dropdown.default-colors>.monaco-button,.monaco-button.default-colors{background-color:var(--vscode-button-background);color:var(--vscode-button-foreground)}.monaco-button-dropdown.default-colors>.monaco-button:hover,.monaco-button.default-colors:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-button-dropdown.default-colors>.monaco-button.secondary,.monaco-button.default-colors.secondary{background-color:var(--vscode-button-secondaryBackground);color:var(--vscode-button-secondaryForeground)}.monaco-button-dropdown.default-colors>.monaco-button.secondary:hover,.monaco-button.default-colors.secondary:hover{background-color:var(--vscode-button-secondaryHoverBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator{background-color:var(--vscode-button-background);border-bottom:1px solid var(--vscode-button-border);border-top:1px solid var(--vscode-button-border)}.monaco-button-dropdown.default-colors .monaco-button.secondary+.monaco-button-dropdown-separator{background-color:var(--vscode-button-secondaryBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator>div{background-color:var(--vscode-button-separator)}.monaco-count-badge{border-radius:11px;box-sizing:border-box;display:inline-block;font-size:11px;font-weight:400;line-height:11px;min-height:18px;min-width:18px;padding:3px 6px;text-align:center}.monaco-count-badge.long{border-radius:2px;line-height:normal;min-height:auto;padding:2px 3px}.monaco-progress-container{height:2px;overflow:hidden;width:100%}.monaco-progress-container .progress-bit{display:none;height:2px;left:0;position:absolute;width:2%}.monaco-progress-container.active .progress-bit{display:inherit}.monaco-progress-container.discrete .progress-bit{left:0;transition:width .1s linear}.monaco-progress-container.discrete.done .progress-bit{width:100%}.monaco-progress-container.infinite .progress-bit{animation-duration:4s;animation-iteration-count:infinite;animation-name:progress;animation-timing-function:linear;transform:translateZ(0)}.monaco-progress-container.infinite.infinite-long-running .progress-bit{animation-timing-function:steps(100)}@keyframes progress{0%{transform:translateX(0) scaleX(1)}50%{transform:translateX(2500%) scaleX(3)}to{transform:translateX(4900%) scaleX(1)}}.quick-input-widget{-webkit-app-region:no-drag;border-radius:6px;left:50%;margin-left:-300px;position:absolute;width:600px;z-index:2550}.quick-input-titlebar{align-items:center;border-top-left-radius:5px;border-top-right-radius:5px;display:flex}.quick-input-left-action-bar{display:flex;flex:1;margin-left:4px}.quick-input-title{overflow:hidden;padding:3px 0;text-align:center;text-overflow:ellipsis}.quick-input-right-action-bar{display:flex;flex:1;margin-right:4px}.quick-input-right-action-bar>.actions-container{justify-content:flex-end}.quick-input-titlebar .monaco-action-bar .action-label.codicon{background-position:50%;background-repeat:no-repeat;padding:2px}.quick-input-description{margin:6px 6px 6px 11px}.quick-input-header .quick-input-description{flex:1;margin:4px 2px}.quick-input-header{display:flex;padding:8px 6px 6px}.quick-input-widget.hidden-input .quick-input-header{margin-bottom:0;padding:0}.quick-input-and-message{display:flex;flex-direction:column;flex-grow:1;min-width:0;position:relative}.quick-input-check-all{align-self:center;margin:0}.quick-input-filter{display:flex;flex-grow:1;position:relative}.quick-input-box{flex-grow:1}.quick-input-widget.show-checkboxes .quick-input-box,.quick-input-widget.show-checkboxes .quick-input-message{margin-left:5px}.quick-input-visible-count{left:-10000px;position:absolute}.quick-input-count{align-items:center;align-self:center;display:flex;position:absolute;right:4px}.quick-input-count .monaco-count-badge{border-radius:2px;line-height:normal;min-height:auto;padding:2px 4px;vertical-align:middle}.quick-input-action{margin-left:6px}.quick-input-action .monaco-text-button{align-items:center;display:flex;font-size:11px;height:25px;padding:0 6px}.quick-input-message{margin-top:-1px;overflow-wrap:break-word;padding:5px}.quick-input-message>.codicon{margin:0 .2em;vertical-align:text-bottom}.quick-input-message a{color:inherit}.quick-input-progress.monaco-progress-container{position:relative}.quick-input-list{line-height:22px}.quick-input-widget.hidden-input .quick-input-list{margin-top:4px;padding-bottom:4px}.quick-input-list .monaco-list{max-height:440px;overflow:hidden;padding-bottom:5px}.quick-input-list .monaco-scrollable-element{padding:0 5px}.quick-input-list .quick-input-list-entry{box-sizing:border-box;display:flex;height:100%;overflow:hidden;padding:0 6px}.quick-input-list .quick-input-list-entry.quick-input-list-separator-border{border-top-style:solid;border-top-width:1px}.quick-input-list .monaco-list-row{border-radius:3px}.quick-input-list .monaco-list-row[data-index="0"] .quick-input-list-entry.quick-input-list-separator-border{border-top-style:none}.quick-input-list .quick-input-list-label{display:flex;flex:1;height:100%;overflow:hidden}.quick-input-list .quick-input-list-checkbox{align-self:center;margin:0}.quick-input-list .quick-input-list-icon{align-items:center;background-position:0;background-repeat:no-repeat;background-size:16px;display:flex;height:22px;justify-content:center;padding-right:6px;width:16px}.quick-input-list .quick-input-list-rows{display:flex;flex:1;flex-direction:column;height:100%;margin-left:5px;overflow:hidden;text-overflow:ellipsis}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-rows{margin-left:10px}.quick-input-widget .quick-input-list .quick-input-list-checkbox{display:none}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-checkbox{display:inline}.quick-input-list .quick-input-list-rows>.quick-input-list-row{align-items:center;display:flex}.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label,.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label .monaco-icon-label-container>.monaco-icon-name-container{flex:1}.quick-input-list .quick-input-list-rows>.quick-input-list-row .codicon[class*=codicon-]{vertical-align:text-bottom}.quick-input-list .quick-input-list-rows .monaco-highlighted-label>span{opacity:1}.quick-input-list .quick-input-list-entry .quick-input-list-entry-keybinding{margin-right:8px}.quick-input-list .quick-input-list-label-meta{line-height:normal;opacity:.7;overflow:hidden;text-overflow:ellipsis}.quick-input-list .monaco-highlighted-label .highlight{font-weight:700}.quick-input-list .quick-input-list-entry .quick-input-list-separator{margin-right:4px}.quick-input-list .quick-input-list-entry-action-bar{display:flex;flex:0;overflow:visible}.quick-input-list .quick-input-list-entry-action-bar .action-label{display:none}.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon{margin-right:4px;padding:0 2px 2px}.quick-input-list .quick-input-list-entry-action-bar{margin-right:4px;margin-top:1px}.quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label,.quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible,.quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label{display:flex}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key,.quick-input-list .monaco-list-row.focused .quick-input-list-entry .quick-input-list-separator{color:inherit}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key{background:none}.quick-input-list .quick-input-list-separator-as-item{font-size:12px;font-weight:600}.monaco-icon-label{display:flex;overflow:hidden;text-overflow:ellipsis}.monaco-icon-label:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-position:0;background-repeat:no-repeat;background-size:16px;display:inline-block;flex-shrink:0;height:22px;line-height:inherit!important;padding-right:6px;vertical-align:top;width:16px}.monaco-icon-label-container.disabled{color:var(--vscode-disabledForeground)}.monaco-icon-label>.monaco-icon-label-container{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{color:inherit;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name>.label-separator{margin:0 2px;opacity:.5}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-suffix-container>.label-suffix{opacity:.7;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{font-size:.9em;margin-left:.5em;opacity:.7;white-space:pre}.monaco-icon-label.nowrap>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{white-space:nowrap}.vs .monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.95}.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-description-container>.label-description,.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{font-style:italic}.monaco-icon-label.deprecated{opacity:.66;text-decoration:line-through}.monaco-icon-label.italic:after{font-style:italic}.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-description-container>.label-description,.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{text-decoration:line-through}.monaco-icon-label:after{font-size:90%;font-weight:600;margin:auto 16px 0 5px;opacity:.75;text-align:center}.monaco-list:focus .selected .monaco-icon-label,.monaco-list:focus .selected .monaco-icon-label:after{color:inherit!important}.monaco-list-row.focused.selected .label-description,.monaco-list-row.selected .label-description{opacity:.8}.monaco-keybinding{align-items:center;display:flex;line-height:10px}.monaco-keybinding>.monaco-keybinding-key{border-radius:3px;border-style:solid;border-width:1px;display:inline-block;font-size:11px;margin:0 2px;padding:3px 5px;vertical-align:middle}.monaco-keybinding>.monaco-keybinding-key:first-child{margin-left:0}.monaco-keybinding>.monaco-keybinding-key:last-child{margin-right:0}.monaco-keybinding>.monaco-keybinding-key-separator{display:inline-block}.monaco-keybinding>.monaco-keybinding-key-chord-separator{width:6px}.monaco-editor .diff-hidden-lines-widget{width:100%}.monaco-editor .diff-hidden-lines{font-size:13px;height:0;line-height:14px;transform:translateY(-10px)}.monaco-editor .diff-hidden-lines .bottom.dragging,.monaco-editor .diff-hidden-lines .top.dragging,.monaco-editor .diff-hidden-lines:not(.dragging) .bottom:hover,.monaco-editor .diff-hidden-lines:not(.dragging) .top:hover{background-color:var(--vscode-focusBorder)}.monaco-editor .diff-hidden-lines .bottom,.monaco-editor .diff-hidden-lines .top{background-clip:padding-box;background-color:transparent;border-bottom:2px solid transparent;border-top:4px solid transparent;height:4px;transition:background-color .1s ease-out}.monaco-editor .diff-hidden-lines .bottom.canMoveTop:not(.canMoveBottom),.monaco-editor .diff-hidden-lines .top.canMoveTop:not(.canMoveBottom),.monaco-editor.draggingUnchangedRegion.canMoveTop:not(.canMoveBottom) *{cursor:n-resize!important}.monaco-editor .diff-hidden-lines .bottom:not(.canMoveTop).canMoveBottom,.monaco-editor .diff-hidden-lines .top:not(.canMoveTop).canMoveBottom,.monaco-editor.draggingUnchangedRegion:not(.canMoveTop).canMoveBottom *{cursor:s-resize!important}.monaco-editor .diff-hidden-lines .bottom.canMoveTop.canMoveBottom,.monaco-editor .diff-hidden-lines .top.canMoveTop.canMoveBottom,.monaco-editor.draggingUnchangedRegion.canMoveTop.canMoveBottom *{cursor:ns-resize!important}.monaco-editor .diff-hidden-lines .top{transform:translateY(4px)}.monaco-editor .diff-hidden-lines .bottom{transform:translateY(-6px)}.monaco-editor .diff-unchanged-lines{background:var(--vscode-diffEditor-unchangedCodeBackground)}.monaco-editor .noModificationsOverlay{align-items:center;background:var(--vscode-editor-background);display:flex;justify-content:center;z-index:1}.monaco-editor .diff-hidden-lines .center{background:var(--vscode-diffEditor-unchangedRegionBackground);box-shadow:inset 0 -5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow),inset 0 5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow);color:var(--vscode-diffEditor-unchangedRegionForeground);display:block;height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .diff-hidden-lines .center span.codicon{vertical-align:middle}.monaco-editor .diff-hidden-lines .center a:hover .codicon{color:var(--vscode-editorLink-activeForeground)!important;cursor:pointer}.monaco-editor .diff-hidden-lines div.breadcrumb-item{cursor:pointer}.monaco-editor .diff-hidden-lines div.breadcrumb-item:hover{color:var(--vscode-editorLink-activeForeground)}.monaco-editor .movedModified,.monaco-editor .movedOriginal{border:2px solid var(--vscode-diffEditor-move-border)}.monaco-editor .movedModified.currentMove,.monaco-editor .movedOriginal.currentMove{border:2px solid var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path.currentMove{stroke:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path{pointer-events:visiblestroke}.monaco-diff-editor .moved-blocks-lines .arrow{fill:var(--vscode-diffEditor-move-border)}.monaco-diff-editor .moved-blocks-lines .arrow.currentMove{fill:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines .arrow-rectangle{fill:var(--vscode-editor-background)}.monaco-diff-editor .moved-blocks-lines{pointer-events:none;position:absolute}.monaco-diff-editor .moved-blocks-lines path{fill:none;stroke:var(--vscode-diffEditor-move-border);stroke-width:2}.monaco-editor .char-delete.diff-range-empty{border-left:3px solid var(--vscode-diffEditor-removedTextBackground);margin-left:-1px}.monaco-editor .char-insert.diff-range-empty{border-left:3px solid var(--vscode-diffEditor-insertedTextBackground)}.monaco-editor .fold-unchanged{cursor:pointer}.monaco-diff-editor .diff-moved-code-block{display:flex;justify-content:flex-end;margin-top:-4px}.monaco-diff-editor .diff-moved-code-block .action-bar .action-label.codicon{font-size:12px;height:12px;width:12px}.monaco-diff-editor .diffOverview{z-index:9}.monaco-diff-editor .diffOverview .diffViewport{z-index:10}.monaco-diff-editor.vs .diffOverview{background:rgba(0,0,0,.03)}.monaco-diff-editor.vs-dark .diffOverview{background:hsla(0,0%,100%,.01)}.monaco-scrollable-element.modified-in-monaco-diff-editor.vs .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.vs-dark .scrollbar{background:transparent}.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-black .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-light .scrollbar{background:none}.monaco-scrollable-element.modified-in-monaco-diff-editor .slider{z-index:10}.modified-in-monaco-diff-editor .slider.active{background:hsla(0,0%,67%,.4)}.modified-in-monaco-diff-editor.hc-black .slider.active,.modified-in-monaco-diff-editor.hc-light .slider.active{background:none}.monaco-diff-editor .delete-sign,.monaco-diff-editor .insert-sign,.monaco-editor .delete-sign,.monaco-editor .insert-sign{align-items:center;display:flex!important;font-size:11px!important;opacity:.7!important}.monaco-diff-editor.hc-black .delete-sign,.monaco-diff-editor.hc-black .insert-sign,.monaco-diff-editor.hc-light .delete-sign,.monaco-diff-editor.hc-light .insert-sign,.monaco-editor.hc-black .delete-sign,.monaco-editor.hc-black .insert-sign,.monaco-editor.hc-light .delete-sign,.monaco-editor.hc-light .insert-sign{opacity:1}.monaco-editor .inline-added-margin-view-zone,.monaco-editor .inline-deleted-margin-view-zone{text-align:right}.monaco-editor .arrow-revert-change{position:absolute;z-index:10}.monaco-editor .arrow-revert-change:hover{cursor:pointer}.monaco-editor .view-zones .view-lines .view-line span{display:inline-block}.monaco-editor .margin-view-zones .lightbulb-glyph:hover{cursor:pointer}.monaco-diff-editor .char-insert,.monaco-editor .char-insert{background-color:var(--vscode-diffEditor-insertedTextBackground)}.monaco-diff-editor .line-insert,.monaco-editor .line-insert{background-color:var(--vscode-diffEditor-insertedLineBackground,var(--vscode-diffEditor-insertedTextBackground))}.monaco-editor .char-insert,.monaco-editor .line-insert{border:1px solid var(--vscode-diffEditor-insertedTextBorder);box-sizing:border-box}.monaco-editor.hc-black .char-insert,.monaco-editor.hc-black .line-insert,.monaco-editor.hc-light .char-insert,.monaco-editor.hc-light .line-insert{border-style:dashed}.monaco-editor .char-delete,.monaco-editor .line-delete{border:1px solid var(--vscode-diffEditor-removedTextBorder);box-sizing:border-box}.monaco-editor.hc-black .char-delete,.monaco-editor.hc-black .line-delete,.monaco-editor.hc-light .char-delete,.monaco-editor.hc-light .line-delete{border-style:dashed}.monaco-diff-editor .gutter-insert,.monaco-editor .gutter-insert,.monaco-editor .inline-added-margin-view-zone{background-color:var(--vscode-diffEditorGutter-insertedLineBackground,var(--vscode-diffEditor-insertedLineBackground),var(--vscode-diffEditor-insertedTextBackground))}.monaco-diff-editor .char-delete,.monaco-editor .char-delete{background-color:var(--vscode-diffEditor-removedTextBackground)}.monaco-diff-editor .line-delete,.monaco-editor .line-delete{background-color:var(--vscode-diffEditor-removedLineBackground,var(--vscode-diffEditor-removedTextBackground))}.monaco-diff-editor .gutter-delete,.monaco-editor .gutter-delete,.monaco-editor .inline-deleted-margin-view-zone{background-color:var(--vscode-diffEditorGutter-removedLineBackground,var(--vscode-diffEditor-removedLineBackground),var(--vscode-diffEditor-removedTextBackground))}.monaco-diff-editor.side-by-side .editor.modified{border-left:1px solid var(--vscode-diffEditor-border);box-shadow:-6px 0 5px -5px var(--vscode-scrollbar-shadow)}.monaco-diff-editor .diffViewport{background:var(--vscode-scrollbarSlider-background)}.monaco-diff-editor .diffViewport:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-diff-editor .diffViewport:active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-editor .diagonal-fill{background-image:linear-gradient(-45deg,var(--vscode-diffEditor-diagonalFill) 12.5%,#0000 12.5%,#0000 50%,var(--vscode-diffEditor-diagonalFill) 50%,var(--vscode-diffEditor-diagonalFill) 62.5%,#0000 62.5%,#0000 100%);background-size:8px 8px}.monaco-diff-editor .diff-review-line-number{color:var(--vscode-editorLineNumber-foreground);display:inline-block;text-align:right}.monaco-diff-editor .diff-review{position:absolute;-moz-user-select:none;user-select:none;-webkit-user-select:none;z-index:99}.monaco-diff-editor .diff-review-summary{padding-left:10px}.monaco-diff-editor .diff-review-shadow{box-shadow:var(--vscode-scrollbar-shadow) 0 -6px 6px -6px inset;position:absolute}.monaco-diff-editor .diff-review-row{white-space:pre}.monaco-diff-editor .diff-review-table{display:table;min-width:100%}.monaco-diff-editor .diff-review-row{display:table-row;width:100%}.monaco-diff-editor .diff-review-spacer{display:inline-block;vertical-align:middle;width:10px}.monaco-diff-editor .diff-review-spacer>.codicon{font-size:9px!important}.monaco-diff-editor .diff-review-actions{display:inline-block;position:absolute;right:10px;top:2px;z-index:100}.monaco-diff-editor .diff-review-actions .action-label{height:16px;margin:2px 0;width:16px}.monaco-diff-editor .revertButton{cursor:pointer}.monaco-component .multiDiffEntry{display:flex;flex-direction:column}.monaco-component .multiDiffEntry .editorParent{border-left:2px solid var(--vscode-tab-inactiveBackground)}.monaco-component .multiDiffEntry.focused .editorParent{border-left:2px solid var(--vscode-notebook-focusedCellBorder)}.monaco-component .multiDiffEntry .editorParent .editorContainer{border-left:17px solid var(--vscode-tab-inactiveBackground)}.monaco-component .multiDiffEntry .collapse-button{cursor:pointer;margin:0 5px}.monaco-component .multiDiffEntry .collapse-button a{display:block}.monaco-component .multiDiffEntry .header{align-items:center;background:var(--vscode-editor-background);border-bottom:1px solid var(--vscode-sideBarSectionHeader-border);border-left:2px solid var(--vscode-editor-background);border-top:1px solid var(--vscode-sideBarSectionHeader-border);color:var(--vscode-foreground);display:flex;padding:8px 5px;z-index:1000}.monaco-component .multiDiffEntry.focused .header{border-left:2px solid var(--vscode-notebook-focusedCellBorder)}.monaco-component .multiDiffEntry .header.shadow{box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px}.monaco-component .multiDiffEntry .header .title{flex:1;font-size:14px;line-height:22px}.monaco-component .multiDiffEntry .header .actions{padding:0 8px}.monaco-toolbar{height:100%}.monaco-toolbar .toolbar-toggle-more{display:inline-block;padding:0}.monaco-editor .selection-anchor{background-color:#007acc;width:2px!important}.monaco-editor .bracket-match{background-color:var(--vscode-editorBracketMatch-background);border:1px solid var(--vscode-editorBracketMatch-border);box-sizing:border-box}@font-face{font-display:block;font-family:codicon;src:url(../fonts/codicon.184be8c3.ttf) format("truetype")}.codicon[class*=codicon-]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font:normal normal normal 16px/1 codicon;text-align:center;text-decoration:none;text-rendering:auto;text-transform:none;-moz-user-select:none;user-select:none;-webkit-user-select:none}.codicon-wrench-subaction{opacity:.5}@keyframes codicon-spin{to{transform:rotate(1turn)}}.codicon-gear.codicon-modifier-spin,.codicon-loading.codicon-modifier-spin,.codicon-notebook-state-executing.codicon-modifier-spin,.codicon-sync.codicon-modifier-spin{animation:codicon-spin 1.5s steps(30) infinite}.codicon-modifier-disabled{opacity:.4}.codicon-loading,.codicon-tree-item-loading:before{animation-duration:1s!important;animation-timing-function:cubic-bezier(.53,.21,.29,.67)!important}.monaco-editor .codicon.codicon-symbol-array,.monaco-workbench .codicon.codicon-symbol-array{color:var(--vscode-symbolIcon-arrayForeground)}.monaco-editor .codicon.codicon-symbol-boolean,.monaco-workbench .codicon.codicon-symbol-boolean{color:var(--vscode-symbolIcon-booleanForeground)}.monaco-editor .codicon.codicon-symbol-class,.monaco-workbench .codicon.codicon-symbol-class{color:var(--vscode-symbolIcon-classForeground)}.monaco-editor .codicon.codicon-symbol-method,.monaco-workbench .codicon.codicon-symbol-method{color:var(--vscode-symbolIcon-methodForeground)}.monaco-editor .codicon.codicon-symbol-color,.monaco-workbench .codicon.codicon-symbol-color{color:var(--vscode-symbolIcon-colorForeground)}.monaco-editor .codicon.codicon-symbol-constant,.monaco-workbench .codicon.codicon-symbol-constant{color:var(--vscode-symbolIcon-constantForeground)}.monaco-editor .codicon.codicon-symbol-constructor,.monaco-workbench .codicon.codicon-symbol-constructor{color:var(--vscode-symbolIcon-constructorForeground)}.monaco-editor .codicon.codicon-symbol-enum,.monaco-editor .codicon.codicon-symbol-value,.monaco-workbench .codicon.codicon-symbol-enum,.monaco-workbench .codicon.codicon-symbol-value{color:var(--vscode-symbolIcon-enumeratorForeground)}.monaco-editor .codicon.codicon-symbol-enum-member,.monaco-workbench .codicon.codicon-symbol-enum-member{color:var(--vscode-symbolIcon-enumeratorMemberForeground)}.monaco-editor .codicon.codicon-symbol-event,.monaco-workbench .codicon.codicon-symbol-event{color:var(--vscode-symbolIcon-eventForeground)}.monaco-editor .codicon.codicon-symbol-field,.monaco-workbench .codicon.codicon-symbol-field{color:var(--vscode-symbolIcon-fieldForeground)}.monaco-editor .codicon.codicon-symbol-file,.monaco-workbench .codicon.codicon-symbol-file{color:var(--vscode-symbolIcon-fileForeground)}.monaco-editor .codicon.codicon-symbol-folder,.monaco-workbench .codicon.codicon-symbol-folder{color:var(--vscode-symbolIcon-folderForeground)}.monaco-editor .codicon.codicon-symbol-function,.monaco-workbench .codicon.codicon-symbol-function{color:var(--vscode-symbolIcon-functionForeground)}.monaco-editor .codicon.codicon-symbol-interface,.monaco-workbench .codicon.codicon-symbol-interface{color:var(--vscode-symbolIcon-interfaceForeground)}.monaco-editor .codicon.codicon-symbol-key,.monaco-workbench .codicon.codicon-symbol-key{color:var(--vscode-symbolIcon-keyForeground)}.monaco-editor .codicon.codicon-symbol-keyword,.monaco-workbench .codicon.codicon-symbol-keyword{color:var(--vscode-symbolIcon-keywordForeground)}.monaco-editor .codicon.codicon-symbol-module,.monaco-workbench .codicon.codicon-symbol-module{color:var(--vscode-symbolIcon-moduleForeground)}.monaco-editor .codicon.codicon-symbol-namespace,.monaco-workbench .codicon.codicon-symbol-namespace{color:var(--vscode-symbolIcon-namespaceForeground)}.monaco-editor .codicon.codicon-symbol-null,.monaco-workbench .codicon.codicon-symbol-null{color:var(--vscode-symbolIcon-nullForeground)}.monaco-editor .codicon.codicon-symbol-number,.monaco-workbench .codicon.codicon-symbol-number{color:var(--vscode-symbolIcon-numberForeground)}.monaco-editor .codicon.codicon-symbol-object,.monaco-workbench .codicon.codicon-symbol-object{color:var(--vscode-symbolIcon-objectForeground)}.monaco-editor .codicon.codicon-symbol-operator,.monaco-workbench .codicon.codicon-symbol-operator{color:var(--vscode-symbolIcon-operatorForeground)}.monaco-editor .codicon.codicon-symbol-package,.monaco-workbench .codicon.codicon-symbol-package{color:var(--vscode-symbolIcon-packageForeground)}.monaco-editor .codicon.codicon-symbol-property,.monaco-workbench .codicon.codicon-symbol-property{color:var(--vscode-symbolIcon-propertyForeground)}.monaco-editor .codicon.codicon-symbol-reference,.monaco-workbench .codicon.codicon-symbol-reference{color:var(--vscode-symbolIcon-referenceForeground)}.monaco-editor .codicon.codicon-symbol-snippet,.monaco-workbench .codicon.codicon-symbol-snippet{color:var(--vscode-symbolIcon-snippetForeground)}.monaco-editor .codicon.codicon-symbol-string,.monaco-workbench .codicon.codicon-symbol-string{color:var(--vscode-symbolIcon-stringForeground)}.monaco-editor .codicon.codicon-symbol-struct,.monaco-workbench .codicon.codicon-symbol-struct{color:var(--vscode-symbolIcon-structForeground)}.monaco-editor .codicon.codicon-symbol-text,.monaco-workbench .codicon.codicon-symbol-text{color:var(--vscode-symbolIcon-textForeground)}.monaco-editor .codicon.codicon-symbol-type-parameter,.monaco-workbench .codicon.codicon-symbol-type-parameter{color:var(--vscode-symbolIcon-typeParameterForeground)}.monaco-editor .codicon.codicon-symbol-unit,.monaco-workbench .codicon.codicon-symbol-unit{color:var(--vscode-symbolIcon-unitForeground)}.monaco-editor .codicon.codicon-symbol-variable,.monaco-workbench .codicon.codicon-symbol-variable{color:var(--vscode-symbolIcon-variableForeground)}.monaco-editor .lightBulbWidget{align-items:center;display:flex;justify-content:center}.monaco-editor .lightBulbWidget:hover{cursor:pointer}.monaco-editor .lightBulbWidget.codicon-light-bulb,.monaco-editor .lightBulbWidget.codicon-lightbulb-sparkle{color:var(--vscode-editorLightBulb-foreground)}.monaco-editor .lightBulbWidget.codicon-lightbulb-autofix,.monaco-editor .lightBulbWidget.codicon-lightbulb-sparkle-autofix{color:var(--vscode-editorLightBulbAutoFix-foreground,var(--vscode-editorLightBulb-foreground))}.monaco-editor .lightBulbWidget.codicon-sparkle-filled{color:var(--vscode-editorLightBulbAi-foreground,var(--vscode-icon-foreground))}.monaco-editor .lightBulbWidget:before{position:relative;z-index:2}.monaco-editor .lightBulbWidget:after{background-color:var(--vscode-editor-background);content:"";display:block;height:100%;left:0;opacity:.3;position:absolute;top:0;width:100%;z-index:1}.monaco-editor .monaco-editor-overlaymessage{padding-bottom:8px;z-index:10000}.monaco-editor .monaco-editor-overlaymessage.below{padding-bottom:0;padding-top:8px;z-index:10000}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.monaco-editor .monaco-editor-overlaymessage.fadeIn{animation:fadeIn .15s ease-out}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.monaco-editor .monaco-editor-overlaymessage.fadeOut{animation:fadeOut .1s ease-out}.monaco-editor .monaco-editor-overlaymessage .message{background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-inputValidation-infoBorder);border-radius:3px;color:var(--vscode-editorHoverWidget-foreground);padding:2px 4px}.monaco-editor .monaco-editor-overlaymessage .message p{margin-block:0}.monaco-editor .monaco-editor-overlaymessage .message a{color:var(--vscode-textLink-foreground)}.monaco-editor .monaco-editor-overlaymessage .message a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor.hc-black .monaco-editor-overlaymessage .message,.monaco-editor.hc-light .monaco-editor-overlaymessage .message{border-width:2px}.monaco-editor .monaco-editor-overlaymessage .anchor{border:8px solid transparent;height:0!important;left:2px;position:absolute;width:0!important;z-index:1000}.monaco-editor .monaco-editor-overlaymessage .anchor.top{border-bottom-color:var(--vscode-inputValidation-infoBorder)}.monaco-editor .monaco-editor-overlaymessage .anchor.below{border-top-color:var(--vscode-inputValidation-infoBorder)}.monaco-editor .monaco-editor-overlaymessage.below .anchor.below,.monaco-editor .monaco-editor-overlaymessage:not(.below) .anchor.top{display:none}.monaco-editor .monaco-editor-overlaymessage.below .anchor.top{display:inherit;top:-8px}.monaco-editor .rendered-markdown kbd{background-color:var(--vscode-keybindingLabel-background);border-color:var(--vscode-keybindingLabel-border);border-bottom-color:var(--vscode-keybindingLabel-bottomBorder);border-radius:3px;border-style:solid;border-width:1px;box-shadow:inset 0 -1px 0 var(--vscode-widget-shadow);color:var(--vscode-keybindingLabel-foreground);padding:1px 3px;vertical-align:middle}.action-widget{background-color:var(--vscode-editorWidget-background);border:1px solid var(--vscode-editorWidget-border)!important;border-radius:0;border-radius:2px;color:var(--vscode-editorWidget-foreground);display:block;font-size:13px;max-width:80vw;min-width:160px;width:100%;z-index:40}.context-view-block{z-index:-1}.context-view-block,.context-view-pointerBlock{cursor:auto;height:100%;left:0;position:fixed;top:0;width:100%}.context-view-pointerBlock{z-index:2}.action-widget .monaco-list{border:0!important;-moz-user-select:none;user-select:none;-webkit-user-select:none}.action-widget .monaco-list:focus:before{outline:0!important}.action-widget .monaco-list .monaco-scrollable-element{overflow:visible}.action-widget .monaco-list .monaco-list-row{cursor:pointer;padding:0 10px;touch-action:none;white-space:nowrap;width:100%}.action-widget .monaco-list .monaco-list-row.action.focused:not(.option-disabled){background-color:var(--vscode-quickInputList-focusBackground)!important;color:var(--vscode-quickInputList-focusForeground);outline:1px solid var(--vscode-menu-selectionBorder,transparent);outline-offset:-1px}.action-widget .monaco-list-row.group-header{color:var(--vscode-descriptionForeground)!important;font-weight:600}.action-widget .monaco-list .group-header,.action-widget .monaco-list .option-disabled,.action-widget .monaco-list .option-disabled .focused,.action-widget .monaco-list .option-disabled .focused:before,.action-widget .monaco-list .option-disabled:before{-webkit-touch-callout:none;background-color:transparent!important;cursor:default!important;outline:0 solid!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.action-widget .monaco-list-row.action{align-items:center;display:flex;gap:6px}.action-widget .monaco-list-row.action.option-disabled,.action-widget .monaco-list-row.action.option-disabled .codicon,.action-widget .monaco-list:focus .monaco-list-row.focused.action.option-disabled,.action-widget .monaco-list:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused).option-disabled{color:var(--vscode-disabledForeground)}.action-widget .monaco-list-row.action:not(.option-disabled) .codicon{color:inherit}.action-widget .monaco-list-row.action .title{flex:1;overflow:hidden;text-overflow:ellipsis}.action-widget .action-widget-action-bar{background-color:var(--vscode-editorHoverWidget-statusBarBackground);border-top:1px solid var(--vscode-editorHoverWidget-border)}.action-widget .action-widget-action-bar:before{content:"";display:block;width:100%}.action-widget .action-widget-action-bar .actions-container{padding:0 8px}.action-widget-action-bar .action-label{color:var(--vscode-textLink-activeForeground);font-size:12px;line-height:22px;padding:0;pointer-events:all}.action-widget-action-bar .action-item{margin-right:16px;pointer-events:none}.action-widget-action-bar .action-label:hover{background-color:transparent!important}.monaco-action-bar .actions-container.highlight-toggled .action-label.checked{background:var(--vscode-actionBar-toggledBackground)!important}.monaco-editor .codelens-decoration{font-feature-settings:var(--vscode-editorCodeLens-fontFeatureSettings);color:var(--vscode-editorCodeLens-foreground);display:inline-block;font-family:var(--vscode-editorCodeLens-fontFamily),var(--vscode-editorCodeLens-fontFamilyDefault);font-size:var(--vscode-editorCodeLens-fontSize);line-height:var(--vscode-editorCodeLens-lineHeight);overflow:hidden;padding-right:calc(var(--vscode-editorCodeLens-fontSize)*.5);text-overflow:ellipsis;white-space:nowrap}.monaco-editor .codelens-decoration>a,.monaco-editor .codelens-decoration>span{-moz-user-select:none;user-select:none;-webkit-user-select:none;vertical-align:sub;white-space:nowrap}.monaco-editor .codelens-decoration>a{text-decoration:none}.monaco-editor .codelens-decoration>a:hover{cursor:pointer}.monaco-editor .codelens-decoration>a:hover,.monaco-editor .codelens-decoration>a:hover .codicon{color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .codelens-decoration .codicon{color:currentColor!important;color:var(--vscode-editorCodeLens-foreground);font-size:var(--vscode-editorCodeLens-fontSize);line-height:var(--vscode-editorCodeLens-lineHeight);vertical-align:middle}.monaco-editor .codelens-decoration>a:hover .codicon:before{cursor:pointer}@keyframes fadein{0%{opacity:0;visibility:visible}to{opacity:1}}.monaco-editor .codelens-decoration.fadein{animation:fadein .1s linear}.colorpicker-widget{height:190px;-moz-user-select:none;user-select:none;-webkit-user-select:none}.colorpicker-color-decoration,.hc-light .colorpicker-color-decoration{border:.1em solid #000;box-sizing:border-box;cursor:pointer;display:inline-block;height:.8em;line-height:.8em;margin:.1em .2em 0;width:.8em}.hc-black .colorpicker-color-decoration,.vs-dark .colorpicker-color-decoration{border:.1em solid #eee}.colorpicker-header{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=");background-size:9px 9px;display:flex;height:24px;image-rendering:pixelated;position:relative}.colorpicker-header .picked-color{align-items:center;color:#fff;cursor:pointer;display:flex;flex:1;justify-content:center;line-height:24px;overflow:hidden;white-space:nowrap;width:240px}.colorpicker-header .picked-color .picked-color-presentation{margin-left:5px;margin-right:5px;white-space:nowrap}.colorpicker-header .picked-color .codicon{color:inherit;font-size:14px}.colorpicker-header .picked-color.light{color:#000}.colorpicker-header .original-color{cursor:pointer;width:74px;z-index:inherit}.standalone-colorpicker{background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);color:var(--vscode-editorHoverWidget-foreground)}.colorpicker-header.standalone-colorpicker{border-bottom:none}.colorpicker-header .close-button{background-color:var(--vscode-editorHoverWidget-background);border-left:1px solid var(--vscode-editorHoverWidget-border);cursor:pointer}.colorpicker-header .close-button-inner-div{height:100%;text-align:center;width:100%}.colorpicker-header .close-button-inner-div:hover{background-color:var(--vscode-toolbar-hoverBackground)}.colorpicker-header .close-icon{padding:3px}.colorpicker-body{display:flex;padding:8px;position:relative}.colorpicker-body .saturation-wrap{flex:1;height:150px;min-width:220px;overflow:hidden;position:relative}.colorpicker-body .saturation-box{height:150px;position:absolute}.colorpicker-body .saturation-selection{border:1px solid #fff;border-radius:100%;box-shadow:0 0 2px rgba(0,0,0,.8);height:9px;margin:-5px 0 0 -5px;position:absolute;width:9px}.colorpicker-body .strip{height:150px;width:25px}.colorpicker-body .standalone-strip{height:122px;width:25px}.colorpicker-body .hue-strip{background:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);cursor:grab;margin-left:8px;position:relative}.colorpicker-body .opacity-strip{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=");background-size:9px 9px;cursor:grab;image-rendering:pixelated;margin-left:8px;position:relative}.colorpicker-body .strip.grabbing{cursor:grabbing}.colorpicker-body .slider{border:1px solid hsla(0,0%,100%,.71);box-shadow:0 0 1px rgba(0,0,0,.85);box-sizing:border-box;height:4px;left:-2px;position:absolute;top:0;width:calc(100% + 4px)}.colorpicker-body .strip .overlay{height:150px;pointer-events:none}.colorpicker-body .standalone-strip .standalone-overlay{height:122px;pointer-events:none}.standalone-colorpicker-body{border:1px solid transparent;border-bottom:1px solid var(--vscode-editorHoverWidget-border);display:block;overflow:hidden}.colorpicker-body .insert-button{background:var(--vscode-button-background);border:none;border-radius:2px;bottom:8px;color:var(--vscode-button-foreground);cursor:pointer;height:20px;padding:0;position:absolute;right:8px;width:58px}.colorpicker-body .insert-button:hover{background:var(--vscode-button-hoverBackground)}.monaco-editor .goto-definition-link{color:var(--vscode-editorLink-activeForeground)!important;cursor:pointer;text-decoration:underline}.monaco-editor .peekview-widget .head{box-sizing:border-box;display:flex;flex-wrap:nowrap;justify-content:space-between}.monaco-editor .peekview-widget .head .peekview-title{align-items:baseline;display:flex;font-size:13px;margin-left:20px;min-width:0;overflow:hidden;text-overflow:ellipsis}.monaco-editor .peekview-widget .head .peekview-title.clickable{cursor:pointer}.monaco-editor .peekview-widget .head .peekview-title .dirname:not(:empty){font-size:.9em;margin-left:.5em}.monaco-editor .peekview-widget .head .peekview-title .dirname,.monaco-editor .peekview-widget .head .peekview-title .filename,.monaco-editor .peekview-widget .head .peekview-title .meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .peekview-widget .head .peekview-title .meta:not(:empty):before{content:"-";padding:0 .3em}.monaco-editor .peekview-widget .head .peekview-actions{flex:1;padding-right:2px;text-align:right}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar{display:inline-block}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar,.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar>.actions-container{height:100%}.monaco-editor .peekview-widget>.body{border-top:1px solid;position:relative}.monaco-editor .peekview-widget .head .peekview-title .codicon{align-self:center;margin-right:4px}.monaco-editor .peekview-widget .monaco-list .monaco-list-row.focused .codicon{color:inherit!important}.monaco-editor .zone-widget{position:absolute;z-index:10}.monaco-editor .zone-widget .zone-widget-container{border-bottom-style:solid;border-bottom-width:0;border-top-style:solid;border-top-width:0;position:relative}.monaco-editor .zone-widget .zone-widget-container.reference-zone-widget{border-bottom-width:1px;border-top-width:1px}.monaco-editor .reference-zone-widget .inline{display:inline-block;vertical-align:top}.monaco-editor .reference-zone-widget .messages{height:100%;padding:3em 0;text-align:center;width:100%}.monaco-editor .reference-zone-widget .ref-tree{background-color:var(--vscode-peekViewResult-background);color:var(--vscode-peekViewResult-lineForeground);line-height:23px}.monaco-editor .reference-zone-widget .ref-tree .reference{overflow:hidden;text-overflow:ellipsis}.monaco-editor .reference-zone-widget .ref-tree .reference-file{color:var(--vscode-peekViewResult-fileForeground);display:inline-flex;height:100%;width:100%}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .selected .reference-file{color:inherit!important}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows>.monaco-list-row.selected:not(.highlighted){background-color:var(--vscode-peekViewResult-selectionBackground);color:var(--vscode-peekViewResult-selectionForeground)!important}.monaco-editor .reference-zone-widget .ref-tree .reference-file .count{margin-left:auto;margin-right:12px}.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight{background-color:var(--vscode-peekViewResult-matchHighlightBackground)}.monaco-editor .reference-zone-widget .preview .reference-decoration{background-color:var(--vscode-peekViewEditor-matchHighlightBackground);border:2px solid var(--vscode-peekViewEditor-matchHighlightBorder);box-sizing:border-box}.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input,.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background{background-color:var(--vscode-peekViewEditor-background)}.monaco-editor .reference-zone-widget .preview .monaco-editor .margin{background-color:var(--vscode-peekViewEditorGutter-background)}.monaco-editor.hc-black .reference-zone-widget .ref-tree .reference-file,.monaco-editor.hc-light .reference-zone-widget .ref-tree .reference-file{font-weight:700}.monaco-editor.hc-black .reference-zone-widget .ref-tree .referenceMatch .highlight,.monaco-editor.hc-light .reference-zone-widget .ref-tree .referenceMatch .highlight{border:1px dotted var(--vscode-contrastActiveBorder,transparent);box-sizing:border-box}.monaco-hover{animation:fadein .1s linear;box-sizing:border-box;cursor:default;line-height:1.5em;overflow:hidden;position:absolute;-moz-user-select:text;user-select:text;-webkit-user-select:text;white-space:var(--vscode-hover-whiteSpace,normal)}.monaco-hover.hidden{display:none}.monaco-hover a:hover:not(.disabled){cursor:pointer}.monaco-hover .hover-contents:not(.html-hover-contents){padding:4px 8px}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents){word-wrap:break-word;max-width:var(--vscode-hover-maxWidth,500px)}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents) hr{min-width:100%}.monaco-hover .code,.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6,.monaco-hover p,.monaco-hover ul{margin:8px 0}.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6{line-height:1.1}.monaco-hover code{font-family:var(--monaco-monospace-font)}.monaco-hover hr{border-left:0;border-right:0;box-sizing:border-box;height:1px;margin:4px -8px -4px}.monaco-hover .code:first-child,.monaco-hover p:first-child,.monaco-hover ul:first-child{margin-top:0}.monaco-hover .code:last-child,.monaco-hover p:last-child,.monaco-hover ul:last-child{margin-bottom:0}.monaco-hover ol,.monaco-hover ul{padding-left:20px}.monaco-hover li>p{margin-bottom:0}.monaco-hover li>ul{margin-top:0}.monaco-hover code{border-radius:3px;padding:0 .4em}.monaco-hover .monaco-tokenized-source{white-space:var(--vscode-hover-sourceWhiteSpace,pre-wrap)}.monaco-hover .hover-row.status-bar{font-size:12px;line-height:22px}.monaco-hover .hover-row.status-bar .info{font-style:italic;padding:0 8px}.monaco-hover .hover-row.status-bar .actions{display:flex;padding:0 8px}.monaco-hover .hover-row.status-bar .actions .action-container{cursor:pointer;margin-right:16px}.monaco-hover .hover-row.status-bar .actions .action-container .action .icon{padding-right:4px}.monaco-hover .markdown-hover .hover-contents .codicon{color:inherit;font-size:inherit;vertical-align:middle}.monaco-hover .hover-contents a.code-link,.monaco-hover .hover-contents a.code-link:hover{color:inherit}.monaco-hover .hover-contents a.code-link:before{content:"("}.monaco-hover .hover-contents a.code-link:after{content:")"}.monaco-hover .hover-contents a.code-link>span{border-bottom:1px solid transparent;color:var(--vscode-textLink-foreground);text-decoration:underline;text-underline-position:under}.monaco-hover .hover-contents a.code-link>span:hover{color:var(--vscode-textLink-activeForeground)}.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents):not(.html-hover-contents) span{display:inline-block;margin-bottom:4px}.monaco-hover-content .action-container a{-webkit-user-select:none;-moz-user-select:none;user-select:none}.monaco-hover-content .action-container.disabled{cursor:default;opacity:.4;pointer-events:none}.monaco-editor .peekview-widget .head .peekview-title .severity-icon{display:inline-block;margin-right:4px;vertical-align:text-top}.monaco-editor .marker-widget{text-overflow:ellipsis;white-space:nowrap}.monaco-editor .marker-widget>.stale{font-style:italic;opacity:.6}.monaco-editor .marker-widget .title{display:inline-block;padding-right:5px}.monaco-editor .marker-widget .descriptioncontainer{padding:8px 12px 0 20px;position:absolute;-moz-user-select:text;user-select:text;-webkit-user-select:text;white-space:pre}.monaco-editor .marker-widget .descriptioncontainer .message{display:flex;flex-direction:column}.monaco-editor .marker-widget .descriptioncontainer .message .details{padding-left:6px}.monaco-editor .marker-widget .descriptioncontainer .message .source,.monaco-editor .marker-widget .descriptioncontainer .message span.code{opacity:.6}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link{color:inherit;opacity:.6}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:before{content:"("}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:after{content:")"}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link>span{border-bottom:1px solid transparent;color:var(--vscode-textLink-foreground);color:var(--vscode-textLink-activeForeground);text-decoration:underline;text-underline-position:under}.monaco-editor .marker-widget .descriptioncontainer .filename{cursor:pointer}.extension-editor .codicon.codicon-error,.extensions-viewlet>.extensions .codicon.codicon-error,.markers-panel .marker-icon .codicon.codicon-error,.markers-panel .marker-icon.error,.monaco-editor .zone-widget .codicon.codicon-error,.preferences-editor .codicon.codicon-error,.text-search-provider-messages .providerMessage .codicon.codicon-error{color:var(--vscode-problemsErrorIcon-foreground)}.extension-editor .codicon.codicon-warning,.extensions-viewlet>.extensions .codicon.codicon-warning,.markers-panel .marker-icon .codicon.codicon-warning,.markers-panel .marker-icon.warning,.monaco-editor .zone-widget .codicon.codicon-warning,.preferences-editor .codicon.codicon-warning,.text-search-provider-messages .providerMessage .codicon.codicon-warning{color:var(--vscode-problemsWarningIcon-foreground)}.extension-editor .codicon.codicon-info,.extensions-viewlet>.extensions .codicon.codicon-info,.markers-panel .marker-icon .codicon.codicon-info,.markers-panel .marker-icon.info,.monaco-editor .zone-widget .codicon.codicon-info,.preferences-editor .codicon.codicon-info,.text-search-provider-messages .providerMessage .codicon.codicon-info{color:var(--vscode-problemsInfoIcon-foreground)}.monaco-editor .inlineSuggestionsHints.withBorder{background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);color:var(--vscode-editorHoverWidget-foreground);z-index:39}.monaco-editor .inlineSuggestionsHints a,.monaco-editor .inlineSuggestionsHints a:hover{color:var(--vscode-foreground)}.monaco-editor .inlineSuggestionsHints .keybinding{display:flex;margin-left:4px;opacity:.6}.monaco-editor .inlineSuggestionsHints .keybinding .monaco-keybinding-key{font-size:8px;padding:2px 3px}.monaco-editor .inlineSuggestionsHints .availableSuggestionCount a{display:flex;justify-content:center;min-width:19px}.monaco-editor .inlineSuggestionStatusBarItemLabel{margin-right:2px}.monaco-editor .hoverHighlight{background-color:var(--vscode-editor-hoverHighlightBackground)}.monaco-editor .monaco-hover{background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);border-radius:3px;color:var(--vscode-editorHoverWidget-foreground)}.monaco-editor .monaco-hover a{color:var(--vscode-textLink-foreground)}.monaco-editor .monaco-hover a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .monaco-hover .hover-row .actions{background-color:var(--vscode-editorHoverWidget-statusBarBackground)}.monaco-editor .monaco-hover code{background-color:var(--vscode-textCodeBlock-background)}.monaco-editor.hc-light .dnd-target,.monaco-editor.vs .dnd-target{border-right:2px dotted #000;color:#fff}.monaco-editor.vs-dark .dnd-target{border-right:2px dotted #aeafad;color:#51504f}.monaco-editor.hc-black .dnd-target{border-right:2px dotted #fff;color:#000}.monaco-editor.hc-black.mac.mouse-default .view-lines,.monaco-editor.hc-light.mac.mouse-default .view-lines,.monaco-editor.mouse-default .view-lines,.monaco-editor.vs-dark.mac.mouse-default .view-lines{cursor:default}.monaco-editor.hc-black.mac.mouse-copy .view-lines,.monaco-editor.hc-light.mac.mouse-copy .view-lines,.monaco-editor.mouse-copy .view-lines,.monaco-editor.vs-dark.mac.mouse-copy .view-lines{cursor:copy}.inline-editor-progress-decoration{display:inline-block;height:1em;width:1em}.inline-progress-widget{align-items:center;display:flex!important;justify-content:center}.inline-progress-widget .icon{font-size:80%!important}.inline-progress-widget:hover .icon{animation:none;font-size:90%!important}.inline-progress-widget:hover .icon:before{content:"\ea76"}.post-edit-widget{background-color:var(--vscode-editorWidget-background);border:1px solid var(--vscode-widget-border,transparent);border-radius:4px;box-shadow:0 0 8px 2px var(--vscode-widget-shadow);overflow:hidden}.post-edit-widget .monaco-button{border:none;border-radius:0;padding:2px}.post-edit-widget .monaco-button:hover{background-color:var(--vscode-button-secondaryHoverBackground)!important}.post-edit-widget .monaco-button .codicon{margin:0}.monaco-editor .findOptionsWidget{background-color:var(--vscode-editorWidget-background);border:2px solid var(--vscode-contrastBorder);box-shadow:0 0 8px 2px var(--vscode-widget-shadow);color:var(--vscode-editorWidget-foreground)}.monaco-editor .find-widget{border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;height:33px;line-height:19px;overflow:hidden;padding:0 4px;position:absolute;transform:translateY(calc(-100% - 10px));transition:transform .2s linear;z-index:35}.monaco-workbench.reduce-motion .monaco-editor .find-widget{transition:transform 0ms linear}.monaco-editor .find-widget textarea{margin:0}.monaco-editor .find-widget.hiddenEditor{display:none}.monaco-editor .find-widget.replaceToggled>.replace-part{display:flex}.monaco-editor .find-widget.visible{transform:translateY(0)}.monaco-editor .find-widget .monaco-inputbox.synthetic-focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px}.monaco-editor .find-widget .monaco-inputbox .input{background-color:transparent;min-height:0}.monaco-editor .find-widget .monaco-findInput .input{font-size:13px}.monaco-editor .find-widget>.find-part,.monaco-editor .find-widget>.replace-part{display:flex;font-size:12px;margin:3px 25px 0 17px}.monaco-editor .find-widget>.find-part .monaco-inputbox,.monaco-editor .find-widget>.replace-part .monaco-inputbox{min-height:25px}.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.mirror{padding-right:22px}.monaco-editor .find-widget>.find-part .monaco-inputbox>.ibwrapper>.input,.monaco-editor .find-widget>.find-part .monaco-inputbox>.ibwrapper>.mirror,.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.input,.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.mirror{padding-bottom:2px;padding-top:2px}.monaco-editor .find-widget>.find-part .find-actions,.monaco-editor .find-widget>.replace-part .replace-actions{align-items:center;display:flex;height:25px}.monaco-editor .find-widget .monaco-findInput{display:flex;flex:1;vertical-align:middle}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element{width:100%}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element .scrollbar.vertical{opacity:0}.monaco-editor .find-widget .matchesCount{box-sizing:border-box;display:flex;flex:initial;height:25px;line-height:23px;margin:0 0 0 3px;padding:2px 0 0 2px;text-align:center;vertical-align:middle}.monaco-editor .find-widget .button{align-items:center;background-position:50%;background-repeat:no-repeat;border-radius:5px;cursor:pointer;display:flex;flex:initial;height:16px;justify-content:center;margin-left:3px;padding:3px;width:16px}.monaco-editor .find-widget .codicon-find-selection{border-radius:5px;height:22px;padding:3px;width:22px}.monaco-editor .find-widget .button.left{margin-left:0;margin-right:3px}.monaco-editor .find-widget .button.wide{padding:1px 6px;top:-1px;width:auto}.monaco-editor .find-widget .button.toggle{border-radius:0;box-sizing:border-box;height:100%;left:3px;position:absolute;top:0;width:18px}.monaco-editor .find-widget .button.toggle.disabled{display:none}.monaco-editor .find-widget .disabled{color:var(--vscode-disabledForeground);cursor:default}.monaco-editor .find-widget>.replace-part{display:none}.monaco-editor .find-widget>.replace-part>.monaco-findInput{display:flex;flex:auto;flex-grow:0;flex-shrink:0;position:relative;vertical-align:middle}.monaco-editor .find-widget>.replace-part>.monaco-findInput>.controls{position:absolute;right:2px;top:3px}.monaco-editor .find-widget.reduced-find-widget .matchesCount{display:none}.monaco-editor .find-widget.narrow-find-widget{max-width:257px!important}.monaco-editor .find-widget.collapsed-find-widget{max-width:170px!important}.monaco-editor .find-widget.collapsed-find-widget .button.next,.monaco-editor .find-widget.collapsed-find-widget .button.previous,.monaco-editor .find-widget.collapsed-find-widget .button.replace,.monaco-editor .find-widget.collapsed-find-widget .button.replace-all,.monaco-editor .find-widget.collapsed-find-widget>.find-part .monaco-findInput .controls{display:none}.monaco-editor .findMatch{animation-duration:0;animation-name:inherit!important}.monaco-editor .find-widget .monaco-sash{left:0!important}.monaco-editor.hc-black .find-widget .button:before{left:2px;position:relative;top:1px}.monaco-editor .find-widget>.button.codicon-widget-close{position:absolute;right:4px;top:5px}.monaco-editor .margin-view-overlays .codicon-folding-collapsed,.monaco-editor .margin-view-overlays .codicon-folding-expanded,.monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed,.monaco-editor .margin-view-overlays .codicon-folding-manual-expanded{align-items:center;cursor:pointer;display:flex;font-size:140%;justify-content:center;margin-left:2px;opacity:0;transition:opacity .5s}.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-collapsed,.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-expanded,.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed,.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-expanded{transition:initial}.monaco-editor .margin-view-overlays .codicon.alwaysShowFoldIcons,.monaco-editor .margin-view-overlays .codicon.codicon-folding-collapsed,.monaco-editor .margin-view-overlays .codicon.codicon-folding-manual-collapsed,.monaco-editor .margin-view-overlays:hover .codicon{opacity:1}.monaco-editor .inline-folded:after{color:grey;content:"\22EF";cursor:pointer;display:inline;line-height:1em;margin:.1em .2em 0}.monaco-editor .folded-background{background-color:var(--vscode-editor-foldBackground)}.monaco-editor .cldr.codicon.codicon-folding-collapsed,.monaco-editor .cldr.codicon.codicon-folding-expanded,.monaco-editor .cldr.codicon.codicon-folding-manual-collapsed,.monaco-editor .cldr.codicon.codicon-folding-manual-expanded{color:var(--vscode-editorGutter-foldingControlForeground)!important}.monaco-editor .suggest-preview-additional-widget{white-space:nowrap}.monaco-editor .suggest-preview-additional-widget .content-spacer{color:transparent;white-space:pre}.monaco-editor .suggest-preview-additional-widget .button{cursor:pointer;display:inline-block;text-decoration:underline;text-underline-position:under}.monaco-editor .ghost-text-hidden{font-size:0;opacity:0}.monaco-editor .ghost-text-decoration,.monaco-editor .suggest-preview-text .ghost-text{font-style:italic}.monaco-editor .inline-completion-text-to-replace{text-decoration:underline;text-underline-position:under}.monaco-editor .ghost-text-decoration,.monaco-editor .ghost-text-decoration-preview,.monaco-editor .suggest-preview-text .ghost-text{background-color:var(--vscode-editorGhostText-background);border:1px solid var(--vscode-editorGhostText-border);color:var(--vscode-editorGhostText-foreground)!important}.monaco-editor .snippet-placeholder{background-color:var(--vscode-editor-snippetTabstopHighlightBackground,transparent);min-width:2px;outline-color:var(--vscode-editor-snippetTabstopHighlightBorder,transparent);outline-style:solid;outline-width:1px}.monaco-editor .finish-snippet-placeholder{background-color:var(--vscode-editor-snippetFinalTabstopHighlightBackground,transparent);outline-color:var(--vscode-editor-snippetFinalTabstopHighlightBorder,transparent);outline-style:solid;outline-width:1px}.monaco-editor .suggest-widget{border-radius:3px;display:flex;flex-direction:column;width:430px;z-index:40}.monaco-editor .suggest-widget.message{align-items:center;flex-direction:row}.monaco-editor .suggest-details,.monaco-editor .suggest-widget{background-color:var(--vscode-editorSuggestWidget-background);border-color:var(--vscode-editorSuggestWidget-border);border-style:solid;border-width:1px;flex:0 1 auto;width:100%}.monaco-editor.hc-black .suggest-details,.monaco-editor.hc-black .suggest-widget,.monaco-editor.hc-light .suggest-details,.monaco-editor.hc-light .suggest-widget{border-width:2px}.monaco-editor .suggest-widget .suggest-status-bar{border-top:1px solid var(--vscode-editorSuggestWidget-border);box-sizing:border-box;display:none;flex-flow:row nowrap;font-size:80%;justify-content:space-between;overflow:hidden;padding:0 4px;width:100%}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar{display:flex}.monaco-editor .suggest-widget .suggest-status-bar .left{padding-right:8px}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-label{color:var(--vscode-editorSuggestWidgetStatus-foreground)}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label{margin-right:0}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label:after{content:", ";margin-right:.3em}.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore,.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label{width:100%}.monaco-editor .suggest-widget>.message{padding-left:22px}.monaco-editor .suggest-widget>.tree{height:100%;width:100%}.monaco-editor .suggest-widget .monaco-list{-moz-user-select:none;user-select:none;-webkit-user-select:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row{background-position:2px 2px;background-repeat:no-repeat;-mox-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:flex;padding-right:10px;touch-action:none;white-space:nowrap}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused{color:var(--vscode-editorSuggestWidget-selectedForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused .codicon{color:var(--vscode-editorSuggestWidget-selectedIconForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents{flex:1;height:100%;overflow:hidden;padding-left:2px}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main{display:flex;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:pre}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{display:flex}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label{color:var(--vscode-editorSuggestWidget-foreground)}.monaco-editor .suggest-widget:not(.frozen) .monaco-highlighted-label .highlight{font-weight:700}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-highlightForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-focusHighlightForeground)}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:before{color:inherit;cursor:pointer;font-size:14px;opacity:1}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close{position:absolute;right:2px;top:6px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close:hover,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:hover{opacity:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{opacity:.7}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label{opacity:.6;overflow:hidden;text-overflow:ellipsis}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label{align-self:center;font-size:85%;line-height:normal;margin-left:12px;opacity:.4;overflow:hidden;text-overflow:ellipsis}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{font-size:85%;margin-left:1.1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source{display:inline}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label,.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label,.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label{display:inline}.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right.can-expand-details>.details-label{width:calc(100% - 26px)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left{flex-grow:1;flex-shrink:1;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label{flex-shrink:0}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label{max-width:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label{flex-shrink:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{flex-shrink:4;max-width:70%;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:inline-block;height:18px;position:absolute;right:10px;visibility:hidden;width:18px}.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none!important}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore{display:inline-block}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right>.readMore{visibility:visible}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated{opacity:.66;text-decoration:unset}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container{text-decoration:line-through}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label:before{height:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon{background-position:50%;background-repeat:no-repeat;background-size:80%;display:block;height:16px;margin-left:2px;width:16px}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.hide{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .suggest-icon{align-items:center;display:flex;margin-right:4px}.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .icon,.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .suggest-icon:before{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.customcolor .colorspan{border:.1em solid #000;display:inline-block;height:.7em;margin:0 0 0 .3em;width:.7em}.monaco-editor .suggest-details-container{z-index:41}.monaco-editor .suggest-details{color:var(--vscode-editorSuggestWidget-foreground);cursor:default;display:flex;flex-direction:column}.monaco-editor .suggest-details.focused{border-color:var(--vscode-focusBorder)}.monaco-editor .suggest-details a{color:var(--vscode-textLink-foreground)}.monaco-editor .suggest-details a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .suggest-details code{background-color:var(--vscode-textCodeBlock-background)}.monaco-editor .suggest-details.no-docs{display:none}.monaco-editor .suggest-details>.monaco-scrollable-element{flex:1}.monaco-editor .suggest-details>.monaco-scrollable-element>.body{box-sizing:border-box;height:100%;width:100%}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type{flex:2;margin:0 24px 0 0;opacity:.7;overflow:hidden;padding:4px 0 12px 5px;text-overflow:ellipsis;white-space:pre}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type.auto-wrap{white-space:normal;word-break:break-all}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs{margin:0;padding:4px 5px;white-space:pre-wrap}.monaco-editor .suggest-details.no-type>.monaco-scrollable-element>.body>.docs{margin-right:24px;overflow:hidden}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs{min-height:calc(1rem + 8px);padding:0;white-space:normal}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div,.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>span:not(:empty){padding:4px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:first-child{margin-top:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:last-child{margin-bottom:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .monaco-tokenized-source{white-space:pre}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs .code{word-wrap:break-word;white-space:pre-wrap}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .codicon{vertical-align:sub}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>p:empty{display:none}.monaco-editor .suggest-details code{border-radius:3px;padding:0 .4em}.monaco-editor .suggest-details ol,.monaco-editor .suggest-details ul{padding-left:20px}.monaco-editor .suggest-details p code{font-family:var(--monaco-monospace-font)}.monaco-editor.vs .valueSetReplacement{outline:solid 2px var(--vscode-editorBracketMatch-border)}.monaco-editor .linked-editing-decoration{background-color:var(--vscode-editor-linkedEditingBackground);min-width:1px}.monaco-editor .detected-link,.monaco-editor .detected-link-active{text-decoration:underline;text-underline-position:under}.monaco-editor .detected-link-active{color:var(--vscode-editorLink-activeForeground)!important;cursor:pointer}.monaco-editor .focused .selectionHighlight{background-color:var(--vscode-editor-selectionHighlightBackground);border:1px solid var(--vscode-editor-selectionHighlightBorder);box-sizing:border-box}.monaco-editor.hc-black .focused .selectionHighlight,.monaco-editor.hc-light .focused .selectionHighlight{border-style:dotted}.monaco-editor .wordHighlight{background-color:var(--vscode-editor-wordHighlightBackground);border:1px solid var(--vscode-editor-wordHighlightBorder);box-sizing:border-box}.monaco-editor.hc-black .wordHighlight,.monaco-editor.hc-light .wordHighlight{border-style:dotted}.monaco-editor .wordHighlightStrong{background-color:var(--vscode-editor-wordHighlightStrongBackground);border:1px solid var(--vscode-editor-wordHighlightStrongBorder);box-sizing:border-box}.monaco-editor.hc-black .wordHighlightStrong,.monaco-editor.hc-light .wordHighlightStrong{border-style:dotted}.monaco-editor .wordHighlightText{background-color:var(--vscode-editor-wordHighlightTextBackground);border:1px solid var(--vscode-editor-wordHighlightTextBorder);box-sizing:border-box}.monaco-editor.hc-black .wordHighlightText,.monaco-editor.hc-light .wordHighlightText{border-style:dotted}.monaco-editor .parameter-hints-widget{background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);color:var(--vscode-editorHoverWidget-foreground);cursor:default;display:flex;flex-direction:column;line-height:1.5em;z-index:39}.hc-black .monaco-editor .parameter-hints-widget,.hc-light .monaco-editor .parameter-hints-widget{border-width:2px}.monaco-editor .parameter-hints-widget>.phwrapper{display:flex;flex-direction:row;max-width:440px}.monaco-editor .parameter-hints-widget.multiple{min-height:3.3em;padding:0}.monaco-editor .parameter-hints-widget.multiple .body:before{border-left:1px solid var(--vscode-editorHoverWidget-border);content:"";display:block;height:100%;opacity:.5;position:absolute}.monaco-editor .parameter-hints-widget p,.monaco-editor .parameter-hints-widget ul{margin:8px 0}.monaco-editor .parameter-hints-widget .body,.monaco-editor .parameter-hints-widget .monaco-scrollable-element{display:flex;flex:1;flex-direction:column;min-height:100%}.monaco-editor .parameter-hints-widget .signature{padding:4px 5px;position:relative}.monaco-editor .parameter-hints-widget .signature.has-docs:after{border-bottom:1px solid var(--vscode-editorHoverWidget-border);content:"";display:block;left:0;opacity:.5;padding-top:4px;position:absolute;width:100%}.monaco-editor .parameter-hints-widget .docs{padding:0 10px 0 5px;white-space:pre-wrap}.monaco-editor .parameter-hints-widget .docs.empty{display:none}.monaco-editor .parameter-hints-widget .docs a{color:var(--vscode-textLink-foreground)}.monaco-editor .parameter-hints-widget .docs a:hover{color:var(--vscode-textLink-activeForeground);cursor:pointer}.monaco-editor .parameter-hints-widget .docs .markdown-docs{white-space:normal}.monaco-editor .parameter-hints-widget .docs code{background-color:var(--vscode-textCodeBlock-background);border-radius:3px;font-family:var(--monaco-monospace-font);padding:0 .4em}.monaco-editor .parameter-hints-widget .docs .code,.monaco-editor .parameter-hints-widget .docs .monaco-tokenized-source{white-space:pre-wrap}.monaco-editor .parameter-hints-widget .controls{align-items:center;display:none;flex-direction:column;justify-content:flex-end;min-width:22px}.monaco-editor .parameter-hints-widget.multiple .controls{display:flex;padding:0 2px}.monaco-editor .parameter-hints-widget.multiple .button{background-repeat:no-repeat;cursor:pointer;height:16px;width:16px}.monaco-editor .parameter-hints-widget .button.previous{bottom:24px}.monaco-editor .parameter-hints-widget .overloads{font-family:var(--monaco-monospace-font);height:12px;line-height:12px;text-align:center}.monaco-editor .parameter-hints-widget .signature .parameter.active{color:var(--vscode-editorHoverWidget-highlightForeground);font-weight:700}.monaco-editor .parameter-hints-widget .documentation-parameter>.parameter{font-weight:700;margin-right:.5em}.monaco-editor .rename-box{border-radius:4px;color:inherit;z-index:100}.monaco-editor .rename-box.preview{padding:4px 4px 0}.monaco-editor .rename-box .rename-input{border-radius:2px;padding:3px}.monaco-editor .rename-box .rename-label{display:none;opacity:.8}.monaco-editor .rename-box.preview .rename-label{display:inherit}.monaco-editor .sticky-widget{overflow:hidden}.monaco-editor .sticky-widget-line-numbers{background-color:inherit;float:left}.monaco-editor .sticky-widget-lines-scrollable{background-color:inherit;display:inline-block;overflow:hidden;position:absolute;width:var(--vscode-editorStickyScroll-scrollableWidth)}.monaco-editor .sticky-widget-lines{background-color:inherit;position:absolute}.monaco-editor .sticky-line-content,.monaco-editor .sticky-line-number{background-color:inherit;color:var(--vscode-editorLineNumber-foreground);display:inline-block;position:absolute;white-space:nowrap}.monaco-editor .sticky-line-number .codicon-folding-collapsed,.monaco-editor .sticky-line-number .codicon-folding-expanded{float:right;transition:var(--vscode-editorStickyScroll-foldingOpacityTransition)}.monaco-editor .sticky-line-content{background-color:inherit;white-space:nowrap;width:var(--vscode-editorStickyScroll-scrollableWidth)}.monaco-editor .sticky-line-number-inner{display:inline-block;text-align:right}.monaco-editor.hc-black .sticky-widget,.monaco-editor.hc-light .sticky-widget{border-bottom:1px solid var(--vscode-contrastBorder)}.monaco-editor .sticky-line-content:hover{background-color:var(--vscode-editorStickyScrollHover-background);cursor:pointer}.monaco-editor .sticky-widget{background-color:var(--vscode-editorStickyScroll-background);box-shadow:var(--vscode-scrollbar-shadow) 0 3px 2px -2px;width:100%;z-index:4}.monaco-editor .sticky-widget.peek{background-color:var(--vscode-peekViewEditorStickyScroll-background)}.monaco-editor .unicode-highlight{background-color:var(--vscode-editorUnicodeHighlight-background);border:1px solid var(--vscode-editorUnicodeHighlight-border);box-sizing:border-box}.editor-banner{background:var(--vscode-banner-background);box-sizing:border-box;cursor:default;display:flex;font-size:12px;height:26px;overflow:visible;width:100%}.editor-banner .icon-container{align-items:center;display:flex;flex-shrink:0;padding:0 6px 0 10px}.editor-banner .icon-container.custom-icon{background-position:50%;background-repeat:no-repeat;background-size:16px;margin:0 6px 0 10px;padding:0;width:16px}.editor-banner .message-container{align-items:center;display:flex;line-height:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editor-banner .message-container p{margin-block-end:0;margin-block-start:0}.editor-banner .message-actions-container{flex-grow:1;flex-shrink:0;line-height:26px;margin:0 4px}.editor-banner .message-actions-container a.monaco-button{margin:2px 8px;padding:0 12px;width:inherit}.editor-banner .message-actions-container a{margin-left:12px;padding:3px;text-decoration:underline}.editor-banner .action-container{padding:0 10px 0 6px}.editor-banner{background-color:var(--vscode-banner-background)}.editor-banner,.editor-banner .action-container .codicon,.editor-banner .message-actions-container .monaco-link{color:var(--vscode-banner-foreground)}.editor-banner .icon-container .codicon{color:var(--vscode-banner-iconForeground)}.monaco-link{color:var(--vscode-textLink-foreground)}.monaco-link:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .iPadShowKeyboard{background:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ4LjAzNiA0LjAxSDQuMDA4VjMyLjAzaDQ0LjAyOFY0LjAxWk00LjAwOC4wMDhBNC4wMDMgNC4wMDMgMCAwIDAgLjAwNSA0LjAxVjMyLjAzYTQuMDAzIDQuMDAzIDAgMCAwIDQuMDAzIDQuMDAyaDQ0LjAyOGE0LjAwMyA0LjAwMyAwIDAgMCA0LjAwMy00LjAwMlY0LjAxQTQuMDAzIDQuMDAzIDAgMCAwIDQ4LjAzNi4wMDhINC4wMDhaTTguMDEgOC4wMTNoNC4wMDN2NC4wMDNIOC4wMVY4LjAxM1ptMTIuMDA4IDBoLTQuMDAydjQuMDAzaDQuMDAyVjguMDEzWm00LjAwMyAwaDQuMDAydjQuMDAzaC00LjAwMlY4LjAxM1ptMTIuMDA4IDBoLTQuMDAzdjQuMDAzaDQuMDAzVjguMDEzWm00LjAwMiAwaDQuMDAzdjQuMDAzSDQwLjAzVjguMDEzWm0tMjQuMDE1IDguMDA1SDguMDF2NC4wMDNoOC4wMDZ2LTQuMDAzWm00LjAwMiAwaDQuMDAzdjQuMDAzaC00LjAwM3YtNC4wMDNabTEyLjAwOCAwaC00LjAwM3Y0LjAwM2g0LjAwM3YtNC4wMDNabTEyLjAwOCAwdjQuMDAzaC04LjAwNXYtNC4wMDNoOC4wMDVabS0zMi4wMjEgOC4wMDVIOC4wMXY0LjAwM2g0LjAwM3YtNC4wMDNabTQuMDAzIDBoMjAuMDEzdjQuMDAzSDE2LjAxNnYtNC4wMDNabTI4LjAxOCAwSDQwLjAzdjQuMDAzaDQuMDAzdi00LjAwM1oiIGZpbGw9IiM0MjQyNDIiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUzdjM2SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+") 50% no-repeat;border:4px solid #f6f6f6;border-radius:4px;height:36px;margin:0;min-height:0;min-width:0;overflow:hidden;padding:0;position:absolute;resize:none;width:58px}.monaco-editor.vs-dark .iPadShowKeyboard{background:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ4LjAzNiA0LjAxSDQuMDA4VjMyLjAzaDQ0LjAyOFY0LjAxWk00LjAwOC4wMDhBNC4wMDMgNC4wMDMgMCAwIDAgLjAwNSA0LjAxVjMyLjAzYTQuMDAzIDQuMDAzIDAgMCAwIDQuMDAzIDQuMDAyaDQ0LjAyOGE0LjAwMyA0LjAwMyAwIDAgMCA0LjAwMy00LjAwMlY0LjAxQTQuMDAzIDQuMDAzIDAgMCAwIDQ4LjAzNi4wMDhINC4wMDhaTTguMDEgOC4wMTNoNC4wMDN2NC4wMDNIOC4wMVY4LjAxM1ptMTIuMDA4IDBoLTQuMDAydjQuMDAzaDQuMDAyVjguMDEzWm00LjAwMyAwaDQuMDAydjQuMDAzaC00LjAwMlY4LjAxM1ptMTIuMDA4IDBoLTQuMDAzdjQuMDAzaDQuMDAzVjguMDEzWm00LjAwMiAwaDQuMDAzdjQuMDAzSDQwLjAzVjguMDEzWm0tMjQuMDE1IDguMDA1SDguMDF2NC4wMDNoOC4wMDZ2LTQuMDAzWm00LjAwMiAwaDQuMDAzdjQuMDAzaC00LjAwM3YtNC4wMDNabTEyLjAwOCAwaC00LjAwM3Y0LjAwM2g0LjAwM3YtNC4wMDNabTEyLjAwOCAwdjQuMDAzaC04LjAwNXYtNC4wMDNoOC4wMDVabS0zMi4wMjEgOC4wMDVIOC4wMXY0LjAwM2g0LjAwM3YtNC4wMDNabTQuMDAzIDBoMjAuMDEzdjQuMDAzSDE2LjAxNnYtNC4wMDNabTI4LjAxOCAwSDQwLjAzdjQuMDAzaDQuMDAzdi00LjAwM1oiIGZpbGw9IiNDNUM1QzUiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUzdjM2SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+") 50% no-repeat;border:4px solid #252526}.monaco-editor .tokens-inspect-widget{background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);color:var(--vscode-editorHoverWidget-foreground);padding:10px;-moz-user-select:text;user-select:text;-webkit-user-select:text;z-index:50}.monaco-editor.hc-black .tokens-inspect-widget,.monaco-editor.hc-light .tokens-inspect-widget{border-width:2px}.monaco-editor .tokens-inspect-widget .tokens-inspect-separator{background-color:var(--vscode-editorHoverWidget-border);border:0;height:1px}.monaco-editor .tokens-inspect-widget .tm-token{font-family:var(--monaco-monospace-font)}.monaco-editor .tokens-inspect-widget .tm-token-length{float:right;font-size:60%;font-weight:400}.monaco-editor .tokens-inspect-widget .tm-metadata-table{width:100%}.monaco-editor .tokens-inspect-widget .tm-metadata-value{font-family:var(--monaco-monospace-font);text-align:right}.monaco-editor .tokens-inspect-widget .tm-token-type{font-family:var(--monaco-monospace-font)} \ No newline at end of file diff --git a/src/presentation/ui/dist/favicon.ico b/src/presentation/ui/dist/favicon.ico deleted file mode 100644 index 4b5b7e954..000000000 Binary files a/src/presentation/ui/dist/favicon.ico and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/codicon.184be8c3.ttf b/src/presentation/ui/dist/fonts/codicon.184be8c3.ttf deleted file mode 100644 index a071a7a8a..000000000 Binary files a/src/presentation/ui/dist/fonts/codicon.184be8c3.ttf and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/fa-brands-400.150de8ea.ttf b/src/presentation/ui/dist/fonts/fa-brands-400.150de8ea.ttf deleted file mode 100644 index 774d51ac4..000000000 Binary files a/src/presentation/ui/dist/fonts/fa-brands-400.150de8ea.ttf and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/fa-brands-400.e033a13e.woff2 b/src/presentation/ui/dist/fonts/fa-brands-400.e033a13e.woff2 deleted file mode 100644 index 71e318526..000000000 Binary files a/src/presentation/ui/dist/fonts/fa-brands-400.e033a13e.woff2 and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/fa-regular-400.3223dc79.woff2 b/src/presentation/ui/dist/fonts/fa-regular-400.3223dc79.woff2 deleted file mode 100644 index 7f021680b..000000000 Binary files a/src/presentation/ui/dist/fonts/fa-regular-400.3223dc79.woff2 and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/fa-regular-400.d8747423.ttf b/src/presentation/ui/dist/fonts/fa-regular-400.d8747423.ttf deleted file mode 100644 index 8a9d6344d..000000000 Binary files a/src/presentation/ui/dist/fonts/fa-regular-400.d8747423.ttf and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/fa-solid-900.4a2cd718.ttf b/src/presentation/ui/dist/fonts/fa-solid-900.4a2cd718.ttf deleted file mode 100644 index 993dbe1f9..000000000 Binary files a/src/presentation/ui/dist/fonts/fa-solid-900.4a2cd718.ttf and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/fa-solid-900.bb975c96.woff2 b/src/presentation/ui/dist/fonts/fa-solid-900.bb975c96.woff2 deleted file mode 100644 index 5c16cd3e8..000000000 Binary files a/src/presentation/ui/dist/fonts/fa-solid-900.bb975c96.woff2 and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/fa-v4compatibility.0e3a648b.ttf b/src/presentation/ui/dist/fonts/fa-v4compatibility.0e3a648b.ttf deleted file mode 100644 index ab6ae2248..000000000 Binary files a/src/presentation/ui/dist/fonts/fa-v4compatibility.0e3a648b.ttf and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/gNMVW2J8Roq16WD5tFNRaeLQk6-SHQ_R00k4aWHSSmlN.72e220e1.woff2 b/src/presentation/ui/dist/fonts/gNMVW2J8Roq16WD5tFNRaeLQk6-SHQ_R00k4aWHSSmlN.72e220e1.woff2 deleted file mode 100644 index 0e7c58237..000000000 Binary files a/src/presentation/ui/dist/fonts/gNMVW2J8Roq16WD5tFNRaeLQk6-SHQ_R00k4aWHSSmlN.72e220e1.woff2 and /dev/null differ diff --git a/src/presentation/ui/dist/fonts/gNNBW2J8Roq16WD5tFNRaeLQk6-SHQ_R00k4c2_whPnoY9ruReaU4bHmz74m0ZkGH-VBYe1x0TV6x4yFH8F-H_OdzEL3sVTgJtfbYxOLozCN.b713defd.woff b/src/presentation/ui/dist/fonts/gNNBW2J8Roq16WD5tFNRaeLQk6-SHQ_R00k4c2_whPnoY9ruReaU4bHmz74m0ZkGH-VBYe1x0TV6x4yFH8F-H_OdzEL3sVTgJtfbYxOLozCN.b713defd.woff deleted file mode 100644 index 6b251dd80..000000000 Binary files a/src/presentation/ui/dist/fonts/gNNBW2J8Roq16WD5tFNRaeLQk6-SHQ_R00k4c2_whPnoY9ruReaU4bHmz74m0ZkGH-VBYe1x0TV6x4yFH8F-H_OdzEL3sVTgJtfbYxOLozCN.b713defd.woff and /dev/null differ diff --git a/src/presentation/ui/dist/icons/android-chrome-192x192.png b/src/presentation/ui/dist/icons/android-chrome-192x192.png deleted file mode 100644 index 8b2269d64..000000000 Binary files a/src/presentation/ui/dist/icons/android-chrome-192x192.png and /dev/null differ diff --git a/src/presentation/ui/dist/icons/android-chrome-256x256.png b/src/presentation/ui/dist/icons/android-chrome-256x256.png deleted file mode 100644 index a20a192f4..000000000 Binary files a/src/presentation/ui/dist/icons/android-chrome-256x256.png and /dev/null differ diff --git a/src/presentation/ui/dist/icons/apple-touch-icon.png b/src/presentation/ui/dist/icons/apple-touch-icon.png deleted file mode 100644 index d480ae413..000000000 Binary files a/src/presentation/ui/dist/icons/apple-touch-icon.png and /dev/null differ diff --git a/src/presentation/ui/dist/icons/bomb_dark.svg b/src/presentation/ui/dist/icons/bomb_dark.svg deleted file mode 100644 index 6759bc052..000000000 --- a/src/presentation/ui/dist/icons/bomb_dark.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/presentation/ui/dist/icons/bomb_light.svg b/src/presentation/ui/dist/icons/bomb_light.svg deleted file mode 100644 index 39551c083..000000000 --- a/src/presentation/ui/dist/icons/bomb_light.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/presentation/ui/dist/icons/favicon-16x16.png b/src/presentation/ui/dist/icons/favicon-16x16.png deleted file mode 100644 index f457eb0f4..000000000 Binary files a/src/presentation/ui/dist/icons/favicon-16x16.png and /dev/null differ diff --git a/src/presentation/ui/dist/icons/favicon-32x32.png b/src/presentation/ui/dist/icons/favicon-32x32.png deleted file mode 100644 index c161d4dd2..000000000 Binary files a/src/presentation/ui/dist/icons/favicon-32x32.png and /dev/null differ diff --git a/src/presentation/ui/dist/icons/mstile-150x150.png b/src/presentation/ui/dist/icons/mstile-150x150.png deleted file mode 100644 index 19730a893..000000000 Binary files a/src/presentation/ui/dist/icons/mstile-150x150.png and /dev/null differ diff --git a/src/presentation/ui/dist/icons/safari-pinned-tab.svg b/src/presentation/ui/dist/icons/safari-pinned-tab.svg deleted file mode 100644 index ec14efbbf..000000000 --- a/src/presentation/ui/dist/icons/safari-pinned-tab.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - diff --git a/src/presentation/ui/dist/index.html b/src/presentation/ui/dist/index.html deleted file mode 100644 index a7a1121c9..000000000 --- a/src/presentation/ui/dist/index.html +++ /dev/null @@ -1 +0,0 @@ -Infinite OS
    \ No newline at end of file diff --git a/src/presentation/ui/dist/js/320.aca3ffdf.js b/src/presentation/ui/dist/js/320.aca3ffdf.js deleted file mode 100644 index b1294be9f..000000000 --- a/src/presentation/ui/dist/js/320.aca3ffdf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[320],{57320:(e,t,s)=>{s.r(t),s.d(t,{default:()=>p});var l=s(59835),n={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"},o=(0,l._)("div",{style:{"font-size":"30vh"}},"404",-1),a=(0,l._)("div",{class:"text-h2",style:{opacity:"0.4"}},"Oops. Nothing here...",-1);function c(e,t){var s=(0,l.up)("q-btn");return(0,l.wg)(),(0,l.iD)("div",n,[(0,l._)("div",null,[o,a,(0,l.Wm)(s,{class:"q-mt-xl",color:"white","text-color":"blue",unelevated:"",to:"/",label:"Go Overview","no-caps":""})])])}var r=s(11639),i=s(68879),u=s(69984),d=s.n(u);const h={},v=(0,r.Z)(h,[["render",c]]),p=v;d()(h,"components",{QBtn:i.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/381.84e710c0.js b/src/presentation/ui/dist/js/381.84e710c0.js deleted file mode 100644 index 4a19060e2..000000000 --- a/src/presentation/ui/dist/js/381.84e710c0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[381],{16789:(e,a,l)=>{l.r(a),l.d(a,{default:()=>qe});var t=l(59835),s=l(60499),n={class:"flex justify-between items-center"};function o(e,a){var l=(0,t.up)("q-skeleton");return(0,t.wg)(),(0,t.iD)(t.HY,null,[(0,t.Wm)(l,{animation:"wave",height:"50px",width:"30%",class:"q-mx-md"}),(0,t._)("div",n,[((0,t.wg)(),(0,t.iD)(t.HY,null,(0,t.Ko)(9,(function(e){return(0,t.Wm)(l,{animation:"wave",height:"200px",width:"30%",class:"q-ma-md",key:e})})),64))])],64)}var i=l(11639),r=l(57133),p=l(69984),c=l.n(p);const u={},d=(0,i.Z)(u,[["render",o]]),m=d;c()(u,"components",{QSkeleton:r.ZP});var g=l(86970),v=l(62601);const w={class:"flex justify-start items-center q-gutter-md"},b=["src"],f={class:"text-capitalize",style:{"font-size":"1.618rem"}},h={style:{"font-size":"0.9708rem"}},_=["src","onClick"],k=(0,t.aZ)({__name:"MarketplaceAppCard",props:{app:{}},setup(e){const a=e,l=(0,v.R)(),n=(0,s.iH)(0),o=(0,t.Fl)({get:()=>l.getShowSlideDialog,set:e=>l.setShowSlideDialog(e)}),i=(0,t.Fl)({get:()=>l.getSelectedScreenshotIndex,set:e=>l.setSelectedScreenshotIndex(e)}),r=(0,t.Fl)({get:()=>l.getScreenshotUrlsList,set:e=>l.setScreenshotUrlsList(e)});function p(e){i.value=e,r.value=a.app.screenshotUrls,o.value=!0}function c(){l.setSelectedAppToInstall(a.app),l.setShowInstallAppDialog(!0)}return(e,a)=>{const l=(0,t.up)("q-card-section"),s=(0,t.up)("q-btn"),o=(0,t.up)("q-card-actions"),i=(0,t.up)("q-card");return(0,t.wg)(),(0,t.j4)(i,{bordered:"",class:"q-px-md",style:{height:"350px"}},{default:(0,t.w5)((()=>[(0,t.Wm)(l,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t._)("div",w,[(0,t._)("img",{src:e.app.avatarUrl,style:{width:"45px",height:"45px"}},null,8,b),(0,t._)("div",f,(0,g.zw)(e.app.name),1)])])),_:1}),(0,t.Wm)(l,{class:"q-px-none q-pt-none"},{default:(0,t.w5)((()=>[(0,t._)("div",h,(0,g.zw)(e.app.description.length>200?e.app.description.substr(0,200)+"...":e.app.description),1)])),_:1}),(0,t.Wm)(l,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t._)("div",{class:"flex justify-between items-center",style:(0,g.j5)({visibility:e.app.screenshotUrls.length>0?"visible":"hidden"})},[(0,t.Wm)(s,{round:"",flat:"",class:(0,g.C_)({disabled:0===n.value}),icon:"sym_s_arrow_back_ios",color:"primary",size:"xs",onClick:a[0]||(a[0]=e=>n.value=Math.max(n.value-1,0))},null,8,["class"]),((0,t.wg)(),(0,t.iD)(t.HY,null,(0,t.Ko)(3,(a=>(0,t._)("div",{key:a},[(0,t._)("img",{src:e.app.screenshotUrls[n.value+a-1],style:{width:"auto",height:"65px"},class:"cursor-pointer",onClick:e=>p(n.value+a-1)},null,8,_)]))),64)),(0,t.Wm)(s,{round:"",flat:"",class:(0,g.C_)({disabled:n.value+3===e.app.screenshotUrls.length}),color:"primary",icon:"sym_s_arrow_forward_ios",size:"xs",onClick:a[1]||(a[1]=a=>n.value=Math.min(n.value+1,e.app.screenshotUrls.length-3))},null,8,["class"])],4)])),_:1}),(0,t.Wm)(o,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{color:"primary",label:e.$t("marketplaceAppCard.installBtn"),class:"full-width",onClick:a[2]||(a[2]=e=>c())},null,8,["label"])])),_:1})])),_:1})}}});var y=l(44458),q=l(63190),W=l(68879),Z=l(11821);const x=k,Q=x;c()(k,"components",{QCard:y.Z,QCardSection:q.Z,QBtn:W.Z,QCardActions:Z.Z});const S={class:"row justify-center q-mt-md"},I=(0,t.aZ)({__name:"MarketplaceCatalogTable",props:{catalogList:{}},setup(e){const a=e,l=(0,s.iH)(""),n=(0,s.iH)({sortBy:"desc",descending:!1,page:1,rowsPerPage:12}),o=(0,t.Fl)((()=>Math.ceil(a.catalogList.length/n.value.rowsPerPage)));return(e,a)=>{const s=(0,t.up)("q-icon"),i=(0,t.up)("q-input"),r=(0,t.up)("q-table"),p=(0,t.up)("q-pagination"),c=(0,t.up)("q-card-section"),u=(0,t.up)("q-card");return(0,t.wg)(),(0,t.j4)(u,null,{default:(0,t.w5)((()=>[(0,t.Wm)(c,{class:"q-pt-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{grid:"","card-container-class":"marketplace-align-cards","hide-header":"",rows:e.catalogList,filter:l.value,"row-key":"key",color:"primary",pagination:n.value,"onUpdate:pagination":a[1]||(a[1]=e=>n.value=e),"no-data-label":e.$t("marketplaceTable.notFound"),"hide-pagination":"",class:"marketplace-table"},{top:(0,t.w5)((()=>[(0,t.Wm)(i,{filled:"",debounce:"300",color:"primary",modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=e=>l.value=e),"stack-label":"",label:e.$t("marketplaceTable.inputSearch"),maxlength:"32",class:"marketplace-col-app q-mb-md"},{prepend:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"fas fa-search"})])),_:1},8,["modelValue","label"])])),item:(0,t.w5)((e=>[(0,t.Wm)(Q,{app:e.row,class:"marketplace-col-app"},null,8,["app"])])),_:1},8,["rows","filter","pagination","no-data-label"]),(0,t._)("div",S,[(0,t.Wm)(p,{modelValue:n.value.page,"onUpdate:modelValue":a[2]||(a[2]=e=>n.value.page=e),color:"primary",max:o.value,size:"md"},null,8,["modelValue","max"])])])),_:1})])),_:1})}}});var C=l(84277),V=l(13119),A=l(22857),D=l(80996);const U=I,L=U;c()(I,"components",{QCard:y.Z,QCardSection:q.Z,QTable:C.Z,QInput:V.Z,QIcon:A.Z,QPagination:D.Z});const F=(0,t.aZ)({__name:"MarketplaceCatalog",props:{catalogList:{}},setup(e){const a=e,l=(0,s.iH)(14),n=(0,s.iH)("apps"),o=(0,t.Fl)((()=>a.catalogList.filter((e=>"app"===e.type)))),i=(0,t.Fl)((()=>a.catalogList.filter((e=>"stack"===e.type)))),r=(0,t.Fl)((()=>a.catalogList.filter((e=>"framework"===e.type))));return(e,a)=>{const s=(0,t.up)("q-tab"),p=(0,t.up)("q-tabs"),c=(0,t.up)("q-tab-panel"),u=(0,t.up)("q-tab-panels"),d=(0,t.up)("q-splitter"),m=(0,t.up)("q-card");return(0,t.wg)(),(0,t.j4)(m,{flat:""},{default:(0,t.w5)((()=>[(0,t.Wm)(d,{modelValue:l.value,"onUpdate:modelValue":a[2]||(a[2]=e=>l.value=e),style:{height:"100vh"}},{before:(0,t.w5)((()=>[(0,t.Wm)(p,{modelValue:n.value,"onUpdate:modelValue":a[0]||(a[0]=e=>n.value=e),vertical:"",class:"text-primary","active-color":"primary","indicator-color":"primary",align:"justify","inline-label":"","no-caps":""},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"apps",class:"marketplace-tabs",label:"Apps",disable:0===o.value.length},null,8,["disable"]),(0,t.Wm)(s,{name:"stacks",class:"marketplace-tabs",label:"Stacks",disable:0===i.value.length},null,8,["disable"]),(0,t.Wm)(s,{name:"frameworks",class:"marketplace-tabs",label:"Frameworks",disable:0===r.value.length},null,8,["disable"])])),_:1},8,["modelValue"])])),after:(0,t.w5)((()=>[(0,t.Wm)(u,{modelValue:n.value,"onUpdate:modelValue":a[1]||(a[1]=e=>n.value=e),animated:"","keep-alive":"",vertical:""},{default:(0,t.w5)((()=>[(0,t.Wm)(c,{class:"q-pa-none",name:"apps"},{default:(0,t.w5)((()=>[(0,t.Wm)(L,{catalogList:o.value},null,8,["catalogList"])])),_:1}),(0,t.Wm)(c,{class:"q-pa-none",name:"stacks"},{default:(0,t.w5)((()=>[(0,t.Wm)(L,{catalogList:i.value},null,8,["catalogList"])])),_:1}),(0,t.Wm)(c,{class:"q-pa-none",name:"frameworks"},{default:(0,t.w5)((()=>[(0,t.Wm)(L,{catalogList:r.value},null,8,["catalogList"])])),_:1})])),_:1},8,["modelValue"])])),_:1},8,["modelValue"])])),_:1})}}});var T=l(7498),H=l(47817),j=l(70900),P=l(89800),z=l(84106);const M=F,$=M;c()(F,"components",{QCard:y.Z,QSplitter:T.Z,QTabs:H.Z,QTab:j.Z,QTabPanels:P.Z,QTabPanel:z.Z});var B=l(97510);const K={class:"flex justify-between items-center"},R={class:"title-h6"},Y=["name","src"],E=(0,t.aZ)({__name:"MarketplaceSlideDialog",setup(e){const a=(0,v.R)(),l=(0,t.Fl)({get:()=>a.getSelectedScreenshotIndex,set:e=>a.setSelectedScreenshotIndex(e)}),s=(0,t.Fl)({get:()=>a.getShowSlideDialog,set:e=>a.setShowSlideDialog(e)}),n=(0,t.Fl)({get:()=>a.getScreenshotUrlsList,set:e=>a.setScreenshotUrlsList(e)});function o(){s.value=!1}return(e,a)=>{const i=(0,t.up)("q-btn"),r=(0,t.up)("q-carousel"),p=(0,t.up)("q-card-section"),c=(0,t.up)("q-card"),u=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(u,{modelValue:s.value,"onUpdate:modelValue":a[2]||(a[2]=e=>s.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(c,{class:"dialog-card-bg",style:{width:"1200px","max-width":"80vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",K,[(0,t._)("div",R,(0,g.zw)(l.value+1)+" / "+(0,g.zw)(n.value.length),1),(0,t.Wm)(i,{flat:"",round:"",dense:"",icon:"sym_s_close",onClick:a[0]||(a[0]=e=>o())})]),(0,t.Wm)(p,null,{default:(0,t.w5)((()=>[(0,t.Wm)(r,{swipeable:"",animated:"",modelValue:l.value,"onUpdate:modelValue":a[1]||(a[1]=e=>l.value=e),arrows:"","control-color":"primary","control-text-color":"white","control-type":"regular",style:{height:"auto"}},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(n.value,((e,a)=>((0,t.wg)(),(0,t.iD)("img",{key:a,name:a,src:e,style:{width:"100%"}},null,8,Y)))),128))])),_:1},8,["modelValue"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var N=l(32074),X=l(97052);const G=E,J=G;c()(E,"components",{QDialog:N.Z,QCard:y.Z,QBtn:W.Z,QCardSection:q.Z,QCarousel:X.Z});var O=l(88850),ee=l(21647),ae=l(84278),le=l(9704),te=l(88900),se=l(25121),ne=l(45273);const oe={class:"flex justify-between items-center"},ie={class:"title-dialog"},re=["innerHTML"],pe={key:0,class:"marketplace-data-fields-box"},ce={class:"flex justify-between items-center q-mb-md"},ue={class:"title-h6"},de=(0,t.aZ)({__name:"MarketplaceInstallAppDialog",setup(e){const a=(0,v.R)(),l=(0,se.QT)().t,n=(0,s.iH)(""),o=(0,s.iH)(""),i=(0,s.iH)([]),r=(0,t.Fl)({get:()=>a.getShowInstallAppDialog,set:e=>a.setShowInstallAppDialog(e)}),p=(0,t.Fl)((()=>a.getSelectedAppToInstall)),c=(0,t.Fl)({get:()=>a.getKeyMarketplaceTable,set:e=>a.setKeyMarketplaceTable(e)});function u(){r.value=!1}function d(){(0,ne.Q)();const e={slug:p.value.slugs[0],hostname:o.value};n.value&&(e.urlPath=n.value),i.value.length>0&&(e.dataFields=i.value);const a=new le.Z,t=!1,s=!0;a.installApp(e).then((()=>{(0,te.LX)(l("marketplaceInstallAppDialog.installAppSuccess"),"bottom",t,s),setTimeout((()=>{u(),c.value++}),1e3)})).catch((e=>{console.error(e),(0,te.s9)(e.response.data,l("marketplaceInstallAppDialog.installAppWithError"),"bottom",t,s)})).finally((()=>{(0,ne.Z)()}))}return(e,a)=>{const l=(0,t.up)("q-btn"),s=(0,t.up)("q-banner"),c=(0,t.up)("q-tooltip"),m=(0,t.up)("q-icon"),v=(0,t.up)("q-card-section"),w=(0,t.up)("q-card-actions"),b=(0,t.up)("q-card"),f=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(f,{modelValue:r.value,"onUpdate:modelValue":a[5]||(a[5]=e=>r.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(b,{class:"dialog-card-bg",style:{width:"1000px","max-width":"80vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",oe,[(0,t._)("div",ie,(0,g.zw)(e.$t("marketplaceInstallAppDialog.title",{appName:p.value.name})),1),(0,t.Wm)(l,{flat:"",round:"",dense:"",icon:"sym_s_close",onClick:a[0]||(a[0]=e=>u())})]),(0,t.Wm)(s,{class:"dialog-info"},{default:(0,t.w5)((()=>[(0,t._)("div",{innerHTML:e.$t("marketplaceInstallAppDialog.subtitle")},null,8,re)])),_:1}),(0,t.Wm)(v,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(ee.Z,{class:"q-mb-md","onUpdate:selectedHostname":a[1]||(a[1]=e=>o.value=e),"onUpdate:installDirectory":a[2]||(a[2]=e=>n.value=e)}),p.value.dataFields.length>0?((0,t.wg)(),(0,t.iD)("div",pe,[(0,t._)("div",ce,[(0,t._)("div",ue,(0,g.zw)(e.$t("marketplaceInstallAppDialog.installParams")),1),(0,t.Wm)(m,{name:"sym_s_help",class:"text-white",size:"sm"},{default:(0,t.w5)((()=>[(0,t.Wm)(c,{anchor:"bottom middle",class:"bg-primary",style:{"font-size":"14px"},offset:[10,10]},{default:(0,t.w5)((()=>[(0,t.Uk)((0,g.zw)(e.$t("marketplaceInstallAppDialog.descriptionInstallParams")),1)])),_:1})])),_:1})]),((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(p.value.dataFields,((e,a)=>((0,t.wg)(),(0,t.iD)("div",{key:a,class:"q-mb-md"},[(0,t.Wm)(O.Z,{style:{width:"100%"},isRequired:e.isRequired,defaultValue:e.defaultValue,label:e.label,options:e.options,type:e.type,name:e.name,"onUpdate:dataFields":e=>i.value[a]=e},null,8,["isRequired","defaultValue","label","options","type","name","onUpdate:dataFields"])])))),128))])):(0,t.kq)("",!0)])),_:1}),(0,t.Wm)(w,{class:"q-px-none q-pt-none",align:"between"},{default:(0,t.w5)((()=>[(0,t.Wm)(ae.Z,{color:"grey-8",label:e.$t("marketplaceInstallAppDialog.cancelBtn"),onClick:a[3]||(a[3]=e=>u())},null,8,["label"]),(0,t.Wm)(ae.Z,{color:"primary",label:e.$t("marketplaceInstallAppDialog.confirmBtn"),disable:null===p.value||""===o.value,onClick:a[4]||(a[4]=e=>d())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var me=l(47128),ge=l(46858);const ve=de,we=ve;c()(de,"components",{QDialog:N.Z,QCard:y.Z,QBtn:W.Z,QBanner:me.Z,QCardSection:q.Z,QIcon:A.Z,QTooltip:ge.Z,QCardActions:Z.Z});var be=l(84019);const fe={style:{padding:"0 16px"}},he=(0,t.aZ)({__name:"MarketplaceIndex",setup(e){const a=(0,se.QT)().t,l=(0,v.R)(),n=new le.Z,o=(0,s.iH)("installed-apps"),i=(0,s.iH)([]),r=(0,s.iH)([]),p=(0,s.iH)(0),c=(0,s.iH)(!1),u=(0,s.iH)(!1),d=(0,t.Fl)((()=>c.value||u.value)),g=(0,t.Fl)((()=>l.getKeyMarketplaceTable)),w=(0,t.Fl)((()=>l.getShowInstallAppDialog));function b(){c.value=!0,n.getCatalog().then((e=>{i.value=e.data.body.marketplaceCatalogItems})).catch((e=>{console.error(e),(0,te.s9)(e.response.data,a("marketplaceIndex.getCatalogWithError"))})).finally((()=>{c.value=!1}))}function f(){u.value=!0,n.getInstalledApps().then((e=>{var a;r.value=null!==(a=e.data.body.marketplaceInstalledItems)&&void 0!==a?a:[]})).catch((e=>{console.error(e),(0,te.s9)(e.response.data,a("marketplaceIndex.getInstalledAppsWithError"))})).finally((()=>{u.value=!1}))}return(0,t.bv)((()=>{b(),f()})),(0,t.YP)(g,(()=>{b(),f()})),(0,t.YP)(w,(()=>{!1!==w.value&&p.value++})),(e,a)=>{const l=(0,t.up)("q-tab"),s=(0,t.up)("q-tabs"),n=(0,t.up)("q-separator"),c=(0,t.up)("q-tab-panel"),u=(0,t.up)("q-tab-panels"),g=(0,t.up)("q-card"),v=(0,t.up)("q-page");return(0,t.wg)(),(0,t.j4)(v,null,{default:(0,t.w5)((()=>[(0,t.Wm)(J),((0,t.wg)(),(0,t.j4)(we,{key:p.value})),(0,t.Wm)(be.Z),(0,t._)("div",fe,[d.value?((0,t.wg)(),(0,t.j4)(m,{key:0})):((0,t.wg)(),(0,t.j4)(g,{key:1,flat:""},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{modelValue:o.value,"onUpdate:modelValue":a[0]||(a[0]=e=>o.value=e),class:"text-primary","active-color":"primary","indicator-color":"primary",align:"justify","inline-label":""},{default:(0,t.w5)((()=>[(0,t.Wm)(l,{name:"installed-apps",class:"marketplace-tabs",label:e.$t("marketplaceIndex.installedApps")},null,8,["label"]),(0,t.Wm)(l,{name:"catalog",class:"marketplace-tabs",label:e.$t("marketplaceIndex.catalog")},null,8,["label"])])),_:1},8,["modelValue"]),(0,t.Wm)(n),(0,t.Wm)(u,{modelValue:o.value,"onUpdate:modelValue":a[1]||(a[1]=e=>o.value=e),animated:"",swipeable:"","transition-prev":"jump-up","transition-next":"jump-up"},{default:(0,t.w5)((()=>[(0,t.Wm)(c,{name:"installed-apps"},{default:(0,t.w5)((()=>[(0,t.Wm)(B.Z,{installedAppsList:r.value,showInstallAppBtn:!1},null,8,["installedAppsList"])])),_:1}),(0,t.Wm)(c,{name:"catalog"},{default:(0,t.w5)((()=>[(0,t.Wm)($,{catalogList:i.value},null,8,["catalogList"])])),_:1})])),_:1},8,["modelValue"])])),_:1}))])])),_:1})}}});var _e=l(69885),ke=l(50926);const ye=he,qe=ye;c()(he,"components",{QPage:_e.Z,QCard:y.Z,QTabs:H.Z,QTab:j.Z,QSeparator:ke.Z,QTabPanels:P.Z,QTabPanel:z.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/437.08c85139.js b/src/presentation/ui/dist/js/437.08c85139.js deleted file mode 100644 index 75e30e2b6..000000000 --- a/src/presentation/ui/dist/js/437.08c85139.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[437],{67437:(e,t,a)=>{a.r(t),a.d(t,{default:()=>de});var l=a(59835),s=a(86970),r=a(28339),n=a(25121),o=a(60499),u=a(94629),c=a(85118),i=a(20503);const d=(0,l.aZ)({__name:"RefreshRateSelect",setup(e){const t=(0,c.V)(),a=new i.Z,s=[5,20,40,60,120,180].map((e=>({label:e+"s",value:e}))),n=(0,l.Fl)((()=>{const e=(0,r.yj)();return"/overview"===e.path})),d=(0,l.Fl)({get:()=>t.getSelectedRefreshRate,set:e=>t.setSelectedRefreshRate(e)});return(0,l.bv)((()=>{d.value=a.getRefreshRate()})),(0,l.YP)(d,(e=>{a.setRefreshRate(e)})),(e,t)=>n.value?((0,l.wg)(),(0,l.j4)(u.Z,{key:0,modelValue:d.value,"onUpdate:modelValue":t[0]||(t[0]=e=>d.value=e),options:(0,o.SU)(s),label:e.$t("refreshRateSelect.selectRefreshRate"),class:"refresh-rate-select"},null,8,["modelValue","options","label"])):(0,l.kq)("",!0)}}),m=d,p=m,g={class:"row justify-start items-center"},v={class:"title-h4 top-bar-text"},f=(0,l.aZ)({__name:"TopBar",setup(e){const t=(0,n.QT)().t;function a(){const e=(0,r.yj)();return e.meta.title?t(e.meta.title.toString()):""}const o=(0,l.Fl)((()=>{const e=(0,r.yj)();return e.meta.icon?e.meta.icon.toString():""}));return(e,t)=>{const r=(0,l.up)("q-icon"),n=(0,l.up)("q-space"),u=(0,l.up)("q-toolbar"),c=(0,l.up)("q-header");return(0,l.wg)(),(0,l.j4)(c,{class:"bg-transparent q-px-xs q-py-sm"},{default:(0,l.w5)((()=>[(0,l.Wm)(u,null,{default:(0,l.w5)((()=>[(0,l._)("div",g,[(0,l.Wm)(r,{color:"primary",name:o.value,size:"md",class:"q-mr-sm"},null,8,["name"]),(0,l._)("div",v,(0,s.zw)(a()),1)]),(0,l.Wm)(n),(0,l.Wm)(p)])),_:1})])),_:1})}}});var h=a(16602),w=a(51663),_=a(22857),b=a(90136),y=a(69984),x=a.n(y);const U=f,q=U;x()(f,"components",{QHeader:h.Z,QToolbar:w.Z,QIcon:_.Z,QSpace:b.Z});var Z=a(37747);const W={class:"row justify-between items-center"},z=(0,l.aZ)({__name:"ProfileCard",setup(e){function t(){const e=new Z.Z;e.logout()}return(e,a)=>{const r=(0,l.up)("q-btn"),n=(0,l.up)("q-tooltip");return(0,l.wg)(),(0,l.iD)("div",W,[(0,l._)("div",null,[(0,l.Wm)(r,{dense:"",color:"primary",icon:"sym_s_settings",size:"sm",to:"/settings"}),(0,l.Wm)(n,{anchor:"bottom middle",class:"bg-primary",style:{"font-size":"14px"}},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.$t("profileCard.btnSettings")),1)])),_:1})]),(0,l._)("div",null,[(0,l.Wm)(r,{dense:"",color:"grey-7",icon:"sym_s_logout",size:"sm",onClick:a[0]||(a[0]=e=>t())},{default:(0,l.w5)((()=>[(0,l.Wm)(n,{anchor:"bottom middle",class:"bg-grey-7",style:{"font-size":"14px"}},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.$t("profileCard.btnLogout")),1)])),_:1})])),_:1})])])}}});var k=a(68879),Q=a(46858);const R=z,M=R;x()(z,"components",{QBtn:k.Z,QTooltip:Q.Z});var S=a(19302),P=a(53105);const j={style:{"text-align":"center",padding:"0 8px"}},$=["src"],I={class:"column items-center"},F={class:"col",style:{"font-size":"12px"}},B=(0,l.aZ)({__name:"SideBarMenu",setup(e){const t=(0,n.QT)().t,a={right:"4px",borderRadius:"5px",backgroundColor:"#c97350",width:"5px",opacity:.75},u={right:"2px",borderRadius:"9px",backgroundColor:"#c97350",width:"9px",opacity:.2},c=(0,o.iH)(),i=(0,l.Fl)((()=>{const e=(0,S.Z)(),t=(0,P.Z)();return e.dark.isActive?t+"assets/os-logo-dark.svg":t+"assets/os-logo-light.svg"}));function d(){const e=(0,r.tv)().getRoutes();let a=[];return e.forEach((e=>{const l=e.children||[];l.forEach((e=>{var l,s,r,n,o,u,c,i,d,m;!1!==(null===(l=e.meta)||void 0===l?void 0:l.isMenuItem)&&a.push({title:null!==(r=t(`${null===(s=e.meta)||void 0===s?void 0:s.title}`))&&void 0!==r?r:"",icon:null!==(u=null===(o=null===(n=e.meta)||void 0===n?void 0:n.icon)||void 0===o?void 0:o.toString())&&void 0!==u?u:"",path:e.path,disabled:null!==(i=null===(c=e.meta)||void 0===c?void 0:c.disabled)&&void 0!==i&&i,useHref:null!==(m=null===(d=e.meta)||void 0===d?void 0:d.useHref)&&void 0!==m&&m})}))})),a}return(0,l.wF)((()=>{c.value=d()})),(e,r)=>{const n=(0,l.up)("router-link"),d=(0,l.up)("q-avatar"),m=(0,l.up)("q-tooltip"),p=(0,l.up)("q-item"),g=(0,l.up)("q-list"),v=(0,l.up)("q-scroll-area"),f=(0,l.up)("q-drawer"),h=(0,l.Q2)("ripple");return(0,l.wg)(),(0,l.j4)(f,{mini:!0,side:"left",bordered:"","show-if-above":"","mini-width":100},{default:(0,l.w5)((()=>[(0,l._)("div",j,[(0,l.Wm)(n,{to:"/"},{default:(0,l.w5)((()=>[(0,l._)("img",{src:i.value,alt:"Infinite OS",style:{"margin-top":"20px",height:"1.82rem"}},null,8,$)])),_:1})]),(0,l.Wm)(M,{class:"q-pt-md q-px-md"}),(0,l.Wm)(v,{"thumb-style":a,"bar-style":u,style:{height:"calc(100% - 100px)","margin-top":"10px"}},{default:(0,l.w5)((()=>[(0,l.Wm)(g,{style:{padding:"0 4px","text-align":"center","overflow-x":"hidden"}},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(c.value,((e,a)=>(0,l.wy)(((0,l.wg)(),(0,l.j4)(p,(0,l.dG)({key:a},e.useHref?{href:e.path}:{to:e.path},{disable:e.disabled,clickable:""}),{default:(0,l.w5)((()=>[(0,l._)("div",I,[(0,l.Wm)(d,{icon:e.icon,class:"icon-menu-bg"},null,8,["icon"]),(0,l._)("div",F,(0,s.zw)(e.title),1)]),e.disabled?((0,l.wg)(),(0,l.j4)(m,{key:0,anchor:"center end",class:"bg-primary",style:{"font-size":"14px"}},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)((0,o.SU)(t)("sideBarMenu.disabled")),1)])),_:1})):(0,l.kq)("",!0)])),_:2},1040,["disable"])),[[h]]))),128))])),_:1})])),_:1})])),_:1})}}});var C=a(10906),H=a(66663),T=a(13246),L=a(490),V=a(61357),A=a(51136);const D=B,Y=D;x()(B,"components",{QDrawer:C.Z,QScrollArea:H.Z,QList:T.Z,QItem:L.Z,QAvatar:V.Z,QTooltip:Q.Z}),x()(B,"directives",{Ripple:A.Z});var E=a(61957),G=a(87178),K=a(16397);const O={class:"flex justify-end items-center"},J={class:"absolute-full flex flex-center"},N={class:"absolute-full flex flex-center"},X={class:"absolute-full flex flex-center"},ee=(0,l.aZ)({__name:"FooterBar",setup(e){const t=(0,r.yj)(),a=(0,c.V)(),n=(0,K.n)(),u=new G.Z,i=(0,o.iH)(),d=(0,l.Fl)({get:()=>n.getSystemInfo,set:e=>n.setSystemInfo(e)}),m=(0,l.Fl)((()=>a.getSelectedRefreshRate)),p=(0,l.Fl)((()=>t.path));function g(e){return e<50?"green":e<80?"orange":"red"}function v(){i.value&&clearInterval(i.value),i.value=setInterval((()=>{u.getSystemInfo().then((e=>{d.value=e.data.body})).catch((e=>{console.error(e)}))}),1e3*m.value)}return(0,l.Ah)((()=>{clearInterval(i.value)})),(0,l.YP)(p,(()=>{clearInterval(i.value),"/overview"!==p.value&&v()})),(e,t)=>{const a=(0,l.up)("q-tooltip"),r=(0,l.up)("q-icon"),n=(0,l.up)("q-badge"),o=(0,l.up)("q-linear-progress"),u=(0,l.up)("q-footer");return(0,l.wg)(),(0,l.j4)(u,{bordered:"",class:"q-px-lg",style:{"min-height":"30px"}},{default:(0,l.w5)((()=>[(0,l.wy)((0,l._)("div",O,[(0,l.Wm)(r,{name:"sym_s_terminal",size:"1.618rem",class:"disabled q-mr-md"},{default:(0,l.w5)((()=>[(0,l.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.$t("footerBar.disabled")),1)])),_:1})])),_:1}),(0,l.Wm)(r,{name:"sym_s_speed",size:"sm",class:"q-mr-xs"}),(0,l.Wm)(o,{stripe:"",rounded:"",size:"20px",class:"q-mr-md",value:Math.trunc(d.value.currentUsage.cpuUsagePercent)/100,color:g(Math.trunc(d.value.currentUsage.cpuUsagePercent)),label:`${Math.trunc(d.value.currentUsage.cpuUsagePercent)}%`,style:{width:"100px"}},{default:(0,l.w5)((()=>[(0,l._)("div",J,[(0,l.Wm)(n,{color:"white","text-color":"grey-10",label:`${Math.trunc(d.value.currentUsage.cpuUsagePercent)}%`},null,8,["label"])]),(0,l.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.$t("footerBar.cpuUsage",{cpuUsage:Math.trunc(d.value.currentUsage.cpuUsagePercent)})),1)])),_:1})])),_:1},8,["value","color","label"]),(0,l.Wm)(r,{name:"sym_s_memory",size:"sm",class:"q-mr-xs"}),(0,l.Wm)(o,{stripe:"",rounded:"",class:"q-mr-md",size:"20px",value:Math.trunc(d.value.currentUsage.memUsagePercent)/100,color:g(Math.trunc(d.value.currentUsage.memUsagePercent)),label:`${Math.trunc(d.value.currentUsage.memUsagePercent)}%`,style:{width:"100px"}},{default:(0,l.w5)((()=>[(0,l._)("div",N,[(0,l.Wm)(n,{color:"white","text-color":"grey-10",label:`${Math.trunc(d.value.currentUsage.memUsagePercent)}%`},null,8,["label"])]),(0,l.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.$t("footerBar.ramUsage",{ramUsage:Math.trunc(d.value.currentUsage.memUsagePercent)})),1)])),_:1})])),_:1},8,["value","color","label"]),(0,l.Wm)(r,{name:"sym_s_sd_card",size:"sm",class:"q-mr-xs"}),(0,l.Wm)(o,{stripe:"",rounded:"",size:"20px",value:Math.trunc(d.value.currentUsage.storageUsage)/100,color:g(Math.trunc(d.value.currentUsage.storageUsage)),label:`${Math.trunc(d.value.currentUsage.storageUsage)}%`,style:{width:"100px"}},{default:(0,l.w5)((()=>[(0,l._)("div",X,[(0,l.Wm)(n,{color:"white","text-color":"grey-10",label:`${Math.trunc(d.value.currentUsage.storageUsage)}%`},null,8,["label"])]),(0,l.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.$t("footerBar.storageUsage",{storageUsage:Math.trunc(d.value.currentUsage.storageUsage)})),1)])),_:1})])),_:1},8,["value","color","label"])],512),[[E.F8,d.value.hostname]])])),_:1})}}});var te=a(11639),ae=a(71378),le=a(8289),se=a(20990);const re=(0,te.Z)(ee,[["__scopeId","data-v-12090e64"]]),ne=re;x()(ee,"components",{QFooter:ae.Z,QIcon:_.Z,QTooltip:Q.Z,QLinearProgress:le.Z,QBadge:se.Z});const oe=(0,l.aZ)({__name:"MainLayout",setup(e){return(e,t)=>{const a=(0,l.up)("router-view"),s=(0,l.up)("q-page-container"),r=(0,l.up)("q-layout");return(0,l.wg)(),(0,l.j4)(r,{view:"lhh LpR lFf"},{default:(0,l.w5)((()=>[(0,l.Wm)(q),(0,l.Wm)(Y),(0,l.Wm)(s,null,{default:(0,l.w5)((()=>[(0,l.Wm)(a)])),_:1}),(0,l.Wm)(ne)])),_:1})}}});var ue=a(20249),ce=a(12133);const ie=oe,de=ie;x()(oe,"components",{QLayout:ue.Z,QPageContainer:ce.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/506.7fec36d0.js b/src/presentation/ui/dist/js/506.7fec36d0.js deleted file mode 100644 index 9f7897ebd..000000000 --- a/src/presentation/ui/dist/js/506.7fec36d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[506],{73403:(e,a,t)=>{t.r(a),t.d(a,{default:()=>ve});var l=t(59835),o=t(86970),s=t(60499),n=t(61957),c=t(15521),i=t(84278),u=t(26557),r=t(87713),d=t(63064),p=t(25971),g=t(88900),w=t(3746);const m=(0,w.Q_)("accounts",{state:()=>({keyAccountsTable:0,showUpdatePasswordDialog:!1,showUpdateApiKeyDialog:!1,showDeleteUserDialog:!1,keyUpdatePasswordDialog:0,keyUpdateApiKeyDialog:0,accountSelected:{id:0,groupId:0,username:""}}),getters:{getKeyAccountsTable(e){return e.keyAccountsTable},getShowUpdatePasswordDialog(e){return e.showUpdatePasswordDialog},getShowUpdateApiKeyDialog(e){return e.showUpdateApiKeyDialog},getShowDeleteUserDialog(e){return e.showDeleteUserDialog},getKeyUpdatePasswordDialog(e){return e.keyUpdatePasswordDialog},getKeyUpdateApiKeyDialog(e){return e.keyUpdateApiKeyDialog},getAccountSelected(e){return e.accountSelected}},actions:{setKeyAccountsTable(e){this.keyAccountsTable=e},setShowUpdatePasswordDialog(e){this.showUpdatePasswordDialog=e},setShowUpdateApiKeyDialog(e){this.showUpdateApiKeyDialog=e},setShowDeleteUserDialog(e){this.showDeleteUserDialog=e},setKeyUpdatePasswordDialog(e){this.keyUpdatePasswordDialog=e},setKeyUpdateApiKeyDialog(e){this.keyUpdateApiKeyDialog=e},setAccountSelected(e){this.accountSelected=e}}});var y=t(25121);const D={class:"flex justify-between items-center"},v={class:"title-dialog"},U=(0,l.aZ)({__name:"AccountsCreateUserDialog",props:{showCreateUserDialog:{type:Boolean}},emits:["update:showCreateUserDialog"],setup(e,{emit:a}){const t=e,w=(0,y.QT)().t,U=m(),_=(0,s.iH)(t.showCreateUserDialog),h=(0,s.iH)(""),b=(0,s.iH)(""),f=(0,s.iH)(!1),A=(0,l.Fl)((()=>h.value.length>=3)),Z=(0,l.Fl)({get:()=>U.getKeyAccountsTable,set:e=>{U.setKeyAccountsTable(e)}});function k(){_.value=!1}function W(){const e=new p.Z;e.createAccount({username:h.value,password:b.value}).then((()=>{(0,g.LX)(w("accountsCreateUserDialog.createdSuccessfully")),Z.value++,k()})).catch((e=>{(0,g.s9)(e.response.data,w("accountsCreateUserDialog.errorCreatingAccount"))}))}return(0,l.YP)((()=>t.showCreateUserDialog),(e=>{_.value=e})),(0,l.YP)(_,(e=>{a("update:showCreateUserDialog",e)})),(e,a)=>{const t=(0,l.up)("q-btn"),s=(0,l.up)("q-card-section"),p=(0,l.up)("q-card-actions"),g=(0,l.up)("q-card"),w=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(w,{modelValue:_.value,"onUpdate:modelValue":a[7]||(a[7]=e=>_.value=e),persistent:""},{default:(0,l.w5)((()=>[(0,l.Wm)(g,{style:{width:"700px","max-width":"80vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",D,[(0,l._)("div",v,(0,o.zw)(e.$t("accountsCreateUserDialog.title")),1),(0,l.Wm)(t,{flat:"",round:"",dense:"",icon:"sym_s_close",onClick:a[0]||(a[0]=e=>k())})]),(0,l.Wm)(s,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(c.Z,{label:e.$t("accountsCreateUserDialog.username"),icon:"sym_s_person",value:h.value,"onUpdate:value":a[1]||(a[1]=e=>h.value=e),rules:[()=>""!==h.value||e.$t("accountsCreateUserDialog.usernameRequired"),()=>h.value.length>=3||e.$t("accountsCreateUserDialog.usernameMinLength")]},null,8,["label","value","rules"])])),_:1}),(0,l.Wm)(s,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(u.Z,{password:b.value,"onUpdate:password":a[2]||(a[2]=e=>b.value=e)},null,8,["password"]),(0,l.Wm)(r.Z,{password:b.value,"onUpdate:password":a[3]||(a[3]=e=>b.value=e),class:"float-right"},null,8,["password"])])),_:1}),(0,l.Wm)(s,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.wy)((0,l.Wm)(d.Z,{password:b.value,"onUpdate:isValidPassword":a[4]||(a[4]=e=>f.value=e)},null,8,["password"]),[[n.F8,b.value.length>0]])])),_:1}),(0,l.Wm)(p,{align:"between",class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(i.Z,{label:e.$t("accountsCreateUserDialog.cancelBtn"),class:"q-mr-sm q-px-xl",color:"grey-7",onClick:a[5]||(a[5]=e=>k())},null,8,["label"]),(0,l.Wm)(i.Z,{color:"primary",icon:"sym_s_person_add",label:e.$t("accountsCreateUserDialog.createBtn"),disable:!A.value||!f.value,onClick:a[6]||(a[6]=e=>W())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var _=t(32074),h=t(44458),b=t(68879),f=t(63190),A=t(11821),Z=t(69984),k=t.n(Z);const W=U,C=W;k()(U,"components",{QDialog:_.Z,QCard:h.Z,QBtn:b.Z,QCardSection:f.Z,QCardActions:A.Z});const K={class:"flex justify-end items-center"},q={class:"td-action-bg-15"},x={class:"td-action-bg-20"},S=(0,l.aZ)({__name:"AccountTableActions",props:{account:{}},setup(e){const a=e,t=m(),s=(0,l.Fl)({get:()=>t.getKeyUpdatePasswordDialog,set:e=>{t.setKeyUpdatePasswordDialog(e)}}),n=(0,l.Fl)({get:()=>t.getKeyUpdateApiKeyDialog,set:e=>{t.setKeyUpdateApiKeyDialog(e)}});function c(){s.value++,t.setAccountSelected(a.account),t.setShowUpdatePasswordDialog(!0)}function i(){t.setAccountSelected(a.account),t.setShowDeleteUserDialog(!0)}function u(){n.value++,t.setAccountSelected(a.account),t.setShowUpdateApiKeyDialog(!0)}return(e,a)=>{const t=(0,l.up)("q-tooltip"),s=(0,l.up)("q-btn");return(0,l.wg)(),(0,l.iD)("div",K,[(0,l._)("div",q,[(0,l.Wm)(s,{flat:"",size:"md",icon:"sym_s_lock",onClick:a[0]||(a[0]=e=>c())},{default:(0,l.w5)((()=>[(0,l.Wm)(t,{class:"bg-primary text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,o.zw)(e.$t("accountsTableActions.editPasswordBtn")),1)])),_:1})])),_:1})]),(0,l._)("div",x,[(0,l.Wm)(s,{flat:"",size:"md",icon:"sym_s_key",onClick:a[1]||(a[1]=e=>u())},{default:(0,l.w5)((()=>[(0,l.Wm)(t,{class:"bg-primary text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,o.zw)(e.$t("accountsTableActions.editApiKeyBtn")),1)])),_:1})])),_:1})]),(0,l._)("div",null,[(0,l.Wm)(s,{color:"negative",icon:"sym_s_delete",size:"md",onClick:a[2]||(a[2]=e=>i())},{default:(0,l.w5)((()=>[(0,l.Wm)(t,{class:"bg-negative text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,o.zw)(e.$t("accountsTableActions.deleteBtn")),1)])),_:1})])),_:1})])])}}});var Q=t(46858);const P=S,T=P;k()(S,"components",{QBtn:b.Z,QTooltip:Q.Z});const $=(0,l._)("th",{class:"text-center"},"UserId / GroupId",-1),z={class:"text-center"},F={class:"row justify-center q-mt-md"},B=(0,l.aZ)({__name:"AccountsTable",props:{accountsList:{}},setup(e){const a=e,t=(0,s.iH)(!1),n=(0,s.iH)(0),c=(0,s.iH)(""),u=(0,s.iH)([{name:"username",label:"Username",align:"left",field:"username",classes:"td-main-table",headerClasses:"bg-primary text-white",sortable:!0}]),r=(0,s.iH)({sortBy:"desc",descending:!1,page:1,rowsPerPage:10}),d=(0,l.Fl)((()=>Math.ceil(a.accountsList.length/r.value.rowsPerPage)));function p(){n.value++,t.value=!0}return(e,a)=>{const s=(0,l.up)("q-icon"),g=(0,l.up)("q-input"),w=(0,l.up)("q-space"),m=(0,l.up)("q-th"),y=(0,l.up)("q-tr"),D=(0,l.up)("q-td"),v=(0,l.up)("q-table"),U=(0,l.up)("q-pagination");return(0,l.wg)(),(0,l.iD)(l.HY,null,[((0,l.wg)(),(0,l.j4)(C,{showCreateUserDialog:t.value,"onUpdate:showCreateUserDialog":a[0]||(a[0]=e=>t.value=e),key:n.value},null,8,["showCreateUserDialog"])),(0,l.Wm)(v,{rows:e.accountsList,columns:u.value,filter:c.value,pagination:r.value,"onUpdate:pagination":a[3]||(a[3]=e=>r.value=e),"no-data-label":e.$t("accountsTable.noDataLabel"),"row-key":"key",color:"primary",flat:"",bordered:"","hide-pagination":""},{top:(0,l.w5)((()=>[(0,l.Wm)(g,{borderless:"",debounce:"300",color:"primary",modelValue:c.value,"onUpdate:modelValue":a[1]||(a[1]=e=>c.value=e),label:e.$t("accountsTable.searchInput")},{prepend:(0,l.w5)((()=>[(0,l.Wm)(s,{name:"sym_s_search"})])),_:1},8,["modelValue","label"]),(0,l.Wm)(w),(0,l.Wm)(i.Z,{label:e.$t("accountsTable.createAccountBtn"),color:"primary",icon:"sym_s_person_add",onClick:a[2]||(a[2]=e=>p())},null,8,["label"])])),header:(0,l.w5)((e=>[(0,l.Wm)(y,{props:e},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.cols,(a=>((0,l.wg)(),(0,l.j4)(m,{key:a.name,props:e,style:{"font-weight":"bold","font-size":"14px"}},{default:(0,l.w5)((()=>[(0,l.Uk)((0,o.zw)(a.label),1)])),_:2},1032,["props"])))),128)),$,(0,l.Wm)(m)])),_:2},1032,["props"])])),body:(0,l.w5)((e=>[(0,l.Wm)(y,{props:e},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.cols,(a=>((0,l.wg)(),(0,l.j4)(D,{key:a.name,props:e},{default:(0,l.w5)((()=>[(0,l.Uk)((0,o.zw)(a.value),1)])),_:2},1032,["props"])))),128)),(0,l._)("td",z,(0,o.zw)(e.row.id)+" / "+(0,o.zw)(e.row.groupId),1),(0,l.Wm)(D,{class:"text-right"},{default:(0,l.w5)((()=>[(0,l.Wm)(T,{account:e.row},null,8,["account"])])),_:2},1024)])),_:2},1032,["props"])])),_:1},8,["rows","columns","filter","pagination","no-data-label"]),(0,l._)("div",F,[(0,l.Wm)(U,{modelValue:r.value.page,"onUpdate:modelValue":a[4]||(a[4]=e=>r.value.page=e),color:"primary",max:d.value,size:"md"},null,8,["modelValue","max"])])],64)}}});var j=t(84277),V=t(13119),H=t(22857),L=t(90136),I=t(31233),Y=t(21682),X=t(67220),M=t(80996);const N=B,G=N;k()(B,"components",{QTable:j.Z,QInput:V.Z,QIcon:H.Z,QSpace:L.Z,QTr:I.Z,QTh:Y.Z,QTd:X.Z,QPagination:M.Z});var R=t(45273);const E={class:"flex justify-between items-center"},J={class:"title-dialog"},O=(0,l.aZ)({__name:"AccountsUpdatePasswordDialog",setup(e){const a=(0,y.QT)().t,t=m(),c=(0,l.Fl)({get:()=>t.getShowUpdatePasswordDialog,set:e=>{t.setShowUpdatePasswordDialog(e)}}),w=(0,l.Fl)((()=>t.getAccountSelected.id)),D=(0,l.Fl)((()=>t.getAccountSelected.username)),v=(0,s.iH)(""),U=(0,s.iH)(!1),_=(0,l.Fl)({get:()=>t.keyAccountsTable,set:e=>{t.keyAccountsTable=e}});function h(){c.value=!1}function b(){(0,R.Q)();const e=new p.Z;e.updateAccount({id:w.value,password:v.value}).then((()=>{(0,g.LX)(a("accountsUpdatePasswordDialog.updatedSuccessfully")),_.value++,h()})).catch((e=>{(0,g.s9)(e.response.data,a("accountsUpdatePasswordDialog.errorUpdatingAccount"))})).finally((()=>{(0,R.Z)()}))}return(e,a)=>{const t=(0,l.up)("q-btn"),s=(0,l.up)("q-card-section"),p=(0,l.up)("q-card-actions"),g=(0,l.up)("q-card"),w=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(w,{modelValue:c.value,"onUpdate:modelValue":a[6]||(a[6]=e=>c.value=e),persistent:""},{default:(0,l.w5)((()=>[(0,l.Wm)(g,{style:{width:"700px","max-width":"80vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",E,[(0,l._)("div",J,(0,o.zw)(e.$t("accountsUpdatePasswordDialog.title",{username:D.value})),1),(0,l.Wm)(t,{flat:"",round:"",dense:"",icon:"sym_s_close",onClick:a[0]||(a[0]=e=>h())})]),(0,l.Wm)(s,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(u.Z,{password:v.value,"onUpdate:password":a[1]||(a[1]=e=>v.value=e),minLength:6},null,8,["password"]),(0,l.Wm)(r.Z,{password:v.value,"onUpdate:password":a[2]||(a[2]=e=>v.value=e),class:"float-right"},null,8,["password"])])),_:1}),(0,l.Wm)(s,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.wy)((0,l.Wm)(d.Z,{minPasswordLength:6,password:v.value,"onUpdate:isValidPassword":a[3]||(a[3]=e=>U.value=e)},null,8,["password"]),[[n.F8,v.value.length>0]])])),_:1}),(0,l.Wm)(p,{align:"between",class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(i.Z,{label:e.$t("accountsUpdatePasswordDialog.cancelBtn"),color:"grey-7",onClick:a[4]||(a[4]=e=>h())},null,8,["label"]),(0,l.Wm)(i.Z,{color:"primary",icon:"sym_s_key",label:e.$t("accountsUpdatePasswordDialog.updateBtn"),disable:!1===U.value,onClick:a[5]||(a[5]=e=>b())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),ee=O,ae=ee;k()(O,"components",{QDialog:_.Z,QCard:h.Z,QBtn:b.Z,QCardSection:f.Z,QCardActions:A.Z});const te={class:"flex justify-between items-center"},le={class:"title-dialog"},oe={class:"box-api-key q-mb-sm"},se={class:"flex justify-between"},ne={key:0,class:"text-primary",style:{"font-size":"16px"}},ce={key:0,style:{"font-size":"14px"}},ie=(0,l.aZ)({__name:"AccountsUpdateApiKeyDialog",setup(e){const a=(0,y.QT)().t,t=m(),n=(0,s.iH)(""),c=(0,l.Fl)({get:()=>t.getShowUpdateApiKeyDialog,set:e=>{t.setShowUpdateApiKeyDialog(e)}}),u=(0,l.Fl)((()=>t.getAccountSelected.id)),r=(0,l.Fl)((()=>t.getAccountSelected.username));function d(e){navigator.clipboard.writeText(e),(0,g.c0)({msg:`${a("accountsUpdateApiKeyDialog.copiedToClipboard")}`,position:"bottom",type:"primary",html:!0})}function w(){c.value=!1}function D(){(0,R.Q)();const e=new p.Z;e.updateAccount({id:u.value,shouldUpdateApiKey:!0}).then((e=>{n.value=e.data.body,(0,g.LX)(a("accountsUpdateApiKeyDialog.updatedSuccessfullyWithApiKey"))})).catch((e=>{(0,g.s9)(e.response.data,a("accountsUpdateApiKeyDialog.errorUpdatingAccount"))})).finally((()=>{(0,R.Z)()}))}return(e,a)=>{const t=(0,l.up)("q-btn"),s=(0,l.up)("q-icon"),u=(0,l.up)("q-card-section"),p=(0,l.up)("q-card-actions"),g=(0,l.up)("q-card"),m=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(m,{modelValue:c.value,"onUpdate:modelValue":a[4]||(a[4]=e=>c.value=e),persistent:""},{default:(0,l.w5)((()=>[(0,l.Wm)(g,{style:{width:"700px","max-width":"80vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",te,[(0,l._)("div",le,(0,o.zw)(e.$t("accountsUpdateApiKeyDialog.title",{username:r.value})),1),(0,l.Wm)(t,{flat:"",round:"",dense:"",icon:"sym_s_close",onClick:a[0]||(a[0]=e=>w())})]),(0,l.Wm)(u,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l._)("div",oe,[(0,l._)("div",se,[n.value?((0,l.wg)(),(0,l.iD)("p",ne,(0,o.zw)(e.$t("accountsUpdateApiKeyDialog.generatedApiKey")),1)):(0,l.kq)("",!0),n.value?((0,l.wg)(),(0,l.j4)(s,{key:1,name:"sym_s_content_copy",size:"20px",class:"cursor-pointer icon-copy-api-key",onClick:a[1]||(a[1]=e=>d(n.value))})):(0,l.kq)("",!0)]),(0,l.Uk)(" "+(0,o.zw)(n.value),1)]),n.value?((0,l.wg)(),(0,l.iD)("small",ce,[(0,l.Wm)(s,{color:"amber",size:"sm",name:"sym_s_warning"}),(0,l.Uk)(" "+(0,o.zw)(e.$t("accountsUpdateApiKeyDialog.saveNewApiKey")),1)])):(0,l.kq)("",!0)])),_:1}),(0,l.Wm)(p,{align:"between",class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(i.Z,{label:e.$t("accountsUpdateApiKeyDialog.closeDialogBtn"),color:"grey-7",onClick:a[2]||(a[2]=e=>w())},null,8,["label"]),(0,l.Wm)(i.Z,{icon:"sym_s_key",label:e.$t("accountsUpdateApiKeyDialog.generateNewApiKeyBtn"),color:"primary",onClick:a[3]||(a[3]=e=>D())},null,8,["label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),ue=ie,re=ue;k()(ie,"components",{QDialog:_.Z,QCard:h.Z,QBtn:b.Z,QCardSection:f.Z,QIcon:H.Z,QCardActions:A.Z});var de=t(89906);const pe=(0,l.aZ)({__name:"AccountsDeleteUserDialog",setup(e){const a=(0,y.QT)().t,t=m(),o=(0,l.Fl)({get:()=>t.getShowDeleteUserDialog,set:e=>{t.setShowDeleteUserDialog(e)}}),s=(0,l.Fl)((()=>t.getAccountSelected.username)),n=(0,l.Fl)((()=>t.getAccountSelected.id)),c=(0,l.Fl)({get:()=>t.keyAccountsTable,set:e=>{t.keyAccountsTable=e}});function u(){o.value=!1}function r(){(0,R.Q)();const e=new p.Z;e.deleteAccount(n.value).then((()=>{(0,g.LX)(a("accountsDeleteUserDialog.deletedSuccessfully",{username:s.value})),c.value++,u()})).catch((e=>{(0,g.s9)(e.response.data,a("accountsDeleteUserDialog.errorDeletingAccount",{username:s.value}))})).finally((()=>{(0,R.Z)()}))}return(e,a)=>((0,l.wg)(),(0,l.j4)(de.Z,{showDeleteDialog:o.value,"onUpdate:showDeleteDialog":a[2]||(a[2]=e=>o.value=e),titleDialog:e.$t("accountsDeleteUserDialog.title",{username:s.value}),messageToDelete:e.$t("accountsDeleteUserDialog.messageDeleteAccount",{username:s.value}),warningToDelete:e.$t("accountsDeleteUserDialog.warningDeleteAccount")},{"card-actions":(0,l.w5)((()=>[(0,l.Wm)(i.Z,{label:e.$t("accountsDeleteUserDialog.cancelBtn"),color:"grey-7",onClick:a[0]||(a[0]=e=>u())},null,8,["label"]),(0,l.Wm)(i.Z,{color:"negative",label:e.$t("accountsDeleteUserDialog.deleteBtn"),onClick:a[1]||(a[1]=e=>r())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","messageToDelete","warningToDelete"]))}}),ge=pe,we=ge,me=(0,l.aZ)({__name:"AccountsIndex",setup(e){const a=new p.Z,t=(0,s.iH)([]),o=m(),n=(0,l.Fl)((()=>o.getKeyAccountsTable)),c=(0,l.Fl)((()=>o.getKeyUpdatePasswordDialog)),i=(0,l.Fl)((()=>o.getKeyUpdateApiKeyDialog));function u(){a.getAccounts().then((e=>{t.value=e.data.body})).catch((e=>{console.error(e),(0,g.s9)(e.response.data,"accountsIndex.errorLoadingAccounts")}))}return(0,l.wF)((()=>{u()})),(0,l.YP)(n,(()=>{u()})),(e,a)=>{const o=(0,l.up)("q-card-section"),s=(0,l.up)("q-card"),n=(0,l.up)("q-page");return(0,l.wg)(),(0,l.j4)(n,{padding:""},{default:(0,l.w5)((()=>[((0,l.wg)(),(0,l.j4)(ae,{key:c.value})),((0,l.wg)(),(0,l.j4)(re,{key:i.value})),(0,l.Wm)(we),(0,l.Wm)(s,{flat:""},{default:(0,l.w5)((()=>[(0,l.Wm)(o,null,{default:(0,l.w5)((()=>[(0,l.Wm)(G,{accountsList:t.value},null,8,["accountsList"])])),_:1})])),_:1})])),_:1})}}});var ye=t(69885);const De=me,ve=De;k()(me,"components",{QPage:ye.Z,QCard:h.Z,QCardSection:f.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/517.b7f6848c.js b/src/presentation/ui/dist/js/517.b7f6848c.js deleted file mode 100644 index 2f8fc9557..000000000 --- a/src/presentation/ui/dist/js/517.b7f6848c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[517],{73120:(e,t,a)=>{a.r(t),a.d(t,{default:()=>X});var l=a(59835),s=a(86970),n=a(61957),i=a(60499),o=a(84278),d=a(26557),c=a(87713),u=a(63064),r=a(20503),p=a(25121),m=a(74358);const g=(0,l.aZ)({__name:"LangSelect",setup(e){const{locale:t}=(0,p.QT)(),a=(0,p.QT)().t,s=(0,m.S)(),n=new r.Z,o=(0,i.iH)(t.value),d=[{label:a("langSelect.en"),value:"en-us"},{label:a("langSelect.pt"),value:"pt-br"}];return(0,l.bv)((()=>{o.value=n.getLanguage()})),(0,l.YP)(o,(e=>{n.setLanguage(e),s.setSelectedLanguage(e)}),{immediate:!0}),(e,t)=>{const a=(0,l.up)("q-select");return(0,l.wg)(),(0,l.j4)(a,{filled:"",outlined:"",modelValue:o.value,"onUpdate:modelValue":t[0]||(t[0]=e=>o.value=e),options:d,"map-options":"","emit-value":!0,label:e.$t("langSelect.label")},null,8,["modelValue","label"])}}});var v=a(32259),w=a(69984),y=a.n(w);const _=g,f=_;y()(g,"components",{QSelect:v.Z});var h=a(19302);const b=(0,l.aZ)({__name:"ThemeSelect",setup(e){const t=new r.Z,a=(0,h.Z)(),n=(0,i.iH)(!1);return(0,l.wF)((()=>{n.value=a.dark.isActive})),(0,l.YP)(n,(e=>{t.setDarkMode(e),a.dark.set(e)})),(e,t)=>{const a=(0,l.up)("q-toggle");return(0,l.wg)(),(0,l.iD)("div",null,[(0,l._)("span",{onClick:t[0]||(t[0]=e=>n.value=!n.value),class:"cursor-pointer"},(0,s.zw)(e.$t("themeSelect.light")),1),(0,l.Wm)(a,{modelValue:n.value,"onUpdate:modelValue":t[1]||(t[1]=e=>n.value=e),label:e.$t("themeSelect.dark"),"checked-icon":"sym_s_dark_mode","unchecked-icon":"sym_s_light_mode"},null,8,["modelValue","label"])])}}});var k=a(23175);const x=b,Z=x;y()(b,"components",{QToggle:k.Z});var q=a(25971),W=a(45273),I=a(88900);const S={class:"title-h6 q-mb-md"},A={class:"flex justify-start items-center"},Q={class:"flex justify-between q-mt-md"},z={class:"title-h6 q-mb-md"},U={class:"q-mb-lg"},$={class:"row justify-end"},C={class:"title-h6"},P={key:0,class:"box-api-key"},L={class:"flex justify-between"},j={class:"text-primary",style:{"font-size":"16px"}},K={key:1,style:{"font-size":"14px"}},T={key:2,class:"flex justify-center"},V=(0,l.aZ)({__name:"SettingsIndex",setup(e){const t=(0,p.QT)().t,a=new q.Z,m=new r.Z,g=(0,l.Fl)((()=>m.getUsername())),v=(0,i.iH)(""),w=(0,i.iH)(!1),y=(0,i.iH)(""),_=(0,i.iH)(0);function h(e){navigator.clipboard.writeText(e),(0,I.c0)({msg:`${t("settingsIndex.copiedToClipboard")}`,position:"bottom",type:"primary",html:!0})}function b(){(0,W.Q)(),a.getAccounts().then((e=>{const t=e.data.body;t.forEach((e=>{e.username===g.value&&(_.value=e.id)}))})).catch((e=>{(0,I.s9)(e.response.data,t("settingsIndex.errorGettingAccounts"))})).finally((()=>{(0,W.Z)()}))}function k(){(0,W.Q)();const e=new q.Z;e.updateAccount({id:_.value,password:v.value}).then((()=>{(0,I.LX)(t("settingsIndex.updatedPasswordSuccessfully"))})).catch((e=>{(0,I.s9)(e.response.data,t("settingsIndex.errorUpdatingPassword"))})).finally((()=>{(0,W.Z)()}))}function x(){(0,W.Q)();const e=new q.Z;e.updateAccount({id:_.value,shouldUpdateApiKey:!0}).then((e=>{y.value=e.data.body,(0,I.LX)(t("settingsIndex.updatedApiKeySuccessfully"))})).catch((e=>{(0,I.s9)(e.response.data,t("settingsIndex.errorUpdatingApiKey"))})).finally((()=>{(0,W.Z)()}))}return(0,l.bv)((()=>{b()})),(e,t)=>{const a=(0,l.up)("q-card-section"),i=(0,l.up)("q-card"),r=(0,l.up)("q-icon"),p=(0,l.up)("q-page");return(0,l.wg)(),(0,l.j4)(p,{padding:""},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{flat:""},{default:(0,l.w5)((()=>[(0,l.Wm)(a,null,{default:(0,l.w5)((()=>[(0,l._)("div",S,(0,s.zw)(e.$t("settingsIndex.titleConfigs")),1),(0,l._)("div",A,[(0,l.Wm)(f,{style:{width:"250px","margin-right":"20px"}}),(0,l.Wm)(Z)])])),_:1})])),_:1}),(0,l._)("div",Q,[(0,l.Wm)(i,{flat:"",class:"q-mr-md col"},{default:(0,l.w5)((()=>[(0,l.Wm)(a,null,{default:(0,l.w5)((()=>[(0,l._)("div",z,(0,s.zw)(e.$t("settingsIndex.titleProfile")),1),(0,l._)("div",U,[(0,l.Wm)(d.Z,{password:v.value,"onUpdate:password":t[0]||(t[0]=e=>v.value=e),minLength:6},null,8,["password"]),(0,l.Wm)(c.Z,{password:v.value,"onUpdate:password":t[1]||(t[1]=e=>v.value=e),class:"float-right"},null,8,["password"])]),(0,l._)("div",null,[(0,l.wy)((0,l.Wm)(u.Z,{minPasswordLength:6,password:v.value,"onUpdate:isValidPassword":t[2]||(t[2]=e=>w.value=e)},null,8,["password"]),[[n.F8,v.value.length>0]])]),(0,l._)("div",$,[(0,l.Wm)(o.Z,{disable:!w.value,color:"primary",icon:"sym_s_lock",class:"float-right q-mt-md",label:e.$t("settingsIndex.updatePasswordBtn"),onClick:t[3]||(t[3]=e=>k())},null,8,["disable","label"])])])),_:1})])),_:1}),(0,l.Wm)(i,{flat:"",class:"col"},{default:(0,l.w5)((()=>[(0,l.Wm)(a,null,{default:(0,l.w5)((()=>[(0,l._)("div",C,(0,s.zw)(e.$t("settingsIndex.titleApiKey")),1),y.value?((0,l.wg)(),(0,l.iD)("div",P,[(0,l._)("div",L,[(0,l._)("p",j,(0,s.zw)(e.$t("settingsIndex.generatedApiKey")),1),(0,l.Wm)(r,{name:"sym_s_content_copy",size:"20px",class:"cursor-pointer icon-copy-api-key",onClick:t[4]||(t[4]=e=>h(y.value))})]),(0,l.Uk)(" "+(0,s.zw)(y.value),1)])):(0,l.kq)("",!0),y.value?((0,l.wg)(),(0,l.iD)("small",K,[(0,l.Wm)(r,{color:"amber",size:"sm",name:"sym_s_warning"}),(0,l.Uk)(" "+(0,s.zw)(e.$t("settingsIndex.saveNewApiKey")),1)])):(0,l.kq)("",!0),y.value?(0,l.kq)("",!0):((0,l.wg)(),(0,l.iD)("div",T,[(0,l.Wm)(o.Z,{color:"primary",icon:"sym_s_key",class:"float-right q-mt-md",label:e.$t("settingsIndex.generateNewApiKeyBtn"),onClick:t[5]||(t[5]=e=>x())},null,8,["label"])]))])),_:1})])),_:1})])])),_:1})}}});var H=a(69885),D=a(44458),F=a(63190),B=a(22857);const N=V,X=N;y()(V,"components",{QPage:H.Z,QCard:D.Z,QCardSection:F.Z,QIcon:B.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/628.05ea4db8.js b/src/presentation/ui/dist/js/628.05ea4db8.js deleted file mode 100644 index 2eb97578f..000000000 --- a/src/presentation/ui/dist/js/628.05ea4db8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[628],{31691:(e,a,t)=>{t.r(a),t.d(a,{default:()=>ia});var l=t(59835),n=t(60499),s=t(61957),o=t(25121),i=t(3746);const u=(0,i.Q_)("php",{state:()=>({isLoadingPhpConfig:!1,countPhpConfigUpdates:0,hostname:"",phpVersion:{value:"",options:[]},phpSettings:[],phpModules:[]}),getters:{getIsLoadingPhpConfig(e){return e.isLoadingPhpConfig},getCountPhpConfigUpdates(e){return e.countPhpConfigUpdates},getHostname(e){return e.hostname},getPhpVersion(e){return e.phpVersion},getPhpSettings(e){return e.phpSettings},getPhpModules(e){return e.phpModules}},actions:{setIsLoadingPhpConfig(e){this.isLoadingPhpConfig=e},setCountPhpConfigUpdates(e){this.countPhpConfigUpdates=e},setHostname(e){this.hostname=e},setPhpVersion(e){this.phpVersion=e},setPhpSettings(e){this.phpSettings=e},setPhpModules(e){this.phpModules=e}}});var p=t(39697),r={class:"row justify-center"},d={class:"row justify-evenly q-my-xl"},c={class:"flex justify-between"};function v(e,a){var t=(0,l.up)("q-skeleton");return(0,l.wg)(),(0,l.iD)("div",null,[(0,l._)("div",r,[((0,l.wg)(),(0,l.iD)(l.HY,null,(0,l.Ko)(2,(function(e){return(0,l._)("div",{key:e,class:"q-ma-md col-5"},[(0,l.Wm)(t,{type:"QBtn",style:{width:"100%"}})])})),64))]),(0,l._)("div",d,[((0,l.wg)(),(0,l.iD)(l.HY,null,(0,l.Ko)(2,(function(e){return(0,l._)("div",{key:e},[(0,l.Wm)(t,{type:"QBtn",style:{width:"250px"}})])})),64))]),(0,l._)("div",c,[((0,l.wg)(),(0,l.iD)(l.HY,null,(0,l.Ko)(24,(function(e){return(0,l._)("div",{key:e,class:"q-ma-md",style:{height:"100px"}},[(0,l.Wm)(t,{type:"QChip",style:{width:"200px"}})])})),64))])])}var m=t(11639),h=t(57133),g=t(69984),b=t.n(g);const f={},P=(0,m.Z)(f,[["render",v]]),w=P;b()(f,"components",{QSkeleton:h.ZP});var y=t(94629);const _=(0,l.aZ)({__name:"PhpVhostSelect",props:{vhostsOptions:{},vhostSelected:{},isDisabled:{type:Boolean}},emits:["update:vhostSelected","update:isDisabled"],setup(e,{emit:a}){const t=e,s=(0,n.iH)(t.vhostSelected),o=(0,n.iH)(t.isDisabled);return(0,l.YP)((()=>t.isDisabled),(e=>{o.value=e})),(0,l.YP)(s,(e=>{a("update:vhostSelected",e)})),(0,l.YP)(o,(e=>{a("update:isDisabled",e)})),(e,a)=>((0,l.wg)(),(0,l.j4)(y.Z,{options:e.vhostsOptions,selected:s.value,"onUpdate:selected":a[0]||(a[0]=e=>s.value=e),isDisable:o.value,label:e.$t("phpVhostSelect.selectVirtualHost"),icon:"sym_s_lan"},null,8,["options","selected","isDisable","label"]))}}),V=_,S=V;var C=t(86970),Z=t(84278),x=t(88900),H=t(69036),q=function(e,a,t,l){function n(e){return e instanceof t?e:new t((function(a){a(e)}))}return new(t||(t=Promise))((function(t,s){function o(e){try{u(l.next(e))}catch(a){s(a)}}function i(e){try{u(l["throw"](e))}catch(a){s(a)}}function u(e){e.done?t(e.value):n(e.value).then(o,i)}u((l=l.apply(e,a||[])).next())}))};class D extends H.Z{getPhpConfigs(e){return q(this,void 0,void 0,(function*(){return this.request.get(`/v1/runtime/php/${e}/`)}))}updatePhpConfigs(e){return q(this,void 0,void 0,(function*(){return this.request.put(`/v1/runtime/php/${e.hostname}/`,e)}))}}var Q=t(45273);const W={class:"text-h6 text-bold text-orange-8"},T=["innerHTML"],U=(0,l.aZ)({__name:"PhpDialogPhpVersion",props:{showDialogPhpVersion:{type:Boolean},newPhpVersion:{}},emits:["update:showDialogPhpVersion","update:cancelUpdatePhpVersion"],setup(e,{emit:a}){const t=e,s=u(),i=(0,o.QT)().t,p=(0,n.iH)(t.showDialogPhpVersion),r=(0,l.Fl)({get:()=>s.getIsLoadingPhpConfig,set:e=>{s.setIsLoadingPhpConfig(e)}}),d=(0,l.Fl)((()=>s.getHostname));function c(){a("update:cancelUpdatePhpVersion",!0),p.value=!1}function v(){a("update:cancelUpdatePhpVersion",!1),(0,Q.Q)();const e=new D;e.updatePhpConfigs({hostname:d.value,version:t.newPhpVersion}).then((()=>{(0,x.LX)(`${i("phpDialogPhpVersion.updatePhpVersionSuccess")}`),p.value=!1,r.value=!0})).catch((e=>{console.error(e),(0,x.s9)(e.response.data,`${i("phpDialogPhpVersion.updatePhpVersionError")}`)})).finally((()=>{(0,Q.Z)()}))}return(0,l.YP)((()=>t.showDialogPhpVersion),(e=>{p.value=e})),(0,l.YP)(p,(e=>{a("update:showDialogPhpVersion",e)})),(e,a)=>{const t=(0,l.up)("q-card-section"),n=(0,l.up)("q-icon"),s=(0,l.up)("q-banner"),o=(0,l.up)("q-card-actions"),i=(0,l.up)("q-card"),u=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(u,{modelValue:p.value,"onUpdate:modelValue":a[2]||(a[2]=e=>p.value=e),persistent:""},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{class:"dialog-card-bg",style:{width:"750px","max-width":"70vw"}},{default:(0,l.w5)((()=>[(0,l.Wm)(t,null,{default:(0,l.w5)((()=>[(0,l._)("div",W,(0,C.zw)(e.$t("phpDialogPhpVersion.title")),1)])),_:1}),(0,l.Wm)(t,{class:"q-pa-xs q-my-md"},{default:(0,l.w5)((()=>[(0,l.Wm)(s,null,{avatar:(0,l.w5)((()=>[(0,l.Wm)(n,{name:"sym_s_warning",color:"orange-8",size:"lg"})])),default:(0,l.w5)((()=>[(0,l._)("div",{innerHTML:e.$t("phpDialogPhpVersion.body",{newVersion:e.newPhpVersion}),class:"q-mb-md"},null,8,T)])),_:1})])),_:1}),(0,l.Wm)(o,{align:"between"},{default:(0,l.w5)((()=>[(0,l.Wm)(Z.Z,{label:e.$t("phpDialogPhpVersion.btnCancel"),color:"grey-7",onClick:a[0]||(a[0]=e=>c())},null,8,["label"]),(0,l.Wm)(Z.Z,{icon:"sym_s_warning",label:e.$t("phpDialogPhpVersion.btnConfirm"),color:"orange-8",onClick:a[1]||(a[1]=e=>v())},null,8,["label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var M=t(32074),F=t(44458),j=t(63190),$=t(47128),k=t(22857),E=t(11821);const O=U,Y=O;b()(U,"components",{QDialog:M.Z,QCard:F.Z,QCardSection:j.Z,QBanner:$.Z,QIcon:k.Z,QCardActions:E.Z});const L=(0,l.aZ)({__name:"PhpVersionSelect",props:{isDisabled:{type:Boolean}},emits:["update:isDisabled"],setup(e,{emit:a}){const t=e,s=u(),o=(0,n.iH)(t.isDisabled),i=(0,n.iH)(""),p=(0,n.iH)(!1),r=(0,n.iH)(!1),d=(0,n.iH)([]),c=(0,l.Fl)((()=>s.getPhpVersion));return(0,l.YP)((()=>t.isDisabled),(e=>{o.value=e})),(0,l.YP)(o,(e=>{a("update:isDisabled",e)})),(0,l.wF)((()=>{d.value=c.value.options||[],i.value=c.value.value})),(0,l.YP)(p,(e=>{!0===e&&(i.value=c.value.value,setTimeout((()=>{p.value=!1}),10))})),(0,l.YP)(i,((e,a)=>{!1===p.value&&""!==a&&(r.value=!0)})),(e,a)=>((0,l.wg)(),(0,l.iD)("div",null,[(0,l.Wm)(Y,{showDialogPhpVersion:r.value,"onUpdate:showDialogPhpVersion":a[0]||(a[0]=e=>r.value=e),newPhpVersion:i.value,cancelUpdatePhpVersion:p.value,"onUpdate:cancelUpdatePhpVersion":a[1]||(a[1]=e=>p.value=e)},null,8,["showDialogPhpVersion","newPhpVersion","cancelUpdatePhpVersion"]),(0,l.Wm)(y.Z,{options:d.value,selected:i.value,"onUpdate:selected":a[2]||(a[2]=e=>i.value=e),isDisable:o.value,label:e.$t("phpVersionSelect.selectPhpVersion"),icon:"fa-brands fa-php"},null,8,["options","selected","isDisable","label"])]))}}),I=L,N=I;var B=t(35274),z=t(15521);const K={class:"flex justify-between"},X={style:{width:"50%"}},A=["innerHTML"],G=(0,l.aZ)({__name:"PhpSubdirectoryInput",props:{prefix:{default:""},disable:{type:Boolean}},emits:["update:subdirectory","update:isValidSubdirectory"],setup(e,{emit:a}){const t=(0,n.iH)(""),s=(0,l.Fl)((()=>{const e=new RegExp(/^\w{0,256}$/);return e.test(t.value)}));return(0,l.YP)(t,(e=>{a("update:subdirectory",e)}),{immediate:!0}),(0,l.YP)(s,(e=>{a("update:isValidSubdirectory",e)}),{immediate:!0}),(e,a)=>((0,l.wg)(),(0,l.iD)("div",K,[(0,l._)("div",X,[(0,l.Wm)(z.Z,{value:t.value,"onUpdate:value":a[0]||(a[0]=e=>t.value=e),label:e.$t("phpSubdirectoryInput.urlLabel"),prefix:e.prefix+"/",disable:e.disable,rules:[()=>s.value||e.$t("phpSubdirectoryInput.urlIsInvalid")]},null,8,["value","label","prefix","disable","rules"])]),(0,l._)("div",{style:{width:"47%","font-size":"14px"},innerHTML:e.$t("phpSubdirectoryInput.urlExplanation",{hostname:e.prefix})},null,8,A)]))}}),J=G,R=J;var ee=t(62120);const ae={class:"title-dialog q-mb-md"},te=["innerHTML"],le={class:"q-my-lg"},ne=(0,l.aZ)({__name:"PhpCreateMapping",props:{hostname:{}},setup(e){const a=e,t=(0,o.QT)().t,s=u(),i=(0,n.iH)("php-webserver"),p=(0,n.iH)("service"),r=(0,n.iH)(""),d=(0,n.iH)("begins-with"),c=(0,n.iH)(!1),v=(0,l.Fl)((()=>""!==a.hostname&&""!==d.value&&""!==i.value&&c.value));function m(){(0,Q.Q)();const e=new ee.Z;let l={hostname:a.hostname,matchPattern:d.value,path:r.value?r.value:"/",targetType:p.value,targetServiceName:i.value};e.createMappings(l).then((()=>{(0,x.LX)(t("phpCreateMapping.createMappingSuccessfully")),s.setIsLoadingPhpConfig(!0)})).catch((e=>{console.error(e),(0,x.s9)(e.response.data,t("phpCreateMapping.createMappingError"))})).finally((()=>{(0,Q.Z)()}))}return(e,a)=>{const t=(0,l.up)("q-card-section"),n=(0,l.up)("q-card"),s=(0,l.up)("q-expansion-item"),o=(0,l.up)("q-list"),i=(0,l.up)("q-card-actions");return(0,l.wg)(),(0,l.j4)(n,{flat:""},{default:(0,l.w5)((()=>[(0,l._)("div",ae,(0,C.zw)(e.$t("phpCreateMapping.title")),1),(0,l._)("div",{style:{"font-size":"0.9708rem"},innerHTML:e.$t("phpCreateMapping.mappingExplanation")},null,8,te),(0,l._)("div",le,[(0,l.Wm)(o,{bordered:"",class:"rounded-borders"},{default:(0,l.w5)((()=>[(0,l.Wm)(s,{"expand-separator":"",icon:"sym_s_settings",label:e.$t("mappingsAdvancedOptions.advancedOptionsLabel")},{default:(0,l.w5)((()=>[(0,l.Wm)(n,{class:"q-mt-md"},{default:(0,l.w5)((()=>[(0,l.Wm)(t,null,{default:(0,l.w5)((()=>[(0,l.Wm)(R,{prefix:e.hostname,disable:!e.hostname,"onUpdate:subdirectory":a[0]||(a[0]=e=>r.value=e),"onUpdate:isValidSubdirectory":a[1]||(a[1]=e=>c.value=e)},null,8,["prefix","disable"])])),_:1})])),_:1})])),_:1},8,["label"])])),_:1})]),(0,l.Wm)(i,{align:"right",class:"q-px-none q-mt-lg"},{default:(0,l.w5)((()=>[(0,l.Wm)(Z.Z,{disable:!1===v.value,color:"primary",icon:"sym_s_add",label:e.$t("phpCreateMapping.createBtn"),onClick:a[2]||(a[2]=e=>m())},null,8,["disable","label"])])),_:1})])),_:1})}}});var se=t(13246),oe=t(50651);const ie=ne,ue=ie;b()(ne,"components",{QCard:F.Z,QList:se.Z,QExpansionItem:oe.Z,QCardSection:j.Z,QCardActions:E.Z});const pe={class:"q-my-md",style:{height:"64px"}},re=(0,l.aZ)({__name:"PhpExtensionsToggle",props:{phpModule:{}},setup(e){const a=e,t=u(),s=(0,o.QT)().t,i=(0,n.iH)({name:"",status:!1}),p=(0,n.iH)(!1),r=(0,n.iH)(!1),d=(0,l.Fl)({get:()=>t.getCountPhpConfigUpdates,set:e=>{t.setCountPhpConfigUpdates(e)}}),c=(0,l.Fl)((()=>t.getHostname));function v(){const e=new D,a=!i.value.status;p.value=!0,d.value++,e.updatePhpConfigs({hostname:c.value,modules:[{name:i.value.name,status:i.value.status}],version:t.getPhpVersion.value}).then((()=>{const e=!0===i.value.status?`${s("phpExtensionsToggle.enablePhpModuleSuccess",{moduleName:i.value.name})}`:`${s("phpExtensionsToggle.disablePhpModuleSuccess",{moduleName:i.value.name})}`;(0,x.LX)(e)})).catch((e=>{console.error(e),r.value=!0;const t=!0===i.value.status?`${s("phpExtensionsToggle.enablePhpModuleError",{moduleName:i.value.name})}`:`${s("phpExtensionsToggle.disablePhpModuleError",{moduleName:i.value.name})}`;(0,x.s9)(e.response.data,t),i.value.status=a})).finally((()=>{setTimeout((()=>{r.value=!1,p.value=!1,d.value--}),100)}))}return(0,l.YP)((()=>a.phpModule),(e=>{i.value=Object.assign({},e)}),{immediate:!0}),(0,l.YP)(i,(()=>{!0!==r.value&&v()}),{immediate:!1,deep:!0}),(e,a)=>{const t=(0,l.up)("q-toggle"),n=(0,l.up)("q-spinner-gears");return(0,l.wg)(),(0,l.iD)("div",pe,[(0,l.Wm)(t,{color:"primary",label:i.value.name,style:{"font-size":"1.4rem"},modelValue:i.value.status,"onUpdate:modelValue":a[0]||(a[0]=e=>i.value.status=e),disable:p.value},null,8,["label","modelValue","disable"]),p.value?((0,l.wg)(),(0,l.j4)(n,{key:0,color:"primary",size:"2em",class:"q-ml-md"})):(0,l.kq)("",!0)])}}});var de=t(23175),ce=t(9120);const ve=re,me=ve;b()(re,"components",{QToggle:de.Z,QSpinnerGears:ce.Z});const he={class:"flex justify-between"},ge=(0,l.aZ)({__name:"PhpExtensionsTab",setup(e){const a=u(),t=(0,l.Fl)({get:()=>a.getPhpModules,set:e=>{a.setPhpModules(e)}});return(e,a)=>((0,l.wg)(),(0,l.iD)("div",he,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(t.value,((e,a)=>((0,l.wg)(),(0,l.j4)(me,{key:a,phpModule:e,style:{"min-width":"250px"}},null,8,["phpModule"])))),128))]))}}),be=ge,fe=be,Pe={class:"flex items-center q-my-md q-mx-sm",style:{height:"64px"}},we=(0,l.aZ)({__name:"PhpOptionsToggle",props:{phpSetting:{}},setup(e){const a=e,t=u(),s=(0,o.QT)().t,i=(0,n.iH)({name:"",value:""}),p=(0,n.iH)(!1),r=(0,n.iH)(!1),d=(0,l.Fl)({get:()=>t.getCountPhpConfigUpdates,set:e=>{t.setCountPhpConfigUpdates(e)}}),c=(0,l.Fl)((()=>t.getPhpVersion)),v=(0,l.Fl)({get:()=>t.getHostname,set:e=>t.setHostname(e)});function m(){const e=new D,a="On"===i.value.value?"Off":"On";p.value=!0,d.value++,e.updatePhpConfigs({hostname:v.value,version:c.value.value,settings:[i.value]}).then((()=>{const e="On"===i.value.value?`${s("phpOptionsToggle.enablePhpSettingSuccess",{settingName:i.value.name})}`:`${s("phpOptionsToggle.disablePhpSettingSuccess",{settingName:i.value.name})}`;(0,x.LX)(e)})).catch((e=>{console.error(e),r.value=!0;const t="On"===i.value.value?`${s("phpOptionsToggle.enablePhpSettingError",{settingName:i.value.name})}`:`${s("phpOptionsToggle.disablePhpSettingError",{settingName:i.value.name})}`;(0,x.s9)(e.response.data,t),i.value.value=a})).finally((()=>{setTimeout((()=>{r.value=!1,p.value=!1,d.value--}),100)}))}return(0,l.YP)((()=>a.phpSetting),(e=>{i.value=Object.assign({},e)}),{immediate:!0}),(0,l.YP)(i,(()=>{!0!==r.value&&m()}),{deep:!0}),(e,a)=>{const t=(0,l.up)("q-toggle"),n=(0,l.up)("q-spinner-gears");return(0,l.wg)(),(0,l.iD)("div",Pe,[(0,l.Wm)(t,{color:"primary",label:i.value.name,style:{"font-size":"1.4rem"},modelValue:i.value.value,"onUpdate:modelValue":a[0]||(a[0]=e=>i.value.value=e),"true-value":"On","false-value":"Off",disable:p.value},null,8,["label","modelValue","disable"]),p.value?((0,l.wg)(),(0,l.j4)(n,{key:0,color:"primary",size:"2em",class:"q-ml-md"})):(0,l.kq)("",!0)])}}}),ye=we,_e=ye;b()(we,"components",{QToggle:de.Z,QSpinnerGears:ce.Z});const Ve=(0,l.aZ)({__name:"SelectWithFilter",props:{options:{},label:{default:""},icon:{default:""},emitValue:{type:Boolean,default:!0},clearable:{type:Boolean,default:!1},msgError:{default:""},isError:{type:Boolean,default:!1},isLoading:{type:Boolean,default:!1},isDisable:{type:Boolean,default:!1},shouldUseFilter:{type:Boolean,default:!0},selected:{default:""}},emits:["update:selected"],setup(e,{emit:a}){const t=e,s=(0,n.iH)(t.selected),o=(0,n.iH)(),i=(0,n.iH)(t.options);function u(e,a){if(""===e)return s.value="",void a((()=>{i.value=t.options}));a((()=>{const a=e.toLowerCase();i.value=t.options.filter((e=>e.toString().toLowerCase().indexOf(a)>-1))}))}return(0,l.bv)((()=>{o.value=t.selected})),(0,l.YP)((()=>t.selected),(e=>{s.value=e}),{immediate:!0}),(0,l.YP)(s,(e=>{e!==o.value&&(a("update:selected",e),"object"!==typeof e&&t.options.includes(e.toString())&&(o.value=e))})),(e,a)=>{const t=(0,l.up)("q-icon"),n=(0,l.up)("q-select");return(0,l.wg)(),(0,l.j4)(n,{options:i.value,modelValue:s.value,"onUpdate:modelValue":a[0]||(a[0]=e=>s.value=e),label:e.label,debounce:"100","emit-value":e.emitValue,"map-options":"",borderless:"","stack-label":"",clearable:e.clearable,"error-message":e.msgError,error:e.isError,loading:e.isLoading,disable:e.isDisable,"use-input":e.shouldUseFilter,onFocusout:a[1]||(a[1]=e=>s.value=o.value),onFilter:u,filled:""},(0,l.Nv)({_:2},[e.icon?{name:"prepend",fn:(0,l.w5)((()=>[(0,l.Wm)(t,{name:e.icon},null,8,["name"])])),key:"0"}:void 0]),1032,["options","modelValue","label","emit-value","clearable","error-message","error","loading","disable","use-input"])}}});var Se=t(32259);const Ce=Ve,Ze=Ce;b()(Ve,"components",{QSelect:Se.Z,QIcon:k.Z});const xe={class:"flex items-center q-my-md q-mx-sm",style:{height:"64px"}},He=(0,l.aZ)({__name:"PhpOptionsSelect",props:{phpSetting:{}},setup(e){const a=e,t=u(),i=(0,o.QT)().t,p=(0,n.iH)({name:"",value:""}),r=(0,n.iH)(!1),d=(0,n.iH)(!1),c=(0,l.Fl)({get:()=>t.getCountPhpConfigUpdates,set:e=>{t.setCountPhpConfigUpdates(e)}}),v=(0,l.Fl)((()=>t.getPhpVersion)),m=(0,l.Fl)((()=>t.getHostname));function h(){const e=new D,t=a.phpSetting.value;r.value=!0,c.value++,e.updatePhpConfigs({hostname:m.value,settings:[{name:p.value.name,value:p.value.value}],version:v.value.value}).then((()=>{(0,x.LX)(`${i("phpOptionsSelect.enablePhpSettingSuccess",{settingName:p.value.name})}`)})).catch((e=>{console.error(e),d.value=!0,(0,x.s9)(e.response.data,`${i("phpOptionsSelect.enablePhpSettingError",{settingName:p.value.name})}`),p.value.value=t})).finally((()=>{setTimeout((()=>{d.value=!1,r.value=!1,c.value--}),100)}))}return(0,l.YP)((()=>a.phpSetting),(e=>{p.value=Object.assign({},e)}),{immediate:!0}),(0,l.YP)(p,(()=>{!0!==d.value&&p.value.value&&h()}),{immediate:!1,deep:!0}),(e,a)=>{const t=(0,l.up)("q-spinner-gears");return(0,l.wg)(),(0,l.iD)("div",xe,[p.value.options.length<20?((0,l.wg)(),(0,l.j4)(y.Z,{key:0,options:p.value.options,selected:p.value.value,"onUpdate:selected":a[0]||(a[0]=e=>p.value.value=e),label:p.value.name,isDisable:r.value,class:"php-options-select"},null,8,["options","selected","label","isDisable"])):((0,l.wg)(),(0,l.j4)(Ze,{key:1,options:p.value.options,selected:p.value.value,"onUpdate:selected":a[1]||(a[1]=e=>p.value.value=e),label:p.value.name,isDisable:r.value,class:"php-options-select"},null,8,["options","selected","label","isDisable"])),(0,l.wy)((0,l.Wm)(t,{color:"primary",size:"2em",class:"q-ml-md"},null,512),[[s.F8,r.value]])])}}});var qe=t(18149);const De=He,Qe=De;b()(He,"components",{QSpinnerGears:ce.Z,QField:qe.Z});const We={class:"flex justify-between"},Te={class:"flex justify-between"},Ue=(0,l.aZ)({__name:"PhpOptionsTab",setup(e){const a=u(),t=(0,l.Fl)((()=>a.getPhpSettings)),n=(0,l.Fl)((()=>t.value.filter((e=>e.options.includes("On"))))),s=(0,l.Fl)((()=>t.value.filter((e=>!e.options.includes("On")))));return(e,a)=>{const t=(0,l.up)("q-card-section"),o=(0,l.up)("q-card");return(0,l.wg)(),(0,l.j4)(o,{flat:""},{default:(0,l.w5)((()=>[(0,l.Wm)(t,null,{default:(0,l.w5)((()=>[(0,l._)("div",We,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(n.value,((e,a)=>((0,l.wg)(),(0,l.j4)(_e,{key:a,phpSetting:e,style:{"min-width":"380px"}},null,8,["phpSetting"])))),128))])])),_:1}),(0,l.Wm)(t,null,{default:(0,l.w5)((()=>[(0,l._)("div",Te,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(s.value,((e,a)=>((0,l.wg)(),(0,l.j4)(Qe,{key:a,phpSetting:e,style:{"min-width":"380px"}},null,8,["phpSetting"])))),128))])])),_:1})])),_:1})}}}),Me=Ue,Fe=Me;b()(Ue,"components",{QCard:F.Z,QCardSection:j.Z});const je={class:"row"},$e={class:"col-12"},ke=(0,l.aZ)({__name:"PhpConfig",setup(e){const a=(0,n.iH)(10),t=(0,n.iH)("tab-modules");return(e,n)=>{const s=(0,l.up)("q-tab"),o=(0,l.up)("q-tabs"),i=(0,l.up)("q-tab-panel"),u=(0,l.up)("q-tab-panels"),p=(0,l.up)("q-splitter");return(0,l.wg)(),(0,l.iD)("div",je,[(0,l._)("div",$e,[(0,l.Wm)(p,{modelValue:a.value,"onUpdate:modelValue":n[2]||(n[2]=e=>a.value=e),style:{height:"100vh"}},{before:(0,l.w5)((()=>[(0,l.Wm)(o,{modelValue:t.value,"onUpdate:modelValue":n[0]||(n[0]=e=>t.value=e),vertical:"","active-color":"primary","indicator-color":"primary",align:"justify",class:"text-grey","no-caps":""},{default:(0,l.w5)((()=>[(0,l.Wm)(s,{name:"tab-modules",label:e.$t("phpIndex.tabExtensions"),class:"php-tabs",icon:"fa-brands fa-php"},null,8,["label"]),(0,l.Wm)(s,{name:"tab-settings",label:e.$t("phpIndex.tabOptions"),class:"php-tabs",icon:"sym_s_settings"},null,8,["label"])])),_:1},8,["modelValue"])])),after:(0,l.w5)((()=>[(0,l.Wm)(u,{modelValue:t.value,"onUpdate:modelValue":n[1]||(n[1]=e=>t.value=e),animated:"","keep-alive":"",vertical:""},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{name:"tab-modules"},{default:(0,l.w5)((()=>[(0,l.Wm)(fe)])),_:1}),(0,l.Wm)(i,{name:"tab-settings"},{default:(0,l.w5)((()=>[(0,l.Wm)(Fe)])),_:1})])),_:1},8,["modelValue"])])),_:1},8,["modelValue"])])])}}});var Ee=t(7498),Oe=t(47817),Ye=t(70900),Le=t(89800),Ie=t(84106);const Ne=ke,Be=Ne;b()(ke,"components",{QSplitter:Ee.Z,QTabs:Oe.Z,QTab:Ye.Z,QTabPanels:Le.Z,QTabPanel:Ie.Z});var ze=t(9281);const Ke={key:1},Xe={key:1},Ae={class:"flex q-pb-md q-gutter-sm"},Ge={class:"col"},Je={class:"col"},Re=(0,l.aZ)({__name:"PhpIndex",setup(e){const a=(0,o.QT)().t,t=u(),i=(0,p.i)(),r=(0,n.iH)(0),d=(0,n.iH)([]),c=(0,n.iH)(""),v=(0,n.iH)(!0),m=(0,n.iH)(!1),h=(0,n.iH)(!1),g=(0,n.iH)(!1),b=(0,n.iH)(!1),f=(0,n.iH)([]),P=(0,l.Fl)((()=>_.value||g.value||b.value)),y=(0,l.Fl)({get:()=>i.getShowCreateMappingDialog,set:e=>i.setShowCreateMappingDialog(e)}),_=(0,l.Fl)({get:()=>t.getIsLoadingPhpConfig,set:e=>t.setIsLoadingPhpConfig(e)}),V=(0,l.Fl)({get:()=>t.getCountPhpConfigUpdates,set:e=>t.setCountPhpConfigUpdates(e)}),C=(0,l.Fl)({get:()=>t.getHostname,set:e=>t.setHostname(e)}),Z=(0,l.Fl)({get:()=>t.getPhpVersion,set:e=>t.setPhpVersion(e)}),H=(0,l.Fl)({get:()=>t.getPhpSettings,set:e=>t.setPhpSettings(e)}),q=(0,l.Fl)({get:()=>t.getPhpModules,set:e=>t.setPhpModules(e)});function Q(){g.value=!0,v.value=!1;const e=new ze.Z;e.getServicesStatus().then((e=>{0!==e.data.body.length&&(e.data.body.forEach((e=>{"php-webserver"===e.name&&(v.value=!0)})),!1!==v.value&&W())})).catch((e=>{console.error(e),(0,x.s9)(e.response.data,`${a("phpIndex.checkPhpServiceError")}`)})).finally((()=>{g.value=!1}))}function W(){b.value=!0,f.value=[],d.value=[];const e=new ee.Z;e.getMappings().then((e=>{0!==e.data.body.length&&(f.value=e.data.body,d.value=f.value.map((e=>e.hostname)),c.value=d.value[0],setTimeout((()=>{_.value=!0}),200))})).catch((e=>{console.error(e),(0,x.s9)(e.response.data,`${a("phpIndex.getMappingsError")}`)})).finally((()=>{b.value=!1}))}function T(){m.value=!1,f.value.forEach((e=>{e.hostname===c.value&&e.mappings.forEach((e=>{"php-webserver"===e.targetServiceName&&(m.value=!0,_.value=!0)}))}))}function U(){if(!c.value)throw Error("InvalidHostname");const e=new D;e.getPhpConfigs(c.value).then((e=>{C.value=e.data.body.hostname,Z.value=e.data.body.version,q.value=e.data.body.modules,H.value=e.data.body.settings,m.value=!0})).catch((e=>{m.value=!1,console.error(e),(0,x.s9)(e.response.data,`${a("phpIndex.getPhpConfigurationsError")}`)})).finally((()=>{setTimeout((()=>{_.value=!1}),1e3)}))}return(0,l.YP)(y,(()=>{r.value++})),(0,l.YP)(c,(()=>{T()})),(0,l.YP)(_,(e=>{!0===e&&U()})),(0,l.YP)(h,(e=>{!0===e&&(setTimeout((()=>{_.value=!0}),1e3),h.value=!1)})),(0,l.bv)((()=>{Q()})),(e,a)=>P.value?((0,l.wg)(),(0,l.j4)(w,{key:0})):((0,l.wg)(),(0,l.iD)("div",Ke,[!1===v.value?((0,l.wg)(),(0,l.j4)(B.Z,{key:0,serviceName:"php-webserver","onUpdate:isInstalledService":a[0]||(a[0]=e=>h.value=e)})):((0,l.wg)(),(0,l.iD)("div",Xe,[(0,l._)("div",Ae,[(0,l._)("div",Ge,[(0,l.Wm)(S,{vhostsOptions:d.value,vhostSelected:c.value,"onUpdate:vhostSelected":a[1]||(a[1]=e=>c.value=e),isDisabled:V.value>0},null,8,["vhostsOptions","vhostSelected","isDisabled"])]),(0,l._)("div",Je,[(0,l.wy)((0,l.Wm)(N,{phpVersion:Z.value,"onUpdate:phpVersion":a[2]||(a[2]=e=>Z.value=e),isDisabled:V.value>0},null,8,["phpVersion","isDisabled"]),[[s.F8,!0===m.value]])])]),!1===m.value?((0,l.wg)(),(0,l.j4)(ue,{key:0,hostname:c.value},null,8,["hostname"])):((0,l.wg)(),(0,l.j4)(Be,{key:1}))]))]))}}),ea=Re,aa=ea;b()(Re,"components",{QTab:Ye.Z,QTabPanel:Ie.Z});const ta=(0,l._)("div",{class:"text-bold title-h4"},"Node JS",-1),la=(0,l.aZ)({__name:"RuntimeIndex",setup(e){const a=(0,n.iH)("php");return(e,t)=>{const n=(0,l.up)("q-tab"),s=(0,l.up)("q-tabs"),o=(0,l.up)("q-separator"),i=(0,l.up)("q-tab-panel"),u=(0,l.up)("q-tab-panels"),p=(0,l.up)("q-card-section"),r=(0,l.up)("q-card"),d=(0,l.up)("q-page");return(0,l.wg)(),(0,l.j4)(d,{padding:""},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{flat:""},{default:(0,l.w5)((()=>[(0,l.Wm)(p,null,{default:(0,l.w5)((()=>[(0,l.Wm)(s,{modelValue:a.value,"onUpdate:modelValue":t[0]||(t[0]=e=>a.value=e),class:"text-primary","active-color":"primary","indicator-color":"primary",align:"justify","inline-label":""},{default:(0,l.w5)((()=>[(0,l.Wm)(n,{name:"php",class:"runtime-tabs",icon:"fa-brands fa-php",label:"Php"}),(0,l.Wm)(n,{name:"node",class:"runtime-tabs hidden",icon:"fa-brands fa-node-js",label:"Node JS",disable:""})])),_:1},8,["modelValue"]),(0,l.Wm)(o),(0,l.Wm)(u,{modelValue:a.value,"onUpdate:modelValue":t[1]||(t[1]=e=>a.value=e),animated:"",swipeable:"","transition-prev":"jump-up","transition-next":"jump-up"},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{name:"php"},{default:(0,l.w5)((()=>[(0,l.Wm)(aa)])),_:1}),(0,l.Wm)(i,{name:"node"},{default:(0,l.w5)((()=>[ta])),_:1})])),_:1},8,["modelValue"])])),_:1})])),_:1})])),_:1})}}});var na=t(69885),sa=t(50926);const oa=la,ia=oa;b()(la,"components",{QPage:na.Z,QCard:F.Z,QCardSection:j.Z,QTabs:Oe.Z,QTab:Ye.Z,QSeparator:sa.Z,QTabPanels:Le.Z,QTabPanel:Ie.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/646.b5fb1ff2.js b/src/presentation/ui/dist/js/646.b5fb1ff2.js deleted file mode 100644 index ab30c2265..000000000 --- a/src/presentation/ui/dist/js/646.b5fb1ff2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[646],{34721:(e,l,t)=>{t.r(l),t.d(l,{default:()=>Qe});var a=t(59835),s=t(86970),o=t(60499),n=t(99573);const i=(0,a.aZ)({__name:"SslTableMainTd",props:{virtualHosts:{}},setup(e){return(e,l)=>((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e.virtualHosts,((e,l)=>((0,a.wg)(),(0,a.iD)("div",{key:l},[(0,a.Wm)(n.Z,{label:e,icon:"sym_s_lan"},null,8,["label"])])))),128))}}),r=i,u=r;var c=t(3746);const d=(0,c.Q_)("ssl",{state:()=>({keySslTable:0,keyCreateSslDialog:0,sslSelected:{},showChangeSslDialog:!1,showCreateSslDialog:!1,showDownloadFilesDialog:!1}),getters:{getKeySslTable(e){return e.keySslTable},getKeyCreateSslDialog(e){return e.keyCreateSslDialog},getSslSelected(e){return e.sslSelected},getShowChangeSslDialog(e){return e.showChangeSslDialog},getShowCreateSslDialog(e){return e.showCreateSslDialog},getShowDownloadFilesDialog(e){return e.showDownloadFilesDialog}},actions:{setKeySslTable(e){this.keySslTable=e},setKeyCreateSslDialog(e){this.keyCreateSslDialog=e},setSslSelected(e){this.sslSelected=e},setShowChangeSslDialog(e){this.showChangeSslDialog=e},setShowCreateSslDialog(e){this.showCreateSslDialog=e},setShowDownloadFilesDialog(e){this.showDownloadFilesDialog=e}}}),p={class:"flex justify-end items-center"},m=(0,a.aZ)({__name:"SslTableActions",props:{ssl:{}},setup(e){const l=e,t=d();function o(){t.setSslSelected(l.ssl),t.setShowChangeSslDialog(!0)}function n(){t.setSslSelected(l.ssl),t.setShowDownloadFilesDialog(!0)}return(e,l)=>{const t=(0,a.up)("q-tooltip"),i=(0,a.up)("q-btn");return(0,a.wg)(),(0,a.iD)("div",p,[(0,a.Wm)(i,{color:"primary",outline:"",icon:"sym_s_download",size:"md",class:"q-mr-sm",onClick:l[0]||(l[0]=e=>n())},{default:(0,a.w5)((()=>[(0,a.Wm)(t,{class:"bg-primary text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(e.$t("sslTableActions.downloadPemFilesBtn")),1)])),_:1})])),_:1}),(0,a.Wm)(i,{color:"negative",icon:"sym_s_sync_problem",size:"md",onClick:l[1]||(l[1]=e=>o())},{default:(0,a.w5)((()=>[(0,a.Wm)(t,{class:"bg-negative text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(e.$t("sslTableActions.swapSslBtn")),1)])),_:1})])),_:1})])}}});var g=t(68879),w=t(46858),v=t(69984),f=t.n(v);const b=m,y=b;f()(m,"components",{QBtn:g.Z,QTooltip:w.Z});var h=t(84278),_=t(25121);const C={class:"row justify-center q-mt-md"},S=(0,a.aZ)({__name:"SslTable",props:{sslCertificatesList:{}},setup(e){const l=e,t=d(),n=(0,_.QT)().t,i=(0,a.Fl)({get:()=>t.getShowCreateSslDialog,set:e=>{t.setShowCreateSslDialog(e)}}),r=(0,a.Fl)({get:()=>t.getKeyCreateSslDialog,set:e=>{t.setKeyCreateSslDialog(e)}}),c=(0,o.iH)(""),p=(0,o.iH)([{name:"issuedAt",label:n("sslTable.issuedAtCol"),align:"center",field:"certificate",format:e=>v(e.issuedAt),sortable:!0},{name:"expiresAt",label:n("sslTable.expiresAtCol"),align:"center",field:"certificate",format:e=>v(e.expiresAt),sortable:!0},{name:"certificateAuthority",label:n("sslTable.isCACol"),align:"center",field:"certificate",format:e=>e.certificateAuthority,sortable:!0}]),m=(0,o.iH)({sortBy:"desc",descending:!1,page:1,rowsPerPage:10}),g=(0,a.Fl)((()=>Math.ceil(l.sslCertificatesList.length/m.value.rowsPerPage)));function w(){r.value++,i.value=!0}function v(e){if(0===e)return"-";const l=new Date(1e3*e),t=l.toLocaleDateString();return t}return(e,l)=>{const t=(0,a.up)("q-icon"),o=(0,a.up)("q-input"),n=(0,a.up)("q-space"),i=(0,a.up)("q-th"),r=(0,a.up)("q-tr"),d=(0,a.up)("q-td"),v=(0,a.up)("q-table"),f=(0,a.up)("q-pagination");return(0,a.wg)(),(0,a.iD)(a.HY,null,[(0,a.Wm)(v,{rows:e.sslCertificatesList,columns:p.value,filter:c.value,pagination:m.value,"onUpdate:pagination":l[2]||(l[2]=e=>m.value=e),"no-data-label":e.$t("sslTable.noDataLabel"),"row-key":"key",color:"primary",flat:"",bordered:"","hide-pagination":""},{top:(0,a.w5)((()=>[(0,a.Wm)(o,{borderless:"",debounce:"300",color:"primary",modelValue:c.value,"onUpdate:modelValue":l[0]||(l[0]=e=>c.value=e),label:e.$t("sslTable.searchInput")},{prepend:(0,a.w5)((()=>[(0,a.Wm)(t,{name:"sym_s_search"})])),_:1},8,["modelValue","label"]),(0,a.Wm)(n),(0,a.Wm)(h.Z,{label:e.$t("sslTable.createSslBtn"),color:"primary",icon:"sym_s_add_task",onClick:l[1]||(l[1]=e=>w())},null,8,["label"])])),header:(0,a.w5)((l=>[(0,a.Wm)(r,{props:l},{default:(0,a.w5)((()=>[(0,a.Wm)(i,{class:"bg-primary text-white",style:{"font-weight":"bold","font-size":"14px"}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(e.$t("sslTable.virtualHostCol")),1)])),_:1}),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(l.cols,(e=>((0,a.wg)(),(0,a.j4)(i,{key:e.name,props:l,style:{"font-weight":"bold","font-size":"14px"}},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(e.label),1)])),_:2},1032,["props"])))),128)),(0,a.Wm)(i)])),_:2},1032,["props"])])),body:(0,a.w5)((e=>[(0,a.Wm)(r,{props:e},{default:(0,a.w5)((()=>[(0,a.Wm)(d,{class:"td-main-table"},{default:(0,a.w5)((()=>[(0,a.Wm)(u,{virtualHosts:e.row.virtualHostsHostnames},null,8,["virtualHosts"])])),_:2},1024),((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e.cols,(l=>((0,a.wg)(),(0,a.j4)(d,{key:l.name,props:e},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)(l.value),1)])),_:2},1032,["props"])))),128)),(0,a.Wm)(d,{class:"text-right"},{default:(0,a.w5)((()=>[(0,a.Wm)(y,{ssl:e.row},null,8,["ssl"])])),_:2},1024)])),_:2},1032,["props"])])),_:1},8,["rows","columns","filter","pagination","no-data-label"]),(0,a._)("div",C,[(0,a.Wm)(f,{modelValue:m.value.page,"onUpdate:modelValue":l[3]||(l[3]=e=>m.value.page=e),color:"primary",max:g.value,size:"md"},null,8,["modelValue","max"])])],64)}}});var D=t(84277),q=t(13119),x=t(22857),W=t(90136),Z=t(31233),F=t(21682),k=t(67220),Q=t(80996);const H=S,T=H;f()(S,"components",{QTable:D.Z,QInput:q.Z,QIcon:x.Z,QSpace:W.Z,QTr:Z.Z,QTh:F.Z,QTd:k.Z,QPagination:Q.Z});var V=t(69036),$=function(e,l,t,a){function s(e){return e instanceof t?e:new t((function(l){l(e)}))}return new(t||(t=Promise))((function(t,o){function n(e){try{r(a.next(e))}catch(l){o(l)}}function i(e){try{r(a["throw"](e))}catch(l){o(l)}}function r(e){e.done?t(e.value):s(e.value).then(n,i)}r((a=a.apply(e,l||[])).next())}))};class I extends V.Z{getSsl(){return $(this,void 0,void 0,(function*(){return this.request.get("/v1/ssl/")}))}createSsl(e){return $(this,void 0,void 0,(function*(){return this.request.post("/v1/ssl/",e)}))}deleteSsl(e){return $(this,void 0,void 0,(function*(){return this.request.delete(`/v1/ssl/${e}/`)}))}}var P=t(45273),U=t(88900);const z={class:"flex justify-between items-center"},j={class:"title-dialog"},B={class:"text-bold",style:{"font-size":"1.25rem"}},A={style:{"font-size":"0.9708rem","line-height":"1.618"}},K=(0,a.aZ)({__name:"SslChangeDialog",setup(e){const l=(0,_.QT)().t,t=d(),o=(0,a.Fl)({get:()=>t.getShowChangeSslDialog,set:e=>{t.setShowChangeSslDialog(e)}}),n=(0,a.Fl)((()=>t.getSslSelected.sslPairId)),i=(0,a.Fl)({get:()=>t.keySslTable,set:e=>{t.keySslTable=e}});function r(){o.value=!1}function u(){(0,P.Q)();const e=new I;e.deleteSsl(n.value).then((()=>{(0,U.LX)(l("sslChangeDialog.deletedSuccessfully")),i.value++,r()})).catch((e=>{console.error(e),(0,U.s9)(e.response.data,l("sslChangeDialog.errorDeletingSsl"))})).finally((()=>{(0,P.Z)()}))}return(e,l)=>{const t=(0,a.up)("q-btn"),n=(0,a.up)("q-card-section"),i=(0,a.up)("q-card-actions"),c=(0,a.up)("q-card"),d=(0,a.up)("q-dialog");return(0,a.wg)(),(0,a.j4)(d,{modelValue:o.value,"onUpdate:modelValue":l[3]||(l[3]=e=>o.value=e),persistent:""},{default:(0,a.w5)((()=>[(0,a.Wm)(c,{style:{width:"700px","max-width":"80vw"},class:"dialog-card-bg"},{default:(0,a.w5)((()=>[(0,a._)("div",z,[(0,a._)("div",j,(0,s.zw)(e.$t("sslChangeDialog.title")),1),(0,a.Wm)(t,{flat:"",round:"",dense:"",icon:"sym_s_close",onClick:l[0]||(l[0]=e=>r())})]),(0,a.Wm)(n,{class:"q-px-none"},{default:(0,a.w5)((()=>[(0,a._)("div",B,(0,s.zw)(e.$t("sslChangeDialog.messageReplaceSsl")),1)])),_:1}),(0,a.Wm)(n,{class:"q-px-none"},{default:(0,a.w5)((()=>[(0,a._)("div",A,(0,s.zw)(e.$t("sslChangeDialog.warningReplaceSsl")),1)])),_:1}),(0,a.Wm)(i,{align:"between",class:"q-px-none q-pt-lg"},{default:(0,a.w5)((()=>[(0,a.Wm)(h.Z,{label:e.$t("sslChangeDialog.cancelBtn"),color:"grey-7",onClick:l[1]||(l[1]=e=>r())},null,8,["label"]),(0,a.Wm)(h.Z,{label:e.$t("sslChangeDialog.swapSslBtn"),onClick:l[2]||(l[2]=e=>u())},null,8,["label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var L=t(32074),R=t(44458),Y=t(63190),M=t(11821);const E=K,O=E;f()(K,"components",{QDialog:L.Z,QCard:R.Z,QBtn:g.Z,QCardSection:Y.Z,QCardActions:M.Z});var X=t(61957),N=t(27974),G=t(60016);const J=(0,a.aZ)({__name:"SslVirtualHostsSelect",emits:["update:selectedVirtualHosts"],setup(e,{emit:l}){const t=(0,o.iH)([]),s=(0,o.iH)([]),n=(0,o.iH)(!1);function i(){n.value=!0;const e=new G.Z;e.getVirtualHosts().then((e=>{const l=e.data.body;s.value=l.map((e=>({label:e.hostname,value:e.hostname})))})).catch((e=>{console.error(e)})).finally((()=>{n.value=!1}))}return(0,a.wF)((()=>{i()})),(0,a.YP)(t,(e=>{l("update:selectedVirtualHosts",e)})),(e,l)=>{const o=(0,a.up)("q-skeleton");return!0===n.value?((0,a.wg)(),(0,a.j4)(o,{key:0,style:{height:"50px"}})):((0,a.wg)(),(0,a.j4)(N.Z,{key:1,selected:t.value,"onUpdate:selected":l[0]||(l[0]=e=>t.value=e),label:e.$t("sslVirtualHostsSelect.labelSelectVirtualHosts"),icon:"sym_s_lan",options:s.value},null,8,["selected","label","options"]))}}});var ee=t(57133);const le=J,te=le;f()(J,"components",{QSkeleton:ee.ZP});const ae=(0,a.aZ)({__name:"SslCertificateFieldInput",props:{valueField:{},rules:{},label:{},icon:{}},emits:["update:valueField","update:isValidContent"],setup(e,{emit:l}){const t=e,s=(0,o.iH)(t.valueField),n=(0,a.Fl)((()=>s.value.length>=256&&s.value.length<=4096));return(0,a.YP)((()=>t.valueField),(e=>{s.value=e}),{immediate:!0}),(0,a.YP)(s,(e=>{l("update:valueField",e)}),{immediate:!0}),(0,a.YP)(n,(e=>{l("update:isValidContent",e)}),{immediate:!0}),(e,l)=>{const t=(0,a.up)("q-icon"),o=(0,a.up)("q-input");return(0,a.wg)(),(0,a.j4)(o,{type:"textarea",filled:"",modelValue:s.value,"onUpdate:modelValue":l[0]||(l[0]=e=>s.value=e),label:e.label,rules:e.rules},{prepend:(0,a.w5)((()=>[(0,a.Wm)(t,{name:e.icon},null,8,["name"])])),_:1},8,["modelValue","label","rules"])}}}),se=ae,oe=se;f()(ae,"components",{QInput:q.Z,QIcon:x.Z});const ne=(0,a.aZ)({__name:"SslFileUploader",props:{label:{}},emits:["update:fileContent"],setup(e,{emit:l}){const t=(0,o.iH)(""),s=(0,o.iH)(null);return(0,a.YP)(s,(e=>{if(t.value="",e){const l=new FileReader;l.onload=e=>{var l;t.value=null===(l=e.target)||void 0===l?void 0:l.result},l.readAsText(e)}})),(0,a.YP)(t,(e=>{setTimeout((()=>{l("update:fileContent",e)}),100)})),(e,l)=>{const t=(0,a.up)("q-icon"),o=(0,a.up)("q-file");return(0,a.wg)(),(0,a.j4)(o,{color:"primary",filled:"",modelValue:s.value,"onUpdate:modelValue":l[1]||(l[1]=e=>s.value=e),label:e.label},{prepend:(0,a.w5)((()=>[(0,a.Wm)(t,{name:"sym_s_upload"})])),append:(0,a.w5)((()=>[null!==s.value?((0,a.wg)(),(0,a.j4)(t,{key:0,name:"sym_s_close",onClick:l[0]||(l[0]=(0,X.iM)((e=>s.value=null),["stop","prevent"])),class:"cursor-pointer"})):(0,a.kq)("",!0)])),_:1},8,["modelValue","label"])}}});var ie=t(33837);const re=ne,ue=re;f()(ne,"components",{QFile:ie.Z,QIcon:x.Z});const ce={class:"flex justify-between items-center"},de={class:"title-dialog"},pe={class:"flex justify-end q-px-none q-mt-none"},me=(0,a.aZ)({__name:"SslCreateDialog",setup(e){const l=d(),t=(0,_.QT)().t,n=(0,o.iH)(!1),i=(0,o.iH)([]),r=(0,o.iH)(""),u=(0,o.iH)(""),c=(0,o.iH)(""),p=(0,o.iH)(!0),m=(0,o.iH)(!1),g=(0,o.iH)(!1),w=(0,a.Fl)((()=>`${u.value}\n${c.value}`)),v=(0,a.Fl)((()=>i.value.length>0&&m.value&&g.value)),f=(0,a.Fl)({get:()=>l.getKeySslTable,set:e=>{l.setKeySslTable(e)}}),b=(0,a.Fl)({get:()=>l.getShowCreateSslDialog,set:e=>{l.setShowCreateSslDialog(e)}});function y(){b.value=!1}function C(){const e=new I;(0,P.Q)(),e.createSsl({virtualHosts:i.value,key:btoa(r.value),certificate:c.value.length>0?btoa(w.value):btoa(u.value)}).then((()=>{(0,U.LX)(t("sslCreateDialog.createdSuccessfully")),f.value++,y()})).catch((e=>{console.error("Create SSL error",e),(0,U.s9)(e.response.data,t("sslCreateDialog.errorCreatingSsl"))})).finally((()=>{(0,P.Z)()}))}return(e,l)=>{const t=(0,a.up)("q-btn"),o=(0,a.up)("q-card-section"),d=(0,a.up)("q-toggle"),w=(0,a.up)("q-card-actions"),f=(0,a.up)("q-card"),_=(0,a.up)("q-dialog");return(0,a.wg)(),(0,a.j4)(_,{modelValue:b.value,"onUpdate:modelValue":l[13]||(l[13]=e=>b.value=e),persistent:""},{default:(0,a.w5)((()=>[(0,a.Wm)(f,{style:{width:"700px","max-width":"80vw"},class:"dialog-card-bg"},{default:(0,a.w5)((()=>[(0,a._)("div",ce,[(0,a._)("div",de,(0,s.zw)(e.$t("sslCreateDialog.title")),1),(0,a.Wm)(t,{flat:"",round:"",dense:"",icon:"sym_s_close",onClick:l[0]||(l[0]=e=>y())})]),(0,a.Wm)(o,{class:"q-px-none"},{default:(0,a.w5)((()=>[(0,a.Wm)(te,{"onUpdate:selectedVirtualHosts":l[1]||(l[1]=e=>i.value=e)})])),_:1}),(0,a.wy)((0,a.Wm)(o,{class:"q-px-none"},{default:(0,a.w5)((()=>[(0,a.Wm)(oe,{valueField:u.value,"onUpdate:valueField":l[2]||(l[2]=e=>u.value=e),label:e.$t("sslCreateDialog.labelCertificateInput"),icon:"sym_s_lock","onUpdate:isValidContent":l[3]||(l[3]=e=>g.value=e),rules:[()=>u.value.length>0||e.$t("sslCreateDialog.certificateContentIsRequired"),()=>g.value||e.$t("sslCreateDialog.certificateContentIsInvalid")],class:"q-my-sm"},null,8,["valueField","label","rules"]),(0,a.Wm)(oe,{valueField:r.value,"onUpdate:valueField":l[4]||(l[4]=e=>r.value=e),label:e.$t("sslCreateDialog.labelPrivateKeyInput"),icon:"sym_s_key","onUpdate:isValidContent":l[5]||(l[5]=e=>m.value=e),rules:[()=>r.value.length>0||e.$t("sslCreateDialog.privateKeyIsRequired"),()=>m.value||e.$t("sslCreateDialog.privateKeyIsInvalid")],class:"q-my-sm"},null,8,["valueField","label","rules"]),(0,a.Wm)(oe,{valueField:c.value,"onUpdate:valueField":l[6]||(l[6]=e=>c.value=e),label:e.$t("sslCreateDialog.labelCertificateChainInput"),icon:"sym_s_domain_verification","onUpdate:isValidContent":l[7]||(l[7]=e=>p.value=e),rules:[()=>p.value||e.$t("sslCreateDialog.certificateAuthIsInvalid")],class:"q-my-sm"},null,8,["valueField","label","rules"])])),_:1},512),[[X.F8,!1===n.value]]),(0,a.wy)((0,a.Wm)(o,{class:"q-px-none q-mb-sm"},{default:(0,a.w5)((()=>[(0,a.Wm)(ue,{"onUpdate:fileContent":l[8]||(l[8]=e=>u.value=e),label:e.$t("sslCreateDialog.labelCertificateInput"),class:"q-my-md"},null,8,["label"]),(0,a.Wm)(ue,{label:e.$t("sslCreateDialog.labelPrivateKeyInput"),"onUpdate:fileContent":l[9]||(l[9]=e=>r.value=e),class:"q-mt-sm q-mb-none"},null,8,["label"])])),_:1},512),[[X.F8,!0===n.value]]),(0,a.Wm)(o,{class:"q-pt-none"},{default:(0,a.w5)((()=>[(0,a._)("div",pe,[(0,a.Wm)(d,{modelValue:n.value,"onUpdate:modelValue":l[10]||(l[10]=e=>n.value=e),label:e.$t("sslCreateDialog.labelShowFileTypeInputs"),color:"primary",size:"md",style:{"font-size":"0.9708rem"}},null,8,["modelValue","label"])])])),_:1}),(0,a.Wm)(w,{align:"between",class:"q-px-none"},{default:(0,a.w5)((()=>[(0,a.Wm)(h.Z,{label:e.$t("sslCreateDialog.cancelBtn"),color:"grey-7",onClick:l[11]||(l[11]=e=>y())},null,8,["label"]),(0,a.Wm)(h.Z,{color:"primary",icon:"sym_s_add_task",label:e.$t("sslCreateDialog.createBtn"),disabled:!1===v.value,onClick:l[12]||(l[12]=e=>C())},null,8,["label","disabled"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var ge=t(23175);const we=me,ve=we;f()(me,"components",{QDialog:L.Z,QCard:R.Z,QBtn:g.Z,QCardSection:Y.Z,QToggle:ge.Z,QCardActions:M.Z});var fe=function(e,l,t,a){function s(e){return e instanceof t?e:new t((function(l){l(e)}))}return new(t||(t=Promise))((function(t,o){function n(e){try{r(a.next(e))}catch(l){o(l)}}function i(e){try{r(a["throw"](e))}catch(l){o(l)}}function r(e){e.done?t(e.value):s(e.value).then(n,i)}r((a=a.apply(e,l||[])).next())}))};const be={style:{height:"200px","overflow-y":"auto","border-radius":"5px",padding:"10px","margin-bottom":"7px","margin-top":"5px","background-color":"#25262a",color:"white"}},ye={class:"flex justify-end"},he=(0,a.aZ)({__name:"SslFilePemClipBoard",props:{content:{},extension:{},sslPairId:{}},setup(e){const l=e,t=(0,_.QT)().t,n=(0,o.iH)(null);function i(){const e=new Blob([atob(l.content)],{type:"text/plain"}),t=window.URL.createObjectURL(e),a=document.createElement("a");a.href=t,a.download=`${l.sslPairId}.${l.extension}`,document.body.appendChild(a),a.click(),window.URL.revokeObjectURL(t),document.body.removeChild(a)}function r(){var e,l,a;return fe(this,void 0,void 0,(function*(){if(!n.value)return;const s=document.createRange();s.selectNode(n.value),null===(e=window.getSelection())||void 0===e||e.removeAllRanges(),null===(l=window.getSelection())||void 0===l||l.addRange(s),document.execCommand("copy"),null===(a=window.getSelection())||void 0===a||a.removeAllRanges(),(0,U.c0)({msg:`${t("sslFilePemClipBoard.messageCopied")}`,position:"bottom",type:"primary",html:!0})}))}function u(e){return atob(e)}return(e,l)=>{const c=(0,a.up)("q-tooltip"),d=(0,a.up)("q-icon"),p=(0,a.up)("q-btn");return(0,a.wg)(),(0,a.iD)("div",null,[(0,a._)("div",be,[(0,a._)("div",ye,[(0,a.Wm)(d,{name:"sym_s_content_copy",size:"xs",class:"fixed cursor-pointer",color:"grey-6",onClick:l[0]||(l[0]=e=>r())},{default:(0,a.w5)((()=>[(0,a.Wm)(c,{class:"bg-grey-8 text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)((0,o.SU)(t)("sslFilePemClipBoard.messageClipBoard")),1)])),_:1})])),_:1})]),(0,a._)("pre",{ref_key:"clipboard",ref:n},(0,s.zw)(u(e.content)),513)]),(0,a.Wm)(p,{color:"primary",class:"full-width",outline:"",icon:"sym_s_download",onClick:l[1]||(l[1]=e=>i())},{default:(0,a.w5)((()=>[(0,a.Wm)(c,{class:"bg-primary text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,a.w5)((()=>[(0,a.Uk)((0,s.zw)((0,o.SU)(t)("sslFilePemClipBoard.downloadFile")),1)])),_:1})])),_:1})])}}}),_e=he,Ce=_e;f()(he,"components",{QIcon:x.Z,QTooltip:w.Z,QBtn:g.Z});const Se={class:"flex justify-between items-center"},De={class:"title-dialog"},qe=(0,a.aZ)({__name:"SslDownloadFilesDialog",setup(e){const l=d(),t=(0,a.Fl)((()=>l.sslSelected)),o=(0,a.Fl)({get:()=>l.getShowDownloadFilesDialog,set:e=>l.setShowDownloadFilesDialog(e)});function n(){o.value=!1}return(e,l)=>{const i=(0,a.up)("q-btn"),r=(0,a.up)("q-card-section"),u=(0,a.up)("q-card"),c=(0,a.up)("q-dialog");return(0,a.wg)(),(0,a.j4)(c,{modelValue:o.value,"onUpdate:modelValue":l[1]||(l[1]=e=>o.value=e),persistent:""},{default:(0,a.w5)((()=>[(0,a.Wm)(u,{style:{width:"700px","max-width":"80vw"},class:"dialog-card-bg"},{default:(0,a.w5)((()=>[(0,a._)("div",Se,[(0,a._)("div",De,(0,s.zw)(e.$t("sslDownloadFilesDialog.title")),1),(0,a.Wm)(i,{flat:"",round:"",dense:"",icon:"sym_s_close",onClick:l[0]||(l[0]=e=>n())})]),(0,a.Wm)(r,{class:"q-px-none"},{default:(0,a.w5)((()=>[(0,a._)("div",null,(0,s.zw)(e.$t("sslDownloadFilesDialog.labelCertificate")),1),(0,a.Wm)(Ce,{sslPairId:t.value.sslPairId,extension:"crt",content:t.value.certificate.certificateContent},null,8,["sslPairId","content"])])),_:1}),(0,a.Wm)(r,{class:"q-px-none"},{default:(0,a.w5)((()=>[(0,a._)("div",null,(0,s.zw)(e.$t("sslDownloadFilesDialog.labelPrivateKey")),1),(0,a.Wm)(Ce,{sslPairId:t.value.sslPairId,extension:"key",content:t.value.key},null,8,["sslPairId","content"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),xe=qe,We=xe;f()(qe,"components",{QDialog:L.Z,QCard:R.Z,QBtn:g.Z,QCardSection:Y.Z});const Ze=(0,a.aZ)({__name:"SslIndex",setup(e){const l=(0,_.QT)().t,t=new I,s=(0,o.iH)([]),n=d(),i=(0,a.Fl)((()=>n.getKeySslTable)),r=(0,a.Fl)((()=>n.getKeyCreateSslDialog));function u(){t.getSsl().then((e=>{s.value=e.data.body})).catch((e=>{console.error(e),(0,U.s9)(e.response.data,l("sslIndex.getSslError"))}))}return(0,a.wF)((()=>{u()})),(0,a.YP)(i,(()=>{u()})),(e,l)=>{const t=(0,a.up)("q-card-section"),o=(0,a.up)("q-card"),n=(0,a.up)("q-page");return(0,a.wg)(),(0,a.j4)(n,null,{default:(0,a.w5)((()=>[(0,a.Wm)(O),(0,a.Wm)(We),((0,a.wg)(),(0,a.j4)(ve,{key:r.value})),(0,a.Wm)(o,{flat:"",style:{height:"100vh"}},{default:(0,a.w5)((()=>[(0,a.Wm)(t,null,{default:(0,a.w5)((()=>[(0,a.Wm)(T,{sslCertificatesList:s.value},null,8,["sslCertificatesList"])])),_:1})])),_:1})])),_:1})}}});var Fe=t(69885);const ke=Ze,Qe=ke;f()(Ze,"components",{QPage:Fe.Z,QCard:R.Z,QCardSection:Y.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/664.2b314485.js b/src/presentation/ui/dist/js/664.2b314485.js deleted file mode 100644 index 57f62ae17..000000000 --- a/src/presentation/ui/dist/js/664.2b314485.js +++ /dev/null @@ -1 +0,0 @@ -(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[664],{59590:(e,l,a)=>{"use strict";a.r(l),a.d(l,{default:()=>ho});var t=a(59835),o=a(61957),i={class:"row"},n={class:"row"},s={class:"col-2"},r={class:"col"},u={class:"text-center",width:"25px"},c={class:"text-center",width:"25px"},d={class:"text-left",width:"100px"},m={class:"text-left",width:"100px"},p={class:"text-left",width:"100px"},g={class:"text-left",width:"100px"},v={class:"text-left"},f={class:"text-left"},w={class:"text-left"},b={class:"text-left"},h={class:"text-left"},y={class:"text-left"};function _(e,l){var a=(0,t.up)("q-skeleton"),o=(0,t.up)("q-markup-table");return(0,t.wg)(),(0,t.iD)("div",null,[(0,t._)("div",i,[(0,t.Wm)(a,{type:"QInput",width:"100vw",height:"75px",class:"q-my-sm"})]),(0,t._)("div",n,[(0,t._)("div",s,[(0,t.Wm)(a,{type:"QInput",width:"100wh",height:"55vh",class:"q-mr-xs"})]),(0,t._)("div",r,[(0,t.Wm)(o,{flat:""},{default:(0,t.w5)((function(){return[(0,t._)("thead",null,[(0,t._)("tr",null,[(0,t._)("th",u,[(0,t.Wm)(a,{animation:"blink",type:"text"})]),(0,t._)("th",c,[(0,t.Wm)(a,{animation:"blink",type:"text"})]),(0,t._)("th",d,[(0,t.Wm)(a,{animation:"blink",type:"text"})]),(0,t._)("th",m,[(0,t.Wm)(a,{animation:"blink",type:"text"})]),(0,t._)("th",p,[(0,t.Wm)(a,{animation:"blink",type:"text"})]),(0,t._)("th",g,[(0,t.Wm)(a,{animation:"blink",type:"text"})])])]),(0,t._)("tbody",null,[((0,t.wg)(),(0,t.iD)(t.HY,null,(0,t.Ko)(10,(function(e){return(0,t._)("tr",{key:e},[(0,t._)("td",v,[(0,t.Wm)(a,{animation:"blink",type:"text",width:"25px"})]),(0,t._)("td",f,[(0,t.Wm)(a,{animation:"blink",type:"text",width:"25px"})]),(0,t._)("td",w,[(0,t.Wm)(a,{animation:"blink",type:"text",width:"100px"})]),(0,t._)("td",b,[(0,t.Wm)(a,{animation:"blink",type:"text",width:"100px"})]),(0,t._)("td",h,[(0,t.Wm)(a,{animation:"blink",type:"text",width:"100px"})]),(0,t._)("td",y,[(0,t.Wm)(a,{animation:"blink",type:"text",width:"100px"})])])})),64))])]})),_:1})])])])}var F=a(11639),D=a(57133),T=a(66933),C=a(69984),x=a.n(C);const M={},Z=(0,F.Z)(M,[["render",_]]),W=Z;x()(M,"components",{QSkeleton:D.ZP,QMarkupTable:T.Z});var q=a(86970),P=a(3746);const k=(0,P.Q_)("fileManager",{state:()=>({filesCurrentPath:[],isSelectedAllPaths:!1,listSelectedPaths:[],currentAbsolutePath:"/",activeRowTable:{},selectedPathOrActiveRow:{},selectedPath:{},pathsTreeView:[],keyTreeView:0,isLoadingHomeDir:!1}),getters:{getFilesCurrentPath(e){return e.filesCurrentPath},getIsSelectedAllPaths(e){return e.isSelectedAllPaths},getListSelectedPaths(e){return e.listSelectedPaths},getCurrentAbsolutePath(e){return e.currentAbsolutePath},getActiveRowTable(e){return e.activeRowTable},getSelectedPathOrActiveRow(e){return e.selectedPathOrActiveRow},getSelectedPath(e){return e.selectedPath},getPathsTreeView(e){return e.pathsTreeView},getKeyTreeView(e){return e.keyTreeView},getIsLoadingHomeDir(e){return e.isLoadingHomeDir}},actions:{setFilesCurrentPath(e){this.filesCurrentPath=e},setIsSelectedAllPaths(e){this.isSelectedAllPaths=e},setListSelectedPaths(e){this.listSelectedPaths=e},setCurrentAbsolutePath(e){this.currentAbsolutePath=e},setActiveRowTable(e){this.activeRowTable=e},setSelectedPathOrActiveRow(e){this.selectedPathOrActiveRow=e},setSelectedPath(e){this.selectedPath=e},setPathsTreeView(e){this.pathsTreeView=e},setKeyTreeView(e){this.keyTreeView=e},setIsLoadingHomeDir(e){this.isLoadingHomeDir=e}}}),Q=(0,t.aZ)({__name:"FileManagerToolbarBtnHome",setup(e){const l=k();function a(){l.setCurrentAbsolutePath("/")}return(e,l)=>{const o=(0,t.up)("q-tooltip"),i=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.j4)(i,{icon:"sym_s_home",color:"primary",round:"",onClick:l[0]||(l[0]=e=>a())},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnHome.btnGoToHome")),1)])),_:1})])),_:1})}}});var $=a(68879),R=a(46858);const z=Q,B=z;x()(Q,"components",{QBtn:$.Z,QTooltip:R.Z});const E=(0,t.aZ)({__name:"FileManagerToolbarBtnGoBackUp",props:{isDisabled:{type:Boolean}},setup(e){const l=k();function a(){let e=l.getCurrentAbsolutePath.split("/");e.pop();let a=e.join("/");""===a&&(a="/"),l.setCurrentAbsolutePath(a)}return(e,l)=>{const o=(0,t.up)("q-tooltip"),i=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.j4)(i,{icon:"fas fa-arrow-turn-up",color:"primary",round:"",disable:e.isDisabled,onClick:l[0]||(l[0]=e=>a())},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnGoBackUp.btnGoBackUp")),1)])),_:1})])),_:1},8,["disable"])}}}),S=E,U=S;x()(E,"components",{QBtn:$.Z,QTooltip:R.Z});const H=(0,t.aZ)({__name:"FileManagerToolbarBtnPageReload",setup(e){const l=k(),a=(0,t.Fl)({get:()=>l.getKeyTreeView,set:e=>l.setKeyTreeView(e)});return(e,l)=>{const o=(0,t.up)("q-tooltip"),i=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.j4)(i,{icon:"fas fa-rotate",color:"primary",round:"",onClick:l[0]||(l[0]=e=>a.value++)},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnPageReload.btnPageReload")),1)])),_:1})])),_:1})}}}),V=H,j=V;x()(H,"components",{QBtn:$.Z,QTooltip:R.Z});var A=a(18892),N=a(84278),I=a(15521),L=a(60499);const Y={class:"row no-wrap items-center q-pa-sm"},K={class:"col"},O={class:"q-uploader__title"},X={class:"q-uploader__subtitle"},G={class:"q-pr-md"},J={class:"q-pr-sm"},ee=(0,t.aZ)({__name:"FileManagerInputUploaderFile",emits:["update:fileBlob"],setup(e,{emit:l}){const a=(0,L.iH)([]);function o(e){a.value.push(e[0]),l("update:fileBlob",a.value)}function i(e){a.value.splice(e,1),l("update:fileBlob",a.value)}return(e,l)=>{const a=(0,t.up)("q-spinner"),n=(0,t.up)("q-uploader-add-trigger"),s=(0,t.up)("q-tooltip"),r=(0,t.up)("q-btn"),u=(0,t.up)("q-chip"),c=(0,t.up)("q-uploader");return(0,t.wg)(),(0,t.j4)(c,{flat:"",color:"grey-7",multiple:!0,"auto-upload":"",factory:o},{header:(0,t.w5)((l=>[(0,t._)("div",Y,[l.isUploading?((0,t.wg)(),(0,t.j4)(a,{key:0,class:"q-uploader__spinner"})):(0,t.kq)("",!0),(0,t._)("div",K,[(0,t._)("div",O,(0,q.zw)(e.$t("fileManagerInputUploaderFile.title")),1),(0,t._)("div",X,(0,q.zw)(l.uploadSizeLabel),1)]),l.canAddFiles?((0,t.wg)(),(0,t.j4)(r,{key:1,icon:"fas fa-paperclip",onClick:l.pickFiles,round:"",size:"12px",color:"primary","text-color":"white"},{default:(0,t.w5)((()=>[(0,t.Wm)(n),(0,t.Wm)(s,{class:"bg-primary",style:{"font-size":"14px"},offset:[10,10]},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerInputUploaderFile.addFile")),1)])),_:1})])),_:2},1032,["onClick"])):(0,t.kq)("",!0)])])),list:(0,t.w5)((e=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(e.files,((l,a)=>((0,t.wg)(),(0,t.iD)("span",{key:l.__key},[(0,t.Wm)(u,{removable:"",onRemove:t=>(i(a),e.removeFile(l)),color:"grey-7","text-color":"white",icon:"fas fa-paperclip",class:"q-mt-xs q-pa-md"},{default:(0,t.w5)((()=>[(0,t._)("span",G,(0,q.zw)(l.name),1),(0,t._)("span",J,(0,q.zw)(l.__sizeLabel),1)])),_:2},1032,["onRemove"])])))),128))])),_:1})}}});var le=a(88855),ae=a(13902),te=a(46246),oe=a(57691);const ie=ee,ne=ie;x()(ee,"components",{QUploader:le.Z,QSpinner:ae.Z,QBtn:$.Z,QUploaderAddTrigger:te.Z,QTooltip:R.Z,QChip:oe.Z});var se=a(88900),re=a(45273),ue=a(25121);const ce={class:"flex justify-between items-center"},de={class:"title-dialog"},me=(0,t.aZ)({__name:"FileManagerToolbarDialogUploaderFile",props:{showDialogUploaderFile:{type:Boolean}},emits:["update:showDialogUploaderFile"],setup(e,{emit:l}){const a=e,o=k(),i=(0,ue.QT)().t,n=(0,L.iH)(a.showDialogUploaderFile),s=(0,L.iH)([]),r=(0,t.Fl)((()=>o.getCurrentAbsolutePath)),u=(0,t.Fl)({get:()=>o.getKeyTreeView,set:e=>o.setKeyTreeView(e)});function c(){(0,re.Q)();const e=new A.Z;let l=new FormData;s.value.forEach((e=>{l.append(e.name,e)})),l.append("destinationPath",r.value),e.uploadFile(l).then((e=>{e.data.body.fileNamesSuccessfullyUploaded.length>0&&e.data.body.fileNamesSuccessfullyUploaded.forEach((e=>{(0,se.LX)(`${i("fileManagerToolbarDialogUploaderFile.msgUploaderFileSuccess",{fileName:e})}`)})),e.data.body.failedNamesWithReason.length>0&&e.data.body.failedNamesWithReason.forEach((e=>{(0,se.c0)({msg:`${i("fileManagerToolbarDialogUploaderFile.msgUploaderFileError",{fileName:e.fileName,reason:e.reason})}`,position:"bottom",type:"negative"})})),setTimeout((()=>{u.value++,n.value=!1}),1e3)})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${i("fileManagerToolbarDialogUploaderFile.msgUploaderFileError")}`)})).finally((()=>{(0,re.Z)()}))}return(0,t.YP)((()=>a.showDialogUploaderFile),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogUploaderFile",e)})),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-separator"),i=(0,t.up)("q-card-section"),u=(0,t.up)("q-card-actions"),d=(0,t.up)("q-card"),m=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(m,{modelValue:n.value,"onUpdate:modelValue":l[4]||(l[4]=e=>n.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(d,{flat:"",class:"dialog-card-bg",style:{width:"700px","max-width":"90vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",ce,[(0,t._)("div",de,(0,q.zw)(e.$t("fileManagerToolbarDialogUploaderFile.titleDialog")),1),(0,t.Wm)(a,{icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[0]||(l[0]=e=>n.value=!1)})]),(0,t.Wm)(o,{class:"q-mt-none"}),(0,t.Wm)(i,{class:"q-py-md q-px-none"},{default:(0,t.w5)((()=>[r.value?((0,t.wg)(),(0,t.j4)(I.Z,{key:0,class:"q-my-sm",label:e.$t("fileManagerToolbarDialogUploaderFile.inputSendTo"),icon:"sym_s_folder_open",value:r.value,readonly:!0,disable:!0},null,8,["label","value"])):(0,t.kq)("",!0)])),_:1}),(0,t.Wm)(u,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(ne,{fileBlob:s.value,"onUpdate:fileBlob":l[1]||(l[1]=e=>s.value=e),class:"full-width q-pa-sm"},null,8,["fileBlob"])])),_:1}),(0,t.Wm)(u,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{color:"grey-8",onClick:l[2]||(l[2]=e=>n.value=!1),label:e.$t("fileManagerToolbarDialogUploaderFile.btnCancel")},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"fas fa-upload",label:e.$t("fileManagerToolbarDialogUploaderFile.btnUploaderFile"),disable:!r.value||0===s.value.length,onClick:l[3]||(l[3]=e=>c())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var pe=a(32074),ge=a(44458),ve=a(50926),fe=a(63190),we=a(11821);const be=me,he=be;x()(me,"components",{QDialog:pe.Z,QCard:ge.Z,QBtn:$.Z,QSeparator:ve.Z,QCardSection:fe.Z,QCardActions:we.Z});const ye=(0,t.aZ)({__name:"FileManagerToolbarBtnUploaderFile",setup(e){const l=(0,L.iH)(!1),a=(0,L.iH)(0);return(e,o)=>{const i=(0,t.up)("q-tooltip"),n=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(he,{showDialogUploaderFile:l.value,"onUpdate:showDialogUploaderFile":o[0]||(o[0]=e=>l.value=e),key:a.value},null,8,["showDialogUploaderFile"])),(0,t.Wm)(n,{icon:"fas fa-upload",color:"primary",round:"",onClick:o[1]||(o[1]=e=>(l.value=!0,a.value++))},{default:(0,t.w5)((()=>[(0,t.Wm)(i,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnUploaderFile.btnUploaderFile")),1)])),_:1})])),_:1})])}}}),_e=ye,Fe=_e;x()(ye,"components",{QBtn:$.Z,QTooltip:R.Z});const De={class:"flex justify-between items-center"},Te={class:"title-dialog"},Ce=(0,t.aZ)({__name:"FileManagerToolbarDialogNewFolder",props:{showDialogNewFolder:{type:Boolean}},emits:["update:showDialogNewFolder"],setup(e,{emit:l}){const a=e,o=k(),i=(0,ue.QT)().t,n=(0,L.iH)(a.showDialogNewFolder),s=(0,L.iH)(""),r=(0,t.Fl)((()=>o.getCurrentAbsolutePath)),u=(0,t.Fl)({get:()=>o.getKeyTreeView,set:e=>o.setKeyTreeView(e)}),c=(0,t.Fl)((()=>{const e=new RegExp(/^\w{1,256}$/);return e.test(s.value)}));function d(){(0,re.Q)();const e=new A.Z;e.createFile({filePath:`${r.value}/${s.value}`,mimeType:"directory",permissions:"0755"}).then((()=>{(0,se.LX)(`${i("fileManagerToolbarDialogNewFolder.msgCreateFolderSuccess",{dirName:s.value})}`),n.value=!1,u.value++})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${i("fileManagerToolbarDialogNewFolder.msgCreateFolderError",{dirName:s.value})}`)})).finally((()=>{(0,re.Z)()}))}return(0,t.YP)((()=>a.showDialogNewFolder),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogNewFolder",e)})),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-separator"),i=(0,t.up)("q-card-section"),u=(0,t.up)("q-card-actions"),m=(0,t.up)("q-card"),p=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(p,{modelValue:n.value,"onUpdate:modelValue":l[4]||(l[4]=e=>n.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(m,{flat:"",class:"dialog-card-bg",style:{width:"700px","max-width":"90vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",De,[(0,t._)("div",Te,(0,q.zw)(e.$t("fileManagerToolbarDialogNewFolder.titleDialog")),1),(0,t.Wm)(a,{icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[0]||(l[0]=e=>n.value=!1)})]),(0,t.Wm)(o,{class:"q-mt-none"}),(0,t.Wm)(i,{class:"q-py-md q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(I.Z,{label:e.$t("fileManagerToolbarDialogNewFolder.labelInputNameFolder"),icon:"sym_s_folder",prefix:"/"!==r.value?`${r.value}/`:r.value,value:s.value,"onUpdate:value":l[1]||(l[1]=e=>s.value=e),maxLength:"256",rules:[l=>""!==l&&null!==l||e.$t("fileManagerToolbarDialogNewFolder.fieldRequired"),()=>c.value||e.$t("fileManagerToolbarDialogNewFolder.onlyAlphaNumeric")]},null,8,["label","prefix","value","rules"])])),_:1}),(0,t.Wm)(u,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{color:"grey-8",label:e.$t("fileManagerToolbarDialogNewFolder.btnCancel"),onClick:l[2]||(l[2]=e=>n.value=!1)},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"sym_s_create_new_folder",label:e.$t("fileManagerToolbarDialogNewFolder.btnCreateFolder"),disable:!r.value||!c.value,onClick:l[3]||(l[3]=e=>d())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),xe=Ce,Me=xe;x()(Ce,"components",{QDialog:pe.Z,QCard:ge.Z,QBtn:$.Z,QSeparator:ve.Z,QCardSection:fe.Z,QCardActions:we.Z});const Ze=(0,t.aZ)({__name:"FileManagerToolbarBtnNewFolder",setup(e){const l=(0,L.iH)(!1),a=(0,L.iH)(0);function o(){l.value=!0,a.value++}return(e,i)=>{const n=(0,t.up)("q-tooltip"),s=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(Me,{showDialogNewFolder:l.value,"onUpdate:showDialogNewFolder":i[0]||(i[0]=e=>l.value=e),key:a.value},null,8,["showDialogNewFolder"])),(0,t.Wm)(s,{icon:"sym_s_create_new_folder",color:"primary",round:"",onClick:i[1]||(i[1]=e=>o())},{default:(0,t.w5)((()=>[(0,t.Wm)(n,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnNewFolder.btnNewFolder")),1)])),_:1})])),_:1})])}}}),We=Ze,qe=We;x()(Ze,"components",{QBtn:$.Z,QTooltip:R.Z});var Pe=a(89906),ke=a(19302);const Qe=(0,t.aZ)({__name:"FileManagerToolbarBtnCleanTrash",setup(e){const l=k(),a=(0,ue.QT)().t,o=(0,t.Fl)((()=>{const e=(0,ke.Z)(),l=e.dark.isActive;return l?"/icons/bomb_dark.svg":"/icons/bomb_light.svg"})),i=(0,L.iH)(!1),n=(0,L.iH)(`${a("fileManagerToolbarBtnClearTrash.titleDialogClearTrash")}`),s=(0,L.iH)(`${a("fileManagerToolbarBtnClearTrash.bodyDialogClearTrash")}`),r=(0,L.iH)(!1),u=(0,t.Fl)({get:()=>l.getKeyTreeView,set:e=>l.setKeyTreeView(e)}),c=(0,t.Fl)((()=>0===l.getFilesCurrentPath.length));function d(){i.value=!0}function m(){i.value=!1}function p(){(0,re.Q)();const e=new A.Z;e.removeFile({sourcePaths:["/app/.trash"]}).then((()=>{setTimeout((()=>{u.value++,m()}),500),(0,se.LX)(`${a("fileManagerToolbarBtnClearTrash.msgRemoveSuccess")}`)})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${a("fileManagerToolbarBtnClearTrash.msgRemoveError")}`)})).finally((()=>{(0,re.Z)()}))}return(0,t.YP)(r,(e=>{!1!==e&&p()})),(e,l)=>{const a=(0,t.up)("q-tooltip"),r=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)(t.HY,null,[(0,t.Wm)(Pe.Z,{showDeleteDialog:i.value,"onUpdate:showDeleteDialog":l[2]||(l[2]=e=>i.value=e),titleDialog:n.value,messageToDelete:s.value,imagePath:o.value},{"card-actions":(0,t.w5)((()=>[(0,t.Wm)(N.Z,{label:e.$t("fileManagerToolbarBtnClearTrash.btnCancel"),color:"grey-8",onClick:l[0]||(l[0]=e=>m())},null,8,["label"]),(0,t.Wm)(N.Z,{label:e.$t("fileManagerToolbarBtnClearTrash.btnConfirm"),color:"negative",onClick:l[1]||(l[1]=e=>p())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","messageToDelete","imagePath"]),(0,t.Wm)(r,{disable:c.value,icon:"fas fa-broom",color:"primary",round:"",onClick:l[3]||(l[3]=e=>d())},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnClearTrash.btnClearTrash")),1)])),_:1})])),_:1},8,["disable"])],64)}}}),$e=Qe,Re=$e;x()(Qe,"components",{QBtn:$.Z,QTooltip:R.Z});const ze=(0,t.aZ)({__name:"FileManagerToolbarBtnShowTrash",setup(e){const l=k(),a=(0,t.Fl)({get:()=>l.getCurrentAbsolutePath,set:e=>l.setCurrentAbsolutePath(e)});function o(){a.value="/app/.trash"}return(e,l)=>{const a=(0,t.up)("q-tooltip"),i=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.j4)(i,{icon:"sym_s_restore_from_trash",color:"primary",round:"",onClick:l[0]||(l[0]=e=>o())},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnShowTrash.btnShowTrash")),1)])),_:1})])),_:1})}}}),Be=ze,Ee=Be;x()(ze,"components",{QBtn:$.Z,QTooltip:R.Z});const Se=(0,t.aZ)({__name:"FileManagerToolbarBtnDownload",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow));function o(){if(void 0===a.value.path)return;(0,re.Q)();const e=new A.Z;e.getFileDownloadBlob(a.value).then((e=>{let l=document.createElement("a");document.body.appendChild(l),l.style="display: none";const t=window.URL.createObjectURL(e);l.href=t,l.download=a.value.name,l.click(),window.URL.revokeObjectURL(t)})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,e.msg)})).finally((()=>{(0,re.Z)()}))}return(e,l)=>{const a=(0,t.up)("q-tooltip"),i=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[(0,t.Wm)(i,{icon:"fas fa-file-download",color:"primary",round:"",disable:e.isDisabled,onClick:l[0]||(l[0]=e=>o())},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnDownload.btnDownload")),1)])),_:1})])),_:1},8,["disable"])])}}}),Ue=Se,He=Ue;x()(Se,"components",{QBtn:$.Z,QTooltip:R.Z});var Ve=a(40425),je=a.n(Ve),Ae=a(25562);const Ne={class:"full-width full-height"},Ie={class:"flex justify-between items-center file-manager-editor-toolbar q-pa-none"},Le={class:"flex justify-start items-center"},Ye={class:"flex justify-start items-center q-my-sm"},Ke=(0,t.aZ)({__name:"FileManagerCodeEditor",props:{originalFileContent:{},extension:{},currentFileContent:{}},emits:["update:saveContent","update:currentFileContent"],setup(e,{emit:l}){const a=e;let o=null;const i=(0,L.iH)(13),n=(0,L.iH)(null),s=(0,L.iH)(""),r=(0,t.Fl)((()=>{const e=je().MD5(a.originalFileContent).toString(),l=je().MD5(s.value).toString();return e!==l})),u=(0,t.Fl)((()=>{let e=a.extension.toLowerCase();switch(a.extension){case"js":e="javascript";break;case"ts":e="typescript";break;case"md":e="markdown";break}return e}));function c(){o=Ae.j6.create(n.value,{value:s.value,language:u.value,theme:"vs-dark"}),o.onDidChangeModelContent((()=>{var e;s.value=null!==(e=null===o||void 0===o?void 0:o.getValue())&&void 0!==e?e:"",l("update:currentFileContent",null===o||void 0===o?void 0:o.getValue())}))}function d(){o&&o.trigger("source","undo",null)}function m(){o&&o.trigger("source","redo",null)}function p(){o&&o.setValue(a.originalFileContent)}function g(){l("update:currentFileContent",null===o||void 0===o?void 0:o.getValue()),l("update:saveContent",!0)}return(0,t.bv)((()=>{setTimeout((()=>{s.value=a.originalFileContent,c()}),100)})),(0,t.YP)(i,(e=>{o&&o.updateOptions({fontSize:e})})),(e,l)=>{const a=(0,t.up)("q-tooltip"),o=(0,t.up)("q-btn"),s=(0,t.up)("q-input");return(0,t.wg)(),(0,t.iD)("div",Ne,[(0,t._)("div",Ie,[(0,t._)("div",Le,[(0,t.Wm)(o,{icon:"fas fa-rotate-left",round:"",color:"primary",class:"q-mx-sm",onClick:l[0]||(l[0]=e=>d()),size:"12px"},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerCodeEditor.btnUndo")),1)])),_:1})])),_:1}),(0,t.Wm)(o,{icon:"fas fa-rotate-right",round:"",color:"primary",class:"q-mx-sm",onClick:l[1]||(l[1]=e=>m()),size:"12px",style:{"margin-right":"75px"}},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerCodeEditor.btnRedo")),1)])),_:1})])),_:1}),(0,t.Wm)(o,{icon:"fas fa-minus",color:"primary",class:"q-mx-sm",round:"",disable:i.value<=10,onClick:l[2]||(l[2]=e=>i.value-=1),size:"12px"},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerCodeEditor.btnDecreaseFont")),1)])),_:1})])),_:1},8,["disable"]),(0,t.Wm)(s,{modelValue:i.value,"onUpdate:modelValue":l[3]||(l[3]=e=>i.value=e),debounce:"100",readonly:"",borderless:"",class:"rounded-borders q-px-md",style:{width:"48px"}},null,8,["modelValue"]),(0,t.Wm)(o,{icon:"fas fa-plus",color:"primary",class:"q-mx-sm",round:"",disable:i.value>=26,onClick:l[4]||(l[4]=e=>i.value+=1),size:"12px"},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerCodeEditor.btnIncreaseFont")),1)])),_:1})])),_:1},8,["disable"])]),(0,t._)("div",Ye,[(0,t.Wm)(o,{icon:"fas fa-clock-rotate-left",round:"",color:"primary",class:"q-mx-sm",disable:!r.value,onClick:l[5]||(l[5]=e=>p()),size:"12px"},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerCodeEditor.btnRedoAll")),1)])),_:1})])),_:1},8,["disable"]),(0,t.Wm)(o,{icon:"fas fa-save",label:e.$t("fileManagerCodeEditor.btnSave"),color:"green-7",class:"q-mx-sm",size:"md","no-caps":"",onClick:l[6]||(l[6]=e=>g()),disable:!r.value},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-green-7",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerCodeEditor.btnSaveFile")),1)])),_:1})])),_:1},8,["label","disable"])])]),(0,t._)("div",{ref_key:"editorRef",ref:n,style:{width:"100%",height:"75vh","padding-top":"1px"}},null,512)])}}});var Oe=a(13119);const Xe=Ke,Ge=Xe;x()(Ke,"components",{QBtn:$.Z,QTooltip:R.Z,QInput:Oe.Z});const Je={class:"text-h6 text-bold text-secondary"},el=["innerHTML"],ll=(0,t.aZ)({__name:"DialogWarning",props:{showDialogWarning:{type:Boolean,default:!1},titleDialogWarning:{default:""},bodyDialogWarning:{default:""},btnCancelLabel:{default:"Cancelar"},btnConfirmLabel:{default:""}},emits:["update:showDialogWarning","update:isToProceed"],setup(e,{emit:l}){const a=e,o=(0,L.iH)(a.showDialogWarning);function i(){l("update:isToProceed",!1),o.value=!1}function n(){l("update:isToProceed",!0),o.value=!1}return(0,t.YP)((()=>a.showDialogWarning),(e=>{o.value=e})),(0,t.YP)(o,(e=>{l("update:showDialogWarning",e)})),(e,l)=>{const a=(0,t.up)("q-card-section"),s=(0,t.up)("q-icon"),r=(0,t.up)("q-banner"),u=(0,t.up)("q-card-actions"),c=(0,t.up)("q-card"),d=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(d,{modelValue:o.value,"onUpdate:modelValue":l[2]||(l[2]=e=>o.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(c,{class:"bg-yellow-2 q-pa-md",style:{width:"750px","max-width":"70vw"}},{default:(0,t.w5)((()=>[(0,t.Wm)(a,null,{default:(0,t.w5)((()=>[(0,t._)("div",Je,(0,q.zw)(e.titleDialogWarning),1)])),_:1}),(0,t.Wm)(a,{class:"q-pa-xs q-my-md"},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{class:"bg-yellow-2 text-secondary"},{avatar:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"fas fa-exclamation-triangle",color:"yellow-8",size:"lg"})])),default:(0,t.w5)((()=>[(0,t._)("div",{innerHTML:e.bodyDialogWarning,class:"text-secondary q-mb-md"},null,8,el)])),_:1})])),_:1}),(0,t.Wm)(u,{align:"between"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{label:e.btnCancelLabel,color:"grey-8",onClick:l[0]||(l[0]=e=>i())},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"fas fa-exclamation-triangle",label:e.btnConfirmLabel,color:"primary",onClick:l[1]||(l[1]=e=>n())},null,8,["label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var al=a(47128),tl=a(22857);const ol=ll,il=ol;x()(ll,"components",{QDialog:pe.Z,QCard:ge.Z,QCardSection:fe.Z,QBanner:al.Z,QIcon:tl.Z,QCardActions:we.Z});const nl={class:"flex justify-between items-center"},sl={class:"title-dialog"},rl={class:"text-subtitle2"},ul=(0,t.aZ)({__name:"FileManagerDialogEditCode",props:{selectedFile:{},showDialogEditCode:{type:Boolean}},emits:["update:showDialogEditCode"],setup(e,{emit:l}){const a=e,o=k(),i=(0,ue.QT)().t,n=(0,L.iH)(a.showDialogEditCode),s=(0,L.iH)(""),r=(0,L.iH)(""),u=(0,L.iH)(!1),c=(0,L.iH)(!1),d=(0,L.iH)(!1),m=(0,L.iH)(0),p=(0,L.iH)(!1),g=(0,t.Fl)({get:()=>o.getKeyTreeView,set:e=>o.setKeyTreeView(e)});function v(){if(void 0===a.selectedFile.path)return;(0,re.Q)(),p.value=!0;const e=new A.Z;e.getCurrentPath(a.selectedFile.path).then((e=>{0===e.data.body.length&&(0,se.c0)({msg:`${i("fileManagerDialogEditCode.msgGetContentError",{fileName:a.selectedFile.name})}`,type:"negative",position:"bottom"});const l=new Blob([`${e.data.body[0].content}`],{type:a.selectedFile.extension});l.text().then((e=>{s.value=e,r.value=e}))})).catch((e=>{console.error(e),(0,se.s9)(e.response.data?e.response.data:e,`${i("fileManagerDialogEditCode.msgGetContentError",{fileName:a.selectedFile.name})}`),n.value=!1})).finally((()=>{(0,re.Z)(),p.value=!1}))}function f(){(0,re.Q)();const e=new A.Z,l=btoa(unescape(encodeURIComponent(r.value)));e.updateFile({encodedContent:l,sourcePaths:[a.selectedFile.path]}).then((e=>{e.data.body.filePathsSuccessfullyUpdated.length>0&&(0,se.LX)(`${i("fileManagerDialogEditCode.msgSaveCodeSuccess",{fileName:a.selectedFile.name})}`),e.data.body.failedPathsWithReason.length>0&&(0,se.c0)({msg:`${i("fileManagerDialogEditCode.msgSaveCodeError",{fileName:a.selectedFile.name})}`,type:"negative",position:"bottom"}),n.value=!1,g.value++})).catch((e=>{(0,se.s9)(e.response.data,`${i("fileManagerDialogEditCode.msgSaveCodeError",{fileName:a.selectedFile.name})}`),console.error(e),u.value=!1})).finally((()=>{(0,re.Z)()}))}function w(){const e=je().MD5(s.value).toString(je().enc.Base64),l=je().MD5(r.value).toString(je().enc.Base64);e!==l?b():n.value=!1}function b(){m.value++,c.value=!0}return(0,t.YP)(u,(e=>{!1!==e&&f()})),(0,t.YP)(d,(e=>{!0===e&&(c.value=!1,setTimeout((()=>{n.value=!1}),500))})),(0,t.YP)((()=>a.showDialogEditCode),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogEditCode",e),!0===e&&v()}),{immediate:!0}),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-card-section"),i=(0,t.up)("q-separator"),g=(0,t.up)("q-card"),v=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(il,{showDialogWarning:c.value,"onUpdate:showDialogWarning":l[0]||(l[0]=e=>c.value=e),titleDialogWarning:e.$t("fileManagerDialogEditCode.titleDialogWarningSave"),bodyDialogWarning:e.$t("fileManagerDialogEditCode.bodyDialogWarningSave"),isToProceed:d.value,"onUpdate:isToProceed":l[1]||(l[1]=e=>d.value=e),btnConfirmLabel:e.$t("fileManagerDialogEditCode.btnDialogWarningSave"),key:m.value},null,8,["showDialogWarning","titleDialogWarning","bodyDialogWarning","isToProceed","btnConfirmLabel"])),(0,t.Wm)(v,{modelValue:n.value,"onUpdate:modelValue":l[5]||(l[5]=e=>n.value=e),position:"right",maximized:"","transition-show":"slide-left","transition-hide":"slide-right",persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(g,{flat:"",style:{"min-width":"85vw"}},{default:(0,t.w5)((()=>[(0,t.Wm)(o,null,{default:(0,t.w5)((()=>[(0,t._)("div",nl,[(0,t._)("div",null,[(0,t._)("div",sl,(0,q.zw)(e.$t("fileManagerDialogEditCode.titleEditCode")),1),(0,t._)("div",rl,(0,q.zw)(e.selectedFile.path),1)]),(0,t.Wm)(a,{icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[2]||(l[2]=e=>w())})])])),_:1}),(0,t.Wm)(i),(0,t.Wm)(o,{class:"q-pa-sm"},{default:(0,t.w5)((()=>[p.value?(0,t.kq)("",!0):((0,t.wg)(),(0,t.j4)(Ge,{key:0,originalFileContent:s.value,extension:e.selectedFile.extension,currentFileContent:r.value,"onUpdate:currentFileContent":l[3]||(l[3]=e=>r.value=e),saveContent:u.value,"onUpdate:saveContent":l[4]||(l[4]=e=>u.value=e)},null,8,["originalFileContent","extension","currentFileContent","saveContent"]))])),_:1})])),_:1})])),_:1},8,["modelValue"])])}}}),cl=ul,dl=cl;x()(ul,"components",{QDialog:pe.Z,QCard:ge.Z,QCardSection:fe.Z,QBtn:$.Z,QSeparator:ve.Z});const ml=(0,t.aZ)({__name:"FileManagerToolbarBtnEditCode",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow)),o=(0,L.iH)(300),i=(0,L.iH)(!1);function n(){o.value++,i.value=!0}return(e,l)=>{const s=(0,t.up)("q-tooltip"),r=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(dl,{showDialogEditCode:i.value,"onUpdate:showDialogEditCode":l[0]||(l[0]=e=>i.value=e),selectedFile:a.value,key:o.value},null,8,["showDialogEditCode","selectedFile"])),(0,t.Wm)(r,{icon:"fas fa-code",color:"primary",round:"",disable:e.isDisabled,onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnEditCode.btnEditCode")),1)])),_:1})])),_:1},8,["disable"])])}}}),pl=ml,gl=pl;x()(ml,"components",{QBtn:$.Z,QTooltip:R.Z});const vl=(0,t.aZ)({__name:"FileManagerSelectTreeView",emits:["update:selectedPath"],setup(e,{emit:l}){const a=k(),o=(0,L.iH)(0),i=(0,L.iH)([]),n=(0,L.iH)([]),s=(0,L.iH)("/");function r(e){if(void 0===e||null===e)return;const l=new A.Z;(0,re.Q)(),l.getCurrentPath(e).then((l=>{n.value=l.data.body,"/"===e?u(l.data.body):c(i.value,e,l.data.body),o.value++})).catch((e=>{console.error(e)})).finally((()=>{setTimeout((()=>{(0,re.Z)()}),500)}))}function u(e){i.value=[],i.value.push({label:"/",path:"/",icon:"sym_s_home",iconColor:"grey-7",children:[]}),e.forEach((e=>{"directory"===e.mimeType&&i.value[0].children.push({label:e.name,path:e.path,icon:"sym_s_folder",iconColor:"yellow-9",children:[]})}))}function c(e,l,a){e.forEach((e=>{if(e.path===l)return e.icon="sym_s_folder_open",e.children=[],void a.forEach((l=>{"directory"===l.mimeType&&e.children.push({label:l.name,path:l.path,icon:".trash"===l.name?"sym_s_delete":"sym_s_folder",iconColor:".trash"===l.name?"grey-8":"yellow-9",children:[]})}));c(e.children,l,a)}))}return(0,t.wF)((()=>{i.value=a.getPathsTreeView,r(s.value)})),(0,t.YP)(s,(e=>{l("update:selectedPath",e),r(e)})),(e,l)=>{const a=(0,t.up)("q-tree");return(0,t.wg)(),(0,t.j4)(a,{key:o.value,nodes:i.value,selected:s.value,"onUpdate:selected":l[0]||(l[0]=e=>s.value=e),"node-key":"path","tick-strategy":"none","default-expand-all":"",style:{"font-size":"0.809rem"}},null,8,["nodes","selected"])}}});var fl=a(84749);const wl=vl,bl=wl;x()(vl,"components",{QTree:fl.Z});const hl={class:"flex justify-between items-center"},yl={key:0},_l={key:0,class:"title-dialog"},Fl={key:1,class:"title-dialog"},Dl={class:"flex text-subtitle"},Tl={key:1,class:"title-dialog"},Cl={class:"text-subtitle text-bold q-pb-md",style:{"font-size":"16px"}},xl=(0,t.aZ)({__name:"FileManagerDialogMove",props:{showDialogMove:{type:Boolean}},emits:["update:showDialogMove"],setup(e,{emit:l}){const a=e,o=(0,ue.QT)().t,i=k(),n=(0,L.iH)(a.showDialogMove),s=(0,L.iH)("/"),r=(0,L.iH)(0),u=(0,t.Fl)((()=>i.getSelectedPathOrActiveRow)),c=(0,t.Fl)((()=>i.getListSelectedPaths)),d=(0,t.Fl)({get:()=>i.getKeyTreeView,set:e=>i.setKeyTreeView(e)});function m(){(0,re.Q)();const e=new A.Z;let l=[];l.push(u.value.path),c.value.length>=1&&(l=[],c.value.forEach((e=>{l.push(e.path)}))),e.updateFile({sourcePaths:l,destinationPath:s.value}).then((e=>{if(e.data.body.filePathsSuccessfullyUpdated.length>0){const l=e.data.body.filePathsSuccessfullyUpdated;l.forEach((e=>{(0,se.LX)(`${o("fileManagerDialogMove.msgMoveOneFileSuccess",{fileName:e})}`)}))}if(e.data.body.failedPathsWithReason.length>0){const l=e.data.body.failedPathsWithReason;l.forEach((e=>{(0,se.c0)({msg:`${o("fileManagerDialogMove.msgMoveOneFileError",{fileName:e.filePath})}`,type:"negative",position:"bottom"})}))}n.value=!1,d.value++})).catch((e=>{console.error(e);const a=1===l.length?`${o("fileManagerDialogMove.msgMoveOneFileError",{fileName:u.value.name})}`:`${o("fileManagerDialogMove.msgMoveMultiFileModelsError",{count:l.length})}`;(0,se.s9)(e.response.data,a)})).finally((()=>{(0,re.Z)()}))}return(0,t.YP)((()=>a.showDialogMove),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogMove",e)})),(0,t.YP)(s,(()=>{r.value++})),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-separator"),i=(0,t.up)("q-card-section"),d=(0,t.up)("q-card-actions"),p=(0,t.up)("q-card"),g=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(g,{modelValue:n.value,"onUpdate:modelValue":l[4]||(l[4]=e=>n.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(p,{flat:"",class:"dialog-card-bg",style:{width:"1000px","max-width":"90vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",hl,[c.value.length<=1?((0,t.wg)(),(0,t.iD)("div",yl,["directory"===u.value.mimeType?((0,t.wg)(),(0,t.iD)("div",_l,(0,q.zw)(e.$t("fileManagerDialogMove.titleOneDir",{dirName:u.value.name})),1)):((0,t.wg)(),(0,t.iD)("div",Fl,(0,q.zw)(e.$t("fileManagerDialogMove.titleOneFile",{fileName:u.value.name})),1)),(0,t._)("div",Dl,(0,q.zw)(u.value.path),1)])):((0,t.wg)(),(0,t.iD)("div",Tl,(0,q.zw)(e.$t("fileManagerDialogMove.titleMultiFileModel",{count:c.value.length})),1)),(0,t.Wm)(a,{icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[0]||(l[0]=e=>n.value=!1)})]),(0,t.Wm)(o,{class:"q-mt-xs"}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t._)("div",Cl,(0,q.zw)(e.$t("fileManagerDialogMove.selectDir")),1),(0,t.Wm)(bl,{selectedPath:s.value,"onUpdate:selectedPath":l[1]||(l[1]=e=>s.value=e),style:{height:"250px","overflow-y":"auto"}},null,8,["selectedPath"])])),_:1}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[s.value?((0,t.wg)(),(0,t.j4)(I.Z,{label:e.$t("fileManagerDialogMove.inputMoveTo"),icon:"sym_s_folder_open",value:s.value,readonly:!0,disable:!0,key:r.value},null,8,["label","value"])):(0,t.kq)("",!0)])),_:1}),(0,t.Wm)(d,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{color:"grey-8",label:e.$t("fileManagerDialogMove.btnCancel"),onClick:l[2]||(l[2]=e=>n.value=!1)},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"fas fa-arrows-up-down-left-right",label:e.$t("fileManagerDialogMove.btnMoveFile"),disable:!s.value,onClick:l[3]||(l[3]=e=>m())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),Ml=xl,Zl=Ml;x()(xl,"components",{QDialog:pe.Z,QCard:ge.Z,QBtn:$.Z,QSeparator:ve.Z,QCardSection:fe.Z,QCardActions:we.Z});const Wl=(0,t.aZ)({__name:"FileManagerToolbarBtnMove",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow)),n=(0,t.Fl)((()=>l.getListSelectedPaths));function s(){a.value++,o.value=!0}return(e,l)=>{const r=(0,t.up)("q-tooltip"),u=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(Zl,{showDialogMove:o.value,"onUpdate:showDialogMove":l[0]||(l[0]=e=>o.value=e),key:a.value},null,8,["showDialogMove"])),(0,t.Wm)(u,{icon:"fas fa-truck-arrow-right",color:"primary",round:"",disable:e.isDisabled,onClick:l[1]||(l[1]=e=>s())},{default:(0,t.w5)((()=>[0===n.value.length?((0,t.wg)(),(0,t.j4)(r,{key:0,class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)("directory"===i.value.mimeType?e.$t("fileManagerToolbarBtnMove.btnMoveDir"):e.$t("fileManagerToolbarBtnMove.btnMoveFile")),1)])),_:1})):((0,t.wg)(),(0,t.j4)(r,{key:1,class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnMove.btnMoveFiles")),1)])),_:1}))])),_:1},8,["disable"])])}}}),ql=Wl,Pl=ql;x()(Wl,"components",{QBtn:$.Z,QTooltip:R.Z});const kl=(0,t.aZ)({__name:"FileManagerToolbarBtnDuplicateFile",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,ue.QT)().t,o=(0,t.Fl)({get:()=>l.getKeyTreeView,set:e=>l.setKeyTreeView(e)}),i=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow));function n(){(0,re.Q)();const e=new A.Z;e.copyFile({sourcePath:i.value.path,destinationPath:i.value.path}).then((()=>{(0,se.LX)(`${a("fileManagerToolbarBtnDuplicateFile.msgDuplicateFileSuccess",{fileName:i.value.name})}`),o.value++})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${a("fileManagerToolbarBtnDuplicateFile.msgDuplicateFileError",{fileName:i.value.name})}`)})).finally((()=>{(0,re.Z)()}))}return(e,l)=>{const a=(0,t.up)("q-tooltip"),o=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[(0,t.Wm)(o,{icon:"sym_s_copy_all",color:"primary",round:"",disable:e.isDisabled,onClick:l[0]||(l[0]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnDuplicateFile.btnDuplicateFile")),1)])),_:1})])),_:1},8,["disable"])])}}}),Ql=kl,$l=Ql;x()(kl,"components",{QBtn:$.Z,QTooltip:R.Z});const Rl={class:"flex justify-between items-center"},zl={class:"title-dialog"},Bl={class:"flex text-subtitle"},El={class:"text-subtitle text-bold q-pb-md",style:{"font-size":"16px"}},Sl=(0,t.aZ)({__name:"FileManagerDialogCopy",props:{selectedFile:{},showDialogCopy:{type:Boolean}},emits:["update:showDialogCopy"],setup(e,{emit:l}){const a=e,o=k(),i=(0,ue.QT)().t,n=(0,L.iH)(a.showDialogCopy),s=(0,L.iH)(""),r=(0,L.iH)(0),u=(0,t.Fl)({get:()=>o.getKeyTreeView,set:e=>o.setKeyTreeView(e)});function c(){(0,re.Q)();const e=new A.Z;e.copyFile({sourcePath:a.selectedFile.path,destinationPath:s.value+"/"+a.selectedFile.name}).then((()=>{(0,se.LX)(`${i("fileManagerDialogCopy.msgCopiedFileSuccess",{fileName:a.selectedFile.name})}`),n.value=!1,u.value++})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${i("fileManagerDialogCopy.msgCopiedFileError",{fileName:a.selectedFile.name})}`)})).finally((()=>{(0,re.Z)()}))}return(0,t.YP)((()=>a.showDialogCopy),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogCopy",e)})),(0,t.YP)(s,(()=>{r.value++})),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-separator"),i=(0,t.up)("q-card-section"),u=(0,t.up)("q-card-actions"),d=(0,t.up)("q-card"),m=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(m,{modelValue:n.value,"onUpdate:modelValue":l[5]||(l[5]=e=>n.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(d,{flat:"",class:"dialog-card-bg",style:{width:"1000px","max-width":"90vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",Rl,[(0,t._)("div",null,[(0,t._)("div",zl,(0,q.zw)(e.$t("fileManagerDialogCopy.titleDialog")),1),(0,t._)("div",Bl,(0,q.zw)(e.selectedFile.path),1)]),(0,t.Wm)(a,{icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[0]||(l[0]=e=>n.value=!1)})]),(0,t.Wm)(o,{class:"q-mt-xs"}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t._)("div",El,(0,q.zw)(e.$t("fileManagerDialogCopy.selectDir")),1),(0,t.Wm)(bl,{selectedPath:s.value,"onUpdate:selectedPath":l[1]||(l[1]=e=>s.value=e),style:{height:"250px","overflow-y":"auto"}},null,8,["selectedPath"])])),_:1}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[s.value?((0,t.wg)(),(0,t.j4)(I.Z,{label:e.$t("fileManagerDialogCopy.copyTo"),icon:"sym_s_folder_open",value:s.value,"onUpdate:value":l[2]||(l[2]=e=>s.value=e),readonly:!0,disable:!0,key:r.value},null,8,["label","value"])):(0,t.kq)("",!0)])),_:1}),(0,t.Wm)(u,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{color:"grey-8",label:e.$t("fileManagerDialogCopy.btnCancel"),onClick:l[3]||(l[3]=e=>n.value=!1)},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"fas fa-copy",label:e.$t("fileManagerDialogCopy.btnCopyFile"),disable:!s.value,onClick:l[4]||(l[4]=e=>c())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),Ul=Sl,Hl=Ul;x()(Sl,"components",{QDialog:pe.Z,QCard:ge.Z,QBtn:$.Z,QSeparator:ve.Z,QCardSection:fe.Z,QCardActions:we.Z});const Vl=(0,t.aZ)({__name:"FileManagerToolbarBtnCopy",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-tooltip"),r=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(Hl,{showDialogCopy:o.value,"onUpdate:showDialogCopy":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,key:a.value},null,8,["showDialogCopy","selectedFile"])),(0,t.Wm)(r,{icon:"fas fa-copy",color:"primary",round:"",disable:e.isDisabled,onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnCopy.btnCopy")),1)])),_:1})])),_:1},8,["disable"])])}}}),jl=Vl,Al=jl;x()(Vl,"components",{QBtn:$.Z,QTooltip:R.Z});const Nl={class:"flex justify-between items-center"},Il={class:"title-dialog"},Ll=(0,t.aZ)({__name:"FileManagerDialogRenameFile",props:{selectedFile:{},showDialogRename:{type:Boolean}},emits:["update:showDialogRename"],setup(e,{emit:l}){const a=e,o=(0,ue.QT)().t,i=k(),n=(0,L.iH)(a.showDialogRename),s=(0,L.iH)(""),r=(0,L.iH)(""),u=(0,t.Fl)((()=>{const e=new RegExp(/^[\S ]{1,256}$/);return e.test(s.value)})),c=(0,t.Fl)((()=>"directory"!==a.selectedFile.mimeType?`${o("fileManagerDialogRenameFile.fileName")}`:`${o("fileManagerDialogRenameFile.dirName")}`)),d=(0,t.Fl)({get:()=>i.getKeyTreeView,set:e=>i.setKeyTreeView(e)});function m(){n.value=!1}function p(){(0,re.Q)();const e=new A.Z;let l=r.value.split("/");l.pop(),e.updateFile({sourcePaths:[r.value],destinationPath:`${l.join("/")}/${s.value}`}).then((e=>{if(e.data.body.filePathsSuccessfullyUpdated.length>0){const e="directory"!==a.selectedFile.mimeType?`${o("fileManagerDialogRenameFile.msgRenamedFileSuccess",{fileName:a.selectedFile.name})}`:`${o("fileManagerDialogRenameFile.msgRenamedDirSuccess",{dirName:a.selectedFile.name})}`;(0,se.LX)(e)}if(e.data.body.failedPathsWithReason.length>0){const e="directory"!==a.selectedFile.mimeType?`${o("fileManagerDialogRenameFile.msgRenamedFileError",{fileName:a.selectedFile.name})}`:`${o("fileManagerDialogRenameFile.msgRenamedDirError",{dirName:a.selectedFile.name})}`;(0,se.c0)({msg:e,type:"negative",position:"bottom"})}d.value++,n.value=!1})).catch((e=>{console.error(e);const l="directory"!==a.selectedFile.mimeType?`${o("fileManagerDialogRenameFile.msgRenamedFileError",{fileName:a.selectedFile.name})}`:`${o("fileManagerDialogRenameFile.msgRenamedDirError",{dirName:a.selectedFile.name})}`;(0,se.s9)(e.response.data,l)})).finally((()=>{(0,re.Z)()}))}return(0,t.YP)((()=>a.showDialogRename),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogRename",e)})),(0,t.wF)((()=>{s.value=a.selectedFile.name,r.value=a.selectedFile.path})),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-separator"),i=(0,t.up)("q-card-section"),d=(0,t.up)("q-card-actions"),g=(0,t.up)("q-card"),v=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(v,{modelValue:n.value,"onUpdate:modelValue":l[4]||(l[4]=e=>n.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(g,{flat:"",class:"dialog-card-bg",style:{width:"700px","max-width":"90vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",Nl,[(0,t._)("div",Il,(0,q.zw)("directory"!==e.selectedFile.mimeType?e.$t("fileManagerDialogRenameFile.titleRenameFile"):e.$t("fileManagerDialogRenameFile.titleRenameDir")),1),(0,t.Wm)(a,{icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[0]||(l[0]=e=>m())})]),(0,t.Wm)(o,{class:"q-mt-none"}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(I.Z,{label:e.$t("fileManagerDialogRenameFile.absolutePath"),icon:"sym_s_account_tree",value:r.value,maxLength:"255",readonly:!0,disable:!0},null,8,["label","value"])])),_:1}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(I.Z,{label:c.value,icon:"sym_s_description",value:s.value,"onUpdate:value":l[1]||(l[1]=e=>s.value=e),maxLength:"255",rules:[l=>""!==l&&null!==l||e.$t("fileManagerDialogRenameFile.fieldRequired"),()=>u.value||e.$t("fileManagerDialogRenameFile.onlyAlphaNumeric")]},null,8,["label","value","rules"])])),_:1}),(0,t.Wm)(d,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{color:"grey-8",label:e.$t("fileManagerDialogRenameFile.btnCancel"),onClick:l[2]||(l[2]=e=>m())},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"sym_s_save",label:e.$t("fileManagerDialogRenameFile.btnSave"),disable:!u.value,onClick:l[3]||(l[3]=e=>p())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),Yl=Ll,Kl=Yl;x()(Ll,"components",{QDialog:pe.Z,QCard:ge.Z,QBtn:$.Z,QSeparator:ve.Z,QCardSection:fe.Z,QCardActions:we.Z});const Ol=(0,t.aZ)({__name:"FileManagerToolbarBtnRenameFile",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-tooltip"),r=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(Kl,{showDialogRename:o.value,"onUpdate:showDialogRename":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,key:a.value},null,8,["showDialogRename","selectedFile"])),(0,t.Wm)(r,{icon:"fas fa-edit",color:"primary",round:"",disable:e.isDisabled,onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)("directory"===i.value.mimeType?e.$t("fileManagerToolbarBtnRenameFile.btnRenameDir"):e.$t("fileManagerToolbarBtnRenameFile.btnRenameFile")),1)])),_:1})])),_:1},8,["disable"])])}}}),Xl=Ol,Gl=Xl;x()(Ol,"components",{QBtn:$.Z,QTooltip:R.Z});const Jl={class:"text-subtitle text-bold",style:{"font-size":"16px"}},ea={class:"flex justify-between q-py-md"},la={class:"text-subtitle text-bold flex justify-center"},aa={class:"justify-center flex"},ta={class:"text-subtitle text-bold flex justify-center"},oa={class:"justify-center flex"},ia={class:"text-subtitle text-bold flex justify-center"},na={class:"justify-center flex"},sa=(0,t.aZ)({__name:"FileManagerEditPermission",props:{permissions:{}},emits:["update:updatePermissions"],setup(e,{emit:l}){const a=e,o=(0,ue.QT)().t,i=(0,L.iH)([{label:o("fileManagerEditPermission.read"),value:4},{label:o("fileManagerEditPermission.write"),value:2},{label:o("fileManagerEditPermission.execute"),value:1}]),n=(0,L.iH)([]),s=(0,L.iH)([]),r=(0,L.iH)([]),u=(0,t.Fl)((()=>`${m(n.value)}${m(s.value)}${m(r.value)}`)),c=(0,t.Fl)((()=>{const e=(0,ke.Z)();return e.dark.isActive?"bg-grey-8 flex justify-center items-center q-my-md":"bg-grey-4 flex justify-center items-center q-my-md"}));function d(e){let l=[];const a={0:[],1:[1],2:[2],3:[2,1],4:[4],5:[4,1],6:[4,2],7:[4,2,1]};for(let t in a)t===e.toString()&&(l=a[t]);return l}function m(e){let l=0;return 0===e.length||e.forEach((e=>{l+=e})),l}return(0,t.YP)(u,(e=>{l("update:updatePermissions",e)})),(0,t.wF)((()=>{n.value=d(parseInt(a.permissions.charAt(0))),s.value=d(parseInt(a.permissions.charAt(1))),r.value=d(parseInt(a.permissions.charAt(2)))})),(e,l)=>{const a=(0,t.up)("q-option-group");return(0,t.wg)(),(0,t.iD)("div",null,[(0,t._)("div",Jl,(0,q.zw)(e.$t("fileManagerEditPermission.permissions")),1),(0,t._)("div",ea,[(0,t._)("div",null,[(0,t._)("label",la,(0,q.zw)(e.$t("fileManagerEditPermission.user")),1),(0,t.Wm)(a,{options:i.value,type:"checkbox",modelValue:n.value,"onUpdate:modelValue":l[0]||(l[0]=e=>n.value=e)},null,8,["options","modelValue"]),(0,t._)("div",aa,[(0,t._)("div",{class:(0,q.C_)(c.value),style:{height:"40px",width:"40px"}},(0,q.zw)(m(n.value)),3)])]),(0,t._)("div",null,[(0,t._)("label",ta,(0,q.zw)(e.$t("fileManagerEditPermission.group")),1),(0,t.Wm)(a,{options:i.value,type:"checkbox",modelValue:s.value,"onUpdate:modelValue":l[1]||(l[1]=e=>s.value=e)},null,8,["options","modelValue"]),(0,t._)("div",oa,[(0,t._)("div",{class:(0,q.C_)(c.value),style:{height:"40px",width:"40px"}},(0,q.zw)(m(s.value)),3)])]),(0,t._)("div",null,[(0,t._)("label",ia,(0,q.zw)(e.$t("fileManagerEditPermission.others")),1),(0,t.Wm)(a,{options:i.value,type:"checkbox",modelValue:r.value,"onUpdate:modelValue":l[2]||(l[2]=e=>r.value=e)},null,8,["options","modelValue"]),(0,t._)("div",na,[(0,t._)("div",{class:(0,q.C_)(c.value),style:{height:"40px",width:"40px"}},(0,q.zw)(m(r.value)),3)])])])])}}});var ra=a(2286);const ua=sa,ca=ua;x()(sa,"components",{QOptionGroup:ra.Z});const da={class:"flex justify-between items-center"},ma={class:"title-dialog"},pa={class:"text-subtitle"},ga=(0,t.aZ)({__name:"FileManagerDialogEditPermissions",props:{showDialogEditPermissions:{type:Boolean},selectedFile:{}},emits:["update:showDialogEditPermissions"],setup(e,{emit:l}){const a=e,o=k(),i=(0,ue.QT)().t,n=(0,L.iH)(a.showDialogEditPermissions),s=(0,L.iH)(""),r=(0,L.iH)(""),u=(0,L.iH)(""),c=(0,t.Fl)({get:()=>o.getKeyTreeView,set:e=>o.setKeyTreeView(e)});function d(){n.value=!1}function m(){(0,re.Q)();const e=new A.Z;e.updateFile({sourcePaths:[u.value],permissions:r.value}).then((e=>{e.data.body.filePathsSuccessfullyUpdated.length>0&&(0,se.LX)(`${i("fileManagerDialogEditPermissions.msgEditPermissionsSuccess")}`),e.data.body.failedPathsWithReason.length>0&&(0,se.c0)({msg:`${i("fileManagerDialogEditPermissions.msgEditPermissionsError",{filename:a.selectedFile.name})}`,type:"negative",position:"bottom"}),c.value++,n.value=!1})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${i("fileManagerDialogEditPermissions.msgEditPermissionsError",{filename:a.selectedFile.name})}`)})).finally((()=>{(0,re.Z)()}))}return(0,t.wF)((()=>{s.value=a.selectedFile.name,r.value=a.selectedFile.permissions,u.value=a.selectedFile.path})),(0,t.YP)((()=>a.showDialogEditPermissions),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogEditPermissions",e)})),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-separator"),i=(0,t.up)("q-card-section"),s=(0,t.up)("q-card-actions"),c=(0,t.up)("q-card"),p=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(p,{modelValue:n.value,"onUpdate:modelValue":l[4]||(l[4]=e=>n.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(c,{flat:"",class:"dialog-card-bg",style:{width:"700px","max-width":"90vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",da,[(0,t._)("div",null,[(0,t._)("div",ma,(0,q.zw)(e.$t("fileManagerDialogEditPermissions.titleDialog")),1),(0,t._)("div",pa,(0,q.zw)(u.value),1)]),(0,t.Wm)(a,{icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[0]||(l[0]=e=>d())})]),(0,t.Wm)(o,{class:"q-mt-none"}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(ca,{permissions:r.value,updatePermissions:r.value,"onUpdate:updatePermissions":l[1]||(l[1]=e=>r.value=e)},null,8,["permissions","updatePermissions"])])),_:1}),(0,t.Wm)(s,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{color:"grey-8",label:e.$t("fileManagerDialogEditPermissions.btnCancel"),onClick:l[2]||(l[2]=e=>d())},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"fas fa-save",label:e.$t("fileManagerDialogEditPermissions.btnSave"),onClick:l[3]||(l[3]=e=>m())},null,8,["label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),va=ga,fa=va;x()(ga,"components",{QDialog:pe.Z,QCard:ge.Z,QBtn:$.Z,QSeparator:ve.Z,QCardSection:fe.Z,QCardActions:we.Z});const wa=(0,t.aZ)({__name:"FileManagerToolbarBtnEditPermissions",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-tooltip"),r=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(fa,{showDialogEditPermissions:o.value,"onUpdate:showDialogEditPermissions":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,key:a.value},null,8,["showDialogEditPermissions","selectedFile"])),(0,t.Wm)(r,{icon:"fas fa-person-military-pointing",color:"primary",round:"",disable:e.isDisabled,onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnEditPermissions.btnEditPermissions")),1)])),_:1})])),_:1},8,["disable"])])}}}),ba=wa,ha=ba;x()(wa,"components",{QBtn:$.Z,QTooltip:R.Z});const ya={class:"flex justify-between items-center"},_a={class:"title-dialog"},Fa={class:"flex text-subtitle"},Da={class:"text-subtitle text-bold q-pb-md",style:{"font-size":"16px"}},Ta=(0,t.aZ)({__name:"FileManagerDialogExtract",props:{selectedFile:{},showDialogExtract:{type:Boolean}},emits:["update:showDialogExtract"],setup(e,{emit:l}){const a=e,o=(0,ue.QT)().t,i=k(),n=(0,L.iH)(a.showDialogExtract),s=(0,L.iH)(""),r=(0,L.iH)(0),u=(0,t.Fl)({get:()=>i.getKeyTreeView,set:e=>i.setKeyTreeView(e)});function c(){(0,re.Q)();const e=new A.Z;e.extractFile({sourcePath:a.selectedFile.path,destinationPath:s.value+"/"+a.selectedFile.name.replace("."+a.selectedFile.extension,"")}).then((()=>{(0,se.LX)(`${o("fileManagerDialogExtract.msgExtractFileSuccess",{filename:a.selectedFile.name})}`),n.value=!1,u.value++})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${o("fileManagerDialogExtract.msgExtractFileError",{filename:a.selectedFile.name})}`)})).finally((()=>{(0,re.Z)()}))}return(0,t.YP)((()=>a.showDialogExtract),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogExtract",e)})),(0,t.YP)(s,(()=>{r.value++})),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-separator"),i=(0,t.up)("q-card-section"),u=(0,t.up)("q-card-actions"),d=(0,t.up)("q-card"),m=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(m,{modelValue:n.value,"onUpdate:modelValue":l[4]||(l[4]=e=>n.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(d,{flat:"",class:"dialog-card-bg",style:{width:"1000px","max-width":"90vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",ya,[(0,t._)("div",null,[(0,t._)("div",_a,(0,q.zw)(e.$t("fileManagerDialogExtract.titleDialog")),1),(0,t._)("div",Fa,(0,q.zw)(e.selectedFile.path),1)]),(0,t.Wm)(a,{icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[0]||(l[0]=e=>n.value=!1)})]),(0,t.Wm)(o,{class:"q-mt-xs"}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t._)("div",Da,(0,q.zw)(e.$t("fileManagerDialogExtract.selectDir")),1),(0,t.Wm)(bl,{selectedPath:s.value,"onUpdate:selectedPath":l[1]||(l[1]=e=>s.value=e),style:{height:"250px","overflow-y":"auto"}},null,8,["selectedPath"])])),_:1}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[s.value?((0,t.wg)(),(0,t.j4)(I.Z,{label:e.$t("fileManagerDialogExtract.inputExtractTo"),icon:"sym_s_folder_open",value:s.value,readonly:!0,disable:!0,key:r.value},null,8,["label","value"])):(0,t.kq)("",!0)])),_:1}),(0,t.Wm)(u,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{color:"grey-8",label:e.$t("fileManagerDialogExtract.btnCancel"),onClick:l[2]||(l[2]=e=>n.value=!1)},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"fas fa-file-zipper",label:e.$t("fileManagerDialogExtract.btnExtractFile"),disable:!s.value,onClick:l[3]||(l[3]=e=>c())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),Ca=Ta,xa=Ca;x()(Ta,"components",{QDialog:pe.Z,QCard:ge.Z,QBtn:$.Z,QSeparator:ve.Z,QCardSection:fe.Z,QCardActions:we.Z});const Ma=(0,t.aZ)({__name:"FileManagerToolbarBtnExtract",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-tooltip"),r=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(xa,{showDialogExtract:o.value,"onUpdate:showDialogExtract":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,key:a.value},null,8,["showDialogExtract","selectedFile"])),(0,t.Wm)(r,{disable:e.isDisabled,icon:"fas fa-file-zipper",color:"primary",round:"",onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnExtract.btnExtract")),1)])),_:1})])),_:1},8,["disable"])])}}}),Za=Ma,Wa=Za;x()(Ma,"components",{QBtn:$.Z,QTooltip:R.Z});var qa=a(94629);const Pa={class:"flex justify-between items-center"},ka={key:0},Qa={class:"title-dialog"},$a={class:"flex text-subtitle"},Ra={key:1,class:"title-dialog"},za={class:"shadow-1 file-manager-box-selected-path disabled"},Ba={class:"flex justify-start items-center"},Ea={class:"q-pa-md text-grey-7",style:{"font-size":"12px"}},Sa={key:0,style:{"padding-left":"36px"}},Ua={key:1,style:{"padding-left":"36px"}},Ha=(0,t.aZ)({__name:"FileManagerDialogCompress",props:{selectedFile:{},listSelectedPaths:{},showDialogCompress:{type:Boolean}},emits:["update:showDialogCompress"],setup(e,{emit:l}){const a=e,o=k(),i=(0,ue.QT)().t,n=(0,L.iH)(a.showDialogCompress),s=(0,L.iH)(""),r=(0,L.iH)("zip"),u=(0,t.Fl)((()=>{const e=new RegExp(/^\w{1,256}$/);return e.test(s.value)})),c=(0,t.Fl)((()=>o.getCurrentAbsolutePath)),d=(0,t.Fl)({get:()=>o.getKeyTreeView,set:e=>o.setKeyTreeView(e)});function m(){(0,re.Q)();const e=new A.Z;let l=[];l.push(a.selectedFile.path),a.listSelectedPaths.length>0&&(l=[],a.listSelectedPaths.forEach((e=>{l.push(e.path)}))),e.compressFile({sourcePaths:l,destinationPath:`${c.value}/${s.value}.${r.value}`,compressionType:r.value}).then((()=>{(0,se.LX)(`${i("fileManagerDialogCompress.msgCompressedFileSuccess",{compressedFileName:`${s.value}.${r.value}`})}`),n.value=!1,d.value++})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${i("fileManagerDialogCompress.msgCompressedFileError",{compressedFileName:s.value})}`)})).finally((()=>{(0,re.Z)()}))}return(0,t.YP)((()=>a.showDialogCompress),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogCompress",e)})),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-separator"),i=(0,t.up)("q-card-section"),d=(0,t.up)("q-icon"),p=(0,t.up)("q-card-actions"),g=(0,t.up)("q-card"),v=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(v,{modelValue:n.value,"onUpdate:modelValue":l[5]||(l[5]=e=>n.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(g,{flat:"",class:"dialog-card-bg",style:{width:"750px","max-width":"90vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",Pa,[e.listSelectedPaths.length<=1?((0,t.wg)(),(0,t.iD)("div",ka,[(0,t._)("div",Qa,(0,q.zw)(e.$t("fileManagerDialogCompress.simpleTitleDialog")),1),(0,t._)("div",$a,(0,q.zw)(e.selectedFile.path),1)])):((0,t.wg)(),(0,t.iD)("div",Ra,(0,q.zw)(e.$t("fileManagerDialogCompress.countTitleDialog",{countSelectedPaths:e.listSelectedPaths.length})),1)),(0,t.Wm)(a,{class:"float-right",icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[0]||(l[0]=e=>n.value=!1)})]),(0,t.Wm)(o,{class:"q-mt-xs"}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(I.Z,{label:e.$t("fileManagerDialogCompress.inputName"),icon:"fas fa-file-zipper",prefix:`${c.value}/`,value:s.value,"onUpdate:value":l[1]||(l[1]=e=>s.value=e),maxLength:"256",rules:[l=>""!==l||e.$t("fileManagerDialogCompress.fieldRequired"),()=>u.value||e.$t("fileManagerDialogCompress.onlyAlphaNumeric")]},null,8,["label","prefix","value","rules"])])),_:1}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(qa.Z,{icon:"fas fa-file",label:e.$t("fileManagerDialogCompress.extensionFile"),options:["zip","tgz"],selected:r.value,"onUpdate:selected":l[2]||(l[2]=e=>r.value=e)},null,8,["label","selected"])])),_:1}),(0,t.Wm)(i,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t._)("div",za,[(0,t._)("div",Ba,[(0,t.Wm)(d,{name:"fas fa-clipboard-check",size:"24px",color:"grey-8"}),(0,t._)("div",Ea,(0,q.zw)(e.$t("fileManagerDialogCompress.selectedPaths")),1)]),e.listSelectedPaths.length>0?((0,t.wg)(),(0,t.iD)("div",Sa,[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(e.listSelectedPaths,((e,l)=>((0,t.wg)(),(0,t.iD)("p",{key:l},(0,q.zw)(e.name),1)))),128))])):((0,t.wg)(),(0,t.iD)("div",Ua,[(0,t._)("p",null,(0,q.zw)(e.selectedFile.name),1)]))])])),_:1}),(0,t.Wm)(p,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{color:"grey-8",label:e.$t("fileManagerDialogCompress.btnCancel"),onClick:l[3]||(l[3]=e=>n.value=!1)},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"fas fa-file-zipper",label:e.$t("fileManagerDialogCompress.btnCompressFile"),disable:!c.value||!u.value,onClick:l[4]||(l[4]=e=>m())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),Va=Ha,ja=Va;x()(Ha,"components",{QDialog:pe.Z,QCard:ge.Z,QBtn:$.Z,QSeparator:ve.Z,QCardSection:fe.Z,QIcon:tl.Z,QCardActions:we.Z});const Aa=(0,t.aZ)({__name:"FileManagerToolbarBtnCompress",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow)),n=(0,t.Fl)((()=>l.getListSelectedPaths));function s(){a.value++,o.value=!0}return(e,l)=>{const r=(0,t.up)("q-tooltip"),u=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(ja,{showDialogCompress:o.value,"onUpdate:showDialogCompress":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,listSelectedPaths:n.value,key:a.value},null,8,["showDialogCompress","selectedFile","listSelectedPaths"])),(0,t.Wm)(u,{icon:"far fa-file-zipper",color:"primary",round:"",disable:e.isDisabled,onClick:l[1]||(l[1]=e=>s())},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnCompress.btnCompress")),1)])),_:1})])),_:1},8,["disable"])])}}}),Na=Aa,Ia=Na;x()(Aa,"components",{QBtn:$.Z,QTooltip:R.Z});const La=(0,t.aZ)({__name:"FileManagerToolbarBtnRemove",props:{isDisabled:{type:Boolean}},setup(e){const l=k(),a=(0,ue.QT)().t,o=(0,L.iH)(!1),i=(0,L.iH)(400),n=(0,L.iH)(""),s=(0,L.iH)(""),r=(0,t.Fl)((()=>l.getSelectedPathOrActiveRow)),u=(0,t.Fl)((()=>l.getListSelectedPaths)),c=(0,t.Fl)({get:()=>l.getKeyTreeView,set:e=>l.setKeyTreeView(e)});function d(){i.value++,s.value=g(),o.value=!0}function m(){o.value=!1}function p(){const e=u.value.length>0?u.value:[r.value];(0,re.Q)();const t=new A.Z;let n=[];e.forEach((e=>{n.push(e.path)})),t.removeFile({sourcePaths:n}).then((()=>{const e=RegExp(/.trash/).test(l.getCurrentAbsolutePath),t=e?`${a("fileManagerToolbarBtnRemove.msgRemovePermanentSuccess")}`:`${a("fileManagerToolbarBtnRemove.msgRemoveSuccess")}`;(0,se.LX)(t),o.value=!1,i.value++,c.value++})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${a("fileManagerToolbarBtnRemove.msgRemoveError")}`)})).finally((()=>{(0,re.Z)()}))}function g(){const e="/app/.trash"===l.getCurrentAbsolutePath;return e?u.value.length>1?`${a("fileManagerToolbarBtnRemove.msgConfirmRemoveSelectedMultiFileModelsTrash",{countFiles:u.value.length})}`:1===u.value.length?`${a("fileManagerToolbarBtnRemove.msgConfirmRemoveSelectedOneFileTrash")}`:`${a("fileManagerToolbarBtnRemove.msgConfirmRemoveOneFileTrash",{fileName:r.value.name,mimeType:"directory"===r.value.mimeType?"directory":"file"})}`:u.value.length>1?`${a("fileManagerToolbarBtnRemove.msgConfirmRemoveSelectedMultiFileModels",{countFiles:u.value.length})}`:1===u.value.length?`${a("fileManagerToolbarBtnRemove.msgConfirmRemoveSelectedOneFile")}`:`${a("fileManagerToolbarBtnRemove.msgConfirmRemoveOneFile",{fileName:r.value.name,mimeType:"directory"===r.value.mimeType?"directory":"file"})}`}return(0,t.YP)(o,(e=>{!1!==e&&(n.value="directory"===r.value.mimeType?`${a("fileManagerToolbarBtnRemove.titleDialogRemoveDir")}`:`${a("fileManagerToolbarBtnRemove.titleDialogRemoveFile")}`)})),(e,l)=>{const a=(0,t.up)("q-tooltip"),i=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)(t.HY,null,[(0,t.Wm)(Pe.Z,{showDeleteDialog:o.value,"onUpdate:showDeleteDialog":l[2]||(l[2]=e=>o.value=e),titleDialog:n.value,messageToDelete:s.value},{"card-actions":(0,t.w5)((()=>[(0,t.Wm)(N.Z,{label:e.$t("fileManagerToolbarBtnRemove.btnCancel"),color:"grey-8",onClick:l[0]||(l[0]=e=>m())},null,8,["label"]),(0,t.Wm)(N.Z,{label:e.$t("fileManagerToolbarBtnRemove.btnConfirm"),color:"negative",onClick:l[1]||(l[1]=e=>p())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","messageToDelete"]),(0,t._)("div",null,[(0,t.Wm)(i,{icon:"sym_s_delete",color:"negative",round:"",disable:e.isDisabled,onClick:l[3]||(l[3]=e=>d())},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{class:"bg-negative",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnRemove.btnRemoveFile")),1)])),_:1})])),_:1},8,["disable"])])],64)}}}),Ya=La,Ka=Ya;x()(La,"components",{QBtn:$.Z,QTooltip:R.Z});const Oa={class:"flex justify-between items-center"},Xa={class:"title-dialog"},Ga=(0,t.aZ)({__name:"FileManagerToolbarDialogNewFile",props:{showDialogNewFile:{type:Boolean}},emits:["update:showDialogNewFile"],setup(e,{emit:l}){const a=e,o=k(),i=(0,ue.QT)().t,n=(0,L.iH)(a.showDialogNewFile),s=(0,L.iH)(""),r=(0,t.Fl)((()=>o.getCurrentAbsolutePath)),u=(0,t.Fl)({get:()=>o.getKeyTreeView,set:e=>o.setKeyTreeView(e)}),c=(0,t.Fl)((()=>{const e=new RegExp(/^[\w\s-.]{1,255}$/);return e.test(s.value)}));function d(){(0,re.Q)();const e=new A.Z;e.createFile({filePath:`${r.value}/${s.value}`,mimeType:"file"}).then((()=>{(0,se.LX)(`${i("fileManagerToolbarDialogNewFile.msgCreateFileSuccess",{fileName:s.value})}`),n.value=!1,u.value++})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${i("fileManagerToolbarDialogNewFile.msgCreateFileError",{fileName:s.value})}`)})).finally((()=>{(0,re.Z)()}))}return(0,t.YP)((()=>a.showDialogNewFile),(e=>{n.value=e})),(0,t.YP)(n,(e=>{l("update:showDialogNewFile",e)})),(e,l)=>{const a=(0,t.up)("q-btn"),o=(0,t.up)("q-separator"),i=(0,t.up)("q-card-section"),u=(0,t.up)("q-card-actions"),m=(0,t.up)("q-card"),p=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(p,{modelValue:n.value,"onUpdate:modelValue":l[4]||(l[4]=e=>n.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(m,{flat:"",class:"dialog-card-bg",style:{width:"600px","max-width":"70vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",Oa,[(0,t._)("div",Xa,(0,q.zw)(e.$t("fileManagerToolbarDialogNewFile.titleDialog")),1),(0,t.Wm)(a,{icon:"fas fa-times",flat:"",round:"",dense:"",onClick:l[0]||(l[0]=e=>n.value=!1)})]),(0,t.Wm)(o,{class:"q-mt-none"}),(0,t.Wm)(i,{class:"q-py-md q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(I.Z,{label:e.$t("fileManagerToolbarDialogNewFile.labelInputNameFile"),prefix:`${r.value}/`,icon:"sym_s_description",value:s.value,"onUpdate:value":l[1]||(l[1]=e=>s.value=e),maxLength:"256",rules:[l=>""!==l&&null!==l||e.$t("fileManagerToolbarDialogNewFile.fieldRequired"),()=>c.value||e.$t("fileManagerToolbarDialogNewFile.onlyAlphaNumeric")]},null,8,["label","prefix","value","rules"])])),_:1}),(0,t.Wm)(u,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(N.Z,{color:"grey-8",label:e.$t("fileManagerToolbarDialogNewFile.btnCancel"),onClick:l[2]||(l[2]=e=>n.value=!1)},null,8,["label"]),(0,t.Wm)(N.Z,{icon:"sym_s_note_add",label:e.$t("fileManagerToolbarDialogNewFile.btnCreateFile"),disable:!r.value||!c.value,onClick:l[3]||(l[3]=e=>d())},null,8,["label","disable"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),Ja=Ga,et=Ja;x()(Ga,"components",{QDialog:pe.Z,QCard:ge.Z,QBtn:$.Z,QSeparator:ve.Z,QCardSection:fe.Z,QCardActions:we.Z});const lt=(0,t.aZ)({__name:"FileManagerToolbarBtnNewFile",setup(e){const l=(0,L.iH)(!1),a=(0,L.iH)(0);function o(){l.value=!0,a.value++}return(e,i)=>{const n=(0,t.up)("q-tooltip"),s=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(et,{showDialogNewFile:l.value,"onUpdate:showDialogNewFile":i[0]||(i[0]=e=>l.value=e),key:a.value},null,8,["showDialogNewFile"])),(0,t.Wm)(s,{icon:"sym_s_note_add",color:"primary",round:"",onClick:i[1]||(i[1]=e=>o())},{default:(0,t.w5)((()=>[(0,t.Wm)(n,{class:"bg-primary",style:{"font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnNewFile.btnNewFile")),1)])),_:1})])),_:1})])}}}),at=lt,tt=at;x()(lt,"components",{QBtn:$.Z,QTooltip:R.Z});var ot=a(85027);const it=[null,"","php","html","css","shell","js","ts","xhtml","scss","sass","sh","txt","md","xml","go","log"],nt={class:"flex justify-start items-center"},st={class:"flex justify-end items-center"},rt=(0,t.aZ)({__name:"FileManagerToolbar",setup(e){const l=k(),a=(0,t.Fl)((()=>l.getCurrentAbsolutePath)),o=(0,t.Fl)((()=>l.getActiveRowTable)),i=(0,t.Fl)((()=>l.getListSelectedPaths)),n=(0,t.Fl)({get:()=>l.getSelectedPathOrActiveRow,set:e=>{l.setSelectedPathOrActiveRow(e)}}),s=(0,t.Fl)((()=>1===i.value.length?(n.value=i.value[0],n.value):(n.value=o.value,n.value))),r=(0,t.Fl)((()=>"/"===a.value)),u=(0,t.Fl)((()=>"/app/.trash"===a.value)),c=(0,t.Fl)((()=>!(i.value.length<=1)||("directory"===s.value.mimeType||""===s.value.path))),d=(0,t.Fl)((()=>{const e=512e4;return i.value.length>1||"directory"===s.value.mimeType||s.value.size>e||""===s.value.path||!it.includes(s.value.extension)})),m=(0,t.Fl)((()=>""===s.value.path&&0===i.value.length)),p=(0,t.Fl)((()=>""===s.value.path||"directory"===s.value.mimeType)),g=(0,t.Fl)((()=>""===s.value.path||"directory"===s.value.mimeType)),v=(0,t.Fl)((()=>""===s.value.path)),f=(0,t.Fl)((()=>""===s.value.path)),w=(0,t.Fl)((()=>""===s.value.path)),b=(0,t.Fl)((()=>""===s.value.path&&0===i.value.length)),h=(0,t.Fl)((()=>ot.g.includes(s.value.extension))),y=(0,t.Fl)((()=>""===s.value.path&&0===i.value.length));return(e,l)=>{const a=(0,t.up)("q-toolbar");return(0,t.wg)(),(0,t.j4)(a,{class:"flex justify-between file-manager-toolbar-bg"},{default:(0,t.w5)((()=>[(0,t._)("div",nt,[(0,t.Wm)(B,{class:"q-mr-sm"}),(0,t.Wm)(U,{isDisabled:r.value,class:"q-ma-sm"},null,8,["isDisabled"]),(0,t.Wm)(j,{class:"q-ma-sm"}),(0,t.Wm)(Fe,{class:"q-ma-sm"}),(0,t.Wm)(qe,{class:"q-ma-sm"}),(0,t.Wm)(tt,{class:"q-ma-sm"}),u.value?((0,t.wg)(),(0,t.j4)(Re,{key:0,class:"q-ma-sm"})):((0,t.wg)(),(0,t.j4)(Ee,{key:1,class:"q-ma-sm"}))]),(0,t._)("div",st,[(0,t.Wm)(He,{isDisabled:c.value,class:"q-ma-sm"},null,8,["isDisabled"]),(0,t.Wm)(gl,{isDisabled:d.value,class:"q-ma-sm"},null,8,["isDisabled"]),(0,t.Wm)(Pl,{isDisabled:m.value,class:"q-ma-sm"},null,8,["isDisabled"]),(0,t.Wm)($l,{isDisabled:p.value,class:"q-ma-sm"},null,8,["isDisabled"]),(0,t.Wm)(Al,{isDisabled:g.value,class:"q-ma-sm"},null,8,["isDisabled"]),(0,t.Wm)(Gl,{isDisabled:v.value,class:"q-ma-sm"},null,8,["isDisabled"]),(0,t.Wm)(ha,{isDisabled:f.value,class:"q-ma-sm"},null,8,["isDisabled"]),h.value?((0,t.wg)(),(0,t.j4)(Wa,{key:0,isDisabled:w.value,class:"q-ma-sm"},null,8,["isDisabled"])):((0,t.wg)(),(0,t.j4)(Ia,{key:1,isDisabled:b.value,class:"q-ma-sm"},null,8,["isDisabled"])),(0,t.Wm)(Ka,{isDisabled:y.value,class:"q-ma-sm"},null,8,["isDisabled"])])])),_:1})}}});var ut=a(51663);const ct=rt,dt=ct;x()(rt,"components",{QToolbar:ut.Z});const mt=(0,t.aZ)({__name:"FileManagerSideBarTreeView",setup(e){const l=k(),a=(0,L.iH)(0),o=(0,t.Fl)({get:()=>l.getActiveRowTable,set:e=>{l.setActiveRowTable(e)}}),i=(0,t.Fl)({get:()=>l.getPathsTreeView,set:e=>{l.setPathsTreeView(e)}}),n=(0,t.Fl)({get:()=>l.getKeyTreeView,set:e=>{l.setKeyTreeView(e)}}),s=(0,t.Fl)({get:()=>l.getCurrentAbsolutePath,set:e=>{l.setCurrentAbsolutePath(e)}}),r=(0,t.Fl)({get:()=>l.getSelectedPath,set:e=>{l.setSelectedPath(e)}}),u=(0,t.Fl)({get:()=>l.getFilesCurrentPath,set:e=>{l.setFilesCurrentPath(e)}});function c(e){if(void 0===e||null===e)return;const t=new A.Z;"/"===e?l.setIsLoadingHomeDir(!0):(0,re.Q)(),t.getCurrentPath(e).then((l=>{u.value=l.data.body,"/"===e?d(l.data.body):m(i.value,e,l.data.body),a.value++})).catch((e=>{console.error(e)})).finally((()=>{o.value={name:"",path:"",mimeType:"",extension:"",permissions:"",size:0,group:"",gid:0,owner:"",uid:0,updatedAt:0},setTimeout((()=>{l.setIsLoadingHomeDir(!1),(0,re.Z)()}),500)}))}function d(e){i.value=[],i.value.push({label:"/",path:"/",icon:"sym_s_home",iconColor:"grey-7",children:[]}),e.forEach((e=>{"directory"===e.mimeType&&i.value[0].children.push({label:e.name,path:e.path,icon:"sym_s_folder",iconColor:"yellow-9",children:[]})}))}function m(e,l,a){e.forEach((e=>{if(e.path===l)return e.icon="sym_s_folder_open",e.children=[],void a.forEach((l=>{"directory"===l.mimeType&&e.children.push({label:l.name,path:l.path,icon:".trash"===l.name?"sym_s_delete":"sym_s_folder",iconColor:".trash"===l.name?"grey-8":"yellow-9",children:[]})}));m(e.children,l,a)}))}return(0,t.YP)(s,(e=>{c(e)})),(0,t.YP)(r,(e=>{s.value=e.path})),(0,t.YP)(n,(()=>{setTimeout((()=>{c(s.value)}),200)})),(0,t.wF)((()=>{s.value="/",c(s.value)})),(e,l)=>{const o=(0,t.up)("q-tree");return(0,t.wg)(),(0,t.j4)(o,{key:a.value,nodes:i.value,selected:s.value,"onUpdate:selected":l[0]||(l[0]=e=>s.value=e),"node-key":"path","tick-strategy":"none","default-expand-all":"",style:{"font-size":"0.809rem"}},null,8,["nodes","selected"])}}}),pt=mt,gt=pt;x()(mt,"components",{QTree:fl.Z});const vt=(0,t.aZ)({__name:"FileManagerTableMenuRemove",setup(e){const l=k(),a=(0,ue.QT)().t,o=(0,L.iH)(!1),i=(0,L.iH)(400),n=(0,L.iH)(""),s=(0,L.iH)(""),r=(0,L.iH)(!1),u=(0,t.Fl)((()=>l.getActiveRowTable)),c=(0,t.Fl)({get:()=>l.getKeyTreeView,set:e=>l.setKeyTreeView(e)});function d(){i.value++,s.value=g(),o.value=!0}function m(){o.value=!1}function p(e){(0,re.Q)();const t=new A.Z;let n=[];e.forEach((e=>{n.push(e.path)})),t.removeFile({sourcePaths:n}).then((()=>{const e=RegExp(/.trash/).test(l.getCurrentAbsolutePath),t=e?`${a("fileManagerToolbarBtnRemove.msgRemovePermanentSuccess")}`:`${a("fileManagerToolbarBtnRemove.msgRemoveSuccess")}`;(0,se.LX)(t),o.value=!1,i.value++,c.value++,o.value=!1,r.value=!1})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${a("fileManagerToolbarBtnRemove.msgRemoveError")}`)})).finally((()=>{(0,re.Z)()}))}function g(){const e=RegExp(/.trash/).test(l.getCurrentAbsolutePath);return e?`${a("fileManagerToolbarBtnRemove.msgConfirmRemoveOneFileTrash",{fileName:u.value.name,mimeType:"directory"===u.value.mimeType?"directory":"file"})}`:`${a("fileManagerToolbarBtnRemove.msgConfirmRemoveOneFile",{fileName:u.value.name,mimeType:"directory"===u.value.mimeType?"directory":"file"})}`}return(0,t.YP)(r,(e=>{!0===e&&p([u.value])})),(0,t.YP)(o,(e=>{!1!==e&&(n.value="directory"===u.value.mimeType?`${a("fileManagerToolbarBtnRemove.btnRemoveDir")}`:`${a("fileManagerToolbarBtnRemove.btnRemoveFile")}`)})),(e,l)=>{const a=(0,t.up)("q-icon"),i=(0,t.up)("q-item-section"),r=(0,t.up)("q-item");return(0,t.wg)(),(0,t.iD)(t.HY,null,[(0,t.Wm)(Pe.Z,{showDeleteDialog:o.value,"onUpdate:showDeleteDialog":l[2]||(l[2]=e=>o.value=e),titleDialog:n.value,messageToDelete:s.value},{"card-actions":(0,t.w5)((()=>[(0,t.Wm)(N.Z,{label:e.$t("fileManagerToolbarBtnRemove.btnCancel"),color:"grey-8",onClick:l[0]||(l[0]=e=>m())},null,8,["label"]),(0,t.Wm)(N.Z,{label:n.value,color:"negative",onClick:l[1]||(l[1]=e=>d())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","messageToDelete"]),(0,t._)("div",null,[(0,t.Wm)(r,{clickable:"",onClick:l[3]||(l[3]=e=>d())},{default:(0,t.w5)((()=>[(0,t.Wm)(i,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{name:"sym_s_delete",size:"16px"})])),_:1}),(0,t.Wm)(i,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)("directory"===u.value.mimeType?e.$t("fileManagerToolbarBtnRemove.btnRemoveDir"):e.$t("fileManagerToolbarBtnRemove.btnRemoveFile")),1)])),_:1})])),_:1})])],64)}}});var ft=a(490),wt=a(76749);const bt=vt,ht=bt;x()(vt,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z});const yt=(0,t.aZ)({__name:"FileManagerTableMenuDownload",setup(e){const l=k(),a=(0,t.Fl)((()=>l.getActiveRowTable));function o(){if(void 0===a.value.path)return;(0,re.Q)();const e=new A.Z;e.getFileDownloadBlob(a.value).then((e=>{let l=document.createElement("a");document.body.appendChild(l),l.style="display: none";const t=window.URL.createObjectURL(e);l.href=t,l.download=a.value.name,l.click(),window.URL.revokeObjectURL(t)})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,e.msg)})).finally((()=>{(0,re.Z)()}))}return(e,l)=>{const a=(0,t.up)("q-icon"),i=(0,t.up)("q-item-section"),n=(0,t.up)("q-item"),s=(0,t.Q2)("close-popup");return(0,t.wy)(((0,t.wg)(),(0,t.j4)(n,{clickable:"",onClick:l[0]||(l[0]=e=>o())},{default:(0,t.w5)((()=>[(0,t.Wm)(i,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{name:"fas fa-file-download",size:"16px"})])),_:1}),(0,t.Wm)(i,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnDownload.btnDownload")),1)])),_:1})])),_:1})),[[s]])}}});var _t=a(62146);const Ft=yt,Dt=Ft;x()(yt,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z}),x()(yt,"directives",{ClosePopup:_t.Z});const Tt=(0,t.aZ)({__name:"FileManagerTableMenuRenameFile",setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getActiveRowTable));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-icon"),r=(0,t.up)("q-item-section"),u=(0,t.up)("q-item");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(Kl,{showDialogRename:o.value,"onUpdate:showDialogRename":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,key:a.value},null,8,["showDialogRename","selectedFile"])),(0,t.Wm)(u,{clickable:"",onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"fas fa-edit",size:"16px"})])),_:1}),(0,t.Wm)(r,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)("directory"!==i.value.mimeType?e.$t("fileManagerToolbarBtnRenameFile.btnRenameFile"):e.$t("fileManagerToolbarBtnRenameFile.btnRenameDir")),1)])),_:1})])),_:1})])}}}),Ct=Tt,xt=Ct;x()(Tt,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z});const Mt=(0,t.aZ)({__name:"FileManagerTableMenuDuplicateFile",setup(e){const l=k(),a=(0,ue.QT)().t,o=(0,t.Fl)((()=>l.getActiveRowTable)),i=(0,t.Fl)({get:()=>l.getKeyTreeView,set:e=>l.setKeyTreeView(e)});function n(){(0,re.Q)();const e=new A.Z,l=o.value.path.replace("."+o.value.extension,""),t=l+Date.now()+"."+o.value.extension;e.copyFile({sourcePath:o.value.path,destinationPath:t}).then((()=>{(0,se.LX)(`${a("fileManagerToolbarBtnDuplicateFile.msgDuplicateFileSuccess",{fileName:o.value.name})}`),i.value++})).catch((e=>{console.error(e),(0,se.s9)(e.response.data,`${a("fileManagerToolbarBtnDuplicateFile.msgDuplicateFileError",{fileName:o.value.name})}`)})).finally((()=>{(0,re.Z)()}))}return(e,l)=>{const a=(0,t.up)("q-icon"),o=(0,t.up)("q-item-section"),i=(0,t.up)("q-item"),s=(0,t.Q2)("close-popup");return(0,t.wg)(),(0,t.iD)("div",null,[(0,t.wy)(((0,t.wg)(),(0,t.j4)(i,{clickable:"",onClick:l[0]||(l[0]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{name:"sym_s_copy_all",size:"16px"})])),_:1}),(0,t.Wm)(o,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnDuplicateFile.btnDuplicateFile")),1)])),_:1})])),_:1})),[[s]])])}}}),Zt=Mt,Wt=Zt;x()(Mt,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z}),x()(Mt,"directives",{ClosePopup:_t.Z});const qt=(0,t.aZ)({__name:"FileManagerTableMenuEditCode",setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getActiveRowTable));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-icon"),r=(0,t.up)("q-item-section"),u=(0,t.up)("q-item");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(dl,{showDialogEditCode:o.value,"onUpdate:showDialogEditCode":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,key:a.value},null,8,["showDialogEditCode","selectedFile"])),(0,t.Wm)(u,{clickable:"",onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"fas fa-code",size:"16px"})])),_:1}),(0,t.Wm)(r,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnEditCode.btnEditCode")),1)])),_:1})])),_:1})])}}}),Pt=qt,kt=Pt;x()(qt,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z});const Qt=(0,t.aZ)({__name:"FileManagerTableMenuCopy",setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getActiveRowTable));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-icon"),r=(0,t.up)("q-item-section"),u=(0,t.up)("q-item");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(Hl,{showDialogCopy:o.value,"onUpdate:showDialogCopy":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,key:a.value},null,8,["showDialogCopy","selectedFile"])),(0,t.Wm)(u,{clickable:"",onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"fas fa-copy",size:"16px"})])),_:1}),(0,t.Wm)(r,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnCopy.btnCopy")),1)])),_:1})])),_:1})])}}}),$t=Qt,Rt=$t;x()(Qt,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z});const zt=(0,t.aZ)({__name:"FileManagerTableMenuMove",setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getActiveRowTable));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-icon"),r=(0,t.up)("q-item-section"),u=(0,t.up)("q-item");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(Zl,{showDialogMove:o.value,"onUpdate:showDialogMove":l[0]||(l[0]=e=>o.value=e),key:a.value},null,8,["showDialogMove"])),(0,t.Wm)(u,{clickable:"",onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"fas fa-truck-arrow-right",size:"16px"})])),_:1}),(0,t.Wm)(r,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)("directory"!==i.value.mimeType?e.$t("fileManagerToolbarBtnMove.btnMoveFile"):e.$t("fileManagerToolbarBtnMove.btnMoveDir")),1)])),_:1})])),_:1})])}}}),Bt=zt,Et=Bt;x()(zt,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z});const St=(0,t.aZ)({__name:"FileManagerTableMenuExtract",setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getActiveRowTable));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-icon"),r=(0,t.up)("q-item-section"),u=(0,t.up)("q-item");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(xa,{showDialogExtract:o.value,"onUpdate:showDialogExtract":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,key:a.value},null,8,["showDialogExtract","selectedFile"])),(0,t.Wm)(u,{clickable:"",onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"fas fa-file-zipper",size:"16px"})])),_:1}),(0,t.Wm)(r,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnExtract.btnExtract")),1)])),_:1})])),_:1})])}}}),Ut=St,Ht=Ut;x()(St,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z});const Vt=(0,t.aZ)({__name:"FileManagerTableMenuCompress",setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getActiveRowTable));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-icon"),r=(0,t.up)("q-item-section"),u=(0,t.up)("q-item");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(ja,{showDialogCompress:o.value,"onUpdate:showDialogCompress":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,listSelectedPaths:[i.value],key:a.value},null,8,["showDialogCompress","selectedFile","listSelectedPaths"])),(0,t.Wm)(u,{clickable:"",onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"far fa-file-zipper",size:"16px"})])),_:1}),(0,t.Wm)(r,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnCompress.btnCompress")),1)])),_:1})])),_:1})])}}}),jt=Vt,At=jt;x()(Vt,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z});const Nt=(0,t.aZ)({__name:"FileManagerTableMenuEditPermissions",setup(e){const l=k(),a=(0,L.iH)(300),o=(0,L.iH)(!1),i=(0,t.Fl)((()=>l.getActiveRowTable));function n(){a.value++,o.value=!0}return(e,l)=>{const s=(0,t.up)("q-icon"),r=(0,t.up)("q-item-section"),u=(0,t.up)("q-item");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(fa,{showDialogEditPermissions:o.value,"onUpdate:showDialogEditPermissions":l[0]||(l[0]=e=>o.value=e),selectedFile:i.value,key:a.value},null,8,["showDialogEditPermissions","selectedFile"])),(0,t.Wm)(u,{clickable:"",onClick:l[1]||(l[1]=e=>n())},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{avatar:""},{default:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"fas fa-person-military-pointing",size:"16px"})])),_:1}),(0,t.Wm)(r,null,{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerToolbarBtnEditPermissions.btnEditPermissions")),1)])),_:1})])),_:1})])}}}),It=Nt,Lt=It;x()(Nt,"components",{QItem:ft.Z,QItemSection:wt.Z,QIcon:tl.Z});const Yt=(0,t.aZ)({__name:"FileManagerTableMenu",setup(e){const l=k(),a=(0,t.Fl)((()=>l.getActiveRowTable)),o=(0,t.Fl)((()=>""!==a.value.path&&"directory"!==a.value.mimeType));function i(){const e=5120;return ot.g.includes(a.value.extension)&&a.value.size<=e}function n(){const e=512e4;return it.includes(a.value.extension)&&a.value.size<=e&&"directory"!==a.value.mimeType}return(e,l)=>{const a=(0,t.up)("q-list"),s=(0,t.up)("q-menu");return(0,t.wg)(),(0,t.j4)(s,{"touch-position":"","context-menu":""},{default:(0,t.w5)((()=>[(0,t.Wm)(a,{dense:"",style:{"min-width":"80px"},class:"file-manager-menu"},{default:(0,t.w5)((()=>[o.value?((0,t.wg)(),(0,t.j4)(Dt,{key:0})):(0,t.kq)("",!0),n()?((0,t.wg)(),(0,t.j4)(kt,{key:1})):(0,t.kq)("",!0),(0,t.Wm)(Et),o.value?((0,t.wg)(),(0,t.j4)(Wt,{key:2})):(0,t.kq)("",!0),o.value?((0,t.wg)(),(0,t.j4)(Rt,{key:3})):(0,t.kq)("",!0),(0,t.Wm)(xt),(0,t.Wm)(Lt),i()?((0,t.wg)(),(0,t.j4)(Ht,{key:4})):((0,t.wg)(),(0,t.j4)(At,{key:5})),(0,t.Wm)(ht)])),_:1})])),_:1})}}});var Kt=a(56362),Ot=a(13246);const Xt=Yt,Gt=Xt;x()(Yt,"components",{QMenu:Kt.Z,QList:Ot.Z,QItem:ft.Z});var Jt=a(50168);function eo(e){const l=["bytes","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"];let a=0;const t=e<0,o=Math.abs(e);let i=o;while(i>=1024&&ab(e.path),headerClasses:"bg-primary text-white",style:"width:50%",sortable:!0},{name:"size",label:a("fileManagerTable.colSize"),align:"center",field:"size",format:e=>eo(e),sortable:!0},{name:"mimeType",label:a("fileManagerTable.colType"),align:"center",field:"mimeType",classes:"hidden",headerClasses:"hidden",sortable:!0},{name:"updatedAt",label:a("fileManagerTable.colLastModifiedDate"),align:"center",field:"updatedAt",format:e=>(0,Jt.Z)({epoch:e,onlyDate:!1}),sortable:!0},{name:"permissions",label:a("fileManagerTable.colPermission"),align:"center",field:"permissions"}]),u=(0,t.Fl)({get:()=>l.getActiveRowTable,set:e=>{l.setActiveRowTable(e)}}),c=(0,t.Fl)((()=>l.getFilesCurrentPath)),d=(0,t.Fl)({get:()=>l.getListSelectedPaths,set:e=>{l.setListSelectedPaths(e)}}),m=(0,t.Fl)({get:()=>l.getSelectedPath,set:e=>{l.setSelectedPath(e)}}),p=(0,t.Fl)({get:()=>l.getIsSelectedAllPaths,set:e=>{l.setIsSelectedAllPaths(e)}}),g=(0,t.Fl)((()=>Math.ceil(c.value.length/s.value.rowsPerPage)));function v(e){let l="sym_s_description";const a={dir:"sym_s_folder",".trash":"sym_s_delete",html:"sym_s_html",php:"sym_s_php",js:"sym_s_javascript",css:"sym_s_css",png:"sym_s_image",jpg:"sym_s_image",zip:"sym_s_folder_zip",rar:"sym_s_folder_zip",gzip:"sym_s_folder_zip","tar.gz":"sym_s_folder_zip",tar:"sym_s_folder_zip"};for(let t in a)if(e.match(t)){l=a[t];break}return l}function f(e,l,a){u.value=e,n.value=a,d.value=[]}function w(e){return n.value===e?"bg-row-active":"bg-transparent"}function b(e){return n.value===e?"bg-transparent":"component-table-td-main"}function h(){return 0===d.value.length?"":1===d.value.length?a("fileManagerTable.oneFileSelected",{total:c.value.length}):a("fileManagerTable.multiFileModelsSelected",{quantity:d.value.length,total:c.value.length})}function y(e,l){"directory"===e&&(m.value=l)}return(0,t.YP)(p,(e=>{d.value=!0===e?c.value:[]})),(0,t.YP)(d,(e=>{e.length>0&&(n.value="",u.value={name:"",path:"",mimeType:"",extension:"",permissions:"",size:0,gid:0,group:"",uid:0,owner:"",updatedAt:0})})),(e,l)=>{const a=(0,t.up)("q-icon"),n=(0,t.up)("q-input"),u=(0,t.up)("q-space"),m=(0,t.up)("q-checkbox"),b=(0,t.up)("q-th"),_=(0,t.up)("q-tr"),F=(0,t.up)("q-td"),D=(0,t.up)("q-table"),T=(0,t.up)("q-pagination");return(0,t.wg)(),(0,t.iD)("div",null,[(0,t.Wm)(D,{flat:"",bordered:"","hide-pagination":"","row-key":"path",selection:"multiple",color:"primary","no-data-label":e.$t("fileManagerTable.notFoundFiles"),"no-results-label":e.$t("fileManagerTable.notFoundFiles"),rows:c.value,columns:r.value,selected:d.value,"onUpdate:selected":l[4]||(l[4]=e=>d.value=e),"selected-rows-label":h,pagination:s.value,"onUpdate:pagination":l[5]||(l[5]=e=>s.value=e),filter:i.value},{top:(0,t.w5)((()=>[(0,t.Wm)(n,{rounded:"",outlined:"",debounce:"300",color:"primary",modelValue:i.value,"onUpdate:modelValue":l[0]||(l[0]=e=>i.value=e),"stack-label":"",label:e.$t("fileManagerTable.labelInputSearch"),placeholder:e.$t("fileManagerTable.placeholderInputSearch"),style:{width:"300px"},maxlength:"32"},{prepend:(0,t.w5)((()=>[(0,t.Wm)(a,{name:"fas fa-search"})])),_:1},8,["modelValue","label","placeholder"]),(0,t.Wm)(u),(0,t.Wm)(qa.Z,{options:["10","25","50","100"],label:e.$t("fileManagerTable.labelSelectRowsViews"),style:{width:"250px"},selected:s.value.rowsPerPage,"onUpdate:selected":l[1]||(l[1]=e=>s.value.rowsPerPage=e)},null,8,["label","selected"])])),header:(0,t.w5)((a=>[(0,t.Wm)(_,{props:a,class:"file-manager-table-th-bg"},{default:(0,t.w5)((()=>[(0,t.Wm)(b,{style:{width:"25px"}},{default:(0,t.w5)((()=>[(0,t.Wm)(m,{modelValue:p.value,"onUpdate:modelValue":l[2]||(l[2]=e=>p.value=e)},null,8,["modelValue"])])),_:1}),(0,t.Wm)(b,{style:{width:"25px"}}),((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(a.cols,(e=>((0,t.wg)(),(0,t.j4)(b,{key:e.name,props:a,style:{"font-weight":"bold","font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.label),1)])),_:2},1032,["props"])))),128)),(0,t.Wm)(b,{style:{"font-weight":"bold","font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(e.$t("fileManagerTable.colUserAndGroup")),1)])),_:1})])),_:2},1032,["props"])])),body:(0,t.w5)((e=>[(0,t.Wm)(_,{props:e,onDblclick:l=>y(e.row.mimeType,e.row),onClick:l=>f(e.row,e.row.extension,e.row.path),onContextmenu:(0,o.iM)((l=>f(e.row,e.row.extension,e.row.path)),["prevent"]),class:(0,q.C_)(w(e.row.path))},{default:(0,t.w5)((()=>[(0,t.Wm)(F,null,{default:(0,t.w5)((()=>[(0,t.Wm)(m,{modelValue:d.value,"onUpdate:modelValue":l[3]||(l[3]=e=>d.value=e),val:e.row},null,8,["modelValue","val"])])),_:2},1024),(0,t._)("td",null,[(0,t.Wm)(a,{size:"20px",name:v(".trash"===e.row.name?".trash":e.row.mimeType),color:".trash"!==e.row.name?"yellow-9":"grey-8"},null,8,["name","color"])]),((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(e.cols,(l=>((0,t.wg)(),(0,t.j4)(F,{key:l.name,props:e},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(l.value),1)])),_:2},1032,["props"])))),128)),(0,t.Wm)(F,{class:"text-center file-manager-td-user"},{default:(0,t.w5)((()=>[(0,t.Uk)((0,q.zw)(`${e.row.owner}:${e.row.group}`),1)])),_:2},1024),(0,t.Wm)(Gt)])),_:2},1032,["props","onDblclick","onClick","onContextmenu","class"])])),_:1},8,["no-data-label","no-results-label","rows","columns","selected","pagination","filter"]),(0,t._)("div",lo,[(0,t.Wm)(T,{modelValue:s.value.page,"onUpdate:modelValue":l[6]||(l[6]=e=>s.value.page=e),color:"primary",max:g.value,size:"md"},null,8,["modelValue","max"])])])}}});var to=a(84277),oo=a(90136),io=a(31233),no=a(21682),so=a(11221),ro=a(67220),uo=a(80996);const co=ao,mo=co;x()(ao,"components",{QTable:to.Z,QInput:Oe.Z,QIcon:tl.Z,QSpace:oo.Z,QTr:io.Z,QTh:no.Z,QCheckbox:so.Z,QTd:ro.Z,QPagination:uo.Z});const po={style:{overflow:"hidden"}},go=(0,t.aZ)({__name:"FileManagerIndex",setup(e){const l=(0,L.iH)(17),a=(0,L.iH)(0),i=k(),n=(0,t.Fl)((()=>i.getFilesCurrentPath)),s=(0,t.Fl)((()=>i.getIsLoadingHomeDir)),r=(0,t.Fl)({get:()=>i.getIsSelectedAllPaths,set:e=>{i.setIsSelectedAllPaths(e)}}),u=(0,t.Fl)({get:()=>i.getListSelectedPaths,set:e=>{i.setListSelectedPaths(e)}});return(0,t.YP)(n,(()=>{r.value=!1,u.value=[],a.value++})),(e,i)=>{const n=(0,t.up)("q-card-section"),r=(0,t.up)("q-card"),u=(0,t.up)("q-avatar"),c=(0,t.up)("q-splitter"),d=(0,t.up)("q-page");return(0,t.wg)(),(0,t.j4)(d,{class:"q-px-sm"},{default:(0,t.w5)((()=>[(0,t._)("div",po,[(0,t.wy)((0,t.Wm)(W,null,null,512),[[o.F8,!0===s.value]]),(0,t.wy)((0,t._)("div",null,[(0,t.Wm)(dt),(0,t.Wm)(c,{modelValue:l.value,"onUpdate:modelValue":i[0]||(i[0]=e=>l.value=e),style:{"margin-top":"15px"}},{before:(0,t.w5)((()=>[(0,t.Wm)(r,{flat:"",class:"q-mr-sm scroll-bar",style:{"overflow-y":"auto","overflow-x":"hidden",height:"84vh"}},{default:(0,t.w5)((()=>[(0,t.Wm)(n,null,{default:(0,t.w5)((()=>[(0,t.Wm)(gt)])),_:1})])),_:1})])),separator:(0,t.w5)((()=>[(0,t.Wm)(u,{color:"primary","text-color":"white",size:"32px",icon:"fas fa-arrows-left-right"})])),after:(0,t.w5)((()=>[(0,t.Wm)(r,{flat:"",class:"scroll-bar",style:{"overflow-y":"auto","overflow-x":"hidden",height:"84vh"}},{default:(0,t.w5)((()=>[(0,t.Wm)(n,null,{default:(0,t.w5)((()=>[((0,t.wg)(),(0,t.j4)(mo,{key:a.value}))])),_:1})])),_:1})])),_:1},8,["modelValue"])],512),[[o.F8,!1===s.value]])])])),_:1})}}});var vo=a(69885),fo=a(7498),wo=a(61357);const bo=go,ho=bo;x()(go,"components",{QPage:vo.Z,QSplitter:fo.Z,QCard:ge.Z,QCardSection:fe.Z,QAvatar:wo.Z})},42480:()=>{}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/693.55f0d22e.js b/src/presentation/ui/dist/js/693.55f0d22e.js deleted file mode 100644 index 44ba120b8..000000000 --- a/src/presentation/ui/dist/js/693.55f0d22e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[693],{31555:(e,a,s)=>{s.r(a),s.d(a,{default:()=>da});var t=s(59835),l=s(60499),o=s(86970),r=s(25121),n=s(84278),d=s(89906),i=s(88900),u=s(69036),b=function(e,a,s,t){function l(e){return e instanceof s?e:new s((function(a){a(e)}))}return new(s||(s=Promise))((function(s,o){function r(e){try{d(t.next(e))}catch(a){o(a)}}function n(e){try{d(t["throw"](e))}catch(a){o(a)}}function d(e){e.done?s(e.value):l(e.value).then(r,n)}d((t=t.apply(e,a||[])).next())}))};class m extends u.Z{getDatabases(e){return b(this,void 0,void 0,(function*(){return this.request.get(`/v1/database/${e}/`)}))}createDatabase(e,a){return b(this,void 0,void 0,(function*(){return this.request.post(`/v1/database/${e}/`,a)}))}deleteDatabase(e,a){return b(this,void 0,void 0,(function*(){return this.request.delete(`/v1/database/${e}/${a}/`)}))}createDatabaseUser(e,a,s){return b(this,void 0,void 0,(function*(){return this.request.post(`/v1/database/${e}/${a}/user/`,s)}))}deleteDatabaseUser(e,a,s){return b(this,void 0,void 0,(function*(){return this.request.delete(`/v1/database/${e}/${a}/user/${s}/`)}))}}var c=s(3746);const g=(0,c.Q_)("databasesStatus",{state:()=>({selectedTab:"mysql",keyDatabasesMysqlTable:0,keyDatabasesPostgresTable:0}),getters:{getSelectedTab(e){return e.selectedTab},getKeyDatabasesMysqlTable(e){return e.keyDatabasesMysqlTable},getKeyDatabasesPostgresTable(e){return e.keyDatabasesPostgresTable}},actions:{setSelectedTab(e){this.selectedTab=e},setKeyDatabasesMysqlTable(e){this.keyDatabasesMysqlTable=e},setKeyDatabasesPostgresTable(e){this.keyDatabasesPostgresTable=e}}}),p=(0,t.aZ)({__name:"DatabasesDialogRemoveDatabase",props:{showDialogRemoveDatabase:{type:Boolean},databaseName:{},databaseType:{}},emits:["update:showDialogRemoveDatabase"],setup(e,{emit:a}){const s=e,o=(0,r.QT)().t,u=g(),b=(0,l.iH)(s.showDialogRemoveDatabase),c=(0,t.Fl)({get:()=>u.getKeyDatabasesMysqlTable,set:e=>{u.setKeyDatabasesMysqlTable(e)}}),p=(0,t.Fl)({get:()=>u.getKeyDatabasesPostgresTable,set:e=>{u.setKeyDatabasesPostgresTable(e)}});function v(){const e=new m;e.deleteDatabase(s.databaseType.toLowerCase(),s.databaseName).then((()=>{(0,i.LX)(`${o("databasesDialogRemove.messageRemoveSuccess",{database:s.databaseName})}`),"mysql"===s.databaseType.toLowerCase()?c.value++:p.value++,b.value=!1})).catch((e=>{console.error(e),(0,i.s9)(e.response.data,`${o("databasesDialogRemove.messageRemoveError",{database:s.databaseName})}`)}))}return(0,t.YP)((()=>s.showDialogRemoveDatabase),(e=>{b.value=e})),(0,t.YP)((()=>b.value),(e=>{a("update:showDialogRemoveDatabase",e)})),(e,a)=>((0,t.wg)(),(0,t.j4)(d.Z,{showDeleteDialog:b.value,"onUpdate:showDeleteDialog":a[2]||(a[2]=e=>b.value=e),titleDialog:e.$t("databasesDialogRemove.messageConfirmRemove"),messageToDelete:e.$t("databasesDialogRemove.messageConfirmRemove",{databaseName:e.databaseName}),warningToDelete:e.$t("databasesDialogRemove.warningRemoveDatabase"),customStyle:{"min-width":"775px"}},{"card-actions":(0,t.w5)((()=>[(0,t.Wm)(n.Z,{label:e.$t("databasesDialogRemove.btnCancel"),color:"grey-7",onClick:a[0]||(a[0]=e=>b.value=!1)},null,8,["label"]),(0,t.Wm)(n.Z,{color:"negative",label:e.$t("databasesDialogRemove.btnRemove"),onClick:a[1]||(a[1]=e=>v())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","messageToDelete","warningToDelete"]))}}),v=p,w=v;var y=s(19302);const D=(0,t.aZ)({__name:"DatabasesRemoveDatabase",props:{databaseName:{},databaseType:{}},setup(e){const a=(0,l.iH)(!1),s=(0,t.Fl)((()=>{const e=(0,y.Z)();return e.dark.isActive?"/icons/bomb_dark.svg":"/icons/bomb_light.svg"}));return(e,l)=>((0,t.wg)(),(0,t.iD)("div",null,[(0,t.Wm)(w,{showDialogRemoveDatabase:a.value,"onUpdate:showDialogRemoveDatabase":l[0]||(l[0]=e=>a.value=e),databaseName:e.databaseName,databaseType:e.databaseType,imagePath:s.value},null,8,["showDialogRemoveDatabase","databaseName","databaseType","imagePath"]),(0,t.Wm)(n.Z,{icon:"sym_s_delete",class:"q-mr-md",color:"negative",colorTooltip:"bg-negative",textTooltip:e.$t("databasesRemoveDatabase.tooltipRemove"),onClick:l[1]||(l[1]=e=>a.value=!0),style:{"font-size":"12px"},label:""},null,8,["textTooltip"])]))}}),U=D,h=U;var _=s(15521);const T={class:"flex justify-between items-center"},f={class:"title-dialog"},q=(0,t.aZ)({__name:"DatabasesDialogCreateDatabase",props:{showDialogCreateDatabase:{type:Boolean},databaseType:{default:"MySQL"}},emits:["update:showDialogCreateDatabase"],setup(e,{emit:a}){const s=e,d=(0,r.QT)().t,u=g(),b=(0,l.iH)(s.showDialogCreateDatabase),c=(0,l.iH)(""),p=(0,t.Fl)({get:()=>u.getKeyDatabasesMysqlTable,set:e=>{u.setKeyDatabasesMysqlTable(e)}}),v=(0,t.Fl)({get:()=>u.getKeyDatabasesPostgresTable,set:e=>{u.setKeyDatabasesPostgresTable(e)}});function w(){const e=new m;e.createDatabase(s.databaseType.toLowerCase(),{dbName:c.value}).then((()=>{(0,i.LX)(`${d("databasesDialogCreate.createDataBaseSuccess",{database:c.value})}`),"MySQL"===s.databaseType?p.value++:v.value++,c.value="",b.value=!1})).catch((e=>{console.error(e),(0,i.s9)(e.response.data,`${d("databasesDialogCreate.createDataBaseError",{database:c.value})}`)}))}return(0,t.YP)(b,(e=>{a("update:showDialogCreateDatabase",e)})),(0,t.YP)((()=>s.showDialogCreateDatabase),(e=>{b.value=e})),(e,a)=>{const s=(0,t.up)("q-btn"),l=(0,t.up)("q-card-section"),r=(0,t.up)("q-card-actions"),d=(0,t.up)("q-card"),i=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(i,{modelValue:b.value,"onUpdate:modelValue":a[4]||(a[4]=e=>b.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(d,{class:"dialog-card-bg",style:{width:"700px","max-width":"80vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",T,[(0,t._)("div",f,(0,o.zw)(e.$t("databasesDialogCreate.titleDialogCreate"))+" "+(0,o.zw)(e.databaseType),1),(0,t.Wm)(s,{icon:"sym_s_close",flat:"",round:"",dense:"",onClick:a[0]||(a[0]=e=>(b.value=!1,c.value=""))})]),(0,t.Wm)(l,{class:"q-mb-md q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(_.Z,{label:e.$t("databasesDialogCreate.inputDataBaseName"),icon:"sym_s_database",value:c.value,"onUpdate:value":a[1]||(a[1]=e=>c.value=e),dataCy:"databases-dialog-create-input",maxLength:"32",minLength:"4",isError:/\W/i.test(c.value),msgError:e.$t("databasesDialogCreate.messageValidateError")},null,8,["label","value","isError","msgError"])])),_:1}),(0,t.Wm)(r,{align:"between",class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(n.Z,{label:e.$t("databasesDialogCreate.btnCancel"),color:"grey-7",onClick:a[2]||(a[2]=e=>(b.value=!1,c.value=""))},null,8,["label"]),(0,t.Wm)(n.Z,{icon:"sym_s_database",disable:c.value.length<4||/\W/i.test(c.value),label:e.$t("databasesDialogCreate.btnCreateDataBase"),color:"primary",onClick:a[3]||(a[3]=e=>w())},null,8,["disable","label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var C=s(32074),W=s(44458),P=s(68879),Z=s(63190),k=s(11821),x=s(69984),Q=s.n(x);const R=q,$=R;Q()(q,"components",{QDialog:C.Z,QCard:W.Z,QBtn:P.Z,QCardSection:Z.Z,QCardActions:k.Z});var E=s(61957),L=s(27974),S=s(26557),H=s(87713),N=s(63064);class M{constructor(){this.privilegesMySQL=["ALTER","ALTER ROUTINE","CREATE","CREATE ROUTINE","CREATE TEMPORARY TABLES","CREATE VIEW","DELETE","DROP","EVENT","EXECUTE","INDEX","INSERT","LOCK TABLES","REFERENCES","SELECT","SHOW VIEW","TRIGGER","UPDATE"],this.privilegesPostgreSQL=["ALL PRIVILEGES"]}getPrivilegesMySQL(){return this.privilegesMySQL}getPrivilegesPostgreSQL(){return this.privilegesPostgreSQL}formatSelectedPrivileges(e){return e.map((e=>e.replace(/ /g,"-").toLowerCase()))}}var V=function(e,a,s,t){function l(e){return e instanceof s?e:new s((function(a){a(e)}))}return new(s||(s=Promise))((function(s,o){function r(e){try{d(t.next(e))}catch(a){o(a)}}function n(e){try{d(t["throw"](e))}catch(a){o(a)}}function d(e){e.done?s(e.value):l(e.value).then(r,n)}d((t=t.apply(e,a||[])).next())}))};const I={class:"flex justify-between items-center"},K={class:"title-dialog"},A={class:"row"},z=(0,t.aZ)({__name:"DatabasesDialogCreateUser",props:{showDialogCreateUser:{type:Boolean},databaseType:{},databasesList:{}},emits:["update:showDialogCreateUser"],setup(e,{emit:a}){const s=e,d=(0,r.QT)().t,u=g(),b=(0,l.iH)(s.showDialogCreateUser),c=(0,l.iH)([]),p=(0,l.iH)([]),v=(0,l.iH)(""),w=(0,l.iH)(""),y=(0,l.iH)(!1),D=(0,l.iH)([]),U=(0,l.iH)(!1),h=(0,l.iH)([]),T=(0,t.Fl)((()=>y.value&&v.value.length>=4&&!/\W/i.test(v.value)&&p.value.length>=1)),f=(0,t.Fl)({get:()=>u.getKeyDatabasesMysqlTable,set:e=>{u.setKeyDatabasesMysqlTable(e)}}),q=(0,t.Fl)({get:()=>u.getKeyDatabasesPostgresTable,set:e=>{u.setKeyDatabasesPostgresTable(e)}});function C(){b.value=!1}function W(){return V(this,void 0,void 0,(function*(){let e=!1;for(let a of p.value)yield P(a).then((e=>{(0,i.LX)(e)})).catch((a=>{e=!0,console.error(a),(0,i.s9)(a.error,a.msgDefault)}));e||(setTimeout((()=>{C()}),1e3),"mysql"===s.databaseType?f.value++:q.value++)}))}function P(e){return new Promise(((a,t)=>{const l=new m;l.createDatabaseUser(s.databaseType,e,{password:w.value,username:v.value,dbName:e,privileges:!1===U.value?(new M).formatSelectedPrivileges(D.value):["all"]}).then((()=>{a(`${d("databasesDialogCreateUser.messageCreateUserSuccess",{user:v.value})}`)})).catch((e=>{console.error(e);const a={error:e.response.data,msgDefault:`${d("databasesDialogCreateUser.messageCreateUserError",{user:v.value})}`};t(a)}))}))}return(0,t.wF)((()=>{U.value=!0,h.value=(new M).getPrivilegesPostgreSQL(),"mysql"===s.databaseType&&(h.value=(new M).getPrivilegesMySQL())})),(0,t.YP)(U,(e=>{!1!==e&&(D.value=h.value)})),(0,t.YP)(D,(e=>{U.value=e.length===h.value.length})),(0,t.YP)(b,(e=>{a("update:showDialogCreateUser",e)})),(0,t.YP)((()=>s.showDialogCreateUser),(e=>{b.value=e})),(0,t.YP)((()=>s.databasesList),(e=>{c.value=[],e.forEach((e=>{c.value.push({value:e.name,label:e.name})}))}),{immediate:!0}),(e,a)=>{const s=(0,t.up)("q-btn"),l=(0,t.up)("q-card-section"),r=(0,t.up)("q-toggle"),d=(0,t.up)("q-card"),i=(0,t.up)("q-expansion-item"),u=(0,t.up)("AlertsWarning"),m=(0,t.up)("q-card-actions"),g=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(g,{modelValue:b.value,"onUpdate:modelValue":a[10]||(a[10]=e=>b.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(d,{class:"dialog-card-bg",style:{width:"750px","max-width":"80vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",I,[(0,t._)("div",K,(0,o.zw)(e.$t("databasesDialogCreateUser.titleDialogCreateUser")),1),(0,t.Wm)(s,{icon:"sym_s_close",flat:"",round:"",dense:"",onClick:a[0]||(a[0]=e=>C())})]),(0,t.Wm)(l,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(L.Z,{selected:p.value,"onUpdate:selected":a[1]||(a[1]=e=>p.value=e),label:e.$t("databasesDialogCreateUser.textSelectDatabases"),icon:"sym_s_database",options:c.value},null,8,["selected","label","options"])])),_:1}),(0,t.Wm)(l,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.Wm)(_.Z,{class:"q-mb-lg",label:e.$t("databasesDialogCreateUser.inputUsername"),icon:"sym_s_person",value:v.value,"onUpdate:value":a[2]||(a[2]=e=>v.value=e),dataCy:"databases-dialog-create-user-input",maxLength:"32",minLength:"4",isError:/\W/i.test(v.value),msgError:e.$t("databasesDialogCreateUser.messageInputError")},null,8,["label","value","isError","msgError"]),(0,t.Wm)(S.Z,{password:w.value,"onUpdate:password":a[3]||(a[3]=e=>w.value=e),minLength:16,dataCyInput:"databases-dialog-create-password-input"},null,8,["password"]),(0,t.Wm)(H.Z,{"onUpdate:password":a[4]||(a[4]=e=>w.value=e),class:"float-right",dataCy:"databases-dialog-create-generate-password"})])),_:1}),(0,t.Wm)(l,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.wy)((0,t.Wm)(N.Z,{password:w.value,isValidPassword:y.value,"onUpdate:isValidPassword":a[5]||(a[5]=e=>y.value=e)},null,8,["password","isValidPassword"]),[[E.F8,w.value]])])),_:1}),"mysql"===e.databaseType?((0,t.wg)(),(0,t.j4)(l,{key:0},{default:(0,t.w5)((()=>[(0,t.Wm)(i,{label:e.$t("databasesDialogCreateUser.textPrivileges"),icon:"sym_s_person_add",class:"databases-label-expansion-item","expand-icon":"sym_s_expand_more","expanded-icon":"sym_s_expand_less"},{default:(0,t.w5)((()=>[(0,t.Wm)(d,{class:"q-pa-md"},{default:(0,t.w5)((()=>[(0,t.Wm)(r,{color:"primary",class:"text-subtitle1 text-bold",label:e.$t("databasesDialogCreateUser.toggleSelectAll"),modelValue:U.value,"onUpdate:modelValue":a[6]||(a[6]=e=>U.value=e),"left-label":"","checked-icon":"sym_s_check","unchecked-icon":"sym_s_close"},null,8,["label","modelValue"]),(0,t._)("div",A,[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(h.value,((e,s)=>((0,t.wg)(),(0,t.j4)(r,{key:s,color:"primary",class:"col-4",label:e,modelValue:D.value,"onUpdate:modelValue":a[7]||(a[7]=e=>D.value=e),val:e},null,8,["label","modelValue","val"])))),128))])])),_:1})])),_:1},8,["label"])])),_:1})):((0,t.wg)(),(0,t.j4)(l,{key:1},{default:(0,t.w5)((()=>[(0,t.Wm)(u,{showAlertsWarning:!0,message:e.$t("databasesDialogUpdateUser.textPostgresPrivileges"),class:"q-mt-md"},null,8,["message"])])),_:1})),(0,t.Wm)(m,{align:"between"},{default:(0,t.w5)((()=>[(0,t.Wm)(n.Z,{label:e.$t("databasesDialogCreateUser.btnCancel"),color:"grey-7",onClick:a[8]||(a[8]=e=>C())},null,8,["label"]),(0,t.Wm)(n.Z,{icon:"sym_s_person_add",disable:!T.value,label:e.$t("databasesDialogCreateUser.btnCreateUser"),color:"primary",onClick:a[9]||(a[9]=e=>W())},null,8,["disable","label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var j=s(50651),F=s(23175),Y=s(490);const B=z,O=B;Q()(z,"components",{QDialog:C.Z,QCard:W.Z,QBtn:P.Z,QCardSection:Z.Z,QExpansionItem:j.Z,QToggle:F.Z,QCardActions:k.Z,QItem:Y.Z});const X=(0,t.aZ)({__name:"DatabasesDialogRemoveUser",props:{showDialogRemoveUser:{type:Boolean},databaseUsername:{},databaseName:{},databaseType:{}},emits:["update:showDialogRemoveUser"],setup(e,{emit:a}){const s=e,o=(0,r.QT)().t,u=g(),b=(0,l.iH)(s.showDialogRemoveUser),c=(0,t.Fl)({get:()=>u.getKeyDatabasesMysqlTable,set:e=>{u.setKeyDatabasesMysqlTable(e)}}),p=(0,t.Fl)({get:()=>u.getKeyDatabasesPostgresTable,set:e=>{u.setKeyDatabasesPostgresTable(e)}});function v(){const e=new m;e.deleteDatabaseUser(s.databaseType,s.databaseName,s.databaseUsername).then((()=>{(0,i.LX)(`${o("databasesDialogRemoveUser.messageRemoveUserSuccess",{user:s.databaseUsername})}`),"mysql"===s.databaseType?c.value++:p.value++,b.value=!1})).catch((e=>{console.error(e),(0,i.s9)(e.response.data,`${o("databasesDialogRemoveUser.messageRemoveUserError",{user:s.databaseUsername})}`)}))}return(0,t.YP)((()=>s.showDialogRemoveUser),(e=>{b.value=e})),(0,t.YP)((()=>b.value),(e=>{a("update:showDialogRemoveUser",e)})),(e,a)=>((0,t.wg)(),(0,t.j4)(d.Z,{showDeleteDialog:b.value,"onUpdate:showDeleteDialog":a[2]||(a[2]=e=>b.value=e),titleDialog:e.$t("databasesDialogRemoveUser.titleDialogRemoveUser",{user:e.databaseUsername}),messageToDelete:e.$t("databasesDialogRemoveUser.messageConfirmRemove",{username:e.databaseUsername}),warningToDelete:e.$t("databasesDialogRemoveUser.warningRemoveUser"),customStyle:{"min-width":"650px"}},{"card-actions":(0,t.w5)((()=>[(0,t.Wm)(n.Z,{label:e.$t("databasesDialogRemoveUser.btnCancel"),color:"grey-7",onClick:a[0]||(a[0]=e=>b.value=!1)},null,8,["label"]),(0,t.Wm)(n.Z,{color:"negative",label:e.$t("databasesDialogRemoveUser.btnRemove"),onClick:a[1]||(a[1]=e=>v())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","messageToDelete","warningToDelete"]))}}),G=X,J=G,ee=["innerHTML"],ae=["innerHTML"],se=(0,t.aZ)({__name:"AlertsWarning",props:{showAlertsWarning:{type:Boolean,default:!1},message:{default:""},smallText:{default:""}},setup(e){return(e,a)=>{const s=(0,t.up)("q-icon"),l=(0,t.up)("q-banner");return(0,t.wg)(),(0,t.iD)("div",null,[(0,t.Wm)(E.uT,{appear:"","enter-active-class":"animated fadeIn","leave-active-class":"animated fadeOut"},{default:(0,t.w5)((()=>[e.showAlertsWarning?((0,t.wg)(),(0,t.j4)(l,{key:0,dense:"","inline-actions":"",class:"q-mb-lg text-black bg-warning"},{avatar:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"sym_s_warning",color:"black"})])),default:(0,t.w5)((()=>[(0,t._)("div",{class:"text-subtitle1",innerHTML:e.message},null,8,ee),(0,t._)("small",{innerHTML:e.smallText},null,8,ae)])),_:1})):(0,t.kq)("",!0)])),_:1})])}}});var te=s(47128),le=s(22857);const oe=se,re=oe;Q()(se,"components",{QBanner:te.Z,QIcon:le.Z});const ne={class:"flex justify-between items-center"},de={class:"title-dialog"},ie={class:"text-subtitle1"},ue={class:"text-bold"},be={class:"row"},me=(0,t.aZ)({__name:"DatabasesDialogUpdateUser",props:{showDialogUpdateUser:{type:Boolean},databaseType:{},databaseName:{},databaseUser:{}},emits:["update:showDialogUpdateUser"],setup(e,{emit:a}){const s=e,d=(0,r.QT)().t,u=g(),b=(0,l.iH)(s.showDialogUpdateUser),c=(0,l.iH)([]),p=(0,l.iH)(""),v=(0,l.iH)(!1),w=(0,l.iH)([]),y=(0,l.iH)(!1),D=(0,t.Fl)((()=>v.value&&s.databaseUser.username.length>=4&&!/\W/i.test(s.databaseUser.username))),U=(0,t.Fl)({get:()=>u.getKeyDatabasesMysqlTable,set:e=>{u.setKeyDatabasesMysqlTable(e)}}),h=(0,t.Fl)({get:()=>u.getKeyDatabasesPostgresTable,set:e=>{u.setKeyDatabasesPostgresTable(e)}});function T(){p.value="",c.value=[],b.value=!1}function f(){switch(s.databaseType){case"mysql":w.value=(new M).getPrivilegesMySQL();break;case"postgresql":w.value=(new M).getPrivilegesPostgreSQL();break}}function q(){const e=new m;e.deleteDatabaseUser(s.databaseType,s.databaseName,s.databaseUser.username).then((()=>{e.createDatabaseUser(s.databaseType,s.databaseName,{password:p.value,dbName:s.databaseName,privileges:!1===y.value?(new M).formatSelectedPrivileges(c.value):["all"],username:s.databaseUser.username}).then((()=>{(0,i.LX)(d("databasesDialogUpdateUser.messageUpdateUserSuccess",{user:s.databaseUser.username})),T()}))})).catch((e=>{console.error(e),(0,i.s9)(e.response.data,d("databasesDialogUpdateUser.messageUpdateUserError",{user:s.databaseUser.username}))})).finally((()=>{setTimeout((()=>{"mysql"===s.databaseType?U.value++:h.value++}),1e3)}))}return(0,t.YP)((()=>s.showDialogUpdateUser),(e=>{b.value=e})),(0,t.YP)(b,(e=>{a("update:showDialogUpdateUser",e)})),(0,t.YP)(y,(e=>{!1!==e&&(c.value=w.value)})),(0,t.YP)(c,(e=>{y.value=e.length===w.value.length})),(0,t.wF)((()=>{c.value=s.databaseUser.privileges.map((e=>e.replace(/-/g," ").toUpperCase())),f(),y.value=c.value.includes("ALL PRIVILEGES")})),(e,a)=>{const s=(0,t.up)("q-btn"),r=(0,t.up)("q-card-section"),i=(0,t.up)("q-toggle"),u=(0,t.up)("q-card"),m=(0,t.up)("q-expansion-item"),g=(0,t.up)("q-card-actions"),U=(0,t.up)("q-dialog");return(0,t.wg)(),(0,t.j4)(U,{modelValue:b.value,"onUpdate:modelValue":a[8]||(a[8]=e=>b.value=e),persistent:""},{default:(0,t.w5)((()=>[(0,t.Wm)(u,{class:"dialog-card-bg",style:{width:"750px","max-width":"80vw"}},{default:(0,t.w5)((()=>[(0,t._)("div",ne,[(0,t._)("div",de,(0,o.zw)(e.$t("databasesDialogUpdateUser.titleDialogUpdateUser",{user:e.databaseUser.username})),1),(0,t.Wm)(s,{icon:"sym_s_close",flat:"",round:"",dense:"",onClick:a[0]||(a[0]=e=>T())})]),(0,t.Wm)(r,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t._)("div",ie,[(0,t.Uk)((0,o.zw)(e.$t("databasesDialogUpdateUser.subtitleDialogUpdateUser",{type:e.databaseType}))+": ",1),(0,t._)("span",ue,(0,o.zw)(e.databaseName),1),(0,t.Wm)(re,{showAlertsWarning:!0,message:e.$t("databasesDialogUpdateUser.textAlertMessage"),class:"q-mt-md"},null,8,["message"])]),(0,t.Wm)(_.Z,{class:"q-mb-md",label:e.$t("databasesDialogUpdateUser.inputName"),icon:"sym_s_person",value:e.databaseUser.username,dataCy:"databases-dialog-update-user-input",disable:!0},null,8,["label","value"]),(0,t.Wm)(S.Z,{minLength:16,password:p.value,"onUpdate:password":a[1]||(a[1]=e=>p.value=e),dataCyInput:"databases-dialog-update-password-input"},null,8,["password"]),(0,t.Wm)(H.Z,{password:p.value,"onUpdate:password":a[2]||(a[2]=e=>p.value=e),class:"float-right",dataCy:"databases-dialog-update-generate-password"},null,8,["password"])])),_:1}),(0,t.Wm)(r,{class:"q-px-none"},{default:(0,t.w5)((()=>[(0,t.wy)((0,t.Wm)(N.Z,{password:p.value,"onUpdate:isValidPassword":a[3]||(a[3]=e=>v.value=e)},null,8,["password"]),[[E.F8,p.value]])])),_:1}),"mysql"===e.databaseType?((0,t.wg)(),(0,t.j4)(r,{key:0},{default:(0,t.w5)((()=>[(0,t.Wm)(m,{label:e.$t("databasesDialogUpdateUser.textPrivileges"),icon:"sym_s_people",class:"databases-label-expansion-item"},{default:(0,t.w5)((()=>[(0,t.Wm)(u,{class:"q-pa-md"},{default:(0,t.w5)((()=>[(0,t.Wm)(i,{color:"primary",class:"text-subtitle1 text-bold",label:e.$t("databasesDialogUpdateUser.toggleSelectAll"),modelValue:y.value,"onUpdate:modelValue":a[4]||(a[4]=e=>y.value=e),"left-label":"","checked-icon":"sym_s_check","unchecked-icon":"sym_s_close"},null,8,["label","modelValue"]),(0,t._)("div",be,[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(w.value,((e,s)=>((0,t.wg)(),(0,t.j4)(i,{key:s,color:"primary",class:"col-4",label:e,modelValue:c.value,"onUpdate:modelValue":a[5]||(a[5]=e=>c.value=e),val:e},null,8,["label","modelValue","val"])))),128))])])),_:1})])),_:1},8,["label"])])),_:1})):((0,t.wg)(),(0,t.j4)(r,{key:1},{default:(0,t.w5)((()=>[(0,t.Wm)(re,{showAlertsWarning:!0,message:e.$t("databasesDialogUpdateUser.textPostgresPrivileges"),class:"q-mt-md"},null,8,["message"])])),_:1})),(0,t.Wm)(g,{align:"between"},{default:(0,t.w5)((()=>[(0,t.Wm)(n.Z,{label:e.$t("databasesDialogUpdateUser.btnCancel"),color:"grey-7",onClick:a[6]||(a[6]=e=>T())},null,8,["label"]),(0,t.Wm)(n.Z,{icon:"sym_s_person",disable:!D.value,label:(0,l.SU)(d)("databasesDialogUpdateUser.btnUpdateUser"),color:"primary",onClick:a[7]||(a[7]=e=>q())},null,8,["disable","label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),ce=me,ge=ce;Q()(me,"components",{QDialog:C.Z,QCard:W.Z,QBtn:P.Z,QCardSection:Z.Z,QExpansionItem:j.Z,QToggle:F.Z,QCardActions:k.Z,QItem:Y.Z});const pe=(0,t.aZ)({__name:"DatabasesUsersActions",props:{databaseUser:{},databaseName:{}},setup(e){const a=(0,l.iH)(!1),s=(0,l.iH)(!1),r=(0,l.iH)(1e3),n=(0,t.Fl)((()=>{const e=(0,y.Z)();return e.dark.isActive?"/icons/bomb_dark.svg":"/icons/bomb_light.svg"}));return(e,l)=>{const d=(0,t.up)("q-tooltip"),i=(0,t.up)("q-btn");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(ge,{showDialogUpdateUser:a.value,"onUpdate:showDialogUpdateUser":l[0]||(l[0]=e=>a.value=e),databaseName:e.databaseName,databaseType:e.databaseUser.dbType,databaseUser:e.databaseUser,key:r.value},null,8,["showDialogUpdateUser","databaseName","databaseType","databaseUser"])),(0,t.Wm)(J,{showDialogRemoveUser:s.value,"onUpdate:showDialogRemoveUser":l[1]||(l[1]=e=>s.value=e),databaseName:e.databaseName,databaseType:e.databaseUser.dbType,databaseUsername:e.databaseUser.username,imagePath:n.value},null,8,["showDialogRemoveUser","databaseName","databaseType","databaseUsername","imagePath"]),(0,t.Wm)(i,{round:"",color:"primary",outline:"",icon:"sym_s_edit",size:"sm",class:"q-mr-md",onClick:l[2]||(l[2]=e=>(r.value++,a.value=!0))},{default:(0,t.w5)((()=>[(0,t.Wm)(d,{class:"bg-primary",style:{"font-size":"14px"},offset:[10,10]},{default:(0,t.w5)((()=>[(0,t.Uk)((0,o.zw)(e.$t("databasesUsersActions.tooltipEditUser")),1)])),_:1})])),_:1}),(0,t.Wm)(i,{round:"",color:"negative",icon:"sym_s_delete",size:"sm",onClick:l[3]||(l[3]=e=>s.value=!0)},{default:(0,t.w5)((()=>[(0,t.Wm)(d,{class:"bg-negative",style:{"font-size":"14px"},offset:[10,10]},{default:(0,t.w5)((()=>[(0,t.Uk)((0,o.zw)(e.$t("databasesUsersActions.tooltipRemoveUser")),1)])),_:1})])),_:1})])}}});var ve=s(46858);const we=pe,ye=we;Q()(pe,"components",{QBtn:P.Z,QTooltip:ve.Z});const De={class:"text-left"},Ue={class:"text-right"},he=(0,t.aZ)({__name:"DatabasesUsers",props:{databaseUsers:{},databaseName:{},databaseType:{}},setup(e){return(e,a)=>{const s=(0,t.up)("q-markup-table");return(0,t.wg)(),(0,t.iD)("div",null,[(0,t.Wm)(s,{separator:"none",flat:"",bordered:""},{default:(0,t.w5)((()=>[(0,t._)("tbody",null,[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(e.databaseUsers,((a,s)=>((0,t.wg)(),(0,t.iD)("tr",{key:s},[(0,t._)("td",De,(0,o.zw)(a.username),1),(0,t._)("td",Ue,[(0,t.Wm)(ye,{databaseUser:a,databaseName:e.databaseName},null,8,["databaseUser","databaseName"])])])))),128))])])),_:1})])}}});var _e=s(66933);const Te=he,fe=Te;Q()(he,"components",{QMarkupTable:_e.Z});const qe={class:"row justify-center q-mt-md"},Ce=(0,t.aZ)({__name:"DatabasesTable",props:{tableTitle:{},data:{}},setup(e){const a=e,s=(0,r.QT)().t,d=(0,l.iH)(!1),i=(0,l.iH)(0),u=(0,l.iH)(!1),b=(0,l.iH)(""),m=(0,l.iH)({sortBy:"desc",descending:!1,page:1,rowsPerPage:10}),c=[{name:"name",required:!0,label:s("databasesTable.databaseName"),align:"left",field:"name",classes:"component-table-td-main ellipsis",headerClasses:"bg-primary text-white",sortable:!0}],g=(0,t.Fl)((()=>Math.ceil(a.data.length/m.value.rowsPerPage)));return(e,a)=>{const s=(0,t.up)("q-icon"),l=(0,t.up)("q-input"),r=(0,t.up)("q-space"),p=(0,t.up)("q-th"),v=(0,t.up)("q-tr"),w=(0,t.up)("q-td"),y=(0,t.up)("q-table"),D=(0,t.up)("q-pagination");return(0,t.wg)(),(0,t.iD)("div",null,[((0,t.wg)(),(0,t.j4)(O,{showDialogCreateUser:d.value,"onUpdate:showDialogCreateUser":a[0]||(a[0]=e=>d.value=e),databasesList:e.data,databaseType:e.tableTitle.toLowerCase(),key:i.value},null,8,["showDialogCreateUser","databasesList","databaseType"])),(0,t.Wm)($,{showDialogCreateDatabase:u.value,"onUpdate:showDialogCreateDatabase":a[1]||(a[1]=e=>u.value=e),databaseType:e.tableTitle},null,8,["showDialogCreateDatabase","databaseType"]),(0,t.Wm)(y,{rows:e.data,columns:c,"row-key":"key",color:"primary",flat:"",bordered:"",pagination:m.value,"onUpdate:pagination":a[5]||(a[5]=e=>m.value=e),"no-data-label":e.$t("databasesTable.notFoundDatabases"),filter:b.value,"hide-pagination":""},{top:(0,t.w5)((()=>[(0,t.Wm)(l,{borderless:"",class:"bg-transparent",debounce:"300",color:"primary",modelValue:b.value,"onUpdate:modelValue":a[2]||(a[2]=e=>b.value=e),label:e.$t("databasesTable.search")},{prepend:(0,t.w5)((()=>[(0,t.Wm)(s,{name:"sym_s_search"})])),_:1},8,["modelValue","label"]),(0,t.Wm)(r),(0,t.Wm)(n.Z,{icon:"sym_s_person_add",label:e.$t("databasesTable.btnCreateUser"),onClick:a[3]||(a[3]=e=>d.value=!0),class:"q-mx-md"},null,8,["label"]),(0,t.Wm)(n.Z,{color:"primary",label:e.$t("databasesTable.btnCreateDatabase"),onClick:a[4]||(a[4]=e=>u.value=!0),icon:"sym_s_database"},null,8,["label"])])),header:(0,t.w5)((a=>[(0,t.Wm)(v,{props:a},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(a.cols,(e=>((0,t.wg)(),(0,t.j4)(p,{key:e.name,props:a,style:{"font-weight":"bold","font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,o.zw)(e.label),1)])),_:2},1032,["props"])))),128)),(0,t.Wm)(p,{"data-cy":"database-users-th",style:{"font-weight":"bold","font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,o.zw)(e.$t("databasesTable.databaseUsers")),1)])),_:1}),(0,t.Wm)(p,{"data-cy":"database-size-th",style:{"font-weight":"bold","font-size":"14px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,o.zw)(e.$t("databasesTable.databaseSize")),1)])),_:1}),(0,t.Wm)(p,{"data-cy":"database-custom-th"})])),_:2},1032,["props"])])),body:(0,t.w5)((a=>[(0,t.Wm)(v,{props:a},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(a.cols,(e=>((0,t.wg)(),(0,t.j4)(w,{key:e.name,props:a},{default:(0,t.w5)((()=>[(0,t.Uk)((0,o.zw)(e.value),1)])),_:2},1032,["props"])))),128)),(0,t.Wm)(w,{class:"text-center"},{default:(0,t.w5)((()=>[(0,t.Wm)(fe,{databaseName:a.row.name,databaseUsers:a.row.users,databaseType:a.row.type},null,8,["databaseName","databaseUsers","databaseType"])])),_:2},1024),(0,t.Wm)(w,{class:"text-center",style:{width:"100px"}},{default:(0,t.w5)((()=>[(0,t.Uk)((0,o.zw)((a.row.size/1024).toFixed()),1)])),_:2},1024),(0,t.Wm)(w,{class:"text-right"},{default:(0,t.w5)((()=>[(0,t.Wm)(h,{databaseName:a.row.name,databaseType:e.tableTitle},null,8,["databaseName","databaseType"])])),_:2},1024)])),_:2},1032,["props"])])),_:1},8,["rows","pagination","no-data-label","filter"]),(0,t._)("div",qe,[(0,t.Wm)(D,{modelValue:m.value.page,"onUpdate:modelValue":a[6]||(a[6]=e=>m.value.page=e),color:"primary",max:g.value,size:"md"},null,8,["modelValue","max"])])])}}});var We=s(84277),Pe=s(13119),Ze=s(90136),ke=s(31233),xe=s(21682),Qe=s(67220),Re=s(80996);const $e=Ce,Ee=$e;Q()(Ce,"components",{QTable:We.Z,QInput:Pe.Z,QIcon:le.Z,QSpace:Ze.Z,QTr:ke.Z,QTh:xe.Z,QTd:Qe.Z,QPagination:Re.Z});const Le={class:"databases-th-bg"},Se={colspan:"2",class:"databases-th-font"},He={class:"text-bold"},Ne={class:"text-bold"},Me=(0,t.aZ)({__name:"DatabasesConnectionInfo",setup(e){const a=(0,r.QT)().t,s=(0,l.iH)({ipAddress:`${a("databasesConnectionInfo.localhost")}`,port:"3306",title:`${a("databasesConnectionInfo.dataLocal")}`,connectionType:"local"});return(e,a)=>{const l=(0,t.up)("q-markup-table");return(0,t.wg)(),(0,t.j4)(l,{dense:"",flat:"",bordered:"",separator:"cell",class:"databases-space-35 hidden"},{default:(0,t.w5)((()=>[(0,t._)("thead",Le,[(0,t._)("tr",null,[(0,t._)("th",Se,(0,o.zw)(s.value.title),1)])]),(0,t._)("tbody",null,[(0,t._)("tr",null,[(0,t._)("td",He,(0,o.zw)(e.$t("databasesConnectionInfo.tdIpAddress")),1),(0,t._)("td",null,(0,o.zw)(s.value.ipAddress),1)]),(0,t._)("tr",null,[(0,t._)("td",Ne,(0,o.zw)(e.$t("databasesConnectionInfo.tdPort")),1),(0,t._)("td",null,(0,o.zw)(s.value.port),1)])])])),_:1})}}}),Ve=Me,Ie=Ve;Q()(Me,"components",{QMarkupTable:_e.Z});var Ke=s(35274);const Ae={key:0},ze={key:1},je={class:"flex justify-end q-mt-md"},Fe={key:0},Ye={key:1},Be={class:"flex justify-end q-mt-md"},Oe=(0,t.aZ)({__name:"DatabasesTabs",props:{mysqlDatabases:{},postgresqlDatabases:{},hasInstalledMysqlDatabase:{type:Boolean},hasInstalledPostgresDatabase:{type:Boolean}},setup(e){const a=g(),s=(0,l.iH)(!1),o=(0,l.iH)(!1),r=(0,t.Fl)({get:()=>a.getSelectedTab,set:e=>{a.setSelectedTab(e)}}),n=(0,t.Fl)({get:()=>a.getKeyDatabasesMysqlTable,set:e=>{a.setKeyDatabasesMysqlTable(e)}}),d=(0,t.Fl)({get:()=>a.getKeyDatabasesPostgresTable,set:e=>{a.setKeyDatabasesPostgresTable(e)}});return(0,t.YP)(s,(e=>{!0===e&&setTimeout((()=>{d.value++}),1e3)})),(0,t.YP)(o,(e=>{!0===e&&setTimeout((()=>{n.value++}),5e3)})),(e,a)=>{const l=(0,t.up)("q-tab"),i=(0,t.up)("q-tabs"),u=(0,t.up)("q-separator"),b=(0,t.up)("q-tab-panel"),m=(0,t.up)("q-tab-panels");return(0,t.wg)(),(0,t.iD)(t.HY,null,[(0,t.Wm)(i,{modelValue:r.value,"onUpdate:modelValue":a[0]||(a[0]=e=>r.value=e),"active-color":"primary","indicator-color":"primary",align:"justify",class:"text-grey","no-caps":""},{default:(0,t.w5)((()=>[(0,t.Wm)(l,{name:"mysql",label:"MySQL/MariaDB/Percona",class:"databases-tabs",icon:"sym_s_database"}),(0,t.Wm)(l,{name:"postgres",label:"PostgreSQL",class:"databases-tabs",icon:"sym_s_database"})])),_:1},8,["modelValue"]),(0,t.Wm)(u),(0,t.Wm)(m,{modelValue:r.value,"onUpdate:modelValue":a[3]||(a[3]=e=>r.value=e),animated:"","keep-alive":""},{default:(0,t.w5)((()=>[(0,t.Wm)(b,{name:"mysql"},{default:(0,t.w5)((()=>[!1===e.hasInstalledMysqlDatabase?((0,t.wg)(),(0,t.iD)("div",Ae,[(0,t.Wm)(Ke.Z,{serviceName:"MariaDB","onUpdate:isInstalledService":a[1]||(a[1]=e=>o.value=e)})])):((0,t.wg)(),(0,t.iD)("div",ze,[((0,t.wg)(),(0,t.j4)(Ee,{tableTitle:"MySQL",data:e.mysqlDatabases,key:n.value},null,8,["data"])),(0,t._)("div",je,[(0,t.Wm)(Ie,{style:{width:"25%"}})])]))])),_:1}),(0,t.Wm)(b,{name:"postgres"},{default:(0,t.w5)((()=>[!1===e.hasInstalledPostgresDatabase?((0,t.wg)(),(0,t.iD)("div",Fe,[(0,t.Wm)(Ke.Z,{serviceName:"Postgres","onUpdate:isInstalledService":a[2]||(a[2]=e=>s.value=e)})])):((0,t.wg)(),(0,t.iD)("div",Ye,[((0,t.wg)(),(0,t.j4)(Ee,{tableTitle:"PostgreSQL",data:e.postgresqlDatabases,key:d.value},null,8,["data"])),(0,t._)("div",Be,[(0,t.Wm)(Ie,{style:{width:"25%"}})])]))])),_:1})])),_:1},8,["modelValue"])],64)}}});var Xe=s(47817),Ge=s(70900),Je=s(50926),ea=s(89800),aa=s(84106);const sa=Oe,ta=sa;Q()(Oe,"components",{QTabs:Xe.Z,QTab:Ge.Z,QSeparator:Je.Z,QTabPanels:ea.Z,QTabPanel:aa.Z});const la=(0,t.aZ)({__name:"DatabasesIndex",setup(e){const a=(0,r.QT)().t,s=g(),o=new m,n=(0,l.iH)(!1),d=(0,l.iH)(!1),u=(0,l.iH)(!1),b=(0,l.iH)(!1),c=(0,l.iH)([]),p=(0,l.iH)([]),v=(0,t.Fl)((()=>n.value||d.value)),w=(0,t.Fl)({get:()=>s.getKeyDatabasesMysqlTable,set:e=>{s.setKeyDatabasesMysqlTable(e)}}),y=(0,t.Fl)({get:()=>s.getKeyDatabasesPostgresTable,set:e=>{s.setKeyDatabasesPostgresTable(e)}});function D(){h(),U()}function U(){d.value=!0,o.getDatabases("postgres").then((e=>{c.value=[],b.value=!0,null!==e.data.body&&(c.value=e.data.body)})).catch((e=>{e.response.data.body.startsWith("ServiceUnavailable")||(b.value=!1,(0,i.s9)(e.response.data,a("databasesIndex.errorLoadingPostgresqlDatabases")))})).finally((()=>{d.value=!1}))}function h(){n.value=!0,o.getDatabases("mysql").then((e=>{p.value=[],u.value=!0,null!==e.data.body&&(p.value=e.data.body)})).catch((e=>{e.response.data.body.startsWith("ServiceUnavailable")||(u.value=!1,(0,i.s9)(e.response.data,a("databasesIndex.errorLoadingMysqlDatabases")))})).finally((()=>{n.value=!1}))}return(0,t.wF)((()=>{D()})),(0,t.YP)(w,(()=>{h()})),(0,t.YP)(y,(()=>{U()})),(e,a)=>{const s=(0,t.up)("q-skeleton"),l=(0,t.up)("q-card-section"),o=(0,t.up)("q-card"),r=(0,t.up)("q-page");return(0,t.wg)(),(0,t.j4)(r,{padding:""},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{flat:""},{default:(0,t.w5)((()=>[(0,t.Wm)(l,null,{default:(0,t.w5)((()=>[!0===v.value?((0,t.wg)(),(0,t.j4)(s,{key:0,height:"100%"})):((0,t.wg)(),(0,t.j4)(ta,{key:1,hasInstalledMysqlDatabase:u.value,hasInstalledPostgresDatabase:b.value,mysqlDatabases:p.value,postgresqlDatabases:c.value},null,8,["hasInstalledMysqlDatabase","hasInstalledPostgresDatabase","mysqlDatabases","postgresqlDatabases"]))])),_:1})])),_:1})])),_:1})}}});var oa=s(69885),ra=s(57133);const na=la,da=na;Q()(la,"components",{QPage:oa.Z,QCard:W.Z,QCardSection:Z.Z,QSkeleton:ra.ZP})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/755.3f18be4a.js b/src/presentation/ui/dist/js/755.3f18be4a.js deleted file mode 100644 index bbcc0232a..000000000 --- a/src/presentation/ui/dist/js/755.3f18be4a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[755],{85090:(e,t,a)=>{a.r(t),a.d(t,{default:()=>ct});var l=a(59835),s=a(60499),n=a(62120),i=a(60016),o=a(86970),u=a(99573),r=a(3746);const p=(0,r.Q_)("virtualHost",{state:()=>({showCreateVirtualHostDialog:!1,showDeleteVirtualHostDialog:!1,selectedVirtualHost:{},virtualHostsList:[]}),getters:{getShowCreateVirtualHostDialog(e){return e.showCreateVirtualHostDialog},getShowDeleteVirtualHostDialog(e){return e.showDeleteVirtualHostDialog},getSelectedVirtualHost(e){return e.selectedVirtualHost},getVirtualHostsList(e){return e.virtualHostsList}},actions:{setShowCreateVirtualHostDialog(e){this.showCreateVirtualHostDialog=e},setShowDeleteVirtualHostDialog(e){this.showDeleteVirtualHostDialog=e},setSelectedVirtualHost(e){this.selectedVirtualHost=e},setVirtualHostsList(e){this.virtualHostsList=e}}}),d={class:"flex justify-center items-center"},m=(0,l.aZ)({__name:"VirtualHostsTableActions",props:{virtualHost:{}},setup(e){const t=e,a=p();function s(){a.setSelectedVirtualHost(t.virtualHost),a.setShowDeleteVirtualHostDialog(!0)}return(e,t)=>{const a=(0,l.up)("q-tooltip"),n=(0,l.up)("q-btn");return(0,l.wg)(),(0,l.iD)("div",d,["primary"!==e.virtualHost.type?((0,l.wg)(),(0,l.j4)(n,{key:0,color:"negative",icon:"sym_s_delete",size:"md",dense:"",outline:"",class:"q-mx-xs",onClick:t[0]||(t[0]=e=>s())},{default:(0,l.w5)((()=>[(0,l.Wm)(a,{class:"bg-negative text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,o.zw)(e.$t("virtualHostsTableActions.deleteBtn")),1)])),_:1})])),_:1})):(0,l.kq)("",!0)])}}});var c=a(68879),g=a(46858),v=a(69984),b=a.n(v);const f=m,h=f;b()(m,"components",{QBtn:c.Z,QTooltip:g.Z});const w={class:"flex justify-between q-mx-xs"},H={class:"text-h6 vhost-card-title"},D={class:"flex justify-start items-center"},y=(0,l.aZ)({__name:"VirtualHostsTableMainTd",props:{mapping:{}},setup(e){return(e,t)=>{const a=(0,l.up)("q-card-section"),s=(0,l.up)("q-card");return(0,l.wg)(),(0,l.j4)(s,{flat:"",class:"q-pa-sm vhost-card"},{default:(0,l.w5)((()=>[(0,l._)("div",w,[(0,l._)("div",H,(0,o.zw)(e.mapping.hostname),1),(0,l.Wm)(h,{virtualHost:e.mapping,class:"absolute-top-right q-ma-sm"},null,8,["virtualHost"])]),(0,l.Wm)(a,{class:"card-section-vhost"},{default:(0,l.w5)((()=>[(0,l._)("div",D,[e.mapping.parentHostname?((0,l.wg)(),(0,l.j4)(u.Z,{key:0,icon:"sym_s_home",label:e.mapping.parentHostname,class:"q-mr-md"},null,8,["label"])):(0,l.kq)("",!0),(0,l.Wm)(u.Z,{icon:"sym_s_folder_open",label:e.mapping.rootDirectory,class:"q-mr-md"},null,8,["label"]),(0,l.Wm)(u.Z,{icon:"sym_s_description",label:e.mapping.type},null,8,["label"])])])),_:1})])),_:1})}}});var _=a(44458),q=a(63190);const x=y,V=x;b()(y,"components",{QCard:_.Z,QCardSection:q.Z});var Z=a(67377),C=a(39697);const k={key:0},W={key:1},T={class:"flex justify-between items-center"},$={class:"row justify-start items-center"},S={class:"q-mr-lg",style:{"font-size":"0.9708rem"}},M={class:"flex justify-end q-px-sm q-py-sm"},L=(0,l.aZ)({__name:"VirtualHostsTableMappingsTd",props:{mapping:{}},setup(e){const t=e,a=(0,C.i)(),s=p(),n=(0,l.Fl)({get:()=>a.getShowDeleteMappingDialog,set:e=>{a.setShowDeleteMappingDialog(e)}}),i=(0,l.Fl)({get:()=>a.getSelectedDeleteMapping,set:e=>{a.setSelectedDeleteMapping(e)}});function u(e,a){i.value={mappingId:e,hostname:t.mapping.hostname,path:a},n.value=!0}function r(){s.setSelectedVirtualHost(t.mapping),a.setShowCreateMappingDialog(!0)}function d(e,t){let a=e.substring(0,50),l=a;return e.length>50&&(l+="..."),t&&(l+=` (${t.toString()})`),l}return(e,t)=>{const a=(0,l.up)("q-tooltip"),s=(0,l.up)("q-btn"),n=(0,l.up)("q-card");return"alias"===e.mapping.type?((0,l.wg)(),(0,l.iD)("div",k,(0,o.zw)(e.$t("virtualHostsTableMappingsTd.aliasWarning")),1)):((0,l.wg)(),(0,l.iD)("div",W,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.mapping.mappings,((t,i)=>((0,l.wg)(),(0,l.iD)("div",{key:i},[(0,l.Wm)(n,{flat:"",class:"q-ma-sm q-py-sm q-px-sm mappings-td-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",T,[(0,l._)("div",$,[(0,l._)("div",S,(0,o.zw)(t.path),1),"service"===t.targetType?((0,l.wg)(),(0,l.j4)(Z.Z,{key:0,labelLeft:t.targetType,labelRight:t.targetValue,class:"q-mr-md",color:"#39594E",fontSize:"0.7281rem"},null,8,["labelLeft","labelRight"])):(0,l.kq)("",!0),"url"===t.targetType?((0,l.wg)(),(0,l.j4)(Z.Z,{key:1,labelLeft:t.targetType,labelRight:`${t.targetValue} (${t.targetHttpResponseCode.toString()})`,class:"q-mr-md",color:"#4E3473",fontSize:"0.7281rem"},null,8,["labelLeft","labelRight"])):(0,l.kq)("",!0),"response-code"===t.targetType?((0,l.wg)(),(0,l.j4)(Z.Z,{key:2,labelLeft:t.targetType,labelRight:t.targetHttpResponseCode.toString(),class:"q-mr-md",color:"#5C5C3A",fontSize:"0.7281rem"},null,8,["labelLeft","labelRight"])):(0,l.kq)("",!0),"inline-html"===t.targetType?((0,l.wg)(),(0,l.j4)(Z.Z,{key:3,labelLeft:t.targetType,labelRight:d(t.targetValue,t.targetHttpResponseCode),class:"q-mr-md",color:"#2A4D8F",fontSize:"0.7281rem"},null,8,["labelLeft","labelRight"])):(0,l.kq)("",!0),"static-files"===t.targetType?((0,l.wg)(),(0,l.j4)(Z.Z,{key:4,labelLeft:t.targetType,labelRight:e.mapping.rootDirectory.toString(),class:"q-mr-md",color:"#D9732A",fontSize:"0.7281rem"},null,8,["labelLeft","labelRight"])):(0,l.kq)("",!0),(0,l.Wm)(Z.Z,{labelLeft:e.$t("virtualHostsTableMappingsTd.matchPattern"),labelRight:t.matchPattern,color:"#c97350",fontSize:"0.7281rem"},null,8,["labelLeft","labelRight"])]),(0,l.Wm)(s,{color:"negative",icon:"sym_s_delete",size:"md",dense:"",onClick:e=>u(t.id,t.path)},{default:(0,l.w5)((()=>[(0,l.Wm)(a,{class:"bg-negative text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,o.zw)(e.$t("virtualHostsTableMappingsTd.deleteBtn")),1)])),_:1})])),_:2},1032,["onClick"])])])),_:2},1024)])))),128)),(0,l._)("div",M,[(0,l.Wm)(s,{color:"primary",icon:"sym_s_add",class:"full-width",outline:"",dense:"",onClick:t[0]||(t[0]=e=>r())},{default:(0,l.w5)((()=>[(0,l.Wm)(a,{class:"bg-primary text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,o.zw)(e.$t("virtualHostsTableMappingsTd.createMappingBtn")),1)])),_:1})])),_:1})])]))}}}),U=L,F=U;b()(L,"components",{QCard:_.Z,QBtn:c.Z,QTooltip:g.Z});var Q=a(84278);const R={class:"flex justify-between itens-center full-width q-mb-sm"},P={class:"row justify-center q-mt-md"},j=(0,l.aZ)({__name:"VirtualHostsTable",props:{mappingsList:{}},setup(e){const t=e,a=(0,C.i)(),n=p(),i=(0,s.iH)(""),o=(0,s.iH)([{name:"hostname",align:"left",field:"hostname",sortable:!0},{name:"parentHostname",align:"left",field:"parentHostname",sortable:!0},{name:"rootDirectory",align:"left",field:"rootDirectory",sortable:!0},{name:"type",align:"left",field:"type",sortable:!0}]),u=(0,s.iH)({sortBy:"desc",descending:!1,page:1,rowsPerPage:10}),r=(0,l.Fl)({get:()=>a.getShowCreateMappingDialog,set:e=>{a.showCreateMappingDialog=e}}),d=(0,l.Fl)({get:()=>n.getShowCreateVirtualHostDialog,set:e=>{n.setShowCreateVirtualHostDialog(e)}}),m=(0,l.Fl)((()=>Math.ceil(t.mappingsList.length/u.value.rowsPerPage)));function c(){r.value=!0}function g(){d.value=!0}return(e,t)=>{const a=(0,l.up)("q-icon"),s=(0,l.up)("q-input"),n=(0,l.up)("q-td"),r=(0,l.up)("q-tr"),p=(0,l.up)("q-table"),d=(0,l.up)("q-pagination");return(0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("div",R,[(0,l.Wm)(s,{filled:"",debounce:"300",color:"primary",modelValue:i.value,"onUpdate:modelValue":t[0]||(t[0]=e=>i.value=e),label:e.$t("virtualHostsTable.searchInput"),style:{width:"300px"}},{prepend:(0,l.w5)((()=>[(0,l.Wm)(a,{name:"sym_s_search"})])),_:1},8,["modelValue","label"]),(0,l._)("div",null,[(0,l.Wm)(Q.Z,{label:e.$t("virtualHostsTable.createVirtualHostsBtn"),color:"primary",icon:"sym_s_add",class:"q-mr-md",onClick:t[1]||(t[1]=e=>g())},null,8,["label"]),(0,l.Wm)(Q.Z,{label:e.$t("virtualHostsTable.createMappingsBtn"),color:"primary",icon:"sym_s_add",onClick:t[2]||(t[2]=e=>c())},null,8,["label"])])]),(0,l.Wm)(p,{rows:e.mappingsList,columns:o.value,filter:i.value,pagination:u.value,"onUpdate:pagination":t[3]||(t[3]=e=>u.value=e),"no-data-label":e.$t("virtualHostsTable.noDataLabel"),"row-key":"hostname",color:"primary",flat:"",bordered:"","hide-header":"","hide-pagination":""},{body:(0,l.w5)((e=>[(0,l.Wm)(r,{props:e,"no-hover":""},{default:(0,l.w5)((()=>[(0,l.Wm)(n,{class:"virtual-hosts-td-main"},{default:(0,l.w5)((()=>[(0,l.Wm)(V,{mapping:e.row},null,8,["mapping"])])),_:2},1024),(0,l.Wm)(n,null,{default:(0,l.w5)((()=>[(0,l.Wm)(F,{mapping:e.row},null,8,["mapping"])])),_:2},1024)])),_:2},1032,["props"])])),_:1},8,["rows","columns","filter","pagination","no-data-label"]),(0,l._)("div",P,[(0,l.Wm)(d,{modelValue:u.value.page,"onUpdate:modelValue":t[4]||(t[4]=e=>u.value.page=e),color:"primary",max:m.value,size:"md"},null,8,["modelValue","max"])])],64)}}});var I=a(13119),z=a(22857),Y=a(84277),B=a(31233),A=a(67220),K=a(80996);const O=j,E=O;b()(j,"components",{QInput:I.Z,QIcon:z.Z,QTable:Y.Z,QTr:B.Z,QTd:A.Z,QPagination:K.Z});var N=a(94629);const X=(0,l.aZ)({__name:"MappingsResponseCodeSelect",props:{disable:{type:Boolean},responsesTypes:{},defaultValue:{default:200}},emits:["update:responseCode"],setup(e,{emit:t}){const a=e,n={"2xx":[{label:"200 - OK",value:200},{label:"201 - Created",value:201},{label:"204 - No Content",value:204}],"3xx":[{label:"301 - Moved Permanently",value:301},{label:"302 - Found",value:302},{label:"304 - Not Modified",value:304},{label:"307 - Temporary Redirect",value:307},{label:"308 - Permanent Redirect",value:308}],"4xx":[{label:"400 - Bad Request",value:400},{label:"401 - Unauthorized",value:401},{label:"403 - Forbidden",value:403},{label:"404 - Not Found",value:404}],"5xx":[{label:"501 - Not Implemented",value:501},{label:"503 - Service Unavailable",value:503}]};function i(){let e=a.responsesTypes;e||(e=["2xx","3xx","4xx","5xx"]);const t=[];for(const a of e)t.push(...n[a]);return t}const o=(0,s.iH)(a.defaultValue);return(0,l.YP)((()=>a.defaultValue),(e=>{o.value=e}),{immediate:!0}),(0,l.YP)(o,(e=>{t("update:responseCode",e)})),(e,t)=>((0,l.wg)(),(0,l.j4)(N.Z,{selected:o.value,"onUpdate:selected":[t[0]||(t[0]=e=>o.value=e),t[1]||(t[1]=e=>o.value=e)],label:e.$t("mappingsResponseCodeInput.responseCodeLabel"),isDisable:e.disable,options:i()},null,8,["selected","label","isDisable","options"]))}}),G=X,J=G;var ee=a(25121),te=a(15521);const ae=(0,l.aZ)({__name:"MappingsUrlInput",props:{label:{default:""},prefix:{default:""},domain:{default:""},disable:{type:Boolean},isRequired:{type:Boolean,default:!1}},emits:["update:url","update:isValidUrl"],setup(e,{emit:t}){const a=e,n=(0,ee.QT)().t,i=()=>p.value||n("mappingsUrlInput.targetUrlIsInvalid"),o=()=>""!==r.value||n("mappingsUrlInput.targetUrlIsRequired"),u=(0,l.Fl)((()=>a.isRequired?[i,o]:[i])),r=(0,s.iH)(""),p=(0,l.Fl)((()=>{if(0==r.value.length)return!0;const e=/^[^\n]{3,1000}$/u;return e.test(a.prefix+r.value)})),d=(0,l.Fl)((()=>{const e=/((\*\.)?([a-zA-Z0-9_]+[\w-]*\.)*)?([a-zA-Z0-9_][\w-]*[a-zA-Z0-9])\.([a-zA-Z]{2,})/;return e.test(r.value)}));return(0,l.YP)(r,(e=>{a.domain&&!d.value&&(e.startsWith("/")||(e="/"+e),e=a.domain+e),t("update:url",e)}),{immediate:!0}),(0,l.YP)(p,(e=>{t("update:isValidUrl",e)}),{immediate:!0}),(e,t)=>((0,l.wg)(),(0,l.j4)(te.Z,{value:r.value,"onUpdate:value":t[0]||(t[0]=e=>r.value=e),label:e.label,prefix:e.prefix,disable:e.disable,"max-length":"1000",rules:u.value},null,8,["value","label","prefix","disable","rules"]))}}),le=ae,se=le,ne=(0,l.aZ)({__name:"MappingsInlineHtmlInput",emits:["update:inlineHtml","update:httpResponseCode","update:isValidResponseCode"],setup(e,{emit:t}){const a=(0,s.iH)(""),n=(0,s.iH)(""),i=(0,s.iH)(!0);return(0,l.YP)(a,(e=>{t("update:inlineHtml",e)}),{immediate:!0}),(0,l.YP)(n,(e=>{t("update:httpResponseCode",e)}),{immediate:!0}),(0,l.YP)(i,(e=>{t("update:isValidResponseCode",e)}),{immediate:!0}),(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l.Wm)(te.Z,{value:a.value,"onUpdate:value":t[0]||(t[0]=e=>a.value=e),label:e.$t("mappingsInlineHtmlInput.targetInlineHtmlLabel"),type:"textarea","max-length":"3500",rules:[()=>""!==a.value||e.$t("mappingsInlineHtmlInput.targetInlineHtmlIsRequired")]},null,8,["value","label","rules"]),(0,l.Wm)(J,{defaultValue:200,responsesTypes:["2xx","4xx","5xx"],"onUpdate:responseCode":t[1]||(t[1]=e=>n.value=e)})],64))}}),ie=ne,oe=ie,ue=(0,l.aZ)({__name:"MappingsAdvancedOptions",emits:["update:selectedMatchPattern"],setup(e,{emit:t}){const a=(0,ee.QT)().t,n=(0,s.iH)("begins-with"),i=(0,s.iH)([{label:a("mappingsAdvancedOptions.matchPatternOptions.beginWith"),value:"begins-with"},{label:a("mappingsAdvancedOptions.matchPatternOptions.contains"),value:"contains"},{label:a("mappingsAdvancedOptions.matchPatternOptions.equals"),value:"equals"},{label:a("mappingsAdvancedOptions.matchPatternOptions.endsWith"),value:"ends-with"}]);return(0,l.YP)(n,(e=>{t("update:selectedMatchPattern",e)}),{immediate:!0}),(e,t)=>{const a=(0,l.up)("q-card-section"),s=(0,l.up)("q-card"),o=(0,l.up)("q-expansion-item"),u=(0,l.up)("q-list");return(0,l.wg)(),(0,l.j4)(u,{bordered:"",class:"rounded-borders"},{default:(0,l.w5)((()=>[(0,l.Wm)(o,{"expand-separator":"",icon:"sym_s_settings",label:e.$t("mappingsAdvancedOptions.advancedOptionsLabel")},{default:(0,l.w5)((()=>[(0,l.Wm)(s,null,{default:(0,l.w5)((()=>[(0,l.Wm)(a,null,{default:(0,l.w5)((()=>[(0,l.Wm)(N.Z,{selected:n.value,"onUpdate:selected":t[0]||(t[0]=e=>n.value=e),label:e.$t("mappingsAdvancedOptions.matchPatternLabel"),options:i.value},null,8,["selected","label","options"])])),_:1})])),_:1})])),_:1},8,["label"])])),_:1})}}});var re=a(13246),pe=a(50651);const de=ue,me=de;b()(ue,"components",{QList:re.Z,QExpansionItem:pe.Z,QCard:_.Z,QCardSection:q.Z});var ce=a(9281),ge=a(88900),ve=a(45273),be=a(73451);const fe={class:"flex justify-between items-center"},he={class:"title-dialog"},we={key:1},He={class:"q-gutter-sm"},De=(0,l.aZ)({__name:"MappingsCreateDialog",setup(e){const t=(0,ee.QT)().t,a=(0,C.i)(),u=p(),r=(0,s.iH)(!1),d=(0,s.iH)(!1),m=(0,l.Fl)((()=>r.value||d.value)),c=(0,s.iH)([]),g=(0,s.iH)(""),v=(0,s.iH)(""),b=(0,s.iH)("begins-with"),f=(0,s.iH)([]),h=(0,s.iH)("/"),w=(0,s.iH)("service"),H=(0,s.iH)(""),D=(0,s.iH)(""),y=(0,s.iH)(100),_=(0,s.iH)(""),q=(0,s.iH)(!1),x=(0,s.iH)(!1),V=(0,l.Fl)((()=>{switch(w.value){case"url":return""!==g.value&&""!==b.value&&q.value&&x.value;case"service":return""!==g.value&&""!==b.value&&""!==H.value&&q.value;case"response-code":return""!==g.value&&""!==b.value&&q.value;case"inline-html":return""!==g.value&&""!==b.value&&""!==_.value;case"static-files":return""!==g.value&&""!==b.value}return!1})),Z=(0,l.Fl)({get:()=>a.getShowCreateMappingDialog,set:e=>a.setShowCreateMappingDialog(e)}),k=(0,l.Fl)({get:()=>a.getKeyMappingsTable,set:e=>a.setKeyMappingsTable(e)});function W(){r.value=!0;const e=new i.Z;e.getVirtualHosts().then((e=>{const t=e.data.body;if(0===t.length)return;const a=t.filter((e=>"alias"!==e.type));c.value=a.map((e=>e.hostname)),0!==c.value.length&&(g.value=a[0].hostname,u.getSelectedVirtualHost&&(g.value=u.getSelectedVirtualHost.hostname))})).catch((e=>{console.error(e)})).finally((()=>{r.value=!1}))}function T(){d.value=!0;const e=new ce.Z;e.getServicesStatus().then((e=>{if(f.value=[],0===e.data.body.length)return;const t=e.data.body;f.value=t.filter((e=>e.portBindings.length>0)).map((e=>({label:(0,be.R)(e.name),value:e.name})))})).catch((e=>{console.error(e)})).finally((()=>{d.value=!1}))}function $(){u.setSelectedVirtualHost({}),Z.value=!1}function S(){(0,ve.Q)();const e=new n.Z;let a={hostname:g.value,matchPattern:b.value,path:h.value,targetType:w.value};switch(w.value){case"url":a.targetValue=D.value;break;case"service":a.targetValue=H.value;break;case"response-code":a.targetHttpResponseCode=y.value;break;case"inline-html":a.targetValue=_.value,y.value&&(a.targetHttpResponseCode=y.value)}e.createMappings(a).then((()=>{(0,ge.LX)(t("mappingsCreateDialog.createMappingSuccessfully")),k.value++,$()})).catch((e=>{console.error(e),(0,ge.s9)(e.response.data,t("mappingsCreateDialog.createMappingError"))})).finally((()=>{(0,ve.Z)()}))}return(0,l.bv)((()=>{W(),T()})),(0,l.YP)(g,(e=>{if(e&&e.length>0){const t=u.getVirtualHostsList.find((t=>t.hostname==e));v.value=t.rootDirectory}})),(e,t)=>{const a=(0,l.up)("q-btn"),s=(0,l.up)("q-skeleton"),n=(0,l.up)("q-card-section"),i=(0,l.up)("q-radio"),u=(0,l.up)("q-card-actions"),r=(0,l.up)("q-card"),p=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(p,{modelValue:Z.value,"onUpdate:modelValue":t[18]||(t[18]=e=>Z.value=e),persistent:""},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{style:{width:"700px","max-width":"80vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",fe,[(0,l._)("div",he,(0,o.zw)(e.$t("mappingsCreateDialog.title")),1),(0,l.Wm)(a,{flat:"",round:"",dense:"",icon:"sym_s_close",onClick:t[0]||(t[0]=e=>$())})]),!0===m.value?((0,l.wg)(),(0,l.j4)(n,{key:0,class:"q-px-none"},{default:(0,l.w5)((()=>[((0,l.wg)(),(0,l.iD)(l.HY,null,(0,l.Ko)(6,(e=>(0,l.Wm)(s,{key:e,class:"q-my-lg",height:"60px",width:"100%"}))),64))])),_:1})):((0,l.wg)(),(0,l.iD)("div",we,[(0,l.Wm)(n,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l._)("div",He,[(0,l.Wm)(i,{modelValue:w.value,"onUpdate:modelValue":t[1]||(t[1]=e=>w.value=e),val:"service",label:e.$t("mappingsCreateDialog.targetType.service")},null,8,["modelValue","label"]),(0,l.Wm)(i,{modelValue:w.value,"onUpdate:modelValue":t[2]||(t[2]=e=>w.value=e),val:"url",label:e.$t("mappingsCreateDialog.targetType.url")},null,8,["modelValue","label"]),(0,l.Wm)(i,{modelValue:w.value,"onUpdate:modelValue":t[3]||(t[3]=e=>w.value=e),val:"response-code",label:e.$t("mappingsCreateDialog.targetType.responseCode")},null,8,["modelValue","label"]),(0,l.Wm)(i,{modelValue:w.value,"onUpdate:modelValue":t[4]||(t[4]=e=>w.value=e),val:"inline-html",label:e.$t("mappingsCreateDialog.targetType.inlineHtml")},null,8,["modelValue","label"]),(0,l.Wm)(i,{modelValue:w.value,"onUpdate:modelValue":t[5]||(t[5]=e=>w.value=e),val:"static-files",label:e.$t("mappingsCreateDialog.targetType.staticFiles")},null,8,["modelValue","label"])])])),_:1}),(0,l.Wm)(n,{class:"q-pa-none q-pb-sm"},{default:(0,l.w5)((()=>[(0,l.Wm)(N.Z,{selected:g.value,"onUpdate:selected":t[6]||(t[6]=e=>g.value=e),label:e.$t("mappingsCreateDialog.hostnameLabel"),options:c.value},null,8,["selected","label","options"])])),_:1}),(0,l.Wm)(n,{class:"q-pa-none q-pb-sm"},{default:(0,l.w5)((()=>[(0,l.Wm)(se,{label:e.$t("mappingsCreateDialog.pathLabel"),prefix:g.value+"/",disable:!g.value,isRequired:!1,"onUpdate:url":t[7]||(t[7]=e=>h.value=e),"onUpdate:isValidUrl":t[8]||(t[8]=e=>q.value=e)},null,8,["label","prefix","disable"])])),_:1}),(0,l.Wm)(n,{class:"q-pa-none"},{default:(0,l.w5)((()=>["service"===w.value?((0,l.wg)(),(0,l.j4)(N.Z,{key:0,selected:H.value,"onUpdate:selected":t[9]||(t[9]=e=>H.value=e),label:e.$t("mappingsCreateDialog.servicesNameLabel"),options:f.value},null,8,["selected","label","options"])):(0,l.kq)("",!0),"url"===w.value?((0,l.wg)(),(0,l.j4)(se,{key:1,label:e.$t("mappingsCreateDialog.targetUrlLabel"),domain:g.value,isRequired:!0,"onUpdate:url":t[10]||(t[10]=e=>D.value=e),"onUpdate:isValidUrl":t[11]||(t[11]=e=>x.value=e)},null,8,["label","domain"])):(0,l.kq)("",!0),"response-code"===w.value?((0,l.wg)(),(0,l.j4)(J,{key:2,defaultValue:200,"onUpdate:responseCode":t[12]||(t[12]=e=>y.value=e)})):(0,l.kq)("",!0),"inline-html"===w.value?((0,l.wg)(),(0,l.j4)(oe,{key:3,"onUpdate:inlineHtml":t[13]||(t[13]=e=>_.value=e),"onUpdate:httpResponseCode":t[14]||(t[14]=e=>y.value=e)})):(0,l.kq)("",!0)])),_:1}),(0,l.Wm)(n,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(me,{"onUpdate:selectedMatchPattern":t[15]||(t[15]=e=>b.value=e)})])),_:1}),(0,l.Wm)(u,{align:"between",class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(Q.Z,{label:e.$t("mappingsCreateDialog.cancelBtn"),class:"q-mr-sm q-px-xl",color:"grey-8",onClick:t[16]||(t[16]=e=>$())},null,8,["label"]),(0,l.Wm)(Q.Z,{disable:!1===V.value,color:"primary",icon:"sym_s_add",label:e.$t("mappingsCreateDialog.createBtn"),onClick:t[17]||(t[17]=e=>S())},null,8,["disable","label"])])),_:1})]))])),_:1})])),_:1},8,["modelValue"])}}});var ye=a(32074),_e=a(57133),qe=a(11480),xe=a(11821);const Ve=De,Ze=Ve;b()(De,"components",{QDialog:ye.Z,QCard:_.Z,QBtn:c.Z,QCardSection:q.Z,QSkeleton:_e.ZP,QRadio:qe.Z,QCardActions:xe.Z});var Ce=a(89906),ke=a(19302);const We=(0,l.aZ)({__name:"MappingsDeleteDialog",setup(e){const t=(0,ee.QT)().t,a=(0,C.i)(),s=(0,l.Fl)({get:()=>a.getShowDeleteMappingDialog,set:e=>{a.setShowDeleteMappingDialog(e)}}),i=(0,l.Fl)({get:()=>a.getKeyMappingsTable,set:e=>{a.setKeyMappingsTable(e)}}),o=(0,l.Fl)((()=>a.getSelectedDeleteMapping)),u=(0,l.Fl)((()=>{const e=(0,ke.Z)();return e.dark.isActive?"/icons/bomb_dark.svg":"/icons/bomb_light.svg"}));function r(){s.value=!1}function p(){const e=new n.Z;(0,ve.Q)(),e.deleteMappings(o.value).then((()=>{i.value++,(0,ge.LX)(`${t("mappingsDeleteDialog.deleteMappingSuccess")}`),o.value.hostname="",o.value.mappingId=0,o.value.path="",setTimeout((()=>{r()}),100)})).catch((e=>{console.error(e),(0,ge.s9)(e.response.data,`${t("mappingsDeleteDialog.deleteMappingError")}`)})).finally((()=>{(0,ve.Z)()}))}return(e,t)=>((0,l.wg)(),(0,l.j4)(Ce.Z,{showDeleteDialog:s.value,"onUpdate:showDeleteDialog":t[2]||(t[2]=e=>s.value=e),titleDialog:e.$t("mappingsDeleteDialog.title"),imagePath:u.value,messageToDelete:e.$t("mappingsDeleteDialog.confirmRemoveMapping",{path:o.value.path}),warningToDelete:e.$t("mappingsDeleteDialog.warningRemoveMapping")},{"card-actions":(0,l.w5)((()=>[(0,l.Wm)(Q.Z,{label:e.$t("mappingsDeleteDialog.cancelBtn"),color:"grey-8",onClick:t[0]||(t[0]=e=>r())},null,8,["label"]),(0,l.Wm)(Q.Z,{icon:"sym_s_delete",label:e.$t("mappingsDeleteDialog.deleteBtn"),color:"negative",onClick:t[1]||(t[1]=e=>p())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","imagePath","messageToDelete","warningToDelete"]))}}),Te=We,$e=Te,Se=(0,l.aZ)({__name:"FqdnInput",props:{fqdn:{},label:{default:"FQDN"}},emits:["update:fqdn","update:isValidFqdn"],setup(e,{emit:t}){const a=e,n=/^[\p{L}\d\/=[\]().?]{3,1000}$/u,i=(0,s.iH)(a.fqdn);return(0,l.YP)(i,(e=>{const a=e.length>3&&e.length<=1e3&&n.test(e);t("update:fqdn",e),t("update:isValidFqdn",a)})),(0,l.YP)((()=>a.fqdn),(e=>{i.value=e}),{immediate:!0}),(e,t)=>((0,l.wg)(),(0,l.j4)(te.Z,{value:i.value,"onUpdate:value":t[0]||(t[0]=e=>i.value=e),maxLength:"1000",label:e.label,rules:[()=>!!i.value||e.$t("form.fqdnInput.fqdnRequired",{label:e.label}),()=>i.value.length<=1e3||e.$t("form.fqdnInput.fqdnMaxLengthError",{label:e.label}),()=>n.test(i.value)||e.$t("form.fqdnInput.fqdnRegexError",{label:e.label})],class:"q-mb-sm"},null,8,["value","label","rules"]))}}),Me=Se,Le=Me,Ue={class:"q-mt-sm"},Fe=(0,l.aZ)({__name:"VirtualHostsSubdomainForm",emits:["update:hostname","update:isValidFqdn"],setup(e,{emit:t}){const a=p(),n=(0,s.iH)(0),i=(0,s.iH)(""),o=(0,s.iH)(""),u=(0,s.iH)(!1),r=(0,l.Fl)((()=>`${i.value}.${o.value}`)),d=(0,l.Fl)((()=>m.value.filter((e=>"top-level"===e.type||"primary"===e.type)).map((e=>e.hostname)))),m=(0,l.Fl)((()=>a.getVirtualHostsList));return(0,l.bv)((()=>{o.value=d.value[0]})),(0,l.YP)(r,(e=>{n.value++,t("update:hostname",e)})),(0,l.YP)(u,(e=>{t("update:isValidFqdn",e)})),(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("div",null,[(0,l.Wm)(N.Z,{label:e.$t("virtualHostsSubdomainForm.topLevelLabel"),selected:o.value,"onUpdate:selected":t[0]||(t[0]=e=>o.value=e),options:d.value},null,8,["label","selected","options"])]),(0,l._)("div",Ue,[(0,l.Wm)(te.Z,{suffix:`.${o.value}`,value:i.value,"onUpdate:value":t[1]||(t[1]=e=>i.value=e),label:e.$t("virtualHostsSubdomainForm.hostnameLabel"),maxLength:"1000",rules:[()=>!!r.value||e.$t("form.fqdnInput.fqdnRequired"),()=>r.value.length<=255||e.$t("form.fqdnInput.fqdnMaxLengthError"),()=>/^[\p{L}\d\/=[\]().?]{3,1000}$/u.test(r.value)||e.$t("form.fqdnInput.fqdnRegexError")]},null,8,["suffix","value","label","rules"])]),((0,l.wg)(),(0,l.j4)(Le,{label:e.$t("virtualHostsSubdomainForm.hostnameLabel"),fqdn:r.value,"onUpdate:fqdn":t[2]||(t[2]=e=>r.value=e),"onUpdate:isValidFqdn":t[3]||(t[3]=e=>u.value=e),key:n.value,class:"hidden"},null,8,["label","fqdn"]))],64))}}),Qe=Fe,Re=Qe,Pe={class:"flex justify-between items-center q-pb-md"},je={class:"title-dialog"},Ie={key:1},ze=(0,l.aZ)({__name:"VirtualHostsCreateDialog",setup(e){const t=(0,ee.QT)().t,a=p(),n=(0,C.i)(),u=(0,s.iH)(""),r=(0,s.iH)(""),d=(0,s.iH)("subdomain"),m=(0,s.iH)(!1),c=(0,l.Fl)((()=>m.value)),g=(0,l.Fl)((()=>a.getVirtualHostsList.filter((e=>"alias"!==e.type)))),v=(0,l.Fl)((()=>g.value.map((e=>({label:e.hostname,value:e.hostname}))))),b=(0,s.iH)([{label:t("virtualHostsCreateDialog.optionTopLevel"),value:"top-level"},{label:t("virtualHostsCreateDialog.optionSubdomain"),value:"subdomain"},{label:t("virtualHostsCreateDialog.optionAlias"),value:"alias"}]),f=(0,l.Fl)({get:()=>a.getShowCreateVirtualHostDialog,set:e=>{a.setShowCreateVirtualHostDialog(e)}}),h=(0,l.Fl)({get:()=>n.getKeyMappingsTable,set:e=>{n.setKeyMappingsTable(e)}});function w(){const e=new i.Z;(0,ve.Q)();const l={hostname:u.value};"alias"===d.value&&(l.type=d.value,l.parentHostname=r.value),e.createVirtualHost(l).then((()=>{h.value++,a.setShowCreateVirtualHostDialog(!1),(0,ge.LX)(t("virtualHostsCreateDialog.createVirtualHostSuccess"))})).catch((e=>{console.error(e),(0,ge.s9)(e.response.data,t("virtualHostsCreateDialog.createVirtualHostError"))})).finally((()=>{(0,ve.Z)()}))}return(0,l.YP)(d,((e,t)=>{"subdomain"===t&&(u.value="")})),(e,t)=>{const a=(0,l.up)("q-btn"),s=(0,l.up)("q-card-section"),n=(0,l.up)("q-card-actions"),i=(0,l.up)("q-card"),p=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(p,{modelValue:f.value,"onUpdate:modelValue":t[9]||(t[9]=e=>f.value=e),persistent:""},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{flat:"",style:{width:"700px","max-width":"80vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",Pe,[(0,l._)("div",je,(0,o.zw)(e.$t("virtualHostsCreateDialog.title")),1),(0,l.Wm)(a,{icon:"sym_s_close",flat:"",round:"",dense:"",onClick:t[0]||(t[0]=e=>f.value=!1)})]),(0,l.Wm)(s,{class:"q-pa-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(N.Z,{label:e.$t("virtualHostsCreateDialog.typeLabel"),selected:d.value,"onUpdate:selected":t[1]||(t[1]=e=>d.value=e),options:b.value},null,8,["label","selected","options"])])),_:1}),"subdomain"===d.value?((0,l.wg)(),(0,l.j4)(s,{key:0,class:"q-pa-none q-pt-xs"},{default:(0,l.w5)((()=>[(0,l.Wm)(Re,{"onUpdate:hostname":t[2]||(t[2]=e=>u.value=e),"onUpdate:isValidFqdn":t[3]||(t[3]=e=>m.value=e)})])),_:1})):((0,l.wg)(),(0,l.iD)("div",Ie,["alias"===d.value?((0,l.wg)(),(0,l.j4)(s,{key:0,class:"q-pa-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(N.Z,{label:e.$t("virtualHostsCreateDialog.parentHostnameLabel"),selected:r.value,"onUpdate:selected":t[4]||(t[4]=e=>r.value=e),options:v.value},null,8,["label","selected","options"])])),_:1})):(0,l.kq)("",!0),(0,l.Wm)(s,{class:"q-pa-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(Le,{label:e.$t("virtualHostsCreateDialog.hostnameLabel"),fqdn:u.value,"onUpdate:fqdn":t[5]||(t[5]=e=>u.value=e),"onUpdate:isValidFqdn":t[6]||(t[6]=e=>m.value=e)},null,8,["label","fqdn"])])),_:1})])),(0,l.Wm)(n,{align:"between",class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(Q.Z,{label:e.$t("virtualHostsCreateDialog.cancelBtn"),onClick:t[7]||(t[7]=e=>f.value=!1),color:"grey-8"},null,8,["label"]),(0,l.Wm)(Q.Z,{icon:"sym_s_add",label:e.$t("virtualHostsCreateDialog.createBtn"),onClick:t[8]||(t[8]=e=>w()),disabled:!1===c.value},null,8,["label","disabled"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),Ye=ze,Be=Ye;b()(ze,"components",{QDialog:ye.Z,QCard:_.Z,QBtn:c.Z,QCardSection:q.Z,QCardActions:xe.Z});const Ae=(0,l.aZ)({__name:"VirtualHostsDeleteDialog",setup(e){const t=(0,ee.QT)().t,a=p(),s=(0,C.i)(),n=(0,l.Fl)({get:()=>a.getShowDeleteVirtualHostDialog,set:e=>{a.setShowDeleteVirtualHostDialog(e)}}),o=(0,l.Fl)((()=>a.getSelectedVirtualHost.hostname)),u=(0,l.Fl)({get:()=>s.getKeyMappingsTable,set:e=>{s.setKeyMappingsTable(e)}}),r=(0,l.Fl)((()=>{const e=(0,ke.Z)();return e.dark.isActive?"/icons/bomb_dark.svg":"/icons/bomb_light.svg"}));function d(){const e=new i.Z;(0,ve.Q)(),e.deleteVirtualHost(o.value).then((()=>{u.value++,(0,ge.LX)(`${t("virtualHostsDeleteDialog.deleteVhostSuccess")}`),n.value=!1})).catch((e=>{console.error(e),(0,ge.s9)(e.response.data,`${t("virtualHostsDeleteDialog.deleteVhostError")}`)})).finally((()=>{(0,ve.Z)()}))}return(e,t)=>((0,l.wg)(),(0,l.j4)(Ce.Z,{showDeleteDialog:n.value,"onUpdate:showDeleteDialog":t[2]||(t[2]=e=>n.value=e),imagePath:r.value,titleDialog:e.$t("virtualHostsDeleteDialog.title"),messageToDelete:e.$t("virtualHostsDeleteDialog.confirmRemove",{virtualHost:o.value}),warningToDelete:e.$t("virtualHostsDeleteDialog.warningRemove")},{"card-actions":(0,l.w5)((()=>[(0,l.Wm)(Q.Z,{label:e.$t("virtualHostsDeleteDialog.cancelBtn"),color:"grey-8",onClick:t[0]||(t[0]=e=>n.value=!1)},null,8,["label"]),(0,l.Wm)(Q.Z,{icon:"sym_s_delete",label:e.$t("virtualHostsDeleteDialog.deleteBtn"),color:"negative",onClick:t[1]||(t[1]=e=>d())},null,8,["label"])])),_:1},8,["showDeleteDialog","imagePath","titleDialog","messageToDelete","warningToDelete"]))}}),Ke=Ae,Oe=Ke;var Ee={class:"q-pa-md"},Ne={class:"text-left",style:{width:"150px"}},Xe=(0,l._)("th",null,null,-1),Ge={class:"text-left"},Je={class:"text-right"},et={class:"text-right"},tt={class:"text-right"},at={class:"text-right"},lt={class:"text-right"};function st(e,t){var a=(0,l.up)("q-skeleton"),s=(0,l.up)("q-markup-table");return(0,l.wg)(),(0,l.iD)("div",Ee,[(0,l.Wm)(s,null,{default:(0,l.w5)((function(){return[(0,l._)("thead",null,[(0,l._)("tr",null,[(0,l._)("th",Ne,[(0,l.Wm)(a,{animation:"blink",type:"text"})]),((0,l.wg)(),(0,l.iD)(l.HY,null,(0,l.Ko)(4,(function(e){return(0,l._)("th",{key:e,class:"text-right"},[(0,l.Wm)(a,{animation:"blink",type:"text"})])})),64)),Xe])]),(0,l._)("tbody",null,[((0,l.wg)(),(0,l.iD)(l.HY,null,(0,l.Ko)(10,(function(e){return(0,l._)("tr",{key:e},[(0,l._)("td",Ge,[(0,l.Wm)(a,{animation:"blink",type:"text",width:"85px"})]),(0,l._)("td",Je,[(0,l.Wm)(a,{animation:"blink",type:"text",width:"50px"})]),(0,l._)("td",et,[(0,l.Wm)(a,{animation:"blink",type:"text",width:"35px"})]),(0,l._)("td",tt,[(0,l.Wm)(a,{animation:"blink",type:"text",width:"65px"})]),(0,l._)("td",at,[(0,l.Wm)(a,{animation:"blink",type:"text",width:"25px"})]),(0,l._)("td",lt,[(0,l.Wm)(a,{size:"25px"})])])})),64))])]})),_:1})])}var nt=a(11639),it=a(66933);const ot={},ut=(0,nt.Z)(ot,[["render",st]]),rt=ut;b()(ot,"components",{QMarkupTable:it.Z,QSkeleton:_e.ZP});const pt=(0,l.aZ)({__name:"MappingsIndex",setup(e){const t=(0,C.i)(),a=p(),o=(0,s.iH)([]),u=(0,s.iH)(0),r=(0,s.iH)(0),d=(0,s.iH)(!1),m=(0,l.Fl)((()=>t.getShowCreateMappingDialog)),c=(0,l.Fl)((()=>a.getShowCreateVirtualHostDialog)),g=(0,l.Fl)((()=>t.getKeyMappingsTable));function v(){d.value=!0;const e=new n.Z;e.getMappings().then((e=>{o.value=e.data.body})).catch((e=>{console.error(e)})).finally((()=>{d.value=!1}))}function b(){const e=new i.Z;e.getVirtualHosts().then((e=>{const t=e.data.body;a.setVirtualHostsList(t)})).catch((e=>{console.error(e)}))}return(0,l.YP)(m,(()=>{u.value++})),(0,l.YP)(c,(()=>{r.value++})),(0,l.YP)(g,(()=>{v(),b()})),(0,l.bv)((()=>{v(),b()})),(e,t)=>{const a=(0,l.up)("q-card-section"),s=(0,l.up)("q-card"),n=(0,l.up)("q-page");return(0,l.wg)(),(0,l.j4)(n,{padding:""},{default:(0,l.w5)((()=>[((0,l.wg)(),(0,l.j4)(Be,{key:r.value})),(0,l.Wm)(Oe),((0,l.wg)(),(0,l.j4)(Ze,{key:u.value})),(0,l.Wm)($e),(0,l.Wm)(s,{flat:""},{default:(0,l.w5)((()=>[(0,l.Wm)(a,null,{default:(0,l.w5)((()=>[!0===d.value?((0,l.wg)(),(0,l.j4)(rt,{key:0})):((0,l.wg)(),(0,l.j4)(E,{key:1,mappingsList:o.value},null,8,["mappingsList"]))])),_:1})])),_:1})])),_:1})}}});var dt=a(69885);const mt=pt,ct=mt;b()(pt,"components",{QPage:dt.Z,QCard:_.Z,QCardSection:q.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/870.c1412bb9.js b/src/presentation/ui/dist/js/870.c1412bb9.js deleted file mode 100644 index 54502f0aa..000000000 --- a/src/presentation/ui/dist/js/870.c1412bb9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[870],{23346:(e,t,a)=>{a.r(t),a.d(t,{default:()=>Wl});var l=a(59835),s=a(86970),i=a(60499),n=a(97510),o=a(84019),r=a(62601);const u={key:0,class:"flex justify-between items-center"},c={class:"flex justify-center items-center"},m=["onClick"],v=["src"],d={class:"text-capitalize",style:{"font-size":"1.2rem"}},p={key:1,class:"flex text-h6 justify-center items-center",style:{height:"115px"}},g=(0,l.aZ)({__name:"MarketplaceInstallAppSlide",props:{catalogList:{},marketplaceType:{}},emits:["update:selectedApp"],setup(e,{emit:t}){const a=e,n=(0,i.iH)(0),o=(0,i.iH)(null),r=(0,i.iH)(null),g=(0,l.Fl)((()=>a.catalogList.filter((e=>e.type===a.marketplaceType)))),b=(0,l.Fl)((()=>{const e=Math.min(n.value,g.value.length-4);return g.value.slice(e,e+4)})),w=e=>{r.value=e,o.value=b.value[e]};return(0,l.YP)(g,(e=>{e.length>0||(o.value=null)})),(0,l.YP)(o,(()=>{t("update:selectedApp",o.value)})),(e,t)=>{const a=(0,l.up)("q-btn");return g.value.length>0?((0,l.wg)(),(0,l.iD)("div",u,[(0,l.Wm)(a,{style:(0,s.j5)(g.value.length>4&&n.value>0?"visibility: visible":"visibility: hidden"),round:"",flat:"",icon:"sym_s_chevron_left",color:"primary",size:"lg",onClick:t[0]||(t[0]=e=>n.value=Math.max(0,n.value-1))},null,8,["style"]),(0,l._)("div",c,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(b.value,((e,t)=>((0,l.wg)(),(0,l.iD)("div",{key:t,class:(0,s.C_)(["bg-app-slide",{active:r.value===t}]),style:{padding:"8px 4px"},onClick:e=>w(t)},[(0,l._)("img",{src:e.avatarUrl,style:{width:"64px",height:"64px"}},null,8,v),(0,l._)("div",d,(0,s.zw)(e.name),1)],10,m)))),128))]),(0,l.Wm)(a,{style:(0,s.j5)(g.value.length>4&&n.valuen.value=Math.min(g.value.length-1,n.value+1))},null,8,["style"])])):((0,l.wg)(),(0,l.iD)("div",p,(0,s.zw)(e.$t("marketplaceInstallAppSlide.notFoundApps",{type:e.marketplaceType})),1))}}});var b=a(68879),w=a(69984),_=a.n(w);const f=g,y=f;_()(g,"components",{QBtn:b.Z});var h=a(88850),S=a(21647),k=a(84278),x=a(9704),q=a(88900),U=a(25121),T=a(45273);const Z={class:"flex justify-start q-gutter-sm q-mb-md"},W={class:"q-my-md"},I={key:0,class:"marketplace-data-fields-box"},C={class:"flex justify-between items-center q-mb-md"},D={class:"title-h6"},F={class:"flex justify-between items-center q-mt-lg"},H=(0,l.aZ)({__name:"MarketplaceInstallAppForm",props:{catalogList:{}},setup(e){const t=(0,r.R)(),a=(0,U.QT)().t,n=(0,i.iH)(""),o=(0,i.iH)(""),u=(0,i.iH)(null),c=(0,i.iH)("app"),m=(0,i.iH)(0),v=(0,i.iH)(0),d=(0,i.iH)([]),p=(0,l.Fl)({get:()=>t.getShowInstallAppDialog,set:e=>t.setShowInstallAppDialog(e)}),g=(0,l.Fl)({get:()=>t.getKeyMarketplaceTable,set:e=>t.setKeyMarketplaceTable(e)});function b(){p.value=!1}function w(){if(!u.value)return;(0,T.Q)();const e={slug:u.value.slugs[0],hostname:o.value};n.value&&(e.urlPath=n.value),d.value.length>0&&(e.dataFields=d.value);const t=new x.Z,l=!1,s=!0;t.installApp(e).then((()=>{(0,q.LX)(a("marketplaceInstallAppForm.installAppSuccess"),"bottom",l,s),setTimeout((()=>{b(),g.value++}),1e3)})).catch((e=>{console.error(e),(0,q.s9)(e.response.data,a("marketplaceInstallAppForm.installAppWithError"),"bottom",l,s)})).finally((()=>{(0,T.Z)()}))}return(0,l.YP)(c,(()=>{v.value++})),(0,l.YP)(u,(()=>{d.value=[],m.value++})),(e,t)=>{const a=(0,l.up)("q-radio"),i=(0,l.up)("q-tooltip"),r=(0,l.up)("q-icon");return(0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l.Wm)(S.Z,{class:"q-mb-md","onUpdate:selectedHostname":t[0]||(t[0]=e=>o.value=e),"onUpdate:installDirectory":t[1]||(t[1]=e=>n.value=e)}),(0,l._)("div",Z,[(0,l.Wm)(a,{modelValue:c.value,"onUpdate:modelValue":t[2]||(t[2]=e=>c.value=e),val:"app",label:e.$t("marketplaceInstallAppForm.marketplaceType.apps")},null,8,["modelValue","label"]),(0,l.Wm)(a,{modelValue:c.value,"onUpdate:modelValue":t[3]||(t[3]=e=>c.value=e),val:"framework",label:e.$t("marketplaceInstallAppForm.marketplaceType.frameworks")},null,8,["modelValue","label"]),(0,l.Wm)(a,{modelValue:c.value,"onUpdate:modelValue":t[4]||(t[4]=e=>c.value=e),val:"stack",label:e.$t("marketplaceInstallAppForm.marketplaceType.stacks")},null,8,["modelValue","label"])]),(0,l._)("div",W,[((0,l.wg)(),(0,l.j4)(y,{catalogList:e.catalogList,marketplaceType:c.value,"onUpdate:selectedApp":t[5]||(t[5]=e=>u.value=e),key:v.value},null,8,["catalogList","marketplaceType"]))]),null!==u.value&&u.value.dataFields.length>0?((0,l.wg)(),(0,l.iD)("div",I,[(0,l._)("div",C,[(0,l._)("div",D,(0,s.zw)(e.$t("marketplaceInstallAppForm.installParams")),1),(0,l.Wm)(r,{name:"sym_s_help",class:"text-white",size:"sm"},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{anchor:"bottom middle",class:"bg-primary",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.$t("marketplaceInstallAppForm.descriptionInstallParams")),1)])),_:1})])),_:1})]),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(u.value.dataFields,((e,t)=>((0,l.wg)(),(0,l.iD)("div",{class:"q-mb-md",key:t},[((0,l.wg)(),(0,l.j4)(h.Z,{style:{width:"100%"},isRequired:e.isRequired,defaultValue:e.defaultValue,label:e.label,options:e.options,type:e.type,name:e.name,key:m.value,"onUpdate:dataFields":e=>d.value[t]=e},null,8,["isRequired","defaultValue","label","options","type","name","onUpdate:dataFields"]))])))),128))])):(0,l.kq)("",!0),(0,l._)("div",F,[(0,l.Wm)(k.Z,{color:"grey-8",label:e.$t("marketplaceInstallAppForm.cancelBtn"),onClick:t[6]||(t[6]=e=>b())},null,8,["label"]),(0,l.Wm)(k.Z,{color:"primary",label:e.$t("marketplaceInstallAppForm.confirmBtn"),disable:null===u.value,onClick:t[7]||(t[7]=e=>w())},null,8,["label","disable"])])],64)}}});var Q=a(11480),$=a(22857),P=a(46858);const V=H,L=V;_()(H,"components",{QRadio:Q.Z,QIcon:$.Z,QTooltip:P.Z});const z={class:"flex justify-between items-center"},A={class:"title-dialog"},j=["innerHTML"],B=(0,l.aZ)({__name:"MarketplaceInstallAppDialog",setup(e){const t=(0,r.R)(),a=new x.Z,n=(0,U.QT)().t,o=(0,i.iH)(!1),u=(0,i.iH)([]);(0,l.bv)((()=>{v()}));const c=(0,l.Fl)({get:()=>t.getShowInstallAppDialog,set:e=>t.setShowInstallAppDialog(e)});function m(){c.value=!1}function v(){o.value=!0,a.getCatalog().then((e=>{u.value=e.data.body.marketplaceCatalogItems})).catch((e=>{console.error(e),(0,q.s9)(e.response.data,n("marketplaceInstallAppDialog.getCatalogWithError"))})).finally((()=>{o.value=!1}))}return(e,t)=>{const a=(0,l.up)("q-skeleton"),i=(0,l.up)("q-card"),n=(0,l.up)("q-btn"),r=(0,l.up)("q-banner"),v=(0,l.up)("q-card-section"),d=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(d,{modelValue:c.value,"onUpdate:modelValue":t[1]||(t[1]=e=>c.value=e),persistent:""},{default:(0,l.w5)((()=>[!0===o.value?((0,l.wg)(),(0,l.j4)(i,{key:0,flat:"",style:{width:"950px","max-width":"90vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l.Wm)(a,{height:"400px",width:"100%"})])),_:1})):((0,l.wg)(),(0,l.j4)(i,{key:1,flat:"",style:{width:"950px","max-width":"90vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",z,[(0,l._)("div",A,(0,s.zw)(e.$t("marketplaceInstallAppDialog.title")),1),(0,l.Wm)(n,{icon:"sym_s_close",flat:"",round:"",dense:"",onClick:t[0]||(t[0]=e=>m())})]),(0,l.Wm)(r,{class:"dialog-info"},{default:(0,l.w5)((()=>[(0,l._)("div",{innerHTML:e.$t("marketplaceInstallAppDialog.subtitle")},null,8,j)])),_:1}),(0,l.Wm)(v,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(L,{catalogList:u.value},null,8,["catalogList"])])),_:1})])),_:1}))])),_:1},8,["modelValue"])}}});var Y=a(32074),E=a(44458),N=a(57133),M=a(47128),R=a(63190);const K=B,X=K;_()(B,"components",{QDialog:Y.Z,QCard:E.Z,QSkeleton:N.ZP,QBtn:b.Z,QBanner:M.Z,QCardSection:R.Z});const O={class:"title-h4"},G=(0,l.aZ)({__name:"MarketplaceIndex",setup(e){const t=(0,U.QT)().t,a=new x.Z,u=(0,r.R)(),c=(0,i.iH)([]),m=(0,i.iH)(!1),v=(0,i.iH)(0),d=(0,l.Fl)((()=>u.getShowInstallAppDialog));function p(){m.value=!0,a.getInstalledApps().then((e=>{var t;c.value=null!==(t=e.data.body.marketplaceInstalledItems)&&void 0!==t?t:[]})).catch((e=>{console.error(e),(0,q.s9)(e.response.data,t("marketplaceIndex.getInstalledAppsWithError"))})).finally((()=>{m.value=!1}))}return(0,l.bv)((()=>{p()})),(0,l.YP)(d,(e=>{!1!==e&&v.value++})),(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l.Wm)(o.Z),((0,l.wg)(),(0,l.j4)(X,{key:v.value})),(0,l._)("div",O,(0,s.zw)(e.$t("marketplaceIndex.title")),1),(0,l.Wm)(n.Z,{installedAppsList:c.value},null,8,["installedAppsList"])],64))}}),J=G,ee=J,te={class:"text-left home-system-info-table-td"},ae={class:"text-right"},le={class:"hidden"},se={class:"text-left home-system-info-table-td"},ie={class:"text-right"},ne={class:"text-left home-system-info-table-td"},oe={class:"text-right"},re={class:"text-left home-system-info-table-td"},ue={class:"text-right home-system-info-table-td"},ce={class:"system-info-text-chip"},me={class:"text-italic q-ml-xs system-info-text-chip"},ve={class:"system-info-text-chip"},de=(0,l._)("small",{class:"text-italic q-ml-xs system-info-text-chip"}," GB RAM",-1),pe={class:"system-info-text-chip"},ge=(0,l._)("small",{class:"text-italic q-ml-xs system-info-text-chip"}," GB Storage",-1),be={class:"text-left home-system-info-table-td"},we={class:"text-right"},_e=(0,l.aZ)({__name:"SystemInfoTable",props:{overview:{}},setup(e){const t=e,a=(0,i.iH)({currentUsage:{cpuUsagePercent:0,memUsagePercent:0,storageUsage:0},hostname:"",publicIp:"",runtimeContext:"container",specs:{cpuCores:0,cpuFrequency:0,cpuModel:"",memoryTotal:0,storageTotal:0},uptimeSecs:0});function n(e){return(e/1024/1024/1024).toFixed(1)}function o(e){return(e/1e3).toFixed(1)}function r(e){const t=Math.floor(e/3600),a=Math.floor(e%3600/60),l=e%60;return`${t}h ${a}m ${l}s`}return(0,l.bv)((()=>{a.value=t.overview})),(0,l.YP)((()=>t.overview),(e=>{a.value=e})),(e,t)=>{const i=(0,l.up)("q-avatar"),u=(0,l.up)("q-chip"),c=(0,l.up)("q-markup-table");return(0,l.wg)(),(0,l.j4)(c,{flat:"",bordered:"",style:{"min-height":"300px"}},{default:(0,l.w5)((()=>[(0,l._)("tbody",null,[(0,l._)("tr",null,[(0,l._)("td",te,(0,s.zw)(e.$t("systemInfoTable.colHostname")),1),(0,l._)("td",ae,(0,s.zw)(a.value.hostname),1)]),(0,l._)("tr",le,[(0,l._)("td",se,(0,s.zw)(e.$t("systemInfoTable.colRuntimeContext")),1),(0,l._)("td",ie,(0,s.zw)(a.value.runtimeContext),1)]),(0,l._)("tr",null,[(0,l._)("td",ne,(0,s.zw)(e.$t("systemInfoTable.colUptime")),1),(0,l._)("td",oe,(0,s.zw)(r(a.value.uptimeSecs)),1)]),(0,l._)("tr",null,[(0,l._)("td",re,(0,s.zw)(e.$t("systemInfoTable.colHardware")),1),(0,l._)("td",ue,[(0,l._)("div",null,[(0,l.Wm)(u,{square:"",class:"text-primary",outline:"",style:{"min-width":"150px"}},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{icon:"sym_s_memory",color:"primary","text-color":"white","font-size":"1.2499rem"}),(0,l._)("strong",ce,(0,s.zw)(a.value.specs.cpuCores),1),(0,l._)("small",me,"CPU "+(0,s.zw)(o(a.value.specs.cpuFrequency))+" GHz",1)])),_:1})]),(0,l._)("div",null,[(0,l.Wm)(u,{square:"",class:"text-primary",outline:"",style:{"min-width":"150px"}},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{icon:"sym_s_memory_alt",color:"primary","text-color":"white","font-size":"1.2499rem"}),(0,l._)("strong",ve,(0,s.zw)(n(a.value.specs.memoryTotal)),1),de])),_:1})]),(0,l._)("div",null,[(0,l.Wm)(u,{square:"",class:"text-primary",outline:"",style:{"min-width":"150px"}},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{icon:"sym_s_sd_card",color:"primary","text-color":"white","font-size":"1.2499rem"}),(0,l._)("strong",pe,(0,s.zw)(n(a.value.specs.storageTotal)),1),ge])),_:1})])])]),(0,l._)("tr",null,[(0,l._)("td",be,(0,s.zw)(e.$t("systemInfoTable.colPublicIp")),1),(0,l._)("td",we,(0,s.zw)(a.value.publicIp),1)])])])),_:1})}}});var fe=a(66933),ye=a(57691),he=a(61357);const Se=_e,ke=Se;_()(_e,"components",{QMarkupTable:fe.Z,QChip:ye.Z,QAvatar:he.Z});var xe=a(19302),qe=a(27092),Ue=a.n(qe);const Te=(0,l.aZ)({__name:"AreaChart",props:{series:{},height:{default:200}},setup(e){const t=(0,xe.Z)(),a=(0,i.iH)(0),s=(0,i.iH)({theme:{mode:"dark",palette:"palette6"},chart:{height:200,type:"area",background:"transparent",toolbar:{show:!1}},dataLabels:{enabled:!1},stroke:{curve:"smooth"},xaxis:{type:"datetime",categories:[0,1,2,3,4,5,6,7,8,9]},yaxis:{tickAmount:4,min:0,max:100,labels:{formatter:e=>e+"%"}},tooltip:{x:{format:"dd/MM/yy HH:mm"}},legend:{position:"top",horizontalAlign:"left"}}),n=(0,l.Fl)((()=>t.dark.isActive));return(0,l.YP)(n,(()=>{s.value.theme.mode=n.value?"dark":"light",a.value++}),{immediate:!0}),(e,t)=>((0,l.wg)(),(0,l.j4)((0,i.SU)(Ue()),{type:"area",options:s.value,series:e.series,height:e.height,key:a.value},null,8,["options","series","height"]))}}),Ze=Te,We=Ze,Ie={class:"text-center"},Ce={style:{"line-height":"1.2944rem"}},De=(0,l._)("br",null,null,-1),Fe=(0,l.aZ)({__name:"SystemInfoDiskUsage",props:{storageUsage:{},storageTotal:{}},setup(e){const t=e;function a(){return Math.trunc(t.storageUsage)}return(e,t)=>{const i=(0,l.up)("q-circular-progress");return(0,l.wg)(),(0,l.iD)("div",Ie,[(0,l.Wm)(i,{"show-value":"","font-size":"16px",value:a(),size:"150px",thickness:.3,color:"primary","track-color":"grey-6",class:"q-my-md"},{default:(0,l.w5)((()=>[(0,l._)("div",Ce,[(0,l.Uk)((0,s.zw)(a())+"% ",1),De,(0,l.Uk)(" "+(0,s.zw)(e.$t("systemInfoDiskUsage.diskUsage")),1)])])),_:1},8,["value"])])}}});var He=a(83302);const Qe=Fe,$e=Qe;_()(Fe,"components",{QCircularProgress:He.Z});const Pe={class:"title-h6 q-py-sm"},Ve={class:"row"},Le={class:"col-9"},ze={class:"col"},Ae=(0,l.aZ)({__name:"SystemInfoResourcesChart",props:{overview:{}},setup(e){const t=e,a=(0,U.QT)().t,n=(0,i.iH)([{name:a("systemInfoResourcesChart.cpu"),data:Array()},{name:a("systemInfoResourcesChart.ram"),data:Array()}]);return(0,l.wF)((()=>{n.value[0].data.push(Math.trunc(100*t.overview.currentUsage.cpuUsagePercent)),n.value[1].data.push(Math.trunc(100*t.overview.currentUsage.memUsagePercent))})),(0,l.YP)((()=>t.overview),(e=>{10===n.value[0].data.length&&(n.value[0].data.shift(),n.value[1].data.shift()),n.value[0].data.push(parseInt(e.currentUsage.cpuUsagePercent.toFixed(3))),n.value[1].data.push(parseInt(e.currentUsage.memUsagePercent.toFixed(3)))}),{deep:!0}),(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("div",Pe,(0,s.zw)(e.$t("systemInfoResourcesChart.titleResourcesChart")),1),(0,l._)("div",Ve,[(0,l._)("div",Le,[(0,l.Wm)(We,{series:n.value,height:235},null,8,["series"])]),(0,l._)("div",ze,[(0,l.Wm)($e,{storageTotal:e.overview.specs.storageTotal,storageUsage:e.overview.currentUsage.storageUsage},null,8,["storageTotal","storageUsage"])])])],64))}}),je=Ae,Be=je;var Ye=a(87178),Ee=a(16397),Ne=a(85118);const Me={class:"flex justify-between items-center q-mb-sm"},Re={class:"title-h4"},Ke={class:"flex justify-between"},Xe={class:"overview-system-info-table"},Oe={class:"overview-resources-chart"},Ge=(0,l.aZ)({__name:"SystemInfoIndex",setup(e){const t=(0,Ee.n)(),a=(0,Ne.V)(),n=new Ye.Z,o=(0,i.iH)(),r=(0,l.Fl)({get:()=>t.getSystemInfo,set:e=>t.setSystemInfo(e)}),u=(0,l.Fl)((()=>a.getSelectedRefreshRate));function c(){o.value&&clearInterval(o.value),o.value=setInterval((()=>{n.getSystemInfo().then((e=>{r.value=e.data.body})).catch((e=>{console.error(e)}))}),1e3*u.value)}return(0,l.bv)((()=>{n.getSystemInfo().then((e=>{r.value=e.data.body})).catch((e=>{console.error(e)})).finally((()=>{c()}))})),(0,l.Ah)((()=>{clearInterval(o.value)})),(0,l.YP)(u,(()=>{c()})),(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("div",Me,[(0,l._)("div",Re,(0,s.zw)(e.$t("systemInfoIndex.titleSystemInfo")),1)]),(0,l._)("div",Ke,[(0,l._)("div",Xe,[(0,l.Wm)(ke,{overview:r.value},null,8,["overview"])]),(0,l._)("div",Oe,[(0,l.Wm)(Be,{overview:r.value},null,8,["overview"])])])],64))}}),Je=Ge,et=Je;var tt=a(9281),at=a(3746);const lt=(0,at.Q_)("servicesStatus",{state:()=>({keyServicesStatusTable:0,isLoadingServicesStatus:!1,showDialogUninstallService:!1,showDialogInstallService:!1,showDialogUpdateService:!1,selectedService:{},servicesStatusList:[]}),getters:{getKeyServicesStatusTable(e){return e.keyServicesStatusTable},getIsLoadingServicesStatus(e){return e.isLoadingServicesStatus},getShowDialogUninstallService(e){return e.showDialogUninstallService},getShowDialogInstallService(e){return e.showDialogInstallService},getShowDialogUpdateService(e){return e.showDialogUpdateService},getSelectedService(e){return e.selectedService},getServicesStatusList(e){return e.servicesStatusList}},actions:{setKeyServicesStatusTable(e){this.keyServicesStatusTable=e},setIsLoadingServicesStatus(e){this.isLoadingServicesStatus=e},setShowDialogUninstallService(e){this.showDialogUninstallService=e},setShowDialogInstallService(e){this.showDialogInstallService=e},setShowDialogUpdateService(e){this.showDialogUpdateService=e},setSelectedService(e){this.selectedService=e},setServicesStatusList(e){this.servicesStatusList=e}}}),st={key:0,class:"flex justify-end items-center"},it={class:"td-action-bg-15",style:{width:"57px"}},nt={class:"td-action-bg-20"},ot={class:"td-action-bg-25"},rt={key:1,class:"flex justify-end items-center"},ut={class:"td-action-bg-25",style:{width:"56px"}},ct=(0,l.aZ)({__name:"ServicesStatusTableActions",props:{service:{}},setup(e){const t=e,a=new tt.Z,n=(0,U.QT)().t,o=lt(),r=(0,i.iH)(t.service.status),u=(0,i.iH)(!1),c=(0,i.iH)(!1),m=(0,l.Fl)({get:()=>o.getKeyServicesStatusTable,set:e=>{o.keyServicesStatusTable=e}}),v=(0,l.Fl)({get:()=>o.getIsLoadingServicesStatus,set:e=>{o.setIsLoadingServicesStatus(e)}});function d(e){"installed"!==e&&"uninstalled"!==e&&(v.value=!0,(0,T.Q)(n("running"!==e?"servicesStatusTableActions.stopLoading":"servicesStatusTableActions.startLoading")),a.updateServiceStatus({name:t.service.name,status:e}).then((()=>{"running"!==e?(0,q.LX)(n("servicesStatusTableActions.stopSuccess")):(0,q.LX)(n("servicesStatusTableActions.startSuccess"))})).catch((t=>{console.error(t),"running"!==e?(0,q.s9)(t.response.data,n("servicesStatusTableActions.stopError")):(0,q.s9)(t.response.data,n("servicesStatusTableActions.startError"))})).finally((()=>{v.value=!1,setTimeout((()=>{m.value++,(0,T.Z)()}),1e3)})))}function p(e){if("installed"===e||"uninstalled"===e)return;v.value=!0,c.value=!0,(0,T.Q)(n("servicesStatusTableActions.restartLoading"));const l="running"===e?"stopped":"running";a.updateServiceStatus({name:t.service.name,status:l}).then((()=>{const t=n("running"===e?"servicesStatusTableActions.stopSuccess":"servicesStatusTableActions.startSuccess");(0,q.LX)(t),"stopped"===l&&setTimeout((()=>{p("stopped")}),1e3)})).catch((e=>{console.error(e),(0,q.s9)(e.response.data,n("servicesStatusTableActions.restartError"))})).finally((()=>{v.value=!1,c.value=!1,(0,T.Z)()}))}function g(){o.setSelectedService(t.service),o.setShowDialogUpdateService(!0)}function b(){o.setSelectedService(t.service),o.setShowDialogUninstallService(!0)}return(0,l.YP)(r,(e=>{"installed"!==e&&"uninstalled"!==e&&(c.value||d(e))})),(e,t)=>{const a=(0,l.up)("q-toggle"),o=(0,l.up)("q-tooltip"),m=(0,l.up)("q-btn"),v=(0,l.up)("q-icon");return"system"!==e.service.type?((0,l.wg)(),(0,l.iD)("div",st,[(0,l._)("div",it,[(0,l.Wm)(a,{disable:"running"!==r.value&&"stopped"!==r.value,modelValue:r.value,"onUpdate:modelValue":t[0]||(t[0]=e=>r.value=e),"true-value":"running","false-value":"stopped",size:"36px"},null,8,["disable","modelValue"])]),(0,l._)("div",nt,[(0,l.Wm)(m,{disable:"running"!==r.value,onClick:t[1]||(t[1]=e=>p(r.value)),loading:c.value,size:"md",flat:"",icon:"sym_s_refresh"},{default:(0,l.w5)((()=>[(0,l.Wm)(o,{class:"bg-primary text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)((0,i.SU)(n)("servicesStatusTableActions.restartBtn")),1)])),_:1})])),_:1},8,["disable","loading"])]),(0,l._)("div",ot,[(0,l.Wm)(m,{disable:"solo"===e.service.nature,onClick:t[2]||(t[2]=e=>g()),size:"md",flat:"",icon:"sym_s_settings"},{default:(0,l.w5)((()=>[(0,l.Wm)(o,{class:"bg-primary text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)((0,i.SU)(n)("servicesStatusTableActions.updateBtn")),1)])),_:1})])),_:1},8,["disable"])]),(0,l._)("div",null,[(0,l.Wm)(m,{disable:"uninstalled"===r.value,onClick:t[3]||(t[3]=e=>b()),loading:u.value,color:"negative",size:"md",icon:"sym_s_delete_forever"},{default:(0,l.w5)((()=>[(0,l.Wm)(o,{class:"bg-negative text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)((0,i.SU)(n)("servicesStatusTableActions.uninstallBtn")),1)])),_:1})])),_:1},8,["disable","loading"])])])):((0,l.wg)(),(0,l.iD)("div",rt,[(0,l._)("div",ut,[(0,l.Wm)(m,{disable:"running"!==r.value,onClick:t[4]||(t[4]=e=>p(r.value)),loading:c.value,size:"md",flat:"",icon:"sym_s_refresh"},{default:(0,l.w5)((()=>[(0,l.Wm)(o,{class:"bg-primary text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)((0,i.SU)(n)("servicesStatusTableActions.restartBtn")),1)])),_:1})])),_:1},8,["disable","loading"])]),(0,l.Wm)(v,{name:"sym_s_info",size:"16px",class:"text-primary q-ml-sm"},{default:(0,l.w5)((()=>[(0,l.Wm)(o,{class:"bg-primary text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)((0,i.SU)(n)("servicesStatusTableActions.systemServiceWarning")),1)])),_:1})])),_:1})]))}}});var mt=a(23175);const vt=ct,dt=vt;_()(ct,"components",{QToggle:mt.Z,QBtn:b.Z,QTooltip:P.Z,QIcon:$.Z});var pt=a(73451);const gt={class:"flex justify-start items-center"},bt=(0,l._)("span",{style:{"padding-bottom":"3px"}},"v",-1),wt={class:"services-status-text-chip"},_t={class:"services-status-text-chip"},ft=(0,l.aZ)({__name:"ServicesStatusTableTdMain",props:{serviceName:{},version:{},startupFile:{}},setup(e){return(e,t)=>{const a=(0,l.up)("q-avatar"),n=(0,l.up)("q-chip");return(0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("div",null,(0,s.zw)((0,i.SU)(pt.R)(e.serviceName)),1),(0,l._)("div",gt,[e.version?((0,l.wg)(),(0,l.j4)(n,{key:0,square:"",outline:"",color:"primary",class:"q-ml-none q-mr-xs"},{default:(0,l.w5)((()=>[(0,l.Wm)(a,{color:"primary","text-color":"white","font-size":"1.1326rem"},{default:(0,l.w5)((()=>[bt])),_:1}),(0,l._)("span",wt,(0,s.zw)(e.version),1)])),_:1})):(0,l.kq)("",!0),e.startupFile?((0,l.wg)(),(0,l.j4)(n,{key:1,square:"",class:"text-primary q-ml-none",outline:""},{default:(0,l.w5)((()=>[(0,l.Wm)(a,{icon:"sym_s_description",color:"primary","text-color":"white","font-size":"1.2499rem"}),(0,l._)("span",_t,(0,s.zw)(e.startupFile),1)])),_:1})):(0,l.kq)("",!0)])],64)}}}),yt=ft,ht=yt;_()(ft,"components",{QChip:ye.Z,QAvatar:he.Z});const St=(0,l.aZ)({__name:"ServicesStatusTable",props:{servicesStatusList:{}},setup(e){const t=e,a=(0,U.QT)().t,n=lt(),o=(0,i.iH)(""),r=(0,i.iH)([]),u=(0,i.iH)([{name:"uptimeSecs",label:a("servicesStatusTable.colUptime"),align:"center",format:e=>p(e.uptimeSecs),field:"metrics"},{name:"cpuUsagePercent",label:a("servicesStatusTable.colCpuUsage"),align:"center",format:e=>g(e.cpuUsagePercent),field:"metrics"},{name:"memUsagePercent",label:a("servicesStatusTable.colRamUsage"),align:"center",format:e=>g(e.memUsagePercent),field:"metrics"}]),c=(0,i.iH)({sortBy:"serviceName",isDescending:!1}),m=(0,i.iH)({rowsPerPage:1e4}),v=(0,l.Fl)({get:()=>n.getShowDialogInstallService,set:e=>n.setShowDialogInstallService(e)});function d(e,a=!1){let l=t.servicesStatusList;"serviceName"===e&&l.sort(((e,t)=>e.namet.name?1:0)),"uptimeSecs"===e&&l.sort(((e,t)=>e.metrics.uptimeSecst.metrics.uptimeSecs?1:0)),"cpuUsagePercent"===e&&l.sort(((e,t)=>e.metrics.cpuUsagePercentt.metrics.cpuUsagePercent?1:0)),"memUsagePercent"===e&&l.sort(((e,t)=>e.metrics.memUsagePercentt.metrics.memUsagePercent?1:0)),!0===c.value.isDescending&&l.reverse(),!1===a&&c.value.sortBy===e&&(c.value.isDescending=!c.value.isDescending),r.value=l,c.value.sortBy=e}function p(e){if(!e)return"";const t=Math.floor(e/3600),a=Math.floor(e%3600/60),l=e%60;return`${t}h ${a}m ${l.toFixed(0)}s`}function g(e){return e?`${e.toFixed(2)}%`:"0%"}function b(){v.value=!0}return(0,l.YP)((()=>t.servicesStatusList),(()=>{d(c.value.sortBy,!0)})),(e,t)=>{const a=(0,l.up)("q-icon"),i=(0,l.up)("q-input"),n=(0,l.up)("q-space"),v=(0,l.up)("q-th"),p=(0,l.up)("q-tr"),g=(0,l.up)("q-td"),w=(0,l.up)("q-table");return(0,l.wg)(),(0,l.j4)(w,{rows:r.value,columns:u.value,filter:o.value,pagination:m.value,"onUpdate:pagination":t[3]||(t[3]=e=>m.value=e),"visible-columns":["uptimeSecs","cpuUsagePercent","memUsagePercent"],"no-data-label":e.$t("servicesStatusTable.notFound"),"row-key":"key",color:"primary",flat:"",bordered:"","virtual-scroll":"","rows-per-page-options":[0],"hide-pagination":"",style:{height:"auto","max-height":"800px"}},{top:(0,l.w5)((()=>[(0,l.Wm)(i,{borderless:"",debounce:"300",color:"primary",modelValue:o.value,"onUpdate:modelValue":t[0]||(t[0]=e=>o.value=e),label:e.$t("servicesStatusTable.inputSearch")},{prepend:(0,l.w5)((()=>[(0,l.Wm)(a,{name:"sym_s_search"})])),_:1},8,["modelValue","label"]),(0,l.Wm)(n),(0,l.Wm)(k.Z,{label:e.$t("servicesStatusTable.createServiceBtn"),icon:"sym_s_install_desktop",onClick:t[1]||(t[1]=e=>b())},null,8,["label"])])),header:(0,l.w5)((i=>[(0,l.Wm)(p,{props:i},{default:(0,l.w5)((()=>[(0,l.Wm)(v,{class:"bg-primary text-white services-table-th",style:{"text-align":"left !important"},onClick:t[2]||(t[2]=e=>d("serviceName"))},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.$t("servicesStatusTable.colServiceName"))+" ",1),(0,l.Wm)(a,{name:"serviceName"===c.value.sortBy?c.value.isDescending?"sym_s_arrow_downward":"sym_s_arrow_upward":""},null,8,["name"])])),_:1}),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(i.cols,(e=>((0,l.wg)(),(0,l.j4)(v,{key:e.name,props:i,class:"services-table-th",onClick:t=>d(e.name)},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.label)+" ",1),(0,l.Wm)(a,{name:c.value.sortBy===e.name?c.value.isDescending?"sym_s_arrow_downward":"sym_s_arrow_upward":""},null,8,["name"])])),_:2},1032,["props","onClick"])))),128)),(0,l.Wm)(v)])),_:2},1032,["props"])])),body:(0,l.w5)((e=>[(0,l.Wm)(p,{props:e},{default:(0,l.w5)((()=>[(0,l.Wm)(g,{class:"td-main-table"},{default:(0,l.w5)((()=>[(0,l.Wm)(ht,{serviceName:e.row.name,version:e.row.version,startupFile:e.row.startupFile},null,8,["serviceName","version","startupFile"])])),_:2},1024),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.cols,(t=>((0,l.wg)(),(0,l.j4)(g,{key:t.name,props:e},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(t.value),1)])),_:2},1032,["props"])))),128)),(0,l.Wm)(g,{class:"text-right"},{default:(0,l.w5)((()=>[(0,l.Wm)(dt,{service:e.row},null,8,["service"])])),_:2},1024)])),_:2},1032,["props"])])),_:1},8,["rows","columns","filter","pagination","no-data-label"])}}});var kt=a(84277),xt=a(13119),qt=a(90136),Ut=a(31233),Tt=a(21682),Zt=a(67220);const Wt=St,It=Wt;_()(St,"components",{QTable:kt.Z,QInput:xt.Z,QIcon:$.Z,QSpace:qt.Z,QTr:Ut.Z,QTh:Tt.Z,QTd:Zt.Z});var Ct=a(15521);const Dt=(0,l.aZ)({__name:"ServicesNameInput",props:{serviceName:{}},emits:["update:serviceName","update:isValidServiceName"],setup(e,{emit:t}){const a=e,s=/^[a-zA-Z0-9-_]{1,255}$/,n=(0,i.iH)(a.serviceName),o=(0,l.Fl)((()=>s.test(n.value)));return(0,l.YP)(n,(e=>{t("update:serviceName",e),t("update:isValidServiceName",o.value)}),{immediate:!0}),(0,l.YP)((()=>a.serviceName),(e=>{n.value=e}),{immediate:!0}),(e,t)=>((0,l.wg)(),(0,l.j4)(Ct.Z,{value:n.value,"onUpdate:value":t[0]||(t[0]=e=>n.value=e),label:e.$t("servicesNameInput.serviceNameLabel"),icon:"sym_s_app_registration","max-length":"255",rules:[()=>0!==n.value.length||e.$t("servicesNameInput.requiredError"),()=>n.value.length<=255||e.$t("servicesNameInput.maxLengthError"),()=>/^[a-zA-Z0-9-_]+$/.test(n.value)||e.$t("servicesNameInput.nameRegexError")]},null,8,["value","label","rules"]))}}),Ft=Dt,Ht=Ft,Qt=(0,l.aZ)({__name:"ServicesVersionInput",props:{serviceVersion:{}},emits:["update:serviceVersion","update:isValidServiceVersion"],setup(e,{emit:t}){const a=e,s=/^[\w\-\.]{1,255}$/,n=(0,i.iH)(a.serviceVersion),o=(0,l.Fl)((()=>s.test(n.value)));return(0,l.YP)(n,(e=>{t("update:serviceVersion",e),t("update:isValidServiceVersion",o.value)}),{immediate:!0}),(0,l.YP)((()=>a.serviceVersion),(e=>{n.value=e}),{immediate:!0}),(e,t)=>((0,l.wg)(),(0,l.j4)(Ct.Z,{value:n.value,"onUpdate:value":t[0]||(t[0]=e=>n.value=e),label:e.$t("servicesVersionInput.versionLabel"),icon:"sym_s_code","max-length":"255",rules:[()=>0!==n.value.length||e.$t("servicesVersionInput.requiredError"),()=>n.value.length<=255||e.$t("servicesVersionInput.maxLengthError"),()=>/^[\w\-\.]+$/.test(n.value)||e.$t("servicesVersionInput.versionRegexError")]},null,8,["value","label","rules"]))}}),$t=Qt,Pt=$t;var Vt=a(94629);const Lt={class:"port-bindings-bg q-pa-sm"},zt={class:"title-h6 q-mb-sm"},At={class:"flex justify-between items-center q-mb-md"},jt={class:"col q-pr-sm"},Bt={class:"col q-px-sm"},Yt={class:"flex justify-between items-center"},Et={class:"col q-pr-sm"},Nt={class:"col q-px-sm"},Mt=(0,l.aZ)({__name:"ServicesPortBindings",props:{portBindings:{}},emits:["update:portBindings"],setup(e,{emit:t}){const a=e,n=/^(\d{1,5})$/,o=(0,i.iH)(a.portBindings),r=["http","https","ws","wss","grpc","grpcs","tcp","udp"],u=(0,i.iH)(0),c=(0,i.iH)({port:"",protocol:""}),m=(0,l.Fl)((()=>!(parseInt(c.value.port)>65535)&&(n.test(c.value.port)&&c.value.protocol.length>0)));function v(){o.value.push({port:parseInt(c.value.port),protocol:c.value.protocol}),u.value++,c.value={port:"",protocol:""}}function d(e){o.value.splice(e,1)}return(0,l.YP)(o,(e=>{t("update:portBindings",e)})),(0,l.YP)((()=>a.portBindings),(e=>{o.value=e})),(e,t)=>{const a=(0,l.up)("q-btn");return(0,l.wg)(),(0,l.iD)("div",Lt,[(0,l._)("div",zt,(0,s.zw)(e.$t("servicesPortBindings.titlePortBindings")),1),(0,l._)("div",At,[(0,l._)("div",jt,[((0,l.wg)(),(0,l.j4)(Ct.Z,{value:c.value.port,"onUpdate:value":t[0]||(t[0]=e=>c.value.port=e),label:e.$t("servicesPortBindings.hostPortInputLabel"),maxLength:"5",rules:[()=>n.test(c.value.port.toString())||e.$t("servicesPortBindings.portError"),()=>parseInt(c.value.port)<=65535||e.$t("servicesPortBindings.portError")],key:u.value},null,8,["value","label","rules"]))]),(0,l._)("div",Bt,[(0,l.Wm)(Vt.Z,{selected:c.value.protocol,"onUpdate:selected":t[1]||(t[1]=e=>c.value.protocol=e),options:r,dense:!1,label:e.$t("servicesPortBindings.protocolInputLabel")},null,8,["selected","label"])]),(0,l.Wm)(a,{onClick:t[2]||(t[2]=e=>v()),color:"primary",size:"md",dense:"",icon:"sym_s_add",disable:!1===m.value},null,8,["disable"])]),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(o.value,((t,s)=>((0,l.wg)(),(0,l.iD)("div",{key:s},[(0,l._)("div",Yt,[(0,l._)("div",Et,[(0,l.Wm)(Ct.Z,{value:t.port,"onUpdate:value":e=>t.port=e,label:e.$t("servicesPortBindings.hostPortInputLabel"),disable:""},null,8,["value","onUpdate:value","label"])]),(0,l._)("div",Nt,[(0,l.Wm)(Vt.Z,{selected:t.protocol,"onUpdate:selected":e=>t.protocol=e,options:r,dense:!1,label:e.$t("servicesPortBindings.protocolInputLabel"),disable:""},null,8,["selected","onUpdate:selected","label"])]),(0,l.Wm)(a,{onClick:e=>d(s),color:"negative",size:"md",dense:"",icon:"sym_s_delete"},null,8,["onClick"])])])))),128))])}}}),Rt=Mt,Kt=Rt;_()(Mt,"components",{QBtn:b.Z});const Xt={class:"flex justify-between items-center"},Ot=["innerHTML"],Gt=(0,l.aZ)({__name:"ServicesCommandInput",props:{serviceCommand:{}},emits:["update:serviceCommand","update:isValidServiceCommand"],setup(e,{emit:t}){const a=e,s=/^[\w\s-.\/\\]{1,255}$/,n=(0,i.iH)(a.serviceCommand),o=(0,l.Fl)((()=>s.test(n.value)));return(0,l.YP)(n,(e=>{t("update:serviceCommand",e)}),{immediate:!0}),(0,l.YP)(o,(e=>{t("update:isValidServiceCommand",e)})),(0,l.YP)((()=>a.serviceCommand),(e=>{n.value=e}),{immediate:!0}),(e,t)=>{const a=(0,l.up)("q-tooltip"),s=(0,l.up)("q-icon");return(0,l.wg)(),(0,l.iD)("div",Xt,[(0,l.Wm)(Ct.Z,{value:n.value,"onUpdate:value":t[0]||(t[0]=e=>n.value=e),placeholder:e.$t("servicesCommandInput.serviceCommandPlaceholder"),icon:"sym_s_terminal","max-length":"255",rules:[()=>0!==n.value.length||e.$t("servicesCommandInput.requiredError"),()=>n.value.length<=255||e.$t("servicesCommandInput.maxLengthError"),()=>/^[\w\s-.\/\\]+$/.test(n.value)||e.$t("servicesCommandInput.commandRegexError")],style:{width:"97%"}},null,8,["value","placeholder","rules"]),(0,l.Wm)(s,{name:"sym_s_help",size:"20px",class:"cursor-pointer",style:{position:"absolute",right:"30px",top:"100px"}},{default:(0,l.w5)((()=>[(0,l.Wm)(a,{anchor:"top middle",self:"bottom middle",class:"bg-primary"},{default:(0,l.w5)((()=>[(0,l._)("span",{innerHTML:e.$t("servicesCommandInput.helpCommand")},null,8,Ot)])),_:1})])),_:1})])}}}),Jt=Gt,ea=Jt;_()(Gt,"components",{QIcon:$.Z,QTooltip:P.Z});var ta=function(e,t,a,l){function s(e){return e instanceof a?e:new a((function(t){t(e)}))}return new(a||(a=Promise))((function(a,i){function n(e){try{r(l.next(e))}catch(t){i(t)}}function o(e){try{r(l["throw"](e))}catch(t){i(t)}}function r(e){e.done?a(e.value):s(e.value).then(n,o)}r((l=l.apply(e,t||[])).next())}))};const aa={class:"flex justify-between items-center"},la={class:"col q-mr-sm"},sa={class:"col q-ml-sm"},ia=["textContent"],na={class:"service-tab-custom-box"},oa={class:"row justify-between items-center"},ra={class:"col-2"},ua={class:"col"},ca={class:"row justify-between items-center"},ma={class:"col-2"},va={class:"col"},da=(0,l.aZ)({__name:"ServicesTabCustom",setup(e){const t=(0,U.QT)().t,a=lt(),n=(0,i.iH)([]),o=(0,i.iH)(null),r=(0,i.iH)(0),u=(0,i.iH)(""),c=(0,i.iH)(""),m=(0,i.iH)(""),v=(0,i.iH)("other"),d=(0,i.iH)(!1),p=(0,i.iH)(!1),g=(0,i.iH)(!1),b=(0,i.iH)("startCmd"),w=(0,i.iH)([{label:t("servicesTabCustom.application"),value:"application"},{label:t("servicesTabCustom.runtime"),value:"runtime"},{label:t("servicesTabCustom.database"),value:"database"},{label:t("servicesTabCustom.webserver"),value:"webserver"},{label:t("servicesTabCustom.mom"),value:"mom"},{label:t("servicesTabCustom.monitoring"),value:"monitoring"},{label:t("servicesTabCustom.logging"),value:"logging"},{label:t("servicesTabCustom.security"),value:"security"},{label:t("servicesTabCustom.backup"),value:"backup"},{label:t("servicesTabCustom.system"),value:"system"},{label:t("servicesTabCustom.other"),value:"other"}]);(0,l.YP)(b,(()=>{r.value++,o.value=null,u.value=""}));const _=(0,l.Fl)((()=>"startCmd"===b.value?"display: block;":"visibility:hidden;")),f=(0,l.Fl)((()=>"file_uploader"===b.value?"display: block;":"visibility:hidden;")),y=(0,l.Fl)((()=>d.value&&p.value&&(g.value||null!==o.value))),h=(0,l.Fl)({get:()=>a.getShowDialogInstallService,set:e=>a.setShowDialogInstallService(e)}),S=(0,l.Fl)({get:()=>a.getKeyServicesStatusTable,set:e=>{a.keyServicesStatusTable=e}});function x(){h.value=!1}function Z(){return ta(this,void 0,void 0,(function*(){return(0,T.Q)(),new Promise(((e,a)=>{const l=new tt.Z,s=new FormData;s.append("files",o.value),s.append("destinationPath","/app/"),l.uploadFile(s).then((()=>{(0,T.Z)(),e()})).catch((e=>{(0,q.s9)(e.message,t("servicesTabCustom.uploadError")),console.error(e),(0,T.Z)(),a(e)}))}))}))}function W(){var e;return ta(this,void 0,void 0,(function*(){if("file_uploader"===b.value)try{yield Z()}catch(r){throw(0,q.c0)({msg:t("servicesTabCustom.uploadError"),type:"negative",position:"bottom"}),console.error(r),r}let a=u.value;!1===g.value&&(a=`/app/${null===(e=o.value)||void 0===e?void 0:e.name}`);const l=new tt.Z,s=!1,i=!0;(0,T.Q)(),l.installCustomService({name:m.value,version:c.value,startCmd:a,portBindings:n.value,type:v.value}).then((()=>{(0,q.LX)(t("servicesTabCustom.installSuccess"),"bottom",s,i),S.value++,x()})).catch((e=>{(0,q.s9)(e.response.data,t("servicesTabCustom.installError"),"bottom",s,i),console.error(e)})).finally((()=>{(0,T.Z)()}))}))}return(e,t)=>{const a=(0,l.up)("q-card-section"),i=(0,l.up)("q-radio"),h=(0,l.up)("q-icon"),S=(0,l.up)("q-file"),q=(0,l.up)("q-card"),U=(0,l.up)("q-expansion-item"),T=(0,l.up)("q-list"),Z=(0,l.up)("q-card-actions");return(0,l.wg)(),(0,l.j4)(q,null,{default:(0,l.w5)((()=>[(0,l.Wm)(a,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l._)("div",aa,[(0,l._)("div",la,[(0,l.Wm)(Ht,{serviceName:m.value,"onUpdate:serviceName":t[0]||(t[0]=e=>m.value=e),"onUpdate:isValidServiceName":t[1]||(t[1]=e=>d.value=e)},null,8,["serviceName"])]),(0,l._)("div",sa,[(0,l.Wm)(Pt,{serviceVersion:c.value,"onUpdate:serviceVersion":t[2]||(t[2]=e=>c.value=e),"onUpdate:isValidServiceVersion":t[3]||(t[3]=e=>p.value=e)},null,8,["serviceVersion"])])])])),_:1}),(0,l.Wm)(a,null,{default:(0,l.w5)((()=>[(0,l._)("h6",{style:{size:"1em"},class:"q-ma-sm",textContent:(0,s.zw)(e.$t("servicesTabCustom.labelExecut"))},null,8,ia),(0,l._)("div",na,[(0,l._)("div",oa,[(0,l._)("div",ra,[(0,l.Wm)(i,{style:{"margin-top":"-18px"},dense:"",modelValue:b.value,"onUpdate:modelValue":t[4]||(t[4]=e=>b.value=e),label:e.$t("servicesTabCustom.labelRadioCommand"),val:"startCmd"},null,8,["modelValue","label"])]),(0,l._)("div",ua,[((0,l.wg)(),(0,l.j4)(ea,{style:(0,s.j5)(_.value),serviceCommand:u.value,"onUpdate:serviceCommand":t[5]||(t[5]=e=>u.value=e),targetType:b.value,key:r.value,"onUpdate:isValidServiceCommand":t[6]||(t[6]=e=>g.value=e)},null,8,["style","serviceCommand","targetType"]))])]),(0,l._)("div",ca,[(0,l._)("div",ma,[(0,l.Wm)(i,{style:{"margin-top":"-18px"},dense:"",modelValue:b.value,"onUpdate:modelValue":t[7]||(t[7]=e=>b.value=e),label:e.$t("servicesTabCustom.labelRadioFile"),val:"file_uploader"},null,8,["modelValue","label"])]),(0,l._)("div",va,[((0,l.wg)(),(0,l.j4)(S,{modelValue:o.value,"onUpdate:modelValue":t[8]||(t[8]=e=>o.value=e),color:"primary",counter:"",style:(0,s.j5)(f.value),filled:"","use-chips":"",key:r.value,label:e.$t("servicesTabCustom.labelUploadFile"),cursor:"pointer",type:"file"},{prepend:(0,l.w5)((()=>[(0,l.Wm)(h,{name:"sym_s_upload",size:"20px"})])),_:1},8,["modelValue","style","label"]))])])]),(0,l.Wm)(Vt.Z,{selected:v.value,"onUpdate:selected":t[9]||(t[9]=e=>v.value=e),label:e.$t("servicesTabCustom.typeSelect"),options:w.value},null,8,["selected","label","options"])])),_:1}),(0,l.Wm)(a,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(T,{bordered:""},{default:(0,l.w5)((()=>[(0,l.Wm)(U,{"expand-separator":"",icon:"sym_s_settings",label:e.$t("servicesTabCustom.advancedSettingsLabel"),class:"services-tab-installable-icon"},{default:(0,l.w5)((()=>[(0,l.Wm)(q,{class:"q-ma-sm"},{default:(0,l.w5)((()=>[(0,l.Wm)(a,null,{default:(0,l.w5)((()=>[(0,l.Wm)(Kt,{portBindings:n.value,"onUpdate:portBindings":t[10]||(t[10]=e=>n.value=e)},null,8,["portBindings"])])),_:1})])),_:1})])),_:1},8,["label"])])),_:1})])),_:1}),(0,l.Wm)(Z,{align:"between",class:"q-pt-md q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(k.Z,{label:e.$t("servicesTabCustom.cancelButton"),color:"grey-7",onClick:t[11]||(t[11]=e=>x())},null,8,["label"]),(0,l.Wm)(k.Z,{disable:!1===y.value,label:e.$t("servicesTabCustom.installButton"),icon:"sym_s_install_desktop",onClick:t[12]||(t[12]=e=>W())},null,8,["disable","label"])])),_:1})])),_:1})}}});var pa=a(33837),ga=a(13246),ba=a(50651),wa=a(11821);const _a=da,fa=_a;_()(da,"components",{QCard:E.Z,QCardSection:R.Z,QRadio:Q.Z,QFile:pa.Z,QIcon:$.Z,QList:ga.Z,QExpansionItem:ba.Z,QCardActions:wa.Z});var ya=a(18892);const ha={class:"flex justify-between items-center"},Sa={class:"title-dialog"},ka=(0,l.aZ)({__name:"StartupFileDialog",props:{showStartupFileDialog:{type:Boolean}},emits:["update:showStartupFileDialog","update:startupFilePath"],setup(e,{emit:t}){const a=e,n=(0,i.iH)(0),o=(0,i.iH)([]),r=(0,i.iH)([]),u=(0,i.iH)("/app"),c=(0,i.iH)(!1),m=()=>{c.value=!1};function v(){const e=new ya.Z;(0,T.Q)(),e.getCurrentPath(u.value).then((e=>{if(r.value=e.data.body,"/app"===u.value)return d(e.data.body),void n.value++;p(o.value,u.value,e.data.body),n.value++})).catch((e=>{console.error(e)})).finally((()=>{setTimeout((()=>{(0,T.Z)()}),500)}))}function d(e){o.value=[{label:"/app",path:"/app",icon:"sym_s_home",iconColor:"grey-7",children:e.map((e=>Object.assign({label:e.name,path:e.path,icon:"directory"===e.mimeType?"sym_s_folder":"sym_s_description",iconColor:"directory"===e.mimeType?"yellow-9":"grey-7"},".trash"===e.name&&{icon:"sym_s_delete",iconColor:"grey-8"})))}]}function p(e,a,l){const s=e=>{for(const t of e){if(t.path===a)return t;if(t.children){const e=s(t.children);if(e)return e}}},i=s(e);if(!1!==i){if("sym_s_description"===i.icon)return t("update:startupFilePath",i.path),void m();i.icon="sym_s_folder_open",i.children=l.map((e=>Object.assign({label:e.name,path:e.path,icon:"directory"===e.mimeType?"sym_s_folder":"sym_s_description",iconColor:"directory"===e.mimeType?"yellow-9":"grey-7"},".trash"===e.name&&{icon:"sym_s_delete",iconColor:"grey-8"})))}}return(0,l.YP)((()=>a.showStartupFileDialog),(e=>{c.value=e,!1!==e&&v()}),{immediate:!0}),(0,l.YP)(c,(e=>{t("update:showStartupFileDialog",e)})),(0,l.YP)(u,(()=>{v()})),(e,t)=>{const a=(0,l.up)("q-btn"),i=(0,l.up)("q-tree"),r=(0,l.up)("q-card-section"),v=(0,l.up)("q-card-actions"),d=(0,l.up)("q-card"),p=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(p,{modelValue:c.value,"onUpdate:modelValue":t[3]||(t[3]=e=>c.value=e),persistent:""},{default:(0,l.w5)((()=>[(0,l.Wm)(d,{flat:"",style:{width:"700px","max-width":"80vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",ha,[(0,l._)("div",Sa,(0,s.zw)(e.$t("startupFileDialog.title")),1),(0,l.Wm)(a,{icon:"sym_s_close",flat:"",round:"",dense:"",onClick:t[0]||(t[0]=e=>m())})]),(0,l.Wm)(r,{class:"q-pa-none q-mt-md",style:{"overflow-y":"auto","max-height":"70vh"}},{default:(0,l.w5)((()=>[((0,l.wg)(),(0,l.j4)(i,{key:n.value,nodes:o.value,selected:u.value,"onUpdate:selected":t[1]||(t[1]=e=>u.value=e),"node-key":"path","tick-strategy":"none","default-expand-all":"",style:{"font-size":"0.809rem"}},null,8,["nodes","selected"]))])),_:1}),(0,l.Wm)(v,{align:"between",class:"q-pt-md q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(k.Z,{label:e.$t("startupFileDialog.cancelBtn"),color:"grey-7",onClick:t[2]||(t[2]=e=>m())},null,8,["label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var xa=a(84749);const qa=ka,Ua=qa;_()(ka,"components",{QDialog:Y.Z,QCard:E.Z,QBtn:b.Z,QCardSection:R.Z,QTree:xa.Z,QCardActions:wa.Z});const Ta={class:"q-pa-md startup-file-box"},Za={class:"title-h6 q-mb-md"},Wa={style:{"font-size":"0.9708rem"}},Ia={class:"flex justify-between items-center q-mt-md"},Ca={style:{width:"72%"}},Da=(0,l.aZ)({__name:"StartupFile",props:{selectedStartupFile:{}},emits:["update:selectedStartupFile","update:isValidStartupFile"],setup(e,{emit:t}){const a=e,n=(0,i.iH)(!1),o=(0,i.iH)(""),r=(0,i.iH)(0),u=(0,l.Fl)((()=>""!==o.value&&o.value.length<2046));return(0,l.YP)((()=>a.selectedStartupFile),(e=>{o.value=e}),{immediate:!0}),(0,l.YP)((()=>o.value),(e=>{t("update:selectedStartupFile",e)})),(0,l.YP)(n,(e=>{!1!==e&&r.value++})),(0,l.YP)(u,(e=>{t("update:isValidStartupFile",e)})),(e,t)=>{const a=(0,l.up)("q-input");return(0,l.wg)(),(0,l.iD)(l.HY,null,[((0,l.wg)(),(0,l.j4)(Ua,{showStartupFileDialog:n.value,"onUpdate:showStartupFileDialog":t[0]||(t[0]=e=>n.value=e),"onUpdate:startupFilePath":t[1]||(t[1]=e=>o.value=e),key:r.value},null,8,["showStartupFileDialog"])),(0,l._)("div",Ta,[(0,l._)("div",Za,(0,s.zw)(e.$t("servicesTabInstallable.titleStartupFile")),1),(0,l._)("div",Wa,(0,s.zw)(e.$t("servicesTabInstallable.helpText")),1),(0,l._)("div",Ia,[(0,l.Wm)(k.Z,{label:e.$t("servicesTabInstallable.selectStartupFile"),outline:!0,color:"primary",onClick:t[2]||(t[2]=e=>n.value=!0),style:{top:"2px"},icon:"sym_s_description"},null,8,["label"]),(0,l._)("div",Ca,[(0,l.Wm)(a,{filled:"",modelValue:o.value,"onUpdate:modelValue":t[3]||(t[3]=e=>o.value=e),label:e.$t("servicesTabInstallable.startupFileLabel")},null,8,["modelValue","label"])])])])],64)}}}),Fa=Da,Ha=Fa;_()(Da,"components",{QInput:xt.Z});const Qa={class:"flex justify-between items-center q-my-md"},$a={class:"col q-mr-sm"},Pa={class:"col q-ml-sm"},Va={key:0,class:"q-mb-lg"},La=(0,l.aZ)({__name:"ServicesTabInstallable",setup(e){const t=(0,U.QT)().t,a=lt(),s=new tt.Z,n=(0,i.iH)(!1),o=(0,i.iH)(0),r=(0,i.iH)(0),u=(0,i.iH)(""),c=(0,i.iH)(""),m=(0,i.iH)([]),v=(0,i.iH)(""),d=(0,i.iH)(!1),p=(0,i.iH)(!1),g=(0,i.iH)([]),b=(0,i.iH)([]),w=(0,i.iH)([]),_=(0,l.Fl)({get:()=>a.getShowDialogInstallService,set:e=>a.setShowDialogInstallService(e)}),f=(0,l.Fl)((()=>!1===p.value||!0===d.value)),y=(0,l.Fl)((()=>a.getServicesStatusList)),h=(0,l.Fl)({get:()=>a.getKeyServicesStatusTable,set:e=>{a.keyServicesStatusTable=e}});function S(e){p.value=!1,g.value.forEach((t=>{t.name===e&&"multi"===t.nature&&(p.value=!0)}))}function x(){n.value=!0,g.value=[],s.getServicesInstallable().then((e=>{g.value=e.data.body.installableServices})).catch((e=>{console.error(e)})).finally((()=>{setTimeout((()=>{n.value=!1}),1e3)}))}function Z(){b.value=[],g.value.forEach((e=>{let t=!1;const a={value:e.name,label:(0,pt.R)(e.name)};y.value.forEach((a=>{e.name===a.name&&"solo"===a.nature&&(t=!0)})),t||(b.value.push(a),r.value++)})),u.value=b.value[0].value}function W(){o.value++,w.value=[],g.value.forEach((e=>{e.name===u.value&&e.versions.forEach((e=>{w.value.push(e)}))})),c.value=w.value[0]}function I(){_.value=!1}function C(){(0,T.Q)();const e=new tt.Z;let a={name:u.value,version:c.value,portBindings:m.value};p.value&&(a.startupFile=v.value);const l=!1,s=!0;e.installService(a).then((()=>{(0,q.LX)(t("servicesTabInstallable.installSuccess"),"bottom",l,s),h.value++,I()})).catch((e=>{console.error(e),(0,q.s9)(e.response.data,t("servicesTabInstallable.installError"),"bottom",l,s)})).finally((()=>{(0,T.Z)()}))}return(0,l.bv)((()=>{x()})),(0,l.YP)(g,(()=>{0!==g.value.length&&Z()})),(0,l.YP)(u,(e=>{W(),S(e)}),{immediate:!0}),(e,t)=>{const a=(0,l.up)("q-skeleton"),s=(0,l.up)("q-card-section"),i=(0,l.up)("q-card"),g=(0,l.up)("q-expansion-item"),_=(0,l.up)("q-list"),y=(0,l.up)("q-card-actions");return!0===n.value?((0,l.wg)(),(0,l.j4)(a,{key:0,animation:"blink",height:"400px"})):((0,l.wg)(),(0,l.j4)(i,{key:1},{default:(0,l.w5)((()=>[(0,l.Wm)(s,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l._)("div",Qa,[(0,l._)("div",$a,[((0,l.wg)(),(0,l.j4)(Vt.Z,{selected:u.value,"onUpdate:selected":t[0]||(t[0]=e=>u.value=e),label:e.$t("servicesTabInstallable.serviceLabel"),options:b.value,key:r.value},null,8,["selected","label","options"]))]),(0,l._)("div",Pa,[((0,l.wg)(),(0,l.j4)(Vt.Z,{selected:c.value,"onUpdate:selected":t[1]||(t[1]=e=>c.value=e),label:e.$t("servicesTabInstallable.versionLabel"),options:w.value,key:o.value},null,8,["selected","label","options"]))])]),!0===p.value?((0,l.wg)(),(0,l.iD)("div",Va,[(0,l.Wm)(Ha,{selectedStartupFile:v.value,"onUpdate:selectedStartupFile":t[2]||(t[2]=e=>v.value=e),"onUpdate:isValidStartupFile":t[3]||(t[3]=e=>d.value=e)},null,8,["selectedStartupFile"])])):(0,l.kq)("",!0),(0,l.Wm)(_,{bordered:""},{default:(0,l.w5)((()=>[(0,l.Wm)(g,{"expand-separator":"",icon:"sym_s_settings",label:e.$t("servicesTabInstallable.advancedSettingsLabel"),class:"services-tab-installable-icon"},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{class:"q-ma-md"},{default:(0,l.w5)((()=>[(0,l.Wm)(s,null,{default:(0,l.w5)((()=>[(0,l.Wm)(Kt,{portBindings:m.value,"onUpdate:portBindings":t[4]||(t[4]=e=>m.value=e)},null,8,["portBindings"])])),_:1})])),_:1})])),_:1},8,["label"])])),_:1})])),_:1}),(0,l.Wm)(y,{align:"between",class:"q-pt-md q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(k.Z,{label:e.$t("servicesTabInstallable.cancelButton"),color:"grey-7",onClick:t[5]||(t[5]=e=>I())},null,8,["label"]),(0,l.Wm)(k.Z,{disable:!1===f.value,label:e.$t("servicesTabInstallable.installButton"),icon:"sym_s_install_desktop",onClick:t[6]||(t[6]=e=>C())},null,8,["disable","label"])])),_:1})])),_:1}))}}});var za=a(490);const Aa=La,ja=Aa;_()(La,"components",{QSkeleton:N.ZP,QCard:E.Z,QCardSection:R.Z,QList:ga.Z,QExpansionItem:ba.Z,QCardActions:wa.Z,QItem:za.Z});const Ba=(0,l.aZ)({__name:"ServicesInstallDialogTabs",setup(e){const t=(0,i.iH)("installable");return(e,a)=>{const s=(0,l.up)("q-tab"),i=(0,l.up)("q-tabs"),n=(0,l.up)("q-separator"),o=(0,l.up)("q-tab-panel"),r=(0,l.up)("q-tab-panels");return(0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l.Wm)(i,{modelValue:t.value,"onUpdate:modelValue":a[0]||(a[0]=e=>t.value=e),"active-color":"primary","indicator-color":"primary",align:"justify",class:"text-grey","no-caps":""},{default:(0,l.w5)((()=>[(0,l.Wm)(s,{name:"installable",class:"overview-services-tabs",icon:"sym_s_install_desktop",label:e.$t("servicesInstallDialogTabs.installableForm")},null,8,["label"]),(0,l.Wm)(s,{name:"custom",class:"overview-services-tabs",icon:"sym_s_app_registration",label:e.$t("servicesInstallDialogTabs.customForm")},null,8,["label"])])),_:1},8,["modelValue"]),(0,l.Wm)(n),(0,l.Wm)(r,{modelValue:t.value,"onUpdate:modelValue":a[1]||(a[1]=e=>t.value=e),animated:""},{default:(0,l.w5)((()=>[(0,l.Wm)(o,{name:"installable",class:"q-pa-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(ja)])),_:1}),(0,l.Wm)(o,{name:"custom",class:"q-pa-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(fa)])),_:1})])),_:1},8,["modelValue"])],64)}}});var Ya=a(47817),Ea=a(70900),Na=a(50926),Ma=a(89800),Ra=a(84106);const Ka=Ba,Xa=Ka;_()(Ba,"components",{QTabs:Ya.Z,QTab:Ea.Z,QSeparator:Na.Z,QTabPanels:Ma.Z,QTabPanel:Ra.Z});const Oa={class:"flex justify-between items-center"},Ga={class:"title-dialog"},Ja=(0,l.aZ)({__name:"ServicesInstallDialog",setup(e){const t=lt(),a=(0,l.Fl)({get:()=>t.getShowDialogInstallService,set:e=>t.setShowDialogInstallService(e)});return(e,t)=>{const i=(0,l.up)("q-btn"),n=(0,l.up)("q-card-section"),o=(0,l.up)("q-card"),r=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(r,{modelValue:a.value,"onUpdate:modelValue":t[1]||(t[1]=e=>a.value=e),persistent:""},{default:(0,l.w5)((()=>[(0,l.Wm)(o,{flat:"",style:{width:"950px","max-width":"90vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",Oa,[(0,l._)("div",Ga,(0,s.zw)(e.$t("servicesInstallDialog.titleInstallService")),1),(0,l.Wm)(i,{icon:"sym_s_close",flat:"",round:"",dense:"",onClick:t[0]||(t[0]=e=>a.value=!1)})]),(0,l.Wm)(n,{class:"q-pa-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(Xa)])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),el=Ja,tl=el;_()(Ja,"components",{QDialog:Y.Z,QCard:E.Z,QBtn:b.Z,QCardSection:R.Z});var al=a(89906);const ll=(0,l.aZ)({__name:"ServicesUninstallDialog",setup(e){const t=(0,U.QT)().t,a=new tt.Z,s=lt(),i=(0,l.Fl)((()=>s.getSelectedService.name)),n=(0,l.Fl)({get:()=>s.getShowDialogUninstallService,set:e=>{s.setShowDialogUninstallService(e)}}),o=(0,l.Fl)({get:()=>s.getKeyServicesStatusTable,set:e=>{s.keyServicesStatusTable=e}}),r=(0,l.Fl)({get:()=>s.getIsLoadingServicesStatus,set:e=>{s.setIsLoadingServicesStatus(e)}});function u(){r.value=!0,(0,T.Q)(t("servicesUninstallDialog.uninstallLoading")),a.updateServiceStatus({name:i.value,status:"uninstalled"}).then((()=>{(0,q.LX)(t("servicesUninstallDialog.uninstallSuccess")),n.value=!1,o.value++})).catch((e=>{console.error(e),(0,q.s9)(e.response.data,t("servicesUninstallDialog.uninstallError"))})).finally((()=>{r.value=!1,(0,T.Z)()}))}return(e,t)=>((0,l.wg)(),(0,l.j4)(al.Z,{showDeleteDialog:n.value,"onUpdate:showDeleteDialog":t[2]||(t[2]=e=>n.value=e),titleDialog:e.$t("servicesUninstallDialog.uninstallDialogTitle"),messageToDelete:e.$t("servicesUninstallDialog.uninstallDialogDescription",{serviceName:i.value}),warningToDelete:e.$t("servicesUninstallDialog.warningUninstallService")},{"card-actions":(0,l.w5)((()=>[(0,l.Wm)(k.Z,{label:e.$t("servicesUninstallDialog.uninstallDialogCancelBtn"),color:"grey-7",onClick:t[0]||(t[0]=e=>n.value=!1)},null,8,["label"]),(0,l.Wm)(k.Z,{color:"negative",label:e.$t("servicesUninstallDialog.uninstallDialogConfirmBtn"),onClick:t[1]||(t[1]=e=>u())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","messageToDelete","warningToDelete"]))}}),sl=ll,il=sl,nl={class:"flex justify-between items-center"},ol={class:"title-dialog"},rl={class:"flex justify-between items-center"},ul={class:"col q-mr-sm"},cl={class:"col q-ml-sm"},ml=(0,l.aZ)({__name:"ServicesUpdateDialog",setup(e){const t=(0,U.QT)().t,a=lt(),n=(0,i.iH)([]),o=(0,i.iH)(""),r=(0,i.iH)(""),u=(0,i.iH)(""),c=(0,i.iH)(""),m=(0,i.iH)(!1),v=(0,i.iH)(!1),d=(0,i.iH)(!1),p=(0,l.Fl)((()=>"custom"!==b.value.nature&&"solo"!==b.value.nature?!0===m.value&&!0===d.value:m.value)),g=(0,l.Fl)({get:()=>a.getShowDialogUpdateService,set:e=>a.setShowDialogUpdateService(e)}),b=(0,l.Fl)((()=>a.getSelectedService)),w=(0,l.Fl)({get:()=>a.getKeyServicesStatusTable,set:e=>{a.keyServicesStatusTable=e}});function _(){g.value=!1}function f(){const e=new tt.Z;(0,T.Q)(),e.updateServiceStatus({name:c.value,version:u.value,command:r.value,startupFile:o.value,portBindings:n.value}).then((()=>{(0,q.LX)(t("servicesUpdateDialog.updateSuccess")),w.value++,_()})).catch((e=>{(0,q.s9)(e.response.data,t("servicesUpdateDialog.updateError")),console.error(e)})).finally((()=>{(0,T.Z)()}))}return(0,l.YP)(g,(e=>{!1!==e&&(n.value=b.value.portBindings?b.value.portBindings:[],o.value=b.value.startupFile?b.value.startupFile:"",r.value=b.value.command,u.value=b.value.version,c.value=b.value.name)})),(e,t)=>{const a=(0,l.up)("q-btn"),i=(0,l.up)("q-card-section"),w=(0,l.up)("q-card"),y=(0,l.up)("q-expansion-item"),h=(0,l.up)("q-list"),S=(0,l.up)("q-card-actions"),x=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(x,{modelValue:g.value,"onUpdate:modelValue":t[11]||(t[11]=e=>g.value=e),persistent:""},{default:(0,l.w5)((()=>[(0,l.Wm)(w,{flat:"",style:{width:"950px","max-width":"90vw"},class:"dialog-card-bg"},{default:(0,l.w5)((()=>[(0,l._)("div",nl,[(0,l._)("div",ol,(0,s.zw)(e.$t("servicesUpdateDialog.titleUpdateService")),1),(0,l.Wm)(a,{icon:"sym_s_close",flat:"",round:"",dense:"",onClick:t[0]||(t[0]=e=>g.value=!1)})]),(0,l.Wm)(i,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l._)("div",rl,[(0,l._)("div",ul,[(0,l.Wm)(Ht,{disable:!0,serviceName:c.value,"onUpdate:serviceName":t[1]||(t[1]=e=>c.value=e)},null,8,["serviceName"])]),(0,l._)("div",cl,[(0,l.Wm)(Pt,{serviceVersion:u.value,"onUpdate:serviceVersion":t[2]||(t[2]=e=>u.value=e),"onUpdate:isValidServiceVersion":t[3]||(t[3]=e=>m.value=e)},null,8,["serviceVersion"])])]),"custom"===b.value.nature?((0,l.wg)(),(0,l.j4)(ea,{key:0,serviceCommand:r.value,"onUpdate:serviceCommand":t[4]||(t[4]=e=>r.value=e),"onUpdate:isValidServiceCommand":t[5]||(t[5]=e=>v.value=e),class:"q-mt-sm"},null,8,["serviceCommand"])):(0,l.kq)("",!0),"custom"!==b.value.nature&&"solo"!==b.value.nature?((0,l.wg)(),(0,l.j4)(Ha,{key:1,selectedStartupFile:o.value,"onUpdate:selectedStartupFile":t[6]||(t[6]=e=>o.value=e),class:"q-mt-sm","onUpdate:isValidStartupFile":t[7]||(t[7]=e=>d.value=e)},null,8,["selectedStartupFile"])):(0,l.kq)("",!0)])),_:1}),(0,l.Wm)(i,{class:"q-pt-none q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(h,{bordered:""},{default:(0,l.w5)((()=>[(0,l.Wm)(y,{"expand-separator":"",icon:"sym_s_settings",label:e.$t("servicesUpdateDialog.advancedSettingsLabel"),class:"services-update-icon"},{default:(0,l.w5)((()=>[(0,l.Wm)(w,{class:"q-ma-md"},{default:(0,l.w5)((()=>[(0,l.Wm)(i,{class:"q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(Kt,{portBindings:n.value,"onUpdate:portBindings":t[8]||(t[8]=e=>n.value=e)},null,8,["portBindings"])])),_:1})])),_:1})])),_:1},8,["label"])])),_:1})])),_:1}),(0,l.Wm)(S,{align:"between",class:"q-pt-md q-px-none"},{default:(0,l.w5)((()=>[(0,l.Wm)(k.Z,{label:e.$t("servicesUpdateDialog.cancelButton"),color:"grey-7",onClick:t[9]||(t[9]=e=>_())},null,8,["label"]),(0,l.Wm)(k.Z,{disable:!1===p.value,label:e.$t("servicesUpdateDialog.updateButton"),icon:"sym_s_install_desktop",color:"primary",onClick:t[10]||(t[10]=e=>f())},null,8,["disable","label"])])),_:1})])),_:1})])),_:1},8,["modelValue"])}}}),vl=ml,dl=vl;_()(ml,"components",{QDialog:Y.Z,QCard:E.Z,QBtn:b.Z,QCardSection:R.Z,QList:ga.Z,QExpansionItem:ba.Z,QCardActions:wa.Z});const pl={class:"title-h4"},gl=(0,l.aZ)({__name:"ServicesStatusIndex",setup(e){const t=lt(),a=(0,Ne.V)(),n=new tt.Z,o=(0,i.iH)(),r=(0,i.iH)([]),u=(0,l.Fl)((()=>t.getKeyServicesStatusTable)),c=(0,l.Fl)((()=>a.getSelectedRefreshRate));function m(){o.value&&clearInterval(o.value),o.value=setInterval((()=>{n.getServicesStatus().then((e=>{const a=e.data.body.installedServices;0!==a.length&&(t.setServicesStatusList(a),r.value=v(a))})).catch((e=>{console.error(e)}))}),1e3*c.value)}function v(e){return e.forEach((e=>{e.metrics||(e.metrics={cpuUsagePercent:0,memUsagePercent:0,pids:[],uptimeSecs:0})})),e}return(0,l.bv)((()=>{n.getServicesStatus().then((e=>{const a=e.data.body.installedServices;0!==a.length&&(t.setServicesStatusList(a),r.value=v(a))})).catch((e=>{console.error(e)})).finally((()=>{m()}))})),(0,l.Ah)((()=>{clearInterval(o.value)})),(0,l.YP)(c,(()=>{m()})),(0,l.YP)(u,(()=>{m()})),(e,t)=>((0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l.Wm)(tl),(0,l.Wm)(il),(0,l.Wm)(dl),(0,l._)("div",pl,(0,s.zw)(e.$t("servicesStatusIndex.titleServicesStatus")),1),(0,l.Wm)(It,{servicesStatusList:r.value},null,8,["servicesStatusList"])],64))}}),bl=gl,wl=bl,_l={class:"title-h4"},fl={class:"flex justify-start"},yl=(0,l.aZ)({__name:"OverviewQuickServicesLinks",setup(e){const t=(0,U.QT)().t,a=[{name:t("quickLinks.linkApps"),icon:"apps",path:"/apps"},{name:t("quickLinks.linkDatabases"),icon:"database",path:"/databases"},{name:t("quickLinks.linkFiles"),icon:"folder",path:"/file-manager"},{name:t("quickLinks.linkBackups"),icon:"backup",path:"/backups"},{name:t("quickLinks.linkDomains"),icon:"language",path:"/domains"},{name:t("quickLinks.linkMetrics"),icon:"bar_chart",path:"/metrics"},{name:t("quickLinks.linkLogs"),icon:"receipt",path:"/logs"},{name:t("quickLinks.linkTerminal"),icon:"terminal",path:"/terminal"}];return(e,n)=>{const o=(0,l.up)("q-btn");return(0,l.wg)(),(0,l.iD)(l.HY,null,[(0,l._)("div",_l,(0,s.zw)((0,i.SU)(t)("quickLinks.titleQuickLinks")),1),(0,l._)("div",fl,[((0,l.wg)(),(0,l.iD)(l.HY,null,(0,l.Ko)(a,(e=>(0,l.Wm)(o,{key:e.name,icon:"sym_s_"+e.icon,label:e.name,to:e.path,class:"q-my-md q-mx-xs",style:{width:"90px",height:"90px"},stack:"",outline:"","no-caps":""},null,8,["icon","label","to"]))),64))])],64)}}}),hl=yl,Sl=hl;_()(yl,"components",{QBtn:b.Z});var kl={class:"row q-mt-md"},xl={class:"col"},ql={class:"col q-ml-md hidden"};const Ul={__name:"OverviewIndex",setup:function(e){return function(e,t){var a=(0,l.up)("q-card-section"),s=(0,l.up)("q-card"),i=(0,l.up)("q-page");return(0,l.wg)(),(0,l.j4)(i,{padding:""},{default:(0,l.w5)((function(){return[(0,l.Wm)(s,{flat:"",class:"q-mb-md"},{default:(0,l.w5)((function(){return[(0,l.Wm)(a,null,{default:(0,l.w5)((function(){return[(0,l.Wm)(ee)]})),_:1})]})),_:1}),(0,l.Wm)(s,{flat:""},{default:(0,l.w5)((function(){return[(0,l.Wm)(a,null,{default:(0,l.w5)((function(){return[(0,l.Wm)(et)]})),_:1})]})),_:1}),(0,l._)("div",kl,[(0,l._)("div",xl,[(0,l.Wm)(s,{flat:""},{default:(0,l.w5)((function(){return[(0,l.Wm)(a,null,{default:(0,l.w5)((function(){return[(0,l.Wm)(wl)]})),_:1})]})),_:1})]),(0,l._)("div",ql,[(0,l.Wm)(s,{flat:"",style:{height:"100%"}},{default:(0,l.w5)((function(){return[(0,l.Wm)(a,null,{default:(0,l.w5)((function(){return[(0,l.Wm)(Sl)]})),_:1})]})),_:1})])])]})),_:1})}}};var Tl=a(69885);const Zl=Ul,Wl=Zl;_()(Ul,"components",{QPage:Tl.Z,QCard:E.Z,QCardSection:R.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/915.d8a462e2.js b/src/presentation/ui/dist/js/915.d8a462e2.js deleted file mode 100644 index 8198212ec..000000000 --- a/src/presentation/ui/dist/js/915.d8a462e2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[915],{60884:(e,a,l)=>{l.r(a),l.d(a,{default:()=>pa});var o=l(59835),t=l(60499),n=l(86970),s=l(3746);const r=(0,s.Q_)("crons",{state:()=>({keyCronsTable:0,keyCronsForm:0,formType:"",showDialogForm:!1,showDialogRemove:!1,selectedCron:{}}),getters:{getKeyCronsTable(e){return e.keyCronsTable},getKeyCronsForm(e){return e.keyCronsForm},getFormType(e){return e.formType},getShowDialogForm(e){return e.showDialogForm},getShowDialogRemove(e){return e.showDialogRemove},getSelectedCron(e){return e.selectedCron}},actions:{setKeyCronsTable(e){this.keyCronsTable=e},setKeyCronsForm(e){this.keyCronsForm=e},setFormType(e){this.formType=e},setShowDialogForm(e){this.showDialogForm=e},setShowDialogRemove(e){this.showDialogRemove=e},setSelectedCron(e){this.selectedCron=e}}}),i=(0,o.aZ)({__name:"CronsTableActions",props:{selectedCronJob:{}},setup(e){const a=e,l=r(),t=(0,o.Fl)({get:()=>l.getShowDialogForm,set:e=>l.setShowDialogForm(e)}),s=(0,o.Fl)({get:()=>l.getShowDialogRemove,set:e=>l.setShowDialogRemove(e)}),i=(0,o.Fl)({get:()=>l.getSelectedCron,set:e=>l.setSelectedCron(e)}),u=(0,o.Fl)({get:()=>l.getFormType,set:e=>l.setFormType(e)});function c(){u.value="update",i.value=a.selectedCronJob,t.value=!0}function d(){i.value=a.selectedCronJob,s.value=!0}return(e,a)=>{const l=(0,o.up)("q-tooltip"),t=(0,o.up)("q-btn");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(t,{color:"primary",size:"md",icon:"sym_s_edit",class:"q-ma-md",dense:"",onClick:a[0]||(a[0]=e=>c())},{default:(0,o.w5)((()=>[(0,o.Wm)(l,{class:"bg-primary",style:{"font-size":"14px"},offset:[10,10]},{default:(0,o.w5)((()=>[(0,o.Uk)((0,n.zw)(e.$t("cronsTableActions.btnEditCronjob")),1)])),_:1})])),_:1}),(0,o.Wm)(t,{dense:"",color:"negative",size:"md",icon:"sym_s_delete",onClick:a[1]||(a[1]=e=>d())},{default:(0,o.w5)((()=>[(0,o.Wm)(l,{class:"bg-negative",style:{"font-size":"14px"},offset:[10,10]},{default:(0,o.w5)((()=>[(0,o.Uk)((0,n.zw)(e.$t("cronsTableActions.btnRemoveCronjob")),1)])),_:1})])),_:1})])}}});var u=l(68879),c=l(46858),d=l(69984),m=l.n(d);const p=i,v=p;m()(i,"components",{QBtn:u.Z,QTooltip:c.Z});var h=l(84278),b=l(25121);const y={class:"row justify-center q-mt-md"},g=(0,o.aZ)({__name:"CronsTable",props:{data:{}},setup(e){const a=e,l=(0,b.QT)().t,s=(0,t.iH)(""),i=(0,t.iH)({sortBy:"desc",descending:!1,page:1,rowsPerPage:10}),u=(0,t.iH)([{name:"schedule",label:l("cronsTable.columnSchedule"),align:"left",field:"schedule",classes:"td-main-table",headerClasses:"bg-primary text-white",sortable:!0},{name:"command",label:l("cronsTable.columnCommand"),align:"left",field:"command",style:"width: 50%;",classes:"cron-table-td-command",sortable:!0},{name:"comment",label:l("cronsTable.columnComment"),align:"left",field:"comment",sortable:!0}]),c=(0,o.Fl)((()=>Math.ceil(a.data.length/i.value.rowsPerPage)));function d(){const e=r();e.setKeyCronsForm(e.getKeyCronsForm+1),e.setFormType("create"),e.setShowDialogForm(!0)}return(e,a)=>{const l=(0,o.up)("q-icon"),t=(0,o.up)("q-input"),r=(0,o.up)("q-space"),m=(0,o.up)("q-th"),p=(0,o.up)("q-tr"),b=(0,o.up)("q-td"),g=(0,o.up)("q-table"),w=(0,o.up)("q-pagination");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o.Wm)(g,{rows:e.data,columns:u.value,filter:s.value,pagination:i.value,"onUpdate:pagination":a[2]||(a[2]=e=>i.value=e),"no-data-label":e.$t("cronsTable.notFoundCronjobs"),"row-key":"key",color:"primary",flat:"",bordered:"","hide-pagination":""},{top:(0,o.w5)((()=>[(0,o.Wm)(t,{borderless:"",debounce:"300",color:"primary",modelValue:s.value,"onUpdate:modelValue":a[0]||(a[0]=e=>s.value=e),label:e.$t("cronsTable.inputSearch")},{prepend:(0,o.w5)((()=>[(0,o.Wm)(l,{name:"sym_s_search"})])),_:1},8,["modelValue","label"]),(0,o.Wm)(r),(0,o.Wm)(h.Z,{label:e.$t("cronsTable.btnNewTask"),onClick:a[1]||(a[1]=e=>d()),icon:"sym_s_schedule"},null,8,["label"])])),header:(0,o.w5)((e=>[(0,o.Wm)(p,{props:e},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.cols,(a=>((0,o.wg)(),(0,o.j4)(m,{key:a.name,props:e,style:{"font-weight":"bold","font-size":"14px"}},{default:(0,o.w5)((()=>[(0,o.Uk)((0,n.zw)(a.label),1)])),_:2},1032,["props"])))),128)),(0,o.Wm)(m)])),_:2},1032,["props"])])),body:(0,o.w5)((e=>[(0,o.Wm)(p,{props:e},{default:(0,o.w5)((()=>[((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(e.cols,(a=>((0,o.wg)(),(0,o.j4)(b,{key:a.name,props:e},{default:(0,o.w5)((()=>[(0,o.Uk)((0,n.zw)(a.value),1)])),_:2},1032,["props"])))),128)),(0,o.Wm)(b,{class:"text-right"},{default:(0,o.w5)((()=>[(0,o.Wm)(v,{selectedCronJob:e.row},null,8,["selectedCronJob"])])),_:2},1024)])),_:2},1032,["props"])])),_:1},8,["rows","columns","filter","pagination","no-data-label"]),(0,o._)("div",y,[(0,o.Wm)(w,{modelValue:i.value.page,"onUpdate:modelValue":a[3]||(a[3]=e=>i.value.page=e),color:"primary",max:c.value,size:"md"},null,8,["modelValue","max"])])])}}});var w=l(84277),$=l(13119),f=l(22857),S=l(90136),D=l(31233),_=l(21682),C=l(67220),F=l(80996);const O=g,k=O;m()(g,"components",{QTable:w.Z,QInput:$.Z,QIcon:f.Z,QSpace:S.Z,QTr:D.Z,QTh:_.Z,QTd:C.Z,QPagination:F.Z});var q={class:"q-pa-md"},W={class:"row"},H={class:"text-left",width:"75px"},Z={class:"text-center",width:"250px"},T=(0,o._)("th",{class:"text-left",width:"150px"},null,-1),x={class:"text-center"},Q={class:"text-center"},V={class:"text-right"};function U(e,a){var l=(0,o.up)("q-skeleton"),t=(0,o.up)("q-space"),n=(0,o.up)("q-markup-table"),s=(0,o.up)("q-card-section"),r=(0,o.up)("q-card");return(0,o.wg)(),(0,o.iD)("div",q,[(0,o.Wm)(r,{flat:""},{default:(0,o.w5)((function(){return[(0,o.Wm)(s,null,{default:(0,o.w5)((function(){return[(0,o._)("div",W,[(0,o.Wm)(l,{type:"QInput",width:"400px"}),(0,o.Wm)(t),(0,o.Wm)(l,{type:"QInput",width:"300px"})]),(0,o.Wm)(n,{flat:""},{default:(0,o.w5)((function(){return[(0,o._)("thead",null,[(0,o._)("tr",null,[(0,o._)("th",H,[(0,o.Wm)(l,{animation:"blink",type:"text"})]),(0,o._)("th",Z,[(0,o.Wm)(l,{animation:"blink",type:"text"})]),T])]),(0,o._)("tbody",null,[((0,o.wg)(),(0,o.iD)(o.HY,null,(0,o.Ko)(10,(function(e){return(0,o._)("tr",{key:e},[(0,o._)("td",x,[(0,o.Wm)(l,{animation:"blink",type:"text",width:"75px"})]),(0,o._)("td",Q,[(0,o.Wm)(l,{animation:"blink",type:"text",width:"250px"})]),(0,o._)("td",V,[(0,o.Wm)(l,{animation:"blink",type:"circle",class:"float-right q-mx-sm",size:"30px"}),(0,o.Wm)(l,{animation:"blink",type:"circle",class:"float-right",size:"30px"})])])})),64))])]})),_:1})]})),_:1})]})),_:1})])}var j=l(11639),I=l(44458),R=l(63190),M=l(57133),P=l(66933);const E={},z=(0,j.Z)(E,[["render",U]]),K=z;m()(E,"components",{QCard:I.Z,QCardSection:R.Z,QSkeleton:M.ZP,QSpace:S.Z,QMarkupTable:P.Z});var Y=l(15521),L=l(74462);class A{constructor(){this.$i18n=L.i18n.global.t,this.optionsMinutes=[{label:this.$i18n("cronOptionsSelects.everyMinute"),value:"*"},{label:this.$i18n("cronOptionsSelects.everyMinutes",{minute:5}),value:"*/5"},{label:this.$i18n("cronOptionsSelects.everyMinutes",{minute:10}),value:"*/10"},{label:this.$i18n("cronOptionsSelects.everyMinutes",{minute:15}),value:"*/15"},{label:this.$i18n("cronOptionsSelects.everyMinutes",{minute:30}),value:"*/30"},{label:this.$i18n("cronOptionsSelects.everyMinutes",{minute:45}),value:"*/45"},{label:this.$i18n("cronOptionsSelects.atMinute",{minute:0}),value:"0"},{label:this.$i18n("cronOptionsSelects.atMinute",{minute:5}),value:"5"},{label:this.$i18n("cronOptionsSelects.atMinute",{minute:10}),value:"10"},{label:this.$i18n("cronOptionsSelects.atMinute",{minute:15}),value:"15"},{label:this.$i18n("cronOptionsSelects.atMinute",{minute:30}),value:"30"},{label:this.$i18n("cronOptionsSelects.atMinute",{minute:45}),value:"45"}],this.optionsHours=[{label:this.$i18n("cronOptionsSelects.everyHour"),value:"*"},{label:this.$i18n("cronOptionsSelects.everyHours",{hour:2}),value:"*/2"},{label:this.$i18n("cronOptionsSelects.everyHours",{hour:6}),value:"*/6"},{label:this.$i18n("cronOptionsSelects.everyHours",{hour:12}),value:"*/12"},{label:this.$i18n("cronOptionsSelects.atMidnight"),value:"0"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:1,standard12hours:"1am"}),value:"1"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:2,standard12hours:"2am"}),value:"2"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:3,standard12hours:"3am"}),value:"3"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:4,standard12hours:"4am"}),value:"4"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:5,standard12hours:"5am"}),value:"5"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:6,standard12hours:"6am"}),value:"6"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:7,standard12hours:"7am"}),value:"7"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:8,standard12hours:"8am"}),value:"8"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:9,standard12hours:"9am"}),value:"9"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:10,standard12hours:"10am"}),value:"10"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:11,standard12hours:"11am"}),value:"11"},{label:this.$i18n("cronOptionsSelects.atMidday"),value:"12"},{label:this.$i18n("cronOptionsSelects.atHour",{standard12hours:13,standard24hours:"1pm"}),value:"13"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:14,standard12hours:"2pm"}),value:"14"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:15,standard12hours:"3pm"}),value:"15"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:16,standard12hours:"4pm"}),value:"16"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:17,standard12hours:"5pm"}),value:"17"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:18,standard12hours:"6pm"}),value:"18"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:19,standard12hours:"7pm"}),value:"19"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:20,standard12hours:"8pm"}),value:"20"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:21,standard12hours:"9pm"}),value:"21"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:22,standard12hours:"10pm"}),value:"22"},{label:this.$i18n("cronOptionsSelects.atHour",{standard24hours:23,standard12hours:"11pm"}),value:"23"}],this.optionsDays=[{label:this.$i18n("cronOptionsSelects.everyDay"),value:"*"},{label:this.$i18n("cronOptionsSelects.weekly"),value:"*/7"},{label:this.$i18n("cronOptionsSelects.everyDays",{day:15}),value:"*/15"},{label:this.$i18n("cronOptionsSelects.everyDays",{day:30}),value:"*/30"},{label:this.$i18n("cronOptionsSelects.atDay",{day:1}),value:"1"},{label:this.$i18n("cronOptionsSelects.atDay",{day:2}),value:"2"},{label:this.$i18n("cronOptionsSelects.atDay",{day:3}),value:"3"},{label:this.$i18n("cronOptionsSelects.atDay",{day:4}),value:"4"},{label:this.$i18n("cronOptionsSelects.atDay",{day:5}),value:"5"},{label:this.$i18n("cronOptionsSelects.atDay",{day:6}),value:"6"},{label:this.$i18n("cronOptionsSelects.atDay",{day:7}),value:"7"},{label:this.$i18n("cronOptionsSelects.atDay",{day:8}),value:"8"},{label:this.$i18n("cronOptionsSelects.atDay",{day:9}),value:"9"},{label:this.$i18n("cronOptionsSelects.atDay",{day:10}),value:"10"},{label:this.$i18n("cronOptionsSelects.atDay",{day:11}),value:"11"},{label:this.$i18n("cronOptionsSelects.atDay",{day:12}),value:"12"},{label:this.$i18n("cronOptionsSelects.atDay",{day:13}),value:"13"},{label:this.$i18n("cronOptionsSelects.atDay",{day:14}),value:"14"},{label:this.$i18n("cronOptionsSelects.atDay",{day:15}),value:"15"},{label:this.$i18n("cronOptionsSelects.atDay",{day:16}),value:"16"},{label:this.$i18n("cronOptionsSelects.atDay",{day:17}),value:"17"},{label:this.$i18n("cronOptionsSelects.atDay",{day:18}),value:"18"},{label:this.$i18n("cronOptionsSelects.atDay",{day:19}),value:"19"},{label:this.$i18n("cronOptionsSelects.atDay",{day:20}),value:"20"},{label:this.$i18n("cronOptionsSelects.atDay",{day:21}),value:"21"},{label:this.$i18n("cronOptionsSelects.atDay",{day:22}),value:"22"},{label:this.$i18n("cronOptionsSelects.atDay",{day:23}),value:"23"},{label:this.$i18n("cronOptionsSelects.atDay",{day:24}),value:"24"},{label:this.$i18n("cronOptionsSelects.atDay",{day:25}),value:"25"},{label:this.$i18n("cronOptionsSelects.atDay",{day:26}),value:"26"},{label:this.$i18n("cronOptionsSelects.atDay",{day:27}),value:"27"},{label:this.$i18n("cronOptionsSelects.atDay",{day:28}),value:"28"},{label:this.$i18n("cronOptionsSelects.atDay",{day:29}),value:"29"},{label:this.$i18n("cronOptionsSelects.atDay",{day:30}),value:"30"},{label:this.$i18n("cronOptionsSelects.atDay",{day:31}),value:"31"}],this.optionsMonths=[{label:this.$i18n("cronOptionsSelects.everyMonth"),value:"*"},{label:this.$i18n("cronOptionsSelects.everyMonths",{month:2}),value:"*/2"},{label:this.$i18n("cronOptionsSelects.everyMonths",{month:3}),value:"*/3"},{label:this.$i18n("cronOptionsSelects.everyMonths",{month:4}),value:"*/4"},{label:this.$i18n("cronOptionsSelects.everyMonths",{month:6}),value:"*/6"},{label:this.$i18n("cronOptionsSelects.january"),value:"1"},{label:this.$i18n("cronOptionsSelects.february"),value:"2"},{label:this.$i18n("cronOptionsSelects.march"),value:"3"},{label:this.$i18n("cronOptionsSelects.april"),value:"4"},{label:this.$i18n("cronOptionsSelects.may"),value:"5"},{label:this.$i18n("cronOptionsSelects.june"),value:"6"},{label:this.$i18n("cronOptionsSelects.july"),value:"7"},{label:this.$i18n("cronOptionsSelects.august"),value:"8"},{label:this.$i18n("cronOptionsSelects.september"),value:"9"},{label:this.$i18n("cronOptionsSelects.october"),value:"10"},{label:this.$i18n("cronOptionsSelects.november"),value:"11"},{label:this.$i18n("cronOptionsSelects.december"),value:"12"}],this.optionsWeekDays=[{label:this.$i18n("cronOptionsSelects.everyDay"),value:"*"},{label:this.$i18n("cronOptionsSelects.mondayToFriday"),value:"1-5"},{label:this.$i18n("cronOptionsSelects.onlyWeekends"),value:"6-0"},{label:this.$i18n("cronOptionsSelects.everyMonday"),value:"1"},{label:this.$i18n("cronOptionsSelects.everyTuesday"),value:"2"},{label:this.$i18n("cronOptionsSelects.everyWednesday"),value:"3"},{label:this.$i18n("cronOptionsSelects.everyThursday"),value:"4"},{label:this.$i18n("cronOptionsSelects.everyFriday"),value:"5"},{label:this.$i18n("cronOptionsSelects.everySaturday"),value:"6"},{label:this.$i18n("cronOptionsSelects.everySunday"),value:"0"}]}}const J={class:"text-center text-h4 q-ma-sm",style:{"overflow-x":"auto","overflow-y":"hidden"}},X={class:"q-pa-md"},B={class:"q-pa-md"},N={class:"q-pa-md"},G={class:"q-pa-md"},ee={class:"q-pa-md"},ae={class:"row q-mb-sm"},le={class:"col-6 q-pr-md"},oe={class:"row"},te={class:"col-2 q-pa-sm"},ne={class:"col-10 q-pa-sm"},se={class:"col-6 q-pl-md"},re={class:"row"},ie={class:"col-2 q-pa-sm"},ue={class:"col-10 q-pa-sm"},ce={class:"row q-mb-sm"},de={class:"col-6 q-pr-md"},me={class:"row"},pe={class:"col-2 q-pa-sm"},ve={class:"col-10 q-pa-sm"},he={class:"col-6 q-pl-md"},be={class:"row"},ye={class:"col-2 q-pa-sm"},ge={class:"col-10 q-pa-sm"},we={class:"row q-mb-sm"},$e={class:"col-6 q-pr-md"},fe={class:"row"},Se={class:"col-2 q-pa-sm"},De={class:"col-10 q-pa-sm"},_e={class:"row q-mb-lg"},Ce={class:"row"},Fe="shadow-1 rounded-borders q-py-xs q-px-md",Oe=(0,o.aZ)({__name:"CronsDialogFormTabCustomFields",props:{minute:{default:"*"},hour:{default:"*"},day:{default:"*"},month:{default:"*"},weekday:{default:"*"},command:{default:""},comment:{default:""}},emits:["update:minute","update:hour","update:day","update:month","update:weekday","update:command","update:comment","update:isValidCron"],setup(e,{emit:a}){const l=e,s=(0,t.iH)(l.minute),r=(0,t.iH)(l.hour),i=(0,t.iH)(l.day),u=(0,t.iH)(l.month),c=(0,t.iH)(l.weekday),d=(0,t.iH)(l.command),m=(0,t.iH)(l.comment),p=new A,v=(0,t.iH)(Fe),h=(0,t.iH)(`${Fe} shadow-primary`),b=(0,t.iH)(Fe),y=(0,t.iH)(`${Fe} shadow-primary`),g=(0,t.iH)(Fe),w=(0,t.iH)(`${Fe} shadow-primary`),$=(0,t.iH)(Fe),f=(0,t.iH)(`${Fe} shadow-primary`),S=(0,t.iH)(Fe),D=(0,t.iH)(`${Fe} shadow-primary`),_=(0,o.Fl)((()=>C.value&&F&&O&&k&&q&&l.command.length>2&&l.command.length<4096)),C=(0,o.Fl)((()=>{const e=new RegExp(/^(\*|(?:\*|(?:[0-9]|(?:[1-5][0-9])))\/(?:[0-9]|(?:[1-5][0-9]))|(?:[0-9]|(?:[1-5][0-9]))(?:(?:\-[0-9]|\-(?:[1-5][0-9]))?|(?:\,(?:[0-9]|(?:[1-5][0-9])))*))$/);return e.test(s.value)})),F=(0,o.Fl)((()=>{const e=new RegExp(/^(\*|(1?[0-9]|2[0-3])(-(1?[0-9]|2[0-3]))?)(\/[1-9][0-9]*)?(,(\*|(1?[0-9]|2[0-3])(-(1?[0-9]|2[0-3]))?)(\/[1-9][0-9]*)?)*$/);return e.test(r.value)})),O=(0,o.Fl)((()=>{const e=new RegExp(/^(\*|([1-9]|[1-2][0-9]?|3[0-1])(-([1-9]|[1-2][0-9]?|3[0-1]))?)(\/[1-9][0-9]*)?(,(\*|([1-9]|[1-2][0-9]?|3[0-1])(-([1-9]|[1-2][0-9]?|3[0-1]))?)(\/[1-9][0-9]*)?)*$/);return e.test(i.value)})),k=(0,o.Fl)((()=>{const e=new RegExp(/^(\*|([1-9]|1[0-2]?)(-([1-9]|1[0-2]?))?)(\/[1-9][0-9]*)?(,(\*|([1-9]|1[0-2]?)(-([1-9]|1[0-2]?))?)(\/[1-9][0-9]*)?)*$/);return e.test(u.value)})),q=(0,o.Fl)((()=>{const e=new RegExp(/^(\*|[0-6](-[0-6])?)(\/[1-9][0-9]*)?(,(\*|[0-6](-[0-6])?)(\/[1-9][0-9]*)?)*$/);return e.test(c.value)}));function W(e){switch(e){case"minuteInput":v.value=`${Fe} shadow-primary`,h.value=Fe;break;case"minuteSelect":v.value=`${Fe}`,h.value=`${Fe} shadow-primary`;break;case"hourInput":b.value=`${Fe} shadow-primary`,y.value=Fe;break;case"hourSelect":b.value=`${Fe}`,y.value=`${Fe} shadow-primary`;break;case"dayInput":g.value=`${Fe} shadow-primary`,w.value=Fe;break;case"daySelect":g.value=`${Fe}`,w.value=`${Fe} shadow-primary`;break;case"monthInput":$.value=`${Fe} shadow-primary`,f.value=Fe;break;case"monthSelect":$.value=`${Fe}`,f.value=`${Fe} shadow-primary`;break;case"weekdayInput":S.value=`${Fe} shadow-primary`,D.value=Fe;break;case"weekdaySelect":S.value=`${Fe}`,D.value=`${Fe} shadow-primary`;break}}return(0,o.YP)(_,(e=>{a("update:isValidCron",e)}),{immediate:!0}),(0,o.YP)(s,(e=>{a("update:minute",e)}),{immediate:!0}),(0,o.YP)(r,(e=>{a("update:hour",e)}),{immediate:!0}),(0,o.YP)(i,(e=>{a("update:day",e)}),{immediate:!0}),(0,o.YP)(u,(e=>{a("update:month",e)}),{immediate:!0}),(0,o.YP)(c,(e=>{a("update:weekday",e)}),{immediate:!0}),(0,o.YP)(d,(e=>{a("update:command",e)}),{immediate:!0}),(0,o.YP)(m,(e=>{a("update:comment",e)}),{immediate:!0}),(e,a)=>{const l=(0,o.up)("q-separator"),_=(0,o.up)("q-input"),H=(0,o.up)("q-icon"),Z=(0,o.up)("q-select");return(0,o.wg)(),(0,o.iD)("div",null,[(0,o._)("div",J,[(0,o._)("span",X,(0,n.zw)(s.value),1),(0,o._)("span",B,(0,n.zw)(r.value),1),(0,o._)("span",N,(0,n.zw)(i.value),1),(0,o._)("span",G,(0,n.zw)(u.value),1),(0,o._)("span",ee,(0,n.zw)(c.value),1)]),(0,o.Wm)(l,{class:"q-my-sm"}),(0,o._)("div",ae,[(0,o._)("div",le,[(0,o._)("div",oe,[(0,o._)("div",te,[(0,o.Wm)(_,{modelValue:s.value,"onUpdate:modelValue":a[0]||(a[0]=e=>s.value=e),debounce:"100",borderless:"",class:(0,n.C_)(v.value),onInput:a[1]||(a[1]=e=>W("minuteInput"))},null,8,["modelValue","class"])]),(0,o._)("div",ne,[(0,o.Wm)(Z,{options:(0,t.SU)(p).optionsMinutes,modelValue:s.value,"onUpdate:modelValue":a[2]||(a[2]=e=>s.value=e),label:e.$t("cronsDialogForm.fieldMinutes"),class:(0,n.C_)(h.value),debounce:"100","emit-value":!0,"map-options":"",borderless:"","stack-label":"","error-message":e.$t("cronsDialogForm.messageInputError"),error:!C.value,onInput:a[3]||(a[3]=e=>W("minuteSelect"))},{prepend:(0,o.w5)((()=>[(0,o.Wm)(H,{name:"fas fa-hourglass-start"})])),_:1},8,["options","modelValue","label","class","error-message","error"])])])]),(0,o._)("div",se,[(0,o._)("div",re,[(0,o._)("div",ie,[(0,o.Wm)(_,{modelValue:r.value,"onUpdate:modelValue":a[4]||(a[4]=e=>r.value=e),debounce:"100",borderless:"",class:(0,n.C_)(b.value),onInput:a[5]||(a[5]=e=>W("hourInput"))},null,8,["modelValue","class"])]),(0,o._)("div",ue,[(0,o.Wm)(Z,{options:(0,t.SU)(p).optionsHours,modelValue:r.value,"onUpdate:modelValue":a[6]||(a[6]=e=>r.value=e),label:e.$t("cronsDialogForm.fieldHours"),class:(0,n.C_)(y.value),debounce:"100","emit-value":!0,"map-options":"",borderless:"","stack-label":"","error-message":e.$t("cronsDialogForm.messageInputError"),error:!F.value,onInput:a[7]||(a[7]=e=>W("hourSelect"))},{prepend:(0,o.w5)((()=>[(0,o.Wm)(H,{name:"far fa-clock"})])),_:1},8,["options","modelValue","label","class","error-message","error"])])])])]),(0,o._)("div",ce,[(0,o._)("div",de,[(0,o._)("div",me,[(0,o._)("div",pe,[(0,o.Wm)(_,{modelValue:i.value,"onUpdate:modelValue":a[8]||(a[8]=e=>i.value=e),debounce:"100",borderless:"",class:(0,n.C_)(g.value),onInput:a[9]||(a[9]=e=>W("dayInput"))},null,8,["modelValue","class"])]),(0,o._)("div",ve,[(0,o.Wm)(Z,{options:(0,t.SU)(p).optionsDays,modelValue:i.value,"onUpdate:modelValue":a[10]||(a[10]=e=>i.value=e),label:e.$t("cronsDialogForm.fieldDays"),class:(0,n.C_)(w.value),debounce:"100","emit-value":!0,"map-options":"",borderless:"","stack-label":"","error-message":e.$t("cronsDialogForm.messageInputError"),error:!O.value,onInput:a[11]||(a[11]=e=>W("daySelect"))},{prepend:(0,o.w5)((()=>[(0,o.Wm)(H,{name:"fas fa-calendar-day"})])),_:1},8,["options","modelValue","label","class","error-message","error"])])])]),(0,o._)("div",he,[(0,o._)("div",be,[(0,o._)("div",ye,[(0,o.Wm)(_,{modelValue:u.value,"onUpdate:modelValue":a[12]||(a[12]=e=>u.value=e),debounce:"100",borderless:"",class:(0,n.C_)($.value),onInput:a[13]||(a[13]=e=>W("monthInput"))},null,8,["modelValue","class"])]),(0,o._)("div",ge,[(0,o.Wm)(Z,{options:(0,t.SU)(p).optionsMonths,modelValue:u.value,"onUpdate:modelValue":a[14]||(a[14]=e=>u.value=e),label:e.$t("cronsDialogForm.fieldMonths"),class:(0,n.C_)(f.value),debounce:"100","emit-value":!0,"map-options":"",borderless:"","stack-label":"","error-message":e.$t("cronsDialogForm.messageInputError"),error:!k.value,onInput:a[15]||(a[15]=e=>W("monthSelect"))},{prepend:(0,o.w5)((()=>[(0,o.Wm)(H,{name:"far fa-calendar-alt"})])),_:1},8,["options","modelValue","label","class","error-message","error"])])])])]),(0,o._)("div",we,[(0,o._)("div",$e,[(0,o._)("div",fe,[(0,o._)("div",Se,[(0,o.Wm)(_,{modelValue:c.value,"onUpdate:modelValue":a[16]||(a[16]=e=>c.value=e),debounce:"100",borderless:"",class:(0,n.C_)(S.value),onInput:a[17]||(a[17]=e=>W("weekdayInput"))},null,8,["modelValue","class"])]),(0,o._)("div",De,[(0,o.Wm)(Z,{options:(0,t.SU)(p).optionsWeekDays,modelValue:c.value,"onUpdate:modelValue":a[18]||(a[18]=e=>c.value=e),label:e.$t("cronsDialogForm.fieldWeekDay"),class:(0,n.C_)(D.value),debounce:"100","emit-value":!0,"map-options":"",borderless:"","stack-label":"","error-message":e.$t("cronsDialogForm.messageInputError"),error:!q.value,onInput:a[19]||(a[19]=e=>W("weekdaySelect"))},{prepend:(0,o.w5)((()=>[(0,o.Wm)(H,{name:"far fa-calendar-check"})])),_:1},8,["options","modelValue","label","class","error-message","error"])])])])]),(0,o.Wm)(l,{class:"q-my-md"}),(0,o._)("div",_e,[(0,o.Wm)(Y.Z,{label:e.$t("cronsDialogForm.fieldCommand"),value:d.value,"onUpdate:value":a[20]||(a[20]=e=>d.value=e),type:"textarea",class:"full-width",maxLength:"4096",icon:"fas fa-code",rules:[()=>""!==d.value||e.$t("cronsDialogForm.messageFieldRequired")]},null,8,["label","value","rules"])]),(0,o._)("div",Ce,[(0,o.Wm)(Y.Z,{label:e.$t("cronsDialogForm.fieldComment"),value:m.value,"onUpdate:value":a[21]||(a[21]=e=>m.value=e),class:"full-width",maxLength:"100",icon:"far fa-comment-alt"},null,8,["label","value"])])])}}});var ke=l(50926),qe=l(32259);const We=Oe,He=We;m()(Oe,"components",{QSeparator:ke.Z,QInput:$.Z,QSelect:qe.Z,QIcon:f.Z});var Ze=l(88900),Te=l(45273),xe=l(69036),Qe=function(e,a,l,o){function t(e){return e instanceof l?e:new l((function(a){a(e)}))}return new(l||(l=Promise))((function(l,n){function s(e){try{i(o.next(e))}catch(a){n(a)}}function r(e){try{i(o["throw"](e))}catch(a){n(a)}}function i(e){e.done?l(e.value):t(e.value).then(s,r)}i((o=o.apply(e,a||[])).next())}))};class Ve extends xe.Z{getCrons(){return Qe(this,void 0,void 0,(function*(){return this.request.get("/v1/cron/")}))}createCron(e){return Qe(this,void 0,void 0,(function*(){return this.request.post("/v1/cron/",e)}))}updateCron(e){return Qe(this,void 0,void 0,(function*(){return this.request.put("/v1/cron/",e)}))}deleteCron(e){return Qe(this,void 0,void 0,(function*(){return this.request.delete(`/v1/cron/${e}/`)}))}}const Ue=(0,o.aZ)({__name:"CronsDialogFormTabCustom",setup(e){const a=r(),l=(0,b.QT)().t,n=(0,t.iH)(!1),s=(0,t.iH)(""),i=(0,t.iH)("*"),u=(0,t.iH)("*"),c=(0,t.iH)("*"),d=(0,t.iH)("*"),m=(0,t.iH)("*"),p=(0,t.iH)(""),v=(0,t.iH)(""),y=(0,o.Fl)({get:()=>a.getKeyCronsTable,set:e=>{a.setKeyCronsTable(e)}}),g=(0,o.Fl)((()=>a.formType)),w=(0,o.Fl)((()=>a.getSelectedCron)),$=(0,o.Fl)({get:()=>a.showDialogForm,set:e=>{a.showDialogForm=e}});function f(){"update"===g.value?D():S()}function S(){(0,Te.Q)();const e=new Ve,a={command:p.value,schedule:`${i.value} ${u.value} ${c.value} ${d.value} ${m.value}`};v.value&&(a.comment=v.value),e.createCron(a).then((()=>{(0,Ze.LX)(`${l("cronsDialogForm.createCronjobSuccess")}`),y.value++,$.value=!1})).catch((e=>{(0,Ze.s9)(e.response.data,`${l("cronsDialogForm.createCronjobError")}`),console.error(e)})).finally((()=>{(0,Te.Z)()}))}function D(){(0,Te.Q)();const e=new Ve,o={id:s.value,command:p.value,comment:v.value,schedule:`${i.value} ${u.value} ${c.value} ${d.value} ${m.value}`};e.updateCron(o).then((()=>{y.value++,(0,Ze.LX)(`${l("cronsDialogForm.updateCronjobSuccess")}`),a.setShowDialogForm(!1)})).catch((e=>{(0,Ze.s9)(e.response.data,`${l("cronsDialogForm.updateCronjobError")}`)})).finally((()=>{(0,Te.Z)()}))}return(0,o.wF)((()=>{var e,a,l,o,t,n;"create"!==g.value&&(s.value=w.value.id,p.value=w.value.command,v.value=null!==(e=w.value.comment)&&void 0!==e?e:"",w.value.hasOwnProperty("predefined")||(i.value=null!==(a=w.value.minute)&&void 0!==a?a:"*",u.value=null!==(l=w.value.hour)&&void 0!==l?l:"*",c.value=null!==(o=w.value.day)&&void 0!==o?o:"*",d.value=null!==(t=w.value.month)&&void 0!==t?t:"*",m.value=null!==(n=w.value.weekday)&&void 0!==n?n:"*"))})),(e,a)=>{const s=(0,o.up)("q-card-section"),r=(0,o.up)("q-card-actions"),b=(0,o.up)("q-card");return(0,o.wg)(),(0,o.j4)(b,{flat:""},{default:(0,o.w5)((()=>[(0,o.Wm)(s,{class:"q-px-none"},{default:(0,o.w5)((()=>[(0,o.Wm)(He,{minute:i.value,"onUpdate:minute":a[0]||(a[0]=e=>i.value=e),hour:u.value,"onUpdate:hour":a[1]||(a[1]=e=>u.value=e),day:c.value,"onUpdate:day":a[2]||(a[2]=e=>c.value=e),month:d.value,"onUpdate:month":a[3]||(a[3]=e=>d.value=e),weekday:m.value,"onUpdate:weekday":a[4]||(a[4]=e=>m.value=e),command:p.value,"onUpdate:command":a[5]||(a[5]=e=>p.value=e),comment:v.value,"onUpdate:comment":a[6]||(a[6]=e=>v.value=e),isValidCron:n.value,"onUpdate:isValidCron":a[7]||(a[7]=e=>n.value=e)},null,8,["minute","hour","day","month","weekday","command","comment","isValidCron"])])),_:1}),(0,o.Wm)(r,{align:"between",class:"q-pa-none"},{default:(0,o.w5)((()=>[(0,o.Wm)(h.Z,{label:e.$t("cronsDialogForm.btnCancel"),color:"grey-7",onClick:a[8]||(a[8]=e=>$.value=!1)},null,8,["label"]),(0,o.Wm)(h.Z,{disable:!n.value,label:"update"===g.value?(0,t.SU)(l)("cronsDialogForm.updateCronjob"):(0,t.SU)(l)("cronsDialogForm.createCronjob"),color:"primary",icon:"update"===g.value?"sym_s_edit":"sym_s_add",onClick:a[9]||(a[9]=e=>f())},null,8,["disable","label","icon"])])),_:1})])),_:1})}}});var je=l(11821);const Ie=Ue,Re=Ie;m()(Ue,"components",{QCard:I.Z,QCardSection:R.Z,QCardActions:je.Z});var Me=l(94629);const Pe={class:"row q-mb-lg"},Ee={class:"row"},ze=(0,o.aZ)({__name:"CronsDialogFormTabPredefined",setup(e){const a=(0,b.QT)().t,l=r(),n=(0,t.iH)(""),s=(0,t.iH)(""),i=(0,t.iH)(""),u=(0,t.iH)("@daily"),c=[{label:`${a("cronsDialogForm.predefinedHourly")}`,value:"@hourly"},{label:`${a("cronsDialogForm.predefined3Hours")}`,value:"3hours"},{label:`${a("cronsDialogForm.predefined6Hours")}`,value:"6hours"},{label:`${a("cronsDialogForm.predefined12Hours")}`,value:"12hours"},{label:`${a("cronsDialogForm.predefinedDaily")}`,value:"@daily"},{label:`${a("cronsDialogForm.predefinedWeekly")}`,value:"@weekly"},{label:`${a("cronsDialogForm.predefinedMonthly")}`,value:"@monthly"},{label:`${a("cronsDialogForm.predefinedAnnually")}`,value:"@annually"},{label:`${a("cronsDialogForm.predefinedReboot")}`,value:"@reboot"}],d=(0,o.Fl)({get:()=>l.getKeyCronsTable,set:e=>l.setKeyCronsTable(e)}),m=(0,o.Fl)({get:()=>l.getShowDialogForm,set:e=>l.setShowDialogForm(e)}),p=(0,o.Fl)({get:()=>l.getSelectedCron,set:e=>l.setSelectedCron(e)}),v=(0,o.Fl)({get:()=>l.getFormType,set:e=>l.setFormType(e)}),y=(0,o.Fl)((()=>u.value.length>=0&&g.value)),g=(0,o.Fl)((()=>s.value.length>=2&&s.value.length<=4096));function w(){"update"===v.value?f():S()}function $(){const e={command:s.value,schedule:""};switch(i.value&&(e.comment=i.value),u.value){case"3hours":e.schedule="* */3 * * *";break;case"6hours":e.schedule="* */6 * * *";break;case"12hours":e.schedule="* */12 * * *";break;default:e.schedule=u.value}return e}function f(){(0,Te.Q)();const e=new Ve,l=Object.assign({id:n.value},$());e.updateCron(l).then((()=>{(0,Ze.LX)(`${a("cronsDialogForm.updateCronjobSuccess")}`),d.value++,m.value=!1})).catch((e=>{(0,Ze.s9)(e.response.data,`${a("cronsDialogForm.updateCronjobError")}`)})).finally((()=>{(0,Te.Z)()}))}function S(){(0,Te.Q)();const e=new Ve;e.createCron($()).then((()=>{(0,Ze.LX)(`${a("cronsDialogForm.createCronjobSuccess")}`),d.value++,m.value=!1})).catch((e=>{(0,Ze.s9)(e.response.data,`${a("cronsDialogForm.createCronjobError")}`)})).finally((()=>{(0,Te.Z)()}))}return(0,o.wF)((()=>{var e,a;"create"!==v.value&&(n.value=p.value.id,s.value=p.value.command,i.value=null!==(e=p.value.comment)&&void 0!==e?e:"",p.value.hasOwnProperty("predefined")&&(u.value="@yearly"===p.value.predefined?"@annually":null!==(a=p.value.predefined)&&void 0!==a?a:"@daily"))})),(e,a)=>{const l=(0,o.up)("q-card-section"),t=(0,o.up)("q-card-actions"),n=(0,o.up)("q-card");return(0,o.wg)(),(0,o.j4)(n,{flat:""},{default:(0,o.w5)((()=>[(0,o.Wm)(l,{class:"q-px-none"},{default:(0,o.w5)((()=>[(0,o.Wm)(Me.Z,{icon:"far fa-calendar",label:e.$t("cronsDialogForm.selectExecuteTask"),options:c,selected:u.value,"onUpdate:selected":a[0]||(a[0]=e=>u.value=e)},null,8,["label","selected"])])),_:1}),(0,o.Wm)(l,{class:"q-px-none"},{default:(0,o.w5)((()=>[(0,o._)("div",Pe,[(0,o.Wm)(Y.Z,{label:e.$t("cronsDialogForm.fieldCommand"),value:s.value,"onUpdate:value":a[1]||(a[1]=e=>s.value=e),type:"textarea",class:"full-width",maxLength:"4096",icon:"fas fa-code",rules:[()=>""!==s.value||e.$t("cronsDialogForm.messageFieldRequired")]},null,8,["label","value","rules"])]),(0,o._)("div",Ee,[(0,o.Wm)(Y.Z,{label:e.$t("cronsDialogForm.fieldComment"),value:i.value,"onUpdate:value":a[2]||(a[2]=e=>i.value=e),class:"full-width",maxLength:"100",icon:"far fa-comment-alt"},null,8,["label","value"])])])),_:1}),(0,o.Wm)(t,{align:"between",class:"q-pa-none"},{default:(0,o.w5)((()=>[(0,o.Wm)(h.Z,{label:e.$t("cronsDialogForm.btnCancel"),color:"grey-7",onClick:a[3]||(a[3]=e=>m.value=!1)},null,8,["label"]),(0,o.Wm)(h.Z,{disable:!y.value,label:"update"===v.value?e.$t("cronsDialogForm.updateCronjob"):e.$t("cronsDialogForm.createCronjob"),color:"primary",icon:"update"===v.value?"sym_s_edit":"sym_s_add",onClick:a[4]||(a[4]=e=>w())},null,8,["disable","label","icon"])])),_:1})])),_:1})}}}),Ke=ze,Ye=Ke;m()(ze,"components",{QCard:I.Z,QCardSection:R.Z,QCardActions:je.Z});const Le=(0,o.aZ)({__name:"CronsDialogFormTabs",setup(e){const a=r(),l=(0,t.iH)("predefined"),n=(0,o.Fl)((()=>a.getSelectedCron)),s=(0,o.Fl)((()=>a.getFormType));return(0,o.wF)((()=>{"create"!==s.value&&(n.value.hasOwnProperty("predefined")||(l.value="custom"))})),(e,a)=>{const t=(0,o.up)("q-tab"),n=(0,o.up)("q-tabs"),s=(0,o.up)("q-separator"),r=(0,o.up)("q-tab-panel"),i=(0,o.up)("q-tab-panels");return(0,o.wg)(),(0,o.iD)(o.HY,null,[(0,o.Wm)(n,{modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=e=>l.value=e),"active-color":"primary","indicator-color":"primary",align:"justify",class:"text-grey","no-caps":""},{default:(0,o.w5)((()=>[(0,o.Wm)(t,{name:"predefined",class:"cron-tabs",icon:"far fa-calendar",label:e.$t("cronsDialogForm.predefinedForm")},null,8,["label"]),(0,o.Wm)(t,{name:"custom",class:"cron-tabs",icon:"sym_s_edit_calendar",label:e.$t("cronsDialogForm.customForm")},null,8,["label"])])),_:1},8,["modelValue"]),(0,o.Wm)(s),(0,o.Wm)(i,{modelValue:l.value,"onUpdate:modelValue":a[1]||(a[1]=e=>l.value=e),animated:""},{default:(0,o.w5)((()=>[(0,o.Wm)(r,{name:"predefined",class:"q-pa-none"},{default:(0,o.w5)((()=>[(0,o.Wm)(Ye)])),_:1}),(0,o.Wm)(r,{name:"custom",class:"q-pa-none"},{default:(0,o.w5)((()=>[(0,o.Wm)(Re)])),_:1})])),_:1},8,["modelValue"])],64)}}});var Ae=l(47817),Je=l(70900),Xe=l(89800),Be=l(84106);const Ne=Le,Ge=Ne;m()(Le,"components",{QTabs:Ae.Z,QTab:Je.Z,QSeparator:ke.Z,QTabPanels:Xe.Z,QTabPanel:Be.Z});const ea={class:"flex justify-between items-center"},aa={class:"title-dialog"},la=(0,o.aZ)({__name:"CronsDialogForm",setup(e){const a=r(),l=(0,o.Fl)((()=>a.getFormType)),t=(0,o.Fl)({get:()=>a.showDialogForm,set:e=>{a.showDialogForm=e}});return(e,a)=>{const s=(0,o.up)("q-btn"),r=(0,o.up)("q-card-section"),i=(0,o.up)("q-card"),u=(0,o.up)("q-dialog");return(0,o.wg)(),(0,o.j4)(u,{modelValue:t.value,"onUpdate:modelValue":a[1]||(a[1]=e=>t.value=e),persistent:""},{default:(0,o.w5)((()=>[(0,o.Wm)(i,{flat:"",style:{width:"950px","max-width":"90vw"},class:"dialog-card-bg"},{default:(0,o.w5)((()=>[(0,o._)("div",ea,[(0,o._)("div",aa,(0,n.zw)("update"===l.value?e.$t("cronsDialogForm.editCronjob"):e.$t("cronsDialogForm.newCronjob")),1),(0,o.Wm)(s,{icon:"sym_s_close",flat:"",round:"",dense:"",onClick:a[0]||(a[0]=e=>t.value=!1)})]),(0,o.Wm)(r,{class:"q-px-none"},{default:(0,o.w5)((()=>[(0,o.Wm)(Ge)])),_:1})])),_:1})])),_:1},8,["modelValue"])}}});var oa=l(32074);const ta=la,na=ta;m()(la,"components",{QDialog:oa.Z,QCard:I.Z,QBtn:u.Z,QCardSection:R.Z});var sa=l(89906);const ra=(0,o.aZ)({__name:"CronsDialogRemove",setup(e){const a=(0,b.QT)().t,l=r(),t=(0,o.Fl)({get:()=>l.getShowDialogRemove,set:e=>{l.setShowDialogRemove(e)}}),n=(0,o.Fl)((()=>l.getSelectedCron.id)),s=(0,o.Fl)({get:()=>l.getKeyCronsTable,set:e=>{l.setKeyCronsTable(e)}});function i(){const e=new Ve;(0,Te.Q)(),e.deleteCron(n.value).then((()=>{s.value++,(0,Ze.LX)(`${a("cronsDialogRemove.removeCronSuccess")}`),t.value=!1})).catch((e=>{console.error(e),(0,Ze.s9)(e.response.data,`${a("cronsDialogRemove.removeCronError")}`)})).finally((()=>{(0,Te.Z)()}))}return(e,a)=>((0,o.wg)(),(0,o.j4)(sa.Z,{showDeleteDialog:t.value,"onUpdate:showDeleteDialog":a[2]||(a[2]=e=>t.value=e),titleDialog:e.$t("cronsDialogRemove.titleDialogRemove"),messageToDelete:e.$t("cronsDialogRemove.confirmRemoveCron"),warningToDelete:e.$t("cronsDialogRemove.warningRemoveCron")},{"card-actions":(0,o.w5)((()=>[(0,o.Wm)(h.Z,{label:e.$t("cronsDialogRemove.btnCancel"),color:"grey-7",onClick:a[0]||(a[0]=e=>t.value=!1)},null,8,["label"]),(0,o.Wm)(h.Z,{color:"negative",label:e.$t("cronsDialogRemove.btnConfirm"),onClick:a[1]||(a[1]=e=>i())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","messageToDelete","warningToDelete"]))}}),ia=ra,ua=ia,ca=(0,o.aZ)({__name:"CronsIndex",setup(e){const a=r(),l=(0,b.QT)().t,n=(0,t.iH)([]),s=(0,t.iH)(!1),i=(0,o.Fl)((()=>a.getKeyCronsTable));function u(){s.value=!0,n.value=[];const e=new Ve;e.getCrons().then((e=>{0!==e.data.body.length&&(n.value=e.data.body.map((e=>c(e))))})).catch((e=>{console.error(e),(0,Ze.s9)(e.response.data,`${l("cronsIndex.getCronjobsError")}`)})).finally((()=>{s.value=!1}))}function c(e){var a,l,o,t,n;const s=["@hourly","@daily","@reboot","@weekly","@monthly","@yearly","@annually"];if(s.includes(e.schedule))return Object.assign(Object.assign({},e),{predefined:e.schedule});const r=/^(?\S+)\s+(?\S+)\s+(?\S+)\s+(?\S+)\s+(?\S+)$/,i=RegExp(r).exec(e.schedule);return i?Object.assign(Object.assign({},e),{minute:null===(a=i.groups)||void 0===a?void 0:a.minute,hour:null===(l=i.groups)||void 0===l?void 0:l.hour,day:null===(o=i.groups)||void 0===o?void 0:o.day,month:null===(t=i.groups)||void 0===t?void 0:t.month,weekday:null===(n=i.groups)||void 0===n?void 0:n.weekday}):Object.assign(Object.assign({},e),{minute:"",hour:"",day:"",month:"",weekday:""})}return(0,o.wF)((()=>{u()})),(0,o.YP)(i,(()=>{u()})),(e,a)=>{const l=(0,o.up)("q-card-section"),t=(0,o.up)("q-card"),r=(0,o.up)("q-page");return(0,o.wg)(),(0,o.j4)(r,{padding:""},{default:(0,o.w5)((()=>[(0,o.Wm)(na),(0,o.Wm)(ua),(0,o.Wm)(t,{flat:""},{default:(0,o.w5)((()=>[(0,o.Wm)(l,null,{default:(0,o.w5)((()=>[!0===s.value?((0,o.wg)(),(0,o.j4)(K,{key:0})):((0,o.wg)(),(0,o.j4)(k,{key:1,data:n.value},null,8,["data"]))])),_:1})])),_:1})])),_:1})}}});var da=l(69885);const ma=ca,pa=ma;m()(ca,"components",{QPage:da.Z,QCard:I.Z,QCardSection:R.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/app.c530adeb.js b/src/presentation/ui/dist/js/app.c530adeb.js deleted file mode 100644 index af166ad00..000000000 --- a/src/presentation/ui/dist/js/app.c530adeb.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e={71239:(e,a,r)=>{var t=r(47798),o=r.n(t),s=r(37167),i=r.n(s),n=r(1001),l=r.n(n),c=(r(11476),r(18964),r(98998),r(65716),r(59437),r(33697),r(77280),r(40702),r(51393),r(56072),r(32119),r(61957)),d=r(71947),u=r(60499),m=r(59835),p=r(19302),g=r(25121),v=r(74358),b=r(20503);const f=(0,m.aZ)({__name:"App",setup(e){const a=(0,v.S)(),{locale:r}=(0,g.QT)(),t=(0,u.iH)(0),o=(0,m.Fl)({get:()=>a.getSelectedLanguage,set:e=>a.setSelectedLanguage(e)});return(0,m.wF)((()=>{const e=new b.Z,a=(0,p.Z)();a.dark.set(e.getDarkMode()),o.value=e.getLanguage()})),(0,m.YP)(o,(e=>{r.value=e,t.value++})),(e,a)=>{const r=(0,m.up)("router-view");return(0,m.wg)(),(0,m.j4)(r,{key:t.value})}}}),h=f,C=h;var S=r(23340),y=r(3746);const D=(0,S.h)((()=>{const e=(0,y.WB)();return e}));var A=r(21809),E=r(28339);const P=[{path:"/overview",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:"/overview",component:()=>Promise.all([r.e(736),r.e(64),r.e(870)]).then(r.bind(r,23346)),meta:{requiresAuth:!0,isMenuItem:!0,title:"overviewRoute.title",icon:"sym_s_speed",disabled:!1}}]}],N=[{path:"/accounts",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:document.baseURI.replace("/_/","/accounts/"),component:()=>Promise.all([r.e(736),r.e(64),r.e(506)]).then(r.bind(r,73403)),meta:{requiresAuth:!0,isMenuItem:!0,title:"accountsRoute.title",icon:"sym_s_people",disabled:!1,useHref:!0}}]}],R=[{path:"/databases",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:document.baseURI.replace("/_/","/databases/"),component:()=>Promise.all([r.e(736),r.e(64),r.e(693)]).then(r.bind(r,31555)),meta:{requiresAuth:!0,isMenuItem:!0,title:"databasesRoute.title",icon:"sym_s_database",disabled:!1,useHref:!0}}]}],M=[{path:"/runtime",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:document.baseURI.replace("/_/","/runtimes/"),component:()=>Promise.all([r.e(736),r.e(64),r.e(628)]).then(r.bind(r,31691)),meta:{requiresAuth:!0,isMenuItem:!0,title:"runtimeRoute.title",icon:"sym_s_code",disabled:!1,useHref:!0}}]}],w=[{path:"/crons",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:document.baseURI.replace("/_/","/crons/"),component:()=>Promise.all([r.e(736),r.e(64),r.e(915)]).then(r.bind(r,60884)),meta:{requiresAuth:!0,isMenuItem:!0,title:"cronsRoute.title",icon:"sym_s_schedule",disabled:!1,useHref:!0}}]}],F=[{path:"/settings",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:"/settings",component:()=>Promise.all([r.e(736),r.e(64),r.e(517)]).then(r.bind(r,73120)),meta:{requiresAuth:!0,isMenuItem:!1,title:"settingsRoute.title",icon:"sym_s_settings",disabled:!1}}]}],T=[{path:"/file-manager",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:"/file-manager",component:()=>Promise.all([r.e(736),r.e(64),r.e(664)]).then(r.bind(r,59590)),meta:{requiresAuth:!0,isMenuItem:!0,title:"fileManagerRoute.title",icon:"sym_s_home_storage",disabled:!1}}]}],I=[{path:"/mappings",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:document.baseURI.replace("/_/","/mappings/"),component:()=>Promise.all([r.e(736),r.e(64),r.e(755)]).then(r.bind(r,85090)),meta:{requiresAuth:!0,isMenuItem:!0,title:"mappingsRoute.title",icon:"sym_s_device_hub",disabled:!1,useHref:!0}}]}],U=[{path:"/ssl",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:document.baseURI.replace("/_/","/ssls/"),component:()=>Promise.all([r.e(736),r.e(64),r.e(646)]).then(r.bind(r,34721)),meta:{requiresAuth:!0,isMenuItem:!0,title:"sslRoute.title",icon:"sym_s_lock",disabled:!1,useHref:!0}}]}],k=[{path:"/marketplace",component:()=>Promise.all([r.e(736),r.e(64),r.e(437)]).then(r.bind(r,67437)),children:[{path:document.baseURI.replace("/_/","/marketplace/"),component:()=>Promise.all([r.e(736),r.e(64),r.e(381)]).then(r.bind(r,16789)),meta:{requiresAuth:!0,isMenuItem:!0,title:"marketplaceRoute.title",icon:"sym_s_store",disabled:!1,useHref:!0}}]}],L=[...P,...N,...R,...M,...w,...F,...T,...I,...U,...k,{path:"/:catchAll(.*)*",component:()=>Promise.all([r.e(736),r.e(320)]).then(r.bind(r,57320))}],B=L,q=(0,S.BC)((function(){const e=E.r5,a=(0,E.p7)({scrollBehavior:()=>({left:0,top:0}),routes:B,history:e("/_/")});return a.beforeEach(((e,a,r)=>{const t=new A.Z,o=["/login"],s=!o.includes(e.path),i=t.hasCookie("os-access-token");return s&&!i?r("/login"):"/login"!==e.path&&"/login/"!==e.path?"/login"===e.path&&i?r("/overview"):void r():void(window.location.href=document.baseURI.replace("/_/","/login/"))})),a}));function x(e,a){return H.apply(this,arguments)}function H(){return H=l()(o()().mark((function e(a,r){var t,s,i;return o()().wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t=a(C),t.use(d.Z,r),"function"!==typeof D){e.next=8;break}return e.next=5,D({});case 5:e.t0=e.sent,e.next=9;break;case 8:e.t0=D;case 9:if(s=e.t0,t.use(s),e.t1=u.Xl,"function"!==typeof q){e.next=18;break}return e.next=15,q({store:s});case 15:e.t2=e.sent,e.next=19;break;case 18:e.t2=q;case 19:return e.t3=e.t2,i=(0,e.t1)(e.t3),s.use((function(e){var a=e.store;a.router=i})),e.abrupt("return",{app:t,store:s,router:i});case 23:case"end":return e.stop()}}),e)}))),H.apply(this,arguments)}var O=r(99527),j=r(37879),V=r(6827),z=r(5917),W=r(26950),_=r(84006);const K={config:{loadingBar:{color:"primary"}},lang:O.Z,iconSet:j.Z,plugins:{Notify:V.Z,LoadingBar:z.Z,Loading:W.Z,Cookies:_.Z}};var G="/_/",Z=/\/\//,Y=function(e){return(G+e).replace(Z,"/")};function Q(e,a){return J.apply(this,arguments)}function J(){return J=l()(o()().mark((function e(a,r){var t,s,i,n,l,c,d,u;return o()().wrap((function(e){while(1)switch(e.prev=e.next){case 0:t=a.app,s=a.router,i=a.store,n=!1,l=function(e){try{return Y(s.resolve(e).href)}catch(a){}return Object(e)===e?null:e},c=function(e){if(n=!0,"string"===typeof e&&/^https?:\/\//.test(e))window.location.href=e;else{var a=l(e);null!==a&&(window.location.href=a,window.location.reload())}},d=window.location.href.replace(window.location.origin,""),u=0;case 6:if(!(!1===n&&u{r.r(a),r.d(a,{default:()=>cs,i18n:()=>ls});var t={};r.r(t),r.d(t,{footerBar:()=>Q,langSelect:()=>K,profileCard:()=>Y,refreshRateSelect:()=>G,sideBarMenu:()=>Z,themeSelect:()=>_});var o={};r.r(o),r.d(o,{generatePassword:()=>J,loading:()=>ee,serviceInstallButton:()=>X,strongPasswordStrength:()=>$});var s={};r.r(s),r.d(s,{overviewRoute:()=>oe,quickLinks:()=>se});var i={};r.r(i),r.d(i,{systemInfoDiskUsage:()=>ne,systemInfoIndex:()=>ie,systemInfoResourcesChart:()=>ce,systemInfoTable:()=>le});var n={};r.r(n),r.d(n,{servicesCommandInput:()=>ue,servicesInstallDialog:()=>ge,servicesInstallDialogTabs:()=>ve,servicesNameInput:()=>me,servicesPortBindings:()=>be,servicesStatusIndex:()=>de,servicesStatusTable:()=>he,servicesStatusTableActions:()=>Ce,servicesTabCustom:()=>Se,servicesTabInstallable:()=>ye,servicesUninstallDialog:()=>fe,servicesUpdateDialog:()=>De,servicesVersionInput:()=>pe,startupFileDialog:()=>Ae});var l={};r.r(l),r.d(l,{marketplaceInstallAppDialog:()=>Ee,marketplaceInstallAppForm:()=>Pe,marketplaceInstallAppSlide:()=>Ne,marketplaceTableTdActions:()=>Me,overviewMarketplaceTable:()=>Re});var c={};r.r(c),r.d(c,{accountsCreateUserDialog:()=>Te,accountsDeleteUserDialog:()=>Ie,accountsIndex:()=>Fe,accountsRoute:()=>we,accountsTable:()=>Ue,accountsTableActions:()=>Be,accountsUpdateApiKeyDialog:()=>Le,accountsUpdatePasswordDialog:()=>ke});var d={};r.r(d),r.d(d,{databasesConnectionInfo:()=>He,databasesDialogCreate:()=>Oe,databasesDialogCreateUser:()=>je,databasesDialogRemove:()=>Ve,databasesDialogRemoveUser:()=>ze,databasesDialogUpdateUser:()=>We,databasesIndex:()=>xe,databasesRemoveDatabase:()=>_e,databasesRoute:()=>qe,databasesTable:()=>Ke,databasesUsersActions:()=>Ge});var u={};r.r(u),r.d(u,{phpCreateMapping:()=>Ye,phpDialogPhpVersion:()=>$e,phpExtensionsToggle:()=>ra,phpIndex:()=>Ze,phpOptionsSelect:()=>aa,phpOptionsToggle:()=>Xe,phpSubdirectoryInput:()=>ea,phpVersionSelect:()=>Je,phpVhostSelect:()=>Qe});var m={};r.r(m),r.d(m,{cronIndex:()=>oa,cronOptionsSelects:()=>ca,cronsDialogForm:()=>na,cronsDialogRemove:()=>la,cronsRoute:()=>ta,cronsTable:()=>sa,cronsTableActions:()=>ia});var p={};r.r(p),r.d(p,{fileManagerCodeEditor:()=>pa,fileManagerDialogCompress:()=>La,fileManagerDialogCopy:()=>Ba,fileManagerDialogEditCode:()=>qa,fileManagerDialogEditPermissions:()=>xa,fileManagerDialogExtract:()=>Ha,fileManagerDialogMove:()=>Oa,fileManagerDialogRenameFile:()=>ja,fileManagerEditPermission:()=>Va,fileManagerInputUploaderFile:()=>Ta,fileManagerRoute:()=>da,fileManagerTable:()=>ua,fileManagerToolbarBtnClearTrash:()=>ma,fileManagerToolbarBtnCompress:()=>ga,fileManagerToolbarBtnCopy:()=>va,fileManagerToolbarBtnDownload:()=>ba,fileManagerToolbarBtnDuplicateFile:()=>fa,fileManagerToolbarBtnEditCode:()=>ha,fileManagerToolbarBtnEditPermissions:()=>Ca,fileManagerToolbarBtnExtract:()=>Sa,fileManagerToolbarBtnGoBackUp:()=>Da,fileManagerToolbarBtnHome:()=>ya,fileManagerToolbarBtnMove:()=>Aa,fileManagerToolbarBtnNewFile:()=>Ea,fileManagerToolbarBtnNewFolder:()=>Na,fileManagerToolbarBtnPageReload:()=>Ra,fileManagerToolbarBtnRemove:()=>Fa,fileManagerToolbarBtnRenameFile:()=>Pa,fileManagerToolbarBtnShowTrash:()=>Ma,fileManagerToolbarBtnUploaderFile:()=>wa,fileManagerToolbarDialogNewFile:()=>Ia,fileManagerToolbarDialogNewFolder:()=>Ua,fileManagerToolbarDialogUploaderFile:()=>ka});var g={};r.r(g),r.d(g,{mappingsAdvancedOptions:()=>Wa,mappingsCreateDialog:()=>_a,mappingsDeleteDialog:()=>Ka,mappingsInlineHtmlInput:()=>Ya,mappingsResponseCodeInput:()=>Ga,mappingsRoute:()=>za,mappingsUrlInput:()=>Za,virtualHostsCreateDialog:()=>Qa,virtualHostsDeleteDialog:()=>Ja,virtualHostsSubdomainForm:()=>$a,virtualHostsTable:()=>Xa,virtualHostsTableActions:()=>er,virtualHostsTableMappingsTd:()=>ar});var v={};r.r(v),r.d(v,{sslChangeDialog:()=>sr,sslCreateDialog:()=>or,sslDownloadFilesDialog:()=>ir,sslFilePemClipBoard:()=>nr,sslIndex:()=>tr,sslRoute:()=>rr,sslTable:()=>lr,sslTableActions:()=>cr,sslVirtualHostsSelect:()=>dr});var b={};r.r(b),r.d(b,{marketplaceAppCard:()=>pr,marketplaceDeleteAppDialog:()=>gr,marketplaceIndex:()=>mr,marketplaceInstallAppDialog:()=>vr,marketplaceInstalledAppCard:()=>br,marketplaceRoute:()=>ur,marketplaceTable:()=>fr});var f={};r.r(f),r.d(f,{footerBar:()=>qr,langSelect:()=>Ur,profileCard:()=>Br,refreshRateSelect:()=>kr,sideBarMenu:()=>Lr,themeSelect:()=>Ir});var h={};r.r(h),r.d(h,{generatePassword:()=>xr,loading:()=>jr,serviceInstallButton:()=>Or,strongPasswordStrength:()=>Hr});var C={};r.r(C),r.d(C,{overviewRoute:()=>_r,quickLinks:()=>Kr});var S={};r.r(S),r.d(S,{systemInfoDiskUsage:()=>Zr,systemInfoIndex:()=>Gr,systemInfoResourcesChart:()=>Qr,systemInfoTable:()=>Yr});var y={};r.r(y),r.d(y,{servicesCommandInput:()=>$r,servicesInstallDialog:()=>Xr,servicesInstallDialogTabs:()=>et,servicesNameInput:()=>at,servicesPortBindings:()=>tt,servicesStatusIndex:()=>Jr,servicesStatusTable:()=>st,servicesStatusTableActions:()=>it,servicesTabCustom:()=>nt,servicesTabInstallable:()=>lt,servicesUninstallDialog:()=>ot,servicesUpdateDialog:()=>ct,servicesVersionInput:()=>rt,startupFileDialog:()=>dt});var D={};r.r(D),r.d(D,{marketplaceInstallAppDialog:()=>ut,marketplaceInstallAppForm:()=>mt,marketplaceInstallAppSlide:()=>pt,marketplaceTableTdActions:()=>vt,overviewMarketplaceTable:()=>gt});var A={};r.r(A),r.d(A,{accountsCreateUserDialog:()=>ht,accountsDeleteUserDialog:()=>Ct,accountsIndex:()=>ft,accountsRoute:()=>bt,accountsTable:()=>St,accountsTableActions:()=>At,accountsUpdateApiKeyDialog:()=>Dt,accountsUpdatePasswordDialog:()=>yt});var E={};r.r(E),r.d(E,{databasesConnectionInfo:()=>Nt,databasesDialogCreate:()=>Rt,databasesDialogCreateUser:()=>Mt,databasesDialogRemove:()=>wt,databasesDialogRemoveUser:()=>Ft,databasesDialogUpdateUser:()=>Tt,databasesIndex:()=>Pt,databasesRemoveDatabase:()=>It,databasesRoute:()=>Et,databasesTable:()=>Ut,databasesUsersActions:()=>kt});var P={};r.r(P),r.d(P,{phpCreateMapping:()=>Bt,phpDialogPhpVersion:()=>Ht,phpExtensionsToggle:()=>zt,phpIndex:()=>Lt,phpOptionsSelect:()=>Vt,phpOptionsToggle:()=>Ot,phpSubdirectoryInput:()=>jt,phpVersionSelect:()=>xt,phpVhostSelect:()=>qt});var N={};r.r(N),r.d(N,{cronIndex:()=>_t,cronOptionsSelects:()=>Qt,cronsDialogForm:()=>Zt,cronsDialogRemove:()=>Yt,cronsRoute:()=>Wt,cronsTable:()=>Kt,cronsTableActions:()=>Gt});var R={};r.r(R),r.d(R,{fileManagerCodeEditor:()=>eo,fileManagerDialogCompress:()=>Ao,fileManagerDialogCopy:()=>Eo,fileManagerDialogEditCode:()=>Po,fileManagerDialogEditPermissions:()=>No,fileManagerDialogExtract:()=>Ro,fileManagerDialogMove:()=>Mo,fileManagerDialogRenameFile:()=>wo,fileManagerEditPermission:()=>Fo,fileManagerInputUploaderFile:()=>Co,fileManagerRoute:()=>Jt,fileManagerTable:()=>$t,fileManagerToolbarBtnClearTrash:()=>Xt,fileManagerToolbarBtnCompress:()=>ao,fileManagerToolbarBtnCopy:()=>ro,fileManagerToolbarBtnDownload:()=>to,fileManagerToolbarBtnDuplicateFile:()=>oo,fileManagerToolbarBtnEditCode:()=>so,fileManagerToolbarBtnEditPermissions:()=>io,fileManagerToolbarBtnExtract:()=>no,fileManagerToolbarBtnGoBackUp:()=>co,fileManagerToolbarBtnHome:()=>lo,fileManagerToolbarBtnMove:()=>uo,fileManagerToolbarBtnNewFile:()=>mo,fileManagerToolbarBtnNewFolder:()=>go,fileManagerToolbarBtnPageReload:()=>vo,fileManagerToolbarBtnRemove:()=>ho,fileManagerToolbarBtnRenameFile:()=>po,fileManagerToolbarBtnShowTrash:()=>bo,fileManagerToolbarBtnUploaderFile:()=>fo,fileManagerToolbarDialogNewFile:()=>So,fileManagerToolbarDialogNewFolder:()=>yo,fileManagerToolbarDialogUploaderFile:()=>Do});var M={};r.r(M),r.d(M,{mappingsAdvancedOptions:()=>Io,mappingsCreateDialog:()=>Uo,mappingsDeleteDialog:()=>ko,mappingsInlineHtmlInput:()=>qo,mappingsResponseCodeInput:()=>Lo,mappingsRoute:()=>To,mappingsUrlInput:()=>Bo,virtualHostsCreateDialog:()=>xo,virtualHostsDeleteDialog:()=>Ho,virtualHostsSubdomainForm:()=>Oo,virtualHostsTable:()=>jo,virtualHostsTableActions:()=>Vo,virtualHostsTableMappingsTd:()=>zo});var w={};r.r(w),r.d(w,{sslChangeDialog:()=>Go,sslCreateDialog:()=>Ko,sslDownloadFilesDialog:()=>Zo,sslFilePemClipBoard:()=>Yo,sslIndex:()=>_o,sslRoute:()=>Wo,sslTable:()=>Qo,sslTableActions:()=>Jo,sslVirtualHostsSelect:()=>$o});var F={};r.r(F),r.d(F,{marketplaceAppCard:()=>as,marketplaceDeleteAppDialog:()=>rs,marketplaceIndex:()=>es,marketplaceInstallAppDialog:()=>ts,marketplaceRoute:()=>Xo,marketplaceTable:()=>os});var T=r(23340),I=r(25121);const U={messageLoginSuccess:"Login realizado com sucesso!",messageLoginError:"Erro ao realizar login!"},k=U,L={inputMail:"Endereço de E-mail",invalidMail:"Formato de e-mail inválido."},B=L,q={inputPassword:"Senha",invalidPassword:"Senha deve ter no mínimo {minLength} caracteres."},x=q,H={label:"FQDN",fqdnRequired:"Campo {label} é obrigatório",fqdnMaxLengthError:"{label} deve ter menos de 255 caracteres",fqdnRegexError:"{label} deve ser um nome de domínio válido"},O=H,j={mailAddressInput:B,passwordInput:x,fqdnInput:O},V=j,z={authTokenInvalided:"Sua sessão expirou, por favor, faça login novamente.",invalidCredentials:"Credenciais inválidas.",networkError:"Servidor indisponível.",timeoutError:"Tempo de requisição expirado."},W=z,_={light:"Claro",dark:"Escuro"},K={label:"Idioma",en:"Inglês",pt:"Português"},G={selectRefreshRate:"Refresh Rate"},Z={apps:"Aplicações",fileManager:"Gerenciador de Arquivos",domains:"Domínios",backups:"Backups",webServers:"Servidores Web",metrics:"Métricas",logs:"Logs",imageOptimizer:"Otimizador de Imagens",security:"Segurança",terminal:"Terminal",disabled:"Recurso em desenvolvimento"},Y={btnSettings:"Configurações",btnLogout:"Sair"},Q={cpuUsage:"{cpuUsage}% de CPU em uso",ramUsage:"{ramUsage}% de RAM em uso",storageUsage:"{storageUsage}% de disco em uso",disabled:"Recurso em desenvolvimento"},J={btnGeneratePassword:"gerar uma senha aleatória",messageCopiedPassword:"A senha gerada foi copiada para sua área de transferência.
    Use CTRL + V para colar em seu gerenciador de senhas."},$={securePassword:"Senha segura",isTooShort:"No mínimo {minPasswordLength} caracteres;",isTooLong:"No máximo {maxPasswordLength} caracteres;",hasNumber:"Ao menos 1 número;",hasUpperCases:"Ao menos 1 letra maiúscula;",hasLowerCases:"Ao menos 1 letra minúscula.",hasReservedCharSuccess:"Sem caracteres especiais reservados.",hasReservedCharError:"Uso de caracteres especiais reservados: "},X={uninstalledService:"O serviço {serviceName} não está instalado no servidor.",installService:"Instalar o serviço {serviceName}"},ee={messageDefault:"Carregando..."},ae={title:"Runtime"},re={title:"Configurações"},te={title:"Configurações",titleConfigs:"Alterar Configurações",titleProfile:"Alterar Senha",titleApiKey:"Alterar Chave de API",updatePasswordBtn:"Atualizar Senha",generatedApiKey:"Chave de API Gerada",generateNewApiKeyBtn:"Gerar Nova Chave de API",closeBtn:"Fechar",copiedToClipboard:"Copiado para a área de transferência.",saveNewApiKey:"Nova chave de API gerada. Salve-a em um local seguro porque a chave não é armazenada no servidor.",errorGettingAccounts:"Erro ao obter contas.",updatedPasswordSuccessfully:"Senha atualizada com sucesso.",errorUpdatingPassword:"Erro ao atualizar a senha.",updatedApiKeySuccessfully:"Nova chave de API gerada, salve-a em um local seguro",errorUpdatingApiKey:"Erro ao atualizar a chave de API."},oe={title:"Visão Geral"},se={titleQuickLinks:"Atalhos",linkApps:"Apps",linkDatabases:"Bancos de Dados",linkFiles:"Arquivos",linkBackups:"Backups",linkDomains:"Domínios",linkMetrics:"Métricas",linkLogs:"Logs",linkTerminal:"Terminal"},ie={titleSystemInfo:"Informações do Sistema"},ne={diskUsage:"Uso de Disco"},le={titleSystemInfo:"Informações do Sistema",colHostname:"Nome do Host",colRuntimeContext:"Contexto de Execução",colUptime:"Tempo de Atividade",colHardware:"Especificações de Hardware",colPublicIp:"Endereço IP Público"},ce={titleResourcesChart:"Uso de Recursos",cpu:"Processador",ram:"Memória RAM"},de={titleServicesStatus:"Serviços"},ue={serviceCommandPlaceholder:"exemplo: /usr/bin/binary",requiredError:"Comando é obrigatório.",maxLengthError:"Comando deve ter menos de 255 caracteres.",commandRegexError:"Comando deve ser um commando válido.",helpCommand:'

    Se precisar instalar vários pacotes para executar seu software, você deverá usar o Terminal (SSH).

    '},me={serviceNameLabel:"Nome do Serviço",requiredError:"Nome do Serviço é obrigatório.",maxLengthError:"Nome do Serviço deve ter menos de 255 caracteres.",serviceNameRegexError:"Nome do Serviço deve ser um nome de serviço válido."},pe={versionLabel:"Versão",requiredError:"Versão é obrigatória",maxLengthError:"Versão deve ter menos de 255 caracteres.",versionRegexError:"Versão deve ser uma versão válida."},ge={titleInstallService:"Instalar Serviço"},ve={installableForm:"Instalável",customForm:"Personalizado"},be={titlePortBindings:"Portas",hostPortInputLabel:"Porta",PortError:"A porta deve ser um número entre 1 e 65535.",protocolInputLabel:"Protocolo"},fe={uninstallDialogTitle:"Desinstalar Serviço",uninstallDialogDescription:"Deseja realmente desinstalar o serviço {serviceName}?",warningUninstallService:"Atenção! Ao desinstalar o serviço, todos os dados serão perdidos.",uninstallDialogCancelBtn:"Cancelar",uninstallDialogConfirmBtn:"Sim, Desinstalar Serviço"},he={notFound:"Nenhum serviço encontrado.",colServiceName:"Nome do Serviço",colPids:"PIDs",colUptime:"Tempo de Atividade",colCpuUsage:"Uso de CPU",colRamUsage:"Uso de RAM",inputSearch:"Pesquisar",createServiceBtn:"Instalar Novo Serviço"},Ce={restartBtn:"Reiniciar Serviço",uninstallBtn:"Remover Serviço",updateBtn:"Editar Serviço",installBtn:"Instalar Serviço",startSuccess:"Serviço iniciado com sucesso.",stopLoading:"Parando serviço, aguarde a finalização...",stopSuccess:"Serviço parado com sucesso.",startError:"Erro ao iniciar o serviço.",startLoading:"Iniciando serviço, aguarde a finalização...",stopError:"Erro ao parar o serviço.",restartLoading:"Reiniciando serviço, aguarde a finalização...",restartSuccess:"Serviço reiniciado com sucesso.",restartError:"Erro ao reiniciar o serviço.",installLoading:'

    Atualizando Status do Serviço

    Por favor, aguarde...

    Esse processo pode demorar um pouco. NÃO atualize ou feche a página.

    ',installSuccess:"Serviço instalado com sucesso.",installError:"Erro ao instalar o serviço.",uninstallLoading:"Desinstalando serviço, aguarde a finalização...",uninstallSuccess:"Serviço desinstalado com sucesso.",uninstallError:"Erro ao desinstalar o serviço.",systemServiceWarning:"Serviços do tipo sistema não podem ser removidos ou alterados, apenas reiniciados."},Se={serviceNameLabel:"Nome do Serviço",versionLabel:"Versão",commandLabel:"Comando",startupFileLabel:"Arquivo de Inicialização",typeSelect:"Tipo de Serviço",application:"Aplicação",runtime:"Tempo de Execução",database:"Banco de Dados",webserver:"Servidor Web",mom:"Mensageria",monitoring:"Monitoramento",logging:"Registro",security:"Segurança",backup:"Backup",system:"Sistema",other:"Outro",advancedSettingsLabel:"Configurações Avançadas",cancelButton:"Cancelar",installButton:"Instalar Serviço",installSuccess:"Serviço instalado com sucesso.",installError:"Erro ao instalar o serviço.",labelExecut:"Modo de Execução",labelRadioCommand:"Comando de inicialização",labelRadioFile:"ou faça upload de um arquivo executável",labelUploadFile:"Selecione o arquivo (.appImage, .jar etc)",labelCommand:"Comando",uploadError:"Erro ao fazer upload do arquivo."},ye={serviceLabel:"Serviço",versionLabel:"Versão",titleStartupFile:"Selecione o Arquivo de Inicialização",selectStartupFile:"Selecione o Arquivo",startupFileLabel:"Arquivo de Inicialização",helpText:"Este arquivo será executado sempre que o serviço for iniciado.",advancedSettingsLabel:"Configurações Avançadas",cancelButton:"Cancelar",installButton:"Instalar Serviço",installSuccess:"Serviço instalado com sucesso.",installError:"Erro ao instalar o serviço."},De={titleUpdateService:"Atualizar Serviço",cancelButton:"Cancelar",advancedSettingsLabel:"Advanced Settings",updateButton:"Atualizar Serviço",updateSuccess:"Serviço atualizado com sucesso.",updateError:"Erro ao atualizar o serviço."},Ae={title:"Selecione o Arquivo de Inicialização",cancelBtn:"Cancelar"},Ee={title:"Marketplace",subtitle:"O processo de instalação é assíncrono, executado em segundo plano. Esse processo pode levar alguns minutos.
    Assim que a instalação for concluída, o item instalado será exibido na lista.",getCatalogWithError:"Falha ao obter catálogo de aplicativos."},Pe={installParams:"Parâmetros de instalação",descriptionInstallParams:"Preencha os campos abaixo quando obrigatórios ou quando quiser alterar alguma configuração.",marketplaceType:{apps:"Apps",stacks:"Stacks",frameworks:"Frameworks"},cancelBtn:"Cancelar",confirmBtn:"Instalar Marketplace",installAppSuccess:"Deploy do item do marketplace agendado com sucesso.",installAppWithError:"Agendamento do deploy do item do marketplace falhou."},Ne={notFoundApps:"{type}s não encontrados."},Re={noDataLabel:"Nenhum aplicativo disponível.",searchInput:"Pesquisar",installBtn:"Instalar",appNameColumn:"Nome",installDirectoryColumn:"Diretório de Instalação",createdAtColumn:"Criado Em"},Me={uninstallBtn:"Desinstalar"},we={title:"Contas"},Fe={errorLoadingAccounts:"Não foi possível carregar contas de usuários."},Te={title:"Criar Conta",username:"Nome de usuário",usernameRequired:"Nome de usuário é obrigatório.",usernameMinLength:"Nome de usuário deve ter no mínimo 3 caracteres.",cancelBtn:"Cancelar",createBtn:"Criar Conta",createdSuccessfully:"Conta criada com sucesso.",errorCreatingAccount:"Não foi possível criar a conta."},Ie={title:"Remover Usuário {username}",messageDeleteAccount:"Tem certeza que deseja remover o usuário {username}?",warningDeleteAccount:"Atenção! Esta ação não pode ser desfeita.",cancelBtn:"Cancelar",deleteBtn:"Sim, Remover Usuário",deletedSuccessfully:"Usuário {username} removido com sucesso.",errorDeletingAccount:"Não foi possível remover o usuário {username}."},Ue={createAccountBtn:"Criar Conta",noDataLabel:"Nenhuma conta de usuário encontrada.",searchInput:"Pesquisar"},ke={title:"Alterar Senha do Usuário {username}",cancelBtn:"Cancelar",closeDialogBtn:"Cancelar",updateBtn:"Alterar Senha",updatedSuccessfully:"Senha alterada com sucesso.",errorUpdatingAccount:"Não foi possível alterar a senha."},Le={title:"Alterar Chave de API do Usuário {username}",generatedApiKey:"Nova chave de API gerada.",updatedSuccessfullyWithApiKey:"Nova chave de API gerada, salve-a em um local seguro.",saveNewApiKey:"Nova chave de API gerada. Por favor, salve-a em um local seguro porque a chave não é armazenada no servidor.",copiedToClipboard:"Copiado para a área de transferência.",closeDialogBtn:"Cancelar",generateNewApiKeyBtn:"Gerar Nova Chave de API",updatedSuccessfully:"Nova chave de API gerada com sucesso.",errorUpdatingApiKey:"Não foi possível gerar nova chave de API."},Be={editPasswordBtn:"Alterar Senha",editApiKeyBtn:"Alterar Chave de API",deleteBtn:"Remover Conta"},qe={title:"Bancos de Dados"},xe={errorLoadingPostgresqlDatabases:"Erro ao carregar a lista de bases de dados Postgresql.",errorLoadingMysqlDatabases:"Erro ao carregar a lista de bases de dados Mysql."},He={tdIpAddress:"Endereço IP do Servidor",tdPort:"Porta do Servidor",localhost:"localhost",dataLocal:"Conexão Local"},Oe={titleDialogCreate:"Criar Base de Dados",inputDataBaseName:"Nome da base de dados",inputUserName:"Nome do usuário",messageValidateError:"Somente letras, números e underline são permitidos.",btnCancel:"Cancelar",btnCreateDataBase:"Criar Base de Dados",createDataBaseSuccess:"Base de dados criado com sucesso.",createDataBaseError:"Erro ao criar base de dados."},je={titleDialogCreateUser:"Criar Usuário de Banco de Dados",textSelectDatabases:"Selecione as bases de dados",inputUsername:"Nome do usuário",messageInputError:"Somente letras, números e underline são permitidos.",textPrivileges:"Privilégios",textPrivilegesSelect:"Selecione os privilégios",toggleSelectAll:"Selecionar todos",btnCancel:"Cancelar",btnCreateUser:"Criar Usuário",messageCreateUserSuccess:"Usuário criado com sucesso.",messageCreateUserError:"Erro ao criar usuário."},Ve={titleDialogRemove:"Remover Base de Dados",messageConfirmRemove:"Tem certeza que deseja remover a base de dados {databaseName}?",warningRemoveDatabase:"Atenção! Esta ação não pode ser desfeita",btnCancel:"Cancelar",btnRemove:"Remover Base de Dados",messageRemoveSuccess:"Base de dados removida com sucesso.",messageRemoveError:"Erro ao remover base de dados."},ze={titleDialogRemoveUser:"Remover Usuário de Banco de Dados",messageConfirmRemove:"Tem certeza que deseja remover o usuário {username}?",warningRemoveUser:"Atenção! Esta ação não pode ser desfeita.",btnCancel:"Cancelar",btnRemove:"Remover Usuário",subtitleDialogRemoveUser:"{databaseType} - {databaseName}",messageRemoveUserSuccess:"Usuário removido com sucesso.",messageRemoveUserError:"Erro ao remover usuário."},We={titleDialogUpdateUser:"Atualizar Usuário de Banco de Dados: {user}",subtitleDialogUpdateUser:"Base de dados: {databaseType}",textAlertMessage:"Atenção! Esta ação não pode ser desfeita.",inputName:"Nome do usuário",textPrivileges:"Privilégios",toggleSelectAll:"Selecionar todos",textPostgresPrivileges:'Todos usuários ProstgreSQL serão criados com "ALL PRIVILEGES" nas bases de dados e na schema public',btnCancel:"Cancelar",btnUpdateUser:"Atualizar Usuário",messageUpdateUserSuccess:"Usuário atualizado com sucesso.",messageUpdateUserError:"Erro ao atualizar usuário."},_e={tooltipRemove:"Remover Base de Dados"},Ke={notFoundDatabases:"Nenhuma base de dados encontrada.",search:"Pesquisar",btnCreateUser:"Criar Usuário",btnCreateDatabase:"Criar Base de Dados",databaseName:"Nome da Base de Dados",databaseUsers:"Usuários",databaseSize:"Tamanho"},Ge={tooltipEditUser:"Editar Usuário",tooltipRemoveUser:"Remover Usuário"},Ze={textWarningChanges:'Suas alterações ainda não foram aplicadas. Clique em "Atualizar Configurações" para propagar as mudanças desejadas.',btnUpdateConfigurations:"Atualizar Configurações",tabExtensions:"Extensões",tabOptions:"Opções",getVirtualHostsError:"Não foi possível listar os hosts virtuais do servidor.",getMappingsError:"Não foi possível listar os mapeamentos dos hosts virtuais do servidor.",checkPhpServiceError:"Não foi possível verificar o status do serviço PHP.",getPhpConfigurationsError:"Não foi possível exibir as configurações do PHP.",updatePhpConfigurationsSuccess:"Configurações do PHP.ini atualizadas com sucesso.",updatePhpConfigurationsError:"Não foi possível atualizar as configurações do PHP.ini."},Ye={title:"O Host Virtual Selecionado Ainda Não Está Mapeado para o PHP",mappingExplanation:"O mapeamento de um virtual host para um servidor PHP permite que diferentes partes de um site sejam tratadas por servidores PHP diferentes, permitindo funcionalidades específicas para cada seção do site.",createBtn:"Criar Mapeamento",createMappingSuccessfully:"Mapeamento criado com sucesso",createMappingError:"Não foi possível criar o mapeamento"},Qe={selectVirtualHost:"Host Virtual"},Je={selectPhpVersion:"Versão do PHP"},$e={title:"Você tem certeza de que deseja alterar a versão do PHP?",body:"

    Antes de alterar, confira se sua aplicação é compatível com a versão PHP {newVersion}.

    Lembre-se de em seguida habilitar/desabilitar os módulos desejados e ajustar as configurações na nova versão, uma vez que os módulos/configurações da versão anterior podem ser diferentes.

    ",btnCancel:"Cancelar",btnConfirm:"Alterar Versão",updatePhpVersionSuccess:"Versão do PHP alterada com sucesso.",updatePhpVersionError:"Não foi possível alterar a versão do PHP."},Xe={enablePhpSettingError:"Não foi possível ativar a opção {settingName}.",disablePhpSettingError:"Não foi possível desativar a opção {settingName}.",enablePhpSettingSuccess:"Opção {settingName} ativada com sucesso.",disablePhpSettingSuccess:"Opção {settingName} desativada com sucesso."},ea={urlLabel:"Subdiretório",urlIsInvalid:"URL inválida",urlExplanation:"Subdiretórios são usados para acessar diferentes aplicações em um mesmo domínio. Por exemplo, se você tem um site em {hostname} e deseja criar um blog, você pode criar um subdiretório chamado blog e acessá-lo em {hostname}/blog."},aa={enablePhpSettingError:"Não foi possível ativar a opção {settingName}.",enablePhpSettingSuccess:"Opção {settingName} ativada com sucesso."},ra={enablePhpModuleError:"Não foi possível ativar o módulo {moduleName}.",disablePhpModuleError:"Não foi possível desativar o módulo {moduleName}.",enablePhpModuleSuccess:"Módulo {moduleName} ativado com sucesso.",disablePhpModuleSuccess:"Módulo {moduleName} desativado com sucesso."},ta={title:"Agendador de Tarefas"},oa={getCronjobsError:"Não foi possível buscar as informações sobre tarefas agendadas."},sa={notFoundCronjobs:"Não foi possível encontrar tarefas agendadas.",btnNewTask:"Agendar Nova Tarefa",inputSearch:"Pesquisar",columnSchedule:"Agendamento",columnCommand:"Comando",columnComment:"Comentário",predefinedHourly:"A cada hora",predefinedDaily:"Diariamente",predefinedWeekly:"Semanalmente",predefinedMonthly:"Mensalmente",predefinedYearly:"Anualmente",predefinedAnnually:"Anualmente",predefinedReboot:"Ao reiniciar"},ia={btnEditCronjob:"Editar Tarefa",btnRemoveCronjob:"Remover Tarefa"},na={editCronjob:"Editar Tarefa",newCronjob:"Nova Tarefa",updateCronjob:"Atualizar Tarefa",createCronjob:"Criar Tarefa",btnCancel:"Cancelar",updateCronjobSuccess:"Tarefa atualizada com sucesso.",updateCronjobError:"Não foi possível atualizar a tarefa.",createCronjobSuccess:"Tarefa criada com sucesso.",createCronjobError:"Não foi possível criar a tarefa.",predefinedForm:"Predefinido",customForm:"Customizado",selectExecuteTask:"Executar Tarefa",predefinedHourly:"A cada hora",predefined3Hours:"A cada 3 horas",predefined6Hours:"A cada 6 horas",predefined12Hours:"A cada 12 horas",predefinedDaily:"Diariamente",predefinedWeekly:"Semanalmente",predefinedMonthly:"Mensalmente",predefinedYearly:"Anualmente",predefinedAnnually:"Anualmente",predefinedReboot:"Reboot",fieldMinutes:"Minuto(s)",fieldDays:"Dia(s)",fieldHours:"Hora(s)",fieldMonths:"Meses",fieldWeekDay:"Dia da Semana",fieldCommand:"Comando",fieldComment:"Comentário",messageFieldRequired:"Campo obrigatório.",messageInputError:"Você não formatou as configurações corretamente."},la={titleDialogRemove:"Remover a Tarefa",confirmRemoveCron:"Você tem certeza que deseja remover essa tarefa?",warningRemoveCron:"Essa ação é irreversível.",btnCancel:"Cancelar",btnConfirm:"Sim, Remova a Tarefa",removeCronSuccess:"Tarefa removida com sucesso.",removeCronError:"Não foi possível remover a tarefa."},ca={everyMinute:"A cada minuto",everyMinutes:"A cada {minute} minutos",atMinute:"No minuto {minute}",everyHour:"A cada hora",everyHours:"A cada {hour} horas",atMidnight:"A meia-noite",atMidday:"Ao meio-dia",atHour:"As {standard24hours}h ({standard12hours})",everyDay:"Todos os dias",everyDays:"A cada {day} dias",weekly:"Uma vez por semana",atDay:"No dia {day}",everyMonth:"Todos os meses",everyMonths:"A cada {month} meses",january:"Janeiro",february:"Fevereiro",march:"Março",april:"Abril",may:"Maio",june:"Junho",july:"Julho",august:"Agosto",september:"Setembro",october:"Outubro",november:"Novembro",december:"Dezembro",everyWeekDay:"Todos os dias da semana",mondayToFriday:"De segunda a sexta",onlyWeekends:"Apenas finais de semana",everyMonday:"Todas as segundas-feiras",everyTuesday:"Todas as terças-feiras",everyWednesday:"Todas as quartas-feiras",everyThursday:"Todas as quintas-feiras",everyFriday:"Todas as sextas-feiras",everySaturday:"Todos os sábados",everySunday:"Todos os domingos"},da={title:"Gerenciador de Arquivos"},ua={notFoundFiles:"Não foi possível encontrar nenhum arquivo neste diretório.",labelInputSearch:"Pesquisar",placeholderInputSearch:"Pesquisar no Diretório",colUserAndGroup:"Usuário:Grupo",colName:"Nome",colSize:"Tamanho",colType:"Tipo",colLastModifiedDate:"Última Atualização",colPermission:"Permissão",oneFileSelected:"1 registro selecionado de {total}",multiFileModelsSelected:"{quantity} registros selecionados de {total}",labelSelectRowsViews:"Quantidade de Registros"},ma={btnClearTrash:"Esvaziar Lixeira",titleDialogClearTrash:"Esvaziar Lixeira",bodyDialogClearTrash:"Você tem certeza que deseja remover todos arquivos na lixeira?
    Essa ação é irreversível.",msgRemoveSuccess:"Lixeira esvaziada com sucesso.",msgRemoveError:"Não foi possível remover os arquivos na lixeira.",msgCreateTrashError:"Não foi possível criar a lixeira novamente.",btnCancel:"Cancelar",btnConfirm:"Sim, esvazie a lixeira"},pa={btnSave:"Salvar",btnUndo:"Desfazer",btnRedo:"Refazer",btnRedoAll:"Desfazer Todas Alterações",btnSaveFile:"Salvar Arquivo",btnDecreaseFont:"Diminuir Fonte",btnIncreaseFont:"Aumentar Fonte"},ga={btnCompress:"Compactar"},va={btnCopy:"Copiar"},ba={btnDownload:"Download do Arquivo",msgDownloadError:"Não foi possível fazer download do arquivo {fileName}"},fa={btnDuplicateFile:"Duplicar Arquivo",msgDuplicateFileSuccess:"Arquivo {fileName} foi duplicado com sucesso.",msgDuplicateFileError:"Não foi possível duplicar o arquivo {fileName}."},ha={btnEditCode:"Editar Código"},Ca={btnEditPermissions:"Editar Permissões"},Sa={btnExtract:"Extrair Arquivo"},ya={btnGoToHome:"Ir para diretório raiz"},Da={btnGoBackUp:"Voltar um Nível"},Aa={btnMoveFile:"Mover Arquivo",btnMoveFiles:"Mover Arquivos Selecionados",btnMoveDir:"Mover Diretório"},Ea={btnNewFile:"Novo Arquivo"},Pa={btnRenameDir:"Renomear Diretório",btnRenameFile:"Renomear Arquivo"},Na={btnNewFolder:"Nova Pasta"},Ra={btnPageReload:"Recarregar Página"},Ma={btnShowTrash:"Exibir Lixeira"},wa={btnUploaderFile:"Upload de Arquivo"},Fa={btnRemoveFile:"Remover o Arquivo",btnRemoveDir:"Remover Diretório",titleDialogRemoveFile:"Remover Arquivo",titleDialogRemoveDir:"Remover Diretório",msgConfirmRemoveSelectedOneFile:"Você tem certeza que deseja remover o arquivo selecionado?
    O arquivo permanecerá na lixeira por 30 dias.",msgConfirmRemoveSelectedMultiFileModels:"Você tem certeza que deseja remover os {countFiles} arquivos selecionados?
    Os arquivos permanecerão na lixeira por 30 dias.",msgConfirmRemoveOneFile:"Você tem certeza que deseja remover o {mimeType} {fileName}?
    O arquivo permanecerá na lixeira por 30 dias.",msgConfirmRemoveSelectedOneFileTrash:"Você tem certeza que deseja remover o {mimeType} selecionado?
    Essa ação é irreversível.",msgConfirmRemoveSelectedMultiFileModelsTrash:"Você tem certeza que deseja remover os {countFiles} arquivos selecionados?
    Essa ação é irreversível.",msgConfirmRemoveOneFileTrash:"Você tem certeza que deseja remover o {mimeType} {fileName}?
    Essa ação é irreversível.",msgRemoveSuccess:"Arquivo(s) movido(s) para a lixeira com sucesso.",msgRemovePermanentSuccess:"Arquivo(s) permanentemente apagado(s).",msgRemoveError:"Não foi possível remover os arquivos.",btnCancel:"Cancelar",btnConfirm:"Sim, remover"},Ta={title:"Upload de Arquivo",addFile:"Adicionar Arquivo"},Ia={titleDialog:"Novo Arquivo",labelInputNameFile:"Nome do Novo Arquivo",fieldRequired:"Campo Obrigatório.",onlyAlphaNumeric:"Somente letras, números e underscore",inputCreateIn:"Criar em",btnCancel:"Cancelar",btnCreateFile:"Novo Arquivo",msgCreateFileSuccess:"O arquivo {fileName} foi criado com sucesso.",msgCreateFileError:"Não foi possível criar o arquivo {fileName}."},Ua={titleDialog:"Nova Pasta",labelInputNameFolder:"Nome da Nova Pasta",fieldRequired:"Campo Obrigatório.",onlyAlphaNumeric:"Somente letras, números e underscore",inputCreateIn:"Criar em",btnCancel:"Cancelar",btnCreateFolder:"Nova Pasta",msgCreateFolderSuccess:"O diretório {dirName} foi criado com sucesso.",msgCreateFolderError:"Não foi possível criar o diretório {dirName}."},ka={titleDialog:"Upload de Arquivo",selectDir:"Selecionar Diretório:",inputSendTo:"Enviar Para",btnCancel:"Cancelar",btnUploaderFile:"Enviar Arquivo",msgUploaderFileSuccess:"Upload do arquivo {fileName} realizado com sucesso.",msgUploaderFileError:"Erro no upload do arquivo {fileName}: {reason}."},La={simpleTitleDialog:"Compactar o Arquivo",countTitleDialog:"Compactar os {countSelectedPaths} Arquivos Selecionados",inputName:"Nome do Arquivo",fieldRequired:"Campo Obrigatório.",onlyAlphaNumeric:"Somente letras, números e underscore.",extensionFile:"Extensão do Arquivo",selectedPaths:"Arquivos Selecionados",selectDir:"Selecionar Diretório:",destinationDir:"Diretório de Destino",btnCancel:"Cancelar",btnCompressFile:"Compactar Arquivo",msgCompressedFileSuccess:"Arquivo(s) compactado(s) com sucesso: {compressedFileName}.",msgCompressedFileError:"Não foi possível compactar o arquivo {compressedFileName}."},Ba={titleDialog:"Copiar Arquivo",selectDir:"Selecionar Diretório:",copyTo:"Copiar Para",btnCancel:"Cancelar",btnCopyFile:"Copiar Arquivo",msgCopiedFileSuccess:"Arquivo {fileName} foi copiado com sucesso.",msgCopiedFileError:"Não foi possível copiar o arquivo {fileName}."},qa={titleEditCode:"Editar Código",titleDialogWarningSave:"Alterações Não Salvas",bodyDialogWarningSave:"Há alterações não salvas, deseja descartar as alterações ?",btnDialogWarningSave:"Descartar Alterações",inputAbsolutePath:"Caminho Absoluto",msgGetContentError:"Não foi possível exibir o conteúdo do arquivo {fileName}.",msgSaveCodeSuccess:"Arquivo {fileName} foi salvo com sucesso.",msgSaveCodeError:"Não foi possível salvar o arquivo {fileName}."},xa={titleDialog:"Editar Permissões",btnCancel:"Cancelar",btnSave:"Salvar Alterações",msgEditPermissionsSuccess:"Permissões alteradas com sucesso.",msgEditPermissionsError:"Não foi possível alterar as permissões do arquivo {fileName}."},Ha={titleDialog:"Extrair Arquivo",selectDir:"Selecionar diretório:",inputExtractTo:"Extrair para",btnCancel:"Cancelar",btnExtractFile:"Extrair Arquivo",msgExtractFileSuccess:"Arquivo {filename} foi extraído com sucesso.",msgExtractFileError:"`Não foi possível extrair o arquivo {filename}."},Oa={titleOneFile:"Mover Arquivo {fileName}",titleOneDir:"Mover Diretório {dirName}",titleMultiFileModel:"Mover os {count} Arquivos Selecionados",selectDir:"Selecionar Diretório:",inputMoveTo:"Mover Para",btnMoveFile:"Mover Arquivo",btnMoveFiles:"Mover Arquivos",btnMoveDir:"Mover Diretório",btnCancel:"Cancelar",msgMoveOneFileSuccess:"Arquivo {fileName} foi movido com sucesso.",msgMoveMultiFileModelsSuccess:"Os {count} arquivos foram movidos com sucesso.",msgMoveOneFileError:"Não foi possível mover o arquivo {fileName}.",msgMoveMultiFileModelsError:"Não foi possível mover os {count} arquivos selecionados."},ja={titleRenameFile:"Renomear Arquivo",titleRenameDir:"Renomear Diretório",absolutePath:"Caminho Absoluto",fieldRequired:"Campo Obrigatório.",onlyAlphaNumeric:"Somente letras, números e underscore.",dirName:"Nome do Diretório",fileName:"Nome do Arquivo",btnCancel:"Cancelar",btnSave:"Salvar Alteração",msgRenamedFileSuccess:"Arquivo {fileName} alterado com sucesso.",msgRenamedDirSuccess:"Diretório {dirName} alterado com sucesso.",msgRenamedFileError:"Não foi possível alterar o arquivo {fileName}.",msgRenamedDirError:"Não foi possível alterar o diretório {fileName}."},Va={permissions:"Permissões: ",user:"Usuário",group:"Grupo",others:"Outros",read:"Leitura",write:"Gravação",execute:"Execução"},za={title:"Mapeamentos"},Wa={advancedOptionsLabel:"Opções Avançadas",matchPatternLabel:"Padrão de Correspondência",matchPatternOptions:{beginWith:"Começa Com",contains:"Contém",endsWith:"Termina Com",equals:"Igual a"}},_a={title:"Criar Mapeamento",cancelBtn:"Cancelar",targetType:{url:"URL",service:"Serviço",responseCode:"Código de Resposta",inlineHtml:"Inline HTML",staticFiles:"Arquivos Estáticos"},hostnameLabel:"Nome do Host",servicesNameLabel:"Nome do Serviço",pathLabel:"URL de Origem",responseCodeLabel:"Response Code",targetUrlLabel:"URL de Destino",createBtn:"Criar Mapeamento",createMappingSuccessfully:"Mapeamento criado com sucesso.",createMappingError:"Erro ao criar mapeamento."},Ka={title:"Excluir Mapeamento",confirmRemoveMapping:"Tem certeza de que deseja excluir o mapeamento para {path}?",warningRemoveMapping:"Esta ação não pode ser desfeita.",cancelBtn:"Cancelar",deleteBtn:"Sim, excluir mapeamento",deleteMappingSuccess:"Mapeamento excluído com sucesso.",deleteMappingError:"Erro ao excluir mapeamento."},Ga={responseCodeLabel:"Código de Resposta",responseCodeIsRequired:"O código de resposta é obrigatório",responseCodeIsInvalid:"O código de resposta é inválido"},Za={targetUrlLabel:"URL",targetUrlIsRequired:"URL é obrigatória",targetUrlIsInvalid:"URL é inválida"},Ya={targetInlineHtmlLabel:"Inline HTML",targetInlineHtmlIsRequired:"Inline HTML é obrigatório"},Qa={title:"Criar Virtual Host",hostnameLabel:"Hostname",typeLabel:"Tipo",parentHostnameLabel:"Hostname Pai",cancelBtn:"Cancelar",createBtn:"Criar Virtual Host",optionTopLevel:"Top Level",optionSubdomain:"Subdomínio",optionWildcard:"Wildcard",optionAlias:"Alias",createVhostSuccess:"Virtual Host criado com sucesso",createVhostError:"Erro ao criar virtual host"},Ja={title:"Deletar Virtual Host",confirmRemove:"Tem certeza de que deseja excluir o virtual host {virtualHost}?",warningRemove:"Esta ação não pode ser desfeita.",cancelBtn:"Cancelar",deleteBtn:"Sim, Deletar Virtual Host",deleteVhostSuccess:"Virtual Host deletado com sucesso.",deleteVhostError:"Erro ao deletar virtual host."},$a={topLevelLabel:"Domínio Pai",hostnameLabel:"Subdomínio"},Xa={noDataLabel:"Nenhum mapeamento encontrado.",searchInput:"Pesquisar",createMappingsBtn:"Criar Mapeamento",createVirtualHostsBtn:"Criar Virtual Hosts"},er={deleteBtn:"Excluir Virtual Host"},ar={aliasWarning:"Este virtual host é um alias e não pode ter mapeamentos.",createMappingBtn:"Criar Mapeamento",matchPattern:"Padrão de Correspondência",deleteBtn:"Delete Mapping"},rr={title:"Certificado SSL"},tr={errorLoadingSsl:"Não foi possível carregar o certificado SSL."},or={title:"Adicionar/Substituir Certificado SSL",labelShowFileTypeInputs:"OU carregar arquivos (.crt/.key - formato pem)",labelCertificateInput:"Certificado",certificateContentIsRequired:"O conteúdo do certificado é obrigatório.",certificateContentIsInvalid:"O conteúdo do certificado é inválido.",labelPrivateKeyInput:"Chave Privada",privateKeyIsRequired:"A chave privada é obrigatória.",privateKeyIsInvalid:"A chave privada não é valida.",labelCertificateChainInput:"Certificado Intermediário (CA Bundle / Chain)",certificateAuthIsInvalid:"O certificado intermediário é inválido.",cancelBtn:"Cancelar",createBtn:"Adicionar/Substituir Certificado SSL",createdSuccessfully:"Certificado SSL criado com sucesso.",errorCreatingSsl:"Não foi possível criar o certificado SSL."},sr={title:"Substituir Certificado SSL",messageReplaceSsl:"Tem certeza de que deseja substituir o certificado SSL?",warningReplaceSsl:"Use esta ação somente se você não deseja mais usar o certificado SSL atual. O sistema substituirá o certificado atual por um SSL auto-assinado até que seja possível emitir um novo certificado SSL Let's Encrypt válido.",cancelBtn:"Cancelar",swapSslBtn:"Sim, Substituir Certificado SSL",deletedSuccessfully:"Certificado SSL substituído com sucesso.",errorDeletingSsl:"Não foi possível substituir o certificado SSL."},ir={title:"Download dos arquivos PEM",labelCertificate:"Certificado",labelPrivateKey:"Chave Privada"},nr={messageClipBoard:"Copiar o conteúdo",downloadFile:"Download do Arquivo",messageCopied:"O conteúdo foi copiado para a área de transferência.
    Use CTRL + V para colar."},lr={createSslBtn:"Adicionar/Substituir Certificado SSL",noDataLabel:"Nenhum certificado SSL encontrado.",searchInput:"Pesquisar",virtualHostCol:"Virtual Host",issuedAtCol:"Data de Emissão",expiresAtCol:"Valido até",isCACol:"Entidade Certificadora",isCAYes:"Sim",isCANo:"Não"},cr={downloadPemFilesBtn:"Download dos arquivos PEM",swapSslBtn:"Substituir por SSL auto-assinado"},dr={labelSelectVirtualHosts:"Selecionar Virtual Hosts"},ur={title:"Marketplace"},mr={title:"Marketplace",getCatalogWithError:"Falha ao obter catálogo de marketplace.",getInstalledAppsWithError:"Falha ao obter marketplace instalados.",installedApps:"Marketplace instalados",catalog:"Catálogo"},pr={installBtn:"Instalar"},gr={title:"Desinstalar Marketplace",confirmRemoveApp:"Deseja realmente desinstalar o marketplace {appName}?",warningRemoveApp:"Atenção: Todos os dados do marketplace serão perdidos.",deleteAppSuccess:"Marketplace desinstalado com sucesso.",deleteAppWithError:"Falha ao desinstalar marketplace.",cancelBtn:"Cancelar",confirmBtn:"Desinstalar"},vr={title:"Instalar {appName}",subtitle:"O processo de instalação é assíncrono, executado em segundo plano. Esse processo pode levar alguns minutos.
    Assim que a instalação for concluída, o item instalado será exibido na lista.",hostnameSelect:"Selecione o virtual host",rootDirectory:"Caso deseje instalar em um diretório específico, informe abaixo, caso contrário, o diretório de instalação será: {rootDirectory}.",installDirectory:"Diretório",installParams:"Parâmetros de instalação",descriptionInstallParams:"Preencha os campos abaixo quando obrigatórios ou quando quiser alterar alguma configuração.",getVirtualHostsWithError:"Falha ao obter lista de virtual hosts.",installAppSuccess:"Deploy do item do marketplace agendado com sucesso.",installAppWithError:"Falha ao instalar marketplace.",cancelBtn:"Cancelar",confirmBtn:"Instalar Marketplace"},br={createdAt:"Data de instalação: {createdAt}",rootDirectory:"Instalado em {rootDirectory}",uninstallAppBtn:"Desinstalar"},fr={inputSearch:"Pesquisar",notFound:"Nenhum dado encontrado",onlyInstalledAppsLabel:"Apenas marketplace instalados"},hr=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({login:k,form:V,errorMessages:W},t),o),{runtimeRoute:ae,settingsIndex:te,settingsRoute:re}),s),i),n),l),c),d),u),m),p),g),v),b),Cr=hr,Sr={messageLoginSuccess:"Login Successful!",messageLoginError:"Error while logging in!"},yr=Sr,Dr={inputMail:"E-mail",invalidMail:"Invalid e-mail address"},Ar=Dr,Er={inputPassword:"Password",invalidPassword:"Password must have at least {minLength} characters."},Pr=Er,Nr={label:"FQDN",fqdnRequired:"{label} is required",fqdnMaxLengthError:"{label} must be less than 255 characters",fqdnRegexError:"{label} must be a valid domain name"},Rr=Nr,Mr={mailAddressInput:Ar,passwordInput:Pr,fqdnInput:Rr},wr=Mr,Fr={authTokenInvalided:"Your session has expired, please login again.",invalidCredentials:"Invalid credentials.",networkError:"Server unavailable.",timeoutError:"Request timeout."},Tr=Fr,Ir={light:"Day",dark:"Night"},Ur={label:"Language",en:"English",pt:"Portuguese"},kr={selectRefreshRate:"Refresh Rate"},Lr={apps:"Apps",fileManager:"File Manager",domains:"Domains",backups:"Backups",webServers:"Web Servers",metrics:"Metrics",logs:"Logs",imageOptimizer:"Image Optimizer",security:"Security",terminal:"Terminal",disabled:"Feat under development"},Br={btnSettings:"Settings",btnLogout:"Logout"},qr={cpuUsage:"{cpuUsage}% CPU usage",ramUsage:"{ramUsage}% RAM usage",storageUsage:"{storageUsage}% disk usage",disabled:"Feat under development"},xr={btnGeneratePassword:"generate a random password",messageCopiedPassword:"The generated password has been copied to your clipboard.
    Use CTRL + V to paste it into your password manager."},Hr={securePassword:"Secure password",isTooShort:"At least {minPasswordLength} characters;",isTooLong:"At most {maxPasswordLength} characters;",hasNumber:"At least 1 number;",hasUpperCases:"At least 1 uppercase letter;",hasLowerCases:"At least 1 lowercase letter.",hasReservedCharSuccess:"No reserved special characters.",hasReservedCharError:"Use of reserved special characters: "},Or={uninstalledService:"The {serviceName} service is not installed yet.",installService:"Install {serviceName} service"},jr={messageDefault:"Loading..."},Vr={title:"Runtime"},zr={title:"Settings"},Wr={title:"Settings",titleConfigs:"Update Settings",titleProfile:"Update Password",titleApiKey:"Update API Key",updatePasswordBtn:"Update Password",generatedApiKey:"Generated API Key",generateNewApiKeyBtn:"Generate New API Key",closeBtn:"Close",copiedToClipboard:"Copied to clipboard.",errorGettingAccounts:"Error getting accounts.",saveNewApiKey:"New API key generated. Please save it in a safe place because the key is not stored on the server.",updatedPasswordSuccessfully:"Updated password successfully.",errorUpdatingPassword:"Error updating password.",updatedApiKeySuccessfully:"New API key generated, save it in a safe place",errorUpdatingApiKey:"Error updating API key."},_r={title:"Overview"},Kr={titleQuickLinks:"Quick Links",linkApps:"Apps",linkDatabases:"Databases",linkFiles:"Files",linkBackups:"Backups",linkDomains:"Domains",linkMetrics:"Metrics",linkLogs:"Logs",linkTerminal:"Terminal"},Gr={titleSystemInfo:"System Information"},Zr={diskUsage:"Disk Usage"},Yr={titleSystemInfo:"System Information",colHostname:"Hostname",colRuntimeContext:"Runtime Context",colUptime:"Uptime",colHardware:"Hardware Specs",colPublicIp:"Public IP Address"},Qr={titleResourcesChart:"Resources Usage",cpu:"CPU",ram:"Memory RAM"},Jr={titleServicesStatus:"Services"},$r={serviceCommandPlaceholder:"example: /usr/bin/binary",requiredError:"Command is required.",maxLengthError:"Command must be less than 255 characters.",commandRegexError:"Command must be a valid command.",helpCommand:'

    If you need to install multiple packages to run your software, you must use the Terminal (SSH).

    '},Xr={titleInstallService:"Install Service"},et={installableForm:"Installable",customForm:"Custom"},at={serviceNameLabel:"Service Name",requiredError:"Service Name is required.",maxLengthError:"Service Name must be less than 255 characters.",serviceNameRegexError:"Service Name must be a valid service name."},rt={versionLabel:"Version",requiredError:"Version is required.",maxLengthError:"Version must be less than 255 characters.",versionRegexError:"Version must be a valid version."},tt={titlePortBindings:"Port Bindings",hostPortInputLabel:"Port",PortError:"Port must be a number between 1 and 65535.",protocolInputLabel:"Protocol"},ot={uninstallDialogTitle:"Uninstall Service",uninstallDialogDescription:"Do you really want to uninstall the service {serviceName}?",warningUninstallService:"Warning! By uninstalling the service, all data will be lost.",uninstallDialogCancelBtn:"Cancel",uninstallDialogConfirmBtn:"Yes, Uninstall Service"},st={notFound:"No services found.",colServiceName:"Service Name",colPids:"Process IDs",colUptime:"Uptime",colCpuUsage:"CPU Usage",colRamUsage:"RAM Usage",inputSearch:"Search",createServiceBtn:"Install New Service"},it={restartBtn:"Restart Service",uninstallBtn:"Uninstall Service",updateBtn:"Edit Service",installBtn:"Install Service",startSuccess:"Service started with success.",stopLoading:"Stopping service, please wait.",stopSuccess:"Service stopped with success.",startLoading:"Starting service, please wait.",startError:"Error starting service.",stopError:"Error stopping service.",restartLoading:"Restarting service, please wait.",restartSuccess:"Service restarted with success.",restartError:"Error restarting service.",installLoading:'

    Updating Service Status

    Please await...

    This process may take a while. DO NOT refresh or close the window.

    ',installSuccess:"Service installed with success.",installError:"Error installing service.",uninstallLoading:"Uninstalling service, please wait.",uninstallSuccess:"Service uninstalled with success.",uninstallError:"Error uninstalling service.",systemServiceWarning:"System services cannot be uninstalled or changed, only restarted."},nt={serviceNameLabel:"Service Name",versionLabel:"Version",commandLabel:"Command",startupFileLabel:"Startup File",typeSelect:"Service Type",application:"Application",runtime:"Runtime",database:"Database",webserver:"Web Server",mom:"Messaging",monitoring:"Monitoring",logging:"Logging",security:"Security",backup:"Backup",system:"System",other:"Other",advancedSettingsLabel:"Advanced Settings",cancelButton:"Cancel",installButton:"Install Service",installSuccess:"Service installed with success.",installError:"Error installing service.",labelExecut:"Execution Mode",labelRadioCommand:"Start command",labelRadioFile:"or upload an executable file",labelUploadFile:"Select File (.appImage, .bin etc)",labelCommand:"Command",uploadError:"Error uploading file."},lt={serviceLabel:"Service",versionLabel:"Version",titleStartupFile:"Select Startup File",selectStartupFile:"Select Startup File",helpText:"This file will be executed when the service starts.",startupFileLabel:"Startup File",advancedSettingsLabel:"Advanced Settings",cancelButton:"Cancel",installButton:"Install Service",installSuccess:"Service installed with success.",installError:"Error installing service."},ct={titleUpdateService:"Update Service",startupFileLabel:"Startup File",cancelButton:"Cancel",advancedSettingsLabel:"Advanced Settings",updateButton:"Update Service",updateSuccess:"Service updated with success.",updateError:"Error updating service."},dt={title:"Select Startup File",cancelBtn:"Cancel"},ut={title:"Marketplace",subtitle:"The installation process is asynchronous and runs in the background. This process may take a few minutes.
    Once the installation is complete, the installed item will be displayed in the list.",getCatalogWithError:"Failed to get app catalog."},mt={installParams:"Installation parameters",descriptionInstallParams:"Fill in the fields below when required or when you want to change some configuration.",marketplaceType:{apps:"Apps",stacks:"Stacks",frameworks:"Frameworks"},cancelBtn:"Cancel",confirmBtn:"Install Marketplace",installAppSuccess:"Marketplace item deploy scheduled successfully.",installAppWithError:"Failed to schedule marketplace item deploy."},pt={notFoundApps:"{type}s not found."},gt={noDataLabel:"No marketplace available.",searchInput:"Search",installBtn:"Install",appNameColumn:"Name",installDirectoryColumn:"Installation Directory",createdAtColumn:"Created At"},vt={uninstallBtn:"Uninstall"},bt={title:"Accounts"},ft={errorLoadingAccounts:"Not able to load accounts."},ht={title:"Create Account",username:"Username",usernameRequired:"Username is required.",usernameMinLength:"Username must have at least 3 characters.",cancelBtn:"Cancel",createBtn:"Create Account",createdSuccessfully:"Account created successfully.",errorCreatingAccount:"Not able to create account"},Ct={title:"Delete User {username}",messageDeleteAccount:"Are you sure you want to delete user {username}?",warningDeleteAccount:"This action cannot be undone.",cancelBtn:"Cancel",deleteBtn:"Yes, Delete User",deletedSuccessfully:"User {username} deleted successfully.",errorDeletingAccount:"Not able to delete user {username}."},St={createAccountBtn:"Create Account",noDataLabel:"No accounts found.",searchInput:"Search"},yt={title:"Update Password for User {username}",cancelBtn:"Cancel",updateBtn:"Update Password",updatedSuccessfully:"Password updated successfully.",errorUpdatingAccount:"Not able to update password."},Dt={title:"Update API Key for User {username}",generatedApiKey:"New API key generated.",updatedSuccessfullyWithApiKey:"New API key generated, save it in a safe place",saveNewApiKey:"New API key generated. Please save it in a safe place because the key is not stored on the server.",copiedToClipboard:"Copied to clipboard.",closeDialogBtn:"Close",generateNewApiKeyBtn:"Generate New API Key",updatedSuccessfully:"New API key generated successfully.",errorUpdatingApiKey:"Not able to generate new API key."},At={editPasswordBtn:"Update Password",editApiKeyBtn:"Update API Key",deleteBtn:"Delete Account"},Et={title:"Databases"},Pt={errorLoadingPostgresqlDatabases:"Error loading the list of Postgresql databases.",errorLoadingMysqlDatabases:"Error loading the list of Mysql databases."},Nt={tdIpAddress:"Server IP Address",tdPort:"Server Port",localhost:"localhost",dataLocal:"Local Connection"},Rt={titleDialogCreate:"Create Database",inputDataBaseName:"Database name",inputUserName:"Username",messageValidateError:"Only letters, numbers and underline are allowed.",btnCancel:"Cancel",btnCreateDataBase:"Create Database",createDataBaseSuccess:"Database created successfully.",createDataBaseError:"Error creating database."},Mt={titleDialogCreateUser:"Create Database User",textSelectDatabases:"Select databases",inputUsername:"Username",messageInputError:"Only letters, numbers and underline are allowed.",textPrivileges:"Privileges",textPrivilegesSelect:"Select privileges",toggleSelectAll:"Select all",btnCancel:"Cancel",btnCreateUser:"Create User",messageCreateUserSuccess:"User created successfully.",messageCreateUserError:"Error creating user."},wt={titleDialogRemove:"Remove Database",messageConfirmRemove:"Are you sure you want to remove the {databaseName} database",warningRemoveDatabase:"Warning! This action cannot be undone.",btnCancel:"Cancel",btnRemove:"Remove Database",messageRemoveSuccess:"Database removed successfully.",messageRemoveError:"Error removing database."},Ft={titleDialogRemoveUser:"Remove Database User",messageConfirmRemove:"Are you sure you want to remove the {username} user",warningRemoveUser:"Warning! This action cannot be undone.",btnCancel:"Cancel",btnRemove:"Remove User",subtitleDialogRemoveUser:"{databaseType} - {databaseName}",messageRemoveUserSuccess:"User removed successfully.",messageRemoveUserError:"Error removing user."},Tt={titleDialogUpdateUser:"Update Database User: {user}",subtitleDialogUpdateUser:"Database: {databaseType}",textAlertMessage:"Warning! This action cannot be undone.",inputName:"Username",textPrivileges:"Privileges",toggleSelectAll:"Select all",textPostgresPrivileges:'All ProstgreSQL users will be created with "ALL PRIVILEGES" in the databases and in the public schema',btnCancel:"Cancel",btnUpdateUser:"Update User",messageUpdateUserSuccess:"User updated successfully.",messageUpdateUserError:"Error updating user."},It={tooltipRemove:"Remove Database"},Ut={notFoundDatabases:"No databases found.",search:"Search",btnCreateUser:"Create User",btnCreateDatabase:"Create Database",databaseName:"Database Name",databaseUsers:"Users",databaseSize:"Size"},kt={tooltipEditUser:"Edit User",tooltipRemoveUser:"Remove User"},Lt={textWarningChanges:'Your changes have not yet been applied. Click "Update Configurations" to propagate the desired changes.',btnUpdateConfigurations:"Update Configurations",tabExtensions:"Extensions",tabOptions:"Options",getVirtualHostsError:"Unable to list server virtual hosts",getMappingsError:"Unable to list server virtual hosts mappings",getPhpConfigurationsError:"No PHP configurations could be displayed",checkPhpServiceError:"Unable to check PHP service status",updatePhpConfigurationsSuccess:"PHP.ini configurations successfully updated",updatePhpConfigurationsError:"Not able to update PHP.ini configurations"},Bt={title:"The Selected Virtual Host Doesn't Map to PHP Yet",mappingExplanation:'In order to control PHP settings and modules, the selected virtual host needs to proxy traffic to the PHP Web Server.
    Just click on "Create Mapping" and the system will do this for you. If you want to map a specific sub-directory of your virtual host to the PHP Web Server, go to the Advanced Settings and change the Sub-directory from "/" (root) to the desired location.',createBtn:"Create Mapping",createMappingSuccessfully:"Mapping successfully created",createMappingError:"Not able to create mapping"},qt={selectVirtualHost:"Virtual Host"},xt={selectPhpVersion:"PHP Version"},Ht={title:"Do you really want to change the PHP version?",body:"

    Before changing, make sure your application is compatible with PHP version {newVersion}.

    Remember to then enable/disable the desired modules and adjust the settings in the new version, since the modules/settings of the previous version may be different.

    ",btnCancel:"Cancel",btnConfirm:"Change Version",updatePhpVersionSuccess:"PHP version successfully changed.",updatePhpVersionError:"Not able to change PHP version."},Ot={enablePhpSettingError:"Not able to enable option {settingName}.",disablePhpSettingError:"Not able to disable option {settingName}.",enablePhpSettingSuccess:"Option {settingName} successfully enabled.",disablePhpSettingSuccess:"Option {settingName} successfully disabled."},jt={urlLabel:"Subdirectory",urlIsInvalid:"Invalid URL",urlExplanation:"Subdirectories are used to access different applications within the same domain. For example, if you have a website at {hostname} and want to create a blog, you can create a subdirectory called blog and access it at {hostname}/blog."},Vt={enablePhpSettingError:"Not able to enable option {settingName}.",enablePhpSettingSuccess:"Option {settingName} successfully enabled."},zt={enablePhpModuleError:"Not able to enable module {moduleName}.",disablePhpModuleError:"Not able to disable module {moduleName}.",enablePhpModuleSuccess:"Module {moduleName} successfully enabled.",disablePhpModuleSuccess:"Module {moduleName} successfully disabled."},Wt={title:"Cron Jobs"},_t={getCronjobsError:"Could not fetch information about scheduled tasks."},Kt={notFoundCronjobs:"Could not find scheduled tasks.",btnNewTask:"Schedule New Task",inputSearch:"Search",columnSchedule:"Schedule",columnCommand:"Command",columnComment:"Comment",predefinedHourly:"Hourly",predefinedDaily:"Daily",predefinedWeekly:"Weekly",predefinedMonthly:"Monthly",predefinedYearly:"Yearly",predefinedAnnually:"Annually",predefinedReboot:"Reboot"},Gt={btnEditCronjob:"Edit Task",btnRemoveCronjob:"Remove Task"},Zt={editCronjob:"Edit Task",newCronjob:"New Task",updateCronjob:"Update Task",createCronjob:"Create Task",btnCancel:"Cancel",updateCronjobSuccess:"Task updated successfully.",updateCronjobError:"Could not update task.",createCronjobSuccess:"Task created successfully.",createCronjobError:"Could not create task.",predefinedForm:"Predefined",customForm:"Custom",selectExecuteTask:"Execute Task",predefinedHourly:"Hourly",predefined3Hours:"Every 3 hours",predefined6Hours:"Every 6 hours",predefined12Hours:"Every 12 hours",predefinedDaily:"Daily",predefinedWeekly:"Weekly",predefinedMonthly:"Monthly",predefinedYearly:"Yearly",predefinedAnnually:"Annually",predefinedReboot:"Reboot",fieldMinutes:"Minute(s)",fieldDays:"Day(s)",fieldHours:"Hour(s)",fieldMonths:"Months",fieldWeekDay:"Week Day",fieldCommand:"Command",fieldComment:"Comment",messageFieldRequired:"Required field.",messageInputError:"You did not format the settings correctly."},Yt={titleDialogRemove:"Remove Task",confirmRemoveCron:"Are you sure you want to remove this task?",warningRemoveCron:"This action is irreversible.",btnCancel:"Cancel",btnConfirm:"Yes, Remove Task",removeCronSuccess:"Task removed successfully.",removeCronError:"Could not remove task."},Qt={everyMinute:"Every minute",everyMinutes:"Every {minute} minutes",atMinute:"At minute {minute}",everyHour:"Every hour",everyHours:"Every {hour} hours",atMidnight:"At midnight",atMidday:"At midday",atHour:"At {standard24hours}h ({standard12hours})",everyDay:"Every day",everyDays:"Every {day} days",weekly:"Weekly",atDay:"At day {day}",everyMonth:"Every month",everyMonths:"Every {month} months",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December",everyWeekDay:"Every weekday",mondayToFriday:"Monday to Friday",onlyWeekends:"Only weekends",everyMonday:"Every Monday",everyTuesday:"Every Tuesday",everyWednesday:"Every Wednesday",everyThursday:"Every Thursday",everyFriday:"Every Friday",everySaturday:"Every Saturday",everySunday:"Every Sunday"},Jt={title:"File Manager"},$t={notFoundFiles:"No files were found in this directory.",labelInputSearch:"Search",placeholderInputSearch:"Search in Directory",colUserAndGroup:"User:Group",colName:"Name",colSize:"Size",colType:"Type",colLastModifiedDate:"Last Modified Date",colPermission:"Permission",oneFileSelected:"1 record selected out of {total}",multiFileModelsSelected:"{quantity} records selected out of {total}",labelSelectRowsViews:"Number of Records"},Xt={btnClearTrash:"Empty Trash",titleDialogClearTrash:"Empty Trash",bodyDialogClearTrash:"Are you sure you want to remove all files from the trash?
    This action is irreversible.",msgRemoveSuccess:"Trash emptied successfully.",msgRemoveError:"Could not remove files from the trash.",msgCreateTrashError:"Could not create the trash again.",btnCancel:"Cancel",btnConfirm:"Yes, empty trash"},eo={btnSave:"Save",btnUndo:"Undo",btnRedo:"Redo",btnRedoAll:"Undo All Changes",btnSaveFile:"Save File",btnDecreaseFont:"Decrease Font",btnIncreaseFont:"Increase Font"},ao={btnCompress:"Compress"},ro={btnCopy:"Copy"},to={btnDownload:"Download File",msgDownloadError:"Could not download the file {fileName}"},oo={btnDuplicateFile:"Duplicate File",msgDuplicateFileSuccess:"File {fileName} duplicated successfully.",msgDuplicateFileError:"Could not duplicate the file {fileName}."},so={btnEditCode:"Edit Code"},io={btnEditPermissions:"Edit Permissions"},no={btnExtract:"Extract File"},lo={btnGoToHome:"Go to Home Directory"},co={btnGoBackUp:"Go Back a Level"},uo={btnMoveFile:"Move File",btnMoveFiles:"Move Selected Files",btnMoveDir:"Move Directory"},mo={btnNewFile:"New File"},po={btnRenameDir:"Rename Directory",btnRenameFile:"Rename File"},go={btnNewFolder:"New Folder"},vo={btnPageReload:"Reload Page"},bo={btnShowTrash:"Show Trash"},fo={btnUploaderFile:"Upload File"},ho={btnRemoveFile:"Remove File",btnRemoveDir:"Remove Directory",titleDialogRemoveFile:"Remove File",titleDialogRemoveDir:"Remove Directory",msgConfirmRemoveSelectedOneFile:"Are you sure you want to remove the selected file?
    The file will remain in the trash for 30 days.",msgConfirmRemoveSelectedMultiFileModels:"Are you sure you want to remove the {countFiles} selected files?
    The files will remain in the trash for 30 days.",msgConfirmRemoveOneFile:"Are you sure you want to remove the {mimeType} {fileName}?
    The file will remain in the trash for 30 days.",msgConfirmRemoveSelectedOneFileTrash:"Are you sure you want to remove the selected {mimeType}?
    This action is irreversible.",msgConfirmRemoveSelectedMultiFileModelsTrash:"Are you sure you want to remove the {countFiles} selected files?
    This action is irreversible.",msgConfirmRemoveOneFileTrash:"Are you sure you want to remove the {mimeType} {fileName}?
    This action is irreversible.",msgRemoveSuccess:"File(s) moved to the trash successfully.",msgRemovePermanentSuccess:"File(s) permanently deleted.",msgRemoveError:"Could not remove the files.",btnCancel:"Cancel",btnConfirm:"Yes, remove"},Co={title:"Upload File",addFile:"Add File"},So={titleDialog:"New File",labelInputNameFile:"New File Name",fieldRequired:"Required Field.",onlyAlphaNumeric:"Only letters, numbers, and underscore",inputCreateIn:"Create in",btnCancel:"Cancel",btnCreateFile:"New File",msgCreateFileSuccess:"File {fileName} created successfully.",msgCreateFileError:"Could not create the file {fileName}."},yo={titleDialog:"New Folder",labelInputNameFolder:"New Folder Name",fieldRequired:"Required Field.",onlyAlphaNumeric:"Only letters, numbers, and underscore",inputCreateIn:"Create in",btnCancel:"Cancel",btnCreateFolder:"New Folder",msgCreateFolderSuccess:"Directory {dirName} created successfully.",msgCreateFolderError:"Could not create the directory {dirName}."},Do={titleDialog:"Upload File",selectDir:"Select Directory:",inputSendTo:"Send To",btnCancel:"Cancel",btnUploaderFile:"Upload File",msgUploaderFileSuccess:"File upload {fileName} successful.",msgUploaderFileError:"Error uploading file {fileName}: {reason}."},Ao={simpleTitleDialog:"Compress File",countTitleDialog:"Compress {countSelectedPaths} Selected Files",inputName:"File Name",fieldRequired:"Required Field.",onlyAlphaNumeric:"Only letters, numbers, and underscore.",extensionFile:"File Extension",selectedPaths:"Selected Files",selectDir:"Select Directory:",destinationDir:"Destination Directory",btnCancel:"Cancel",btnCompressFile:"Compress File",msgCompressedFileSuccess:"File(s) compressed successfully: {compressedFileName}.",msgCompressedFileError:"Could not compress the file {compressedFileName}."},Eo={titleDialog:"Copy File",selectDir:"Select Directory:",copyTo:"Copy To",btnCancel:"Cancel",btnCopyFile:"Copy File",msgCopiedFileSuccess:"File {fileName} copied successfully.",msgCopiedFileError:"Could not copy the file {fileName}."},Po={titleEditCode:"Edit Code",titleDialogWarningSave:"Unsaved Changes",bodyDialogWarningSave:"There are unsaved changes, do you want to discard the changes?",btnDialogWarningSave:"Discard Changes",inputAbsolutePath:"Absolute Path",msgGetContentError:"Could not display the content of the file {fileName}.",msgSaveCodeSuccess:"File {fileName} saved successfully.",msgSaveCodeError:"Could not save the file {fileName}."},No={titleDialog:"Edit Permissions",btnCancel:"Cancel",btnSave:"Save Changes",msgEditPermissionsSuccess:"Permissions changed successfully.",msgEditPermissionsError:"Could not change the permissions of the file {fileName}."},Ro={titleDialog:"Extract File",selectDir:"Select directory:",inputExtractTo:"Extract to",btnCancel:"Cancel",btnExtractFile:"Extract File",msgExtractFileSuccess:"File {filename} extracted successfully.",msgExtractFileError:"Could not extract the file {filename}."},Mo={titleOneFile:"Move File {fileName}",titleOneDir:"Move Directory {dirName}",titleMultiFileModel:"Move {count} Selected Files",selectDir:"Select Directory:",inputMoveTo:"Move To",btnMoveFile:"Move File",btnMoveFiles:"Move Files",btnMoveDir:"Move Directory",btnCancel:"Cancel",msgMoveOneFileSuccess:"File {fileName} moved successfully.",msgMoveMultiFileModelsSuccess:"The {count} files were moved successfully.",msgMoveOneFileError:"Could not move the file {fileName}.",msgMoveMultiFileModelsError:"Could not move the {count} selected files."},wo={titleRenameFile:"Rename File",titleRenameDir:"Rename Directory",absolutePath:"Absolute Path",fieldRequired:"Required Field.",onlyAlphaNumeric:"Only letters, numbers, and underscore.",dirName:"Directory Name",fileName:"File Name",btnCancel:"Cancel",btnSave:"Save Change",msgRenamedFileSuccess:"File {fileName} changed successfully.",msgRenamedDirSuccess:"Directory {dirName} changed successfully.",msgRenamedFileError:"Could not change the file {fileName}.",msgRenamedDirError:"Could not change the directory {fileName}."},Fo={permissions:"Permissions: ",user:"User",group:"Group",others:"Others",read:"Read",write:"Write",execute:"Execute"},To={title:"Mappings"},Io={advancedOptionsLabel:"Advanced Options",matchPatternLabel:"Match Pattern",matchPatternOptions:{beginWith:"Begin With",contains:"Contains",endsWith:"Ends With",equals:"Equals"}},Uo={title:"Create Mapping",cancelBtn:"Cancel",targetType:{url:"URL",service:"Service",responseCode:"Response Code",inlineHtml:"Inline HTML",staticFiles:"Static Files"},hostnameLabel:"Virtual Host",servicesNameLabel:"Service Name",pathLabel:"Source URL",responseCodeLabel:"Response Code",targetUrlLabel:"Destination URL",createBtn:"Create Mapping",createMappingSuccessfully:"Mapping created successfully.",createMappingError:"Error creating mapping."},ko={title:"Delete Mapping",confirmRemoveMapping:"Are you sure you want to delete mapping to {path}?",warningRemoveMapping:"This action cannot be undone.",cancelBtn:"Cancel",deleteBtn:"Yes, delete mapping",deleteMappingSuccess:"Mapping deleted successfully.",deleteMappingError:"Error deleting mapping."},Lo={responseCodeLabel:"Response Code",responseCodeIsRequired:"Response Code is required",responseCodeIsInvalid:"Response Code is invalid"},Bo={targetUrlLabel:"URL",targetUrlIsRequired:"URL is required",targetUrlIsInvalid:"URL is invalid"},qo={targetInlineHtmlLabel:"Inline HTML",targetInlineHtmlIsRequired:"Inline HTML is required"},xo={title:"Create Virtual Host",hostnameLabel:"Hostname",typeLabel:"Type",parentHostnameLabel:"Parent Hostname",cancelBtn:"Cancel",createBtn:"Create Virtual Host",optionTopLevel:"Top Level",optionSubdomain:"Subdomain",optionWildcard:"Wildcard",optionAlias:"Alias",createVirtualHostSuccess:"Virtual Host created successfully",createVirtualHostError:"Error creating virtual host"},Ho={title:"Delete Virtual Host",confirmRemove:"Are you sure you want to delete the {virtualHost} virtual host?",warningRemove:"This action cannot be undone.",cancelBtn:"Cancel",deleteBtn:"Yes, Delete Virtual Host",deleteVhostSuccess:"Virtual Host deleted successfully.",deleteVhostError:"Error deleting virtual host."},Oo={topLevelLabel:"Parent Domain",hostnameLabel:"Subdomain"},jo={noDataLabel:"No mappings found",searchInput:"Search",createMappingsBtn:"Create Mapping",createVirtualHostsBtn:"Create Virtual Host"},Vo={deleteBtn:"Delete Virtual Host"},zo={aliasWarning:"This virtual host is an alias and cannot have mappings.",createMappingBtn:"Create Mapping",matchPattern:"match pattern",deleteBtn:"Delete Mapping"},Wo={title:"SSL Certificate"},_o={errorLoadingSsl:"Not able to load SSL certificate."},Ko={title:"Add/Replace Ssl Certificate",labelShowFileTypeInputs:"OR upload files (.crt/.key - pem format)",labelCertificateInput:"Certificate",certificateContentIsRequired:"Certificate content is required.",certificateContentIsInvalid:"Certificate content is invalid.",labelPrivateKeyInput:"Private Key",privateKeyIsRequired:"Private key is required.",privateKeyIsInvalid:"Private key is invalid.",labelCertificateChainInput:"Root & Intermediaries Certificates (CA Bundle / Chain)",certificateAuthIsInvalid:"Certificate chain is invalid.",cancelBtn:"Cancel",createBtn:"Add/Replace SSL Certificate",createdSuccessfully:"SSL certificate created successfully.",errorCreatingSsl:"Not able to create SSL certificate"},Go={title:"Swap with self-signed SSL",messageReplaceSsl:"Are you sure you want to swap SSL certificate?",warningReplaceSsl:"Only use this action if you no longer want to use your current SSL certificate. The system will swap the current certificate with a self-signed SSL until it's able to issue a new valid Let's Encrypt SSL certificate.",cancelBtn:"Cancel",swapSslBtn:"Yes, Swap Ssl Certificate",deletedSuccessfully:"Ssl certificate replaced successfully.",errorDeletingSsl:"Not able to swap SSL certificate."},Zo={title:"Download PEM Files",labelCertificate:"Certificate",labelPrivateKey:"Private Key"},Yo={messageClipBoard:"Copy the content",downloadFile:"Download File",messageCopied:"The content has been copied to your clipboard.
    Use CTRL + V to paste."},Qo={createSslBtn:"Add/Swap SSL Certificate",noDataLabel:"No SSL certificate found.",searchInput:"Search",virtualHostCol:"Virtual Host",issuedAtCol:"Issued At",expiresAtCol:"Expires At",isCACol:"Certificate Authority",isCAYes:"Yes",isCANo:"No"},Jo={downloadPemFilesBtn:"Download PEM Files",swapSslBtn:"Swap to self-signed SSL"},$o={labelSelectVirtualHosts:"Select Virtual Hosts"},Xo={title:"Marketplace"},es={title:"Marketplace",getCatalogWithError:"Failed to get marketplace catalog.",getInstalledAppsWithError:"Failed to get installed marketplaces.",installedApps:"Installed marketplaces",catalog:"Catalog"},as={installBtn:"Install"},rs={title:"Uninstall Marketplace",confirmRemoveApp:"Do you really want to uninstall the marketplace {appName}?",warningRemoveApp:"Warning: All marketplace data will be lost.",deleteAppSuccess:"Marketplace uninstalled successfully.",deleteAppWithError:"Failed to uninstall marketplace.",cancelBtn:"Cancel",confirmBtn:"Uninstall"},ts={title:"Install {appName}",subtitle:"The installation process is asynchronous and runs in the background. This process may take a few minutes.
    Once the installation is complete, the installed item will be displayed in the list.",hostnameSelect:"Select virtual host",rootDirectory:"If you want to install in a specific directory, inform below, otherwise, the installation directory will be: {rootDirectory}.",installDirectory:"Path",installParams:"Install parameters",descriptionInstallParams:"Fill in the fields below when required or when you want to change some configuration.",getVirtualHostsWithError:"Failed to get virtual host list.",installAppSuccess:"Marketplace item deploy scheduled successfully.",installAppWithError:"Failed to schedule marketplace item deploy.",cancelBtn:"Cancel",confirmBtn:"Install Marketplace"},os={inputSearch:"Search",notFound:"No data found",onlyInstalledAppsLabel:"Only installed marketplaces"},ss=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({login:yr,form:wr,errorMessages:Tr},f),h),{runtimeRoute:Vr,settingsIndex:Wr,settingsRoute:zr}),C),S),y),D),A),E),P),N),R),M),w),F),is=ss,ns={"en-us":is,"pt-br":Cr},ls=(0,I.o)({locale:"en-us",fallbackLocale:"pt-br",legacy:!1,globalInjection:!0,messages:ns}),cs=(0,T.xr)((({app:e})=>{e.use(ls)}))},74358:(e,a,r)=>{r.d(a,{S:()=>o});var t=r(3746);const o=(0,t.Q_)("langSelect",{state:()=>({selectedLanguage:"en-us"}),getters:{getSelectedLanguage(e){return e.selectedLanguage}},actions:{setSelectedLanguage(e){this.selectedLanguage=e}}})},21809:(e,a,r)=>{r.d(a,{Z:()=>o});var t=r(84006);class o{constructor(){this.tokenName="os-access-token"}getToken(){return t.Z.get(this.tokenName)}setToken(e){const a=new Date(Date.now()+108e5),r="None",o={expires:a,path:"/",domain:window.location.hostname,secure:!0,sameSite:r};t.Z.set(this.tokenName,e,o)}removeToken(){this.removeCookie(this.tokenName)}removeCookie(e,a="/",r=window.location.hostname){const t="Thu, 01 Jan 1970 00:00:00 GMT";document.cookie=`${e}=; Expires=${t}; Path=${a}; Domain=${r}`}hasCookie(e){return t.Z.has(e)}}},20503:(e,a,r)=>{r.d(a,{Z:()=>o});var t=r(63703);class o{getDarkMode(){var e;return null===(e=t.Z.getItem("darkMode"))||void 0===e||e}setDarkMode(e){t.Z.set("darkMode",e)}getUsername(){var e;return null!==(e=t.Z.getItem("username"))&&void 0!==e?e:""}setUsername(e){t.Z.set("username",e)}getLanguage(){var e;return null!==(e=t.Z.getItem("language"))&&void 0!==e?e:"en-us"}setLanguage(e){t.Z.set("language",e)}getRefreshRate(){var e;return null!==(e=t.Z.getItem("refreshRate"))&&void 0!==e?e:20}setRefreshRate(e){t.Z.set("refreshRate",e)}hasItemLocalStorage(e){return t.Z.has(e)}clearAllLocalStorage(){t.Z.clear()}}}},a={};function r(t){var o=a[t];if(void 0!==o)return o.exports;var s=a[t]={exports:{}};return e[t].call(s.exports,s,s.exports,r),s.exports}r.m=e,(()=>{r.amdO={}})(),(()=>{var e=[];r.O=(a,t,o,s)=>{if(!t){var i=1/0;for(d=0;d=s)&&Object.keys(r.O).every((e=>r.O[e](t[l])))?t.splice(l--,1):(n=!1,s0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[t,o,s]}})(),(()=>{r.n=e=>{var a=e&&e.__esModule?()=>e["default"]:()=>e;return r.d(a,{a}),a}})(),(()=>{r.d=(e,a)=>{for(var t in a)r.o(a,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})}})(),(()=>{r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,t)=>(r.f[t](e,a),a)),[]))})(),(()=>{r.u=e=>"js/"+(64===e?"chunk-common":e)+"."+{64:"7666541e",320:"aca3ffdf",381:"84e710c0",437:"08c85139",506:"7fec36d0",517:"b7f6848c",628:"05ea4db8",646:"b5fb1ff2",664:"2b314485",693:"55f0d22e",755:"3f18be4a",870:"c1412bb9",915:"d8a462e2"}[e]+".js"})(),(()=>{r.miniCssF=e=>"css/"+e+"."+{381:"451ac5f1",437:"c31f08a2",506:"bc12730f",517:"295044ed",628:"203c03df",646:"2d094734",664:"0514e9c1",693:"e6ad8e07",755:"25177ab5",870:"f35f2e51",915:"dd13f0d1"}[e]+".css"})(),(()=>{r.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()})(),(()=>{r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a)})(),(()=>{var e={},a="os-dash:";r.l=(t,o,s,i)=>{if(e[t])e[t].push(o);else{var n,l;if(void 0!==s)for(var c=document.getElementsByTagName("script"),d=0;d{n.onerror=n.onload=null,clearTimeout(p);var o=e[t];if(delete e[t],n.parentNode&&n.parentNode.removeChild(n),o&&o.forEach((e=>e(r))),a)return a(r)},p=setTimeout(m.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=m.bind(null,n.onerror),n.onload=m.bind(null,n.onload),l&&document.head.appendChild(n)}}})(),(()=>{r.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})(),(()=>{r.p="/_/"})(),(()=>{if("undefined"!==typeof document){var e=(e,a,r,t,o)=>{var s=document.createElement("link");s.rel="stylesheet",s.type="text/css";var i=r=>{if(s.onerror=s.onload=null,"load"===r.type)t();else{var i=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.href||a,l=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");l.code="CSS_CHUNK_LOAD_FAILED",l.type=i,l.request=n,s.parentNode.removeChild(s),o(l)}};return s.onerror=s.onload=i,s.href=a,r?r.parentNode.insertBefore(s,r.nextSibling):document.head.appendChild(s),s},a=(e,a)=>{for(var r=document.getElementsByTagName("link"),t=0;tnew Promise(((o,s)=>{var i=r.miniCssF(t),n=r.p+i;if(a(i,n))return o();e(t,n,null,o,s)})),o={143:0};r.f.miniCss=(e,a)=>{var r={381:1,437:1,506:1,517:1,628:1,646:1,664:1,693:1,755:1,870:1,915:1};o[e]?a.push(o[e]):0!==o[e]&&r[e]&&a.push(o[e]=t(e).then((()=>{o[e]=0}),(a=>{throw delete o[e],a})))}}})(),(()=>{var e={143:0};r.f.j=(a,t)=>{var o=r.o(e,a)?e[a]:void 0;if(0!==o)if(o)t.push(o[2]);else{var s=new Promise(((r,t)=>o=e[a]=[r,t]));t.push(o[2]=s);var i=r.p+r.u(a),n=new Error,l=t=>{if(r.o(e,a)&&(o=e[a],0!==o&&(e[a]=void 0),o)){var s=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;n.message="Loading chunk "+a+" failed.\n("+s+": "+i+")",n.name="ChunkLoadError",n.type=s,n.request=i,o[1](n)}};r.l(i,l,"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,t)=>{var o,s,[i,n,l]=t,c=0;if(i.some((a=>0!==e[a]))){for(o in n)r.o(n,o)&&(r.m[o]=n[o]);if(l)var d=l(r)}for(a&&a(t);cr(71239)));t=r.O(t)})(); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/chunk-common.7666541e.js b/src/presentation/ui/dist/js/chunk-common.7666541e.js deleted file mode 100644 index ee78b075a..000000000 --- a/src/presentation/ui/dist/js/chunk-common.7666541e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[64],{85118:(e,t,a)=>{a.d(t,{V:()=>o});var s=a(3746);const o=(0,s.Q_)("refreshRate",{state:()=>({selectedRefreshRate:20}),getters:{getSelectedRefreshRate(e){return e.selectedRefreshRate}},actions:{setSelectedRefreshRate(e){this.selectedRefreshRate=e}}})},45273:(e,t,a)=>{a.d(t,{Q:()=>n,Z:()=>r});var s=a(26950),o=a(93382),l=a(74462);function n(e=l.i18n.global.t("loading.messageDefault"),t=!1){s.Z.show({spinner:o.Z,spinnerColor:"primary",spinnerSize:140,backgroundColor:"black",message:`${e}`,messageColor:"white",html:t})}function r(){s.Z.hide()}},88900:(e,t,a)=>{a.d(t,{LX:()=>n,c0:()=>o,s9:()=>l});var s=a(6827);function o(e){const t="warning"===e.type?"black":"white";s.Z.create({color:e.type,textColor:t,message:e.msg,position:e.position,html:!!e.html&&e.html,timeout:e.shouldBeClosed?0:void 0,actions:[{icon:"sym_s_cancel",color:t}]})}function l(e,t,a="bottom",s=!1,l=!1){const n=e.hasOwnProperty("msg")?e.msg:`${t.slice(0,-1)}: ${e.body}`,r=e.hasOwnProperty("type")?e.type:"negative";o({msg:`${n}`,position:a,type:`${r}`,html:s,shouldBeClosed:l})}function n(e,t="bottom",a=!1,s=!1){o({msg:e,position:t,type:"positive",html:a,shouldBeClosed:s})}},50168:(e,t,a)=>{a.d(t,{Z:()=>n});var s=a(74462),o=a(4376);const l=s.i18n.global.t;function n(e){if(0===e.epoch)return l("components.sharedComponents.formatDate.dateNotFound");const t=new Date(0).setUTCSeconds(e.epoch);return!0===e.onlyDate?o.ZP.formatDate(t,"DD/MM/YYYY"):o.ZP.formatDate(t,"DD/MM/YYYY hh:mm:ss")}},53105:(e,t,a)=>{function s(){let e="/_/";const t=document.querySelector("base");if(t){const a=t.getAttribute("href");a&&(e=a)}return e}a.d(t,{Z:()=>s})},73451:(e,t,a)=>{function s(e){if(!e)return"";const t={nginx:"NGINX",redis:"Redis",mysql:"MySQL",postgresql:"PostgreSQL",openlitespeed:"OpenLiteSpeed",node:"Node.js",mariadb:"MariaDB",php:"PHP WebServer","php-webserver":"PHP WebServer","os-api":"Infinite OS API"},a=t[e.toLowerCase()];if(a)return a;const s=e.charAt(0).toUpperCase()+e.slice(1);return s}a.d(t,{R:()=>s})},25971:(e,t,a)=>{a.d(t,{Z:()=>l});var s=a(69036),o=function(e,t,a,s){function o(e){return e instanceof a?e:new a((function(t){t(e)}))}return new(a||(a=Promise))((function(a,l){function n(e){try{i(s.next(e))}catch(t){l(t)}}function r(e){try{i(s["throw"](e))}catch(t){l(t)}}function i(e){e.done?a(e.value):o(e.value).then(n,r)}i((s=s.apply(e,t||[])).next())}))};class l extends s.Z{createAccount(e){return o(this,void 0,void 0,(function*(){return this.request.post("/v1/account/",e)}))}getAccounts(){return o(this,void 0,void 0,(function*(){return this.request.get("/v1/account/")}))}updateAccount(e){return o(this,void 0,void 0,(function*(){return this.request.put("/v1/account/",e)}))}deleteAccount(e){return o(this,void 0,void 0,(function*(){return this.request.delete(`/v1/account/${e}/`)}))}}},18892:(e,t,a)=>{a.d(t,{Z:()=>r});var s=a(69036),o=a(74462),l=a(85027),n=function(e,t,a,s){function o(e){return e instanceof a?e:new a((function(t){t(e)}))}return new(a||(a=Promise))((function(a,l){function n(e){try{i(s.next(e))}catch(t){l(t)}}function r(e){try{i(s["throw"](e))}catch(t){l(t)}}function i(e){e.done?a(e.value):o(e.value).then(n,r)}i((s=s.apply(e,t||[])).next())}))};class r extends s.Z{constructor(){super(...arguments),this.timeout=12e4}getCurrentPath(e){return n(this,void 0,void 0,(function*(){return this.request.get(`/v1/files/?sourcePath=${e}`)}))}getFileDownloadBlob(e){return n(this,void 0,void 0,(function*(){return new Promise(((t,a)=>{this.request.get("/v1/files/?sourcePath="+e.path).then((s=>{0===s.data.body.length&&a({error:null,msg:`${o.i18n.global.t("fileManagerToolbarBtnDownload.msgDownloadError",{fileName:e.name})}`});const n=""!==e.extension?e.extension:"txt",r=l.g.includes(n);let i="application/"+n;r&&(i="application/octet-binary; charset=utf-8"),t(new Blob([s.data.body[0].content],{type:i}))})).catch((t=>{a({error:t,msg:`${o.i18n.global.t("fileManagerToolbarBtnDownload.msgDownloadError",{fileName:e.name})}`})}))}))}))}createFile(e){return n(this,void 0,void 0,(function*(){return this.request.post("/v1/files/",e)}))}uploadFile(e){return n(this,void 0,void 0,(function*(){return this.request.defaults.headers["Content-Type"]="multipart/form-data",this.request.post("/v1/files/upload/",e)}))}compressFile(e){return n(this,void 0,void 0,(function*(){return this.request.post("/v1/files/compress/",e)}))}copyFile(e){return n(this,void 0,void 0,(function*(){return this.request.post("/v1/files/copy/",e)}))}updateFile(e){return n(this,void 0,void 0,(function*(){return this.request.put("/v1/files/",e)}))}extractFile(e){return n(this,void 0,void 0,(function*(){return this.request.put("/v1/files/extract/",e)}))}removeFile(e){return n(this,void 0,void 0,(function*(){return this.request.put("/v1/files/delete/",e)}))}}},85027:(e,t,a)=>{a.d(t,{g:()=>s});const s=["zip","rar","tar.gz","gzip","tar","gz","tgz"]},62120:(e,t,a)=>{a.d(t,{Z:()=>l});var s=a(69036),o=function(e,t,a,s){function o(e){return e instanceof a?e:new a((function(t){t(e)}))}return new(a||(a=Promise))((function(a,l){function n(e){try{i(s.next(e))}catch(t){l(t)}}function r(e){try{i(s["throw"](e))}catch(t){l(t)}}function i(e){e.done?a(e.value):o(e.value).then(n,r)}i((s=s.apply(e,t||[])).next())}))};class l extends s.Z{getMappings(){return o(this,void 0,void 0,(function*(){return this.request.get("v1/vhosts/mapping/")}))}createMappings(e){return o(this,void 0,void 0,(function*(){return this.request.post("v1/vhosts/mapping/",e)}))}deleteMappings(e){return o(this,void 0,void 0,(function*(){return this.request.delete(`v1/vhosts/mapping/${e.mappingId}/`)}))}}},60016:(e,t,a)=>{a.d(t,{Z:()=>l});var s=a(69036),o=function(e,t,a,s){function o(e){return e instanceof a?e:new a((function(t){t(e)}))}return new(a||(a=Promise))((function(a,l){function n(e){try{i(s.next(e))}catch(t){l(t)}}function r(e){try{i(s["throw"](e))}catch(t){l(t)}}function i(e){e.done?a(e.value):o(e.value).then(n,r)}i((s=s.apply(e,t||[])).next())}))};class l extends s.Z{getVirtualHosts(){return o(this,void 0,void 0,(function*(){return this.request.get("v1/vhosts/")}))}createVirtualHost(e){return o(this,void 0,void 0,(function*(){return this.request.post("v1/vhosts/",e)}))}deleteVirtualHost(e){return o(this,void 0,void 0,(function*(){return this.request.delete(`v1/vhosts/${e}/`)}))}}},39697:(e,t,a)=>{a.d(t,{i:()=>o});var s=a(3746);const o=(0,s.Q_)("mappings",{state:()=>({keyMappingsTable:0,selectedMapping:{},showCreateMappingDialog:!1,showDeleteMappingDialog:!1,selectedDeleteMapping:{}}),getters:{getKeyMappingsTable(e){return e.keyMappingsTable},getSelectedMapping(e){return e.selectedMapping},getShowCreateMappingDialog(e){return e.showCreateMappingDialog},getShowDeleteMappingDialog(e){return e.showDeleteMappingDialog},getSelectedDeleteMapping(e){return e.selectedDeleteMapping}},actions:{setKeyMappingsTable(e){this.keyMappingsTable=e},setSelectedMapping(e){this.selectedMapping=e},setShowCreateMappingDialog(e){this.showCreateMappingDialog=e},setShowDeleteMappingDialog(e){this.showDeleteMappingDialog=e},setSelectedDeleteMapping(e){this.selectedDeleteMapping=e}}})},9704:(e,t,a)=>{a.d(t,{Z:()=>l});var s=a(69036),o=function(e,t,a,s){function o(e){return e instanceof a?e:new a((function(t){t(e)}))}return new(a||(a=Promise))((function(a,l){function n(e){try{i(s.next(e))}catch(t){l(t)}}function r(e){try{i(s["throw"](e))}catch(t){l(t)}}function i(e){e.done?a(e.value):o(e.value).then(n,r)}i((s=s.apply(e,t||[])).next())}))};class l extends s.Z{getCatalog(){return o(this,void 0,void 0,(function*(){return this.request.get("/v1/marketplace/catalog/")}))}installApp(e){return o(this,void 0,void 0,(function*(){return this.request.post("/v1/marketplace/catalog/",e)}))}getInstalledApps(){return o(this,void 0,void 0,(function*(){return this.request.get("/v1/marketplace/installed/")}))}uninstallApp(e){return o(this,void 0,void 0,(function*(){return this.request.delete(`/v1/marketplace/installed/${e}/`)}))}}},62601:(e,t,a)=>{a.d(t,{R:()=>o});var s=a(3746);const o=(0,s.Q_)("marketplace",{state:()=>({keyMarketplaceTable:0,showSlideDialog:!1,screenshotUrlsList:[],selectedScreenshotIndex:0,showInstallAppDialog:!1,selectedAppToInstall:{},showDeleteAppDialog:!1,selectedAppToDelete:{}}),getters:{getKeyMarketplaceTable:e=>e.keyMarketplaceTable,getShowSlideDialog:e=>e.showSlideDialog,getScreenshotUrlsList:e=>e.screenshotUrlsList,getSelectedScreenshotIndex:e=>e.selectedScreenshotIndex,getShowInstallAppDialog:e=>e.showInstallAppDialog,getSelectedAppToInstall:e=>e.selectedAppToInstall,getShowDeleteAppDialog:e=>e.showDeleteAppDialog,getSelectedAppToDelete:e=>e.selectedAppToDelete},actions:{setKeyMarketplaceTable(e){this.keyMarketplaceTable=e},setShowSlideDialog(e){this.showSlideDialog=e},setScreenshotUrlsList(e){this.screenshotUrlsList=e},setSelectedScreenshotIndex(e){this.selectedScreenshotIndex=e},setShowInstallAppDialog(e){this.showInstallAppDialog=e},setSelectedAppToInstall(e){this.selectedAppToInstall=e},setShowDeleteAppDialog(e){this.showDeleteAppDialog=e},setSelectedAppToDelete(e){this.selectedAppToDelete=e}}})},9281:(e,t,a)=>{a.d(t,{Z:()=>l});var s=a(69036),o=function(e,t,a,s){function o(e){return e instanceof a?e:new a((function(t){t(e)}))}return new(a||(a=Promise))((function(a,l){function n(e){try{i(s.next(e))}catch(t){l(t)}}function r(e){try{i(s["throw"](e))}catch(t){l(t)}}function i(e){e.done?a(e.value):o(e.value).then(n,r)}i((s=s.apply(e,t||[])).next())}))};class l extends s.Z{constructor(){super(...arguments),this.timeout=18e4}getServicesStatus(){return o(this,void 0,void 0,(function*(){return this.request.get("/v1/services/")}))}getServicesInstallable(){return o(this,void 0,void 0,(function*(){return this.request.get("/v1/services/installables/")}))}installService(e){return o(this,void 0,void 0,(function*(){return this.request.post("/v1/services/installables/",e)}))}uploadFile(e){return o(this,void 0,void 0,(function*(){return this.request.defaults.headers["Content-Type"]="multipart/form-data",this.request.post("/v1/files/upload/",e)}))}installCustomService(e){return o(this,void 0,void 0,(function*(){return this.request.post("/v1/services/custom/",e)}))}updateServiceStatus(e){return o(this,void 0,void 0,(function*(){return this.request.put("/v1/services/",e)}))}}},87178:(e,t,a)=>{a.d(t,{Z:()=>l});var s=a(69036),o=function(e,t,a,s){function o(e){return e instanceof a?e:new a((function(t){t(e)}))}return new(a||(a=Promise))((function(a,l){function n(e){try{i(s.next(e))}catch(t){l(t)}}function r(e){try{i(s["throw"](e))}catch(t){l(t)}}function i(e){e.done?a(e.value):o(e.value).then(n,r)}i((s=s.apply(e,t||[])).next())}))};class l extends s.Z{getSystemInfo(){return o(this,void 0,void 0,(function*(){return this.request.get("/v1/o11y/overview/")}))}}},16397:(e,t,a)=>{a.d(t,{n:()=>o});var s=a(3746);const o=(0,s.Q_)("systemInfo",{state:()=>({systemInfo:{currentUsage:{cpuUsagePercent:0,memUsagePercent:0,storageUsage:0},hostname:"",publicIp:"",runtimeContext:"container",specs:{cpuCores:0,cpuFrequency:0,cpuModel:"",memoryTotal:0,storageTotal:0},uptimeSecs:0}}),getters:{getSystemInfo(e){return e.systemInfo}},actions:{setSystemInfo(e){this.systemInfo=e}}})},37747:(e,t,a)=>{a.d(t,{Z:()=>l});var s=a(20503),o=a(21809);class l{constructor(){this.localStorage=new s.Z,this.cookieService=new o.Z}logout(){this.localStorage.clearAllLocalStorage(),this.cookieService.removeToken(),setTimeout((()=>{window.location.href=document.baseURI.replace("/_/","/login/")}),100)}}},69036:(e,t,a)=>{a.d(t,{Z:()=>p});var s=a(37524),o=a(21809),l=a(37747),n=a(74462),r=a(88900);class i{constructor(){this.logoutService=new l.Z,this.$i18n=n.i18n.global.t}showAuthTokenInvalided(e){const t={msg:this.$i18n("errorMessages.authTokenInvalided").toString(),type:"negative"};return(0,r.s9)(e,t.msg),setTimeout((()=>{this.logoutService.logout()}),3e3),Object.assign(e,t)}showInvalidCredentials(e){const t={msg:this.$i18n("errorMessages.invalidCredentials").toString(),type:"negative"};return Object.assign(e,t)}}class u{constructor(e){this.authError=new i,this.error=e}executeErrorHandling(){return RegExp(/InvalidAccessToken/).exec(this.error.body)?this.authError.showAuthTokenInvalided(this.error):RegExp(/InvalidCredentials/).exec(this.error.body)?this.authError.showInvalidCredentials(this.error):this.error}}var c=a(53105);class p{constructor(){this.timeoutInSeconds=180,this.timeoutInMilliseconds=18e4,this.request=s.Z.create(),this.cookieService=new o.Z,this.baseURL=(0,c.Z)().replace("/_/","/")+"api",this.request=s.Z.create({baseURL:this.baseURL,timeout:this.timeoutInMilliseconds,headers:{Accept:"application/json","Content-Type":"application/json"}}),this.configHeaders(),this.interceptorsResponses(),this.interceptorsRequests()}configHeaders(){!1!==this.cookieService.hasCookie("os-access-token")&&(this.request.defaults.headers.common["Authorization"]=`Bearer ${this.cookieService.getToken()}`)}interceptorsResponses(){this.request.interceptors.response.use((e=>e),(e=>{if(!e.response)return(0,r.c0)({type:"negative",msg:n.i18n.global.t("errorMessages.networkError").toString(),position:"bottom"}),Promise.reject(new Error("Network Error"));const t=new u(e.response.data);return console.error(e),e.response.data=t.executeErrorHandling(),Promise.reject(e)}))}interceptorsRequests(){this.request.interceptors.request.use((e=>(e.timeout=this.timeoutInMilliseconds,e)),(e=>"ECONNABORTED"===e.code&&e.message.includes("timeout")?((0,r.c0)({type:"negative",msg:n.i18n.global.t("errorMessages.timeoutError").toString(),position:"bottom"}),Promise.reject(new Error("Timeout exceeded"))):Promise.reject(e)))}}},84278:(e,t,a)=>{a.d(t,{Z:()=>d});var s=a(59835),o=a(86970);const l=(0,s.aZ)({__name:"DefaultButton",props:{color:{default:"primary"},loading:{type:Boolean,default:!1},label:{},disable:{type:Boolean,default:!1},icon:{},iconRight:{},padding:{},size:{},stack:{type:Boolean,default:!1},align:{default:"around"},outline:{type:Boolean,default:!1},noCaps:{type:Boolean,default:!0},textTooltip:{default:""},colorTooltip:{default:""}},setup(e){const t=e,a=(0,s.Fl)((()=>t.padding||t.size?"text-bold":"text-bold q-pa-md-sm"));return(e,t)=>{const l=(0,s.up)("q-spinner"),n=(0,s.up)("q-tooltip"),r=(0,s.up)("q-btn");return(0,s.wg)(),(0,s.j4)(r,{loading:e.loading,size:e.size,padding:e.padding,label:e.label.toLowerCase(),color:e.color,icon:e.icon,"icon-right":e.iconRight,stack:e.stack,disable:e.disable,align:e.align,outline:e.outline,"no-caps":e.noCaps,style:{"font-size":"1.1326rem"},class:(0,o.C_)(a.value)},{loading:(0,s.w5)((()=>[(0,s.Wm)(l,{class:"on-left"}),(0,s.Uk)(" "+(0,o.zw)(e.label),1)])),default:(0,s.w5)((()=>[e.textTooltip?((0,s.wg)(),(0,s.j4)(n,{key:0,class:(0,o.C_)(e.colorTooltip),style:{"font-size":"14px"},offset:[10,10]},{default:(0,s.w5)((()=>[(0,s.Uk)((0,o.zw)(e.textTooltip),1)])),_:1},8,["class"])):(0,s.kq)("",!0)])),_:1},8,["loading","size","padding","label","color","icon","icon-right","stack","disable","align","outline","no-caps","class"])}}});var n=a(68879),r=a(13902),i=a(46858),u=a(69984),c=a.n(u);const p=l,d=p;c()(l,"components",{QBtn:n.Z,QSpinner:r.Z,QTooltip:i.Z})},15521:(e,t,a)=>{a.d(t,{Z:()=>p});var s=a(59835),o=a(60499);const l=(0,s.aZ)({__name:"DefaultInput",props:{value:{},label:{},placeholder:{default:""},icon:{default:""},disable:{type:Boolean,default:!1},type:{default:"text"},dataCy:{default:""},counter:{type:Boolean,default:!1},maxLength:{default:"32"},msgError:{default:""},isError:{type:Boolean,default:!1},suffix:{default:""},prefix:{default:""},readonly:{type:Boolean,default:!1},rules:{default:void 0}},emits:["update:value"],setup(e,{emit:t}){const a=e,l=(0,o.iH)("");return(0,s.wF)((()=>{l.value=a.value})),(0,s.YP)(l,(e=>{t("update:value",e)})),(e,t)=>{const a=(0,s.up)("q-icon"),o=(0,s.up)("q-input");return(0,s.wg)(),(0,s.j4)(o,{label:e.label,placeholder:e.placeholder,type:e.type,modelValue:l.value,"onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),modelModifiers:{trim:!0},debounce:"100","data-cy":e.dataCy,readonly:e.readonly,disable:e.disable,counter:e.counter,maxlength:e.maxLength,"error-message":e.msgError,error:e.isError,suffix:e.suffix,prefix:e.prefix,rules:e.rules,filled:""},(0,s.Nv)({_:2},[e.icon?{name:"prepend",fn:(0,s.w5)((()=>[(0,s.Wm)(a,{name:e.icon},null,8,["name"])])),key:"0"}:void 0]),1032,["label","placeholder","type","modelValue","data-cy","readonly","disable","counter","maxlength","error-message","error","suffix","prefix","rules"])}}});var n=a(13119),r=a(22857),i=a(69984),u=a.n(i);const c=l,p=c;u()(l,"components",{QInput:n.Z,QIcon:r.Z})},27974:(e,t,a)=>{a.d(t,{Z:()=>f});var s=a(59835),o=a(86970),l=a(60499);const n=["innerHTML"],r=(0,s.aZ)({__name:"MultiSelect",props:{selected:{},options:{},label:{default:""},icon:{default:""}},emits:["update:selected"],setup(e,{emit:t}){const a=e,r=(0,l.iH)(a.selected);return(0,s.YP)(r,(e=>{t("update:selected",e)})),(e,t)=>{const a=(0,s.up)("q-icon"),l=(0,s.up)("q-item-label"),i=(0,s.up)("q-item-section"),u=(0,s.up)("q-toggle"),c=(0,s.up)("q-item"),p=(0,s.up)("q-select");return(0,s.wg)(),(0,s.j4)(p,{modelValue:r.value,"onUpdate:modelValue":t[0]||(t[0]=e=>r.value=e),options:e.options,label:e.label,borderless:"",filled:"",multiple:"",class:"rounded-borders",style:{width:"100%"},"emit-value":"","map-options":"","expand-icon":"sym_s_expand_more","expanded-icon":"sym_s_expand_less"},(0,s.Nv)({option:(0,s.w5)((({itemProps:e,opt:t,selected:a,toggleOption:r})=>[(0,s.Wm)(c,(0,o.vs)((0,s.F4)(e)),{default:(0,s.w5)((()=>[(0,s.Wm)(i,null,{default:(0,s.w5)((()=>[(0,s.Wm)(l,null,{default:(0,s.w5)((()=>[(0,s._)("div",{innerHTML:t.label},null,8,n)])),_:2},1024)])),_:2},1024),(0,s.Wm)(i,{side:""},{default:(0,s.w5)((()=>[(0,s.Wm)(u,{"model-value":a,"onUpdate:modelValue":e=>r(t)},null,8,["model-value","onUpdate:modelValue"])])),_:2},1024)])),_:2},1040)])),_:2},[e.icon?{name:"prepend",fn:(0,s.w5)((()=>[(0,s.Wm)(a,{name:e.icon},null,8,["name"])])),key:"0"}:void 0]),1032,["modelValue","options","label"])}}});var i=a(32259),u=a(22857),c=a(490),p=a(76749),d=a(33115),m=a(23175),g=a(69984),v=a.n(g);const h=r,f=h;v()(r,"components",{QSelect:i.Z,QIcon:u.Z,QItem:c.Z,QItemSection:p.Z,QItemLabel:d.Z,QToggle:m.Z})},26557:(e,t,a)=>{a.d(t,{Z:()=>d});var s=a(59835),o=a(60499),l=a(25121);const n=(0,s.aZ)({__name:"PasswordInput",props:{password:{default:""},dataCyInput:{default:""},isReadonly:{type:Boolean,default:!1},minLength:{default:6},maxLength:{default:64}},emits:["update:password"],setup(e,{emit:t}){const a=e,n=(0,l.QT)().t,r=(0,o.iH)(""),i=(0,o.iH)(!0);(0,s.wF)((()=>{r.value=a.password})),(0,s.YP)(r,(e=>{t("update:password",e)})),(0,s.YP)((()=>a.password),(e=>{r.value=e}));const u=[e=>e.length>=a.minLength||`${n("form.passwordInput.invalidPassword",{minLength:a.minLength})}`];return(e,t)=>{const a=(0,s.up)("q-icon"),o=(0,s.up)("q-input");return(0,s.wg)(),(0,s.j4)(o,{label:e.$t("form.passwordInput.inputPassword"),readonly:e.isReadonly,type:i.value?"password":"text",rules:u,modelValue:r.value,"onUpdate:modelValue":t[1]||(t[1]=e=>r.value=e),modelModifiers:{trim:!0},maxlength:e.maxLength,debounce:"100",borderless:"","data-cy":e.dataCyInput,filled:""},{prepend:(0,s.w5)((()=>[(0,s.Wm)(a,{name:"sym_s_lock"})])),append:(0,s.w5)((()=>[(0,s.Wm)(a,{name:i.value?"sym_s_visibility_off":"sym_s_visibility",class:"cursor-pointer",onClick:t[0]||(t[0]=e=>i.value=!i.value)},null,8,["name"])])),_:1},8,["label","readonly","type","modelValue","maxlength","data-cy"])}}});var r=a(13119),i=a(22857),u=a(69984),c=a.n(u);const p=n,d=p;c()(n,"components",{QInput:r.Z,QIcon:i.Z})},94629:(e,t,a)=>{a.d(t,{Z:()=>p});var s=a(59835),o=a(60499);const l=(0,s.aZ)({__name:"SingleSelect",props:{options:{},label:{default:""},icon:{default:""},emitValue:{type:Boolean,default:!0},clearable:{type:Boolean,default:!1},msgError:{default:""},isError:{type:Boolean,default:!1},isLoading:{type:Boolean,default:!1},isDisable:{type:Boolean,default:!1},selected:{default:""}},emits:["update:selected"],setup(e,{emit:t}){const a=e,l=(0,o.iH)(a.selected),n=(0,o.iH)(a.options);return(0,s.YP)((()=>a.selected),(e=>{l.value=e}),{immediate:!0}),(0,s.YP)(l,(e=>{t("update:selected",e)})),(e,t)=>{const a=(0,s.up)("q-icon"),o=(0,s.up)("q-select");return(0,s.wg)(),(0,s.j4)(o,{options:n.value,modelValue:l.value,"onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),label:e.label,debounce:"100","emit-value":e.emitValue,"map-options":"",borderless:"","stack-label":"",clearable:e.clearable,"error-message":e.msgError,error:e.isError,loading:e.isLoading,disable:e.isDisable,filled:""},(0,s.Nv)({_:2},[e.icon?{name:"prepend",fn:(0,s.w5)((()=>[(0,s.Wm)(a,{name:e.icon},null,8,["name"])])),key:"0"}:void 0]),1032,["options","modelValue","label","emit-value","clearable","error-message","error","loading","disable"])}}});var n=a(32259),r=a(22857),i=a(69984),u=a.n(i);const c=l,p=c;u()(l,"components",{QSelect:n.Z,QIcon:r.Z})},67377:(e,t,a)=>{a.d(t,{Z:()=>u});var s=a(59835),o=a(86970),l=a(60499);const n={class:"default-chip-text q-px-xs"},r=(0,s.aZ)({__name:"CustomChip",props:{labelLeft:{},labelRight:{},color:{default:"#c97350"},textColor:{default:"#fff"},fontSize:{default:"1.2499rem"}},setup(e){const t=e,a=(0,l.iH)({}),r=(0,l.iH)({});return(0,s.bv)((()=>{a.value={backgroundColor:t.color,color:t.textColor},r.value={border:"1px solid "+t.color,borderRadius:"5px",fontSize:t.fontSize}})),(e,t)=>((0,s.wg)(),(0,s.iD)("div",{style:(0,o.j5)(r.value)},[(0,s._)("div",{class:"q-px-xs float-left",style:(0,o.j5)(a.value)},(0,o.zw)(e.labelLeft),5),(0,s._)("span",n,(0,o.zw)(e.labelRight),1)],4))}}),i=r,u=i},99573:(e,t,a)=>{a.d(t,{Z:()=>d});var s=a(59835),o=a(86970);const l={class:"default-chip-text"},n=(0,s.aZ)({__name:"DefaultChip",props:{icon:{default:""},label:{},color:{default:"primary"}},setup(e){return(e,t)=>{const a=(0,s.up)("q-avatar"),n=(0,s.up)("q-chip");return(0,s.wg)(),(0,s.j4)(n,{square:"",class:"text-primary",outline:""},{default:(0,s.w5)((()=>[(0,s.Wm)(a,{icon:e.icon,color:e.color,"text-color":"white","font-size":"1.2499rem"},null,8,["icon","color"]),(0,s._)("span",l,(0,o.zw)(e.label),1)])),_:1})}}});var r=a(57691),i=a(61357),u=a(69984),c=a.n(u);const p=n,d=p;c()(n,"components",{QChip:r.Z,QAvatar:i.Z})},89906:(e,t,a)=>{a.d(t,{Z:()=>k});var s=a(59835),o=a(86970),l=a(60499);const n={class:"column items-center"},r={class:"col q-mb-md"},i={class:"q-pa-sm",style:{"border-radius":"50%",height:"auto"}},u={class:"col"},c={class:"title-dialog text-negative q-mb-md"},p={class:"col"},d=["innerHTML"],m={class:"text-bold",style:{"font-size":"0.9708rem"}},g=(0,s.aZ)({__name:"DeleteDialog",props:{showDeleteDialog:{type:Boolean},titleDialog:{},imagePath:{},messageToDelete:{},warningToDelete:{},customStyle:{}},emits:["update:showDeleteDialog"],setup(e,{emit:t}){const a=e,g=(0,l.iH)(a.showDeleteDialog);return(0,s.YP)((()=>a.showDeleteDialog),(e=>{g.value=e})),(0,s.YP)(g,(e=>{t("update:showDeleteDialog",e)})),(e,t)=>{const a=(0,s.up)("q-img"),l=(0,s.up)("q-icon"),v=(0,s.up)("q-card-section"),h=(0,s.up)("q-card-actions"),f=(0,s.up)("q-card"),w=(0,s.up)("q-dialog");return(0,s.wg)(),(0,s.j4)(w,{modelValue:g.value,"onUpdate:modelValue":t[0]||(t[0]=e=>g.value=e),persistent:""},{default:(0,s.w5)((()=>[(0,s.Wm)(f,{class:"bg-card dialog-card-bg",style:{"min-width":"450px","border-radius":"16px"}},{default:(0,s.w5)((()=>[(0,s.Wm)(v,{class:"q-px-none"},{default:(0,s.w5)((()=>[(0,s._)("div",n,[(0,s._)("div",r,[(0,s._)("div",i,[e.imagePath?((0,s.wg)(),(0,s.j4)(a,{key:0,src:e.imagePath,style:{width:"62px",height:"62px"}},null,8,["src"])):((0,s.wg)(),(0,s.j4)(l,{key:1,name:"sym_s_warning",size:"62px",color:"negative"}))])]),(0,s._)("div",u,[(0,s._)("div",c,(0,o.zw)(e.titleDialog),1)]),(0,s._)("div",p,[(0,s._)("p",{style:{"font-size":"1.2135rem"},innerHTML:e.messageToDelete},null,8,d)]),(0,s._)("div",null,[(0,s._)("p",m,(0,o.zw)(e.warningToDelete),1)])])])),_:1}),(0,s.Wm)(h,{align:"between",class:"q-px-none"},{default:(0,s.w5)((()=>[(0,s.WI)(e.$slots,"card-actions")])),_:3})])),_:3})])),_:3},8,["modelValue"])}}});var v=a(32074),h=a(44458),f=a(63190),w=a(70335),y=a(22857),b=a(11821),D=a(69984),_=a.n(D);const x=g,k=x;_()(g,"components",{QDialog:v.Z,QCard:h.Z,QCardSection:f.Z,QImg:w.Z,QIcon:y.Z,QCardActions:b.Z})},87713:(e,t,a)=>{a.d(t,{Z:()=>m});var s=a(59835),o=a(60499),l=a(25121),n=a(88900);const r=(0,s.aZ)({__name:"GeneratePassword",props:{password:{default:""},dataCy:{default:""},lenPassword:{default:16},lenLowerCasePart:{default:1},lenUpperCasePart:{default:1},lenNumericPart:{default:1},lenSpecialCharacterPart:{default:1}},emits:["update:password"],setup(e,{emit:t}){const a=e,r=(0,o.iH)(null),i=(0,l.QT)().t;function u(){let e="";const s=a.lenPassword-a.lenLowerCasePart-a.lenUpperCasePart-a.lenNumericPart-a.lenSpecialCharacterPart;e+=c(a.lenLowerCasePart,"lowerCase"),e+=c(a.lenUpperCasePart,"upperCase"),e+=c(a.lenNumericPart,"numeric"),e+=c(a.lenSpecialCharacterPart,"symbol"),e+=c(s,"default"),e=e.split("").sort((function(){return.5-Math.random()})).join(""),t("update:password",e),p(e)}function c(e,t){let a="";switch(t){case"lowerCase":a="abcdefghijklmnopqrstuvwxyz";break;case"upperCase":a="ABCDEFGHIJKLMNOPQRSTUVWXYZ";break;case"numeric":a="0123456789";break;case"symbol":a="%?)(*><";break;default:a="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789%?)(*><"}let s="";for(let o=0;o{const a=(0,s.up)("q-btn");return(0,s.wg)(),(0,s.iD)("div",null,[(0,s.Wm)(a,{"data-cy":e.dataCy,label:e.$t("generatePassword.btnGeneratePassword"),class:"text-bold","no-caps":"",unelevated:"",rounded:"",outline:"",size:"11px",padding:"2px 10px",onClick:t[0]||(t[0]=e=>u())},null,8,["data-cy","label"]),(0,s._)("input",{type:"hidden",ref_key:"clipboard",ref:r,value:""},null,512)])}}});var i=a(11639),u=a(68879),c=a(69984),p=a.n(c);const d=(0,i.Z)(r,[["__scopeId","data-v-617700b8"]]),m=d;p()(r,"components",{QBtn:u.Z})},35274:(e,t,a)=>{a.d(t,{Z:()=>y});var s=a(59835),o=a(86970),l=a(60499),n=a(88900),r=a(9281),i=a(84278),u=a(45273),c=a(25121);const p={class:"text-h6"},d=(0,s.aZ)({__name:"ServiceInstallButton",props:{serviceName:{}},emits:["update:isInstalledService"],setup(e,{emit:t}){const a=e,d=(0,c.QT)().t,m=(0,l.iH)(!1);function g(){(0,u.Q)();const e=new r.Z;m.value=!0,e.installService({name:a.serviceName.toLowerCase()}).then((()=>{(0,n.LX)(d("servicesStatusTableActions.installSuccess")),t("update:isInstalledService",!0)})).catch((e=>{console.error(e),(0,n.s9)(e.response.data,d("servicesStatusTableActions.installError")),t("update:isInstalledService",!1)})).finally((()=>{m.value=!1,(0,u.Z)()}))}return(e,t)=>{const a=(0,s.up)("q-icon"),l=(0,s.up)("q-card-section"),n=(0,s.up)("q-card");return(0,s.wg)(),(0,s.j4)(n,{flat:"",style:{height:"80vh"}},{default:(0,s.w5)((()=>[(0,s.Wm)(l,{class:"row justify-start items-center q-gutter-lg"},{default:(0,s.w5)((()=>[(0,s._)("div",p,[(0,s.Wm)(a,{name:"sym_s_warning",class:"text-warning q-mr-md",size:"md"}),(0,s.Uk)(" "+(0,o.zw)(e.$t("serviceInstallButton.uninstalledService",{serviceName:e.serviceName})),1)]),(0,s.Wm)(i.Z,{color:"primary",icon:"sym_s_download_for_offline",loading:m.value,label:e.$t("serviceInstallButton.installService",{serviceName:e.serviceName}),onClick:t[0]||(t[0]=e=>g())},null,8,["loading","label"])])),_:1})])),_:1})}}});var m=a(44458),g=a(63190),v=a(22857),h=a(69984),f=a.n(h);const w=d,y=w;f()(d,"components",{QCard:m.Z,QCardSection:g.Z,QIcon:v.Z})},63064:(e,t,a)=>{a.d(t,{Z:()=>C});var s=a(59835),o=a(86970),l=a(60499),n=a(25121);const r={class:"q-pt-md"},i={class:"q-gutter-y-md column"},u=["textContent"],c={key:1,style:{"line-height":"1.68rem"}},p={key:0,class:"q-pr-sm"},d={key:1,class:"q-pr-sm"},m={key:0,class:"q-pr-sm"},g={key:1,class:"q-pr-sm"},v={key:0,class:"q-pr-sm"},h={key:1,class:"q-pr-sm"},f={key:0,class:"q-pr-sm"},w={key:1,class:"q-pr-sm"},y={key:0,class:"q-pr-sm"},b={key:1,class:"q-pr-sm"},D={key:0,class:"q-pr-sm"},_={key:1,class:"q-pr-sm"},x={key:2},k=(0,s.aZ)({__name:"StrongPasswordStrength",props:{password:{},minPasswordLength:{default:16},maxPasswordLength:{default:64}},emits:["update:isValidPassword"],setup(e,{emit:t}){const a=e,k=(0,n.QT)().t,q=(0,l.iH)(0),Z=(0,l.iH)([]),S={showError:!1,msgError:`${k("strongPasswordStrength.isTooShort",{minPasswordLength:a.minPasswordLength})}`},P={showError:!1,msgError:`${k("strongPasswordStrength.isTooLong",{maxPasswordLength:a.maxPasswordLength})}`},C={showError:!1,msgError:`${k("strongPasswordStrength.hasNumber")}`},T={showError:!1,msgError:`${k("strongPasswordStrength.hasUpperCases")}`},A={showError:!1,msgError:`${k("strongPasswordStrength.hasLowerCases")}`},I={showError:!1,msgError:`${k("strongPasswordStrength.hasReservedCharSuccess")}`},M=(0,s.Fl)((()=>{let e="red";return q.value<=.3&&(e="red"),q.value>.3&&q.value<=.6&&(e="orange"),q.value>.6&&q.value<=.9&&(e="yellow"),1===q.value&&(e="green"),e}));return(0,s.YP)((()=>a.password),(e=>{const s=/[\!\@\#\$\&\=\'\"\`\|]+/i;q.value=0,S.showError=e.lengtha.maxPasswordLength,C.showError=!/\d/.test(e),T.showError=!/[A-Z]/.test(e),A.showError=!/[a-z]/.test(e),I.showError=s.test(e),e.length>=a.minPasswordLength&&e.length<=a.maxPasswordLength&&(q.value=q.value+.2),/\d/.test(e)&&(q.value=q.value+.2),/[A-Z]/.test(e)&&(q.value=q.value+.2),/[a-z]/.test(e)&&(q.value=q.value+.2),s.test(e)?(Z.value=[...new Set(Array.from(e).filter((e=>s.test(e))))],I.msgError=`${k("strongPasswordStrength.hasReservedCharError")}`):(I.msgError=`${k("strongPasswordStrength.hasReservedCharSuccess")}`,q.value=q.value+.2),t("update:isValidPassword",1===q.value)})),(e,t)=>{const a=(0,s.up)("q-linear-progress");return(0,s.wg)(),(0,s.iD)("div",r,[(0,s._)("div",i,[(0,s.Wm)(a,{size:"10px",value:q.value,color:M.value,class:"q-my-sm"},null,8,["value","color"])]),1===q.value?((0,s.wg)(),(0,s.iD)("div",{key:0,class:"text-positive q-pb-sm",textContent:(0,o.zw)(e.$t("strongPasswordStrength.securePassword"))},null,8,u)):((0,s.wg)(),(0,s.iD)("div",c,[(0,s._)("div",{class:(0,o.C_)(S.showError?"text-negative":"text-positive")},[S.showError?((0,s.wg)(),(0,s.iD)("span",p,"❌")):((0,s.wg)(),(0,s.iD)("span",d,"✅")),(0,s.Uk)(" "+(0,o.zw)(S.msgError),1)],2),(0,s._)("div",{class:(0,o.C_)(P.showError?"text-negative":"text-positive")},[P.showError?((0,s.wg)(),(0,s.iD)("span",m,"❌")):((0,s.wg)(),(0,s.iD)("span",g,"✅")),(0,s.Uk)(" "+(0,o.zw)(P.msgError),1)],2),(0,s._)("div",{class:(0,o.C_)(C.showError?"text-negative":"text-positive")},[C.showError?((0,s.wg)(),(0,s.iD)("span",v,"❌")):((0,s.wg)(),(0,s.iD)("span",h,"✅")),(0,s.Uk)(" "+(0,o.zw)(C.msgError),1)],2),(0,s._)("div",{class:(0,o.C_)(T.showError?"text-negative":"text-positive")},[T.showError?((0,s.wg)(),(0,s.iD)("span",f,"❌")):((0,s.wg)(),(0,s.iD)("span",w,"✅")),(0,s.Uk)(" "+(0,o.zw)(T.msgError),1)],2),(0,s._)("div",{class:(0,o.C_)(A.showError?"text-negative":"text-positive")},[A.showError?((0,s.wg)(),(0,s.iD)("span",y,"❌")):((0,s.wg)(),(0,s.iD)("span",b,"✅")),(0,s.Uk)(" "+(0,o.zw)(A.msgError),1)],2),(0,s._)("div",{class:(0,o.C_)(I.showError?"text-negative":"text-positive")},[I.showError?((0,s.wg)(),(0,s.iD)("span",D,"❌")):((0,s.wg)(),(0,s.iD)("span",_,"✅")),(0,s.Uk)(" "+(0,o.zw)(I.msgError)+" ",1),I.showError?((0,s.wg)(),(0,s.iD)("span",x,[((0,s.wg)(!0),(0,s.iD)(s.HY,null,(0,s.Ko)(Z.value,((e,t)=>((0,s.wg)(),(0,s.iD)("span",{key:t,style:{"font-weight":"bold"}},(0,o.zw)(e),1)))),128))])):(0,s.kq)("",!0)],2)]))])}}});var q=a(8289),Z=a(69984),S=a.n(Z);const P=k,C=P;S()(k,"components",{QLinearProgress:q.Z})},88850:(e,t,a)=>{a.d(t,{Z:()=>x});var s=a(59835),o=a(61957),l=a(60499),n=a(72622),r=a.n(n);const i=(0,s.aZ)({__name:"MailAddressInput",props:{mailAddress:{default:""},suffix:{default:""},dataCyInput:{default:""}},emits:["update:isValidMail","update:mailAddressWithSuffix","update:mailAddress"],setup(e,{emit:t}){const a=e,o=(0,l.iH)(""),n=(0,s.Fl)((()=>r()(`${o.value}${a.suffix}`)));return(0,s.YP)((()=>a.mailAddress),(e=>{o.value=e})),(0,s.YP)(n,(e=>{t("update:isValidMail",e)})),(0,s.YP)(o,(e=>{t("update:mailAddress",e),t("update:mailAddressWithSuffix",`${e}${a.suffix}`)})),(e,t)=>{const a=(0,s.up)("q-icon"),l=(0,s.up)("q-input");return(0,s.wg)(),(0,s.j4)(l,{label:e.$t("form.mailAddressInput.inputMail"),type:e.suffix?"text":"email",rules:[()=>n.value||e.$t("form.mailAddressInput.invalidMail")],modelValue:o.value,"onUpdate:modelValue":t[0]||(t[0]=e=>o.value=e),modelModifiers:{trim:!0},debounce:"100",suffix:e.suffix,borderless:"","data-cy":e.dataCyInput,filled:""},{prepend:(0,s.w5)((()=>[(0,s.Wm)(a,{name:"sym_s_alternate_email"})])),_:1},8,["label","type","rules","modelValue","suffix","data-cy"])}}});var u=a(13119),c=a(22857),p=a(69984),d=a.n(p);const m=i,g=m;d()(i,"components",{QInput:u.Z,QIcon:c.Z});var v=a(26557),h=a(87713),f=a(63064);const w={key:3,class:"q-my-md"},y={style:{"margin-top":"24px"}},b=(0,s.aZ)({__name:"MarketplaceDataFields",props:{label:{},name:{},type:{},defaultValue:{default:""},isRequired:{type:Boolean,default:!1},options:{default:[]}},emits:["update:dataFields"],setup(e,{emit:t}){const a=e,n=(0,l.iH)(a.defaultValue),r=()=>e=>!!e||!a.isRequired||"This field is required";return(0,s.YP)(n,(e=>{t("update:dataFields",{name:a.name,value:e})}),{immediate:!0}),(e,t)=>{const l=(0,s.up)("q-input"),i=(0,s.up)("q-select");return(0,s.wg)(),(0,s.iD)(s.HY,null,["text"===e.type&&0===e.options.length?((0,s.wg)(),(0,s.j4)(l,{key:0,modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=e=>n.value=e),label:a.label,filled:"",rules:e.isRequired?[r()]:[],class:"q-my-md"},null,8,["modelValue","label","rules"])):(0,s.kq)("",!0),"text"===e.type&&e.options.length>0?((0,s.wg)(),(0,s.j4)(i,{key:1,modelValue:n.value,"onUpdate:modelValue":t[1]||(t[1]=e=>n.value=e),label:e.label,filled:"",options:e.options,class:"q-mt-md q-mb-lg"},null,8,["modelValue","label","options"])):(0,s.kq)("",!0),"email"===e.type?((0,s.wg)(),(0,s.j4)(g,{key:2,mailAddress:n.value,"onUpdate:mailAddress":t[2]||(t[2]=e=>n.value=e),class:"q-my-md"},null,8,["mailAddress"])):(0,s.kq)("",!0),"password"===e.type?((0,s.wg)(),(0,s.iD)("div",w,[(0,s._)("div",null,[(0,s.Wm)(v.Z,{password:n.value,"onUpdate:password":t[3]||(t[3]=e=>n.value=e)},null,8,["password"]),(0,s.Wm)(h.Z,{password:n.value,"onUpdate:password":t[4]||(t[4]=e=>n.value=e),class:"float-right",style:{position:"relative",top:"-10px"}},null,8,["password"])]),(0,s._)("div",y,[(0,s.wy)((0,s.Wm)(f.Z,{password:n.value,minPasswordLength:6},null,8,["password"]),[[o.F8,n.value.length>0]])])])):(0,s.kq)("",!0)],64)}}});var D=a(32259);const _=b,x=_;d()(b,"components",{QInput:u.Z,QSelect:D.Z})},84019:(e,t,a)=>{a.d(t,{Z:()=>g});var s=a(59835),o=a(25121),l=a(84278),n=a(89906),r=a(45273),i=a(88900),u=a(19302),c=a(62601),p=a(9704);const d=(0,s.aZ)({__name:"MarketplaceDeleteAppDialog",setup(e){const t=(0,o.QT)().t,a=(0,c.R)(),d=(0,s.Fl)({get:()=>a.getShowDeleteAppDialog,set:e=>{a.setShowDeleteAppDialog(e)}}),m=(0,s.Fl)({get:()=>a.getKeyMarketplaceTable,set:e=>{a.setKeyMarketplaceTable(e)}}),g=(0,s.Fl)((()=>a.getSelectedAppToDelete)),v=(0,s.Fl)((()=>{const e=(0,u.Z)();return e.dark.isActive?"/icons/bomb_dark.svg":"/icons/bomb_light.svg"}));function h(){d.value=!1}function f(){const e=new p.Z;(0,r.Q)(),e.uninstallApp(g.value.id.toString()).then((()=>{(0,i.LX)(`${t("marketplaceDeleteAppDialog.deleteAppSuccess")}`),setTimeout((()=>{h(),m.value++}),100)})).catch((e=>{console.error(e),(0,i.s9)(e.response.data,`${t("marketplaceDeleteAppDialog.deleteAppWithError")}`)})).finally((()=>{(0,r.Z)()}))}return(e,t)=>((0,s.wg)(),(0,s.j4)(n.Z,{showDeleteDialog:d.value,"onUpdate:showDeleteDialog":t[2]||(t[2]=e=>d.value=e),titleDialog:e.$t("marketplaceDeleteAppDialog.title"),imagePath:v.value,messageToDelete:e.$t("marketplaceDeleteAppDialog.confirmRemoveApp",{appName:g.value.name}),warningToDelete:e.$t("marketplaceDeleteAppDialog.warningRemoveApp")},{"card-actions":(0,s.w5)((()=>[(0,s.Wm)(l.Z,{label:e.$t("marketplaceDeleteAppDialog.cancelBtn"),color:"grey-8",onClick:t[0]||(t[0]=e=>h())},null,8,["label"]),(0,s.Wm)(l.Z,{icon:"sym_s_delete",label:e.$t("marketplaceDeleteAppDialog.confirmBtn"),color:"negative",onClick:t[1]||(t[1]=e=>f())},null,8,["label"])])),_:1},8,["showDeleteDialog","titleDialog","imagePath","messageToDelete","warningToDelete"]))}}),m=d,g=m},21647:(e,t,a)=>{a.d(t,{Z:()=>b});var s=a(59835),o=a(60499),l=a(94629),n=a(15521),r=a(60016),i=a(88900),u=a(25121);const c={key:0},p={key:1},d={class:"flex items-center q-gutter-sm"},m={style:{width:"70%"}},g={style:{width:"28%"}},v=(0,s.aZ)({__name:"MarketplaceInstallDirectory",emits:["update:selectedHostname","update:installDirectory"],setup(e,{emit:t}){const a=(0,u.QT)().t,v=(0,o.iH)(!1),h=(0,o.iH)([]),f=(0,o.iH)([]),w=(0,o.iH)(""),y=(0,o.iH)("");function b(){v.value=!0;const e=new r.Z;e.getVirtualHosts().then((e=>{0!==e.data.body.length&&(h.value=e.data.body,f.value=e.data.body.map((e=>e.hostname)),w.value=f.value[0])})).catch((e=>{console.error(e),(0,i.s9)(e.response.data,a("marketplaceInstallAppDialog.getVirtualHostsWithError"))})).finally((()=>{v.value=!1}))}return(0,s.bv)((()=>{b()})),(0,s.YP)(w,(e=>{t("update:selectedHostname",e)})),(0,s.YP)(y,(e=>{t("update:installDirectory",e)})),(e,t)=>{const a=(0,s.up)("q-skeleton");return!0===v.value?((0,s.wg)(),(0,s.iD)("div",c,[((0,s.wg)(),(0,s.iD)(s.HY,null,(0,s.Ko)(2,(e=>(0,s.Wm)(a,{animation:"wave",height:"60px",class:"q-mb-md",key:e}))),64))])):((0,s.wg)(),(0,s.iD)("div",p,[(0,s._)("div",d,[(0,s._)("div",m,[(0,s.Wm)(l.Z,{selected:w.value,"onUpdate:selected":t[0]||(t[0]=e=>w.value=e),label:e.$t("marketplaceInstallAppDialog.hostnameSelect"),options:f.value},null,8,["selected","label","options"])]),(0,s._)("div",g,[(0,s.Wm)(n.Z,{prefix:"/",value:y.value,"onUpdate:value":t[1]||(t[1]=e=>y.value=e),label:e.$t("marketplaceInstallAppDialog.installDirectory")},null,8,["value","label"])])])]))}}});var h=a(57133),f=a(69984),w=a.n(f);const y=v,b=y;w()(v,"components",{QSkeleton:h.ZP})},97510:(e,t,a)=>{a.d(t,{Z:()=>U});var s=a(59835),o=a(86970),l=a(60499),n=a(67377);const r={class:"flex items-center"},i=["src"],u={class:"td-main-app-name"},c={class:"q-mt-sm"},p=(0,s.aZ)({__name:"MarketplaceTableTdMain",props:{avatarUrl:{},appName:{},type:{},path:{}},setup(e){const t=e;function a(e){return e.charAt(0).toUpperCase()+e.slice(1)}return(e,l)=>((0,s.wg)(),(0,s.iD)(s.HY,null,[(0,s._)("div",r,[(0,s._)("img",{src:e.avatarUrl,class:"td-main-avatar"},null,8,i),(0,s._)("div",u,(0,o.zw)(t.appName),1)]),(0,s._)("div",c,[(0,s.Wm)(n.Z,{labelLeft:a(e.type),labelRight:e.path,fontSize:"0.9708rem"},null,8,["labelLeft","labelRight"])])],64))}}),d=p,m=d;var g=a(62601);const v=(0,s.aZ)({__name:"MarketplaceTableTdActions",props:{app:{}},setup(e){const t=e,a=(0,g.R)(),n=(0,l.iH)(!1);function r(){a.setSelectedAppToDelete(t.app),a.setShowDeleteAppDialog(!0)}return(e,t)=>{const a=(0,s.up)("q-tooltip"),l=(0,s.up)("q-btn");return(0,s.wg)(),(0,s.j4)(l,{onClick:t[0]||(t[0]=e=>r()),loading:n.value,color:"negative",size:"md",icon:"sym_s_delete_forever"},{default:(0,s.w5)((()=>[(0,s.Wm)(a,{class:"bg-negative text-white",style:{"font-size":"14px"},offset:[10,10]},{default:(0,s.w5)((()=>[(0,s.Uk)((0,o.zw)(e.$t("marketplaceTableTdActions.uninstallBtn")),1)])),_:1})])),_:1},8,["loading"])}}});var h=a(68879),f=a(46858),w=a(69984),y=a.n(w);const b=v,D=b;y()(v,"components",{QBtn:h.Z,QTooltip:f.Z});var _=a(84278),x=a(50168);const k={class:"row justify-center q-mt-md"},q=(0,s.aZ)({__name:"MarketplaceInstalledTable",props:{installedAppsList:{},showInstallAppBtn:{type:Boolean,default:!0}},setup(e){const t=e,a=(0,g.R)(),n=(0,l.iH)(""),r=(0,l.iH)({sortBy:"desc",descending:!1,page:1,rowsPerPage:10}),i=(0,s.Fl)((()=>Math.ceil(t.installedAppsList.length/r.value.rowsPerPage)));function u(){a.setShowInstallAppDialog(!0)}return(e,t)=>{const a=(0,s.up)("q-icon"),c=(0,s.up)("q-input"),p=(0,s.up)("q-space"),d=(0,s.up)("q-th"),g=(0,s.up)("q-tr"),v=(0,s.up)("q-td"),h=(0,s.up)("q-table"),f=(0,s.up)("q-pagination");return(0,s.wg)(),(0,s.iD)(s.HY,null,[(0,s.Wm)(h,{rows:e.installedAppsList,filter:n.value,pagination:r.value,"onUpdate:pagination":t[2]||(t[2]=e=>r.value=e),"no-data-label":e.$t("overviewMarketplaceTable.noDataLabel"),"row-key":"key",color:"primary",flat:"",bordered:"","hide-pagination":""},{top:(0,s.w5)((()=>[(0,s.Wm)(c,{borderless:"",debounce:"300",color:"primary",modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=e=>n.value=e),label:e.$t("overviewMarketplaceTable.searchInput")},{prepend:(0,s.w5)((()=>[(0,s.Wm)(a,{name:"sym_s_search"})])),_:1},8,["modelValue","label"]),(0,s.Wm)(p),!0===e.showInstallAppBtn?((0,s.wg)(),(0,s.j4)(_.Z,{key:0,label:e.$t("overviewMarketplaceTable.installBtn"),color:"primary",icon:"sym_s_store",onClick:t[1]||(t[1]=e=>u())},null,8,["label"])):(0,s.kq)("",!0)])),header:(0,s.w5)((t=>[(0,s.Wm)(g,{props:t},{default:(0,s.w5)((()=>[(0,s.Wm)(d,{class:"marketplace-table-th-main"},{default:(0,s.w5)((()=>[(0,s.Uk)((0,o.zw)(e.$t("overviewMarketplaceTable.appNameColumn")),1)])),_:1}),(0,s.Wm)(d,{class:"marketplace-table-th"},{default:(0,s.w5)((()=>[(0,s.Uk)((0,o.zw)(e.$t("overviewMarketplaceTable.installDirectoryColumn")),1)])),_:1}),(0,s.Wm)(d,{class:"marketplace-table-th"},{default:(0,s.w5)((()=>[(0,s.Uk)((0,o.zw)(e.$t("overviewMarketplaceTable.createdAtColumn")),1)])),_:1}),(0,s.Wm)(d)])),_:2},1032,["props"])])),body:(0,s.w5)((e=>[(0,s.Wm)(g,{props:e},{default:(0,s.w5)((()=>[(0,s.Wm)(v,{class:"td-main-table"},{default:(0,s.w5)((()=>[(0,s.Wm)(m,{avatarUrl:e.row.avatarUrl,appName:e.row.name,type:e.row.type,path:e.row.hostname+e.row.urlPath},null,8,["avatarUrl","appName","type","path"])])),_:2},1024),(0,s.Wm)(v,{class:"text-center"},{default:(0,s.w5)((()=>[(0,s.Uk)((0,o.zw)(e.row.installDirectory),1)])),_:2},1024),(0,s.Wm)(v,{class:"text-center"},{default:(0,s.w5)((()=>[(0,s.Uk)((0,o.zw)((0,l.SU)(x.Z)({epoch:e.row.createdAt,onlyDate:!0})),1)])),_:2},1024),(0,s.Wm)(v,{class:"text-right"},{default:(0,s.w5)((()=>[(0,s.Wm)(D,{app:e.row},null,8,["app"])])),_:2},1024)])),_:2},1032,["props"])])),_:1},8,["rows","filter","pagination","no-data-label"]),(0,s._)("div",k,[(0,s.Wm)(f,{modelValue:r.value.page,"onUpdate:modelValue":t[3]||(t[3]=e=>r.value.page=e),color:"primary",max:i.value,size:"md"},null,8,["modelValue","max"])])],64)}}});var Z=a(84277),S=a(13119),P=a(22857),C=a(90136),T=a(31233),A=a(21682),I=a(67220),M=a(80996);const E=q,U=E;y()(q,"components",{QTable:Z.Z,QInput:S.Z,QIcon:P.Z,QSpace:C.Z,QTr:T.Z,QTh:A.Z,QTd:I.Z,QPagination:M.Z})}}]); \ No newline at end of file diff --git a/src/presentation/ui/dist/js/vendor.4543bc5f.js b/src/presentation/ui/dist/js/vendor.4543bc5f.js deleted file mode 100644 index 8fa39bf77..000000000 --- a/src/presentation/ui/dist/js/vendor.4543bc5f.js +++ /dev/null @@ -1,1221 +0,0 @@ -(self["webpackChunkos_dash"]=self["webpackChunkos_dash"]||[]).push([[736],{69984:e=>{e.exports=function(e,t,i){const n=void 0!==e.__vccOpts?e.__vccOpts:e,o=n[t];if(void 0===o)n[t]=i;else for(const s in i)void 0===o[s]&&(o[s]=i[s])}},60499:(e,t,i)=>{"use strict";i.d(t,{$y:()=>Oe,B:()=>r,BK:()=>nt,Bj:()=>s,EB:()=>c,Fl:()=>ct,IU:()=>He,Jd:()=>N,OT:()=>Ie,PG:()=>Pe,SU:()=>Ze,Tn:()=>Qe,Um:()=>Ae,Vh:()=>rt,WL:()=>et,X$:()=>I,X3:()=>Be,XI:()=>Ke,Xl:()=>We,YS:()=>Re,ZM:()=>it,cE:()=>S,dq:()=>$e,iH:()=>je,j:()=>T,lk:()=>D,nZ:()=>l,oR:()=>Xe,qj:()=>Te,qq:()=>x,sT:()=>k,yT:()=>Fe});var n=i(86970);let o;class s{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=o,!e&&o&&(this.index=(o.scopes||(o.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=o;try{return o=this,e()}finally{o=t}}else 0}on(){o=this}off(){o=this.parent}stop(e){if(this._active){let t,i;for(t=0,i=this.effects.length;t{const t=new Set(e);return t.w=0,t.n=0,t},u=e=>(e.w&v)>0,h=e=>(e.n&v)>0,g=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let i=0;for(let n=0;n{("length"===i||i>=e)&&l.push(t)}))}else switch(void 0!==i&&l.push(a.get(i)),t){case"add":(0,n.kJ)(e)?(0,n.S0)(i)&&l.push(a.get("length")):(l.push(a.get(y)),(0,n._N)(e)&&l.push(a.get(w)));break;case"delete":(0,n.kJ)(e)||(l.push(a.get(y)),(0,n._N)(e)&&l.push(a.get(w)));break;case"set":(0,n._N)(e)&&l.push(a.get(y));break}if(1===l.length)l[0]&&R(l[0]);else{const e=[];for(const t of l)t&&e.push(...t);R(d(e))}}function R(e,t){const i=(0,n.kJ)(e)?e:[...e];for(const n of i)n.computed&&M(n,t);for(const n of i)n.computed||M(n,t)}function M(e,t){(e!==b||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function P(e,t){var i;return null==(i=f.get(e))?void 0:i.get(t)}const O=(0,n.fY)("__proto__,__v_isRef,__isVue"),F=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(n.yk)),B=$(),H=$(!1,!0),W=$(!0),V=$(!0,!0),z=U();function U(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const i=He(this);for(let t=0,o=this.length;t{e[t]=function(...e){N();const i=He(this)[t].apply(this,e);return D(),i}})),e}function q(e){const t=He(this);return T(t,"has",e),t.hasOwnProperty(e)}function $(e=!1,t=!1){return function(i,o,s){if("__v_isReactive"===o)return!e;if("__v_isReadonly"===o)return e;if("__v_isShallow"===o)return t;if("__v_raw"===o&&s===(e?t?Ee:Le:t?ke:Se).get(i))return i;const r=(0,n.kJ)(i);if(!e){if(r&&(0,n.RI)(z,o))return Reflect.get(z,o,s);if("hasOwnProperty"===o)return q}const a=Reflect.get(i,o,s);return((0,n.yk)(o)?F.has(o):O(o))?a:(e||T(i,"get",o),t?a:$e(a)?r&&(0,n.S0)(o)?a:a.value:(0,n.Kn)(a)?e?Ie(a):Te(a):a)}}const j=G(),K=G(!0);function G(e=!1){return function(t,i,o,s){let r=t[i];if(Oe(r)&&$e(r)&&!$e(o))return!1;if(!e&&(Fe(o)||Oe(o)||(r=He(r),o=He(o)),!(0,n.kJ)(t)&&$e(r)&&!$e(o)))return r.value=o,!0;const a=(0,n.kJ)(t)&&(0,n.S0)(i)?Number(i)e,ne=e=>Reflect.getPrototypeOf(e);function oe(e,t,i=!1,n=!1){e=e["__v_raw"];const o=He(e),s=He(t);i||(t!==s&&T(o,"get",t),T(o,"get",s));const{has:r}=ne(o),a=n?ie:i?ze:Ve;return r.call(o,t)?a(e.get(t)):r.call(o,s)?a(e.get(s)):void(e!==o&&e.get(t))}function se(e,t=!1){const i=this["__v_raw"],n=He(i),o=He(e);return t||(e!==o&&T(n,"has",e),T(n,"has",o)),e===o?i.has(e):i.has(e)||i.has(o)}function re(e,t=!1){return e=e["__v_raw"],!t&&T(He(e),"iterate",y),Reflect.get(e,"size",e)}function ae(e){e=He(e);const t=He(this),i=ne(t),n=i.has.call(t,e);return n||(t.add(e),I(t,"add",e,e)),this}function le(e,t){t=He(t);const i=He(this),{has:o,get:s}=ne(i);let r=o.call(i,e);r||(e=He(e),r=o.call(i,e));const a=s.call(i,e);return i.set(e,t),r?(0,n.aU)(t,a)&&I(i,"set",e,t,a):I(i,"add",e,t),this}function ce(e){const t=He(this),{has:i,get:n}=ne(t);let o=i.call(t,e);o||(e=He(e),o=i.call(t,e));const s=n?n.call(t,e):void 0,r=t.delete(e);return o&&I(t,"delete",e,void 0,s),r}function de(){const e=He(this),t=0!==e.size,i=void 0,n=e.clear();return t&&I(e,"clear",void 0,void 0,i),n}function ue(e,t){return function(i,n){const o=this,s=o["__v_raw"],r=He(s),a=t?ie:e?ze:Ve;return!e&&T(r,"iterate",y),s.forEach(((e,t)=>i.call(n,a(e),a(t),o)))}}function he(e,t,i){return function(...o){const s=this["__v_raw"],r=He(s),a=(0,n._N)(r),l="entries"===e||e===Symbol.iterator&&a,c="keys"===e&&a,d=s[e](...o),u=i?ie:t?ze:Ve;return!t&&T(r,"iterate",c?w:y),{next(){const{value:e,done:t}=d.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}function ge(e){return function(...t){return"delete"!==e&&this}}function pe(){const e={get(e){return oe(this,e)},get size(){return re(this)},has:se,add:ae,set:le,delete:ce,clear:de,forEach:ue(!1,!1)},t={get(e){return oe(this,e,!1,!0)},get size(){return re(this)},has:se,add:ae,set:le,delete:ce,clear:de,forEach:ue(!1,!0)},i={get(e){return oe(this,e,!0)},get size(){return re(this,!0)},has(e){return se.call(this,e,!0)},add:ge("add"),set:ge("set"),delete:ge("delete"),clear:ge("clear"),forEach:ue(!0,!1)},n={get(e){return oe(this,e,!0,!0)},get size(){return re(this,!0)},has(e){return se.call(this,e,!0)},add:ge("add"),set:ge("set"),delete:ge("delete"),clear:ge("clear"),forEach:ue(!0,!0)},o=["keys","values","entries",Symbol.iterator];return o.forEach((o=>{e[o]=he(o,!1,!1),i[o]=he(o,!0,!1),t[o]=he(o,!1,!0),n[o]=he(o,!0,!0)})),[e,i,t,n]}const[fe,me,ve,_e]=pe();function be(e,t){const i=t?e?_e:ve:e?me:fe;return(t,o,s)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get((0,n.RI)(i,o)&&o in t?i:t,o,s)}const ye={get:be(!1,!1)},we={get:be(!1,!0)},xe={get:be(!0,!1)},Ce={get:be(!0,!0)};const Se=new WeakMap,ke=new WeakMap,Le=new WeakMap,Ee=new WeakMap;function Ne(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function De(e){return e["__v_skip"]||!Object.isExtensible(e)?0:Ne((0,n.W7)(e))}function Te(e){return Oe(e)?e:Me(e,!1,Q,ye,Se)}function Ae(e){return Me(e,!1,ee,we,ke)}function Ie(e){return Me(e,!0,J,xe,Le)}function Re(e){return Me(e,!0,te,Ce,Ee)}function Me(e,t,i,o,s){if(!(0,n.Kn)(e))return e;if(e["__v_raw"]&&(!t||!e["__v_isReactive"]))return e;const r=s.get(e);if(r)return r;const a=De(e);if(0===a)return e;const l=new Proxy(e,2===a?o:i);return s.set(e,l),l}function Pe(e){return Oe(e)?Pe(e["__v_raw"]):!(!e||!e["__v_isReactive"])}function Oe(e){return!(!e||!e["__v_isReadonly"])}function Fe(e){return!(!e||!e["__v_isShallow"])}function Be(e){return Pe(e)||Oe(e)}function He(e){const t=e&&e["__v_raw"];return t?He(t):e}function We(e){return(0,n.Nj)(e,"__v_skip",!0),e}const Ve=e=>(0,n.Kn)(e)?Te(e):e,ze=e=>(0,n.Kn)(e)?Ie(e):e;function Ue(e){L&&b&&(e=He(e),A(e.dep||(e.dep=d())))}function qe(e,t){e=He(e);const i=e.dep;i&&R(i)}function $e(e){return!(!e||!0!==e.__v_isRef)}function je(e){return Ge(e,!1)}function Ke(e){return Ge(e,!0)}function Ge(e,t){return $e(e)?e:new Ye(e,t)}class Ye{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:He(e),this._value=t?e:Ve(e)}get value(){return Ue(this),this._value}set value(e){const t=this.__v_isShallow||Fe(e)||Oe(e);e=t?e:He(e),(0,n.aU)(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Ve(e),qe(this,e))}}function Xe(e){qe(e,void 0)}function Ze(e){return $e(e)?e.value:e}function Qe(e){return(0,n.mf)(e)?e():Ze(e)}const Je={get:(e,t,i)=>Ze(Reflect.get(e,t,i)),set:(e,t,i,n)=>{const o=e[t];return $e(o)&&!$e(i)?(o.value=i,!0):Reflect.set(e,t,i,n)}};function et(e){return Pe(e)?e:new Proxy(e,Je)}class tt{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:t,set:i}=e((()=>Ue(this)),(()=>qe(this)));this._get=t,this._set=i}get value(){return this._get()}set value(e){this._set(e)}}function it(e){return new tt(e)}function nt(e){const t=(0,n.kJ)(e)?new Array(e.length):{};for(const i in e)t[i]=at(e,i);return t}class ot{constructor(e,t,i){this._object=e,this._key=t,this._defaultValue=i,this.__v_isRef=!0}get value(){const e=this._object[this._key];return void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return P(He(this._object),this._key)}}class st{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function rt(e,t,i){return $e(e)?e:(0,n.mf)(e)?new st(e):(0,n.Kn)(e)&&arguments.length>1?at(e,t,i):je(e)}function at(e,t,i){const n=e[t];return $e(n)?n:new ot(e,t,i)}class lt{constructor(e,t,i,n){this._setter=t,this.dep=void 0,this.__v_isRef=!0,this["__v_isReadonly"]=!1,this._dirty=!0,this.effect=new x(e,(()=>{this._dirty||(this._dirty=!0,qe(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!n,this["__v_isReadonly"]=i}get value(){const e=He(this);return Ue(e),!e._dirty&&e._cacheable||(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function ct(e,t,i=!1){let o,s;const r=(0,n.mf)(e);r?(o=e,s=n.dG):(o=e.get,s=e.set);const a=new lt(o,s,r||!s,i);return a}},59835:(e,t,i)=>{"use strict";i.d(t,{$d:()=>l,$y:()=>n.$y,Ah:()=>et,B:()=>n.B,BK:()=>n.BK,Bj:()=>n.Bj,Bz:()=>St,C3:()=>ln,C_:()=>o.C_,Cn:()=>z,EB:()=>n.EB,EM:()=>ri,Eo:()=>Ai,F4:()=>fn,FN:()=>Dn,Fl:()=>Xn,G:()=>so,Gn:()=>Nt,HX:()=>U,HY:()=>$i,Ho:()=>mn,IU:()=>n.IU,JJ:()=>oi,Jd:()=>Je,KU:()=>a,Ko:()=>gt,LL:()=>ct,MW:()=>Ct,MX:()=>to,Mr:()=>eo,Nv:()=>pt,OT:()=>n.OT,Ob:()=>He,P$:()=>Le,PG:()=>n.PG,Q2:()=>dt,Q6:()=>Ie,RC:()=>Pe,Rh:()=>he,Rr:()=>Tt,S3:()=>c,SU:()=>n.SU,Tn:()=>n.Tn,U2:()=>Ne,Uc:()=>Qn,Uk:()=>vn,Um:()=>n.Um,Us:()=>Ti,Vf:()=>Ot,Vh:()=>n.Vh,WI:()=>ft,WL:()=>n.WL,WY:()=>kt,Wl:()=>Et,Wm:()=>gn,Wu:()=>r,X3:()=>n.X3,XI:()=>n.XI,Xl:()=>n.Xl,Xn:()=>Ze,Y1:()=>zn,Y3:()=>y,Y8:()=>xe,YP:()=>fe,YS:()=>n.YS,Yq:()=>it,Yu:()=>Lt,ZK:()=>s,ZM:()=>n.ZM,Zq:()=>Jn,_:()=>hn,_A:()=>o._A,aZ:()=>Re,b9:()=>Dt,bT:()=>nt,bv:()=>Xe,cE:()=>n.cE,d1:()=>ot,dD:()=>V,dG:()=>Cn,dl:()=>Ve,dq:()=>n.dq,ec:()=>M,eq:()=>ro,f3:()=>si,h:()=>Zn,hR:()=>o.hR,i8:()=>no,iD:()=>on,iH:()=>n.iH,ic:()=>Qe,j4:()=>sn,j5:()=>o.j5,kC:()=>o.kC,kq:()=>bn,l1:()=>At,lA:()=>rn,lR:()=>Ui,m0:()=>ue,mW:()=>A,mv:()=>Bt,mx:()=>vt,n4:()=>ee,nJ:()=>Se,nK:()=>Ae,nQ:()=>io,nZ:()=>n.nZ,oR:()=>n.oR,of:()=>Un,p1:()=>Ft,qG:()=>Gi,qZ:()=>tn,qb:()=>k,qj:()=>n.qj,qq:()=>n.qq,ry:()=>ao,sT:()=>n.sT,se:()=>ze,sv:()=>Ki,tT:()=>It,uE:()=>_n,u_:()=>Pt,up:()=>at,vl:()=>tt,vs:()=>o.vs,w5:()=>q,wF:()=>Ye,wg:()=>Zi,wy:()=>ye,xv:()=>ji,yT:()=>n.yT,yX:()=>ge,zw:()=>o.zw});var n=i(60499),o=i(86970);function s(e,...t){}function r(e,t){}function a(e,t,i,n){let o;try{o=n?e(...n):e()}catch(s){c(s,t,i)}return o}function l(e,t,i,n){if((0,o.mf)(e)){const s=a(e,t,i,n);return s&&(0,o.tI)(s)&&s.catch((e=>{c(e,t,i)})),s}const s=[];for(let o=0;o>>1,o=N(g[n]);op&&g.splice(t,1)}function k(e){(0,o.kJ)(e)?f.push(...e):m&&m.includes(e,e.allowRecurse?v+1:v)||f.push(e),C()}function L(e,t=(u?p+1:0)){for(0;tN(e)-N(t))),v=0;vnull==e.id?1/0:e.id,D=(e,t)=>{const i=N(e)-N(t);if(0===i){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return i};function T(e){h=!1,u=!0,g.sort(D);o.dG;try{for(p=0;pA.emit(e,...t))),I=[];else if("undefined"!==typeof window&&window.HTMLElement&&!(null==(n=null==(i=window.navigator)?void 0:i.userAgent)?void 0:n.includes("jsdom"))){const e=t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[];e.push((e=>{M(e,t)})),setTimeout((()=>{A||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,R=!0,I=[])}),3e3)}else R=!0,I=[]}function P(e,t,...i){if(e.isUnmounted)return;const n=e.vnode.props||o.kT;let s=i;const r=t.startsWith("update:"),a=r&&t.slice(7);if(a&&a in n){const e=`${"modelValue"===a?"model":a}Modifiers`,{number:t,trim:r}=n[e]||o.kT;r&&(s=i.map((e=>(0,o.HD)(e)?e.trim():e))),t&&(s=i.map(o.h5))}let c;let d=n[c=(0,o.hR)(t)]||n[c=(0,o.hR)((0,o._A)(t))];!d&&r&&(d=n[c=(0,o.hR)((0,o.rs)(t))]),d&&l(d,e,6,s);const u=n[c+"Once"];if(u){if(e.emitted){if(e.emitted[c])return}else e.emitted={};e.emitted[c]=!0,l(u,e,6,s)}}function O(e,t,i=!1){const n=t.emitsCache,s=n.get(e);if(void 0!==s)return s;const r=e.emits;let a={},l=!1;if(!(0,o.mf)(e)){const n=e=>{const i=O(e,t,!0);i&&(l=!0,(0,o.l7)(a,i))};!i&&t.mixins.length&&t.mixins.forEach(n),e.extends&&n(e.extends),e.mixins&&e.mixins.forEach(n)}return r||l?((0,o.kJ)(r)?r.forEach((e=>a[e]=null)):(0,o.l7)(a,r),(0,o.Kn)(e)&&n.set(e,a),a):((0,o.Kn)(e)&&n.set(e,null),null)}function F(e,t){return!(!e||!(0,o.F7)(t))&&(t=t.slice(2).replace(/Once$/,""),(0,o.RI)(e,t[0].toLowerCase()+t.slice(1))||(0,o.RI)(e,(0,o.rs)(t))||(0,o.RI)(e,t))}let B=null,H=null;function W(e){const t=B;return B=e,H=e&&e.type.__scopeId||null,t}function V(e){H=e}function z(){H=null}const U=e=>q;function q(e,t=B,i){if(!t)return e;if(e._n)return e;const n=(...i)=>{n._d&&tn(-1);const o=W(t);let s;try{s=e(...i)}finally{W(o),n._d&&tn(1)}return s};return n._n=!0,n._c=!0,n._d=!0,n}function $(e){const{type:t,vnode:i,proxy:n,withProxy:s,props:r,propsOptions:[a],slots:l,attrs:d,emit:u,render:h,renderCache:g,data:p,setupState:f,ctx:m,inheritAttrs:v}=e;let _,b;const y=W(e);try{if(4&i.shapeFlag){const e=s||n;_=yn(h.call(e,e,g,r,f,p,m)),b=d}else{const e=t;0,_=yn(e.length>1?e(r,{attrs:d,slots:l,emit:u}):e(r,null)),b=t.props?d:K(d)}}catch(x){Yi.length=0,c(x,e,1),_=gn(Ki)}let w=_;if(b&&!1!==v){const e=Object.keys(b),{shapeFlag:t}=w;e.length&&7&t&&(a&&e.some(o.tR)&&(b=G(b,a)),w=mn(w,b))}return i.dirs&&(w=mn(w),w.dirs=w.dirs?w.dirs.concat(i.dirs):i.dirs),i.transition&&(w.transition=i.transition),_=w,W(y),_}function j(e){let t;for(let i=0;i{let t;for(const i in e)("class"===i||"style"===i||(0,o.F7)(i))&&((t||(t={}))[i]=e[i]);return t},G=(e,t)=>{const i={};for(const n in e)(0,o.tR)(n)&&n.slice(9)in t||(i[n]=e[n]);return i};function Y(e,t,i){const{props:n,children:o,component:s}=e,{props:r,children:a,patchFlag:l}=t,c=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(i&&l>=0))return!(!o&&!a||a&&a.$stable)||n!==r&&(n?!r||X(n,r,c):!!r);if(1024&l)return!0;if(16&l)return n?X(n,r,c):!!r;if(8&l){const e=t.dynamicProps;for(let t=0;te.__isSuspense,J={name:"Suspense",__isSuspense:!0,process(e,t,i,n,o,s,r,a,l,c){null==e?ie(t,i,n,o,s,r,a,l,c):ne(e,t,i,n,o,r,a,l,c)},hydrate:se,create:oe,normalize:re},ee=J;function te(e,t){const i=e.props&&e.props[t];(0,o.mf)(i)&&i()}function ie(e,t,i,n,o,s,r,a,l){const{p:c,o:{createElement:d}}=l,u=d("div"),h=e.suspense=oe(e,o,n,t,u,i,s,r,a,l);c(null,h.pendingBranch=e.ssContent,u,null,n,h,s,r),h.deps>0?(te(e,"onPending"),te(e,"onFallback"),c(null,e.ssFallback,t,i,n,null,s,r),ce(h,e.ssFallback)):h.resolve(!1,!0)}function ne(e,t,i,n,o,s,r,a,{p:l,um:c,o:{createElement:d}}){const u=t.suspense=e.suspense;u.vnode=t,t.el=e.el;const h=t.ssContent,g=t.ssFallback,{activeBranch:p,pendingBranch:f,isInFallback:m,isHydrating:v}=u;if(f)u.pendingBranch=h,an(h,f)?(l(f,h,u.hiddenContainer,null,o,u,s,r,a),u.deps<=0?u.resolve():m&&(l(p,g,i,n,o,null,s,r,a),ce(u,g))):(u.pendingId++,v?(u.isHydrating=!1,u.activeBranch=f):c(f,o,u),u.deps=0,u.effects.length=0,u.hiddenContainer=d("div"),m?(l(null,h,u.hiddenContainer,null,o,u,s,r,a),u.deps<=0?u.resolve():(l(p,g,i,n,o,null,s,r,a),ce(u,g))):p&&an(h,p)?(l(p,h,i,n,o,u,s,r,a),u.resolve(!0)):(l(null,h,u.hiddenContainer,null,o,u,s,r,a),u.deps<=0&&u.resolve()));else if(p&&an(h,p))l(p,h,i,n,o,u,s,r,a),ce(u,h);else if(te(t,"onPending"),u.pendingBranch=h,u.pendingId++,l(null,h,u.hiddenContainer,null,o,u,s,r,a),u.deps<=0)u.resolve();else{const{timeout:e,pendingId:t}=u;e>0?setTimeout((()=>{u.pendingId===t&&u.fallback(g)}),e):0===e&&u.fallback(g)}}function oe(e,t,i,n,s,r,a,l,d,u,h=!1){const{p:g,m:p,um:f,n:m,o:{parentNode:v,remove:_}}=u;let b;const y=de(e);y&&(null==t?void 0:t.pendingBranch)&&(b=t.pendingId,t.deps++);const w=e.props?(0,o.He)(e.props.timeout):void 0;const x={vnode:e,parent:t,parentComponent:i,isSVG:a,container:n,hiddenContainer:s,anchor:r,deps:0,pendingId:0,timeout:"number"===typeof w?w:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:h,isUnmounted:!1,effects:[],resolve(e=!1,i=!1){const{vnode:n,activeBranch:o,pendingBranch:s,pendingId:r,effects:a,parentComponent:l,container:c}=x;if(x.isHydrating)x.isHydrating=!1;else if(!e){const e=o&&s.transition&&"out-in"===s.transition.mode;e&&(o.transition.afterLeave=()=>{r===x.pendingId&&p(s,c,t,0)});let{anchor:t}=x;o&&(t=m(o),f(o,l,x,!0)),e||p(s,c,t,0)}ce(x,s),x.pendingBranch=null,x.isInFallback=!1;let d=x.parent,u=!1;while(d){if(d.pendingBranch){d.effects.push(...a),u=!0;break}d=d.parent}u||k(a),x.effects=[],y&&t&&t.pendingBranch&&b===t.pendingId&&(t.deps--,0!==t.deps||i||t.resolve()),te(n,"onResolve")},fallback(e){if(!x.pendingBranch)return;const{vnode:t,activeBranch:i,parentComponent:n,container:o,isSVG:s}=x;te(t,"onFallback");const r=m(i),a=()=>{x.isInFallback&&(g(null,e,o,r,n,null,s,l,d),ce(x,e))},c=e.transition&&"out-in"===e.transition.mode;c&&(i.transition.afterLeave=a),x.isInFallback=!0,f(i,n,null,!0),c||a()},move(e,t,i){x.activeBranch&&p(x.activeBranch,e,t,i),x.container=e},next(){return x.activeBranch&&m(x.activeBranch)},registerDep(e,t){const i=!!x.pendingBranch;i&&x.deps++;const n=e.vnode.el;e.asyncDep.catch((t=>{c(t,e,0)})).then((o=>{if(e.isUnmounted||x.isUnmounted||x.pendingId!==e.suspenseId)return;e.asyncResolved=!0;const{vnode:s}=e;Vn(e,o,!1),n&&(s.el=n);const r=!n&&e.subTree.el;t(e,s,v(n||e.subTree.el),n?null:m(e.subTree),x,a,d),r&&_(r),Z(e,s.el),i&&0===--x.deps&&x.resolve()}))},unmount(e,t){x.isUnmounted=!0,x.activeBranch&&f(x.activeBranch,i,e,t),x.pendingBranch&&f(x.pendingBranch,i,e,t)}};return x}function se(e,t,i,n,o,s,r,a,l){const c=t.suspense=oe(t,n,i,e.parentNode,document.createElement("div"),null,o,s,r,a,!0),d=l(e,c.pendingBranch=t.ssContent,i,c,s,r);return 0===c.deps&&c.resolve(!1,!0),d}function re(e){const{shapeFlag:t,children:i}=e,n=32&t;e.ssContent=ae(n?i.default:i),e.ssFallback=n?ae(i.fallback):gn(Ki)}function ae(e){let t;if((0,o.mf)(e)){const i=en&&e._c;i&&(e._d=!1,Zi()),e=e(),i&&(e._d=!0,t=Xi,Qi())}if((0,o.kJ)(e)){const t=j(e);0,e=t}return e=yn(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter((t=>t!==e))),e}function le(e,t){t&&t.pendingBranch?(0,o.kJ)(e)?t.effects.push(...e):t.effects.push(e):k(e)}function ce(e,t){e.activeBranch=t;const{vnode:i,parentComponent:n}=e,o=i.el=t.el;n&&n.subTree===i&&(n.vnode.el=o,Z(n,o))}function de(e){var t;return null!=(null==(t=e.props)?void 0:t.suspensible)&&!1!==e.props.suspensible}function ue(e,t){return me(e,null,t)}function he(e,t){return me(e,null,{flush:"post"})}function ge(e,t){return me(e,null,{flush:"sync"})}const pe={};function fe(e,t,i){return me(e,t,i)}function me(e,t,{immediate:i,deep:s,flush:r,onTrack:c,onTrigger:d}=o.kT){var u;const h=(0,n.nZ)()===(null==(u=Nn)?void 0:u.scope)?Nn:null;let g,p,f=!1,m=!1;if((0,n.dq)(e)?(g=()=>e.value,f=(0,n.yT)(e)):(0,n.PG)(e)?(g=()=>e,s=!0):(0,o.kJ)(e)?(m=!0,f=e.some((e=>(0,n.PG)(e)||(0,n.yT)(e))),g=()=>e.map((e=>(0,n.dq)(e)?e.value:(0,n.PG)(e)?be(e):(0,o.mf)(e)?a(e,h,2):void 0))):g=(0,o.mf)(e)?t?()=>a(e,h,2):()=>{if(!h||!h.isUnmounted)return p&&p(),l(e,h,3,[_])}:o.dG,t&&s){const e=g;g=()=>be(e())}let v,_=e=>{p=C.onStop=()=>{a(e,h,4)}};if(Bn){if(_=o.dG,t?i&&l(t,h,3,[g(),m?[]:void 0,_]):g(),"sync"!==r)return o.dG;{const e=Jn();v=e.__watcherHandles||(e.__watcherHandles=[])}}let b=m?new Array(e.length).fill(pe):pe;const y=()=>{if(C.active)if(t){const e=C.run();(s||f||(m?e.some(((e,t)=>(0,o.aU)(e,b[t]))):(0,o.aU)(e,b)))&&(p&&p(),l(t,h,3,[e,b===pe?void 0:m&&b[0]===pe?[]:b,_]),b=e)}else C.run()};let w;y.allowRecurse=!!t,"sync"===r?w=y:"post"===r?w=()=>Di(y,h&&h.suspense):(y.pre=!0,h&&(y.id=h.uid),w=()=>x(y));const C=new n.qq(g,w);t?i?y():b=C.run():"post"===r?Di(C.run.bind(C),h&&h.suspense):C.run();const S=()=>{C.stop(),h&&h.scope&&(0,o.Od)(h.scope.effects,C)};return v&&v.push(S),S}function ve(e,t,i){const n=this.proxy,s=(0,o.HD)(e)?e.includes(".")?_e(n,e):()=>n[e]:e.bind(n,n);let r;(0,o.mf)(t)?r=t:(r=t.handler,i=t);const a=Nn;Rn(this);const l=me(s,r.bind(n),i);return a?Rn(a):Mn(),l}function _e(e,t){const i=t.split(".");return()=>{let t=e;for(let e=0;e{be(e,t)}));else if((0,o.PO)(e))for(const i in e)be(e[i],t);return e}function ye(e,t){const i=B;if(null===i)return e;const n=Kn(i)||i.proxy,s=e.dirs||(e.dirs=[]);for(let r=0;r{e.isMounted=!0})),Je((()=>{e.isUnmounting=!0})),e}const Ce=[Function,Array],Se={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ce,onEnter:Ce,onAfterEnter:Ce,onEnterCancelled:Ce,onBeforeLeave:Ce,onLeave:Ce,onAfterLeave:Ce,onLeaveCancelled:Ce,onBeforeAppear:Ce,onAppear:Ce,onAfterAppear:Ce,onAppearCancelled:Ce},ke={name:"BaseTransition",props:Se,setup(e,{slots:t}){const i=Dn(),o=xe();let s;return()=>{const r=t.default&&Ie(t.default(),!0);if(!r||!r.length)return;let a=r[0];if(r.length>1){let e=!1;for(const t of r)if(t.type!==Ki){0,a=t,e=!0;break}}const l=(0,n.IU)(e),{mode:c}=l;if(o.isLeaving)return De(a);const d=Te(a);if(!d)return De(a);const u=Ne(d,l,o,i);Ae(d,u);const h=i.subTree,g=h&&Te(h);let p=!1;const{getTransitionKey:f}=d.type;if(f){const e=f();void 0===s?s=e:e!==s&&(s=e,p=!0)}if(g&&g.type!==Ki&&(!an(d,g)||p)){const e=Ne(g,l,o,i);if(Ae(g,e),"out-in"===c)return o.isLeaving=!0,e.afterLeave=()=>{o.isLeaving=!1,!1!==i.update.active&&i.update()},De(a);"in-out"===c&&d.type!==Ki&&(e.delayLeave=(e,t,i)=>{const n=Ee(o,g);n[String(g.key)]=g,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=i})}return a}}},Le=ke;function Ee(e,t){const{leavingVNodes:i}=e;let n=i.get(t.type);return n||(n=Object.create(null),i.set(t.type,n)),n}function Ne(e,t,i,n){const{appear:s,mode:r,persisted:a=!1,onBeforeEnter:c,onEnter:d,onAfterEnter:u,onEnterCancelled:h,onBeforeLeave:g,onLeave:p,onAfterLeave:f,onLeaveCancelled:m,onBeforeAppear:v,onAppear:_,onAfterAppear:b,onAppearCancelled:y}=t,w=String(e.key),x=Ee(i,e),C=(e,t)=>{e&&l(e,n,9,t)},S=(e,t)=>{const i=t[1];C(e,t),(0,o.kJ)(e)?e.every((e=>e.length<=1))&&i():e.length<=1&&i()},k={mode:r,persisted:a,beforeEnter(t){let n=c;if(!i.isMounted){if(!s)return;n=v||c}t._leaveCb&&t._leaveCb(!0);const o=x[w];o&&an(e,o)&&o.el._leaveCb&&o.el._leaveCb(),C(n,[t])},enter(e){let t=d,n=u,o=h;if(!i.isMounted){if(!s)return;t=_||d,n=b||u,o=y||h}let r=!1;const a=e._enterCb=t=>{r||(r=!0,C(t?o:n,[e]),k.delayedLeave&&k.delayedLeave(),e._enterCb=void 0)};t?S(t,[e,a]):a()},leave(t,n){const o=String(e.key);if(t._enterCb&&t._enterCb(!0),i.isUnmounting)return n();C(g,[t]);let s=!1;const r=t._leaveCb=i=>{s||(s=!0,n(),C(i?m:f,[t]),t._leaveCb=void 0,x[o]===e&&delete x[o])};x[o]=e,p?S(p,[t,r]):r()},clone(e){return Ne(e,t,i,n)}};return k}function De(e){if(Fe(e))return e=mn(e),e.children=null,e}function Te(e){return Fe(e)?e.children?e.children[0]:void 0:e}function Ae(e,t){6&e.shapeFlag&&e.component?Ae(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ie(e,t=!1,i){let n=[],o=0;for(let s=0;s1)for(let s=0;s(0,o.l7)({name:e.name},t,{setup:e}))():e}const Me=e=>!!e.type.__asyncLoader;function Pe(e){(0,o.mf)(e)&&(e={loader:e});const{loader:t,loadingComponent:i,errorComponent:s,delay:r=200,timeout:a,suspensible:l=!0,onError:d}=e;let u,h=null,g=0;const p=()=>(g++,h=null,f()),f=()=>{let e;return h||(e=h=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),d)return new Promise(((t,i)=>{const n=()=>t(p()),o=()=>i(e);d(e,n,o,g+1)}));throw e})).then((t=>e!==h&&h?h:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),u=t,t))))};return Re({name:"AsyncComponentWrapper",__asyncLoader:f,get __asyncResolved(){return u},setup(){const e=Nn;if(u)return()=>Oe(u,e);const t=t=>{h=null,c(t,e,13,!s)};if(l&&e.suspense||Bn)return f().then((t=>()=>Oe(t,e))).catch((e=>(t(e),()=>s?gn(s,{error:e}):null)));const o=(0,n.iH)(!1),d=(0,n.iH)(),g=(0,n.iH)(!!r);return r&&setTimeout((()=>{g.value=!1}),r),null!=a&&setTimeout((()=>{if(!o.value&&!d.value){const e=new Error(`Async component timed out after ${a}ms.`);t(e),d.value=e}}),a),f().then((()=>{o.value=!0,e.parent&&Fe(e.parent.vnode)&&x(e.parent.update)})).catch((e=>{t(e),d.value=e})),()=>o.value&&u?Oe(u,e):d.value&&s?gn(s,{error:d.value}):i&&!g.value?gn(i):void 0}})}function Oe(e,t){const{ref:i,props:n,children:o,ce:s}=t.vnode,r=gn(e,n,o);return r.ref=i,r.ce=s,delete t.vnode.ce,r}const Fe=e=>e.type.__isKeepAlive,Be={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const i=Dn(),n=i.ctx;if(!n.renderer)return()=>{const e=t.default&&t.default();return e&&1===e.length?e[0]:e};const s=new Map,r=new Set;let a=null;const l=i.suspense,{renderer:{p:c,m:d,um:u,o:{createElement:h}}}=n,g=h("div");function p(e){$e(e),u(e,i,l,!0)}function f(e){s.forEach(((t,i)=>{const n=Gn(t.type);!n||e&&e(n)||m(i)}))}function m(e){const t=s.get(e);a&&an(t,a)?a&&$e(a):p(t),s.delete(e),r.delete(e)}n.activate=(e,t,i,n,s)=>{const r=e.component;d(e,t,i,0,l),c(r.vnode,e,t,i,r,l,n,e.slotScopeIds,s),Di((()=>{r.isDeactivated=!1,r.a&&(0,o.ir)(r.a);const t=e.props&&e.props.onVnodeMounted;t&&Sn(t,r.parent,e)}),l)},n.deactivate=e=>{const t=e.component;d(e,g,null,1,l),Di((()=>{t.da&&(0,o.ir)(t.da);const i=e.props&&e.props.onVnodeUnmounted;i&&Sn(i,t.parent,e),t.isDeactivated=!0}),l)},fe((()=>[e.include,e.exclude]),(([e,t])=>{e&&f((t=>We(e,t))),t&&f((e=>!We(t,e)))}),{flush:"post",deep:!0});let v=null;const _=()=>{null!=v&&s.set(v,je(i.subTree))};return Xe(_),Qe(_),Je((()=>{s.forEach((e=>{const{subTree:t,suspense:n}=i,o=je(t);if(e.type!==o.type||e.key!==o.key)p(e);else{$e(o);const e=o.component.da;e&&Di(e,n)}}))})),()=>{if(v=null,!t.default)return null;const i=t.default(),n=i[0];if(i.length>1)return a=null,i;if(!rn(n)||!(4&n.shapeFlag)&&!(128&n.shapeFlag))return a=null,n;let o=je(n);const l=o.type,c=Gn(Me(o)?o.type.__asyncResolved||{}:l),{include:d,exclude:u,max:h}=e;if(d&&(!c||!We(d,c))||u&&c&&We(u,c))return a=o,n;const g=null==o.key?l:o.key,p=s.get(g);return o.el&&(o=mn(o),128&n.shapeFlag&&(n.ssContent=o)),v=g,p?(o.el=p.el,o.component=p.component,o.transition&&Ae(o,o.transition),o.shapeFlag|=512,r.delete(g),r.add(g)):(r.add(g),h&&r.size>parseInt(h,10)&&m(r.values().next().value)),o.shapeFlag|=256,a=o,Q(n.type)?n:o}}},He=Be;function We(e,t){return(0,o.kJ)(e)?e.some((e=>We(e,t))):(0,o.HD)(e)?e.split(",").includes(t):!!(0,o.Kj)(e)&&e.test(t)}function Ve(e,t){Ue(e,"a",t)}function ze(e,t){Ue(e,"da",t)}function Ue(e,t,i=Nn){const n=e.__wdc||(e.__wdc=()=>{let t=i;while(t){if(t.isDeactivated)return;t=t.parent}return e()});if(Ke(t,n,i),i){let e=i.parent;while(e&&e.parent)Fe(e.parent.vnode)&&qe(n,t,i,e),e=e.parent}}function qe(e,t,i,n){const s=Ke(t,e,n,!0);et((()=>{(0,o.Od)(n[t],s)}),i)}function $e(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function je(e){return 128&e.shapeFlag?e.ssContent:e}function Ke(e,t,i=Nn,o=!1){if(i){const s=i[e]||(i[e]=[]),r=t.__weh||(t.__weh=(...o)=>{if(i.isUnmounted)return;(0,n.Jd)(),Rn(i);const s=l(t,i,e,o);return Mn(),(0,n.lk)(),s});return o?s.unshift(r):s.push(r),r}}const Ge=e=>(t,i=Nn)=>(!Bn||"sp"===e)&&Ke(e,((...e)=>t(...e)),i),Ye=Ge("bm"),Xe=Ge("m"),Ze=Ge("bu"),Qe=Ge("u"),Je=Ge("bum"),et=Ge("um"),tt=Ge("sp"),it=Ge("rtg"),nt=Ge("rtc");function ot(e,t=Nn){Ke("ec",e,t)}const st="components",rt="directives";function at(e,t){return ut(st,e,!0,t)||e}const lt=Symbol.for("v-ndc");function ct(e){return(0,o.HD)(e)?ut(st,e,!1)||e:e||lt}function dt(e){return ut(rt,e)}function ut(e,t,i=!0,n=!1){const s=B||Nn;if(s){const i=s.type;if(e===st){const e=Gn(i,!1);if(e&&(e===t||e===(0,o._A)(t)||e===(0,o.kC)((0,o._A)(t))))return i}const r=ht(s[e]||i[e],t)||ht(s.appContext[e],t);return!r&&n?i:r}}function ht(e,t){return e&&(e[t]||e[(0,o._A)(t)]||e[(0,o.kC)((0,o._A)(t))])}function gt(e,t,i,n){let s;const r=i&&i[n];if((0,o.kJ)(e)||(0,o.HD)(e)){s=new Array(e.length);for(let i=0,n=e.length;it(e,i,void 0,r&&r[i])));else{const i=Object.keys(e);s=new Array(i.length);for(let n=0,o=i.length;n{const t=n.fn(...e);return t&&(t.key=n.key),t}:n.fn)}return e}function ft(e,t,i={},n,o){if(B.isCE||B.parent&&Me(B.parent)&&B.parent.isCE)return"default"!==t&&(i.name=t),gn("slot",i,n&&n());let s=e[t];s&&s._c&&(s._d=!1),Zi();const r=s&&mt(s(i)),a=sn($i,{key:i.key||r&&r.key||`_${t}`},r||(n?n():[]),r&&1===e._?64:-2);return!o&&a.scopeId&&(a.slotScopeIds=[a.scopeId+"-s"]),s&&s._c&&(s._d=!0),a}function mt(e){return e.some((e=>!rn(e)||e.type!==Ki&&!(e.type===$i&&!mt(e.children))))?e:null}function vt(e,t){const i={};for(const n in e)i[t&&/[A-Z]/.test(n)?`on:${n}`:(0,o.hR)(n)]=e[n];return i}const _t=e=>e?Pn(e)?Kn(e)||e.proxy:_t(e.parent):null,bt=(0,o.l7)(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>_t(e.parent),$root:e=>_t(e.root),$emit:e=>e.emit,$options:e=>qt(e),$forceUpdate:e=>e.f||(e.f=()=>x(e.update)),$nextTick:e=>e.n||(e.n=y.bind(e.proxy)),$watch:e=>ve.bind(e)}),yt=(e,t)=>e!==o.kT&&!e.__isScriptSetup&&(0,o.RI)(e,t),wt={get({_:e},t){const{ctx:i,setupState:s,data:r,props:a,accessCache:l,type:c,appContext:d}=e;let u;if("$"!==t[0]){const n=l[t];if(void 0!==n)switch(n){case 1:return s[t];case 2:return r[t];case 4:return i[t];case 3:return a[t]}else{if(yt(s,t))return l[t]=1,s[t];if(r!==o.kT&&(0,o.RI)(r,t))return l[t]=2,r[t];if((u=e.propsOptions[0])&&(0,o.RI)(u,t))return l[t]=3,a[t];if(i!==o.kT&&(0,o.RI)(i,t))return l[t]=4,i[t];Ht&&(l[t]=0)}}const h=bt[t];let g,p;return h?("$attrs"===t&&(0,n.j)(e,"get",t),h(e)):(g=c.__cssModules)&&(g=g[t])?g:i!==o.kT&&(0,o.RI)(i,t)?(l[t]=4,i[t]):(p=d.config.globalProperties,(0,o.RI)(p,t)?p[t]:void 0)},set({_:e},t,i){const{data:n,setupState:s,ctx:r}=e;return yt(s,t)?(s[t]=i,!0):n!==o.kT&&(0,o.RI)(n,t)?(n[t]=i,!0):!(0,o.RI)(e.props,t)&&(("$"!==t[0]||!(t.slice(1)in e))&&(r[t]=i,!0))},has({_:{data:e,setupState:t,accessCache:i,ctx:n,appContext:s,propsOptions:r}},a){let l;return!!i[a]||e!==o.kT&&(0,o.RI)(e,a)||yt(t,a)||(l=r[0])&&(0,o.RI)(l,a)||(0,o.RI)(n,a)||(0,o.RI)(bt,a)||(0,o.RI)(s.config.globalProperties,a)},defineProperty(e,t,i){return null!=i.get?e._.accessCache[t]=0:(0,o.RI)(i,"value")&&this.set(e,t,i.value,null),Reflect.defineProperty(e,t,i)}};const xt=(0,o.l7)({},wt,{get(e,t){if(t!==Symbol.unscopables)return wt.get(e,t,e)},has(e,t){const i="_"!==t[0]&&!(0,o.e1)(t);return i}});function Ct(){return null}function St(){return null}function kt(e){0}function Lt(e){0}function Et(){return null}function Nt(){0}function Dt(e,t){return null}function Tt(){return Rt().slots}function At(){return Rt().attrs}function It(e,t,i){const o=Dn();if(i&&i.local){const i=(0,n.iH)(e[t]);return fe((()=>e[t]),(e=>i.value=e)),fe(i,(i=>{i!==e[t]&&o.emit(`update:${t}`,i)})),i}return{__v_isRef:!0,get value(){return e[t]},set value(e){o.emit(`update:${t}`,e)}}}function Rt(){const e=Dn();return e.setupContext||(e.setupContext=jn(e))}function Mt(e){return(0,o.kJ)(e)?e.reduce(((e,t)=>(e[t]=null,e)),{}):e}function Pt(e,t){const i=Mt(e);for(const n in t){if(n.startsWith("__skip"))continue;let e=i[n];e?(0,o.kJ)(e)||(0,o.mf)(e)?e=i[n]={type:e,default:t[n]}:e.default=t[n]:null===e&&(e=i[n]={default:t[n]}),e&&t[`__skip_${n}`]&&(e.skipFactory=!0)}return i}function Ot(e,t){return e&&t?(0,o.kJ)(e)&&(0,o.kJ)(t)?e.concat(t):(0,o.l7)({},Mt(e),Mt(t)):e||t}function Ft(e,t){const i={};for(const n in e)t.includes(n)||Object.defineProperty(i,n,{enumerable:!0,get:()=>e[n]});return i}function Bt(e){const t=Dn();let i=e();return Mn(),(0,o.tI)(i)&&(i=i.catch((e=>{throw Rn(t),e}))),[i,()=>Rn(t)]}let Ht=!0;function Wt(e){const t=qt(e),i=e.proxy,s=e.ctx;Ht=!1,t.beforeCreate&&zt(t.beforeCreate,e,"bc");const{data:r,computed:a,methods:l,watch:c,provide:d,inject:u,created:h,beforeMount:g,mounted:p,beforeUpdate:f,updated:m,activated:v,deactivated:_,beforeDestroy:b,beforeUnmount:y,destroyed:w,unmounted:x,render:C,renderTracked:S,renderTriggered:k,errorCaptured:L,serverPrefetch:E,expose:N,inheritAttrs:D,components:T,directives:A,filters:I}=t,R=null;if(u&&Vt(u,s,R),l)for(const n in l){const e=l[n];(0,o.mf)(e)&&(s[n]=e.bind(i))}if(r){0;const t=r.call(i,i);0,(0,o.Kn)(t)&&(e.data=(0,n.qj)(t))}if(Ht=!0,a)for(const n in a){const e=a[n],t=(0,o.mf)(e)?e.bind(i,i):(0,o.mf)(e.get)?e.get.bind(i,i):o.dG;0;const r=!(0,o.mf)(e)&&(0,o.mf)(e.set)?e.set.bind(i):o.dG,l=Xn({get:t,set:r});Object.defineProperty(s,n,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e})}if(c)for(const n in c)Ut(c[n],s,i,n);if(d){const e=(0,o.mf)(d)?d.call(i):d;Reflect.ownKeys(e).forEach((t=>{oi(t,e[t])}))}function M(e,t){(0,o.kJ)(t)?t.forEach((t=>e(t.bind(i)))):t&&e(t.bind(i))}if(h&&zt(h,e,"c"),M(Ye,g),M(Xe,p),M(Ze,f),M(Qe,m),M(Ve,v),M(ze,_),M(ot,L),M(nt,S),M(it,k),M(Je,y),M(et,x),M(tt,E),(0,o.kJ)(N))if(N.length){const t=e.exposed||(e.exposed={});N.forEach((e=>{Object.defineProperty(t,e,{get:()=>i[e],set:t=>i[e]=t})}))}else e.exposed||(e.exposed={});C&&e.render===o.dG&&(e.render=C),null!=D&&(e.inheritAttrs=D),T&&(e.components=T),A&&(e.directives=A)}function Vt(e,t,i=o.dG){(0,o.kJ)(e)&&(e=Yt(e));for(const s in e){const i=e[s];let r;r=(0,o.Kn)(i)?"default"in i?si(i.from||s,i.default,!0):si(i.from||s):si(i),(0,n.dq)(r)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>r.value,set:e=>r.value=e}):t[s]=r}}function zt(e,t,i){l((0,o.kJ)(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,i)}function Ut(e,t,i,n){const s=n.includes(".")?_e(i,n):()=>i[n];if((0,o.HD)(e)){const i=t[e];(0,o.mf)(i)&&fe(s,i)}else if((0,o.mf)(e))fe(s,e.bind(i));else if((0,o.Kn)(e))if((0,o.kJ)(e))e.forEach((e=>Ut(e,t,i,n)));else{const n=(0,o.mf)(e.handler)?e.handler.bind(i):t[e.handler];(0,o.mf)(n)&&fe(s,n,e)}else 0}function qt(e){const t=e.type,{mixins:i,extends:n}=t,{mixins:s,optionsCache:r,config:{optionMergeStrategies:a}}=e.appContext,l=r.get(t);let c;return l?c=l:s.length||i||n?(c={},s.length&&s.forEach((e=>$t(c,e,a,!0))),$t(c,t,a)):c=t,(0,o.Kn)(t)&&r.set(t,c),c}function $t(e,t,i,n=!1){const{mixins:o,extends:s}=t;s&&$t(e,s,i,!0),o&&o.forEach((t=>$t(e,t,i,!0)));for(const r in t)if(n&&"expose"===r);else{const n=jt[r]||i&&i[r];e[r]=n?n(e[r],t[r]):t[r]}return e}const jt={data:Kt,props:Qt,emits:Qt,methods:Zt,computed:Zt,beforeCreate:Xt,created:Xt,beforeMount:Xt,mounted:Xt,beforeUpdate:Xt,updated:Xt,beforeDestroy:Xt,beforeUnmount:Xt,destroyed:Xt,unmounted:Xt,activated:Xt,deactivated:Xt,errorCaptured:Xt,serverPrefetch:Xt,components:Zt,directives:Zt,watch:Jt,provide:Kt,inject:Gt};function Kt(e,t){return t?e?function(){return(0,o.l7)((0,o.mf)(e)?e.call(this,this):e,(0,o.mf)(t)?t.call(this,this):t)}:t:e}function Gt(e,t){return Zt(Yt(e),Yt(t))}function Yt(e){if((0,o.kJ)(e)){const t={};for(let i=0;i1)return i&&(0,o.mf)(t)?t.call(n&&n.proxy):t}else 0}function ri(){return!!(Nn||B||ni)}function ai(e,t,i,s=!1){const r={},a={};(0,o.Nj)(a,cn,1),e.propsDefaults=Object.create(null),ci(e,t,r,a);for(const n in e.propsOptions[0])n in r||(r[n]=void 0);i?e.props=s?r:(0,n.Um)(r):e.type.props?e.props=r:e.props=a,e.attrs=a}function li(e,t,i,s){const{props:r,attrs:a,vnode:{patchFlag:l}}=e,c=(0,n.IU)(r),[d]=e.propsOptions;let u=!1;if(!(s||l>0)||16&l){let n;ci(e,t,r,a)&&(u=!0);for(const s in c)t&&((0,o.RI)(t,s)||(n=(0,o.rs)(s))!==s&&(0,o.RI)(t,n))||(d?!i||void 0===i[s]&&void 0===i[n]||(r[s]=di(d,c,s,void 0,e,!0)):delete r[s]);if(a!==c)for(const e in a)t&&(0,o.RI)(t,e)||(delete a[e],u=!0)}else if(8&l){const i=e.vnode.dynamicProps;for(let n=0;n{c=!0;const[i,n]=ui(e,t,!0);(0,o.l7)(a,i),n&&l.push(...n)};!i&&t.mixins.length&&t.mixins.forEach(n),e.extends&&n(e.extends),e.mixins&&e.mixins.forEach(n)}if(!r&&!c)return(0,o.Kn)(e)&&n.set(e,o.Z6),o.Z6;if((0,o.kJ)(r))for(let u=0;u-1,n[1]=i<0||e-1||(0,o.RI)(n,"default"))&&l.push(t)}}}}const d=[a,l];return(0,o.Kn)(e)&&n.set(e,d),d}function hi(e){return"$"!==e[0]}function gi(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:null===e?"null":""}function pi(e,t){return gi(e)===gi(t)}function fi(e,t){return(0,o.kJ)(t)?t.findIndex((t=>pi(t,e))):(0,o.mf)(t)&&pi(t,e)?0:-1}const mi=e=>"_"===e[0]||"$stable"===e,vi=e=>(0,o.kJ)(e)?e.map(yn):[yn(e)],_i=(e,t,i)=>{if(t._n)return t;const n=q(((...e)=>vi(t(...e))),i);return n._c=!1,n},bi=(e,t,i)=>{const n=e._ctx;for(const s in e){if(mi(s))continue;const i=e[s];if((0,o.mf)(i))t[s]=_i(s,i,n);else if(null!=i){0;const e=vi(i);t[s]=()=>e}}},yi=(e,t)=>{const i=vi(t);e.slots.default=()=>i},wi=(e,t)=>{if(32&e.vnode.shapeFlag){const i=t._;i?(e.slots=(0,n.IU)(t),(0,o.Nj)(t,"_",i)):bi(t,e.slots={})}else e.slots={},t&&yi(e,t);(0,o.Nj)(e.slots,cn,1)},xi=(e,t,i)=>{const{vnode:n,slots:s}=e;let r=!0,a=o.kT;if(32&n.shapeFlag){const e=t._;e?i&&1===e?r=!1:((0,o.l7)(s,t),i||1!==e||delete s._):(r=!t.$stable,bi(t,s)),a=t}else t&&(yi(e,t),a={default:1});if(r)for(const o in s)mi(o)||o in a||delete s[o]};function Ci(e,t,i,s,r=!1){if((0,o.kJ)(e))return void e.forEach(((e,n)=>Ci(e,t&&((0,o.kJ)(t)?t[n]:t),i,s,r)));if(Me(s)&&!r)return;const l=4&s.shapeFlag?Kn(s.component)||s.component.proxy:s.el,c=r?null:l,{i:d,r:u}=e;const h=t&&t.r,g=d.refs===o.kT?d.refs={}:d.refs,p=d.setupState;if(null!=h&&h!==u&&((0,o.HD)(h)?(g[h]=null,(0,o.RI)(p,h)&&(p[h]=null)):(0,n.dq)(h)&&(h.value=null)),(0,o.mf)(u))a(u,d,12,[c,g]);else{const t=(0,o.HD)(u),s=(0,n.dq)(u);if(t||s){const n=()=>{if(e.f){const i=t?(0,o.RI)(p,u)?p[u]:g[u]:u.value;r?(0,o.kJ)(i)&&(0,o.Od)(i,l):(0,o.kJ)(i)?i.includes(l)||i.push(l):t?(g[u]=[l],(0,o.RI)(p,u)&&(p[u]=g[u])):(u.value=[l],e.k&&(g[e.k]=u.value))}else t?(g[u]=c,(0,o.RI)(p,u)&&(p[u]=c)):s&&(u.value=c,e.k&&(g[e.k]=c))};c?(n.id=-1,Di(n,i)):n()}else 0}}let Si=!1;const ki=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,Li=e=>8===e.nodeType;function Ei(e){const{mt:t,p:i,o:{patchProp:n,createText:s,nextSibling:r,parentNode:a,remove:l,insert:c,createComment:d}}=e,u=(e,t)=>{if(!t.hasChildNodes())return i(null,e,t),E(),void(t._vnode=e);Si=!1,h(t.firstChild,e,null,null,null),E(),t._vnode=e,Si&&console.error("Hydration completed but contains mismatches.")},h=(i,n,o,l,d,u=!1)=>{const _=Li(i)&&"["===i.data,b=()=>m(i,n,o,l,d,_),{type:y,ref:w,shapeFlag:x,patchFlag:C}=n;let S=i.nodeType;n.el=i,-2===C&&(u=!1,n.dynamicChildren=null);let k=null;switch(y){case ji:3!==S?""===n.children?(c(n.el=s(""),a(i),i),k=i):k=b():(i.data!==n.children&&(Si=!0,i.data=n.children),k=r(i));break;case Ki:k=8!==S||_?b():r(i);break;case Gi:if(_&&(i=r(i),S=i.nodeType),1===S||3===S){k=i;const e=!n.children.length;for(let t=0;t{a=a||!!t.dynamicChildren;const{type:c,props:d,patchFlag:u,shapeFlag:h,dirs:g}=t,f="input"===c&&g||"option"===c;if(f||-1!==u){if(g&&we(t,null,i,"created"),d)if(f||!a||48&u)for(const t in d)(f&&t.endsWith("value")||(0,o.F7)(t)&&!(0,o.Gg)(t))&&n(e,t,null,d[t],!1,void 0,i);else d.onClick&&n(e,"onClick",null,d.onClick,!1,void 0,i);let c;if((c=d&&d.onVnodeBeforeMount)&&Sn(c,i,t),g&&we(t,null,i,"beforeMount"),((c=d&&d.onVnodeMounted)||g)&&le((()=>{c&&Sn(c,i,t),g&&we(t,null,i,"mounted")}),s),16&h&&(!d||!d.innerHTML&&!d.textContent)){let n=p(e.firstChild,t,e,i,s,r,a);while(n){Si=!0;const e=n;n=n.nextSibling,l(e)}}else 8&h&&e.textContent!==t.children&&(Si=!0,e.textContent=t.children)}return e.nextSibling},p=(e,t,n,o,s,r,a)=>{a=a||!!t.dynamicChildren;const l=t.children,c=l.length;for(let d=0;d{const{slotScopeIds:l}=t;l&&(o=o?o.concat(l):l);const u=a(e),h=p(r(e),t,u,i,n,o,s);return h&&Li(h)&&"]"===h.data?r(t.anchor=h):(Si=!0,c(t.anchor=d("]"),u,h),h)},m=(e,t,n,o,s,c)=>{if(Si=!0,t.el=null,c){const t=v(e);while(1){const i=r(e);if(!i||i===t)break;l(i)}}const d=r(e),u=a(e);return l(e),i(null,t,u,d,n,o,ki(u),s),d},v=e=>{let t=0;while(e)if(e=r(e),e&&Li(e)&&("["===e.data&&t++,"]"===e.data)){if(0===t)return r(e);t--}return e};return[u,h]}function Ni(){}const Di=le;function Ti(e){return Ii(e)}function Ai(e){return Ii(e,Ei)}function Ii(e,t){Ni();const i=(0,o.E9)();i.__VUE__=!0;const{insert:s,remove:r,patchProp:a,createElement:l,createText:c,createComment:d,setText:u,setElementText:h,parentNode:g,nextSibling:p,setScopeId:f=o.dG,insertStaticContent:m}=e,v=(e,t,i,n=null,o=null,s=null,r=!1,a=null,l=!!t.dynamicChildren)=>{if(e===t)return;e&&!an(e,t)&&(n=Q(e),q(e,o,s,!0),e=null),-2===t.patchFlag&&(l=!1,t.dynamicChildren=null);const{type:c,ref:d,shapeFlag:u}=t;switch(c){case ji:_(e,t,i,n);break;case Ki:b(e,t,i,n);break;case Gi:null==e&&y(t,i,n,r);break;case $i:M(e,t,i,n,o,s,r,a,l);break;default:1&u?k(e,t,i,n,o,s,r,a,l):6&u?P(e,t,i,n,o,s,r,a,l):(64&u||128&u)&&c.process(e,t,i,n,o,s,r,a,l,ee)}null!=d&&o&&Ci(d,e&&e.ref,s,t||e,!t)},_=(e,t,i,n)=>{if(null==e)s(t.el=c(t.children),i,n);else{const i=t.el=e.el;t.children!==e.children&&u(i,t.children)}},b=(e,t,i,n)=>{null==e?s(t.el=d(t.children||""),i,n):t.el=e.el},y=(e,t,i,n)=>{[e.el,e.anchor]=m(e.children,t,i,n,e.el,e.anchor)},w=({el:e,anchor:t},i,n)=>{let o;while(e&&e!==t)o=p(e),s(e,i,n),e=o;s(t,i,n)},C=({el:e,anchor:t})=>{let i;while(e&&e!==t)i=p(e),r(e),e=i;r(t)},k=(e,t,i,n,o,s,r,a,l)=>{r=r||"svg"===t.type,null==e?N(t,i,n,o,s,r,a,l):A(e,t,o,s,r,a,l)},N=(e,t,i,n,r,c,d,u)=>{let g,p;const{type:f,props:m,shapeFlag:v,transition:_,dirs:b}=e;if(g=e.el=l(e.type,c,m&&m.is,m),8&v?h(g,e.children):16&v&&T(e.children,g,null,n,r,c&&"foreignObject"!==f,d,u),b&&we(e,null,n,"created"),D(g,e,e.scopeId,d,n),m){for(const t in m)"value"===t||(0,o.Gg)(t)||a(g,t,null,m[t],c,e.children,n,r,X);"value"in m&&a(g,"value",null,m.value),(p=m.onVnodeBeforeMount)&&Sn(p,n,e)}b&&we(e,null,n,"beforeMount");const y=(!r||r&&!r.pendingBranch)&&_&&!_.persisted;y&&_.beforeEnter(g),s(g,t,i),((p=m&&m.onVnodeMounted)||y||b)&&Di((()=>{p&&Sn(p,n,e),y&&_.enter(g),b&&we(e,null,n,"mounted")}),r)},D=(e,t,i,n,o)=>{if(i&&f(e,i),n)for(let s=0;s{for(let c=l;c{const c=t.el=e.el;let{patchFlag:d,dynamicChildren:u,dirs:g}=t;d|=16&e.patchFlag;const p=e.props||o.kT,f=t.props||o.kT;let m;i&&Ri(i,!1),(m=f.onVnodeBeforeUpdate)&&Sn(m,i,t,e),g&&we(t,e,i,"beforeUpdate"),i&&Ri(i,!0);const v=s&&"foreignObject"!==t.type;if(u?I(e.dynamicChildren,u,c,i,n,v,r):l||W(e,t,c,null,i,n,v,r,!1),d>0){if(16&d)R(c,t,p,f,i,n,s);else if(2&d&&p.class!==f.class&&a(c,"class",null,f.class,s),4&d&&a(c,"style",p.style,f.style,s),8&d){const o=t.dynamicProps;for(let t=0;t{m&&Sn(m,i,t,e),g&&we(t,e,i,"updated")}),n)},I=(e,t,i,n,o,s,r)=>{for(let a=0;a{if(i!==n){if(i!==o.kT)for(const c in i)(0,o.Gg)(c)||c in n||a(e,c,i[c],null,l,t.children,s,r,X);for(const c in n){if((0,o.Gg)(c))continue;const d=n[c],u=i[c];d!==u&&"value"!==c&&a(e,c,u,d,l,t.children,s,r,X)}"value"in n&&a(e,"value",i.value,n.value)}},M=(e,t,i,n,o,r,a,l,d)=>{const u=t.el=e?e.el:c(""),h=t.anchor=e?e.anchor:c("");let{patchFlag:g,dynamicChildren:p,slotScopeIds:f}=t;f&&(l=l?l.concat(f):f),null==e?(s(u,i,n),s(h,i,n),T(t.children,i,h,o,r,a,l,d)):g>0&&64&g&&p&&e.dynamicChildren?(I(e.dynamicChildren,p,i,o,r,a,l),(null!=t.key||o&&t===o.subTree)&&Mi(e,t,!0)):W(e,t,i,h,o,r,a,l,d)},P=(e,t,i,n,o,s,r,a,l)=>{t.slotScopeIds=a,null==e?512&t.shapeFlag?o.ctx.activate(t,i,n,r,l):O(t,i,n,o,s,r,l):F(e,t,l)},O=(e,t,i,n,o,s,r)=>{const a=e.component=En(e,n,o);if(Fe(e)&&(a.ctx.renderer=ee),Hn(a),a.asyncDep){if(o&&o.registerDep(a,B),!e.el){const e=a.subTree=gn(Ki);b(null,e,t,i)}}else B(a,e,t,i,o,s,r)},F=(e,t,i)=>{const n=t.component=e.component;if(Y(e,t,i)){if(n.asyncDep&&!n.asyncResolved)return void H(n,t,i);n.next=t,S(n.update),n.update()}else t.el=e.el,n.vnode=t},B=(e,t,i,s,r,a,l)=>{const c=()=>{if(e.isMounted){let t,{next:i,bu:n,u:s,parent:c,vnode:d}=e,u=i;0,Ri(e,!1),i?(i.el=d.el,H(e,i,l)):i=d,n&&(0,o.ir)(n),(t=i.props&&i.props.onVnodeBeforeUpdate)&&Sn(t,c,i,d),Ri(e,!0);const h=$(e);0;const p=e.subTree;e.subTree=h,v(p,h,g(p.el),Q(p),e,r,a),i.el=h.el,null===u&&Z(e,h.el),s&&Di(s,r),(t=i.props&&i.props.onVnodeUpdated)&&Di((()=>Sn(t,c,i,d)),r)}else{let n;const{el:l,props:c}=t,{bm:d,m:u,parent:h}=e,g=Me(t);if(Ri(e,!1),d&&(0,o.ir)(d),!g&&(n=c&&c.onVnodeBeforeMount)&&Sn(n,h,t),Ri(e,!0),l&&ie){const i=()=>{e.subTree=$(e),ie(l,e.subTree,e,r,null)};g?t.type.__asyncLoader().then((()=>!e.isUnmounted&&i())):i()}else{0;const n=e.subTree=$(e);0,v(null,n,i,s,e,r,a),t.el=n.el}if(u&&Di(u,r),!g&&(n=c&&c.onVnodeMounted)){const e=t;Di((()=>Sn(n,h,e)),r)}(256&t.shapeFlag||h&&Me(h.vnode)&&256&h.vnode.shapeFlag)&&e.a&&Di(e.a,r),e.isMounted=!0,t=i=s=null}},d=e.effect=new n.qq(c,(()=>x(u)),e.scope),u=e.update=()=>d.run();u.id=e.uid,Ri(e,!0),u()},H=(e,t,i)=>{t.component=e;const o=e.vnode.props;e.vnode=t,e.next=null,li(e,t.props,o,i),xi(e,t.children,i),(0,n.Jd)(),L(),(0,n.lk)()},W=(e,t,i,n,o,s,r,a,l=!1)=>{const c=e&&e.children,d=e?e.shapeFlag:0,u=t.children,{patchFlag:g,shapeFlag:p}=t;if(g>0){if(128&g)return void z(c,u,i,n,o,s,r,a,l);if(256&g)return void V(c,u,i,n,o,s,r,a,l)}8&p?(16&d&&X(c,o,s),u!==c&&h(i,u)):16&d?16&p?z(c,u,i,n,o,s,r,a,l):X(c,o,s,!0):(8&d&&h(i,""),16&p&&T(u,i,n,o,s,r,a,l))},V=(e,t,i,n,s,r,a,l,c)=>{e=e||o.Z6,t=t||o.Z6;const d=e.length,u=t.length,h=Math.min(d,u);let g;for(g=0;gu?X(e,s,r,!0,!1,h):T(t,i,n,s,r,a,l,c,h)},z=(e,t,i,n,s,r,a,l,c)=>{let d=0;const u=t.length;let h=e.length-1,g=u-1;while(d<=h&&d<=g){const n=e[d],o=t[d]=c?wn(t[d]):yn(t[d]);if(!an(n,o))break;v(n,o,i,null,s,r,a,l,c),d++}while(d<=h&&d<=g){const n=e[h],o=t[g]=c?wn(t[g]):yn(t[g]);if(!an(n,o))break;v(n,o,i,null,s,r,a,l,c),h--,g--}if(d>h){if(d<=g){const e=g+1,o=eg)while(d<=h)q(e[d],s,r,!0),d++;else{const p=d,f=d,m=new Map;for(d=f;d<=g;d++){const e=t[d]=c?wn(t[d]):yn(t[d]);null!=e.key&&m.set(e.key,d)}let _,b=0;const y=g-f+1;let w=!1,x=0;const C=new Array(y);for(d=0;d=y){q(n,s,r,!0);continue}let o;if(null!=n.key)o=m.get(n.key);else for(_=f;_<=g;_++)if(0===C[_-f]&&an(n,t[_])){o=_;break}void 0===o?q(n,s,r,!0):(C[o-f]=d+1,o>=x?x=o:w=!0,v(n,t[o],i,null,s,r,a,l,c),b++)}const S=w?Pi(C):o.Z6;for(_=S.length-1,d=y-1;d>=0;d--){const e=f+d,o=t[e],h=e+1{const{el:r,type:a,transition:l,children:c,shapeFlag:d}=e;if(6&d)return void U(e.component.subTree,t,i,n);if(128&d)return void e.suspense.move(t,i,n);if(64&d)return void a.move(e,t,i,ee);if(a===$i){s(r,t,i);for(let e=0;el.enter(r)),o);else{const{leave:e,delayLeave:n,afterLeave:o}=l,a=()=>s(r,t,i),c=()=>{e(r,(()=>{a(),o&&o()}))};n?n(r,a,c):c()}else s(r,t,i)},q=(e,t,i,n=!1,o=!1)=>{const{type:s,props:r,ref:a,children:l,dynamicChildren:c,shapeFlag:d,patchFlag:u,dirs:h}=e;if(null!=a&&Ci(a,null,i,e,!0),256&d)return void t.ctx.deactivate(e);const g=1&d&&h,p=!Me(e);let f;if(p&&(f=r&&r.onVnodeBeforeUnmount)&&Sn(f,t,e),6&d)G(e.component,i,n);else{if(128&d)return void e.suspense.unmount(i,n);g&&we(e,null,t,"beforeUnmount"),64&d?e.type.remove(e,t,i,o,ee,n):c&&(s!==$i||u>0&&64&u)?X(c,t,i,!1,!0):(s===$i&&384&u||!o&&16&d)&&X(l,t,i),n&&j(e)}(p&&(f=r&&r.onVnodeUnmounted)||g)&&Di((()=>{f&&Sn(f,t,e),g&&we(e,null,t,"unmounted")}),i)},j=e=>{const{type:t,el:i,anchor:n,transition:o}=e;if(t===$i)return void K(i,n);if(t===Gi)return void C(e);const s=()=>{r(i),o&&!o.persisted&&o.afterLeave&&o.afterLeave()};if(1&e.shapeFlag&&o&&!o.persisted){const{leave:t,delayLeave:n}=o,r=()=>t(i,s);n?n(e.el,s,r):r()}else s()},K=(e,t)=>{let i;while(e!==t)i=p(e),r(e),e=i;r(t)},G=(e,t,i)=>{const{bum:n,scope:s,update:r,subTree:a,um:l}=e;n&&(0,o.ir)(n),s.stop(),r&&(r.active=!1,q(a,e,t,i)),l&&Di(l,t),Di((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},X=(e,t,i,n=!1,o=!1,s=0)=>{for(let r=s;r6&e.shapeFlag?Q(e.component.subTree):128&e.shapeFlag?e.suspense.next():p(e.anchor||e.el),J=(e,t,i)=>{null==e?t._vnode&&q(t._vnode,null,null,!0):v(t._vnode||null,e,t,null,null,null,i),L(),E(),t._vnode=e},ee={p:v,um:q,m:U,r:j,mt:O,mc:T,pc:W,pbc:I,n:Q,o:e};let te,ie;return t&&([te,ie]=t(ee)),{render:J,hydrate:te,createApp:ii(J,te)}}function Ri({effect:e,update:t},i){e.allowRecurse=t.allowRecurse=i}function Mi(e,t,i=!1){const n=e.children,s=t.children;if((0,o.kJ)(n)&&(0,o.kJ)(s))for(let o=0;o>1,e[i[a]]0&&(t[n]=i[s-1]),i[s]=n)}}s=i.length,r=i[s-1];while(s-- >0)i[s]=r,r=t[r];return i}const Oi=e=>e.__isTeleport,Fi=e=>e&&(e.disabled||""===e.disabled),Bi=e=>"undefined"!==typeof SVGElement&&e instanceof SVGElement,Hi=(e,t)=>{const i=e&&e.to;if((0,o.HD)(i)){if(t){const e=t(i);return e}return null}return i},Wi={__isTeleport:!0,process(e,t,i,n,o,s,r,a,l,c){const{mc:d,pc:u,pbc:h,o:{insert:g,querySelector:p,createText:f,createComment:m}}=c,v=Fi(t.props);let{shapeFlag:_,children:b,dynamicChildren:y}=t;if(null==e){const e=t.el=f(""),c=t.anchor=f("");g(e,i,n),g(c,i,n);const u=t.target=Hi(t.props,p),h=t.targetAnchor=f("");u&&(g(h,u),r=r||Bi(u));const m=(e,t)=>{16&_&&d(b,e,t,o,s,r,a,l)};v?m(i,c):u&&m(u,h)}else{t.el=e.el;const n=t.anchor=e.anchor,d=t.target=e.target,g=t.targetAnchor=e.targetAnchor,f=Fi(e.props),m=f?i:d,_=f?n:g;if(r=r||Bi(d),y?(h(e.dynamicChildren,y,m,o,s,r,a),Mi(e,t,!0)):l||u(e,t,m,_,o,s,r,a,!1),v)f||Vi(t,i,n,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=Hi(t.props,p);e&&Vi(t,e,null,c,0)}else f&&Vi(t,d,g,c,1)}qi(t)},remove(e,t,i,n,{um:o,o:{remove:s}},r){const{shapeFlag:a,children:l,anchor:c,targetAnchor:d,target:u,props:h}=e;if(u&&s(d),(r||!Fi(h))&&(s(c),16&a))for(let g=0;g0?Xi||o.Z6:null,Qi(),en>0&&Xi&&Xi.push(e),e}function on(e,t,i,n,o,s){return nn(hn(e,t,i,n,o,s,!0))}function sn(e,t,i,n,o){return nn(gn(e,t,i,n,o,!0))}function rn(e){return!!e&&!0===e.__v_isVNode}function an(e,t){return e.type===t.type&&e.key===t.key}function ln(e){Ji=e}const cn="__vInternal",dn=({key:e})=>null!=e?e:null,un=({ref:e,ref_key:t,ref_for:i})=>("number"===typeof e&&(e=""+e),null!=e?(0,o.HD)(e)||(0,n.dq)(e)||(0,o.mf)(e)?{i:B,r:e,k:t,f:!!i}:e:null);function hn(e,t=null,i=null,n=0,s=null,r=(e===$i?0:1),a=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&dn(t),ref:t&&un(t),scopeId:H,slotScopeIds:null,children:i,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:n,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:B};return l?(xn(c,i),128&r&&e.normalize(c)):i&&(c.shapeFlag|=(0,o.HD)(i)?8:16),en>0&&!a&&Xi&&(c.patchFlag>0||6&r)&&32!==c.patchFlag&&Xi.push(c),c}const gn=pn;function pn(e,t=null,i=null,s=0,r=null,a=!1){if(e&&e!==lt||(e=Ki),rn(e)){const n=mn(e,t,!0);return i&&xn(n,i),en>0&&!a&&Xi&&(6&n.shapeFlag?Xi[Xi.indexOf(e)]=n:Xi.push(n)),n.patchFlag|=-2,n}if(Yn(e)&&(e=e.__vccOpts),t){t=fn(t);let{class:e,style:i}=t;e&&!(0,o.HD)(e)&&(t.class=(0,o.C_)(e)),(0,o.Kn)(i)&&((0,n.X3)(i)&&!(0,o.kJ)(i)&&(i=(0,o.l7)({},i)),t.style=(0,o.j5)(i))}const l=(0,o.HD)(e)?1:Q(e)?128:Oi(e)?64:(0,o.Kn)(e)?4:(0,o.mf)(e)?2:0;return hn(e,t,i,s,r,l,a,!0)}function fn(e){return e?(0,n.X3)(e)||cn in e?(0,o.l7)({},e):e:null}function mn(e,t,i=!1){const{props:n,ref:s,patchFlag:r,children:a}=e,l=t?Cn(n||{},t):n,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&dn(l),ref:t&&t.ref?i&&s?(0,o.kJ)(s)?s.concat(un(t)):[s,un(t)]:un(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==$i?-1===r?16:16|r:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&mn(e.ssContent),ssFallback:e.ssFallback&&mn(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c}function vn(e=" ",t=0){return gn(ji,null,e,t)}function _n(e,t){const i=gn(Gi,null,e);return i.staticCount=t,i}function bn(e="",t=!1){return t?(Zi(),sn(Ki,null,e)):gn(Ki,null,e)}function yn(e){return null==e||"boolean"===typeof e?gn(Ki):(0,o.kJ)(e)?gn($i,null,e.slice()):"object"===typeof e?wn(e):gn(ji,null,String(e))}function wn(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:mn(e)}function xn(e,t){let i=0;const{shapeFlag:n}=e;if(null==t)t=null;else if((0,o.kJ)(t))i=16;else if("object"===typeof t){if(65&n){const i=t.default;return void(i&&(i._c&&(i._d=!1),xn(e,i()),i._c&&(i._d=!0)))}{i=32;const n=t._;n||cn in t?3===n&&B&&(1===B.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=B}}else(0,o.mf)(t)?(t={default:t,_ctx:B},i=32):(t=String(t),64&n?(i=16,t=[vn(t)]):i=8);e.children=t,e.shapeFlag|=i}function Cn(...e){const t={};for(let i=0;iNn||B;let Tn,An,In="__VUE_INSTANCE_SETTERS__";(An=(0,o.E9)()[In])||(An=(0,o.E9)()[In]=[]),An.push((e=>Nn=e)),Tn=e=>{An.length>1?An.forEach((t=>t(e))):An[0](e)};const Rn=e=>{Tn(e),e.scope.on()},Mn=()=>{Nn&&Nn.scope.off(),Tn(null)};function Pn(e){return 4&e.vnode.shapeFlag}let On,Fn,Bn=!1;function Hn(e,t=!1){Bn=t;const{props:i,children:n}=e.vnode,o=Pn(e);ai(e,i,o,t),wi(e,n);const s=o?Wn(e,t):void 0;return Bn=!1,s}function Wn(e,t){const i=e.type;e.accessCache=Object.create(null),e.proxy=(0,n.Xl)(new Proxy(e.ctx,wt));const{setup:s}=i;if(s){const i=e.setupContext=s.length>1?jn(e):null;Rn(e),(0,n.Jd)();const r=a(s,e,0,[e.props,i]);if((0,n.lk)(),Mn(),(0,o.tI)(r)){if(r.then(Mn,Mn),t)return r.then((i=>{Vn(e,i,t)})).catch((t=>{c(t,e,0)}));e.asyncDep=r}else Vn(e,r,t)}else qn(e,t)}function Vn(e,t,i){(0,o.mf)(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:(0,o.Kn)(t)&&(e.setupState=(0,n.WL)(t)),qn(e,i)}function zn(e){On=e,Fn=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,xt))}}const Un=()=>!On;function qn(e,t,i){const s=e.type;if(!e.render){if(!t&&On&&!s.render){const t=s.template||qt(e).template;if(t){0;const{isCustomElement:i,compilerOptions:n}=e.appContext.config,{delimiters:r,compilerOptions:a}=s,l=(0,o.l7)((0,o.l7)({isCustomElement:i,delimiters:r},n),a);s.render=On(t,l)}}e.render=s.render||o.dG,Fn&&Fn(e)}Rn(e),(0,n.Jd)(),Wt(e),(0,n.lk)(),Mn()}function $n(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,i){return(0,n.j)(e,"get","$attrs"),t[i]}}))}function jn(e){const t=t=>{e.exposed=t||{}};return{get attrs(){return $n(e)},slots:e.slots,emit:e.emit,expose:t}}function Kn(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy((0,n.WL)((0,n.Xl)(e.exposed)),{get(t,i){return i in t?t[i]:i in bt?bt[i](e):void 0},has(e,t){return t in e||t in bt}}))}function Gn(e,t=!0){return(0,o.mf)(e)?e.displayName||e.name:e.name||t&&e.__name}function Yn(e){return(0,o.mf)(e)&&"__vccOpts"in e}const Xn=(e,t)=>(0,n.Fl)(e,t,Bn);function Zn(e,t,i){const n=arguments.length;return 2===n?(0,o.Kn)(t)&&!(0,o.kJ)(t)?rn(t)?gn(e,null,[t]):gn(e,t):gn(e,null,t):(n>3?i=Array.prototype.slice.call(arguments,2):3===n&&rn(i)&&(i=[i]),gn(e,t,i))}const Qn=Symbol.for("v-scx"),Jn=()=>{{const e=si(Qn);return e}};function eo(){return void 0}function to(e,t,i,n){const o=i[n];if(o&&io(o,e))return o;const s=t();return s.memo=e.slice(),i[n]=s}function io(e,t){const i=e.memo;if(i.length!=t.length)return!1;for(let n=0;n0&&Xi&&Xi.push(e),!0}const no="3.3.4",oo={createComponentInstance:En,setupComponent:Hn,renderComponentRoot:$,setCurrentRenderingInstance:W,isVNode:rn,normalizeVNode:yn},so=oo,ro=null,ao=null},61957:(e,t,i)=>{"use strict";i.d(t,{$d:()=>o.$d,$y:()=>o.$y,Ah:()=>M,B:()=>o.B,BK:()=>o.BK,Bj:()=>o.Bj,Bz:()=>o.Bz,C3:()=>o.C3,C_:()=>o.C_,Cn:()=>o.Cn,D2:()=>Re,EB:()=>o.EB,EM:()=>o.EM,Eo:()=>o.Eo,F4:()=>o.F4,F8:()=>Me,FN:()=>o.FN,Fl:()=>o.Fl,G:()=>o.G,G2:()=>ye,Gn:()=>o.Gn,HX:()=>o.HX,HY:()=>o.HY,Ho:()=>o.Ho,IU:()=>o.IU,JJ:()=>o.JJ,Jd:()=>o.Jd,KU:()=>o.KU,Ko:()=>o.Ko,LL:()=>o.LL,MW:()=>R,MX:()=>o.MX,Mr:()=>o.Mr,Nd:()=>Ge,Nv:()=>o.Nv,OT:()=>o.OT,Ob:()=>o.Ob,P$:()=>o.P$,PG:()=>o.PG,Q2:()=>o.Q2,Q6:()=>o.Q6,RC:()=>o.RC,Rh:()=>o.Rh,Rr:()=>o.Rr,S3:()=>o.S3,SK:()=>o.Ah,SU:()=>o.SU,Tn:()=>o.Tn,U2:()=>o.U2,Uc:()=>o.Uc,Uk:()=>o.Uk,Um:()=>o.Um,Us:()=>o.Us,Vf:()=>o.Vf,Vh:()=>o.Vh,W3:()=>ce,WI:()=>o.WI,WL:()=>o.WL,WY:()=>o.WY,Wl:()=>o.Wl,Wm:()=>o.Wm,Wu:()=>o.Wu,X3:()=>o.X3,XI:()=>o.XI,Xl:()=>o.Xl,Xn:()=>o.Xn,Y1:()=>o.Y1,Y3:()=>o.Y3,Y8:()=>o.Y8,YP:()=>o.YP,YS:()=>o.YS,YZ:()=>ke,Yq:()=>o.Yq,Yu:()=>o.Yu,ZB:()=>Ue,ZK:()=>o.ZK,ZM:()=>o.ZM,Zq:()=>o.Zq,_:()=>o._,_A:()=>o._A,a2:()=>O,aZ:()=>o.aZ,b9:()=>o.b9,bM:()=>we,bT:()=>o.bT,bv:()=>o.bv,cE:()=>o.cE,d1:()=>o.d1,dD:()=>o.dD,dG:()=>o.dG,dl:()=>o.dl,dq:()=>o.dq,e8:()=>_e,ec:()=>o.ec,eq:()=>o.eq,f3:()=>o.f3,fb:()=>F,h:()=>o.h,hR:()=>o.hR,i8:()=>o.i8,iD:()=>o.iD,iH:()=>o.iH,iM:()=>Ae,ic:()=>o.ic,j4:()=>o.j4,j5:()=>o.j5,kC:()=>o.kC,kq:()=>o.kq,l1:()=>o.l1,lA:()=>o.lA,lR:()=>o.lR,m0:()=>o.m0,mW:()=>o.mW,mv:()=>o.mv,mx:()=>o.mx,n4:()=>o.n4,nJ:()=>o.nJ,nK:()=>o.nK,nQ:()=>o.nQ,nZ:()=>o.nZ,nr:()=>ve,oR:()=>o.oR,of:()=>o.of,p1:()=>o.p1,qG:()=>o.qG,qZ:()=>o.qZ,qb:()=>o.qb,qj:()=>o.qj,qq:()=>o.qq,ri:()=>qe,ry:()=>o.ry,sT:()=>o.sT,sY:()=>ze,se:()=>o.se,sj:()=>B,sv:()=>o.sv,tT:()=>o.tT,uE:()=>o.uE,uT:()=>U,u_:()=>o.u_,up:()=>o.up,vl:()=>o.vl,vr:()=>$e,vs:()=>o.vs,w5:()=>o.w5,wF:()=>o.wF,wg:()=>o.wg,wy:()=>o.wy,xv:()=>o.xv,yT:()=>o.yT,yX:()=>o.yX,yb:()=>o.MW,zw:()=>o.zw});var n=i(86970),o=i(59835),s=i(60499);const r="http://www.w3.org/2000/svg",a="undefined"!==typeof document?document:null,l=a&&a.createElement("template"),c={insert:(e,t,i)=>{t.insertBefore(e,i||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,i,n)=>{const o=t?a.createElementNS(r,e):a.createElement(e,i?{is:i}:void 0);return"select"===e&&n&&null!=n.multiple&&o.setAttribute("multiple",n.multiple),o},createText:e=>a.createTextNode(e),createComment:e=>a.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>a.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,i,n,o,s){const r=i?i.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling)){while(1)if(t.insertBefore(o.cloneNode(!0),i),o===s||!(o=o.nextSibling))break}else{l.innerHTML=n?`${e}`:e;const o=l.content;if(n){const e=o.firstChild;while(e.firstChild)o.appendChild(e.firstChild);o.removeChild(e)}t.insertBefore(o,i)}return[r?r.nextSibling:t.firstChild,i?i.previousSibling:t.lastChild]}};function d(e,t,i){const n=e._vtc;n&&(t=(t?[t,...n]:[...n]).join(" ")),null==t?e.removeAttribute("class"):i?e.setAttribute("class",t):e.className=t}function u(e,t,i){const o=e.style,s=(0,n.HD)(i);if(i&&!s){if(t&&!(0,n.HD)(t))for(const e in t)null==i[e]&&g(o,e,"");for(const e in i)g(o,e,i[e])}else{const n=o.display;s?t!==i&&(o.cssText=i):t&&e.removeAttribute("style"),"_vod"in e&&(o.display=n)}}const h=/\s*!important$/;function g(e,t,i){if((0,n.kJ)(i))i.forEach((i=>g(e,t,i)));else if(null==i&&(i=""),t.startsWith("--"))e.setProperty(t,i);else{const o=m(e,t);h.test(i)?e.setProperty((0,n.rs)(o),i.replace(h,""),"important"):e[o]=i}}const p=["Webkit","Moz","ms"],f={};function m(e,t){const i=f[t];if(i)return i;let o=(0,n._A)(t);if("filter"!==o&&o in e)return f[t]=o;o=(0,n.kC)(o);for(let n=0;nk||(L.then((()=>k=0)),k=Date.now());function N(e,t){const i=e=>{if(e._vts){if(e._vts<=i.attached)return}else e._vts=Date.now();(0,o.$d)(D(e,i.value),t,5,[e])};return i.value=e,i.attached=E(),i}function D(e,t){if((0,n.kJ)(t)){const i=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{i.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}const T=/^on[a-z]/,A=(e,t,i,o,s=!1,r,a,l,c)=>{"class"===t?d(e,o,s):"style"===t?u(e,i,o):(0,n.F7)(t)?(0,n.tR)(t)||x(e,t,i,o,a):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):I(e,t,o,s))?b(e,t,o,r,a,l,c):("true-value"===t?e._trueValue=o:"false-value"===t&&(e._falseValue=o),_(e,t,o,s))};function I(e,t,i,o){return o?"innerHTML"===t||"textContent"===t||!!(t in e&&T.test(t)&&(0,n.mf)(i)):"spellcheck"!==t&&"draggable"!==t&&"translate"!==t&&("form"!==t&&(("list"!==t||"INPUT"!==e.tagName)&&(("type"!==t||"TEXTAREA"!==e.tagName)&&((!T.test(t)||!(0,n.HD)(i))&&t in e))))}function R(e,t){const i=(0,o.aZ)(e);class n extends O{constructor(e){super(i,e,t)}}return n.def=i,n}const M=e=>R(e,Ue),P="undefined"!==typeof HTMLElement?HTMLElement:class{};class O extends P{constructor(e,t={},i){super(),this._def=e,this._props=t,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this.shadowRoot&&i?i(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,(0,o.Y3)((()=>{this._connected||(ze(null,this.shadowRoot),this._instance=null)}))}_resolveDef(){this._resolved=!0;for(let i=0;i{for(const t of e)this._setAttr(t.attributeName)})).observe(this,{attributes:!0});const e=(e,t=!1)=>{const{props:i,styles:o}=e;let s;if(i&&!(0,n.kJ)(i))for(const r in i){const e=i[r];(e===Number||e&&e.type===Number)&&(r in this._props&&(this._props[r]=(0,n.He)(this._props[r])),(s||(s=Object.create(null)))[(0,n._A)(r)]=!0)}this._numberProps=s,t&&this._resolveProps(e),this._applyStyles(o),this._update()},t=this._def.__asyncLoader;t?t().then((t=>e(t,!0))):e(this._def)}_resolveProps(e){const{props:t}=e,i=(0,n.kJ)(t)?t:Object.keys(t||{});for(const n of Object.keys(this))"_"!==n[0]&&i.includes(n)&&this._setProp(n,this[n],!0,!1);for(const o of i.map(n._A))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(e){this._setProp(o,e)}})}_setAttr(e){let t=this.getAttribute(e);const i=(0,n._A)(e);this._numberProps&&this._numberProps[i]&&(t=(0,n.He)(t)),this._setProp(i,t,!1)}_getProp(e){return this._props[e]}_setProp(e,t,i=!0,o=!0){t!==this._props[e]&&(this._props[e]=t,o&&this._instance&&this._update(),i&&(!0===t?this.setAttribute((0,n.rs)(e),""):"string"===typeof t||"number"===typeof t?this.setAttribute((0,n.rs)(e),t+""):t||this.removeAttribute((0,n.rs)(e))))}_update(){ze(this._createVNode(),this.shadowRoot)}_createVNode(){const e=(0,o.Wm)(this._def,(0,n.l7)({},this._props));return this._instance||(e.ce=e=>{this._instance=e,e.isCE=!0;const t=(e,t)=>{this.dispatchEvent(new CustomEvent(e,{detail:t}))};e.emit=(e,...i)=>{t(e,i),(0,n.rs)(e)!==e&&t((0,n.rs)(e),i)};let i=this;while(i=i&&(i.parentNode||i.host))if(i instanceof O){e.parent=i._instance,e.provides=i._instance.provides;break}}),e}_applyStyles(e){e&&e.forEach((e=>{const t=document.createElement("style");t.textContent=e,this.shadowRoot.appendChild(t)}))}}function F(e="$style"){{const t=(0,o.FN)();if(!t)return n.kT;const i=t.type.__cssModules;if(!i)return n.kT;const s=i[e];return s||n.kT}}function B(e){const t=(0,o.FN)();if(!t)return;const i=t.ut=(i=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach((e=>W(e,i)))},n=()=>{const n=e(t.proxy);H(t.subTree,n),i(n)};(0,o.Rh)(n),(0,o.bv)((()=>{const e=new MutationObserver(n);e.observe(t.subTree.el.parentNode,{childList:!0}),(0,o.Ah)((()=>e.disconnect()))}))}function H(e,t){if(128&e.shapeFlag){const i=e.suspense;e=i.activeBranch,i.pendingBranch&&!i.isHydrating&&i.effects.push((()=>{H(i.activeBranch,t)}))}while(e.component)e=e.component.subTree;if(1&e.shapeFlag&&e.el)W(e.el,t);else if(e.type===o.HY)e.children.forEach((e=>H(e,t)));else if(e.type===o.qG){let{el:i,anchor:n}=e;while(i){if(W(i,t),i===n)break;i=i.nextSibling}}}function W(e,t){if(1===e.nodeType){const i=e.style;for(const e in t)i.setProperty(`--${e}`,t[e])}}const V="transition",z="animation",U=(e,{slots:t})=>(0,o.h)(o.P$,G(e),t);U.displayName="Transition";const q={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},$=U.props=(0,n.l7)({},o.nJ,q),j=(e,t=[])=>{(0,n.kJ)(e)?e.forEach((e=>e(...t))):e&&e(...t)},K=e=>!!e&&((0,n.kJ)(e)?e.some((e=>e.length>1)):e.length>1);function G(e){const t={};for(const n in e)n in q||(t[n]=e[n]);if(!1===e.css)return t;const{name:i="v",type:o,duration:s,enterFromClass:r=`${i}-enter-from`,enterActiveClass:a=`${i}-enter-active`,enterToClass:l=`${i}-enter-to`,appearFromClass:c=r,appearActiveClass:d=a,appearToClass:u=l,leaveFromClass:h=`${i}-leave-from`,leaveActiveClass:g=`${i}-leave-active`,leaveToClass:p=`${i}-leave-to`}=e,f=Y(s),m=f&&f[0],v=f&&f[1],{onBeforeEnter:_,onEnter:b,onEnterCancelled:y,onLeave:w,onLeaveCancelled:x,onBeforeAppear:C=_,onAppear:S=b,onAppearCancelled:k=y}=t,L=(e,t,i)=>{Q(e,t?u:l),Q(e,t?d:a),i&&i()},E=(e,t)=>{e._isLeaving=!1,Q(e,h),Q(e,p),Q(e,g),t&&t()},N=e=>(t,i)=>{const n=e?S:b,s=()=>L(t,e,i);j(n,[t,s]),J((()=>{Q(t,e?c:r),Z(t,e?u:l),K(n)||te(t,o,m,s)}))};return(0,n.l7)(t,{onBeforeEnter(e){j(_,[e]),Z(e,r),Z(e,a)},onBeforeAppear(e){j(C,[e]),Z(e,c),Z(e,d)},onEnter:N(!1),onAppear:N(!0),onLeave(e,t){e._isLeaving=!0;const i=()=>E(e,t);Z(e,h),se(),Z(e,g),J((()=>{e._isLeaving&&(Q(e,h),Z(e,p),K(w)||te(e,o,v,i))})),j(w,[e,i])},onEnterCancelled(e){L(e,!1),j(y,[e])},onAppearCancelled(e){L(e,!0),j(k,[e])},onLeaveCancelled(e){E(e),j(x,[e])}})}function Y(e){if(null==e)return null;if((0,n.Kn)(e))return[X(e.enter),X(e.leave)];{const t=X(e);return[t,t]}}function X(e){const t=(0,n.He)(e);return t}function Z(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e._vtc||(e._vtc=new Set)).add(t)}function Q(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const{_vtc:i}=e;i&&(i.delete(t),i.size||(e._vtc=void 0))}function J(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let ee=0;function te(e,t,i,n){const o=e._endId=++ee,s=()=>{o===e._endId&&n()};if(i)return setTimeout(s,i);const{type:r,timeout:a,propCount:l}=ie(e,t);if(!r)return n();const c=r+"end";let d=0;const u=()=>{e.removeEventListener(c,h),s()},h=t=>{t.target===e&&++d>=l&&u()};setTimeout((()=>{d(i[e]||"").split(", "),o=n(`${V}Delay`),s=n(`${V}Duration`),r=ne(o,s),a=n(`${z}Delay`),l=n(`${z}Duration`),c=ne(a,l);let d=null,u=0,h=0;t===V?r>0&&(d=V,u=r,h=s.length):t===z?c>0&&(d=z,u=c,h=l.length):(u=Math.max(r,c),d=u>0?r>c?V:z:null,h=d?d===V?s.length:l.length:0);const g=d===V&&/\b(transform|all)(,|$)/.test(n(`${V}Property`).toString());return{type:d,timeout:u,propCount:h,hasTransform:g}}function ne(e,t){while(e.lengthoe(t)+oe(e[i]))))}function oe(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function se(){return document.body.offsetHeight}const re=new WeakMap,ae=new WeakMap,le={name:"TransitionGroup",props:(0,n.l7)({},$,{tag:String,moveClass:String}),setup(e,{slots:t}){const i=(0,o.FN)(),n=(0,o.Y8)();let r,a;return(0,o.ic)((()=>{if(!r.length)return;const t=e.moveClass||`${e.name||"v"}-move`;if(!ge(r[0].el,i.vnode.el,t))return;r.forEach(de),r.forEach(ue);const n=r.filter(he);se(),n.forEach((e=>{const i=e.el,n=i.style;Z(i,t),n.transform=n.webkitTransform=n.transitionDuration="";const o=i._moveCb=e=>{e&&e.target!==i||e&&!/transform$/.test(e.propertyName)||(i.removeEventListener("transitionend",o),i._moveCb=null,Q(i,t))};i.addEventListener("transitionend",o)}))})),()=>{const l=(0,s.IU)(e),c=G(l);let d=l.tag||o.HY;r=a,a=t.default?(0,o.Q6)(t.default()):[];for(let e=0;e{e.split(/\s+/).forEach((e=>e&&n.classList.remove(e)))})),i.split(/\s+/).forEach((e=>e&&n.classList.add(e))),n.style.display="none";const o=1===t.nodeType?t:t.parentNode;o.appendChild(n);const{hasTransform:s}=ie(n);return o.removeChild(n),s}const pe=e=>{const t=e.props["onUpdate:modelValue"]||!1;return(0,n.kJ)(t)?e=>(0,n.ir)(t,e):t};function fe(e){e.target.composing=!0}function me(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ve={created(e,{modifiers:{lazy:t,trim:i,number:o}},s){e._assign=pe(s);const r=o||s.props&&"number"===s.props.type;y(e,t?"change":"input",(t=>{if(t.target.composing)return;let o=e.value;i&&(o=o.trim()),r&&(o=(0,n.h5)(o)),e._assign(o)})),i&&y(e,"change",(()=>{e.value=e.value.trim()})),t||(y(e,"compositionstart",fe),y(e,"compositionend",me),y(e,"change",me))},mounted(e,{value:t}){e.value=null==t?"":t},beforeUpdate(e,{value:t,modifiers:{lazy:i,trim:o,number:s}},r){if(e._assign=pe(r),e.composing)return;if(document.activeElement===e&&"range"!==e.type){if(i)return;if(o&&e.value.trim()===t)return;if((s||"number"===e.type)&&(0,n.h5)(e.value)===t)return}const a=null==t?"":t;e.value!==a&&(e.value=a)}},_e={deep:!0,created(e,t,i){e._assign=pe(i),y(e,"change",(()=>{const t=e._modelValue,i=Ce(e),o=e.checked,s=e._assign;if((0,n.kJ)(t)){const e=(0,n.hq)(t,i),r=-1!==e;if(o&&!r)s(t.concat(i));else if(!o&&r){const i=[...t];i.splice(e,1),s(i)}}else if((0,n.DM)(t)){const e=new Set(t);o?e.add(i):e.delete(i),s(e)}else s(Se(e,o))}))},mounted:be,beforeUpdate(e,t,i){e._assign=pe(i),be(e,t,i)}};function be(e,{value:t,oldValue:i},o){e._modelValue=t,(0,n.kJ)(t)?e.checked=(0,n.hq)(t,o.props.value)>-1:(0,n.DM)(t)?e.checked=t.has(o.props.value):t!==i&&(e.checked=(0,n.WV)(t,Se(e,!0)))}const ye={created(e,{value:t},i){e.checked=(0,n.WV)(t,i.props.value),e._assign=pe(i),y(e,"change",(()=>{e._assign(Ce(e))}))},beforeUpdate(e,{value:t,oldValue:i},o){e._assign=pe(o),t!==i&&(e.checked=(0,n.WV)(t,o.props.value))}},we={deep:!0,created(e,{value:t,modifiers:{number:i}},o){const s=(0,n.DM)(t);y(e,"change",(()=>{const t=Array.prototype.filter.call(e.options,(e=>e.selected)).map((e=>i?(0,n.h5)(Ce(e)):Ce(e)));e._assign(e.multiple?s?new Set(t):t:t[0])})),e._assign=pe(o)},mounted(e,{value:t}){xe(e,t)},beforeUpdate(e,t,i){e._assign=pe(i)},updated(e,{value:t}){xe(e,t)}};function xe(e,t){const i=e.multiple;if(!i||(0,n.kJ)(t)||(0,n.DM)(t)){for(let o=0,s=e.options.length;o-1:s.selected=t.has(r);else if((0,n.WV)(Ce(s),t))return void(e.selectedIndex!==o&&(e.selectedIndex=o))}i||-1===e.selectedIndex||(e.selectedIndex=-1)}}function Ce(e){return"_value"in e?e._value:e.value}function Se(e,t){const i=t?"_trueValue":"_falseValue";return i in e?e[i]:t}const ke={created(e,t,i){Ee(e,t,i,null,"created")},mounted(e,t,i){Ee(e,t,i,null,"mounted")},beforeUpdate(e,t,i,n){Ee(e,t,i,n,"beforeUpdate")},updated(e,t,i,n){Ee(e,t,i,n,"updated")}};function Le(e,t){switch(e){case"SELECT":return we;case"TEXTAREA":return ve;default:switch(t){case"checkbox":return _e;case"radio":return ye;default:return ve}}}function Ee(e,t,i,n,o){const s=Le(e.tagName,i.props&&i.props.type),r=s[o];r&&r(e,t,i,n)}function Ne(){ve.getSSRProps=({value:e})=>({value:e}),ye.getSSRProps=({value:e},t)=>{if(t.props&&(0,n.WV)(t.props.value,e))return{checked:!0}},_e.getSSRProps=({value:e},t)=>{if((0,n.kJ)(e)){if(t.props&&(0,n.hq)(e,t.props.value)>-1)return{checked:!0}}else if((0,n.DM)(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},ke.getSSRProps=(e,t)=>{if("string"!==typeof t.type)return;const i=Le(t.type.toUpperCase(),t.props&&t.props.type);return i.getSSRProps?i.getSSRProps(e,t):void 0}}const De=["ctrl","shift","alt","meta"],Te={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>De.some((i=>e[`${i}Key`]&&!t.includes(i)))},Ae=(e,t)=>(i,...n)=>{for(let e=0;ei=>{if(!("key"in i))return;const o=(0,n.rs)(i.key);return t.some((e=>e===o||Ie[e]===o))?e(i):void 0},Me={beforeMount(e,{value:t},{transition:i}){e._vod="none"===e.style.display?"":e.style.display,i&&t?i.beforeEnter(e):Pe(e,t)},mounted(e,{value:t},{transition:i}){i&&t&&i.enter(e)},updated(e,{value:t,oldValue:i},{transition:n}){!t!==!i&&(n?t?(n.beforeEnter(e),Pe(e,!0),n.enter(e)):n.leave(e,(()=>{Pe(e,!1)})):Pe(e,t))},beforeUnmount(e,{value:t}){Pe(e,t)}};function Pe(e,t){e.style.display=t?e._vod:"none"}function Oe(){Me.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const Fe=(0,n.l7)({patchProp:A},c);let Be,He=!1;function We(){return Be||(Be=(0,o.Us)(Fe))}function Ve(){return Be=He?Be:(0,o.Eo)(Fe),He=!0,Be}const ze=(...e)=>{We().render(...e)},Ue=(...e)=>{Ve().hydrate(...e)},qe=(...e)=>{const t=We().createApp(...e);const{mount:i}=t;return t.mount=e=>{const o=je(e);if(!o)return;const s=t._component;(0,n.mf)(s)||s.render||s.template||(s.template=o.innerHTML),o.innerHTML="";const r=i(o,!1,o instanceof SVGElement);return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t},$e=(...e)=>{const t=Ve().createApp(...e);const{mount:i}=t;return t.mount=e=>{const t=je(e);if(t)return i(t,!0,t instanceof SVGElement)},t};function je(e){if((0,n.HD)(e)){const t=document.querySelector(e);return t}return e}let Ke=!1;const Ge=()=>{Ke||(Ke=!0,Ne(),Oe())}},86970:(e,t,i)=>{"use strict";function n(e,t){const i=Object.create(null),n=e.split(",");for(let o=0;o!!i[e.toLowerCase()]:e=>!!i[e]}i.d(t,{C_:()=>Q,DM:()=>v,E9:()=>q,F7:()=>c,Gg:()=>T,HD:()=>w,He:()=>z,Kj:()=>b,Kn:()=>C,NO:()=>a,Nj:()=>W,Od:()=>h,PO:()=>N,Pq:()=>te,RI:()=>p,S0:()=>D,W7:()=>E,WV:()=>oe,Z6:()=>s,_A:()=>R,_N:()=>m,aU:()=>B,dG:()=>r,e1:()=>j,fY:()=>n,h5:()=>V,hR:()=>F,hq:()=>se,ir:()=>H,j5:()=>K,kC:()=>O,kJ:()=>f,kT:()=>o,l7:()=>u,mf:()=>y,rs:()=>P,tI:()=>S,tR:()=>d,vs:()=>J,yA:()=>ie,yk:()=>x,zw:()=>re});const o={},s=[],r=()=>{},a=()=>!1,l=/^on[^a-z]/,c=e=>l.test(e),d=e=>e.startsWith("onUpdate:"),u=Object.assign,h=(e,t)=>{const i=e.indexOf(t);i>-1&&e.splice(i,1)},g=Object.prototype.hasOwnProperty,p=(e,t)=>g.call(e,t),f=Array.isArray,m=e=>"[object Map]"===L(e),v=e=>"[object Set]"===L(e),_=e=>"[object Date]"===L(e),b=e=>"[object RegExp]"===L(e),y=e=>"function"===typeof e,w=e=>"string"===typeof e,x=e=>"symbol"===typeof e,C=e=>null!==e&&"object"===typeof e,S=e=>C(e)&&y(e.then)&&y(e.catch),k=Object.prototype.toString,L=e=>k.call(e),E=e=>L(e).slice(8,-1),N=e=>"[object Object]"===L(e),D=e=>w(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,T=n(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),A=e=>{const t=Object.create(null);return i=>{const n=t[i];return n||(t[i]=e(i))}},I=/-(\w)/g,R=A((e=>e.replace(I,((e,t)=>t?t.toUpperCase():"")))),M=/\B([A-Z])/g,P=A((e=>e.replace(M,"-$1").toLowerCase())),O=A((e=>e.charAt(0).toUpperCase()+e.slice(1))),F=A((e=>e?`on${O(e)}`:"")),B=(e,t)=>!Object.is(e,t),H=(e,t)=>{for(let i=0;i{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:i})},V=e=>{const t=parseFloat(e);return isNaN(t)?e:t},z=e=>{const t=w(e)?Number(e):NaN;return isNaN(t)?e:t};let U;const q=()=>U||(U="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof self?self:"undefined"!==typeof window?window:"undefined"!==typeof i.g?i.g:{});const $="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console",j=n($);function K(e){if(f(e)){const t={};for(let i=0;i{if(e){const i=e.split(Y);i.length>1&&(t[i[0].trim()]=i[1].trim())}})),t}function Q(e){let t="";if(w(e))t=e;else if(f(e))for(let i=0;ioe(e,t)))}const re=e=>w(e)?e:null==e?"":f(e)||C(e)&&(e.toString===k||!y(e.toString))?JSON.stringify(e,ae,2):String(e),ae=(e,t)=>t&&t.__v_isRef?ae(e,t.value):m(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,i])=>(e[`${t} =>`]=i,e)),{})}:v(t)?{[`Set(${t.size})`]:[...t.values()]}:!C(t)||f(t)||N(t)?t:String(t)},2e4:(e,t,i)=>{"use strict";var n; -/*! - * ApexCharts v3.40.0 - * (c) 2018-2023 ApexCharts - * Released under the MIT License. - */function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function s(e){for(var t=1;te.length)&&(t=e.length);for(var i=0,n=new Array(t);i>16,r=i>>8&255,a=255&i;return"#"+(16777216+65536*(Math.round((n-s)*o)+s)+256*(Math.round((n-r)*o)+r)+(Math.round((n-a)*o)+a)).toString(16).slice(1)}},{key:"shadeColor",value:function(t,i){return e.isColorHex(i)?this.shadeHexColor(t,i):this.shadeRGBColor(t,i)}}],[{key:"bind",value:function(e,t){return function(){return e.apply(t,arguments)}}},{key:"isObject",value:function(e){return e&&"object"===r(e)&&!Array.isArray(e)&&null!=e}},{key:"is",value:function(e,t){return Object.prototype.toString.call(t)==="[object "+e+"]"}},{key:"listToArray",value:function(e){var t,i=[];for(t=0;tt.length?e:t}))),e.length>t.length?e:t}),0)}},{key:"hexToRgba",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"#999999",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;"#"!==e.substring(0,1)&&(e="#999999");var i=e.replace("#","");i=i.match(new RegExp("(.{"+i.length/3+"})","g"));for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"x",i=e.toString().slice();return i.replace(/[` ~!@#$%^&*()|+\=?;:'",.<>{}[\]\\/]/gi,t)}},{key:"negToZero",value:function(e){return e<0?0:e}},{key:"moveIndexInArray",value:function(e,t,i){if(i>=e.length)for(var n=i-e.length+1;n--;)e.push(void 0);return e.splice(i,0,e.splice(t,1)[0]),e}},{key:"extractNumber",value:function(e){return parseFloat(e.replace(/[^\d.]*/g,""))}},{key:"findAncestor",value:function(e,t){for(;(e=e.parentElement)&&!e.classList.contains(t););return e}},{key:"setELstyles",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e.style.key=t[i])}},{key:"isNumber",value:function(e){return!isNaN(e)&&parseFloat(Number(e))===e&&!isNaN(parseInt(e,10))}},{key:"isFloat",value:function(e){return Number(e)===e&&e%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 e=window.navigator.userAgent,t=e.indexOf("MSIE ");if(t>0)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);if(e.indexOf("Trident/")>0){var i=e.indexOf("rv:");return parseInt(e.substring(i+3,e.indexOf(".",i)),10)}var n=e.indexOf("Edge/");return n>0&&parseInt(e.substring(n+5,e.indexOf(".",n)),10)}}]),e}(),w=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.setEasingFunctions()}return c(e,[{key:"setEasingFunctions",value:function(){var e;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case"linear":e="-";break;case"easein":e="<";break;case"easeout":e=">";break;case"easeinout":default:e="<>";break;case"swing":e=function(e){var t=1.70158;return(e-=1)*e*((t+1)*e+t)+1};break;case"bounce":e=function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375};break;case"elastic":e=function(e){return e===!!e?e:Math.pow(2,-10*e)*Math.sin((e-.075)*(2*Math.PI)/.3)+1}}this.w.globals.easing=e}}},{key:"animateLine",value:function(e,t,i,n){e.attr(t).animate(n).attr(i)}},{key:"animateMarker",value:function(e,t,i,n,o,s){t||(t=0),e.attr({r:t,width:t,height:t}).animate(n,o).attr({r:i,width:i.width,height:i.height}).afterAll((function(){s()}))}},{key:"animateCircle",value:function(e,t,i,n,o){e.attr({r:t.r,cx:t.cx,cy:t.cy}).animate(n,o).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:"animateRect",value:function(e,t,i,n,o){e.attr(t).animate(n).attr(i).afterAll((function(){return o()}))}},{key:"animatePathsGradually",value:function(e){var t=e.el,i=e.realIndex,n=e.j,o=e.fill,s=e.pathFrom,r=e.pathTo,a=e.speed,l=e.delay,c=this.w,d=0;c.config.chart.animations.animateGradually.enabled&&(d=c.config.chart.animations.animateGradually.delay),c.config.chart.animations.dynamicAnimation.enabled&&c.globals.dataChanged&&"bar"!==c.config.chart.type&&(d=0),this.morphSVG(t,i,n,"line"!==c.config.chart.type||c.globals.comboCharts?o:"stroke",s,r,a,l*d)}},{key:"showDelayedElements",value:function(){this.w.globals.delayedElements.forEach((function(e){e.el.classList.remove("apexcharts-element-hidden")}))}},{key:"animationCompleted",value:function(e){var t=this.w;t.globals.animationEnded||(t.globals.animationEnded=!0,this.showDelayedElements(),"function"==typeof t.config.chart.events.animationEnd&&t.config.chart.events.animationEnd(this.ctx,{el:e,w:t}))}},{key:"morphSVG",value:function(e,t,i,n,o,s,r,a){var l=this,c=this.w;o||(o=e.attr("pathFrom")),s||(s=e.attr("pathTo"));var d=function(e){return"radar"===c.config.chart.type&&(r=1),"M 0 ".concat(c.globals.gridHeight)};(!o||o.indexOf("undefined")>-1||o.indexOf("NaN")>-1)&&(o=d()),(!s||s.indexOf("undefined")>-1||s.indexOf("NaN")>-1)&&(s=d()),c.globals.shouldAnimate||(r=1),e.plot(o).animate(1,c.globals.easing,a).plot(o).animate(r,c.globals.easing,a).plot(s).afterAll((function(){y.isNumber(i)?i===c.globals.series[c.globals.maxValsInArrayIndex].length-2&&c.globals.shouldAnimate&&l.animationCompleted(e):"none"!==n&&c.globals.shouldAnimate&&(!c.globals.comboCharts&&t===c.globals.series.length-1||c.globals.comboCharts)&&l.animationCompleted(e),l.showDelayedElements()}))}}]),e}(),x=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"getDefaultFilter",value:function(e,t){var i=this.w;e.unfilter(!0),(new window.SVG.Filter).size("120%","180%","-5%","-40%"),"none"!==i.config.states.normal.filter?this.applyFilter(e,t,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addNormalFilter",value:function(e,t){var i=this.w;i.config.chart.dropShadow.enabled&&!e.node.classList.contains("apexcharts-marker")&&this.dropShadow(e,i.config.chart.dropShadow,t)}},{key:"addLightenFilter",value:function(e,t,i){var n=this,o=this.w,s=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter((function(e){var i=o.config.chart.dropShadow;(i.enabled?n.addShadow(e,t,i):e).componentTransfer({rgb:{type:"linear",slope:1.5,intercept:s}})})),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"addDarkenFilter",value:function(e,t,i){var n=this,o=this.w,s=i.intensity;e.unfilter(!0),new window.SVG.Filter,e.filter((function(e){var i=o.config.chart.dropShadow;(i.enabled?n.addShadow(e,t,i):e).componentTransfer({rgb:{type:"linear",slope:s}})})),e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)}},{key:"applyFilter",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5;switch(i){case"none":this.addNormalFilter(e,t);break;case"lighten":this.addLightenFilter(e,t,{intensity:n});break;case"darken":this.addDarkenFilter(e,t,{intensity:n})}}},{key:"addShadow",value:function(e,t,i){var n=i.blur,o=i.top,s=i.left,r=i.color,a=i.opacity,l=e.flood(Array.isArray(r)?r[t]:r,a).composite(e.sourceAlpha,"in").offset(s,o).gaussianBlur(n).merge(e.source);return e.blend(e.source,l)}},{key:"dropShadow",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=t.top,o=t.left,s=t.blur,r=t.color,a=t.opacity,l=t.noUserSpaceOnUse,c=this.w;return e.unfilter(!0),y.isIE()&&"radialBar"===c.config.chart.type||(r=Array.isArray(r)?r[i]:r,e.filter((function(e){var t=null;t=y.isSafari()||y.isFirefox()||y.isIE()?e.flood(r,a).composite(e.sourceAlpha,"in").offset(o,n).gaussianBlur(s):e.flood(r,a).composite(e.sourceAlpha,"in").offset(o,n).gaussianBlur(s).merge(e.source),e.blend(e.source,t)})),l||e.filterer.node.setAttribute("filterUnits","userSpaceOnUse"),this._scaleFilterSize(e.filterer.node)),e}},{key:"setSelectionFilter",value:function(e,t,i){var n=this.w;if(void 0!==n.globals.selectedDataPoints[t]&&n.globals.selectedDataPoints[t].indexOf(i)>-1){e.node.setAttribute("selected",!0);var o=n.config.states.active.filter;"none"!==o&&this.applyFilter(e,t,o.type,o.value)}}},{key:"_scaleFilterSize",value:function(e){!function(t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])}({width:"200%",height:"200%",x:"-50%",y:"-50%"})}}]),e}(),C=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"roundPathCorners",value:function(e,t){function i(e,t,i){var o=t.x-e.x,s=t.y-e.y,r=Math.sqrt(o*o+s*s);return n(e,t,Math.min(1,i/r))}function n(e,t,i){return{x:e.x+(t.x-e.x)*i,y:e.y+(t.y-e.y)*i}}function o(e,t){e.length>2&&(e[e.length-2]=t.x,e[e.length-1]=t.y)}function s(e){return{x:parseFloat(e[e.length-2]),y:parseFloat(e[e.length-1])}}e.indexOf("NaN")>-1&&(e="");var r=e.split(/[,\s]/).reduce((function(e,t){var i=t.match("([a-zA-Z])(.+)");return i?(e.push(i[1]),e.push(i[2])):e.push(t),e}),[]).reduce((function(e,t){return parseFloat(t)==t&&e.length?e[e.length-1].push(t):e.push([t]),e}),[]),a=[];if(r.length>1){var l=s(r[0]),c=null;"Z"==r[r.length-1][0]&&r[0].length>2&&(c=["L",l.x,l.y],r[r.length-1]=c),a.push(r[0]);for(var d=1;d2&&"L"==h[0]&&g.length>2&&"L"==g[0]){var p,f,m=s(u),v=s(h),_=s(g);p=i(v,m,t),f=i(v,_,t),o(h,p),h.origPoint=v,a.push(h);var b=n(p,v,.5),y=n(v,f,.5),w=["C",b.x,b.y,y.x,y.y,f.x,f.y];w.origPoint=v,a.push(w)}else a.push(h)}if(c){var x=s(a[a.length-1]);a.push(["Z"]),o(a[0],x)}}else a=r;return a.reduce((function(e,t){return e+t.join(" ")+" "}),"")}},{key:"drawLine",value:function(e,t,i,n){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"#a8a8a8",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:"butt";return this.w.globals.dom.Paper.line().attr({x1:e,y1:t,x2:i,y2:n,stroke:o,"stroke-dasharray":s,"stroke-width":r,"stroke-linecap":a})}},{key:"drawRect",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"#fefefe",r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,c=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,d=this.w.globals.dom.Paper.rect();return d.attr({x:e,y:t,width:i>0?i:0,height:n>0?n:0,rx:o,ry:o,opacity:r,"stroke-width":null!==a?a:0,stroke:null!==l?l:"none","stroke-dasharray":c}),d.node.setAttribute("fill",s),d}},{key:"drawPolygon",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#e1e1e1",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none";return this.w.globals.dom.Paper.polygon(e).attr({fill:n,stroke:t,"stroke-width":i})}},{key:"drawCircle",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;e<0&&(e=0);var i=this.w.globals.dom.Paper.circle(2*e);return null!==t&&i.attr(t),i}},{key:"drawPath",value:function(e){var t=e.d,i=void 0===t?"":t,n=e.stroke,o=void 0===n?"#a8a8a8":n,s=e.strokeWidth,r=void 0===s?1:s,a=e.fill,l=e.fillOpacity,c=void 0===l?1:l,d=e.strokeOpacity,u=void 0===d?1:d,h=e.classes,g=e.strokeLinecap,p=void 0===g?null:g,f=e.strokeDashArray,m=void 0===f?0:f,v=this.w;return null===p&&(p=v.config.stroke.lineCap),(i.indexOf("undefined")>-1||i.indexOf("NaN")>-1)&&(i="M 0 ".concat(v.globals.gridHeight)),v.globals.dom.Paper.path(i).attr({fill:a,"fill-opacity":c,stroke:o,"stroke-opacity":u,"stroke-linecap":p,"stroke-width":r,"stroke-dasharray":m,class:h})}},{key:"group",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=this.w.globals.dom.Paper.group();return null!==e&&t.attr(e),t}},{key:"move",value:function(e,t){var i=["M",e,t].join(" ");return i}},{key:"line",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=null;return null===i?n=[" L",e,t].join(" "):"H"===i?n=[" H",e].join(" "):"V"===i&&(n=[" V",t].join(" ")),n}},{key:"curve",value:function(e,t,i,n,o,s){var r=["C",e,t,i,n,o,s].join(" ");return r}},{key:"quadraticCurve",value:function(e,t,i,n){return["Q",e,t,i,n].join(" ")}},{key:"arc",value:function(e,t,i,n,o,s,r){var a="A";arguments.length>7&&void 0!==arguments[7]&&arguments[7]&&(a="a");var l=[a,e,t,i,n,o,s,r].join(" ");return l}},{key:"renderPaths",value:function(e){var t,i=e.j,n=e.realIndex,o=e.pathFrom,r=e.pathTo,a=e.stroke,l=e.strokeWidth,c=e.strokeLinecap,d=e.fill,u=e.animationDelay,h=e.initialSpeed,g=e.dataChangeSpeed,p=e.className,f=e.shouldClipToGrid,m=void 0===f||f,v=e.bindEventsOnPaths,_=void 0===v||v,b=e.drawShadow,y=void 0===b||b,C=this.w,S=new x(this.ctx),k=new w(this.ctx),L=this.w.config.chart.animations.enabled,E=L&&this.w.config.chart.animations.dynamicAnimation.enabled,N=!!(L&&!C.globals.resized||E&&C.globals.dataChanged&&C.globals.shouldAnimate);N?t=o:(t=r,C.globals.animationEnded=!0);var D=C.config.stroke.dashArray,T=0;T=Array.isArray(D)?D[n]:C.config.stroke.dashArray;var A=this.drawPath({d:t,stroke:a,strokeWidth:l,fill:d,fillOpacity:1,classes:p,strokeLinecap:c,strokeDashArray:T});if(A.attr("index",n),m&&A.attr({"clip-path":"url(#gridRectMask".concat(C.globals.cuid,")")}),"none"!==C.config.states.normal.filter.type)S.getDefaultFilter(A,n);else if(C.config.chart.dropShadow.enabled&&y&&(!C.config.chart.dropShadow.enabledOnSeries||C.config.chart.dropShadow.enabledOnSeries&&-1!==C.config.chart.dropShadow.enabledOnSeries.indexOf(n))){var I=C.config.chart.dropShadow;S.dropShadow(A,I,n)}_&&(A.node.addEventListener("mouseenter",this.pathMouseEnter.bind(this,A)),A.node.addEventListener("mouseleave",this.pathMouseLeave.bind(this,A)),A.node.addEventListener("mousedown",this.pathMouseDown.bind(this,A))),A.attr({pathTo:r,pathFrom:o});var R={el:A,j:i,realIndex:n,pathFrom:o,pathTo:r,fill:d,strokeWidth:l,delay:u};return!L||C.globals.resized||C.globals.dataChanged?!C.globals.resized&&C.globals.dataChanged||k.showDelayedElements():k.animatePathsGradually(s(s({},R),{},{speed:h})),C.globals.dataChanged&&E&&N&&k.animatePathsGradually(s(s({},R),{},{speed:g})),A}},{key:"drawPattern",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#a8a8a8",o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return this.w.globals.dom.Paper.pattern(t,i,(function(s){"horizontalLines"===e?s.line(0,0,i,0).stroke({color:n,width:o+1}):"verticalLines"===e?s.line(0,0,0,t).stroke({color:n,width:o+1}):"slantedLines"===e?s.line(0,0,t,i).stroke({color:n,width:o}):"squares"===e?s.rect(t,i).fill("none").stroke({color:n,width:o}):"circles"===e&&s.circle(t).fill("none").stroke({color:n,width:o})}))}},{key:"drawGradient",value:function(e,t,i,n,o){var s,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,c=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,d=this.w;t.length<9&&0===t.indexOf("#")&&(t=y.hexToRgba(t,n)),i.length<9&&0===i.indexOf("#")&&(i=y.hexToRgba(i,o));var u=0,h=1,g=1,p=null;null!==a&&(u=void 0!==a[0]?a[0]/100:0,h=void 0!==a[1]?a[1]/100:1,g=void 0!==a[2]?a[2]/100:1,p=void 0!==a[3]?a[3]/100:null);var f=!("donut"!==d.config.chart.type&&"pie"!==d.config.chart.type&&"polarArea"!==d.config.chart.type&&"bubble"!==d.config.chart.type);if(s=null===l||0===l.length?d.globals.dom.Paper.gradient(f?"radial":"linear",(function(e){e.at(u,t,n),e.at(h,i,o),e.at(g,i,o),null!==p&&e.at(p,t,n)})):d.globals.dom.Paper.gradient(f?"radial":"linear",(function(e){(Array.isArray(l[c])?l[c]:l).forEach((function(t){e.at(t.offset/100,t.color,t.opacity)}))})),f){var m=d.globals.gridWidth/2,v=d.globals.gridHeight/2;"bubble"!==d.config.chart.type?s.attr({gradientUnits:"userSpaceOnUse",cx:m,cy:v,r}):s.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else"vertical"===e?s.from(0,0).to(0,1):"diagonal"===e?s.from(0,0).to(1,1):"horizontal"===e?s.from(0,1).to(1,1):"diagonal2"===e&&s.from(1,0).to(0,1);return s}},{key:"getTextBasedOnMaxWidth",value:function(e){var t=e.text,i=e.maxWidth,n=e.fontSize,o=e.fontFamily,s=this.getTextRects(t,n,o),r=s.width/t.length,a=Math.floor(i/r);return i-1){var a=i.globals.selectedDataPoints[o].indexOf(s);i.globals.selectedDataPoints[o].splice(a,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,c=i.globals.dom.Paper.select(".apexcharts-series circle, .apexcharts-series rect").members,d=function(e){Array.prototype.forEach.call(e,(function(e){e.node.setAttribute("selected","false"),n.getDefaultFilter(e,o)}))};d(l),d(c)}e.node.setAttribute("selected","true"),r="true",void 0===i.globals.selectedDataPoints[o]&&(i.globals.selectedDataPoints[o]=[]),i.globals.selectedDataPoints[o].push(s)}if("true"===r){var u=i.config.states.active.filter;if("none"!==u)n.applyFilter(e,o,u.type,u.value);else if("none"!==i.config.states.hover.filter&&!i.globals.isTouchDevice){var h=i.config.states.hover.filter;n.applyFilter(e,o,h.type,h.value)}}else"none"!==i.config.states.active.filter.type&&("none"===i.config.states.hover.filter.type||i.globals.isTouchDevice?n.getDefaultFilter(e,o):(h=i.config.states.hover.filter,n.applyFilter(e,o,h.type,h.value)));"function"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:o,dataPointIndex:s,w:i}),t&&this.ctx.events.fireEvent("dataPointSelection",[t,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:o,dataPointIndex:s,w:i}])}},{key:"rotateAroundCenter",value:function(e){var t={};return e&&"function"==typeof e.getBBox&&(t=e.getBBox()),{x:t.x+t.width/2,y:t.y+t.height/2}}},{key:"getTextRects",value:function(e,t,i,n){var o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=this.w,r=this.drawText({x:-200,y:-200,text:e,textAnchor:"start",fontSize:t,fontFamily:i,foreColor:"#fff",opacity:0});n&&r.attr("transform",n),s.globals.dom.Paper.add(r);var a=r.bbox();return o||(a=r.node.getBoundingClientRect()),r.remove(),{width:a.width,height:a.height}}},{key:"placeTextWithEllipsis",value:function(e,t,i){if("function"==typeof e.getComputedTextLength&&(e.textContent=t,t.length>0&&e.getComputedTextLength()>=i/1.1)){for(var n=t.length-3;n>0;n-=3)if(e.getSubStringLength(0,n)<=i/1.1)return void(e.textContent=t.substring(0,n)+"...");e.textContent="."}}}],[{key:"setAttrs",value:function(e,t){for(var i in t)t.hasOwnProperty(i)&&e.setAttribute(i,t[i])}}]),e}(),S=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"getStackedSeriesTotals",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=this.w,i=[];if(0===t.globals.series.length)return i;for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:null;return null===e?this.w.config.series.reduce((function(e,t){return e+t}),0):this.w.globals.series[e].reduce((function(e,t){return e+t}),0)}},{key:"isSeriesNull",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===e?this.w.config.series.filter((function(e){return null!==e})):this.w.config.series[e].data.filter((function(e){return null!==e}))).length}},{key:"seriesHaveSameValues",value:function(e){return this.w.globals.series[e].every((function(e,t,i){return e===i[0]}))}},{key:"getCategoryLabels",value:function(e){var t=this.w,i=e.slice();return t.config.xaxis.convertedCatToNumeric&&(i=e.map((function(e,i){return t.config.xaxis.labels.formatter(e-t.globals.minX+1)}))),i}},{key:"getLargestSeries",value:function(){var e=this.w;e.globals.maxValsInArrayIndex=e.globals.series.map((function(e){return e.length})).indexOf(Math.max.apply(Math,e.globals.series.map((function(e){return e.length}))))}},{key:"getLargestMarkerSize",value:function(){var e=this.w,t=0;return e.globals.markers.size.forEach((function(e){t=Math.max(t,e)})),e.config.markers.discrete&&e.config.markers.discrete.length&&e.config.markers.discrete.forEach((function(e){t=Math.max(t,e.size)})),t>0&&(t+=e.config.markers.hover.sizeOffset+1),e.globals.markers.largestSize=t,t}},{key:"getSeriesTotals",value:function(){var e=this.w;e.globals.seriesTotals=e.globals.series.map((function(e,t){var i=0;if(Array.isArray(e))for(var n=0;ne&&i.globals.seriesX[o][r]0&&(t=!0),{comboBarCount:i,comboCharts:t}}},{key:"extendArrayProps",value:function(e,t,i){return t.yaxis&&(t=e.extendYAxis(t,i)),t.annotations&&(t.annotations.yaxis&&(t=e.extendYAxisAnnotations(t)),t.annotations.xaxis&&(t=e.extendXAxisAnnotations(t)),t.annotations.points&&(t=e.extendPointAnnotations(t))),t}}]),e}(),k=function(){function e(t){a(this,e),this.w=t.w,this.annoCtx=t}return c(e,[{key:"setOrientations",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;if("vertical"===e.label.orientation){var n=null!==t?t:0,o=i.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(n,"']"));if(null!==o){var s=o.getBoundingClientRect();o.setAttribute("x",parseFloat(o.getAttribute("x"))-s.height+4),"top"===e.label.position?o.setAttribute("y",parseFloat(o.getAttribute("y"))+s.width):o.setAttribute("y",parseFloat(o.getAttribute("y"))-s.width);var r=this.annoCtx.graphics.rotateAroundCenter(o),a=r.x,l=r.y;o.setAttribute("transform","rotate(-90 ".concat(a," ").concat(l,")"))}}}},{key:"addBackgroundToAnno",value:function(e,t){var i=this.w;if(!e||void 0===t.label.text||void 0!==t.label.text&&!String(t.label.text).trim())return null;var n=i.globals.dom.baseEl.querySelector(".apexcharts-grid").getBoundingClientRect(),o=e.getBoundingClientRect(),s=t.label.style.padding.left,r=t.label.style.padding.right,a=t.label.style.padding.top,l=t.label.style.padding.bottom;"vertical"===t.label.orientation&&(a=t.label.style.padding.left,l=t.label.style.padding.right,s=t.label.style.padding.top,r=t.label.style.padding.bottom);var c=o.left-n.left-s,d=o.top-n.top-a,u=this.annoCtx.graphics.drawRect(c-i.globals.barPadForNumericAxis,d,o.width+s+r,o.height+a+l,t.label.borderRadius,t.label.style.background,1,t.label.borderWidth,t.label.borderColor,0);return t.id&&u.node.classList.add(t.id),u}},{key:"annotationsBackground",value:function(){var e=this,t=this.w,i=function(i,n,o){var s=t.globals.dom.baseEl.querySelector(".apexcharts-".concat(o,"-annotations .apexcharts-").concat(o,"-annotation-label[rel='").concat(n,"']"));if(s){var r=s.parentNode,a=e.addBackgroundToAnno(s,i);a&&(r.insertBefore(a.node,s),i.label.mouseEnter&&a.node.addEventListener("mouseenter",i.label.mouseEnter.bind(e,i)),i.label.mouseLeave&&a.node.addEventListener("mouseleave",i.label.mouseLeave.bind(e,i)),i.label.click&&a.node.addEventListener("click",i.label.click.bind(e,i)))}};t.config.annotations.xaxis.map((function(e,t){i(e,t,"xaxis")})),t.config.annotations.yaxis.map((function(e,t){i(e,t,"yaxis")})),t.config.annotations.points.map((function(e,t){i(e,t,"point")}))}},{key:"getY1Y2",value:function(e,t){var i,n="y1"===e?t.y:t.y2,o=this.w;if(this.annoCtx.invertAxis){var s=o.globals.labels.indexOf(n);o.config.xaxis.convertedCatToNumeric&&(s=o.globals.categoryLabels.indexOf(n));var r=o.globals.dom.baseEl.querySelector(".apexcharts-yaxis-texts-g text:nth-child("+(s+1)+")");r&&(i=parseFloat(r.getAttribute("y")))}else{var a;a=o.config.yaxis[t.yAxisIndex].logarithmic?(n=new S(this.annoCtx.ctx).getLogVal(n,t.yAxisIndex))/o.globals.yLogRatio[t.yAxisIndex]:(n-o.globals.minYArr[t.yAxisIndex])/(o.globals.yRange[t.yAxisIndex]/o.globals.gridHeight),i=o.globals.gridHeight-a,!t.marker||void 0!==t.y&&null!==t.y||(i=0),o.config.yaxis[t.yAxisIndex]&&o.config.yaxis[t.yAxisIndex].reversed&&(i=a)}return"string"==typeof n&&n.indexOf("px")>-1&&(i=parseFloat(n)),i}},{key:"getX1X2",value:function(e,t){var i=this.w,n=this.annoCtx.invertAxis?i.globals.minY:i.globals.minX,o=this.annoCtx.invertAxis?i.globals.maxY:i.globals.maxX,s=this.annoCtx.invertAxis?i.globals.yRange[0]:i.globals.xRange,r=(t.x-n)/(s/i.globals.gridWidth);this.annoCtx.inversedReversedAxis&&(r=(o-t.x)/(s/i.globals.gridWidth)),"category"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(r=this.getStringX(t.x));var a=(t.x2-n)/(s/i.globals.gridWidth);return this.annoCtx.inversedReversedAxis&&(a=(o-t.x2)/(s/i.globals.gridWidth)),"category"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(a=this.getStringX(t.x2)),void 0!==t.x&&null!==t.x||!t.marker||(r=i.globals.gridWidth),"x1"===e&&"string"==typeof t.x&&t.x.indexOf("px")>-1&&(r=parseFloat(t.x)),"x2"===e&&"string"==typeof t.x2&&t.x2.indexOf("px")>-1&&(a=parseFloat(t.x2)),"x1"===e?r:a}},{key:"getStringX",value:function(e){var t=this.w,i=e;t.config.xaxis.convertedCatToNumeric&&t.globals.categoryLabels.length&&(e=t.globals.categoryLabels.indexOf(e)+1);var n=t.globals.labels.indexOf(e),o=t.globals.dom.baseEl.querySelector(".apexcharts-xaxis-texts-g text:nth-child("+(n+1)+")");return o&&(i=parseFloat(o.getAttribute("x"))),i}}]),e}(),L=function(){function e(t){a(this,e),this.w=t.w,this.annoCtx=t,this.invertAxis=this.annoCtx.invertAxis,this.helpers=new k(this.annoCtx)}return c(e,[{key:"addXaxisAnnotation",value:function(e,t,i){var n,o=this.w,s=this.helpers.getX1X2("x1",e),r=e.label.text,a=e.strokeDashArray;if(y.isNumber(s)){if(null===e.x2||void 0===e.x2){var l=this.annoCtx.graphics.drawLine(s+e.offsetX,0+e.offsetY,s+e.offsetX,o.globals.gridHeight+e.offsetY,e.borderColor,a,e.borderWidth);t.appendChild(l.node),e.id&&l.node.classList.add(e.id)}else{if((n=this.helpers.getX1X2("x2",e))r){var c=r;r=n,n=c}var d=this.annoCtx.graphics.drawRect(0+e.offsetX,n+e.offsetY,this._getYAxisAnnotationWidth(e),r-n,0,e.fillColor,e.opacity,1,e.borderColor,s);d.node.classList.add("apexcharts-annotation-rect"),d.attr("clip-path","url(#gridRectMask".concat(o.globals.cuid,")")),t.appendChild(d.node),e.id&&d.node.classList.add(e.id)}var u="right"===e.label.position?o.globals.gridWidth:"center"===e.label.position?o.globals.gridWidth/2:0,h=this.annoCtx.graphics.drawText({x:u+e.label.offsetX,y:(null!=n?n:r)+e.label.offsetY-3,text:a,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-yaxis-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});h.attr({rel:i}),t.appendChild(h.node)}},{key:"_getYAxisAnnotationWidth",value:function(e){var t=this.w;return t.globals.gridWidth,(e.width.indexOf("%")>-1?t.globals.gridWidth*parseInt(e.width,10)/100:parseInt(e.width,10))+e.offsetX}},{key:"drawYAxisAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-yaxis-annotations"});return t.config.annotations.yaxis.map((function(t,n){e.addYaxisAnnotation(t,i.node,n)})),i}}]),e}(),N=function(){function e(t){a(this,e),this.w=t.w,this.annoCtx=t,this.helpers=new k(this.annoCtx)}return c(e,[{key:"addPointAnnotation",value:function(e,t,i){this.w;var n=this.helpers.getX1X2("x1",e),o=this.helpers.getY1Y2("y1",e);if(y.isNumber(n)){var s={pSize:e.marker.size,pointStrokeWidth:e.marker.strokeWidth,pointFillColor:e.marker.fillColor,pointStrokeColor:e.marker.strokeColor,shape:e.marker.shape,pRadius:e.marker.radius,class:"apexcharts-point-annotation-marker ".concat(e.marker.cssClass," ").concat(e.id?e.id:"")},r=this.annoCtx.graphics.drawMarker(n+e.marker.offsetX,o+e.marker.offsetY,s);t.appendChild(r.node);var a=e.label.text?e.label.text:"",l=this.annoCtx.graphics.drawText({x:n+e.label.offsetX,y:o+e.label.offsetY-e.marker.size-parseFloat(e.label.style.fontSize)/1.6,text:a,textAnchor:e.label.textAnchor,fontSize:e.label.style.fontSize,fontFamily:e.label.style.fontFamily,fontWeight:e.label.style.fontWeight,foreColor:e.label.style.color,cssClass:"apexcharts-point-annotation-label ".concat(e.label.style.cssClass," ").concat(e.id?e.id:"")});if(l.attr({rel:i}),t.appendChild(l.node),e.customSVG.SVG){var c=this.annoCtx.graphics.group({class:"apexcharts-point-annotations-custom-svg "+e.customSVG.cssClass});c.attr({transform:"translate(".concat(n+e.customSVG.offsetX,", ").concat(o+e.customSVG.offsetY,")")}),c.node.innerHTML=e.customSVG.SVG,t.appendChild(c.node)}if(e.image.path){var d=e.image.width?e.image.width:20,u=e.image.height?e.image.height:20;r=this.annoCtx.addImage({x:n+e.image.offsetX-d/2,y:o+e.image.offsetY-u/2,width:d,height:u,path:e.image.path,appendTo:".apexcharts-point-annotations"})}e.mouseEnter&&r.node.addEventListener("mouseenter",e.mouseEnter.bind(this,e)),e.mouseLeave&&r.node.addEventListener("mouseleave",e.mouseLeave.bind(this,e)),e.click&&r.node.addEventListener("click",e.click.bind(this,e))}}},{key:"drawPointAnnotations",value:function(){var e=this,t=this.w,i=this.annoCtx.graphics.group({class:"apexcharts-point-annotations"});return t.config.annotations.points.map((function(t,n){e.addPointAnnotation(t,i.node,n)})),i}}]),e}(),D={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"}}},T=function(){function e(){a(this,e),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,logBase:10,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={id:void 0,x:0,y:null,yAxisIndex:0,seriesIndex:0,mouseEnter:void 0,mouseLeave:void 0,click:void 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,mouseEnter:void 0,mouseLeave:void 0,click:void 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={id:void 0,y:0,y2:null,strokeDashArray:1,fillColor:"#c2c2c2",borderColor:"#c2c2c2",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:"100%",yAxisIndex:0,label:{borderColor:"#c2c2c2",borderWidth:1,borderRadius:2,text:void 0,textAnchor:"end",position:"right",offsetX:0,offsetY:-3,mouseEnter:void 0,mouseLeave:void 0,click:void 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.xAxisAnnotation={id:void 0,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,mouseEnter:void 0,mouseLeave:void 0,click:void 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}}return c(e,[{key:"init",value:function(){return{annotations:{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:[D],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,mouseLeave:void 0,xAxisLabelClick:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:"#373d3f",fontFamily:"Helvetica, Arial, sans-serif",height:"auto",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!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:[]},export:{csv:{filename:void 0,columnDelimiter:",",headerCategory:"category",headerValue:"value",dateFormatter:function(e){return new Date(e).toDateString()}},png:{filename:void 0},svg:{filename:void 0}},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:{area:{fillTo:"origin"},bar:{horizontal:!1,columnWidth:"70%",barHeight:"70%",distributed:!1,borderRadius:0,borderRadiusApplication:"around",borderRadiusWhenStacked:"last",rangeBarOverlap:!0,rangeBarGroupRows:!1,hideZeroBarsWhenGrouped:!1,isDumbbell:!1,dumbbellColors:void 0,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:"top",maxItems:100,hideOverflowingLabels:!0,orientation:"horizontal",total:{enabled:!1,formatter:void 0,offsetX:0,offsetY:0,style:{color:"#373d3f",fontSize:"12px",fontFamily:void 0,fontWeight:600}}}},bubble:{zScaling:!0,minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:"#00B746",downward:"#EF403C"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:"#00E396",lower:"#008FFB"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!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(e){return e}},value:{show:!0,fontSize:"14px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(e){return e+"%"}},total:{show:!1,label:"Total",fontSize:"16px",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce((function(e,t){return e+t}),0)/e.globals.series.length+"%"}}}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,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(e){return e}},value:{show:!0,fontSize:"20px",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(e){return e}},total:{show:!1,showAlways:!1,label:"Total",fontSize:"16px",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(e){return e.globals.seriesTotals.reduce((function(e,t){return e+t}),0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:"#e8e8e8"},spokes:{strokeWidth:1,connectorColors:"#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(e){return null!==e?e:""},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}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},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:4,customLegendItems:[],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:2},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",width:8,height:8,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:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:"darken",value:.5}}},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,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:[]}}},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:"light",cssClass:"",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(e){return e?e+": ":""}}},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,offsetX:0,offsetY:0,overwriteCategories:void 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",second:"HH:mm:ss"}},group:{groups:[],style:{colors:[],fontSize:"12px",fontWeight:400,fontFamily:void 0,cssClass:""}},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,decimalsInFloat:void 0,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}}}}}]),e}(),A=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.graphics=new C(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new k(this),this.xAxisAnnotations=new L(this),this.yAxisAnnotations=new E(this),this.pointsAnnotations=new N(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 c(e,[{key:"drawAxesAnnotations",value:function(){var e=this.w;if(e.globals.axisCharts){for(var t=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),n=this.pointsAnnotations.drawPointAnnotations(),o=e.config.chart.animations.enabled,s=[t,i,n],r=[i.node,t.node,n.node],a=0;a<3;a++)e.globals.dom.elGraphical.add(s[a]),!o||e.globals.resized||e.globals.dataChanged||"scatter"!==e.config.chart.type&&"bubble"!==e.config.chart.type&&e.globals.dataPoints>1&&r[a].classList.add("apexcharts-element-hidden"),e.globals.delayedElements.push({el:r[a],index:0});this.helpers.annotationsBackground()}}},{key:"drawImageAnnos",value:function(){var e=this;this.w.config.annotations.images.map((function(t,i){e.addImage(t,i)}))}},{key:"drawTextAnnos",value:function(){var e=this;this.w.config.annotations.texts.map((function(t,i){e.addText(t,i)}))}},{key:"addXaxisAnnotation",value:function(e,t,i){this.xAxisAnnotations.addXaxisAnnotation(e,t,i)}},{key:"addYaxisAnnotation",value:function(e,t,i){this.yAxisAnnotations.addYaxisAnnotation(e,t,i)}},{key:"addPointAnnotation",value:function(e,t,i){this.pointsAnnotations.addPointAnnotation(e,t,i)}},{key:"addText",value:function(e,t){var i=e.x,n=e.y,o=e.text,s=e.textAnchor,r=e.foreColor,a=e.fontSize,l=e.fontFamily,c=e.fontWeight,d=e.cssClass,u=e.backgroundColor,h=e.borderWidth,g=e.strokeDashArray,p=e.borderRadius,f=e.borderColor,m=e.appendTo,v=void 0===m?".apexcharts-annotations":m,_=e.paddingLeft,b=void 0===_?4:_,y=e.paddingRight,w=void 0===y?4:y,x=e.paddingBottom,C=void 0===x?2:x,S=e.paddingTop,k=void 0===S?2:S,L=this.w,E=this.graphics.drawText({x:i,y:n,text:o,textAnchor:s||"start",fontSize:a||"12px",fontWeight:c||"regular",fontFamily:l||L.config.chart.fontFamily,foreColor:r||L.config.chart.foreColor,cssClass:d}),N=L.globals.dom.baseEl.querySelector(v);N&&N.appendChild(E.node);var D=E.bbox();if(o){var T=this.graphics.drawRect(D.x-b,D.y-k,D.width+b+w,D.height+C+k,p,u||"transparent",1,h,f,g);N.insertBefore(T.node,E.node)}}},{key:"addImage",value:function(e,t){var i=this.w,n=e.path,o=e.x,s=void 0===o?0:o,r=e.y,a=void 0===r?0:r,l=e.width,c=void 0===l?20:l,d=e.height,u=void 0===d?20:d,h=e.appendTo,g=void 0===h?".apexcharts-annotations":h,p=i.globals.dom.Paper.image(n);p.size(c,u).move(s,a);var f=i.globals.dom.baseEl.querySelector(g);return f&&f.appendChild(p.node),p}},{key:"addXaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"xaxis",contextMethod:i.addXaxisAnnotation}),i}},{key:"addYaxisAnnotationExternal",value:function(e,t,i){return this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"yaxis",contextMethod:i.addYaxisAnnotation}),i}},{key:"addPointAnnotationExternal",value:function(e,t,i){return void 0===this.invertAxis&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:e,pushToMemory:t,context:i,type:"point",contextMethod:i.addPointAnnotation}),i}},{key:"addAnnotationExternal",value:function(e){var t=e.params,i=e.pushToMemory,n=e.context,o=e.type,s=e.contextMethod,r=n,a=r.w,l=a.globals.dom.baseEl.querySelector(".apexcharts-".concat(o,"-annotations")),c=l.childNodes.length+1,d=new T,u=Object.assign({},"xaxis"===o?d.xAxisAnnotation:"yaxis"===o?d.yAxisAnnotation:d.pointAnnotation),h=y.extend(u,t);switch(o){case"xaxis":this.addXaxisAnnotation(h,l,c);break;case"yaxis":this.addYaxisAnnotation(h,l,c);break;case"point":this.addPointAnnotation(h,l,c)}var g=a.globals.dom.baseEl.querySelector(".apexcharts-".concat(o,"-annotations .apexcharts-").concat(o,"-annotation-label[rel='").concat(c,"']")),p=this.helpers.addBackgroundToAnno(g,h);return p&&l.insertBefore(p.node,g),i&&a.globals.memory.methodsToExec.push({context:r,id:h.id?h.id:y.randomId(),method:s,label:"addAnnotation",params:t}),n}},{key:"clearAnnotations",value:function(e){var t=e.w,i=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations");t.globals.memory.methodsToExec.map((function(e,i){"addText"!==e.label&&"addAnnotation"!==e.label||t.globals.memory.methodsToExec.splice(i,1)})),i=y.listToArray(i),Array.prototype.forEach.call(i,(function(e){for(;e.firstChild;)e.removeChild(e.firstChild)}))}},{key:"removeAnnotation",value:function(e,t){var i=e.w,n=i.globals.dom.baseEl.querySelectorAll(".".concat(t));n&&(i.globals.memory.methodsToExec.map((function(e,n){e.id===t&&i.globals.memory.methodsToExec.splice(n,1)})),Array.prototype.forEach.call(n,(function(e){e.parentElement.removeChild(e)})))}}]),e}(),I=function(){function e(t){a(this,e),this.ctx=t,this.w=t.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 c(e,[{key:"isValidDate",value:function(e){return!isNaN(this.parseDate(e))}},{key:"getTimeStamp",value:function(e){return Date.parse(e)?this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(e).toISOString().substr(0,25)).getTime():new Date(e).getTime():e}},{key:"getDate",value:function(e){return this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(e).toUTCString()):new Date(e)}},{key:"parseDate",value:function(e){var t=Date.parse(e);if(!isNaN(t))return this.getTimeStamp(e);var i=Date.parse(e.replace(/-/g,"/").replace(/[a-z]+/gi," "));return this.getTimeStamp(i)}},{key:"parseDateWithTimezone",value:function(e){return Date.parse(e.replace(/-/g,"/").replace(/[a-z]+/gi," "))}},{key:"formatDate",value:function(e,t){var i=this.w.globals.locale,n=this.w.config.xaxis.labels.datetimeUTC,o=["\0"].concat(v(i.months)),s=[""].concat(v(i.shortMonths)),r=[""].concat(v(i.days)),a=[""].concat(v(i.shortDays));function l(e,t){var i=e+"";for(t=t||2;i.length12?h-12:0===h?12:h;t=(t=(t=(t=t.replace(/(^|[^\\])HH+/g,"$1"+l(h))).replace(/(^|[^\\])H/g,"$1"+h)).replace(/(^|[^\\])hh+/g,"$1"+l(g))).replace(/(^|[^\\])h/g,"$1"+g);var p=n?e.getUTCMinutes():e.getMinutes();t=(t=t.replace(/(^|[^\\])mm+/g,"$1"+l(p))).replace(/(^|[^\\])m/g,"$1"+p);var f=n?e.getUTCSeconds():e.getSeconds();t=(t=t.replace(/(^|[^\\])ss+/g,"$1"+l(f))).replace(/(^|[^\\])s/g,"$1"+f);var m=n?e.getUTCMilliseconds():e.getMilliseconds();t=t.replace(/(^|[^\\])fff+/g,"$1"+l(m,3)),m=Math.round(m/10),t=t.replace(/(^|[^\\])ff/g,"$1"+l(m)),m=Math.round(m/10);var _=h<12?"AM":"PM";t=(t=(t=t.replace(/(^|[^\\])f/g,"$1"+m)).replace(/(^|[^\\])TT+/g,"$1"+_)).replace(/(^|[^\\])T/g,"$1"+_.charAt(0));var b=_.toLowerCase();t=(t=t.replace(/(^|[^\\])tt+/g,"$1"+b)).replace(/(^|[^\\])t/g,"$1"+b.charAt(0));var y=-e.getTimezoneOffset(),w=n||!y?"Z":y>0?"+":"-";if(!n){var x=(y=Math.abs(y))%60;w+=l(Math.floor(y/60))+":"+l(x)}t=t.replace(/(^|[^\\])K/g,"$1"+w);var C=(n?e.getUTCDay():e.getDay())+1;return(t=(t=(t=(t=t.replace(new RegExp(r[0],"g"),r[C])).replace(new RegExp(a[0],"g"),a[C])).replace(new RegExp(o[0],"g"),o[d])).replace(new RegExp(s[0],"g"),s[d])).replace(/\\(.)/g,"$1")}},{key:"getTimeUnitsfromTimestamp",value:function(e,t,i){var n=this.w;void 0!==n.config.xaxis.min&&(e=n.config.xaxis.min),void 0!==n.config.xaxis.max&&(t=n.config.xaxis.max);var o=this.getDate(e),s=this.getDate(t),r=this.formatDate(o,"yyyy MM dd HH mm ss fff").split(" "),a=this.formatDate(s,"yyyy MM dd HH mm ss fff").split(" ");return{minMillisecond:parseInt(r[6],10),maxMillisecond:parseInt(a[6],10),minSecond:parseInt(r[5],10),maxSecond:parseInt(a[5],10),minMinute:parseInt(r[4],10),maxMinute:parseInt(a[4],10),minHour:parseInt(r[3],10),maxHour:parseInt(a[3],10),minDate:parseInt(r[2],10),maxDate:parseInt(a[2],10),minMonth:parseInt(r[1],10)-1,maxMonth:parseInt(a[1],10)-1,minYear:parseInt(r[0],10),maxYear:parseInt(a[0],10)}}},{key:"isLeapYear",value:function(e){return e%4==0&&e%100!=0||e%400==0}},{key:"calculcateLastDaysOfMonth",value:function(e,t,i){return this.determineDaysOfMonths(e,t)-i}},{key:"determineDaysOfYear",value:function(e){var t=365;return this.isLeapYear(e)&&(t=366),t}},{key:"determineRemainingDaysOfYear",value:function(e,t,i){var n=this.daysCntOfYear[t]+i;return t>1&&this.isLeapYear()&&n++,n}},{key:"determineDaysOfMonths",value:function(e,t){var i=30;switch(e=y.monthMod(e),!0){case this.months30.indexOf(e)>-1:2===e&&(i=this.isLeapYear(t)?29:28);break;case this.months31.indexOf(e)>-1:default:i=31}return i}}]),e}(),R=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.tooltipKeyFormat="dd MMM"}return c(e,[{key:"xLabelFormat",value:function(e,t,i,n){var o=this.w;if("datetime"===o.config.xaxis.type&&void 0===o.config.xaxis.labels.formatter&&void 0===o.config.tooltip.x.formatter){var s=new I(this.ctx);return s.formatDate(s.getDate(t),o.config.tooltip.x.format)}return e(t,i,n)}},{key:"defaultGeneralFormatter",value:function(e){return Array.isArray(e)?e.map((function(e){return e})):e}},{key:"defaultYFormatter",value:function(e,t,i){var n=this.w;return y.isNumber(e)&&(e=0!==n.globals.yValueDecimal?e.toFixed(void 0!==t.decimalsInFloat?t.decimalsInFloat:n.globals.yValueDecimal):n.globals.maxYArr[i]-n.globals.minYArr[i]<5?e.toFixed(1):e.toFixed(0)),e}},{key:"setLabelFormatters",value:function(){var e=this,t=this.w;return t.globals.xaxisTooltipFormatter=function(t){return e.defaultGeneralFormatter(t)},t.globals.ttKeyFormatter=function(t){return e.defaultGeneralFormatter(t)},t.globals.ttZFormatter=function(e){return e},t.globals.legendFormatter=function(t){return e.defaultGeneralFormatter(t)},void 0!==t.config.xaxis.labels.formatter?t.globals.xLabelFormatter=t.config.xaxis.labels.formatter:t.globals.xLabelFormatter=function(e){if(y.isNumber(e)){if(!t.config.xaxis.convertedCatToNumeric&&"numeric"===t.config.xaxis.type){if(y.isNumber(t.config.xaxis.decimalsInFloat))return e.toFixed(t.config.xaxis.decimalsInFloat);var i=t.globals.maxX-t.globals.minX;return i>0&&i<100?e.toFixed(1):e.toFixed(0)}return t.globals.isBarHorizontal&&t.globals.maxY-t.globals.minYArr<4?e.toFixed(1):e.toFixed(0)}return e},"function"==typeof t.config.tooltip.x.formatter?t.globals.ttKeyFormatter=t.config.tooltip.x.formatter:t.globals.ttKeyFormatter=t.globals.xLabelFormatter,"function"==typeof t.config.xaxis.tooltip.formatter&&(t.globals.xaxisTooltipFormatter=t.config.xaxis.tooltip.formatter),(Array.isArray(t.config.tooltip.y)||void 0!==t.config.tooltip.y.formatter)&&(t.globals.ttVal=t.config.tooltip.y),void 0!==t.config.tooltip.z.formatter&&(t.globals.ttZFormatter=t.config.tooltip.z.formatter),void 0!==t.config.legend.formatter&&(t.globals.legendFormatter=t.config.legend.formatter),t.config.yaxis.forEach((function(i,n){void 0!==i.labels.formatter?t.globals.yLabelFormatters[n]=i.labels.formatter:t.globals.yLabelFormatters[n]=function(o){return t.globals.xyCharts?Array.isArray(o)?o.map((function(t){return e.defaultYFormatter(t,i,n)})):e.defaultYFormatter(o,i,n):o}})),t.globals}},{key:"heatmapLabelFormatters",value:function(){var e=this.w;if("heatmap"===e.config.chart.type){e.globals.yAxisScale[0].result=e.globals.seriesNames.slice();var t=e.globals.seriesNames.reduce((function(e,t){return e.length>t.length?e:t}),0);e.globals.yAxisScale[0].niceMax=t,e.globals.yAxisScale[0].niceMin=t}}}]),e}(),M=function(e){var t,i=e.isTimeline,n=e.ctx,o=e.seriesIndex,s=e.dataPointIndex,r=e.y1,a=e.y2,l=e.w,c=l.globals.seriesRangeStart[o][s],d=l.globals.seriesRangeEnd[o][s],u=l.globals.labels[s],h=l.config.series[o].name?l.config.series[o].name:"",g=l.globals.ttKeyFormatter,p=l.config.tooltip.y.title.formatter,f={w:l,seriesIndex:o,dataPointIndex:s,start:c,end:d};"function"==typeof p&&(h=p(h,f)),null!==(t=l.config.series[o].data[s])&&void 0!==t&&t.x&&(u=l.config.series[o].data[s].x),i||"datetime"===l.config.xaxis.type&&(u=new R(n).xLabelFormat(l.globals.ttKeyFormatter,u,u,{i:void 0,dateFormatter:new I(n).formatDate,w:l})),"function"==typeof g&&(u=g(u,f)),Number.isFinite(r)&&Number.isFinite(a)&&(c=r,d=a);var m="",v="",_=l.globals.colors[o];if(void 0===l.config.tooltip.x.formatter)if("datetime"===l.config.xaxis.type){var b=new I(n);m=b.formatDate(b.getDate(c),l.config.tooltip.x.format),v=b.formatDate(b.getDate(d),l.config.tooltip.x.format)}else m=c,v=d;else m=l.config.tooltip.x.formatter(c),v=l.config.tooltip.x.formatter(d);return{start:c,end:d,startVal:m,endVal:v,ylabel:u,color:_,seriesName:h}},P=function(e){var t=e.color,i=e.seriesName,n=e.ylabel,o=e.start,s=e.end,r=e.seriesIndex,a=e.dataPointIndex,l=e.ctx.tooltip.tooltipLabels.getFormatters(r);o=l.yLbFormatter(o),s=l.yLbFormatter(s);var c=l.yLbFormatter(e.w.globals.series[r][a]),d='\n '.concat(o,'\n - \n ').concat(s,"\n ");return'
    '+(i||"")+'
    '+n+": "+(e.w.globals.comboCharts?"rangeArea"===e.w.config.series[r].type||"rangeBar"===e.w.config.series[r].type?d:"".concat(c,""):d)+"
    "},O=function(){function e(t){a(this,e),this.opts=t}return c(e,[{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(e){return 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,y.extend(e,{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:"round"},fill:{opacity:.85},legend:{markers:{shape:"square",radius:2,size:8}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:"between",crosshairs:{width:"barWidth",position:"back",fill:{type:"gradient"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:"candlestick",value:function(){var e=this;return{stroke:{width:1,colors:["#333"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,n=t.dataPointIndex,o=t.w;return e._getBoxTooltip(o,i,n,["Open","High","","Low","Close"],"candlestick")}},states:{active:{filter:{type:"none"}}},xaxis:{crosshairs:{width:1}}}}},{key:"boxPlot",value:function(){var e=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:["#24292e"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(t){var i=t.seriesIndex,n=t.dataPointIndex,o=t.w;return e._getBoxTooltip(o,i,n,["Minimum","Q1","Median","Q3","Maximum"],"boxPlot")}},markers:{size:5,strokeWidth:1,strokeColors:"#111"},xaxis:{crosshairs:{width:1}}}}},{key:"rangeBar",value:function(){return{chart:{animations:{animateGradually:!1}},stroke:{width:0,lineCap:"square"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:"center"}}},dataLabels:{enabled:!1,formatter:function(e,t){t.ctx;var i=t.seriesIndex,n=t.dataPointIndex,o=t.w,s=function(){var e=o.globals.seriesRangeStart[i][n];return o.globals.seriesRangeEnd[i][n]-e};return o.globals.comboCharts?"rangeBar"===o.config.series[i].type||"rangeArea"===o.config.series[i].type?s():e:s()},background:{enabled:!1},style:{colors:["#fff"]}},markers:{size:10},tooltip:{shared:!1,followCursor:!0,custom:function(e){return e.w.config.plotOptions&&e.w.config.plotOptions.bar&&e.w.config.plotOptions.bar.horizontal?function(e){var t=M(s(s({},e),{},{isTimeline:!0})),i=t.color,n=t.seriesName,o=t.ylabel,r=t.startVal,a=t.endVal;return P(s(s({},e),{},{color:i,seriesName:n,ylabel:o,start:r,end:a}))}(e):function(e){var t=M(e),i=t.color,n=t.seriesName,o=t.ylabel,r=t.start,a=t.end;return P(s(s({},e),{},{color:i,seriesName:n,ylabel:o,start:r,end:a}))}(e)}},xaxis:{tickPlacement:"between",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:"dumbbell",value:function(e){var t,i;return null!==(t=e.plotOptions.bar)&&void 0!==t&&t.barHeight||(e.plotOptions.bar.barHeight=2),null!==(i=e.plotOptions.bar)&&void 0!==i&&i.columnWidth||(e.plotOptions.bar.columnWidth=2),e}},{key:"area",value:function(){return{stroke:{width:4,fill:{type:"solid",gradient:{inverseColors:!1,shade:"light",type:"vertical",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}}},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:"rangeArea",value:function(){return{stroke:{curve:"straight",width:0},fill:{type:"solid",opacity:.6},markers:{size:0},states:{hover:{filter:{type:"none"}},active:{filter:{type:"none"}}},tooltip:{intersect:!1,shared:!0,followCursor:!0,custom:function(e){return function(e){var t=M(e),i=t.color,n=t.seriesName,o=t.ylabel,r=t.start,a=t.end;return P(s(s({},e),{},{color:i,seriesName:n,ylabel:o,start:r,end:a}))}(e)}}}}},{key:"brush",value:function(e){return y.extend(e,{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(e){e.dataLabels=e.dataLabels||{},e.dataLabels.formatter=e.dataLabels.formatter||void 0;var t=e.dataLabels.formatter;return e.yaxis.forEach((function(t,i){e.yaxis[i].min=0,e.yaxis[i].max=100})),"bar"===e.chart.type&&(e.dataLabels.formatter=t||function(e){return"number"==typeof e&&e?e.toFixed(0)+"%":e}),e}},{key:"stackedBars",value:function(){var e=this.bar();return s(s({},e),{},{plotOptions:s(s({},e.plotOptions),{},{bar:s(s({},e.plotOptions.bar),{},{borderRadiusApplication:"end",borderRadiusWhenStacked:"last"})})})}},{key:"convertCatToNumeric",value:function(e){return e.xaxis.convertedCatToNumeric=!0,e}},{key:"convertCatToNumericXaxis",value:function(e,t,i){e.xaxis.type="numeric",e.xaxis.labels=e.xaxis.labels||{},e.xaxis.labels.formatter=e.xaxis.labels.formatter||function(e){return y.isNumber(e)?Math.floor(e):e};var n=e.xaxis.labels.formatter,o=e.xaxis.categories&&e.xaxis.categories.length?e.xaxis.categories:e.labels;return i&&i.length&&(o=i.map((function(e){return Array.isArray(e)?e:String(e)}))),o&&o.length&&(e.xaxis.labels.formatter=function(e){return y.isNumber(e)?n(o[Math.floor(e)-1]):n(e)}),e.xaxis.categories=[],e.labels=[],e.xaxis.tickAmount=e.xaxis.tickAmount||"dataPoints",e}},{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:"treemap",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:["#fff"]}},stroke:{show:!0,width:2,colors:["#fff"]},legend:{show:!1},fill:{gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:"pie",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},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(e){return e.toFixed(1)+"%"},style:{colors:["#fff"]},background:{enabled:!1},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(e){return e.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(e){return e},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}}}},{key:"_getBoxTooltip",value:function(e,t,i,n,o){var s=e.globals.seriesCandleO[t][i],r=e.globals.seriesCandleH[t][i],a=e.globals.seriesCandleM[t][i],l=e.globals.seriesCandleL[t][i],c=e.globals.seriesCandleC[t][i];return e.config.series[t].type&&e.config.series[t].type!==o?'
    \n '.concat(e.config.series[t].name?e.config.series[t].name:"series-"+(t+1),": ").concat(e.globals.series[t][i],"\n
    "):'
    ')+"
    ".concat(n[0],': ')+s+"
    "+"
    ".concat(n[1],': ')+r+"
    "+(a?"
    ".concat(n[2],': ')+a+"
    ":"")+"
    ".concat(n[3],': ')+l+"
    "+"
    ".concat(n[4],': ')+c+"
    "}}]),e}(),F=function(){function e(t){a(this,e),this.opts=t}return c(e,[{key:"init",value:function(e){var t=e.responsiveOverride,i=this.opts,n=new T,o=new O(i);this.chartType=i.chart.type,i=this.extendYAxis(i),i=this.extendAnnotations(i);var s=n.init(),a={};if(i&&"object"===r(i)){var l,c,d,u,h,g,p={};p=-1!==["line","area","bar","candlestick","boxPlot","rangeBar","rangeArea","bubble","scatter","heatmap","treemap","pie","polarArea","donut","radar","radialBar"].indexOf(i.chart.type)?o[i.chart.type]():o.line(),i.chart.stacked&&"bar"===i.chart.type&&(p=o.stackedBars()),null!==(l=i.chart.brush)&&void 0!==l&&l.enabled&&(p=o.brush(p)),i.chart.stacked&&"100%"===i.chart.stackType&&(i=o.stacked100(i)),null!==(c=i.plotOptions)&&void 0!==c&&null!==(d=c.bar)&&void 0!==d&&d.isDumbbell&&(i=o.dumbbell(i)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(i),i.xaxis=i.xaxis||window.Apex.xaxis||{},t||(i.xaxis.convertedCatToNumeric=!1),(null!==(u=(i=this.checkForCatToNumericXAxis(this.chartType,p,i)).chart.sparkline)&&void 0!==u&&u.enabled||null!==(h=window.Apex.chart)&&void 0!==h&&null!==(g=h.sparkline)&&void 0!==g&&g.enabled)&&(p=o.sparkline(p)),a=y.extend(s,p)}var f=y.extend(a,window.Apex);return s=y.extend(f,i),this.handleUserInputErrors(s)}},{key:"checkForCatToNumericXAxis",value:function(e,t,i){var n,o,s=new O(i),r=("bar"===e||"boxPlot"===e)&&(null===(n=i.plotOptions)||void 0===n||null===(o=n.bar)||void 0===o?void 0:o.horizontal),a="pie"===e||"polarArea"===e||"donut"===e||"radar"===e||"radialBar"===e||"heatmap"===e,l="datetime"!==i.xaxis.type&&"numeric"!==i.xaxis.type,c=i.xaxis.tickPlacement?i.xaxis.tickPlacement:t.xaxis&&t.xaxis.tickPlacement;return r||a||!l||"between"===c||(i=s.convertCatToNumeric(i)),i}},{key:"extendYAxis",value:function(e,t){var i=new T;(void 0===e.yaxis||!e.yaxis||Array.isArray(e.yaxis)&&0===e.yaxis.length)&&(e.yaxis={}),e.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(e.yaxis=y.extend(e.yaxis,window.Apex.yaxis)),e.yaxis.constructor!==Array?e.yaxis=[y.extend(i.yAxis,e.yaxis)]:e.yaxis=y.extendArray(e.yaxis,i.yAxis);var n=!1;e.yaxis.forEach((function(e){e.logarithmic&&(n=!0)}));var o=e.series;return t&&!o&&(o=t.config.series),n&&o.length!==e.yaxis.length&&o.length&&(e.yaxis=o.map((function(t,n){if(t.name||(o[n].name="series-".concat(n+1)),e.yaxis[n])return e.yaxis[n].seriesName=o[n].name,e.yaxis[n];var s=y.extend(i.yAxis,e.yaxis[0]);return s.show=!1,s}))),n&&o.length>1&&o.length!==e.yaxis.length&&console.warn("A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both."),e}},{key:"extendAnnotations",value:function(e){return void 0===e.annotations&&(e.annotations={},e.annotations.yaxis=[],e.annotations.xaxis=[],e.annotations.points=[]),e=this.extendYAxisAnnotations(e),e=this.extendXAxisAnnotations(e),this.extendPointAnnotations(e)}},{key:"extendYAxisAnnotations",value:function(e){var t=new T;return e.annotations.yaxis=y.extendArray(void 0!==e.annotations.yaxis?e.annotations.yaxis:[],t.yAxisAnnotation),e}},{key:"extendXAxisAnnotations",value:function(e){var t=new T;return e.annotations.xaxis=y.extendArray(void 0!==e.annotations.xaxis?e.annotations.xaxis:[],t.xAxisAnnotation),e}},{key:"extendPointAnnotations",value:function(e){var t=new T;return e.annotations.points=y.extendArray(void 0!==e.annotations.points?e.annotations.points:[],t.pointAnnotation),e}},{key:"checkForDarkTheme",value:function(e){e.theme&&"dark"===e.theme.mode&&(e.tooltip||(e.tooltip={}),"light"!==e.tooltip.theme&&(e.tooltip.theme="dark"),e.chart.foreColor||(e.chart.foreColor="#f6f7f8"),e.chart.background||(e.chart.background="#424242"),e.theme.palette||(e.theme.palette="palette4"))}},{key:"handleUserInputErrors",value:function(e){var t=e;if(t.tooltip.shared&&t.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"===t.chart.type&&t.plotOptions.bar.horizontal){if(t.yaxis.length>1)throw new Error("Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false");t.yaxis[0].reversed&&(t.yaxis[0].opposite=!0),t.xaxis.tooltip.enabled=!1,t.yaxis[0].tooltip.enabled=!1,t.chart.zoom.enabled=!1}return"bar"!==t.chart.type&&"rangeBar"!==t.chart.type||t.tooltip.shared&&"barWidth"===t.xaxis.crosshairs.width&&t.series.length>1&&(t.xaxis.crosshairs.width="tickWidth"),"candlestick"!==t.chart.type&&"boxPlot"!==t.chart.type||t.yaxis[0].reversed&&(console.warn("Reversed y-axis in ".concat(t.chart.type," chart is not supported.")),t.yaxis[0].reversed=!1),t}}]),e}(),B=function(){function e(){a(this,e)}return c(e,[{key:"initGlobalVars",value:function(e){e.series=[],e.seriesCandleO=[],e.seriesCandleH=[],e.seriesCandleM=[],e.seriesCandleL=[],e.seriesCandleC=[],e.seriesRangeStart=[],e.seriesRangeEnd=[],e.seriesRange=[],e.seriesPercent=[],e.seriesGoals=[],e.seriesX=[],e.seriesZ=[],e.seriesNames=[],e.seriesTotals=[],e.seriesLog=[],e.seriesColors=[],e.stackedSeriesTotals=[],e.seriesXvalues=[],e.seriesYvalues=[],e.labels=[],e.hasXaxisGroups=!1,e.groups=[],e.hasSeriesGroups=!1,e.seriesGroups=[],e.categoryLabels=[],e.timescaleLabels=[],e.noLabelsProvided=!1,e.resizeTimer=null,e.selectionResizeTimer=null,e.delayedElements=[],e.pointsArray=[],e.dataLabelsRects=[],e.isXNumeric=!1,e.skipLastTimelinelabel=!1,e.skipFirstTimelinelabel=!1,e.isDataXYZ=!1,e.isMultiLineX=!1,e.isMultipleYAxis=!1,e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE,e.minYArr=[],e.maxYArr=[],e.maxX=-Number.MAX_VALUE,e.minX=Number.MAX_VALUE,e.initialMaxX=-Number.MAX_VALUE,e.initialMinX=Number.MAX_VALUE,e.maxDate=0,e.minDate=Number.MAX_VALUE,e.minZ=Number.MAX_VALUE,e.maxZ=-Number.MAX_VALUE,e.minXDiff=Number.MAX_VALUE,e.yAxisScale=[],e.xAxisScale=null,e.xAxisTicksPositions=[],e.yLabelsCoords=[],e.yTitleCoords=[],e.barPadForNumericAxis=0,e.padHorizontal=0,e.xRange=0,e.yRange=[],e.zRange=0,e.dataPoints=0,e.xTickAmount=0}},{key:"globalVars",value:function(e){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:e.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,selection:void 0,zoomEnabled:"zoom"===e.chart.toolbar.autoSelected&&e.chart.toolbar.tools.zoom&&e.chart.zoom.enabled,panEnabled:"pan"===e.chart.toolbar.autoSelected&&e.chart.toolbar.tools.pan,selectionEnabled:"selection"===e.chart.toolbar.autoSelected&&e.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:[],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,xAxisGroupLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null}}},{key:"init",value:function(e){var t=this.globalVars(e);return this.initGlobalVars(t),t.initialConfig=y.extend({},e),t.initialSeries=y.clone(e.series),t.lastXAxis=y.clone(t.initialConfig.xaxis),t.lastYAxis=y.clone(t.initialConfig.yaxis),t}}]),e}(),H=function(){function e(t){a(this,e),this.opts=t}return c(e,[{key:"init",value:function(){var e=new F(this.opts).init({responsiveOverride:!1});return{config:e,globals:(new B).init(e)}}}]),e}(),W=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.opts=null,this.seriesIndex=0}return c(e,[{key:"clippedImgArea",value:function(e){var t=this.w,i=t.config,n=parseInt(t.globals.gridWidth,10),o=parseInt(t.globals.gridHeight,10),s=n>o?n:o,r=e.image,a=0,l=0;void 0===e.width&&void 0===e.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(a=i.fill.image.width+1,l=i.fill.image.height):(a=s+1,l=s):(a=e.width,l=e.height);var c=document.createElementNS(t.globals.SVGNS,"pattern");C.setAttrs(c,{id:e.patternID,patternUnits:e.patternUnits?e.patternUnits:"userSpaceOnUse",width:a+"px",height:l+"px"});var d=document.createElementNS(t.globals.SVGNS,"image");c.appendChild(d),d.setAttributeNS(window.SVG.xlink,"href",r),C.setAttrs(d,{x:0,y:0,preserveAspectRatio:"none",width:a+"px",height:l+"px"}),d.style.opacity=e.opacity,t.globals.dom.elDefs.node.appendChild(c)}},{key:"getSeriesIndex",value:function(e){var t=this.w;return("bar"===t.config.chart.type||"rangeBar"===t.config.chart.type)&&t.config.plotOptions.bar.distributed||"heatmap"===t.config.chart.type||"treemap"===t.config.chart.type?this.seriesIndex=e.seriesNumber:this.seriesIndex=e.seriesNumber%t.globals.series.length,this.seriesIndex}},{key:"fillPath",value:function(e){var t=this.w;this.opts=e;var i,n,o,s=this.w.config;this.seriesIndex=this.getSeriesIndex(e);var r=this.getFillColors()[this.seriesIndex];void 0!==t.globals.seriesColors[this.seriesIndex]&&(r=t.globals.seriesColors[this.seriesIndex]),"function"==typeof r&&(r=r({seriesIndex:this.seriesIndex,dataPointIndex:e.dataPointIndex,value:e.value,w:t}));var a=e.fillType?e.fillType:this.getFillType(this.seriesIndex),l=Array.isArray(s.fill.opacity)?s.fill.opacity[this.seriesIndex]:s.fill.opacity;e.color&&(r=e.color);var c=r;if(-1===r.indexOf("rgb")?r.length<9&&(c=y.hexToRgba(r,l)):r.indexOf("rgba")>-1&&(l=y.getOpacityFromRGBA(r)),e.opacity&&(l=e.opacity),"pattern"===a&&(n=this.handlePatternFill({fillConfig:e.fillConfig,patternFill:n,fillColor:r,fillOpacity:l,defaultColor:c})),"gradient"===a&&(o=this.handleGradientFill({fillConfig:e.fillConfig,fillColor:r,fillOpacity:l,i:this.seriesIndex})),"image"===a){var d=s.fill.image.src,u=e.patternID?e.patternID:"";this.clippedImgArea({opacity:l,image:Array.isArray(d)?e.seriesNumber-1&&(g=y.getOpacityFromRGBA(h));var p=void 0===r.gradient.opacityTo?i:Array.isArray(r.gradient.opacityTo)?r.gradient.opacityTo[o]:r.gradient.opacityTo;if(void 0===r.gradient.gradientToColors||0===r.gradient.gradientToColors.length)a="dark"===r.gradient.shade?d.shadeColor(-1*parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?y.rgb2hex(t):t):d.shadeColor(parseFloat(r.gradient.shadeIntensity),t.indexOf("rgb")>-1?y.rgb2hex(t):t);else if(r.gradient.gradientToColors[l.seriesNumber]){var f=r.gradient.gradientToColors[l.seriesNumber];a=f,f.indexOf("rgba")>-1&&(p=y.getOpacityFromRGBA(f))}else a=t;if(r.gradient.gradientFrom&&(h=r.gradient.gradientFrom),r.gradient.gradientTo&&(a=r.gradient.gradientTo),r.gradient.inverseColors){var m=h;h=a,a=m}return h.indexOf("rgb")>-1&&(h=y.rgb2hex(h)),a.indexOf("rgb")>-1&&(a=y.rgb2hex(a)),c.drawGradient(u,h,a,g,p,l.size,r.gradient.stops,r.gradient.colorStops,o)}}]),e}(),V=function(){function e(t,i){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"setGlobalMarkerSize",value:function(){var e=this.w;if(e.globals.markers.size=Array.isArray(e.config.markers.size)?e.config.markers.size:[e.config.markers.size],e.globals.markers.size.length>0){if(e.globals.markers.size.length4&&void 0!==arguments[4]&&arguments[4],r=this.w,a=t,l=e,c=null,d=new C(this.ctx),u=r.config.markers.discrete&&r.config.markers.discrete.length;if((r.globals.markers.size[t]>0||s||u)&&(c=d.group({class:s||u?"":"apexcharts-series-markers"})).attr("clip-path","url(#gridRectMarkerMask".concat(r.globals.cuid,")")),Array.isArray(l.x))for(var h=0;h0:r.config.markers.size>0)||s||u){y.isNumber(l.y[h])?p+=" w".concat(y.randomId()):p="apexcharts-nullpoint";var f=this.getMarkerConfig({cssClass:p,seriesIndex:t,dataPointIndex:g});r.config.series[a].data[g]&&(r.config.series[a].data[g].fillColor&&(f.pointFillColor=r.config.series[a].data[g].fillColor),r.config.series[a].data[g].strokeColor&&(f.pointStrokeColor=r.config.series[a].data[g].strokeColor)),n&&(f.pSize=n),(l.x[h]<0||l.x[h]>r.globals.gridWidth||l.y[h]<0||l.y[h]>r.globals.gridHeight)&&(f.pSize=0),(o=d.drawMarker(l.x[h],l.y[h],f)).attr("rel",g),o.attr("j",g),o.attr("index",t),o.node.setAttribute("default-marker-size",f.pSize),new x(this.ctx).setSelectionFilter(o,t,g),this.addEvents(o),c&&c.add(o)}else void 0===r.globals.pointsArray[t]&&(r.globals.pointsArray[t]=[]),r.globals.pointsArray[t].push([l.x[h],l.y[h]])}return c}},{key:"getMarkerConfig",value:function(e){var t=e.cssClass,i=e.seriesIndex,n=e.dataPointIndex,o=void 0===n?null:n,s=e.finishRadius,r=void 0===s?null:s,a=this.w,l=this.getMarkerStyle(i),c=a.globals.markers.size[i],d=a.config.markers;return null!==o&&d.discrete.length&&d.discrete.map((function(e){e.seriesIndex===i&&e.dataPointIndex===o&&(l.pointStrokeColor=e.strokeColor,l.pointFillColor=e.fillColor,c=e.size,l.pointShape=e.shape)})),{pSize:null===r?c:r,pRadius:d.radius,width:Array.isArray(d.width)?d.width[i]:d.width,height:Array.isArray(d.height)?d.height[i]:d.height,pointStrokeWidth:Array.isArray(d.strokeWidth)?d.strokeWidth[i]:d.strokeWidth,pointStrokeColor:l.pointStrokeColor,pointFillColor:l.pointFillColor,shape:l.pointShape||(Array.isArray(d.shape)?d.shape[i]:d.shape),class:t,pointStrokeOpacity:Array.isArray(d.strokeOpacity)?d.strokeOpacity[i]:d.strokeOpacity,pointStrokeDashArray:Array.isArray(d.strokeDashArray)?d.strokeDashArray[i]:d.strokeDashArray,pointFillOpacity:Array.isArray(d.fillOpacity)?d.fillOpacity[i]:d.fillOpacity,seriesIndex:i}}},{key:"addEvents",value:function(e){var t=this.w,i=new C(this.ctx);e.node.addEventListener("mouseenter",i.pathMouseEnter.bind(this.ctx,e)),e.node.addEventListener("mouseleave",i.pathMouseLeave.bind(this.ctx,e)),e.node.addEventListener("mousedown",i.pathMouseDown.bind(this.ctx,e)),e.node.addEventListener("click",t.config.markers.onClick),e.node.addEventListener("dblclick",t.config.markers.onDblClick),e.node.addEventListener("touchstart",i.pathMouseDown.bind(this.ctx,e),{passive:!0})}},{key:"getMarkerStyle",value:function(e){var t=this.w,i=t.globals.markers.colors,n=t.config.markers.strokeColor||t.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(n)?n[e]:n,pointFillColor:Array.isArray(i)?i[e]:i}}}]),e}(),z=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled}return c(e,[{key:"draw",value:function(e,t,i){var n=this.w,o=new C(this.ctx),s=i.realIndex,r=i.pointsPos,a=i.zRatio,l=i.elParent,c=o.group({class:"apexcharts-series-markers apexcharts-series-".concat(n.config.chart.type)});if(c.attr("clip-path","url(#gridRectMarkerMask".concat(n.globals.cuid,")")),Array.isArray(r.x))for(var d=0;df.maxBubbleRadius&&(p=f.maxBubbleRadius)}n.config.chart.animations.enabled||(g=p);var m=r.x[d],v=r.y[d];if(g=g||0,null!==v&&void 0!==n.globals.series[s][u]||(h=!1),h){var _=this.drawPoint(m,v,g,p,s,u,t);c.add(_)}l.add(c)}}},{key:"drawPoint",value:function(e,t,i,n,o,s,r){var a=this.w,l=o,c=new w(this.ctx),d=new x(this.ctx),u=new W(this.ctx),h=new V(this.ctx),g=new C(this.ctx),p=h.getMarkerConfig({cssClass:"apexcharts-marker",seriesIndex:l,dataPointIndex:s,finishRadius:"bubble"===a.config.chart.type||a.globals.comboCharts&&a.config.series[o]&&"bubble"===a.config.series[o].type?n:null});n=p.pSize;var f,m=u.fillPath({seriesNumber:o,dataPointIndex:s,color:p.pointFillColor,patternUnits:"objectBoundingBox",value:a.globals.series[o][r]});if("circle"===p.shape?f=g.drawCircle(i):"square"!==p.shape&&"rect"!==p.shape||(f=g.drawRect(0,0,p.width-p.pointStrokeWidth/2,p.height-p.pointStrokeWidth/2,p.pRadius)),a.config.series[l].data[s]&&a.config.series[l].data[s].fillColor&&(m=a.config.series[l].data[s].fillColor),f.attr({x:e-p.width/2-p.pointStrokeWidth/2,y:t-p.height/2-p.pointStrokeWidth/2,cx:e,cy:t,fill:m,"fill-opacity":p.pointFillOpacity,stroke:p.pointStrokeColor,r:n,"stroke-width":p.pointStrokeWidth,"stroke-dasharray":p.pointStrokeDashArray,"stroke-opacity":p.pointStrokeOpacity}),a.config.chart.dropShadow.enabled){var v=a.config.chart.dropShadow;d.dropShadow(f,v,o)}if(!this.initialAnim||a.globals.dataChanged||a.globals.resized)a.globals.animationEnded=!0;else{var _=a.config.chart.animations.speed;c.animateMarker(f,0,"circle"===p.shape?n:{width:p.width,height:p.height},_,a.globals.easing,(function(){window.setTimeout((function(){c.animationCompleted(f)}),100)}))}if(a.globals.dataChanged&&"circle"===p.shape)if(this.dynamicAnim){var b,y,S,k,L=a.config.chart.animations.dynamicAnimation.speed;null!=(k=a.globals.previousPaths[o]&&a.globals.previousPaths[o][r])&&(b=k.x,y=k.y,S=void 0!==k.r?k.r:n);for(var E=0;Ea.globals.gridHeight+u&&(t=a.globals.gridHeight+u/2),void 0===a.globals.dataLabelsRects[n]&&(a.globals.dataLabelsRects[n]=[]),a.globals.dataLabelsRects[n].push({x:e,y:t,width:d,height:u});var h=a.globals.dataLabelsRects[n].length-2,g=void 0!==a.globals.lastDrawnDataLabelsIndexes[n]?a.globals.lastDrawnDataLabelsIndexes[n][a.globals.lastDrawnDataLabelsIndexes[n].length-1]:0;if(void 0!==a.globals.dataLabelsRects[n][h]){var p=a.globals.dataLabelsRects[n][g];(e>p.x+p.width+2||t>p.y+p.height+2||e+dt.globals.gridWidth+f.textRects.width+10)&&(a="");var m=t.globals.dataLabels.style.colors[s];(("bar"===t.config.chart.type||"rangeBar"===t.config.chart.type)&&t.config.plotOptions.bar.distributed||t.config.dataLabels.distributed)&&(m=t.globals.dataLabels.style.colors[r]),"function"==typeof m&&(m=m({series:t.globals.series,seriesIndex:s,dataPointIndex:r,w:t})),h&&(m=h);var v=u.offsetX,_=u.offsetY;if("bar"!==t.config.chart.type&&"rangeBar"!==t.config.chart.type||(v=0,_=0),f.drawnextLabel){var b=i.drawText({width:100,height:parseInt(u.style.fontSize,10),x:n+v,y:o+_,foreColor:m,textAnchor:l||u.textAnchor,text:a,fontSize:c||u.style.fontSize,fontFamily:u.style.fontFamily,fontWeight:u.style.fontWeight||"normal"});if(b.attr({class:"apexcharts-datalabel",cx:n,cy:o}),u.dropShadow.enabled){var y=u.dropShadow;new x(this.ctx).dropShadow(b,y)}d.add(b),void 0===t.globals.lastDrawnDataLabelsIndexes[s]&&(t.globals.lastDrawnDataLabelsIndexes[s]=[]),t.globals.lastDrawnDataLabelsIndexes[s].push(r)}}}},{key:"addBackgroundToDataLabel",value:function(e,t){var i=this.w,n=i.config.dataLabels.background,o=n.padding,s=n.padding/2,r=t.width,a=t.height,l=new C(this.ctx).drawRect(t.x-o,t.y-s/2,r+2*o,a+s,n.borderRadius,"transparent"===i.config.chart.background?"#fff":i.config.chart.background,n.opacity,n.borderWidth,n.borderColor);return n.dropShadow.enabled&&new x(this.ctx).dropShadow(l,n.dropShadow),l}},{key:"dataLabelsBackground",value:function(){var e=this.w;if("bubble"!==e.config.chart.type)for(var t=e.globals.dom.baseEl.querySelectorAll(".apexcharts-datalabels text"),i=0;i0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=this.w,o=y.clone(n.globals.initialSeries);n.globals.previousPaths=[],i?(n.globals.collapsedSeries=[],n.globals.ancillaryCollapsedSeries=[],n.globals.collapsedSeriesIndices=[],n.globals.ancillaryCollapsedSeriesIndices=[]):o=this.emptyCollapsedSeries(o),n.config.series=o,e&&(t&&(n.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(o,n.config.chart.animations.dynamicAnimation.enabled))}},{key:"emptyCollapsedSeries",value:function(e){for(var t=this.w,i=0;i-1&&(e[i].data=[]);return e}},{key:"toggleSeriesOnHover",value:function(e,t){var i=this.w;t||(t=e.target);var n=i.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels");if("mousemove"===e.type){var o=parseInt(t.getAttribute("rel"),10)-1,s=null,r=null;i.globals.axisCharts||"radialBar"===i.config.chart.type?i.globals.axisCharts?(s=i.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(o,"']")),r=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(o,"']"))):s=i.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(o+1,"']")):s=i.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(o+1,"'] path"));for(var a=0;a=e.from&&n<=e.to&&o[t].classList.remove(i.legendInactiveClass)}}(n.config.plotOptions.heatmap.colorScale.ranges[r])}else"mouseout"===e.type&&s("remove")}},{key:"getActiveConfigSeriesIndex",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"asc",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=this.w,n=0;if(i.config.series.length>1)for(var o=i.config.series.map((function(e,n){return e.data&&e.data.length>0&&-1===i.globals.collapsedSeriesIndices.indexOf(n)&&(!i.globals.comboCharts||0===t.length||t.length&&t.indexOf(i.config.series[n].type)>-1)?n:-1})),s="asc"===e?0:o.length-1;"asc"===e?s=0;"asc"===e?s++:s--)if(-1!==o[s]){n=o[s];break}return n}},{key:"getBarSeriesIndices",value:function(){return this.w.globals.comboCharts?this.w.config.series.map((function(e,t){return"bar"===e.type||"column"===e.type?t:-1})).filter((function(e){return-1!==e})):this.w.config.series.map((function(e,t){return t}))}},{key:"getPreviousPaths",value:function(){var e=this.w;function t(t,i,n){for(var o=t[i].childNodes,s={type:n,paths:[],realIndex:t[i].getAttribute("data:realIndex")},r=0;r0)for(var n=function(t){for(var i=e.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(e.config.chart.type," .apexcharts-series[data\\:realIndex='").concat(t,"'] rect")),n=[],o=function(e){var t=function(t){return i[e].getAttribute(t)},o={x:parseFloat(t("x")),y:parseFloat(t("y")),width:parseFloat(t("width")),height:parseFloat(t("height"))};n.push({rect:o,color:i[e].getAttribute("color")})},s=0;s0)for(var n=0;n0?e:[]}));return e}}]),e}(),$=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new S(this.ctx)}return c(e,[{key:"isMultiFormat",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:"isFormatXY",value:function(){var e=this.w.config.series.slice(),t=new q(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),void 0!==e[this.activeSeriesIndex].data&&e[this.activeSeriesIndex].data.length>0&&null!==e[this.activeSeriesIndex].data[0]&&void 0!==e[this.activeSeriesIndex].data[0].x&&null!==e[this.activeSeriesIndex].data[0])return!0}},{key:"isFormat2DArray",value:function(){var e=this.w.config.series.slice(),t=new q(this.ctx);if(this.activeSeriesIndex=t.getActiveConfigSeriesIndex(),void 0!==e[this.activeSeriesIndex].data&&e[this.activeSeriesIndex].data.length>0&&void 0!==e[this.activeSeriesIndex].data[0]&&null!==e[this.activeSeriesIndex].data[0]&&e[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:"handleFormat2DArray",value:function(e,t){for(var i=this.w.config,n=this.w.globals,o="boxPlot"===i.chart.type||"boxPlot"===i.series[t].type,s=0;s=5?this.twoDSeries.push(y.parseNumber(e[t].data[s][4])):this.twoDSeries.push(y.parseNumber(e[t].data[s][1])),n.dataFormatXNumeric=!0),"datetime"===i.xaxis.type){var r=new Date(e[t].data[s][0]);r=new Date(r).getTime(),this.twoDSeriesX.push(r)}else this.twoDSeriesX.push(e[t].data[s][0]);for(var a=0;a-1&&(s=this.activeSeriesIndex);for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:this.ctx,o=this.w.config,s=this.w.globals,r=new I(n),a=o.labels.length>0?o.labels.slice():o.xaxis.categories.slice();if(s.isRangeBar="rangeBar"===o.chart.type&&s.isBarHorizontal,s.hasXaxisGroups="category"===o.xaxis.type&&o.xaxis.group.groups.length>0,s.hasXaxisGroups&&(s.groups=o.xaxis.group.groups),s.hasSeriesGroups=null===(t=e[0])||void 0===t?void 0:t.group,s.hasSeriesGroups){var l=[],c=v(new Set(e.map((function(e){return e.group}))));e.forEach((function(e,t){var i=c.indexOf(e.group);l[i]||(l[i]=[]),l[i].push(e.name)})),s.seriesGroups=l}for(var d=function(){for(var e=0;e0&&(this.twoDSeriesX=a,s.seriesX.push(this.twoDSeriesX))),s.labels.push(this.twoDSeriesX);var h=e[u].data.map((function(e){return y.parseNumber(e)}));s.series.push(h)}s.seriesZ.push(this.threeDSeries),void 0!==e[u].name?s.seriesNames.push(e[u].name):s.seriesNames.push("series-"+parseInt(u+1,10)),void 0!==e[u].color?s.seriesColors.push(e[u].color):s.seriesColors.push(void 0)}return this.w}},{key:"parseDataNonAxisCharts",value:function(e){var t=this.w.globals,i=this.w.config;t.series=e.slice(),t.seriesNames=i.labels.slice();for(var n=0;n0?i.labels=t.xaxis.categories:t.labels.length>0?i.labels=t.labels.slice():this.fallbackToCategory?(i.labels=i.labels[0],i.seriesRange.length&&(i.seriesRange.map((function(e){e.forEach((function(e){i.labels.indexOf(e.x)<0&&e.x&&i.labels.push(e.x)}))})),i.labels=i.labels.filter((function(e,t,i){return i.indexOf(e)===t}))),t.xaxis.convertedCatToNumeric&&(new O(t).convertCatToNumericXaxis(t,this.ctx,i.seriesX[0]),this._generateExternalLabels(e))):this._generateExternalLabels(e)}},{key:"_generateExternalLabels",value:function(e){var t=this.w.globals,i=this.w.config,n=[];if(t.axisCharts){if(t.series.length>0)if(this.isFormatXY())for(var o=i.series.map((function(e,t){return e.data.filter((function(e,t,i){return i.findIndex((function(t){return t.x===e.x}))===t}))})),s=o.reduce((function(e,t,i,n){return n[e].length>t.length?e:i}),0),r=0;r4&&void 0!==arguments[4]?arguments[4]:[],a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"12px",l=!(arguments.length>6&&void 0!==arguments[6])||arguments[6],c=this.w,d=void 0===e[n]?"":e[n],u=d,h=c.globals.xLabelFormatter,g=c.config.xaxis.labels.formatter,p=!1,f=new R(this.ctx),m=d;l&&(u=f.xLabelFormat(h,d,m,{i:n,dateFormatter:new I(this.ctx).formatDate,w:c}),void 0!==g&&(u=g(d,e[n],{i:n,dateFormatter:new I(this.ctx).formatDate,w:c}))),t.length>0?(o=t[n].unit,s=null,t.forEach((function(e){"month"===e.unit?s="year":"day"===e.unit?s="month":"hour"===e.unit?s="day":"minute"===e.unit&&(s="hour")})),p=s===o,i=t[n].position,u=t[n].value):"datetime"===c.config.xaxis.type&&void 0===g&&(u=""),void 0===u&&(u=""),u=Array.isArray(u)?u:u.toString();var v=new C(this.ctx),_={};_=c.globals.rotateXLabels&&l?v.getTextRects(u,parseInt(a,10),null,"rotate(".concat(c.config.xaxis.labels.rotate," 0 0)"),!1):v.getTextRects(u,parseInt(a,10));var b=!c.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(u)&&(0===u.indexOf("NaN")||0===u.toLowerCase().indexOf("invalid")||u.toLowerCase().indexOf("infinity")>=0||r.indexOf(u)>=0&&b)&&(u=""),{x:i,text:u,textRect:_,isBold:p}}},{key:"checkLabelBasedOnTickamount",value:function(e,t,i){var n=this.w,o=n.config.xaxis.tickAmount;return"dataPoints"===o&&(o=Math.round(n.globals.gridWidth/120)),o>i||e%Math.round(i/(o+1))==0||(t.text=""),t}},{key:"checkForOverflowingLabels",value:function(e,t,i,n,o){var s=this.w;if(0===e&&s.globals.skipFirstTimelinelabel&&(t.text=""),e===i-1&&s.globals.skipLastTimelinelabel&&(t.text=""),s.config.xaxis.labels.hideOverlappingLabels&&n.length>0){var r=o[o.length-1];t.x0){!0===a.config.yaxis[o].opposite&&(e+=n.width);for(var d=t;d>=0;d--){var u=c+t/10+a.config.yaxis[o].labels.offsetY-1;a.globals.isBarHorizontal&&(u=s*d),"heatmap"===a.config.chart.type&&(u+=s/2);var h=l.drawLine(e+i.offsetX-n.width+n.offsetX,u+n.offsetY,e+i.offsetX+n.offsetX,u+n.offsetY,n.color);r.add(h),c+=s}}}}]),e}(),K=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"scaleSvgNode",value:function(e,t){var i=parseFloat(e.getAttributeNS(null,"width")),n=parseFloat(e.getAttributeNS(null,"height"));e.setAttributeNS(null,"width",i*t),e.setAttributeNS(null,"height",n*t),e.setAttributeNS(null,"viewBox","0 0 "+i+" "+n)}},{key:"fixSvgStringForIe11",value:function(e){if(!y.isIE11())return e.replace(/ /g," ");var t=0,i=e.replace(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g,(function(e){return 2===++t?'xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev"':e}));return(i=i.replace(/xmlns:NS\d+=""/g,"")).replace(/NS\d+:(\w+:\w+=")/g,"$1")}},{key:"getSvgString",value:function(e){null==e&&(e=1);var t=this.w.globals.dom.Paper.svg();if(1!==e){var i=this.w.globals.dom.Paper.node.cloneNode(!0);this.scaleSvgNode(i,e),t=(new XMLSerializer).serializeToString(i)}return this.fixSvgStringForIe11(t)}},{key:"cleanup",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-xcrosshairs"),i=e.globals.dom.baseEl.getElementsByClassName("apexcharts-ycrosshairs"),n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-zoom-rect, .apexcharts-selection-rect");Array.prototype.forEach.call(n,(function(e){e.setAttribute("width",0)})),t&&t[0]&&(t[0].setAttribute("x",-500),t[0].setAttribute("x1",-500),t[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 e=this.getSvgString(),t=new Blob([e],{type:"image/svg+xml;charset=utf-8"});return URL.createObjectURL(t)}},{key:"dataURI",value:function(e){var t=this;return new Promise((function(i){var n=t.w,o=e?e.scale||e.width/n.globals.svgWidth:1;t.cleanup();var s=document.createElement("canvas");s.width=n.globals.svgWidth*o,s.height=parseInt(n.globals.dom.elWrap.style.height,10)*o;var r="transparent"===n.config.chart.background?"#fff":n.config.chart.background,a=s.getContext("2d");a.fillStyle=r,a.fillRect(0,0,s.width*o,s.height*o);var l=t.getSvgString(o);if(window.canvg&&y.isIE11()){var c=window.canvg.Canvg.fromString(a,l,{ignoreClear:!0,ignoreDimensions:!0});c.start();var d=s.msToBlob();c.stop(),i({blob:d})}else{var u="data:image/svg+xml,"+encodeURIComponent(l),h=new Image;h.crossOrigin="anonymous",h.onload=function(){if(a.drawImage(h,0,0),s.msToBlob){var e=s.msToBlob();i({blob:e})}else{var t=s.toDataURL("image/png");i({imgURI:t})}},h.src=u}}))}},{key:"exportToSVG",value:function(){this.triggerDownload(this.svgUrl(),this.w.config.chart.toolbar.export.svg.filename,".svg")}},{key:"exportToPng",value:function(){var e=this;this.dataURI().then((function(t){var i=t.imgURI,n=t.blob;n?navigator.msSaveOrOpenBlob(n,e.w.globals.chartID+".png"):e.triggerDownload(i,e.w.config.chart.toolbar.export.png.filename,".png")}))}},{key:"exportToCSV",value:function(e){var t=this,i=e.series,n=e.fileName,o=e.columnDelimiter,s=void 0===o?",":o,r=e.lineDelimiter,a=void 0===r?"\n":r,l=this.w;i||(i=l.config.series);var c=[],d=[],u="",h=l.globals.series.map((function(e,t){return-1===l.globals.collapsedSeriesIndices.indexOf(t)?e:[]})),g=Math.max.apply(Math,v(i.map((function(e){return e.data?e.data.length:0})))),p=new $(this.ctx),f=new j(this.ctx),m=function(e){var i="";if(l.globals.axisCharts){if("category"===l.config.xaxis.type||l.config.xaxis.convertedCatToNumeric)if(l.globals.isBarHorizontal){var n=l.globals.yLabelFormatters[0],o=new q(t.ctx).getActiveConfigSeriesIndex();i=n(l.globals.labels[e],{seriesIndex:o,dataPointIndex:e,w:l})}else i=f.getLabel(l.globals.labels,l.globals.timescaleLabels,0,e).text;"datetime"===l.config.xaxis.type&&(l.config.xaxis.categories.length?i=l.config.xaxis.categories[e]:l.config.labels.length&&(i=l.config.labels[e]))}else i=l.config.labels[e];return Array.isArray(i)&&(i=i.join(" ")),y.isNumber(i)?i:i.split(s).join("")},_=function(e,t){if(c.length&&0===t&&d.push(c.join(s)),e.data){e.data=e.data.length&&e.data||v(Array(g)).map((function(){return""}));for(var n=0;n=10?l.config.chart.toolbar.export.csv.dateFormatter(o):y.isNumber(o)?o:o.split(s).join("")));for(var r=0;r0&&!n.globals.isBarHorizontal&&(this.xaxisLabels=n.globals.timescaleLabels.slice()),n.config.xaxis.overwriteCategories&&(this.xaxisLabels=n.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],"top"===n.config.xaxis.position?this.offY=0:this.offY=n.globals.gridHeight+1,this.offY=this.offY+n.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal="bar"===n.config.chart.type&&n.config.plotOptions.bar.horizontal,this.xaxisFontSize=n.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=n.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=n.config.xaxis.labels.style.colors,this.xaxisBorderWidth=n.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=n.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf("%")>-1?this.xaxisBorderWidth=n.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=n.config.xaxis.axisBorder.height,this.yaxis=n.config.yaxis[0]}return c(e,[{key:"drawXaxis",value:function(){var e=this.w,t=new C(this.ctx),i=t.group({class:"apexcharts-xaxis",transform:"translate(".concat(e.config.xaxis.offsetX,", ").concat(e.config.xaxis.offsetY,")")}),n=t.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(e.globals.translateXAxisX,", ").concat(e.globals.translateXAxisY,")")});i.add(n);for(var o=[],s=0;s6&&void 0!==arguments[6]?arguments[6]:{},c=[],d=[],u=this.w,h=l.xaxisFontSize||this.xaxisFontSize,g=l.xaxisFontFamily||this.xaxisFontFamily,p=l.xaxisForeColors||this.xaxisForeColors,f=l.fontWeight||u.config.xaxis.labels.style.fontWeight,m=l.cssClass||u.config.xaxis.labels.style.cssClass,v=u.globals.padHorizontal,_=n.length,b="category"===u.config.xaxis.type?u.globals.dataPoints:_;if(0===b&&_>b&&(b=_),o){var y=b>1?b-1:b;r=u.globals.gridWidth/y,v=v+s(0,r)/2+u.config.xaxis.labels.offsetX}else r=u.globals.gridWidth/b,v=v+s(0,r)+u.config.xaxis.labels.offsetX;for(var w=function(o){var l=v-s(o,r)/2+u.config.xaxis.labels.offsetX;0===o&&1===_&&r/2===v&&1===b&&(l=u.globals.gridWidth/2);var y=a.axesUtils.getLabel(n,u.globals.timescaleLabels,l,o,c,h,e),w=28;if(u.globals.rotateXLabels&&e&&(w=22),u.config.xaxis.title.text&&"top"===u.config.xaxis.position&&(w+=parseFloat(u.config.xaxis.title.style.fontSize)+2),e||(w=w+parseFloat(h)+(u.globals.xAxisLabelsHeight-u.globals.xAxisGroupLabelsHeight)+(u.globals.rotateXLabels?10:0)),y=void 0!==u.config.xaxis.tickAmount&&"dataPoints"!==u.config.xaxis.tickAmount&&"datetime"!==u.config.xaxis.type?a.axesUtils.checkLabelBasedOnTickamount(o,y,_):a.axesUtils.checkForOverflowingLabels(o,y,_,c,d),u.config.xaxis.labels.show){var x=t.drawText({x:y.x,y:a.offY+u.config.xaxis.labels.offsetY+w-("top"===u.config.xaxis.position?u.globals.xAxisHeight+u.config.xaxis.axisTicks.height-2:0),text:y.text,textAnchor:"middle",fontWeight:y.isBold?600:f,fontSize:h,fontFamily:g,foreColor:Array.isArray(p)?e&&u.config.xaxis.convertedCatToNumeric?p[u.globals.minX+o-1]:p[o]:p,isPlainText:!1,cssClass:(e?"apexcharts-xaxis-label ":"apexcharts-xaxis-group-label ")+m});if(i.add(x),x.on("click",(function(e){if("function"==typeof u.config.chart.events.xAxisLabelClick){var t=Object.assign({},u,{labelIndex:o});u.config.chart.events.xAxisLabelClick(e,a.ctx,t)}})),e){var C=document.createElementNS(u.globals.SVGNS,"title");C.textContent=Array.isArray(y.text)?y.text.join(" "):y.text,x.node.appendChild(C),""!==y.text&&(c.push(y.text),d.push(y))}}o<_-1&&(v+=s(o+1,r))},x=0;x<=_-1;x++)w(x)}},{key:"drawXaxisInversed",value:function(e){var t,i,n=this,o=this.w,s=new C(this.ctx),r=o.config.yaxis[0].opposite?o.globals.translateYAxisX[e]:0,a=s.group({class:"apexcharts-yaxis apexcharts-xaxis-inversed",rel:e}),l=s.group({class:"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g",transform:"translate("+r+", 0)"});a.add(l);var c=[];if(o.config.yaxis[e].show)for(var d=0;dn.globals.gridWidth)){var s=this.offY+n.config.xaxis.axisTicks.offsetY;if(t=t+s+n.config.xaxis.axisTicks.height,"top"===n.config.xaxis.position&&(t=s-n.config.xaxis.axisTicks.height),n.config.xaxis.axisTicks.show){var r=new C(this.ctx).drawLine(e+n.config.xaxis.axisTicks.offsetX,s+n.config.xaxis.offsetY,o+n.config.xaxis.axisTicks.offsetX,t+n.config.xaxis.offsetY,n.config.xaxis.axisTicks.color);i.add(r),r.node.classList.add("apexcharts-xaxis-tick")}}}},{key:"getXAxisTicksPositions",value:function(){var e=this.w,t=[],i=this.xaxisLabels.length,n=e.globals.padHorizontal;if(e.globals.timescaleLabels.length>0)for(var o=0;o0){var c=o[o.length-1].getBBox(),d=o[0].getBBox();c.x<-20&&o[o.length-1].parentNode.removeChild(o[o.length-1]),d.x+d.width>e.globals.gridWidth&&!e.globals.isBarHorizontal&&o[0].parentNode.removeChild(o[0]);for(var u=0;u0&&(this.xaxisLabels=i.globals.timescaleLabels.slice())}return c(e,[{key:"drawGridArea",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=this.w,i=new C(this.ctx);null===e&&(e=i.group({class:"apexcharts-grid"}));var n=i.drawLine(t.globals.padHorizontal,1,t.globals.padHorizontal,t.globals.gridHeight,"transparent"),o=i.drawLine(t.globals.padHorizontal,t.globals.gridHeight,t.globals.gridWidth,t.globals.gridHeight,"transparent");return e.add(o),e.add(n),e}},{key:"drawGrid",value:function(){var e=null;return this.w.globals.axisCharts&&(e=this.renderGrid(),this.drawGridArea(e.el)),e}},{key:"createGridMask",value:function(){var e=this.w,t=e.globals,i=new C(this.ctx),n=Array.isArray(e.config.stroke.width)?0:e.config.stroke.width;if(Array.isArray(e.config.stroke.width)){var o=0;e.config.stroke.width.forEach((function(e){o=Math.max(o,e)})),n=o}t.dom.elGridRectMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMask.setAttribute("id","gridRectMask".concat(t.cuid)),t.dom.elGridRectMarkerMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elGridRectMarkerMask.setAttribute("id","gridRectMarkerMask".concat(t.cuid)),t.dom.elForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elForecastMask.setAttribute("id","forecastMask".concat(t.cuid)),t.dom.elNonForecastMask=document.createElementNS(t.SVGNS,"clipPath"),t.dom.elNonForecastMask.setAttribute("id","nonForecastMask".concat(t.cuid));var s=e.config.chart.type,r=0,a=0;("bar"===s||"rangeBar"===s||"candlestick"===s||"boxPlot"===s||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&(r=e.config.grid.padding.left,a=e.config.grid.padding.right,t.barPadForNumericAxis>r&&(r=t.barPadForNumericAxis,a=t.barPadForNumericAxis)),t.dom.elGridRect=i.drawRect(-n/2-r-2,-n/2,t.gridWidth+n+a+r+4,t.gridHeight+n,0,"#fff");var l=e.globals.markers.largestSize+1;t.dom.elGridRectMarker=i.drawRect(2*-l,2*-l,t.gridWidth+4*l,t.gridHeight+4*l,0,"#fff"),t.dom.elGridRectMask.appendChild(t.dom.elGridRect.node),t.dom.elGridRectMarkerMask.appendChild(t.dom.elGridRectMarker.node);var c=t.dom.baseEl.querySelector("defs");c.appendChild(t.dom.elGridRectMask),c.appendChild(t.dom.elForecastMask),c.appendChild(t.dom.elNonForecastMask),c.appendChild(t.dom.elGridRectMarkerMask)}},{key:"_drawGridLines",value:function(e){var t=e.i,i=e.x1,n=e.y1,o=e.x2,s=e.y2,r=e.xCount,a=e.parent,l=this.w;if(!(0===t&&l.globals.skipFirstTimelinelabel||t===r-1&&l.globals.skipLastTimelinelabel&&!l.config.xaxis.labels.formatter||"radar"===l.config.chart.type)){l.config.grid.xaxis.lines.show&&this._drawGridLine({i:t,x1:i,y1:n,x2:o,y2:s,xCount:r,parent:a});var c=0;if(l.globals.hasXaxisGroups&&"between"===l.config.xaxis.tickPlacement){var d=l.globals.groups;if(d){for(var u=0,h=0;u2));o++);return!e.globals.isBarHorizontal||this.isRangeBar?(i=this.xaxisLabels.length,this.isRangeBar&&(i--,n=e.globals.labels.length,e.config.xaxis.tickAmount&&e.config.xaxis.labels.formatter&&(i=e.config.xaxis.tickAmount)),this._drawXYLines({xCount:i,tickAmount:n})):(i=n,n=e.globals.xTickAmount,this._drawInvertedXYLines({xCount:i,tickAmount:n})),this.drawGridBands(i,n),{el:this.elg,elGridBorders:this.elGridBorders,xAxisTickWidth:e.globals.gridWidth/i}}},{key:"drawGridBands",value:function(e,t){var i=this.w;if(void 0!==i.config.grid.row.colors&&i.config.grid.row.colors.length>0)for(var n=0,o=i.globals.gridHeight/t,s=i.globals.gridWidth,r=0,a=0;r=i.config.grid.row.colors.length&&(a=0),this._drawGridBandRect({c:a,x1:0,y1:n,x2:s,y2:o,type:"row"}),n+=i.globals.gridHeight/t;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?e:e-1,c=i.globals.padHorizontal,d=i.globals.padHorizontal+i.globals.gridWidth/l,u=i.globals.gridHeight,h=0,g=0;h=i.config.grid.column.colors.length&&(g=0),this._drawGridBandRect({c:g,x1:c,y1:0,x2:d,y2:u,type:"column"}),c+=i.globals.gridWidth/l}}]),e}(),X=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"niceScale",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4?arguments[4]:void 0,s=this.w,r=Math.abs(t-e);if("dataPoints"===(i=this._adjustTicksForSmallRange(i,n,r))&&(i=s.globals.dataPoints-1),e===Number.MIN_VALUE&&0===t||!y.isNumber(e)&&!y.isNumber(t)||e===Number.MIN_VALUE&&t===-Number.MAX_VALUE)return e=0,t=i,this.linearScale(e,t,i);e>t?(console.warn("axis.min cannot be greater than axis.max"),t=e+.1):e===t&&(e=0===e?0:e-.5,t=0===t?2:t+.5);var a=[];r<1&&o&&("candlestick"===s.config.chart.type||"candlestick"===s.config.series[n].type||"boxPlot"===s.config.chart.type||"boxPlot"===s.config.series[n].type||s.globals.isRangeData)&&(t*=1.01);var l=i+1;l<2?l=2:l>2&&(l-=2);var c=r/l,d=Math.floor(y.log10(c)),u=Math.pow(10,d),h=Math.round(c/u);h<1&&(h=1);var g=h*u,p=g*Math.floor(e/g),f=g*Math.ceil(t/g),m=p;if(o&&r>2){for(;a.push(m),!((m+=g)>f););return{result:a,niceMin:a[0],niceMax:a[a.length-1]}}var v=e;(a=[]).push(v);for(var _=Math.abs(t-e)/i,b=0;b<=i;b++)v+=_,a.push(v);return a[a.length-2]>=t&&a.pop(),{result:a,niceMin:a[0],niceMax:a[a.length-1]}}},{key:"linearScale",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,n=arguments.length>3?arguments[3]:void 0,o=Math.abs(t-e);"dataPoints"===(i=this._adjustTicksForSmallRange(i,n,o))&&(i=this.w.globals.dataPoints-1);var s=o/i;i===Number.MAX_VALUE&&(i=10,s=1);for(var r=[],a=e;i>=0;)r.push(a),a+=s,i-=1;return{result:r,niceMin:r[0],niceMax:r[r.length-1]}}},{key:"logarithmicScaleNice",value:function(e,t,i){t<=0&&(t=Math.max(e,i)),e<=0&&(e=Math.min(t,i));for(var n=[],o=Math.ceil(Math.log(t)/Math.log(i)+1),s=Math.floor(Math.log(e)/Math.log(i));s5)n.allSeriesCollapsed=!1,n.yAxisScale[e]=this.logarithmicScale(t,i,s.logBase),n.yAxisScale[e]=s.forceNiceScale?this.logarithmicScaleNice(t,i,s.logBase):this.logarithmicScale(t,i,s.logBase);else if(i!==-Number.MAX_VALUE&&y.isNumber(i))if(n.allSeriesCollapsed=!1,void 0===s.min&&void 0===s.max||s.forceNiceScale){var a=void 0===o.yaxis[e].max&&void 0===o.yaxis[e].min||o.yaxis[e].forceNiceScale;n.yAxisScale[e]=this.niceScale(t,i,s.tickAmount?s.tickAmount:r<5&&r>1?r+1:5,e,a)}else n.yAxisScale[e]=this.linearScale(t,i,s.tickAmount,e);else n.yAxisScale[e]=this.linearScale(0,5,5)}},{key:"setXScale",value:function(e,t){var i=this.w,n=i.globals,o=i.config.xaxis,s=Math.abs(t-e);return t!==-Number.MAX_VALUE&&y.isNumber(t)?n.xAxisScale=this.linearScale(e,t,o.tickAmount?o.tickAmount:s<5&&s>1?s+1:5,0):n.xAxisScale=this.linearScale(0,5,5),n.xAxisScale}},{key:"setMultipleYScales",value:function(){var e=this,t=this.w.globals,i=this.w.config,n=t.minYArr.concat([]),o=t.maxYArr.concat([]),s=[];i.yaxis.forEach((function(t,r){var a=r;i.series.forEach((function(e,i){e.name===t.seriesName&&(a=i,r!==i?s.push({index:i,similarIndex:r,alreadyExists:!0}):s.push({index:i}))}));var l=n[a],c=o[a];e.setYScaleForIndex(r,l,c)})),this.sameScaleInMultipleAxes(n,o,s)}},{key:"sameScaleInMultipleAxes",value:function(e,t,i){var n=this,o=this.w.config,s=this.w.globals,r=[];i.forEach((function(e){e.alreadyExists&&(void 0===r[e.index]&&(r[e.index]=[]),r[e.index].push(e.index),r[e.index].push(e.similarIndex))})),s.yAxisSameScaleIndices=r,r.forEach((function(e,t){r.forEach((function(i,n){var o,s;t!==n&&(o=e,s=i,o.filter((function(e){return-1!==s.indexOf(e)}))).length>0&&(r[t]=r[t].concat(r[n]))}))}));var a=r.map((function(e){return e.filter((function(t,i){return e.indexOf(t)===i}))})).map((function(e){return e.sort()}));r=r.filter((function(e){return!!e}));var l=a.slice(),c=l.map((function(e){return JSON.stringify(e)}));l=l.filter((function(e,t){return c.indexOf(JSON.stringify(e))===t}));var d=[],u=[];e.forEach((function(e,i){l.forEach((function(n,o){n.indexOf(i)>-1&&(void 0===d[o]&&(d[o]=[],u[o]=[]),d[o].push({key:i,value:e}),u[o].push({key:i,value:t[i]}))}))}));var h=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);d.forEach((function(e,t){e.forEach((function(e,i){h[t]=Math.min(e.value,h[t])}))})),u.forEach((function(e,t){e.forEach((function(e,i){g[t]=Math.max(e.value,g[t])}))})),e.forEach((function(e,t){u.forEach((function(e,i){var r=h[i],a=g[i];o.chart.stacked&&(a=0,e.forEach((function(e,t){e.value!==-Number.MAX_VALUE&&(a+=e.value),r!==Number.MIN_VALUE&&(r+=d[i][t].value)}))),e.forEach((function(i,l){e[l].key===t&&(void 0!==o.yaxis[t].min&&(r="function"==typeof o.yaxis[t].min?o.yaxis[t].min(s.minY):o.yaxis[t].min),void 0!==o.yaxis[t].max&&(a="function"==typeof o.yaxis[t].max?o.yaxis[t].max(s.maxY):o.yaxis[t].max),n.setYScaleForIndex(t,r,a))}))}))}))}},{key:"autoScaleY",value:function(e,t,i){e||(e=this);var n=e.w;if(n.globals.isMultipleYAxis||n.globals.collapsedSeries.length)return console.warn("autoScaleYaxis is not supported in a multi-yaxis chart."),t;var o=n.globals.seriesX[0],s=n.config.chart.stacked;return t.forEach((function(e,r){for(var a=0,l=0;l=i.xaxis.min){a=l;break}var c,d,u=n.globals.minYArr[r],h=n.globals.maxYArr[r],g=n.globals.stackedSeriesTotals;n.globals.series.forEach((function(r,l){var p=r[a];s?(p=g[a],c=d=p,g.forEach((function(e,t){o[t]<=i.xaxis.max&&o[t]>=i.xaxis.min&&(e>d&&null!==e&&(d=e),r[t]=i.xaxis.min){var s=e,r=e;n.globals.series.forEach((function(i,n){null!==e&&(s=Math.min(i[t],s),r=Math.max(i[t],r))})),r>d&&null!==r&&(d=r),su&&(c=u),t.length>1?(t[l].min=void 0===e.min?c:e.min,t[l].max=void 0===e.max?d:e.max):(t[0].min=void 0===e.min?c:e.min,t[0].max=void 0===e.max?d:e.max)}))})),t}}]),e}(),Z=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.scales=new X(t)}return c(e,[{key:"init",value:function(){this.setYRange(),this.setXRange(),this.setZRange()}},{key:"getMinYMaxY",value:function(e){var t=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,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=this.w.config,s=this.w.globals,r=-Number.MAX_VALUE,a=Number.MIN_VALUE;null===n&&(n=e+1);var l=s.series,c=l,d=l;"candlestick"===o.chart.type?(c=s.seriesCandleL,d=s.seriesCandleH):"boxPlot"===o.chart.type?(c=s.seriesCandleO,d=s.seriesCandleC):s.isRangeData&&(c=s.seriesRangeStart,d=s.seriesRangeEnd);for(var u=e;uc[u][h]&&c[u][h]<0&&(a=c[u][h])):s.hasNullValues=!0}}return"rangeBar"===o.chart.type&&s.seriesRangeStart.length&&s.isBarHorizontal&&(a=t),"bar"===o.chart.type&&(a<0&&r<0&&(r=0),a===Number.MIN_VALUE&&(a=0)),{minY:a,maxY:r,lowestY:t,highestY:i}}},{key:"setYRange",value:function(){var e=this.w.globals,t=this.w.config;e.maxY=-Number.MAX_VALUE,e.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(e.isMultipleYAxis)for(var n=0;n=0&&i<=10||void 0!==t.yaxis[0].min||void 0!==t.yaxis[0].max)&&(r=0),e.minY=i-5*r/100,i>0&&e.minY<0&&(e.minY=0),e.maxY=e.maxY+5*r/100}return t.yaxis.forEach((function(t,i){void 0!==t.max&&("number"==typeof t.max?e.maxYArr[i]=t.max:"function"==typeof t.max&&(e.maxYArr[i]=t.max(e.isMultipleYAxis?e.maxYArr[i]:e.maxY)),e.maxY=e.maxYArr[i]),void 0!==t.min&&("number"==typeof t.min?e.minYArr[i]=t.min:"function"==typeof t.min&&(e.minYArr[i]=t.min(e.isMultipleYAxis?e.minYArr[i]===Number.MIN_VALUE?0:e.minYArr[i]:e.minY)),e.minY=e.minYArr[i])})),e.isBarHorizontal&&["min","max"].forEach((function(i){void 0!==t.xaxis[i]&&"number"==typeof t.xaxis[i]&&("min"===i?e.minY=t.xaxis[i]:e.maxY=t.xaxis[i])})),e.isMultipleYAxis?(this.scales.setMultipleYScales(),e.minY=i,e.yAxisScale.forEach((function(t,i){e.minYArr[i]=t.niceMin,e.maxYArr[i]=t.niceMax}))):(this.scales.setYScaleForIndex(0,e.minY,e.maxY),e.minY=e.yAxisScale[0].niceMin,e.maxY=e.yAxisScale[0].niceMax,e.minYArr[0]=e.yAxisScale[0].niceMin,e.maxYArr[0]=e.yAxisScale[0].niceMax),{minY:e.minY,maxY:e.maxY,minYArr:e.minYArr,maxYArr:e.maxYArr,yAxisScale:e.yAxisScale}}},{key:"setXRange",value:function(){var e=this.w.globals,t=this.w.config,i="numeric"===t.xaxis.type||"datetime"===t.xaxis.type||"category"===t.xaxis.type&&!e.noLabelsProvided||e.noLabelsProvided||e.isXNumeric;if(e.isXNumeric&&function(){for(var t=0;te.dataPoints&&0!==e.dataPoints&&(n=e.dataPoints-1)):"dataPoints"===t.xaxis.tickAmount?(e.series.length>1&&(n=e.series[e.maxValsInArrayIndex].length-1),e.isXNumeric&&(n=e.maxX-e.minX-1)):n=t.xaxis.tickAmount,e.xTickAmount=n,void 0!==t.xaxis.max&&"number"==typeof t.xaxis.max&&(e.maxX=t.xaxis.max),void 0!==t.xaxis.min&&"number"==typeof t.xaxis.min&&(e.minX=t.xaxis.min),void 0!==t.xaxis.range&&(e.minX=e.maxX-t.xaxis.range),e.minX!==Number.MAX_VALUE&&e.maxX!==-Number.MAX_VALUE)if(t.xaxis.convertedCatToNumeric&&!e.dataFormatXNumeric){for(var o=[],s=e.minX-1;s0&&(e.xAxisScale=this.scales.linearScale(1,e.labels.length,n-1),e.seriesX=e.labels.slice());i&&(e.labels=e.xAxisScale.result.slice())}return e.isBarHorizontal&&e.labels.length&&(e.xTickAmount=e.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:e.minX,maxX:e.maxX}}},{key:"setZRange",value:function(){var e=this.w.globals;if(e.isDataXYZ)for(var t=0;t0){var o=t-n[i-1];o>0&&(e.minXDiff=Math.min(o,e.minXDiff))}})),1!==e.dataPoints&&e.minXDiff!==Number.MAX_VALUE||(e.minXDiff=.5)}))}},{key:"_setStackedMinMax",value:function(){var e=this,t=this.w.globals;if(t.series.length){var i=t.seriesGroups;i.length||(i=[this.w.config.series.map((function(e){return e.name}))]);var n={},o={};i.forEach((function(i){n[i]=[],o[i]=[],e.w.config.series.map((function(e,t){return i.indexOf(e.name)>-1?t:null})).filter((function(e){return null!==e})).forEach((function(e){for(var s=0;s0?n[i][s]+=parseFloat(t.series[e][s])+1e-4:o[i][s]+=parseFloat(t.series[e][s]))}))})),Object.entries(n).forEach((function(e){var i=m(e,1)[0];n[i].forEach((function(e,s){t.maxY=Math.max(t.maxY,n[i][s]),t.minY=Math.min(t.minY,o[i][s])}))}))}}}]),e}(),Q=function(){function e(t,i){a(this,e),this.ctx=t,this.elgrid=i,this.w=t.w;var n=this.w;this.xaxisFontSize=n.config.xaxis.labels.style.fontSize,this.axisFontFamily=n.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=n.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal="bar"===n.config.chart.type&&n.config.plotOptions.bar.horizontal,this.xAxisoffX=0,"bottom"===n.config.xaxis.position&&(this.xAxisoffX=n.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new j(t)}return c(e,[{key:"drawYaxis",value:function(e){var t=this,i=this.w,n=new C(this.ctx),o=i.config.yaxis[e].labels.style,s=o.fontSize,r=o.fontFamily,a=o.fontWeight,l=n.group({class:"apexcharts-yaxis",rel:e,transform:"translate("+i.globals.translateYAxisX[e]+", 0)"});if(this.axesUtils.isYAxisHidden(e))return l;var c=n.group({class:"apexcharts-yaxis-texts-g"});l.add(c);var d=i.globals.yAxisScale[e].result.length-1,u=i.globals.gridHeight/d,h=i.globals.translateY,g=i.globals.yLabelFormatters[e],p=i.globals.yAxisScale[e].result.slice();p=this.axesUtils.checkForReversedLabels(e,p);var f="";if(i.config.yaxis[e].labels.show)for(var m=function(l){var m=p[l];m=g(m,l,i);var v=i.config.yaxis[e].labels.padding;i.config.yaxis[e].opposite&&0!==i.config.yaxis.length&&(v*=-1);var _="end";i.config.yaxis[e].opposite&&(_="start"),"left"===i.config.yaxis[e].labels.align?_="start":"center"===i.config.yaxis[e].labels.align?_="middle":"right"===i.config.yaxis[e].labels.align&&(_="end");var b=t.axesUtils.getYAxisForeColor(o.colors,e),y=n.drawText({x:v,y:h+d/10+i.config.yaxis[e].labels.offsetY+1,text:m,textAnchor:_,fontSize:s,fontFamily:r,fontWeight:a,maxWidth:i.config.yaxis[e].labels.maxWidth,foreColor:Array.isArray(b)?b[l]:b,isPlainText:!1,cssClass:"apexcharts-yaxis-label "+o.cssClass});l===d&&(f=y),c.add(y);var w=document.createElementNS(i.globals.SVGNS,"title");if(w.textContent=Array.isArray(m)?m.join(" "):m,y.node.appendChild(w),0!==i.config.yaxis[e].labels.rotate){var x=n.rotateAroundCenter(f.node),C=n.rotateAroundCenter(y.node);y.node.setAttribute("transform","rotate(".concat(i.config.yaxis[e].labels.rotate," ").concat(x.x," ").concat(C.y,")"))}h+=u},v=d;v>=0;v--)m(v);if(void 0!==i.config.yaxis[e].title.text){var _=n.group({class:"apexcharts-yaxis-title"}),b=0;i.config.yaxis[e].opposite&&(b=i.globals.translateYAxisX[e]);var y=n.drawText({x:b,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[e].title.offsetY,text:i.config.yaxis[e].title.text,textAnchor:"end",foreColor:i.config.yaxis[e].title.style.color,fontSize:i.config.yaxis[e].title.style.fontSize,fontWeight:i.config.yaxis[e].title.style.fontWeight,fontFamily:i.config.yaxis[e].title.style.fontFamily,cssClass:"apexcharts-yaxis-title-text "+i.config.yaxis[e].title.style.cssClass});_.add(y),l.add(_)}var w=i.config.yaxis[e].axisBorder,x=31+w.offsetX;if(i.config.yaxis[e].opposite&&(x=-31-w.offsetX),w.show){var S=n.drawLine(x,i.globals.translateY+w.offsetY-2,x,i.globals.gridHeight+i.globals.translateY+w.offsetY+2,w.color,0,w.width);l.add(S)}return i.config.yaxis[e].axisTicks.show&&this.axesUtils.drawYAxisTicks(x,d,w,i.config.yaxis[e].axisTicks,e,u,l),l}},{key:"drawYaxisInversed",value:function(e){var t=this.w,i=new C(this.ctx),n=i.group({class:"apexcharts-xaxis apexcharts-yaxis-inversed"}),o=i.group({class:"apexcharts-xaxis-texts-g",transform:"translate(".concat(t.globals.translateXAxisX,", ").concat(t.globals.translateXAxisY,")")});n.add(o);var s=t.globals.yAxisScale[e].result.length-1,r=t.globals.gridWidth/s+.1,a=r+t.config.xaxis.labels.offsetX,l=t.globals.xLabelFormatter,c=t.globals.yAxisScale[e].result.slice(),d=t.globals.timescaleLabels;d.length>0&&(this.xaxisLabels=d.slice(),s=(c=d.slice()).length),c=this.axesUtils.checkForReversedLabels(e,c);var u=d.length;if(t.config.xaxis.labels.show)for(var h=u?0:s;u?h=0;u?h++:h--){var g=c[h];g=l(g,h,t);var p=t.globals.gridWidth+t.globals.padHorizontal-(a-r+t.config.xaxis.labels.offsetX);if(d.length){var f=this.axesUtils.getLabel(c,d,p,h,this.drawnLabels,this.xaxisFontSize);p=f.x,g=f.text,this.drawnLabels.push(f.text),0===h&&t.globals.skipFirstTimelinelabel&&(g=""),h===c.length-1&&t.globals.skipLastTimelinelabel&&(g="")}var m=i.drawText({x:p,y:this.xAxisoffX+t.config.xaxis.labels.offsetY+30-("top"===t.config.xaxis.position?t.globals.xAxisHeight+t.config.xaxis.axisTicks.height-2:0),text:g,textAnchor:"middle",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[e]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:t.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:"apexcharts-xaxis-label "+t.config.xaxis.labels.style.cssClass});o.add(m),m.tspan(g);var v=document.createElementNS(t.globals.SVGNS,"title");v.textContent=g,m.node.appendChild(v),a+=r}return this.inversedYAxisTitleText(n),this.inversedYAxisBorder(n),n}},{key:"inversedYAxisBorder",value:function(e){var t=this.w,i=new C(this.ctx),n=t.config.xaxis.axisBorder;if(n.show){var o=0;"bar"===t.config.chart.type&&t.globals.isXNumeric&&(o-=15);var s=i.drawLine(t.globals.padHorizontal+o+n.offsetX,this.xAxisoffX,t.globals.gridWidth,this.xAxisoffX,n.color,0,n.height);this.elgrid&&this.elgrid.elGridBorders&&t.config.grid.show?this.elgrid.elGridBorders.add(s):e.add(s)}}},{key:"inversedYAxisTitleText",value:function(e){var t=this.w,i=new C(this.ctx);if(void 0!==t.config.xaxis.title.text){var n=i.group({class:"apexcharts-xaxis-title apexcharts-yaxis-title-inversed"}),o=i.drawText({x:t.globals.gridWidth/2+t.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(t.config.xaxis.title.style.fontSize)+t.config.xaxis.title.offsetY+20,text:t.config.xaxis.title.text,textAnchor:"middle",fontSize:t.config.xaxis.title.style.fontSize,fontFamily:t.config.xaxis.title.style.fontFamily,fontWeight:t.config.xaxis.title.style.fontWeight,foreColor:t.config.xaxis.title.style.color,cssClass:"apexcharts-xaxis-title-text "+t.config.xaxis.title.style.cssClass});n.add(o),e.add(n)}}},{key:"yAxisTitleRotate",value:function(e,t){var i=this.w,n=new C(this.ctx),o={width:0,height:0},s={width:0,height:0},r=i.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-texts-g"));null!==r&&(o=r.getBoundingClientRect());var a=i.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(e,"'] .apexcharts-yaxis-title text"));if(null!==a&&(s=a.getBoundingClientRect()),null!==a){var l=this.xPaddingForYAxisTitle(e,o,s,t);a.setAttribute("x",l.xPos-(t?10:0))}if(null!==a){var c=n.rotateAroundCenter(a);a.setAttribute("transform","rotate(".concat(t?-1*i.config.yaxis[e].title.rotate:i.config.yaxis[e].title.rotate," ").concat(c.x," ").concat(c.y,")"))}}},{key:"xPaddingForYAxisTitle",value:function(e,t,i,n){var o=this.w,s=0,r=0,a=10;return void 0===o.config.yaxis[e].title.text||e<0?{xPos:r,padd:0}:(n?(r=t.width+o.config.yaxis[e].title.offsetX+i.width/2+a/2,0===(s+=1)&&(r-=a/2)):(r=-1*t.width+o.config.yaxis[e].title.offsetX+a/2+i.width/2,o.globals.isBarHorizontal&&(a=25,r=-1*t.width-o.config.yaxis[e].title.offsetX-a)),{xPos:r,padd:a})}},{key:"setYAxisXPosition",value:function(e,t){var i=this.w,n=0,o=0,s=18,r=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map((function(a,l){var c=i.globals.ignoreYAxisIndexes.indexOf(l)>-1||!a.show||a.floating||0===e[l].width,d=e[l].width+t[l].width;a.opposite?i.globals.isBarHorizontal?(o=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[l]=o-a.labels.offsetX):(o=i.globals.gridWidth+i.globals.translateX+r,c||(r=r+d+20),i.globals.translateYAxisX[l]=o-a.labels.offsetX+20):(n=i.globals.translateX-s,c||(s=s+d+20),i.globals.translateYAxisX[l]=n+a.labels.offsetX)}))}},{key:"setYAxisTextAlignments",value:function(){var e=this.w,t=e.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis");(t=y.listToArray(t)).forEach((function(t,i){var n=e.config.yaxis[i];if(n&&!n.floating&&void 0!==n.labels.align){var o=e.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(i,"'] .apexcharts-yaxis-texts-g")),s=e.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(i,"'] .apexcharts-yaxis-label"));s=y.listToArray(s);var r=o.getBoundingClientRect();"left"===n.labels.align?(s.forEach((function(e,t){e.setAttribute("text-anchor","start")})),n.opposite||o.setAttribute("transform","translate(-".concat(r.width,", 0)"))):"center"===n.labels.align?(s.forEach((function(e,t){e.setAttribute("text-anchor","middle")})),o.setAttribute("transform","translate(".concat(r.width/2*(n.opposite?1:-1),", 0)"))):"right"===n.labels.align&&(s.forEach((function(e,t){e.setAttribute("text-anchor","end")})),n.opposite&&o.setAttribute("transform","translate(".concat(r.width,", 0)")))}}))}}]),e}(),J=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.documentEvent=y.bind(this.documentEvent,this)}return c(e,[{key:"addEventListener",value:function(e,t){var i=this.w;i.globals.events.hasOwnProperty(e)?i.globals.events[e].push(t):i.globals.events[e]=[t]}},{key:"removeEventListener",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){var n=i.globals.events[e].indexOf(t);-1!==n&&i.globals.events[e].splice(n,1)}}},{key:"fireEvent",value:function(e,t){var i=this.w;if(i.globals.events.hasOwnProperty(e)){t&&t.length||(t=[]);for(var n=i.globals.events[e],o=n.length,s=0;s0&&(t=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=t.filter((function(t){return t.name===e}))[0];if(!i)throw new Error("Wrong locale name provided. Please make sure you set the correct locale name in options");var n=y.extend(D,i);this.w.globals.locale=n.options}}]),e}(),te=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"drawAxis",value:function(e,t){var i,n,o=this,s=this.w.globals,r=this.w.config,a=new G(this.ctx,t),l=new Q(this.ctx,t);s.axisCharts&&"radar"!==e&&(s.isBarHorizontal?(n=l.drawYaxisInversed(0),i=a.drawXaxisInversed(0),s.dom.elGraphical.add(i),s.dom.elGraphical.add(n)):(i=a.drawXaxis(),s.dom.elGraphical.add(i),r.yaxis.map((function(e,t){if(-1===s.ignoreYAxisIndexes.indexOf(t)&&(n=l.drawYaxis(t),s.dom.Paper.add(n),"back"===o.w.config.grid.position)){var i=s.dom.Paper.children()[1];i.remove(),s.dom.Paper.add(i)}}))))}}]),e}(),ie=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"drawXCrosshairs",value:function(){var e=this.w,t=new C(this.ctx),i=new x(this.ctx),n=e.config.xaxis.crosshairs.fill.gradient,o=e.config.xaxis.crosshairs.dropShadow,s=e.config.xaxis.crosshairs.fill.type,r=n.colorFrom,a=n.colorTo,l=n.opacityFrom,c=n.opacityTo,d=n.stops,u=o.enabled,h=o.left,g=o.top,p=o.blur,f=o.color,m=o.opacity,v=e.config.xaxis.crosshairs.fill.color;if(e.config.xaxis.crosshairs.show){"gradient"===s&&(v=t.drawGradient("vertical",r,a,l,c,null,d,null));var _=t.drawRect();1===e.config.xaxis.crosshairs.width&&(_=t.drawLine());var b=e.globals.gridHeight;(!y.isNumber(b)||b<0)&&(b=0);var w=e.config.xaxis.crosshairs.width;(!y.isNumber(w)||w<0)&&(w=0),_.attr({class:"apexcharts-xcrosshairs",x:0,y:0,y2:b,width:w,height:b,fill:v,filter:"none","fill-opacity":e.config.xaxis.crosshairs.opacity,stroke:e.config.xaxis.crosshairs.stroke.color,"stroke-width":e.config.xaxis.crosshairs.stroke.width,"stroke-dasharray":e.config.xaxis.crosshairs.stroke.dashArray}),u&&(_=i.dropShadow(_,{left:h,top:g,blur:p,color:f,opacity:m})),e.globals.dom.elGraphical.add(_)}}},{key:"drawYCrosshairs",value:function(){var e=this.w,t=new C(this.ctx),i=e.config.yaxis[0].crosshairs,n=e.globals.barPadForNumericAxis;if(e.config.yaxis[0].crosshairs.show){var o=t.drawLine(-n,0,e.globals.gridWidth+n,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);o.attr({class:"apexcharts-ycrosshairs"}),e.globals.dom.elGraphical.add(o)}var s=t.drawLine(-n,0,e.globals.gridWidth+n,0,i.stroke.color,0,0);s.attr({class:"apexcharts-ycrosshairs-hidden"}),e.globals.dom.elGraphical.add(s)}}]),e}(),ne=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"checkResponsiveConfig",value:function(e){var t=this,i=this.w,n=i.config;if(0!==n.responsive.length){var o=n.responsive.slice();o.sort((function(e,t){return e.breakpoint>t.breakpoint?1:t.breakpoint>e.breakpoint?-1:0})).reverse();var s=new F({}),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=o[0].breakpoint,r=window.innerWidth>0?window.innerWidth:screen.width;if(r>n){var a=S.extendArrayProps(s,i.globals.initialConfig,i);e=y.extend(a,e),e=y.extend(i.config,e),t.overrideResponsiveOptions(e)}else for(var l=0;l0&&"function"==typeof t.config.colors[0]&&(t.globals.colors=t.config.series.map((function(i,n){var o=t.config.colors[n];return o||(o=t.config.colors[0]),"function"==typeof o?(e.isColorFn=!0,o({value:t.globals.axisCharts?t.globals.series[n][0]?t.globals.series[n][0]:0:t.globals.series[n],seriesIndex:n,dataPointIndex:n,w:t})):o})))),t.globals.seriesColors.map((function(e,i){e&&(t.globals.colors[i]=e)})),t.config.theme.monochrome.enabled){var n=[],o=t.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(o=t.globals.series[0].length*t.globals.series.length);for(var s=t.config.theme.monochrome.color,r=1/(o/t.config.theme.monochrome.shadeIntensity),a=t.config.theme.monochrome.shadeTo,l=0,c=0;c2&&void 0!==arguments[2]?arguments[2]:null,n=this.w,o=t||n.globals.series.length;if(null===i&&(i=this.isBarDistributed||this.isHeatmapDistributed||"heatmap"===n.config.chart.type&&n.config.plotOptions.heatmap.colorScale.inverse),i&&n.globals.series.length&&(o=n.globals.series[n.globals.maxValsInArrayIndex].length*n.globals.series.length),e.lengthe.globals.svgWidth&&(this.dCtx.lgRect.width=e.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:"getLargestStringFromMultiArr",value:function(e,t){var i=e;if(this.w.globals.isMultiLineX){var n=t.map((function(e,t){return Array.isArray(e)?e.length:1})),o=Math.max.apply(Math,v(n));i=t[n.indexOf(o)]}return i}}]),e}(),ae=function(){function e(t){a(this,e),this.w=t.w,this.dCtx=t}return c(e,[{key:"getxAxisLabelsCoords",value:function(){var e,t=this.w,i=t.globals.labels.slice();if(t.config.xaxis.convertedCatToNumeric&&0===i.length&&(i=t.globals.categoryLabels),t.globals.timescaleLabels.length>0){var n=this.getxAxisTimeScaleLabelsCoords();e={width:n.width,height:n.height},t.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends="left"!==t.config.legend.position&&"right"!==t.config.legend.position||t.config.legend.floating?0:this.dCtx.lgRect.width;var o=t.globals.xLabelFormatter,s=y.getLargestStringFromArr(i),r=this.dCtx.dimHelpers.getLargestStringFromMultiArr(s,i);t.globals.isBarHorizontal&&(r=s=t.globals.yAxisScale[0].result.reduce((function(e,t){return e.length>t.length?e:t}),0));var a=new R(this.dCtx.ctx),l=s;s=a.xLabelFormat(o,s,l,{i:void 0,dateFormatter:new I(this.dCtx.ctx).formatDate,w:t}),r=a.xLabelFormat(o,r,l,{i:void 0,dateFormatter:new I(this.dCtx.ctx).formatDate,w:t}),(t.config.xaxis.convertedCatToNumeric&&void 0===s||""===String(s).trim())&&(r=s="1");var c=new C(this.dCtx.ctx),d=c.getTextRects(s,t.config.xaxis.labels.style.fontSize),u=d;if(s!==r&&(u=c.getTextRects(r,t.config.xaxis.labels.style.fontSize)),(e={width:d.width>=u.width?d.width:u.width,height:d.height>=u.height?d.height:u.height}).width*i.length>t.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&0!==t.config.xaxis.labels.rotate||t.config.xaxis.labels.rotateAlways){if(!t.globals.isBarHorizontal){t.globals.rotateXLabels=!0;var h=function(e){return c.getTextRects(e,t.config.xaxis.labels.style.fontSize,t.config.xaxis.labels.style.fontFamily,"rotate(".concat(t.config.xaxis.labels.rotate," 0 0)"),!1)};d=h(s),s!==r&&(u=h(r)),e.height=(d.height>u.height?d.height:u.height)/1.5,e.width=d.width>u.width?d.width:u.width}}else t.globals.rotateXLabels=!1}return t.config.xaxis.labels.show||(e={width:0,height:0}),{width:e.width,height:e.height}}},{key:"getxAxisGroupLabelsCoords",value:function(){var e,t=this.w;if(!t.globals.hasXaxisGroups)return{width:0,height:0};var i,n=(null===(e=t.config.xaxis.group.style)||void 0===e?void 0:e.fontSize)||t.config.xaxis.labels.style.fontSize,o=t.globals.groups.map((function(e){return e.title})),s=y.getLargestStringFromArr(o),r=this.dCtx.dimHelpers.getLargestStringFromMultiArr(s,o),a=new C(this.dCtx.ctx),l=a.getTextRects(s,n),c=l;return s!==r&&(c=a.getTextRects(r,n)),i={width:l.width>=c.width?l.width:c.width,height:l.height>=c.height?l.height:c.height},t.config.xaxis.labels.show||(i={width:0,height:0}),{width:i.width,height:i.height}}},{key:"getxAxisTitleCoords",value:function(){var e=this.w,t=0,i=0;if(void 0!==e.config.xaxis.title.text){var n=new C(this.dCtx.ctx).getTextRects(e.config.xaxis.title.text,e.config.xaxis.title.style.fontSize);t=n.width,i=n.height}return{width:t,height:i}}},{key:"getxAxisTimeScaleLabelsCoords",value:function(){var e,t=this.w;this.dCtx.timescaleLabels=t.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map((function(e){return e.value})),n=i.reduce((function(e,t){return void 0===e?(console.error("You have possibly supplied invalid Date format. Please supply a valid JavaScript Date"),0):e.length>t.length?e:t}),0);return 1.05*(e=new C(this.dCtx.ctx).getTextRects(n,t.config.xaxis.labels.style.fontSize)).width*i.length>t.globals.gridWidth&&0!==t.config.xaxis.labels.rotate&&(t.globals.overlappingXLabels=!0),e}},{key:"additionalPaddingXLabels",value:function(e){var t=this,i=this.w,n=i.globals,o=i.config,s=o.xaxis.type,r=e.width;n.skipLastTimelinelabel=!1,n.skipFirstTimelinelabel=!1;var a=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,l=function(e,a){o.yaxis.length>1&&function(e){return-1!==n.collapsedSeriesIndices.indexOf(e)}(a)||function(e){if(t.dCtx.timescaleLabels&&t.dCtx.timescaleLabels.length){var a=t.dCtx.timescaleLabels[0],l=t.dCtx.timescaleLabels[t.dCtx.timescaleLabels.length-1].position+r/1.75-t.dCtx.yAxisWidthRight,c=a.position-r/1.75+t.dCtx.yAxisWidthLeft,d="right"===i.config.legend.position&&t.dCtx.lgRect.width>0?t.dCtx.lgRect.width:0;l>n.svgWidth-n.translateX-d&&(n.skipLastTimelinelabel=!0),c<-(e.show&&!e.floating||"bar"!==o.chart.type&&"candlestick"!==o.chart.type&&"rangeBar"!==o.chart.type&&"boxPlot"!==o.chart.type?10:r/1.75)&&(n.skipFirstTimelinelabel=!0)}else"datetime"===s?t.dCtx.gridPad.rightString(a.niceMax).length?d:a.niceMax,h=c(u,{seriesIndex:r,dataPointIndex:-1,w:t}),g=h;if(void 0!==h&&0!==h.length||(h=u),t.globals.isBarHorizontal){n=0;var p=t.globals.labels.slice();h=c(h=y.getLargestStringFromArr(p),{seriesIndex:r,dataPointIndex:-1,w:t}),g=e.dCtx.dimHelpers.getLargestStringFromMultiArr(h,p)}var f=new C(e.dCtx.ctx),m="rotate(".concat(s.labels.rotate," 0 0)"),v=f.getTextRects(h,s.labels.style.fontSize,s.labels.style.fontFamily,m,!1),_=v;h!==g&&(_=f.getTextRects(g,s.labels.style.fontSize,s.labels.style.fontFamily,m,!1)),i.push({width:(l>_.width||l>v.width?l:_.width>v.width?_.width:v.width)+n,height:_.height>v.height?_.height:v.height})}else i.push({width:0,height:0})})),i}},{key:"getyAxisTitleCoords",value:function(){var e=this,t=this.w,i=[];return t.config.yaxis.map((function(t,n){if(t.show&&void 0!==t.title.text){var o=new C(e.dCtx.ctx),s="rotate(".concat(t.title.rotate," 0 0)"),r=o.getTextRects(t.title.text,t.title.style.fontSize,t.title.style.fontFamily,s,!1);i.push({width:r.width,height:r.height})}else i.push({width:0,height:0})})),i}},{key:"getTotalYAxisWidth",value:function(){var e=this.w,t=0,i=0,n=0,o=e.globals.yAxisScale.length>1?10:0,s=new j(this.dCtx.ctx),r=function(r,a){var l=e.config.yaxis[a].floating,c=0;r.width>0&&!l?(c=r.width+o,function(t){return e.globals.ignoreYAxisIndexes.indexOf(t)>-1}(a)&&(c=c-r.width-o)):c=l||s.isYAxisHidden(a)?0:5,e.config.yaxis[a].opposite?n+=c:i+=c,t+=c};return e.globals.yLabelsCoords.map((function(e,t){r(e,t)})),e.globals.yTitleCoords.map((function(e,t){r(e,t)})),e.globals.isBarHorizontal&&!e.config.yaxis[0].floating&&(t=e.globals.yLabelsCoords[0].width+e.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=n,t}}]),e}(),ce=function(){function e(t){a(this,e),this.w=t.w,this.dCtx=t}return c(e,[{key:"gridPadForColumnsInNumericAxis",value:function(e){var t=this.w;if(t.globals.noData||t.globals.allSeriesCollapsed)return 0;var i=function(e){return"bar"===e||"rangeBar"===e||"candlestick"===e||"boxPlot"===e},n=t.config.chart.type,o=0,s=i(n)?t.config.series.length:1;if(t.globals.comboBarCount>0&&(s=t.globals.comboBarCount),t.globals.collapsedSeries.forEach((function(e){i(e.type)&&(s-=1)})),t.config.chart.stacked&&(s=1),(i(n)||t.globals.comboBarCount>0)&&t.globals.isXNumeric&&!t.globals.isBarHorizontal&&s>0){var r,a,l=Math.abs(t.globals.initialMaxX-t.globals.initialMinX);l<=3&&(l=t.globals.dataPoints),r=l/e,t.globals.minXDiff&&t.globals.minXDiff/r>0&&(a=t.globals.minXDiff/r),a>e/2&&(a/=2),(o=a/s*parseInt(t.config.plotOptions.bar.columnWidth,10)/100)<1&&(o=1),o=o/(s>1?1:1.5)+5,t.globals.barPadForNumericAxis=o}return o}},{key:"gridPadFortitleSubtitle",value:function(){var e=this,t=this.w,i=t.globals,n=this.dCtx.isSparkline||!t.globals.axisCharts?0:10;["title","subtitle"].forEach((function(i){void 0!==t.config[i].text?n+=t.config[i].margin:n+=e.dCtx.isSparkline||!t.globals.axisCharts?0:5})),!t.config.legend.show||"bottom"!==t.config.legend.position||t.config.legend.floating||t.globals.axisCharts||(n+=10);var o=this.dCtx.dimHelpers.getTitleSubtitleCoords("title"),s=this.dCtx.dimHelpers.getTitleSubtitleCoords("subtitle");i.gridHeight=i.gridHeight-o.height-s.height-n,i.translateY=i.translateY+o.height+s.height+n}},{key:"setGridXPosForDualYAxis",value:function(e,t){var i=this.w,n=new j(this.dCtx.ctx);i.config.yaxis.map((function(o,s){-1!==i.globals.ignoreYAxisIndexes.indexOf(s)||o.floating||n.isYAxisHidden(s)||(o.opposite&&(i.globals.translateX=i.globals.translateX-(t[s].width+e[s].width)-parseInt(i.config.yaxis[s].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))}))}}]),e}(),de=function(){function e(t){a(this,e),this.ctx=t,this.w=t.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 re(this),this.dimYAxis=new le(this),this.dimXAxis=new ae(this),this.dimGrid=new ce(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return c(e,[{key:"plotCoords",value:function(){var e=this,t=this.w,i=t.globals;this.lgRect=this.dimHelpers.getLegendsRect(),this.isSparkline&&(t.config.markers.discrete.length>0||t.config.markers.size>0)&&Object.entries(this.gridPad).forEach((function(t){var i=m(t,2),n=i[0],o=i[1];e.gridPad[n]=Math.max(o,e.w.globals.markers.largestSize/1.5)})),i.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),i.gridHeight=i.gridHeight-this.gridPad.top-this.gridPad.bottom,i.gridWidth=i.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var n=this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth);i.gridWidth=i.gridWidth-2*n,i.translateX=i.translateX+this.gridPad.left+this.xPadLeft+(n>0?n+4:0),i.translateY=i.translateY+this.gridPad.top}},{key:"setDimensionsForAxisCharts",value:function(){var e=this,t=this.w,i=t.globals,n=this.dimYAxis.getyAxisLabelsCoords(),o=this.dimYAxis.getyAxisTitleCoords();t.globals.yLabelsCoords=[],t.globals.yTitleCoords=[],t.config.yaxis.map((function(e,i){t.globals.yLabelsCoords.push({width:n[i].width,index:i}),t.globals.yTitleCoords.push({width:o[i].width,index:i})})),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var s=this.dimXAxis.getxAxisLabelsCoords(),r=this.dimXAxis.getxAxisGroupLabelsCoords(),a=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(s,a,r),i.translateXAxisY=t.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=t.globals.rotateXLabels&&t.globals.isXNumeric&&t.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,t.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(t.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+t.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+t.config.xaxis.labels.offsetX;var l=this.yAxisWidth,c=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-a.height,i.xAxisGroupLabelsHeight=i.xAxisLabelsHeight-s.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var d=10;("radar"===t.config.chart.type||this.isSparkline)&&(l=0,c=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||"treemap"===t.config.chart.type)&&(l=0,c=0,d=0),this.isSparkline||this.dimXAxis.additionalPaddingXLabels(s);var u=function(){i.translateX=l,i.gridHeight=i.svgHeight-e.lgRect.height-c-(e.isSparkline||"treemap"===t.config.chart.type?0:t.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-l};switch("top"===t.config.xaxis.position&&(d=i.xAxisHeight-t.config.xaxis.axisTicks.height-5),t.config.legend.position){case"bottom":i.translateY=d,u();break;case"top":i.translateY=this.lgRect.height+d,u();break;case"left":i.translateY=d,i.translateX=this.lgRect.width+l,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-l;break;case"right":i.translateY=d,i.translateX=l,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-l-5;break;default:throw new Error("Legend position not supported")}this.dimGrid.setGridXPosForDualYAxis(o,n),new Q(this.ctx).setYAxisXPosition(n,o)}},{key:"setDimensionsForNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=e.config,n=0;e.config.legend.show&&!e.config.legend.floating&&(n=20);var o="pie"===i.chart.type||"polarArea"===i.chart.type||"donut"===i.chart.type?"pie":"radialBar",s=i.plotOptions[o].offsetY,r=i.plotOptions[o].offsetX;if(!i.legend.show||i.legend.floating)return t.gridHeight=t.svgHeight-i.grid.padding.left+i.grid.padding.right,t.gridWidth=t.gridHeight,t.translateY=s,void(t.translateX=r+(t.svgWidth-t.gridWidth)/2);switch(i.legend.position){case"bottom":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=s-10,t.translateX=r+(t.svgWidth-t.gridWidth)/2;break;case"top":t.gridHeight=t.svgHeight-this.lgRect.height-t.goldenPadding,t.gridWidth=t.svgWidth,t.translateY=this.lgRect.height+s+10,t.translateX=r+(t.svgWidth-t.gridWidth)/2;break;case"left":t.gridWidth=t.svgWidth-this.lgRect.width-n,t.gridHeight="auto"!==i.chart.height?t.svgHeight:t.gridWidth,t.translateY=s,t.translateX=r+this.lgRect.width+n;break;case"right":t.gridWidth=t.svgWidth-this.lgRect.width-n-5,t.gridHeight="auto"!==i.chart.height?t.svgHeight:t.gridWidth,t.translateY=s,t.translateX=r+10;break;default:throw new Error("Legend position not supported")}}},{key:"conditionalChecksForAxisCoords",value:function(e,t,i){var n=this.w,o=n.globals.hasXaxisGroups?2:1,s=i.height+e.height+t.height,r=n.globals.isMultiLineX?1.2:n.globals.LINE_HEIGHT_RATIO,a=n.globals.rotateXLabels?22:10,l=n.globals.rotateXLabels&&"bottom"===n.config.legend.position?10:0;this.xAxisHeight=s*r+o*a+l,this.xAxisWidth=e.width,this.xAxisHeight-t.height>n.config.xaxis.labels.maxHeight&&(this.xAxisHeight=n.config.xaxis.labels.maxHeight),n.config.xaxis.labels.minHeight&&this.xAxisHeightd&&(this.yAxisWidth=d)}}]),e}(),ue=function(){function e(t){a(this,e),this.w=t.w,this.lgCtx=t}return c(e,[{key:"getLegendStyles",value:function(){var e=document.createElement("style");e.setAttribute("type","text/css");var t=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.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\t\n flex-wrap: wrap\t\n }\t\n .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\t\n flex-direction: column;\t\n bottom: 0;\t\n }\t\n .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\t\n justify-content: flex-start;\t\n }\t\n .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\t\n justify-content: center; \t\n }\t\n .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-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.apx-legend-position-bottom .apexcharts-legend-series, .apexcharts-legend.apx-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 e.appendChild(t),e}},{key:"getLegendBBox",value:function(){var e=this.w.globals.dom.baseEl.querySelector(".apexcharts-legend").getBoundingClientRect(),t=e.width;return{clwh:e.height,clww:t}}},{key:"appendToForeignObject",value:function(){this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles())}},{key:"toggleDataSeries",value:function(e,t){var i=this,n=this.w;if(n.globals.axisCharts||"radialBar"===n.config.chart.type){n.globals.resized=!0;var o=null,s=null;n.globals.risingSeries=[],n.globals.axisCharts?(o=n.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(e,"']")),s=parseInt(o.getAttribute("data:realIndex"),10)):(o=n.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(e+1,"']")),s=parseInt(o.getAttribute("rel"),10)-1),t?[{cs:n.globals.collapsedSeries,csi:n.globals.collapsedSeriesIndices},{cs:n.globals.ancillaryCollapsedSeries,csi:n.globals.ancillaryCollapsedSeriesIndices}].forEach((function(e){i.riseCollapsedSeries(e.cs,e.csi,s)})):this.hideSeries({seriesEl:o,realIndex:s})}else{var r=n.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(e+1,"'] path")),a=n.config.chart.type;if("pie"===a||"polarArea"===a||"donut"===a){var l=n.config.plotOptions.pie.donut.labels;new C(this.lgCtx.ctx).pathMouseDown(r.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(r.members[0].node,l)}r.fire("click")}}},{key:"hideSeries",value:function(e){var t=e.seriesEl,i=e.realIndex,n=this.w,o=y.clone(n.config.series);if(n.globals.axisCharts){var s=!1;if(n.config.yaxis[i]&&n.config.yaxis[i].show&&n.config.yaxis[i].showAlways&&(s=!0,n.globals.ancillaryCollapsedSeriesIndices.indexOf(i)<0&&(n.globals.ancillaryCollapsedSeries.push({index:i,data:o[i].data.slice(),type:t.parentNode.className.baseVal.split("-")[1]}),n.globals.ancillaryCollapsedSeriesIndices.push(i))),!s){n.globals.collapsedSeries.push({index:i,data:o[i].data.slice(),type:t.parentNode.className.baseVal.split("-")[1]}),n.globals.collapsedSeriesIndices.push(i);var r=n.globals.risingSeries.indexOf(i);n.globals.risingSeries.splice(r,1)}}else n.globals.collapsedSeries.push({index:i,data:o[i]}),n.globals.collapsedSeriesIndices.push(i);for(var a=t.childNodes,l=0;l0){for(var s=0;s-1&&(e[n].data=[])})):e.forEach((function(i,n){t.globals.collapsedSeriesIndices.indexOf(n)>-1&&(e[n]=0)})),e}}]),e}(),he=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.onLegendClick=this.onLegendClick.bind(this),this.onLegendHovered=this.onLegendHovered.bind(this),this.isBarsDistributed="bar"===this.w.config.chart.type&&this.w.config.plotOptions.bar.distributed&&1===this.w.config.series.length,this.legendHelpers=new ue(this)}return c(e,[{key:"init",value:function(){var e=this.w,t=e.globals,i=e.config;if((i.legend.showForSingleSeries&&1===t.series.length||this.isBarsDistributed||t.series.length>1||!t.axisCharts)&&i.legend.show){for(;t.dom.elLegendWrap.firstChild;)t.dom.elLegendWrap.removeChild(t.dom.elLegendWrap.firstChild);this.drawLegends(),y.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 e=this,t=this.w,i=t.config.legend.fontFamily,n=t.globals.seriesNames,o=t.globals.colors.slice();if("heatmap"===t.config.chart.type){var s=t.config.plotOptions.heatmap.colorScale.ranges;n=s.map((function(e){return e.name?e.name:e.from+" - "+e.to})),o=s.map((function(e){return e.color}))}else this.isBarsDistributed&&(n=t.globals.labels.slice());t.config.legend.customLegendItems.length&&(n=t.config.legend.customLegendItems);for(var r=t.globals.legendFormatter,a=t.config.legend.inverseOrder,l=a?n.length-1:0;a?l>=0:l<=n.length-1;a?l--:l++){var c=r(n[l],{seriesIndex:l,w:t}),d=!1,u=!1;if(t.globals.collapsedSeries.length>0)for(var h=0;h0)for(var g=0;g0?l-10:0)+(c>0?c-10:0)}n.style.position="absolute",s=s+e+i.config.legend.offsetX,r=r+t+i.config.legend.offsetY,n.style.left=s+"px",n.style.top=r+"px","bottom"===i.config.legend.position?(n.style.top="auto",n.style.bottom=5-i.config.legend.offsetY+"px"):"right"===i.config.legend.position&&(n.style.left="auto",n.style.right=25+i.config.legend.offsetX+"px"),["width","height"].forEach((function(e){n.style[e]&&(n.style[e]=parseInt(i.config.legend[e],10)+"px")}))}},{key:"legendAlignHorizontal",value:function(){var e=this.w;e.globals.dom.elLegendWrap.style.right=0;var t=this.legendHelpers.getLegendBBox(),i=new de(this.ctx),n=i.dimHelpers.getTitleSubtitleCoords("title"),o=i.dimHelpers.getTitleSubtitleCoords("subtitle"),s=0;"bottom"===e.config.legend.position?s=-t.clwh/1.8:"top"===e.config.legend.position&&(s=n.height+o.height+e.config.title.margin+e.config.subtitle.margin-10),this.setLegendWrapXY(20,s)}},{key:"legendAlignVertical",value:function(){var e=this.w,t=this.legendHelpers.getLegendBBox(),i=0;"left"===e.config.legend.position&&(i=20),"right"===e.config.legend.position&&(i=e.globals.svgWidth-t.clww-10),this.setLegendWrapXY(i,20)}},{key:"onLegendHovered",value:function(e){var t=this.w,i=e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker");if("heatmap"===t.config.chart.type||this.isBarsDistributed){if(i){var n=parseInt(e.target.getAttribute("rel"),10)-1;this.ctx.events.fireEvent("legendHover",[this.ctx,n,this.w]),new q(this.ctx).highlightRangeInSeries(e,e.target)}}else!e.target.classList.contains("apexcharts-inactive-legend")&&i&&new q(this.ctx).toggleSeriesOnHover(e,e.target)}},{key:"onLegendClick",value:function(e){var t=this.w;if(!t.config.legend.customLegendItems.length&&(e.target.classList.contains("apexcharts-legend-text")||e.target.classList.contains("apexcharts-legend-marker"))){var i=parseInt(e.target.getAttribute("rel"),10)-1,n="true"===e.target.getAttribute("data:collapsed"),o=this.w.config.chart.events.legendClick;"function"==typeof o&&o(this.ctx,i,this.w),this.ctx.events.fireEvent("legendClick",[this.ctx,i,this.w]);var s=this.w.config.legend.markers.onClick;"function"==typeof s&&e.target.classList.contains("apexcharts-legend-marker")&&(s(this.ctx,i,this.w),this.ctx.events.fireEvent("legendMarkerClick",[this.ctx,i,this.w])),"treemap"!==t.config.chart.type&&"heatmap"!==t.config.chart.type&&!this.isBarsDistributed&&t.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,n)}}}]),e}(),ge=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w;var i=this.w;this.ev=this.w.config.chart.events,this.selectedClass="apexcharts-selected",this.localeValues=this.w.globals.locale.toolbar,this.minX=i.globals.minX,this.maxX=i.globals.maxX}return c(e,[{key:"createToolbar",value:function(){var e=this,t=this.w,i=function(){return document.createElement("div")},n=i();if(n.setAttribute("class","apexcharts-toolbar"),n.style.top=t.config.chart.toolbar.offsetY+"px",n.style.right=3-t.config.chart.toolbar.offsetX+"px",t.globals.dom.elWrap.appendChild(n),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=t.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var o=0;o\n \n \n\n'),r("zoomOut",this.elZoomOut,'\n \n \n\n');var a=function(i){e.t[i]&&t.config.chart[i].enabled&&s.push({el:"zoom"===i?e.elZoom:e.elSelection,icon:"string"==typeof e.t[i]?e.t[i]:"zoom"===i?'\n \n \n \n':'\n \n \n',title:e.localeValues["zoom"===i?"selectionZoom":"selection"],class:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-".concat(i,"-icon")})};a("zoom"),a("selection"),this.t.pan&&t.config.chart.zoom.enabled&&s.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:t.globals.isTouchDevice?"apexcharts-element-hidden":"apexcharts-pan-icon"}),r("reset",this.elZoomReset,'\n \n \n'),this.t.download&&s.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&&t.height>0&&this.slDraggableRect.selectize({points:"l, r",pointSize:8,pointType:"rect"}).resize({constraint:{minX:0,minY:0,maxX:e.globals.gridWidth,maxY:e.globals.gridHeight}}).on("resizing",this.selectionDragging.bind(this,"resizing"))}}},{key:"preselectedSelection",value:function(){var e=this.w,t=this.xyRatios;if(!e.globals.zoomEnabled)if(void 0!==e.globals.selection&&null!==e.globals.selection)this.drawSelectionRect(e.globals.selection);else if(void 0!==e.config.chart.selection.xaxis.min&&void 0!==e.config.chart.selection.xaxis.max){var i=(e.config.chart.selection.xaxis.min-e.globals.minX)/t.xRatio,n={x:i,y:0,width:e.globals.gridWidth-(e.globals.maxX-e.config.chart.selection.xaxis.max)/t.xRatio-i,height:e.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(n),this.makeSelectionRectDraggable(),"function"==typeof e.config.chart.events.selection&&e.config.chart.events.selection(this.ctx,{xaxis:{min:e.config.chart.selection.xaxis.min,max:e.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:"drawSelectionRect",value:function(e){var t=e.x,i=e.y,n=e.width,o=e.height,s=e.translateX,r=void 0===s?0:s,a=e.translateY,l=void 0===a?0:a,c=this.w,d=this.zoomRect,u=this.selectionRect;if(this.dragged||null!==c.globals.selection){var h={transform:"translate("+r+", "+l+")"};c.globals.zoomEnabled&&this.dragged&&(n<0&&(n=1),d.attr({x:t,y:i,width:n,height:o,fill:c.config.chart.zoom.zoomedArea.fill.color,"fill-opacity":c.config.chart.zoom.zoomedArea.fill.opacity,stroke:c.config.chart.zoom.zoomedArea.stroke.color,"stroke-width":c.config.chart.zoom.zoomedArea.stroke.width,"stroke-opacity":c.config.chart.zoom.zoomedArea.stroke.opacity}),C.setAttrs(d.node,h)),c.globals.selectionEnabled&&(u.attr({x:t,y:i,width:n>0?n:0,height:o>0?o:0,fill:c.config.chart.selection.fill.color,"fill-opacity":c.config.chart.selection.fill.opacity,stroke:c.config.chart.selection.stroke.color,"stroke-width":c.config.chart.selection.stroke.width,"stroke-dasharray":c.config.chart.selection.stroke.dashArray,"stroke-opacity":c.config.chart.selection.stroke.opacity}),C.setAttrs(u.node,h))}}},{key:"hideSelectionRect",value:function(e){e&&e.attr({x:0,y:0,width:0,height:0})}},{key:"selectionDrawing",value:function(e){var t=e.context,i=e.zoomtype,n=this.w,o=t,s=this.gridRect.getBoundingClientRect(),r=o.startX-1,a=o.startY,l=!1,c=!1,d=o.clientX-s.left-r,u=o.clientY-s.top-a,h={};return Math.abs(d+r)>n.globals.gridWidth?d=n.globals.gridWidth-r:o.clientX-s.left<0&&(d=r),r>o.clientX-s.left&&(l=!0,d=Math.abs(d)),a>o.clientY-s.top&&(c=!0,u=Math.abs(u)),h="x"===i?{x:l?r-d:r,y:0,width:d,height:n.globals.gridHeight}:"y"===i?{x:0,y:c?a-u:a,width:n.globals.gridWidth,height:u}:{x:l?r-d:r,y:c?a-u:a,width:d,height:u},o.drawSelectionRect(h),o.selectionDragging("resizing"),h}},{key:"selectionDragging",value:function(e,t){var i=this,n=this.w,o=this.xyRatios,s=this.selectionRect,r=0;"resizing"===e&&(r=30);var a=function(e){return parseFloat(s.node.getAttribute(e))},l={x:a("x"),y:a("y"),width:a("width"),height:a("height")};n.globals.selection=l,"function"==typeof n.config.chart.events.selection&&n.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout((function(){var e=i.gridRect.getBoundingClientRect(),t=s.node.getBoundingClientRect(),r={xaxis:{min:n.globals.xAxisScale.niceMin+(t.left-e.left)*o.xRatio,max:n.globals.xAxisScale.niceMin+(t.right-e.left)*o.xRatio},yaxis:{min:n.globals.yAxisScale[0].niceMin+(e.bottom-t.bottom)*o.yRatio[0],max:n.globals.yAxisScale[0].niceMax-(t.top-e.top)*o.yRatio[0]}};n.config.chart.events.selection(i.ctx,r),n.config.chart.brush.enabled&&void 0!==n.config.chart.events.brushScrolled&&n.config.chart.events.brushScrolled(i.ctx,r)}),r))}},{key:"selectionDrawn",value:function(e){var t=e.context,i=e.zoomtype,n=this.w,o=t,s=this.xyRatios,r=this.ctx.toolbar;if(o.startX>o.endX){var a=o.startX;o.startX=o.endX,o.endX=a}if(o.startY>o.endY){var l=o.startY;o.startY=o.endY,o.endY=l}var c=void 0,d=void 0;n.globals.isRangeBar?(c=n.globals.yAxisScale[0].niceMin+o.startX*s.invertedYRatio,d=n.globals.yAxisScale[0].niceMin+o.endX*s.invertedYRatio):(c=n.globals.xAxisScale.niceMin+o.startX*s.xRatio,d=n.globals.xAxisScale.niceMin+o.endX*s.xRatio);var u=[],h=[];if(n.config.yaxis.forEach((function(e,t){u.push(n.globals.yAxisScale[t].niceMax-s.yRatio[t]*o.startY),h.push(n.globals.yAxisScale[t].niceMax-s.yRatio[t]*o.endY)})),o.dragged&&(o.dragX>10||o.dragY>10)&&c!==d)if(n.globals.zoomEnabled){var g=y.clone(n.globals.initialConfig.yaxis),p=y.clone(n.globals.initialConfig.xaxis);if(n.globals.zoomed=!0,n.config.xaxis.convertedCatToNumeric&&(c=Math.floor(c),d=Math.floor(d),c<1&&(c=1,d=n.globals.dataPoints),d-c<2&&(d=c+1)),"xy"!==i&&"x"!==i||(p={min:c,max:d}),"xy"!==i&&"y"!==i||g.forEach((function(e,t){g[t].min=h[t],g[t].max=u[t]})),n.config.chart.zoom.autoScaleYaxis){var f=new X(o.ctx);g=f.autoScaleY(o.ctx,g,{xaxis:p})}if(r){var m=r.getBeforeZoomRange(p,g);m&&(p=m.xaxis?m.xaxis:p,g=m.yaxis?m.yaxis:g)}var v={xaxis:p};n.config.chart.group||(v.yaxis=g),o.ctx.updateHelpers._updateOptions(v,!1,o.w.config.chart.animations.dynamicAnimation.enabled),"function"==typeof n.config.chart.events.zoomed&&r.zoomCallback(p,g)}else if(n.globals.selectionEnabled){var _,b=null;_={min:c,max:d},"xy"!==i&&"y"!==i||(b=y.clone(n.config.yaxis)).forEach((function(e,t){b[t].min=h[t],b[t].max=u[t]})),n.globals.selection=o.selection,"function"==typeof n.config.chart.events.selection&&n.config.chart.events.selection(o.ctx,{xaxis:_,yaxis:b})}}},{key:"panDragging",value:function(e){var t=e.context,i=this.w,n=t;if(void 0!==i.globals.lastClientPosition.x){var o=i.globals.lastClientPosition.x-n.clientX,s=i.globals.lastClientPosition.y-n.clientY;Math.abs(o)>Math.abs(s)&&o>0?this.moveDirection="left":Math.abs(o)>Math.abs(s)&&o<0?this.moveDirection="right":Math.abs(s)>Math.abs(o)&&s>0?this.moveDirection="up":Math.abs(s)>Math.abs(o)&&s<0&&(this.moveDirection="down")}i.globals.lastClientPosition={x:n.clientX,y:n.clientY};var r=i.globals.isRangeBar?i.globals.minY:i.globals.minX,a=i.globals.isRangeBar?i.globals.maxY:i.globals.maxX;i.config.xaxis.convertedCatToNumeric||n.panScrolled(r,a)}},{key:"delayedPanScrolled",value:function(){var e=this.w,t=e.globals.minX,i=e.globals.maxX,n=(e.globals.maxX-e.globals.minX)/2;"left"===this.moveDirection?(t=e.globals.minX+n,i=e.globals.maxX+n):"right"===this.moveDirection&&(t=e.globals.minX-n,i=e.globals.maxX-n),t=Math.floor(t),i=Math.floor(i),this.updateScrolledChart({xaxis:{min:t,max:i}},t,i)}},{key:"panScrolled",value:function(e,t){var i=this.w,n=this.xyRatios,o=y.clone(i.globals.initialConfig.yaxis),s=n.xRatio,r=i.globals.minX,a=i.globals.maxX;i.globals.isRangeBar&&(s=n.invertedYRatio,r=i.globals.minY,a=i.globals.maxY),"left"===this.moveDirection?(e=r+i.globals.gridWidth/15*s,t=a+i.globals.gridWidth/15*s):"right"===this.moveDirection&&(e=r-i.globals.gridWidth/15*s,t=a-i.globals.gridWidth/15*s),i.globals.isRangeBar||(ei.globals.initialMaxX)&&(e=r,t=a);var l={min:e,max:t};i.config.chart.zoom.autoScaleYaxis&&(o=new X(this.ctx).autoScaleY(this.ctx,o,{xaxis:l}));var c={xaxis:{min:e,max:t}};i.config.chart.group||(c.yaxis=o),this.updateScrolledChart(c,e,t)}},{key:"updateScrolledChart",value:function(e,t,i){var n=this.w;this.ctx.updateHelpers._updateOptions(e,!1,!1),"function"==typeof n.config.chart.events.scrolled&&n.config.chart.events.scrolled(this.ctx,{xaxis:{min:t,max:i}})}}]),i}(),fe=function(){function e(t){a(this,e),this.w=t.w,this.ttCtx=t,this.ctx=t.ctx}return c(e,[{key:"getNearestValues",value:function(e){var t=e.hoverArea,i=e.elGrid,n=e.clientX,o=e.clientY,s=this.w,r=i.getBoundingClientRect(),a=r.width,l=r.height,c=a/(s.globals.dataPoints-1),d=l/s.globals.dataPoints,u=this.hasBars();!s.globals.comboCharts&&!u||s.config.xaxis.convertedCatToNumeric||(c=a/s.globals.dataPoints);var h=n-r.left-s.globals.barPadForNumericAxis,g=o-r.top;h<0||g<0||h>a||g>l?(t.classList.remove("hovering-zoom"),t.classList.remove("hovering-pan")):s.globals.zoomEnabled?(t.classList.remove("hovering-pan"),t.classList.add("hovering-zoom")):s.globals.panEnabled&&(t.classList.remove("hovering-zoom"),t.classList.add("hovering-pan"));var p=Math.round(h/c),f=Math.floor(g/d);u&&!s.config.xaxis.convertedCatToNumeric&&(p=Math.ceil(h/c),p-=1);var m=null,v=null,_=[],b=[];if(s.globals.seriesXvalues.forEach((function(e){_.push([e[0]+1e-6].concat(e))})),s.globals.seriesYvalues.forEach((function(e){b.push([e[0]+1e-6].concat(e))})),_=_.map((function(e){return e.filter((function(e){return y.isNumber(e)}))})),b=b.map((function(e){return e.filter((function(e){return y.isNumber(e)}))})),s.globals.isXNumeric){var w=this.ttCtx.getElGrid().getBoundingClientRect(),x=h*(w.width/a),C=g*(w.height/l);m=(v=this.closestInMultiArray(x,C,_,b)).index,p=v.j,null!==m&&(_=s.globals.seriesXvalues[m],p=(v=this.closestInArray(x,_)).index)}return s.globals.capturedSeriesIndex=null===m?-1:m,(!p||p<1)&&(p=0),s.globals.isBarHorizontal?s.globals.capturedDataPointIndex=f:s.globals.capturedDataPointIndex=p,{capturedSeries:m,j:s.globals.isBarHorizontal?f:p,hoverX:h,hoverY:g}}},{key:"closestInMultiArray",value:function(e,t,i,n){var o=this.w,s=0,r=null,a=-1;o.globals.series.length>1?s=this.getFirstActiveXArray(i):r=0;var l=i[s][0],c=Math.abs(e-l);if(i.forEach((function(t){t.forEach((function(t,i){var n=Math.abs(e-t);n0?t:-1})),o=0;o0)for(var n=0;n *")):this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap > *")}},{key:"getAllMarkers",value:function(){var e=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers-wrap");(e=v(e)).sort((function(e,t){var i=Number(e.getAttribute("data:realIndex")),n=Number(t.getAttribute("data:realIndex"));return ni?-1:0}));var t=[];return e.forEach((function(e){t.push(e.querySelector(".apexcharts-marker"))})),t}},{key:"hasMarkers",value:function(e){return this.getElMarkers(e).length>0}},{key:"getElBars",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series")}},{key:"hasBars",value:function(){return this.getElBars().length>0}},{key:"getHoverMarkerSize",value:function(e){var t=this.w,i=t.config.markers.hover.size;return void 0===i&&(i=t.globals.markers.size[e]+t.config.markers.hover.sizeOffset),i}},{key:"toggleAllTooltipSeriesGroups",value:function(e){var t=this.w,i=this.ttCtx;0===i.allTooltipSeriesGroups.length&&(i.allTooltipSeriesGroups=t.globals.dom.baseEl.querySelectorAll(".apexcharts-tooltip-series-group"));for(var n=i.allTooltipSeriesGroups,o=0;o ').concat(i.attrs.name,"
    "),t+="
    ".concat(i.val,"
    ")})),_.innerHTML=e+"
    ",b.innerHTML=t+"
    "};r?l.globals.seriesGoals[t][i]&&Array.isArray(l.globals.seriesGoals[t][i])?y():(_.innerHTML="",b.innerHTML=""):y()}else _.innerHTML="",b.innerHTML="";null!==p&&(n[t].querySelector(".apexcharts-tooltip-text-z-label").innerHTML=l.config.tooltip.z.title,n[t].querySelector(".apexcharts-tooltip-text-z-value").innerHTML=void 0!==p?p:""),r&&f[0]&&(null==d||l.globals.ancillaryCollapsedSeriesIndices.indexOf(t)>-1||l.globals.collapsedSeriesIndices.indexOf(t)>-1?f[0].parentNode.style.display="none":f[0].parentNode.style.display=l.config.tooltip.items.display)}},{key:"toggleActiveInactiveSeries",value:function(e){var t=this.w;if(e)this.tooltipUtil.toggleAllTooltipSeriesGroups("enable");else{this.tooltipUtil.toggleAllTooltipSeriesGroups("disable");var i=t.globals.dom.baseEl.querySelector(".apexcharts-tooltip-series-group");i&&(i.classList.add("apexcharts-active"),i.style.display=t.config.tooltip.items.display)}}},{key:"getValuesToPrint",value:function(e){var t=e.i,i=e.j,n=this.w,o=this.ctx.series.filteredSeriesX(),s="",r="",a=null,l=null,c={series:n.globals.series,seriesIndex:t,dataPointIndex:i,w:n},d=n.globals.ttZFormatter;null===i?l=n.globals.series[t]:n.globals.isXNumeric&&"treemap"!==n.config.chart.type?(s=o[t][i],0===o[t].length&&(s=o[this.tooltipUtil.getFirstActiveXArray(o)][i])):s=void 0!==n.globals.labels[i]?n.globals.labels[i]:"";var u=s;return s=n.globals.isXNumeric&&"datetime"===n.config.xaxis.type?new R(this.ctx).xLabelFormat(n.globals.ttKeyFormatter,u,u,{i:void 0,dateFormatter:new I(this.ctx).formatDate,w:this.w}):n.globals.isBarHorizontal?n.globals.yLabelFormatters[0](u,c):n.globals.xLabelFormatter(u,c),void 0!==n.config.tooltip.x.formatter&&(s=n.globals.ttKeyFormatter(u,c)),n.globals.seriesZ.length>0&&n.globals.seriesZ[t].length>0&&(a=d(n.globals.seriesZ[t][i],n)),r="function"==typeof n.config.xaxis.tooltip.formatter?n.globals.xaxisTooltipFormatter(u,c):s,{val:Array.isArray(l)?l.join(" "):l,xVal:Array.isArray(s)?s.join(" "):s,xAxisTTVal:Array.isArray(r)?r.join(" "):r,zVal:a}}},{key:"handleCustomTooltip",value:function(e){var t=e.i,i=e.j,n=e.y1,o=e.y2,s=e.w,r=this.ttCtx.getElTooltip(),a=s.config.tooltip.custom;Array.isArray(a)&&a[t]&&(a=a[t]),r.innerHTML=a({ctx:this.ctx,series:s.globals.series,seriesIndex:t,dataPointIndex:i,y1:n,y2:o,w:s})}}]),e}(),ve=function(){function e(t){a(this,e),this.ttCtx=t,this.ctx=t.ctx,this.w=t.w}return c(e,[{key:"moveXCrosshairs",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,n=this.w,o=i.getElXCrosshairs(),s=e-i.xcrosshairsWidth/2,r=n.globals.labels.slice().length;if(null!==t&&(s=n.globals.gridWidth/r*t),null===o||n.globals.isBarHorizontal||(o.setAttribute("x",s),o.setAttribute("x1",s),o.setAttribute("x2",s),o.setAttribute("y2",n.globals.gridHeight),o.classList.add("apexcharts-active")),s<0&&(s=0),s>n.globals.gridWidth&&(s=n.globals.gridWidth),i.isXAxisTooltipEnabled){var a=s;"tickWidth"!==n.config.xaxis.crosshairs.width&&"barWidth"!==n.config.xaxis.crosshairs.width||(a=s+i.xcrosshairsWidth/2),this.moveXAxisTooltip(a)}}},{key:"moveYCrosshairs",value:function(e){var t=this.ttCtx;null!==t.ycrosshairs&&C.setAttrs(t.ycrosshairs,{y1:e,y2:e}),null!==t.ycrosshairsHidden&&C.setAttrs(t.ycrosshairsHidden,{y1:e,y2:e})}},{key:"moveXAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip&&0!==i.xcrosshairsWidth){i.xaxisTooltip.classList.add("apexcharts-active");var n,o=i.xaxisOffY+t.config.xaxis.tooltip.offsetY+t.globals.translateY+1+t.config.xaxis.offsetY;if(e-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(e))e+=t.globals.translateX,n=new C(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=n.width+"px",i.xaxisTooltip.style.left=e+"px",i.xaxisTooltip.style.top=o+"px"}}},{key:"moveYAxisTooltip",value:function(e){var t=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=t.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxistooltip"));var n=parseInt(i.ycrosshairsHidden.getAttribute("y1"),10),o=t.globals.translateY+n,s=i.yaxisTTEls[e].getBoundingClientRect().height,r=t.globals.translateYAxisX[e]-2;t.config.yaxis[e].opposite&&(r-=26),o-=s/2,-1===t.globals.ignoreYAxisIndexes.indexOf(e)?(i.yaxisTTEls[e].classList.add("apexcharts-active"),i.yaxisTTEls[e].style.top=o+"px",i.yaxisTTEls[e].style.left=r+t.config.yaxis[e].tooltip.offsetX+"px"):i.yaxisTTEls[e].classList.remove("apexcharts-active")}},{key:"moveTooltip",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=this.w,o=this.ttCtx,s=o.getElTooltip(),r=o.tooltipRect,a=null!==i?parseFloat(i):1,l=parseFloat(e)+a+5,c=parseFloat(t)+a/2;if(l>n.globals.gridWidth/2&&(l=l-r.ttWidth-a-10),l>n.globals.gridWidth-r.ttWidth-10&&(l=n.globals.gridWidth-r.ttWidth),l<-20&&(l=-20),n.config.tooltip.followCursor){var d=o.getElGrid().getBoundingClientRect();(l=o.e.clientX-d.left)>n.globals.gridWidth/2&&(l-=o.tooltipRect.ttWidth),(c=o.e.clientY+n.globals.translateY-d.top)>n.globals.gridHeight/2&&(c-=o.tooltipRect.ttHeight)}else n.globals.isBarHorizontal||r.ttHeight/2+c>n.globals.gridHeight&&(c=n.globals.gridHeight-r.ttHeight+n.globals.translateY);isNaN(l)||(l+=n.globals.translateX,s.style.left=l+"px",s.style.top=c+"px")}},{key:"moveMarkers",value:function(e,t){var i=this.w,n=this.ttCtx;if(i.globals.markers.size[e]>0)for(var o=i.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(e,"'] .apexcharts-marker")),s=0;s0&&(c.setAttribute("r",a),c.setAttribute("cx",i),c.setAttribute("cy",n)),this.moveXCrosshairs(i),s.fixedTooltip||this.moveTooltip(i,n,a)}}},{key:"moveDynamicPointsOnHover",value:function(e){var t,i=this.ttCtx,n=i.w,o=0,s=0,r=n.globals.pointsArray;t=new q(this.ctx).getActiveConfigSeriesIndex("asc",["line","area","scatter","bubble"]);var a=i.tooltipUtil.getHoverMarkerSize(t);r[t]&&(o=r[t][e][0],s=r[t][e][1]);var l=i.tooltipUtil.getAllMarkers();if(null!==l)for(var c=0;c0?(l[c]&&l[c].setAttribute("r",a),l[c]&&l[c].setAttribute("cy",u)):l[c]&&l[c].setAttribute("r",0)}}this.moveXCrosshairs(o),i.fixedTooltip||this.moveTooltip(o,s||n.globals.gridHeight,a)}},{key:"moveStickyTooltipOverBars",value:function(e,t){var i=this.w,n=this.ttCtx,o=i.globals.columnSeries?i.globals.columnSeries.length:i.globals.series.length,s=o>=2&&o%2==0?Math.floor(o/2):Math.floor(o/2)+1;i.globals.isBarHorizontal&&(s=new q(this.ctx).getActiveConfigSeriesIndex("desc")+1);var r=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(s,"'] path[j='").concat(e,"'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(s,"'] path[j='").concat(e,"'], .apexcharts-boxPlot-series .apexcharts-series[rel='").concat(s,"'] path[j='").concat(e,"'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(s,"'] path[j='").concat(e,"']"));r||"number"!=typeof t||(r=i.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[data\\:realIndex='".concat(t,"'] path[j='").concat(e,"'],\n .apexcharts-candlestick-series .apexcharts-series[data\\:realIndex='").concat(t,"'] path[j='").concat(e,"'],\n .apexcharts-boxPlot-series .apexcharts-series[data\\:realIndex='").concat(t,"'] path[j='").concat(e,"'],\n .apexcharts-rangebar-series .apexcharts-series[data\\:realIndex='").concat(t,"'] path[j='").concat(e,"']")));var a=r?parseFloat(r.getAttribute("cx")):0,l=r?parseFloat(r.getAttribute("cy")):0,c=r?parseFloat(r.getAttribute("barWidth")):0,d=n.getElGrid().getBoundingClientRect(),u=r&&(r.classList.contains("apexcharts-candlestick-area")||r.classList.contains("apexcharts-boxPlot-area"));i.globals.isXNumeric?(r&&!u&&(a-=o%2!=0?c/2:0),r&&u&&i.globals.comboCharts&&(a-=c/2)):i.globals.isBarHorizontal||(a=n.xAxisTicksPositions[e-1]+n.dataPointsDividedWidth/2,isNaN(a)&&(a=n.xAxisTicksPositions[e]-n.dataPointsDividedWidth/2)),i.globals.isBarHorizontal?l-=n.tooltipRect.ttHeight:i.config.tooltip.followCursor?l=n.e.clientY-d.top-n.tooltipRect.ttHeight/2:l+n.tooltipRect.ttHeight+15>i.globals.gridHeight&&(l=i.globals.gridHeight),i.globals.isBarHorizontal||this.moveXCrosshairs(a),n.fixedTooltip||this.moveTooltip(a,l||i.globals.gridHeight)}}]),e}(),_e=function(){function e(t){a(this,e),this.w=t.w,this.ttCtx=t,this.ctx=t.ctx,this.tooltipPosition=new ve(t)}return c(e,[{key:"drawDynamicPoints",value:function(){var e=this.w,t=new C(this.ctx),i=new V(this.ctx),n=e.globals.dom.baseEl.querySelectorAll(".apexcharts-series");n=v(n),e.config.chart.stacked&&n.sort((function(e,t){return parseFloat(e.getAttribute("data:realIndex"))-parseFloat(t.getAttribute("data:realIndex"))}));for(var o=0;o2&&void 0!==arguments[2]?arguments[2]:null,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=this.w;"bubble"!==o.config.chart.type&&this.newPointSize(e,t);var s=t.getAttribute("cx"),r=t.getAttribute("cy");if(null!==i&&null!==n&&(s=i,r=n),this.tooltipPosition.moveXCrosshairs(s),!this.fixedTooltip){if("radar"===o.config.chart.type){var a=this.ttCtx.getElGrid().getBoundingClientRect();s=this.ttCtx.e.clientX-a.left}this.tooltipPosition.moveTooltip(s,r,o.config.markers.hover.size)}}},{key:"enlargePoints",value:function(e){for(var t=this.w,i=this,n=this.ttCtx,o=e,s=t.globals.dom.baseEl.querySelectorAll(".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker"),r=t.config.markers.hover.size,a=0;a=0?e[t].setAttribute("r",i):e[t].setAttribute("r",0)}}}]),e}(),be=function(){function e(t){a(this,e),this.w=t.w,this.ttCtx=t}return c(e,[{key:"getAttr",value:function(e,t){return parseFloat(e.target.getAttribute(t))}},{key:"handleHeatTreeTooltip",value:function(e){var t=e.e,i=e.opt,n=e.x,o=e.y,s=e.type,r=this.ttCtx,a=this.w;if(t.target.classList.contains("apexcharts-".concat(s,"-rect"))){var l=this.getAttr(t,"i"),c=this.getAttr(t,"j"),d=this.getAttr(t,"cx"),u=this.getAttr(t,"cy"),h=this.getAttr(t,"width"),g=this.getAttr(t,"height");if(r.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:l,j:c,shared:!1,e:t}),a.globals.capturedSeriesIndex=l,a.globals.capturedDataPointIndex=c,n=d+r.tooltipRect.ttWidth/2+h,o=u+r.tooltipRect.ttHeight/2-g/2,r.tooltipPosition.moveXCrosshairs(d+h/2),n>a.globals.gridWidth/2&&(n=d-r.tooltipRect.ttWidth/2+h),r.w.config.tooltip.followCursor){var p=a.globals.dom.elWrap.getBoundingClientRect();n=a.globals.clientX-p.left-(n>a.globals.gridWidth/2?r.tooltipRect.ttWidth:0),o=a.globals.clientY-p.top-(o>a.globals.gridHeight/2?r.tooltipRect.ttHeight:0)}}return{x:n,y:o}}},{key:"handleMarkerTooltip",value:function(e){var t,i,n=e.e,o=e.opt,s=e.x,r=e.y,a=this.w,l=this.ttCtx;if(n.target.classList.contains("apexcharts-marker")){var c=parseInt(o.paths.getAttribute("cx"),10),d=parseInt(o.paths.getAttribute("cy"),10),u=parseFloat(o.paths.getAttribute("val"));if(i=parseInt(o.paths.getAttribute("rel"),10),t=parseInt(o.paths.parentNode.parentNode.parentNode.getAttribute("rel"),10)-1,l.intersect){var h=y.findAncestor(o.paths,"apexcharts-series");h&&(t=parseInt(h.getAttribute("data:realIndex"),10))}if(l.tooltipLabels.drawSeriesTexts({ttItems:o.ttItems,i:t,j:i,shared:!l.showOnIntersect&&a.config.tooltip.shared,e:n}),"mouseup"===n.type&&l.markerClick(n,t,i),a.globals.capturedSeriesIndex=t,a.globals.capturedDataPointIndex=i,s=c,r=d+a.globals.translateY-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var g=l.getElGrid().getBoundingClientRect();r=l.e.clientY+a.globals.translateY-g.top}u<0&&(r=d),l.marker.enlargeCurrentPoint(i,o.paths,s,r)}return{x:s,y:r}}},{key:"handleBarTooltip",value:function(e){var t,i,n=e.e,o=e.opt,s=this.w,r=this.ttCtx,a=r.getElTooltip(),l=0,c=0,d=0,u=this.getBarTooltipXY({e:n,opt:o});t=u.i;var h=u.barHeight,g=u.j;s.globals.capturedSeriesIndex=t,s.globals.capturedDataPointIndex=g,s.globals.isBarHorizontal&&r.tooltipUtil.hasBars()||!s.config.tooltip.shared?(c=u.x,d=u.y,i=Array.isArray(s.config.stroke.width)?s.config.stroke.width[t]:s.config.stroke.width,l=c):s.globals.comboCharts||s.config.tooltip.shared||(l/=2),isNaN(d)&&(d=s.globals.svgHeight-r.tooltipRect.ttHeight);var p=parseInt(o.paths.parentNode.getAttribute("data:realIndex"),10),f=s.globals.isMultipleYAxis?s.config.yaxis[p]&&s.config.yaxis[p].reversed:s.config.yaxis[0].reversed;if(c+r.tooltipRect.ttWidth>s.globals.gridWidth&&!f?c-=r.tooltipRect.ttWidth:c<0&&(c=0),r.w.config.tooltip.followCursor){var m=r.getElGrid().getBoundingClientRect();d=r.e.clientY-m.top}null===r.tooltip&&(r.tooltip=s.globals.dom.baseEl.querySelector(".apexcharts-tooltip")),s.config.tooltip.shared||(s.globals.comboBarCount>0?r.tooltipPosition.moveXCrosshairs(l+i/2):r.tooltipPosition.moveXCrosshairs(l)),!r.fixedTooltip&&(!s.config.tooltip.shared||s.globals.isBarHorizontal&&r.tooltipUtil.hasBars())&&(f&&(c-=r.tooltipRect.ttWidth)<0&&(c=0),!f||s.globals.isBarHorizontal&&r.tooltipUtil.hasBars()||(d=d+h-2*(s.globals.series[t][g]<0?h:0)),d=d+s.globals.translateY-r.tooltipRect.ttHeight/2,a.style.left=c+s.globals.translateX+"px",a.style.top=d+"px")}},{key:"getBarTooltipXY",value:function(e){var t=e.e,i=e.opt,n=this.w,o=null,s=this.ttCtx,r=0,a=0,l=0,c=0,d=0,u=t.target.classList;if(u.contains("apexcharts-bar-area")||u.contains("apexcharts-candlestick-area")||u.contains("apexcharts-boxPlot-area")||u.contains("apexcharts-rangebar-area")){var h=t.target,g=h.getBoundingClientRect(),p=i.elGrid.getBoundingClientRect(),f=g.height;d=g.height;var m=g.width,v=parseInt(h.getAttribute("cx"),10),_=parseInt(h.getAttribute("cy"),10);c=parseFloat(h.getAttribute("barWidth"));var b="touchmove"===t.type?t.touches[0].clientX:t.clientX;o=parseInt(h.getAttribute("j"),10),r=parseInt(h.parentNode.getAttribute("rel"),10)-1;var y=h.getAttribute("data-range-y1"),w=h.getAttribute("data-range-y2");n.globals.comboCharts&&(r=parseInt(h.parentNode.getAttribute("data:realIndex"),10)),s.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:r,j:o,y1:y?parseInt(y,10):null,y2:w?parseInt(w,10):null,shared:!s.showOnIntersect&&n.config.tooltip.shared,e:t}),n.config.tooltip.followCursor?n.globals.isBarHorizontal?(a=b-p.left+15,l=_-s.dataPointsDividedHeight+f/2-s.tooltipRect.ttHeight/2):(a=n.globals.isXNumeric?v-m/2:v-s.dataPointsDividedWidth+m/2,l=t.clientY-p.top-s.tooltipRect.ttHeight/2-15):n.globals.isBarHorizontal?((a=v)0&&i.setAttribute("width",t.xcrosshairsWidth)}},{key:"handleYCrosshair",value:function(){var e=this.w,t=this.ttCtx;t.ycrosshairs=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs"),t.ycrosshairsHidden=e.globals.dom.baseEl.querySelector(".apexcharts-ycrosshairs-hidden")}},{key:"drawYaxisTooltipText",value:function(e,t,i){var n=this.ttCtx,o=this.w,s=o.globals.yLabelFormatters[e];if(n.yaxisTooltips[e]){var r=n.getElGrid().getBoundingClientRect(),a=(t-r.top)*i.yRatio[e],l=o.globals.maxYArr[e]-o.globals.minYArr[e],c=o.globals.minYArr[e]+(l-a);n.tooltipPosition.moveYCrosshairs(t-r.top),n.yaxisTooltipText[e].innerHTML=s(c),n.tooltipPosition.moveYAxisTooltip(e)}}}]),e}(),we=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w;var i=this.w;this.tConfig=i.config.tooltip,this.tooltipUtil=new fe(this),this.tooltipLabels=new me(this),this.tooltipPosition=new ve(this),this.marker=new _e(this),this.intersect=new be(this),this.axesTooltip=new ye(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=!i.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}return c(e,[{key:"getElTooltip",value:function(e){return e||(e=this),e.w.globals.dom.baseEl?e.w.globals.dom.baseEl.querySelector(".apexcharts-tooltip"):null}},{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(e){var t=this.w;this.xyRatios=e,this.isXAxisTooltipEnabled=t.config.xaxis.tooltip.enabled&&t.globals.axisCharts,this.yaxisTooltips=t.config.yaxis.map((function(e,i){return!!(e.show&&e.tooltip.enabled&&t.globals.axisCharts)})),this.allTooltipSeriesGroups=[],t.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement("div");if(i.classList.add("apexcharts-tooltip"),t.config.tooltip.cssClass&&i.classList.add(t.config.tooltip.cssClass),i.classList.add("apexcharts-theme-".concat(this.tConfig.theme)),t.globals.dom.elWrap.appendChild(i),t.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var n=new G(this.ctx);this.xAxisTicksPositions=n.getXAxisTicksPositions()}if(!t.globals.comboCharts&&!this.tConfig.intersect&&"rangeBar"!==t.config.chart.type||this.tConfig.shared||(this.showOnIntersect=!0),0!==t.config.markers.size&&0!==t.globals.markers.largestSize||this.marker.drawDynamicPoints(this),t.globals.collapsedSeries.length!==t.globals.series.length){this.dataPointsDividedHeight=t.globals.gridHeight/t.globals.dataPoints,this.dataPointsDividedWidth=t.globals.gridWidth/t.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement("div"),this.tooltipTitle.classList.add("apexcharts-tooltip-title"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||t.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var o=t.globals.series.length;(t.globals.xyCharts||t.globals.comboCharts)&&this.tConfig.shared&&(o=this.showOnIntersect?1:t.globals.series.length),this.legendLabels=t.globals.dom.baseEl.querySelectorAll(".apexcharts-legend-text"),this.ttItems=this.createTTElements(o),this.addSVGEvents()}}},{key:"createTTElements",value:function(e){for(var t=this,i=this.w,n=[],o=this.getElTooltip(),s=function(s){var r=document.createElement("div");r.classList.add("apexcharts-tooltip-series-group"),r.style.order=i.config.tooltip.inverseOrder?e-s:s+1,t.tConfig.shared&&t.tConfig.enabledOnSeries&&Array.isArray(t.tConfig.enabledOnSeries)&&t.tConfig.enabledOnSeries.indexOf(s)<0&&r.classList.add("apexcharts-tooltip-series-group-hidden");var a=document.createElement("span");a.classList.add("apexcharts-tooltip-marker"),a.style.backgroundColor=i.globals.colors[s],r.appendChild(a);var l=document.createElement("div");l.classList.add("apexcharts-tooltip-text"),l.style.fontFamily=t.tConfig.style.fontFamily||i.config.chart.fontFamily,l.style.fontSize=t.tConfig.style.fontSize,["y","goals","z"].forEach((function(e){var t=document.createElement("div");t.classList.add("apexcharts-tooltip-".concat(e,"-group"));var i=document.createElement("span");i.classList.add("apexcharts-tooltip-text-".concat(e,"-label")),t.appendChild(i);var n=document.createElement("span");n.classList.add("apexcharts-tooltip-text-".concat(e,"-value")),t.appendChild(n),l.appendChild(t)})),r.appendChild(l),o.appendChild(r),n.push(r)},r=0;r0&&this.addPathsEventListeners(g,d),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(d)}}},{key:"drawFixedTooltipRect",value:function(){var e=this.w,t=this.getElTooltip(),i=t.getBoundingClientRect(),n=i.width+10,o=i.height+10,s=this.tConfig.fixed.offsetX,r=this.tConfig.fixed.offsetY,a=this.tConfig.fixed.position.toLowerCase();return a.indexOf("right")>-1&&(s=s+e.globals.svgWidth-n+10),a.indexOf("bottom")>-1&&(r=r+e.globals.svgHeight-o-10),t.style.left=s+"px",t.style.top=r+"px",{x:s,y:r,ttWidth:n,ttHeight:o}}},{key:"addDatapointEventsListeners",value:function(e){var t=this.w.globals.dom.baseEl.querySelectorAll(".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area");this.addPathsEventListeners(t,e)}},{key:"addPathsEventListeners",value:function(e,t){for(var i=this,n=function(n){var o={paths:e[n],tooltipEl:t.tooltipEl,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:t.ttItems};["mousemove","mouseup","touchmove","mouseout","touchend"].map((function(t){return e[n].addEventListener(t,i.onSeriesHover.bind(i,o),{capture:!1,passive:!0})}))},o=0;o=100?this.seriesHover(e,t):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout((function(){i.seriesHover(e,t)}),100-n))}},{key:"seriesHover",value:function(e,t){var i=this;this.lastHoverTime=Date.now();var n=[],o=this.w;o.config.chart.group&&(n=this.ctx.getGroupedCharts()),o.globals.axisCharts&&(o.globals.minX===-1/0&&o.globals.maxX===1/0||0===o.globals.dataPoints)||(n.length?n.forEach((function(n){var o=i.getElTooltip(n),s={paths:e.paths,tooltipEl:o,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:n.w.globals.tooltip.ttItems};n.w.globals.minX===i.w.globals.minX&&n.w.globals.maxX===i.w.globals.maxX&&n.w.globals.tooltip.seriesHoverByContext({chartCtx:n,ttCtx:n.w.globals.tooltip,opt:s,e:t})})):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:e,e:t}))}},{key:"seriesHoverByContext",value:function(e){var t=e.chartCtx,i=e.ttCtx,n=e.opt,o=e.e,s=t.w,r=this.getElTooltip();r&&(i.tooltipRect={x:0,y:0,ttWidth:r.getBoundingClientRect().width,ttHeight:r.getBoundingClientRect().height},i.e=o,!i.tooltipUtil.hasBars()||s.globals.comboCharts||i.isBarShared||this.tConfig.onDatasetHover.highlightDataSeries&&new q(t).toggleSeriesOnHover(o,o.target.parentNode),i.fixedTooltip&&i.drawFixedTooltipRect(),s.globals.axisCharts?i.axisChartsTooltips({e:o,opt:n,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:o,opt:n,tooltipRect:i.tooltipRect}))}},{key:"axisChartsTooltips",value:function(e){var t,i,n=e.e,o=e.opt,s=this.w,r=o.elGrid.getBoundingClientRect(),a="touchmove"===n.type?n.touches[0].clientX:n.clientX,l="touchmove"===n.type?n.touches[0].clientY:n.clientY;if(this.clientY=l,this.clientX=a,s.globals.capturedSeriesIndex=-1,s.globals.capturedDataPointIndex=-1,lr.top+r.height)this.handleMouseOut(o);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!s.config.tooltip.shared){var c=parseInt(o.paths.getAttribute("index"),10);if(this.tConfig.enabledOnSeries.indexOf(c)<0)return void this.handleMouseOut(o)}var d=this.getElTooltip(),u=this.getElXCrosshairs(),h=s.globals.xyCharts||"bar"===s.config.chart.type&&!s.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||s.globals.comboCharts&&this.tooltipUtil.hasBars();if("mousemove"===n.type||"touchmove"===n.type||"mouseup"===n.type){if(s.globals.collapsedSeries.length+s.globals.ancillaryCollapsedSeries.length===s.globals.series.length)return;null!==u&&u.classList.add("apexcharts-active");var g=this.yaxisTooltips.filter((function(e){return!0===e}));if(null!==this.ycrosshairs&&g.length&&this.ycrosshairs.classList.add("apexcharts-active"),h&&!this.showOnIntersect)this.handleStickyTooltip(n,a,l,o);else if("heatmap"===s.config.chart.type||"treemap"===s.config.chart.type){var p=this.intersect.handleHeatTreeTooltip({e:n,opt:o,x:t,y:i,type:s.config.chart.type});t=p.x,i=p.y,d.style.left=t+"px",d.style.top=i+"px"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:n,opt:o}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:n,opt:o,x:t,y:i});if(this.yaxisTooltips.length)for(var f=0;fl.width)this.handleMouseOut(n);else if(null!==a)this.handleStickyCapturedSeries(e,a,n,r);else if(this.tooltipUtil.isXoverlap(r)||o.globals.isBarHorizontal){var c=o.globals.series.findIndex((function(e,t){return!o.globals.collapsedSeriesIndices.includes(t)}));this.create(e,this,c,r,n.ttItems)}}},{key:"handleStickyCapturedSeries",value:function(e,t,i,n){var o=this.w;if(this.tConfig.shared||null!==o.globals.series[t][n]){if(void 0!==o.globals.series[t][n])this.tConfig.shared&&this.tooltipUtil.isXoverlap(n)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(e,this,t,n,i.ttItems):this.create(e,this,t,n,i.ttItems,!1);else if(this.tooltipUtil.isXoverlap(n)){var s=o.globals.series.findIndex((function(e,t){return!o.globals.collapsedSeriesIndices.includes(t)}));this.create(e,this,s,n,i.ttItems)}}else this.handleMouseOut(i)}},{key:"deactivateHoverFilter",value:function(){for(var e=this.w,t=new C(this.ctx),i=e.globals.dom.Paper.select(".apexcharts-bar-area"),n=0;n5&&void 0!==arguments[5]?arguments[5]:null,S=this.w,k=t;"mouseup"===e.type&&this.markerClick(e,i,n),null===x&&(x=this.tConfig.shared);var L=this.tooltipUtil.hasMarkers(i),E=this.tooltipUtil.getElBars();if(S.config.legend.tooltipHoverFormatter){var N=S.config.legend.tooltipHoverFormatter,D=Array.from(this.legendLabels);D.forEach((function(e){var t=e.getAttribute("data:default-text");e.innerHTML=decodeURIComponent(t)}));for(var T=0;T0?k.marker.enlargePoints(n):k.tooltipPosition.moveDynamicPointsOnHover(n);else if(this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(E),this.barSeriesHeight>0)){var O=new C(this.ctx),F=S.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(n,"']"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(n,i);for(var B=0;Bo.globals.gridHeight&&(p=o.globals.gridHeight-_)),{bcx:d,bcy:c,dataLabelsX:t,dataLabelsY:p,totalDataLabelsX:n,totalDataLabelsY:i,totalDataLabelsAnchor:"middle"}}},{key:"calculateBarsDataLabelsPosition",value:function(e){var t=this.w,i=e.x,n=e.i,o=e.j,s=e.realIndex,r=e.groupIndex,a=e.bcy,l=e.barHeight,c=e.barWidth,d=e.textRects,u=e.dataLabelsX,h=e.strokeWidth,g=e.dataLabelsConfig,p=e.barDataLabelsConfig,f=e.barTotalDataLabelsConfig,m=e.offX,v=e.offY,_=t.globals.gridHeight/t.globals.dataPoints;c=Math.abs(c);var b,y,w=(a+=-1!==r?r*l:0)-(this.barCtx.isRangeBar?0:_)+l/2+d.height/2+v-3,x="start",S=this.barCtx.series[n][o]<0,k=i;switch(this.barCtx.isReversed&&(k=i+c-(S?2*c:0),i=t.globals.gridWidth-c),p.position){case"center":u=S?k+c/2-m:Math.max(d.width/2,k-c/2)+m;break;case"bottom":u=S?k+c-h-Math.round(d.width/2)-m:k-c+h+Math.round(d.width/2)+m;break;case"top":u=S?k-h+Math.round(d.width/2)-m:k-h-Math.round(d.width/2)+m}if(this.barCtx.lastActiveBarSerieIndex===s&&f.enabled){var L=new C(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:s,j:o}),g.fontSize);S?(b=k-h+Math.round(L.width/2)-m-f.offsetX-15,x="end"):b=k-h-Math.round(L.width/2)+m+f.offsetX+15,y=w+f.offsetY}return t.config.chart.stacked||(u<0?u=u+d.width+h:u+d.width/2>t.globals.gridWidth&&(u=t.globals.gridWidth-d.width-h)),{bcx:i,bcy:a,dataLabelsX:u,dataLabelsY:w,totalDataLabelsX:b,totalDataLabelsY:y,totalDataLabelsAnchor:x}}},{key:"drawCalculatedDataLabels",value:function(e){var t=e.x,i=e.y,n=e.val,o=e.i,r=e.j,a=e.textRects,l=e.barHeight,c=e.barWidth,d=e.dataLabelsConfig,u=this.w,h="rotate(0)";"vertical"===u.config.plotOptions.bar.dataLabels.orientation&&(h="rotate(-90, ".concat(t,", ").concat(i,")"));var g=new U(this.barCtx.ctx),p=new C(this.barCtx.ctx),f=d.formatter,m=null,v=u.globals.collapsedSeriesIndices.indexOf(o)>-1;if(d.enabled&&!v){m=p.group({class:"apexcharts-data-labels",transform:h});var _="";void 0!==n&&(_=f(n,s(s({},u),{},{seriesIndex:o,dataPointIndex:r,w:u}))),!n&&u.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(_="");var b=u.globals.series[o][r]<0,y=u.config.plotOptions.bar.dataLabels.position;"vertical"===u.config.plotOptions.bar.dataLabels.orientation&&("top"===y&&(d.textAnchor=b?"end":"start"),"center"===y&&(d.textAnchor="middle"),"bottom"===y&&(d.textAnchor=b?"end":"start")),this.barCtx.isRangeBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&cMath.abs(c)&&(_=""):a.height/1.6>Math.abs(l)&&(_=""));var w=s({},d);this.barCtx.isHorizontal&&n<0&&("start"===d.textAnchor?w.textAnchor="end":"end"===d.textAnchor&&(w.textAnchor="start")),g.plotDataLabelsText({x:t,y:i,text:_,i:o,j:r,parent:m,dataLabelsConfig:w,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return m}},{key:"drawTotalDataLabels",value:function(e){var t,i=e.x,n=e.y,o=e.val,s=e.realIndex,r=e.textAnchor,a=e.barTotalDataLabelsConfig,l=new C(this.barCtx.ctx);return a.enabled&&void 0!==i&&void 0!==n&&this.barCtx.lastActiveBarSerieIndex===s&&(t=l.drawText({x:i,y:n,foreColor:a.style.color,text:o,textAnchor:r,fontFamily:a.style.fontFamily,fontSize:a.style.fontSize,fontWeight:a.style.fontWeight})),t}}]),e}(),Ce=function(){function e(t){a(this,e),this.w=t.w,this.barCtx=t}return c(e,[{key:"initVariables",value:function(e){var t=this.w;this.barCtx.series=e,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+=e[i].length),t.globals.isXNumeric)for(var n=0;nt.globals.minX&&t.globals.seriesX[i][n]0&&(n=l.globals.minXDiff/u),(s=n/this.barCtx.seriesLen*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(s=1)}-1===String(this.barCtx.barOptions.columnWidth).indexOf("%")&&(s=parseInt(this.barCtx.barOptions.columnWidth,10)),r=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),e=l.globals.padHorizontal+(n-s*this.barCtx.seriesLen)/2}return{x:e,y:t,yDivision:i,xDivision:n,barHeight:o,barWidth:s,zeroH:r,zeroW:a}}},{key:"initializeStackedPrevVars",value:function(e){var t=e.w;t.globals.hasSeriesGroups?t.globals.seriesGroups.forEach((function(t){e[t]||(e[t]={}),e[t].prevY=[],e[t].prevX=[],e[t].prevYF=[],e[t].prevXF=[],e[t].prevYVal=[],e[t].prevXVal=[]})):(e.prevY=[],e.prevX=[],e.prevYF=[],e.prevXF=[],e.prevYVal=[],e.prevXVal=[])}},{key:"initializeStackedXYVars",value:function(e){var t=e.w;t.globals.hasSeriesGroups?t.globals.seriesGroups.forEach((function(t){e[t]||(e[t]={}),e[t].xArrj=[],e[t].xArrjF=[],e[t].xArrjVal=[],e[t].yArrj=[],e[t].yArrjF=[],e[t].yArrjVal=[]})):(e.xArrj=[],e.xArrjF=[],e.xArrjVal=[],e.yArrj=[],e.yArrjF=[],e.yArrjVal=[])}},{key:"getPathFillColor",value:function(e,t,i,n){var o,s,r,a,l=this.w,c=new W(this.barCtx.ctx),d=null,u=this.barCtx.barOptions.distributed?i:t;return this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map((function(n){e[t][i]>=n.from&&e[t][i]<=n.to&&(d=n.color)})),l.config.series[t].data[i]&&l.config.series[t].data[i].fillColor&&(d=l.config.series[t].data[i].fillColor),c.fillPath({seriesNumber:this.barCtx.barOptions.distributed?u:n,dataPointIndex:i,color:d,value:e[t][i],fillConfig:null===(o=l.config.series[t].data[i])||void 0===o?void 0:o.fill,fillType:null!==(s=l.config.series[t].data[i])&&void 0!==s&&null!==(r=s.fill)&&void 0!==r&&r.type?null===(a=l.config.series[t].data[i])||void 0===a?void 0:a.fill.type:l.config.fill.type})}},{key:"getStrokeWidth",value:function(e,t,i){var n=0,o=this.w;return this.barCtx.series[e][t]?this.barCtx.isNullValue=!1:this.barCtx.isNullValue=!0,o.config.stroke.show&&(this.barCtx.isNullValue||(n=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),n}},{key:"shouldApplyRadius",value:function(e){var t=this.w,i=!1;return t.config.plotOptions.bar.borderRadius>0&&(t.config.chart.stacked&&"last"===t.config.plotOptions.bar.borderRadiusWhenStacked?this.barCtx.lastActiveBarSerieIndex===e&&(i=!0):i=!0),i}},{key:"barBackground",value:function(e){var t=e.j,i=e.i,n=e.x1,o=e.x2,s=e.y1,r=e.y2,a=e.elSeries,l=this.w,c=new C(this.barCtx.ctx),d=new q(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&d===i){t>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(t%=this.barCtx.barOptions.colors.backgroundBarColors.length);var u=this.barCtx.barOptions.colors.backgroundBarColors[t],h=c.drawRect(void 0!==n?n:0,void 0!==s?s:0,void 0!==o?o:l.globals.gridWidth,void 0!==r?r:l.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,u,this.barCtx.barOptions.colors.backgroundBarOpacity);a.add(h),h.node.classList.add("apexcharts-backgroundBar")}}},{key:"getColumnPaths",value:function(e){var t,i=e.barWidth,n=e.barXPosition,o=e.y1,s=e.y2,r=e.strokeWidth,a=e.seriesGroup,l=e.realIndex,c=e.i,d=e.j,u=e.w,h=new C(this.barCtx.ctx);(r=Array.isArray(r)?r[l]:r)||(r=0);var g=i,p=n;null!==(t=u.config.series[l].data[d])&&void 0!==t&&t.columnWidthOffset&&(p=n-u.config.series[l].data[d].columnWidthOffset/2,g=i+u.config.series[l].data[d].columnWidthOffset);var f=p,m=p+g;o+=.001,s+=.001;var v=h.move(f,o),_=h.move(f,o),b=h.line(m-r,o);if(u.globals.previousPaths.length>0&&(_=this.barCtx.getPreviousPath(l,d,!1)),v=v+h.line(f,s)+h.line(m-r,s)+h.line(m-r,o)+("around"===u.config.plotOptions.bar.borderRadiusApplication?" Z":" z"),_=_+h.line(f,o)+b+b+b+b+b+h.line(f,o)+("around"===u.config.plotOptions.bar.borderRadiusApplication?" Z":" z"),this.shouldApplyRadius(l)&&(v=h.roundPathCorners(v,u.config.plotOptions.bar.borderRadius)),u.config.chart.stacked){var y=this.barCtx;u.globals.hasSeriesGroups&&a&&(y=this.barCtx[a]),y.yArrj.push(s),y.yArrjF.push(Math.abs(o-s)),y.yArrjVal.push(this.barCtx.series[c][d])}return{pathTo:v,pathFrom:_}}},{key:"getBarpaths",value:function(e){var t,i=e.barYPosition,n=e.barHeight,o=e.x1,s=e.x2,r=e.strokeWidth,a=e.seriesGroup,l=e.realIndex,c=e.i,d=e.j,u=e.w,h=new C(this.barCtx.ctx);(r=Array.isArray(r)?r[l]:r)||(r=0);var g=i,p=n;null!==(t=u.config.series[l].data[d])&&void 0!==t&&t.barHeightOffset&&(g=i-u.config.series[l].data[d].barHeightOffset/2,p=n+u.config.series[l].data[d].barHeightOffset);var f=g,m=g+p;o+=.001,s+=.001;var v=h.move(o,f),_=h.move(o,f);u.globals.previousPaths.length>0&&(_=this.barCtx.getPreviousPath(l,d,!1));var b=h.line(o,m-r);if(v=v+h.line(s,f)+h.line(s,m-r)+b+("around"===u.config.plotOptions.bar.borderRadiusApplication?" Z":" z"),_=_+h.line(o,f)+b+b+b+b+b+h.line(o,f)+("around"===u.config.plotOptions.bar.borderRadiusApplication?" Z":" z"),this.shouldApplyRadius(l)&&(v=h.roundPathCorners(v,u.config.plotOptions.bar.borderRadius)),u.config.chart.stacked){var y=this.barCtx;u.globals.hasSeriesGroups&&a&&(y=this.barCtx[a]),y.xArrj.push(s),y.xArrjF.push(Math.abs(o-s)),y.xArrjVal.push(this.barCtx.series[c][d])}return{pathTo:v,pathFrom:_}}},{key:"checkZeroSeries",value:function(e){for(var t=e.series,i=this.w,n=0;n2&&void 0!==arguments[2]&&!arguments[2]?null:t;return null!=e&&(i=t+e/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?e/this.barCtx.invertedYRatio:0)),i}},{key:"getYForValue",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&!arguments[2]?null:t;return null!=e&&(i=t-e/this.barCtx.yRatio[this.barCtx.yaxisIndex]+2*(this.barCtx.isReversed?e/this.barCtx.yRatio[this.barCtx.yaxisIndex]:0)),i}},{key:"getGoalValues",value:function(e,t,i,n,o){var r=this,a=this.w,l=[],c=function(n,o){var s;l.push((d(s={},e,"x"===e?r.getXForValue(n,t,!1):r.getYForValue(n,i,!1)),d(s,"attrs",o),s))};if(a.globals.seriesGoals[n]&&a.globals.seriesGoals[n][o]&&Array.isArray(a.globals.seriesGoals[n][o])&&a.globals.seriesGoals[n][o].forEach((function(e){c(e.value,e)})),this.barCtx.barOptions.isDumbbell&&a.globals.seriesRange.length){var u=this.barCtx.barOptions.dumbbellColors?this.barCtx.barOptions.dumbbellColors:a.globals.colors,h={strokeHeight:"x"===e?0:a.globals.markers.size[n],strokeWidth:"x"===e?a.globals.markers.size[n]:0,strokeDashArray:0,strokeLineCap:"round",strokeColor:Array.isArray(u[n])?u[n][0]:u[n]};c(a.globals.seriesRangeStart[n][o],h),c(a.globals.seriesRangeEnd[n][o],s(s({},h),{},{strokeColor:Array.isArray(u[n])?u[n][1]:u[n]}))}return l}},{key:"drawGoalLine",value:function(e){var t=e.barXPosition,i=e.barYPosition,n=e.goalX,o=e.goalY,s=e.barWidth,r=e.barHeight,a=new C(this.barCtx.ctx),l=a.group({className:"apexcharts-bar-goals-groups"});l.node.classList.add("apexcharts-element-hidden"),this.barCtx.w.globals.delayedElements.push({el:l.node}),l.attr("clip-path","url(#gridRectMarkerMask".concat(this.barCtx.w.globals.cuid,")"));var c=null;return this.barCtx.isHorizontal?Array.isArray(n)&&n.forEach((function(e){var t=void 0!==e.attrs.strokeHeight?e.attrs.strokeHeight:r/2,n=i+t+r/2;c=a.drawLine(e.x,n-2*t,e.x,n,e.attrs.strokeColor?e.attrs.strokeColor:void 0,e.attrs.strokeDashArray,e.attrs.strokeWidth?e.attrs.strokeWidth:2,e.attrs.strokeLineCap),l.add(c)})):Array.isArray(o)&&o.forEach((function(e){var i=void 0!==e.attrs.strokeWidth?e.attrs.strokeWidth:s/2,n=t+i+s/2;c=a.drawLine(n-2*i,e.y,n,e.y,e.attrs.strokeColor?e.attrs.strokeColor:void 0,e.attrs.strokeDashArray,e.attrs.strokeHeight?e.attrs.strokeHeight:2,e.attrs.strokeLineCap),l.add(c)})),l}}]),e}(),Se=function(){function e(t,i){a(this,e),this.ctx=t,this.w=t.w;var n=this.w;this.barOptions=n.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=n.config.stroke.width,this.isNullValue=!1,this.isRangeBar=n.globals.seriesRange.length&&this.isHorizontal,this.xyRatios=i,null!==this.xyRatios&&(this.xRatio=i.xRatio,this.initialXRatio=i.initialXRatio,this.yRatio=i.yRatio,this.invertedXRatio=i.invertedXRatio,this.invertedYRatio=i.invertedYRatio,this.baseLineY=i.baseLineY,this.baseLineInvertedY=i.baseLineInvertedY),this.yaxisIndex=0,this.seriesLen=0;var o=new q(this.ctx);this.lastActiveBarSerieIndex=o.getActiveConfigSeriesIndex("desc",["bar","column"]);var s=o.getBarSeriesIndices(),r=new S(this.ctx);this.stackedSeriesTotals=r.getStackedSeriesTotals(this.w.config.series.map((function(e,t){return-1===s.indexOf(t)?t:-1})).filter((function(e){return-1!==e}))),this.barHelpers=new Ce(this)}return c(e,[{key:"draw",value:function(e,t){var i=this.w,n=new C(this.ctx),o=new S(this.ctx,i);e=o.getLogSeries(e),this.series=e,this.yRatio=o.getLogYRatios(this.yRatio),this.barHelpers.initVariables(e);var r=n.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 a=0,l=0;a0&&(this.visibleI=this.visibleI+1);var b=0,w=0;this.yRatio.length>1&&(this.yaxisIndex=v),this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var x=this.barHelpers.initialPositions();p=x.y,b=x.barHeight,d=x.yDivision,h=x.zeroW,g=x.x,w=x.barWidth,c=x.xDivision,u=x.zeroH,this.horizontal||m.push(g+w/2);for(var k=n.group({class:"apexcharts-datalabels","data:realIndex":v}),L=n.group({class:"apexcharts-bar-goals-markers",style:"pointer-events: none"}),E=0;E0&&m.push(g+w/2),f.push(p);var I=this.barHelpers.getPathFillColor(e,a,E,v);this.renderSeries({realIndex:v,pathFill:I,j:E,i:a,pathFrom:D.pathFrom,pathTo:D.pathTo,strokeWidth:N,elSeries:_,x:g,y:p,series:e,barHeight:D.barHeight?D.barHeight:b,barWidth:D.barWidth?D.barWidth:w,elDataLabelsWrap:k,elGoalsMarkers:L,visibleSeries:this.visibleI,type:"bar"})}i.globals.seriesXvalues[v]=m,i.globals.seriesYvalues[v]=f,r.add(_)}return r}},{key:"renderSeries",value:function(e){var t=e.realIndex,i=e.pathFill,n=e.lineFill,o=e.j,s=e.i,r=e.groupIndex,a=e.pathFrom,l=e.pathTo,c=e.strokeWidth,d=e.elSeries,u=e.x,h=e.y,g=e.y1,p=e.y2,f=e.series,m=e.barHeight,v=e.barWidth,_=e.barYPosition,b=e.elDataLabelsWrap,y=e.elGoalsMarkers,w=e.visibleSeries,S=e.type,k=this.w,L=new C(this.ctx);n||(n=this.barOptions.distributed?k.globals.stroke.colors[o]:k.globals.stroke.colors[t]),k.config.series[s].data[o]&&k.config.series[s].data[o].strokeColor&&(n=k.config.series[s].data[o].strokeColor),this.isNullValue&&(i="none");var E=o/k.config.chart.animations.animateGradually.delay*(k.config.chart.animations.speed/k.globals.dataPoints)/2.4,N=L.renderPaths({i:s,j:o,realIndex:t,pathFrom:a,pathTo:l,stroke:n,strokeWidth:c,strokeLineCap:k.config.stroke.lineCap,fill:i,animationDelay:E,initialSpeed:k.config.chart.animations.speed,dataChangeSpeed:k.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(S,"-area")});N.attr("clip-path","url(#gridRectMask".concat(k.globals.cuid,")"));var D=k.config.forecastDataPoints;D.count>0&&o>=k.globals.dataPoints-D.count&&(N.node.setAttribute("stroke-dasharray",D.dashArray),N.node.setAttribute("stroke-width",D.strokeWidth),N.node.setAttribute("fill-opacity",D.fillOpacity)),void 0!==g&&void 0!==p&&(N.attr("data-range-y1",g),N.attr("data-range-y2",p)),new x(this.ctx).setSelectionFilter(N,t,o),d.add(N);var T=new xe(this).handleBarDataLabels({x:u,y:h,y1:g,y2:p,i:s,j:o,series:f,realIndex:t,groupIndex:r,barHeight:m,barWidth:v,barYPosition:_,renderedPath:N,visibleSeries:w});return null!==T.dataLabels&&b.add(T.dataLabels),T.totalDataLabels&&b.add(T.totalDataLabels),d.add(b),y&&d.add(y),d}},{key:"drawBarPaths",value:function(e){var t,i=e.indexes,n=e.barHeight,o=e.strokeWidth,s=e.zeroW,r=e.x,a=e.y,l=e.yDivision,c=e.elSeries,d=this.w,u=i.i,h=i.j;if(d.globals.isXNumeric)t=(a=(d.globals.seriesX[u][h]-d.globals.minX)/this.invertedXRatio-n)+n*this.visibleI;else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var g=0,p=0;d.globals.seriesPercent.forEach((function(e,t){e[h]&&g++,t0&&(n=this.seriesLen*n/g),t=a+n*this.visibleI,t-=n*p}else t=a+n*this.visibleI;r=this.barHelpers.getXForValue(this.series[u][h],s);var f=this.barHelpers.getBarpaths({barYPosition:t,barHeight:n,x1:s,x2:r,strokeWidth:o,series:this.series,realIndex:i.realIndex,i:u,j:h,w:d});return d.globals.isXNumeric||(a+=l),this.barHelpers.barBackground({j:h,i:u,y1:t-n*this.visibleI,y2:n*this.seriesLen,elSeries:c}),{pathTo:f.pathTo,pathFrom:f.pathFrom,x:r,y:a,goalX:this.barHelpers.getGoalValues("x",s,null,u,h),barYPosition:t,barHeight:n}}},{key:"drawColumnPaths",value:function(e){var t,i=e.indexes,n=e.x,o=e.y,s=e.xDivision,r=e.barWidth,a=e.zeroH,l=e.strokeWidth,c=e.elSeries,d=this.w,u=i.realIndex,h=i.i,g=i.j,p=i.bc;if(d.globals.isXNumeric){var f=u;d.globals.seriesX[u].length||(f=d.globals.maxValsInArrayIndex),d.globals.seriesX[f][g]&&(n=(d.globals.seriesX[f][g]-d.globals.minX)/this.xRatio-r*this.seriesLen/2),t=n+r*this.visibleI}else if(d.config.plotOptions.bar.hideZeroBarsWhenGrouped){var m=0,v=0;d.globals.seriesPercent.forEach((function(e,t){e[g]&&m++,t0&&(r=this.seriesLen*r/m),t=n+r*this.visibleI,t-=r*v}else t=n+r*this.visibleI;o=this.barHelpers.getYForValue(this.series[h][g],a);var _=this.barHelpers.getColumnPaths({barXPosition:t,barWidth:r,y1:a,y2:o,strokeWidth:l,series:this.series,realIndex:i.realIndex,i:h,j:g,w:d});return d.globals.isXNumeric||(n+=s),this.barHelpers.barBackground({bc:p,j:g,i:h,x1:t-l/2-r*this.visibleI,x2:r*this.seriesLen+l/2,elSeries:c}),{pathTo:_.pathTo,pathFrom:_.pathFrom,x:n,y:o,goalY:this.barHelpers.getGoalValues("y",null,a,h,g),barXPosition:t,barWidth:r}}},{key:"getPreviousPath",value:function(e,t){for(var i,n=this.w,o=0;o0&&parseInt(s.realIndex,10)===parseInt(e,10)&&void 0!==n.globals.previousPaths[o].paths[t]&&(i=n.globals.previousPaths[o].paths[t].d)}return i}}]),e}(),ke=function(e){u(i,Se);var t=f(i);function i(){return a(this,i),t.apply(this,arguments)}return c(i,[{key:"draw",value:function(e,t){var i=this,n=this.w;this.graphics=new C(this.ctx),this.bar=new Se(this.ctx,this.xyRatios);var o=new S(this.ctx,n);e=o.getLogSeries(e),this.yRatio=o.getLogYRatios(this.yRatio),this.barHelpers.initVariables(e),"100%"===n.config.chart.stackType&&(e=n.globals.seriesPercent.slice()),this.series=e,this.barHelpers.initializeStackedPrevVars(this);for(var r=this.graphics.group({class:"apexcharts-bar-series apexcharts-plot-series"}),a=0,l=0,c=function(o,c){var d=void 0,u=void 0,h=void 0,g=void 0,p=-1;i.groupCtx=i,n.globals.seriesGroups.forEach((function(e,t){e.indexOf(n.config.series[o].name)>-1&&(p=t)})),-1!==p&&(i.groupCtx=i[n.globals.seriesGroups[p]]);var f=[],m=[],v=n.globals.comboCharts?t[o]:o;i.yRatio.length>1&&(i.yaxisIndex=v),i.isReversed=n.config.yaxis[i.yaxisIndex]&&n.config.yaxis[i.yaxisIndex].reversed;var _=i.graphics.group({class:"apexcharts-series",seriesName:y.escapeString(n.globals.seriesNames[v]),rel:o+1,"data:realIndex":v});i.ctx.series.addCollapsedClassToSeries(_,v);var b=i.graphics.group({class:"apexcharts-datalabels","data:realIndex":v}),w=i.graphics.group({class:"apexcharts-bar-goals-markers",style:"pointer-events: none"}),x=0,C=0,S=i.initialPositions(a,l,d,u,h,g);l=S.y,x=S.barHeight,u=S.yDivision,g=S.zeroW,a=S.x,C=S.barWidth,d=S.xDivision,h=S.zeroH,i.barHelpers.initializeStackedXYVars(i),1===i.groupCtx.prevY.length&&i.groupCtx.prevY[0].every((function(e){return isNaN(e)}))&&(i.groupCtx.prevY[0]=i.groupCtx.prevY[0].map((function(e){return h})),i.groupCtx.prevYF[0]=i.groupCtx.prevYF[0].map((function(e){return 0})));for(var k=0;k1?(i=d.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:a*parseInt(d.config.plotOptions.bar.columnWidth,10)/100,null!==(c=d.globals.seriesGroups)&&void 0!==c&&c.length&&(a/=d.globals.seriesGroups.length),-1===String(d.config.plotOptions.bar.columnWidth).indexOf("%")&&(a=parseInt(d.config.plotOptions.bar.columnWidth,10)),o=d.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?d.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),e=d.globals.padHorizontal+(i-a)/2),{x:e,y:t,yDivision:n,xDivision:i,barHeight:r,barWidth:a,zeroH:o,zeroW:s}}},{key:"drawStackedBarPaths",value:function(e){for(var t,i=e.indexes,n=e.barHeight,o=e.strokeWidth,s=e.zeroW,r=e.x,a=e.y,l=e.groupIndex,c=e.seriesGroup,d=e.yDivision,u=e.elSeries,h=this.w,g=a+(-1!==l?l*n:0),p=i.i,f=i.j,m=0,v=0;v0){var b=s;this.groupCtx.prevXVal[_-1][f]<0?b=this.series[p][f]>=0?this.groupCtx.prevX[_-1][f]+m-2*(this.isReversed?m:0):this.groupCtx.prevX[_-1][f]:this.groupCtx.prevXVal[_-1][f]>=0&&(b=this.series[p][f]>=0?this.groupCtx.prevX[_-1][f]:this.groupCtx.prevX[_-1][f]-m+2*(this.isReversed?m:0)),t=b}else t=s;r=null===this.series[p][f]?t:t+this.series[p][f]/this.invertedYRatio-2*(this.isReversed?this.series[p][f]/this.invertedYRatio:0);var y=this.barHelpers.getBarpaths({barYPosition:g,barHeight:n,x1:t,x2:r,strokeWidth:o,series:this.series,realIndex:i.realIndex,seriesGroup:c,i:p,j:f,w:h});return this.barHelpers.barBackground({j:f,i:p,y1:g,y2:n,elSeries:u}),a+=d,{pathTo:y.pathTo,pathFrom:y.pathFrom,goalX:this.barHelpers.getGoalValues("x",s,null,p,f),barYPosition:g,x:r,y:a}}},{key:"drawStackedColumnPaths",value:function(e){var t=e.indexes,i=e.x,n=e.y,o=e.xDivision,s=e.barWidth,r=e.zeroH,a=e.groupIndex,l=e.seriesGroup,c=e.elSeries,d=this.w,u=t.i,h=t.j,g=t.bc;if(d.globals.isXNumeric){var p=d.globals.seriesX[u][h];p||(p=0),i=(p-d.globals.minX)/this.xRatio-s/2,d.globals.seriesGroups.length&&(i=(p-d.globals.minX)/this.xRatio-s/2*d.globals.seriesGroups.length)}for(var f,m=i+(-1!==a?a*s:0),v=0,_=0;_0&&!d.globals.isXNumeric||b>0&&d.globals.isXNumeric&&d.globals.seriesX[u-1][h]===d.globals.seriesX[u][h]){var y,w,x,C=Math.min(this.yRatio.length+1,u+1);if(void 0!==this.groupCtx.prevY[b-1]&&this.groupCtx.prevY[b-1].length)for(var S=1;S=0?x-v+2*(this.isReversed?v:0):x;break}if((null===(N=this.groupCtx.prevYVal[b-L])||void 0===N?void 0:N[h])>=0){w=this.series[u][h]>=0?x:x+v-2*(this.isReversed?v:0);break}}void 0===w&&(w=d.globals.gridHeight),f=null!==(y=this.groupCtx.prevYF[0])&&void 0!==y&&y.every((function(e){return 0===e}))&&this.groupCtx.prevYF.slice(1,b).every((function(e){return e.every((function(e){return isNaN(e)}))}))?r:w}else f=r;n=this.series[u][h]?f-this.series[u][h]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[u][h]/this.yRatio[this.yaxisIndex]:0):f;var D=this.barHelpers.getColumnPaths({barXPosition:m,barWidth:s,y1:f,y2:n,yRatio:this.yRatio[this.yaxisIndex],strokeWidth:this.strokeWidth,series:this.series,seriesGroup:l,realIndex:t.realIndex,i:u,j:h,w:d});return this.barHelpers.barBackground({bc:g,j:h,i:u,x1:m,x2:s,elSeries:c}),i+=o,{pathTo:D.pathTo,pathFrom:D.pathFrom,goalY:this.barHelpers.getGoalValues("y",null,r,u,h),barXPosition:m,x:d.globals.isXNumeric?i-o:i,y:n}}}]),i}(),Le=function(e){u(i,Se);var t=f(i);function i(){return a(this,i),t.apply(this,arguments)}return c(i,[{key:"draw",value:function(e,t,i){var n=this,o=this.w,r=new C(this.ctx),a=o.globals.comboCharts?t:o.config.chart.type,l=new W(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot,this.isHorizontal=o.config.plotOptions.bar.horizontal;var c=new S(this.ctx,o);e=c.getLogSeries(e),this.series=e,this.yRatio=c.getLogYRatios(this.yRatio),this.barHelpers.initVariables(e);for(var d=r.group({class:"apexcharts-".concat(a,"-series apexcharts-plot-series")}),u=function(t){n.isBoxPlot="boxPlot"===o.config.chart.type||"boxPlot"===o.config.series[t].type;var a,c,u,h,g,p,f=void 0,m=void 0,v=[],_=[],b=o.globals.comboCharts?i[t]:t,w=r.group({class:"apexcharts-series",seriesName:y.escapeString(o.globals.seriesNames[b]),rel:t+1,"data:realIndex":b});n.ctx.series.addCollapsedClassToSeries(w,b),e[t].length>0&&(n.visibleI=n.visibleI+1),n.yRatio.length>1&&(n.yaxisIndex=b);var x=n.barHelpers.initialPositions();m=x.y,g=x.barHeight,c=x.yDivision,h=x.zeroW,f=x.x,p=x.barWidth,a=x.xDivision,u=x.zeroH,_.push(f+p/2);for(var C=r.group({class:"apexcharts-datalabels","data:realIndex":b}),S=function(i){var r=n.barHelpers.getStrokeWidth(t,i,b),d=null,y={indexes:{i:t,j:i,realIndex:b},x:f,y:m,strokeWidth:r,elSeries:w};d=n.isHorizontal?n.drawHorizontalBoxPaths(s(s({},y),{},{yDivision:c,barHeight:g,zeroW:h})):n.drawVerticalBoxPaths(s(s({},y),{},{xDivision:a,barWidth:p,zeroH:u})),m=d.y,f=d.x,i>0&&_.push(f+p/2),v.push(m),d.pathTo.forEach((function(s,a){var c=!n.isBoxPlot&&n.candlestickOptions.wick.useFillColor?d.color[a]:o.globals.stroke.colors[t],u=l.fillPath({seriesNumber:b,dataPointIndex:i,color:d.color[a],value:e[t][i]});n.renderSeries({realIndex:b,pathFill:u,lineFill:c,j:i,i:t,pathFrom:d.pathFrom,pathTo:s,strokeWidth:r,elSeries:w,x:f,y:m,series:e,barHeight:g,barWidth:p,elDataLabelsWrap:C,visibleSeries:n.visibleI,type:o.config.chart.type})}))},k=0;kv.c&&(u=!1);var y=Math.min(v.o,v.c),w=Math.max(v.o,v.c),x=v.m;a.globals.isXNumeric&&(i=(a.globals.seriesX[m][d]-a.globals.minX)/this.xRatio-o/2);var S=i+o*this.visibleI;void 0===this.series[c][d]||null===this.series[c][d]?(y=s,w=s):(y=s-y/f,w=s-w/f,_=s-v.h/f,b=s-v.l/f,x=s-v.m/f);var k=l.move(S,s),L=l.move(S+o/2,y);return a.globals.previousPaths.length>0&&(L=this.getPreviousPath(m,d,!0)),k=this.isBoxPlot?[l.move(S,y)+l.line(S+o/2,y)+l.line(S+o/2,_)+l.line(S+o/4,_)+l.line(S+o-o/4,_)+l.line(S+o/2,_)+l.line(S+o/2,y)+l.line(S+o,y)+l.line(S+o,x)+l.line(S,x)+l.line(S,y+r/2),l.move(S,x)+l.line(S+o,x)+l.line(S+o,w)+l.line(S+o/2,w)+l.line(S+o/2,b)+l.line(S+o-o/4,b)+l.line(S+o/4,b)+l.line(S+o/2,b)+l.line(S+o/2,w)+l.line(S,w)+l.line(S,x)+"z"]:[l.move(S,w)+l.line(S+o/2,w)+l.line(S+o/2,_)+l.line(S+o/2,w)+l.line(S+o,w)+l.line(S+o,y)+l.line(S+o/2,y)+l.line(S+o/2,b)+l.line(S+o/2,y)+l.line(S,y)+l.line(S,w-r/2)],L+=l.move(S,y),a.globals.isXNumeric||(i+=n),{pathTo:k,pathFrom:L,x:i,y:w,barXPosition:S,color:this.isBoxPlot?p:u?[h]:[g]}}},{key:"drawHorizontalBoxPaths",value:function(e){var t=e.indexes;e.x;var i=e.y,n=e.yDivision,o=e.barHeight,s=e.zeroW,r=e.strokeWidth,a=this.w,l=new C(this.ctx),c=t.i,d=t.j,u=this.boxOptions.colors.lower;this.isBoxPlot&&(u=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var h=this.invertedYRatio,g=t.realIndex,p=this.getOHLCValue(g,d),f=s,m=s,v=Math.min(p.o,p.c),_=Math.max(p.o,p.c),b=p.m;a.globals.isXNumeric&&(i=(a.globals.seriesX[g][d]-a.globals.minX)/this.invertedXRatio-o/2);var y=i+o*this.visibleI;void 0===this.series[c][d]||null===this.series[c][d]?(v=s,_=s):(v=s+v/h,_=s+_/h,f=s+p.h/h,m=s+p.l/h,b=s+p.m/h);var w=l.move(s,y),x=l.move(v,y+o/2);return a.globals.previousPaths.length>0&&(x=this.getPreviousPath(g,d,!0)),w=[l.move(v,y)+l.line(v,y+o/2)+l.line(f,y+o/2)+l.line(f,y+o/2-o/4)+l.line(f,y+o/2+o/4)+l.line(f,y+o/2)+l.line(v,y+o/2)+l.line(v,y+o)+l.line(b,y+o)+l.line(b,y)+l.line(v+r/2,y),l.move(b,y)+l.line(b,y+o)+l.line(_,y+o)+l.line(_,y+o/2)+l.line(m,y+o/2)+l.line(m,y+o-o/4)+l.line(m,y+o/4)+l.line(m,y+o/2)+l.line(_,y+o/2)+l.line(_,y)+l.line(b,y)+"z"],x+=l.move(v,y),a.globals.isXNumeric||(i+=n),{pathTo:w,pathFrom:x,x:_,y:i,barYPosition:y,color:u}}},{key:"getOHLCValue",value:function(e,t){var i=this.w;return{o:this.isBoxPlot?i.globals.seriesCandleH[e][t]:i.globals.seriesCandleO[e][t],h:this.isBoxPlot?i.globals.seriesCandleO[e][t]:i.globals.seriesCandleH[e][t],m:i.globals.seriesCandleM[e][t],l:this.isBoxPlot?i.globals.seriesCandleC[e][t]:i.globals.seriesCandleL[e][t],c:this.isBoxPlot?i.globals.seriesCandleL[e][t]:i.globals.seriesCandleC[e][t]}}}]),i}(),Ee=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"checkColorRange",value:function(){var e=this.w,t=!1,i=e.config.plotOptions[e.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map((function(e,i){e.from<=0&&(t=!0)})),t}},{key:"getShadeColor",value:function(e,t,i,n){var o=this.w,s=1,r=o.config.plotOptions[e].shadeIntensity,a=this.determineColor(e,t,i);o.globals.hasNegs||n?s=o.config.plotOptions[e].reverseNegativeShade?a.percent<0?a.percent/100*(1.25*r):(1-a.percent/100)*(1.25*r):a.percent<=0?1-(1+a.percent/100)*r:(1-a.percent/100)*r:(s=1-a.percent/100,"treemap"===e&&(s=(1-a.percent/100)*(1.25*r)));var l=a.color,c=new y;return o.config.plotOptions[e].enableShades&&(l="dark"===this.w.config.theme.mode?y.hexToRgba(c.shadeColor(-1*s,a.color),o.config.fill.opacity):y.hexToRgba(c.shadeColor(s,a.color),o.config.fill.opacity)),{color:l,colorProps:a}}},{key:"determineColor",value:function(e,t,i){var n=this.w,o=n.globals.series[t][i],s=n.config.plotOptions[e],r=s.colorScale.inverse?i:t;s.distributed&&"treemap"===n.config.chart.type&&(r=i);var a=n.globals.colors[r],l=null,c=Math.min.apply(Math,v(n.globals.series[t])),d=Math.max.apply(Math,v(n.globals.series[t]));s.distributed||"heatmap"!==e||(c=n.globals.minY,d=n.globals.maxY),void 0!==s.colorScale.min&&(c=s.colorScale.minn.globals.maxY?s.colorScale.max:n.globals.maxY);var u=Math.abs(d)+Math.abs(c),h=100*o/(0===u?u-1e-6:u);return s.colorScale.ranges.length>0&&s.colorScale.ranges.map((function(e,t){if(o>=e.from&&o<=e.to){a=e.color,l=e.foreColor?e.foreColor:null,c=e.from,d=e.to;var i=Math.abs(d)+Math.abs(c);h=100*o/(0===i?i-1e-6:i)}})),{color:a,foreColor:l,percent:h}}},{key:"calculateDataLabels",value:function(e){var t=e.text,i=e.x,n=e.y,o=e.i,s=e.j,r=e.colorProps,a=e.fontSize,l=this.w.config.dataLabels,c=new C(this.ctx),d=new U(this.ctx),u=null;if(l.enabled){u=c.group({class:"apexcharts-data-labels"});var h=l.offsetX,g=l.offsetY,p=i+h,f=n+parseFloat(l.style.fontSize)/3+g;d.plotDataLabelsText({x:p,y:f,text:t,i:o,j:s,color:r.foreColor,parent:u,fontSize:a,dataLabelsConfig:l})}return u}},{key:"addListeners",value:function(e){var t=new C(this.ctx);e.node.addEventListener("mouseenter",t.pathMouseEnter.bind(this,e)),e.node.addEventListener("mouseleave",t.pathMouseLeave.bind(this,e)),e.node.addEventListener("mousedown",t.pathMouseDown.bind(this,e))}}]),e}(),Ne=function(){function e(t,i){a(this,e),this.ctx=t,this.w=t.w,this.xRatio=i.xRatio,this.yRatio=i.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new Ee(t),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return c(e,[{key:"draw",value:function(e){var t=this.w,i=new C(this.ctx),n=i.group({class:"apexcharts-heatmap"});n.attr("clip-path","url(#gridRectMask".concat(t.globals.cuid,")"));var o=t.globals.gridWidth/t.globals.dataPoints,s=t.globals.gridHeight/t.globals.series.length,r=0,a=!1;this.negRange=this.helpers.checkColorRange();var l=e.slice();t.config.yaxis[0].reversed&&(a=!0,l.reverse());for(var c=a?0:l.length-1;a?c=0;a?c++:c--){var d=i.group({class:"apexcharts-series apexcharts-heatmap-series",seriesName:y.escapeString(t.globals.seriesNames[c]),rel:c+1,"data:realIndex":c});if(this.ctx.series.addCollapsedClassToSeries(d,c),t.config.chart.dropShadow.enabled){var u=t.config.chart.dropShadow;new x(this.ctx).dropShadow(d,u,c)}for(var h=0,g=t.config.plotOptions.heatmap.shadeIntensity,p=0;p-1&&this.pieClicked(u),i.config.dataLabels.enabled){var w=_.x,S=_.y,k=100*g/this.fullAngle+"%";if(0!==g&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabelthis.fullAngle?t.endAngle=t.endAngle-(n+r):n+r=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(a=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(a)>this.fullAngle&&(a-=this.fullAngle);var l=Math.PI*(a-90)/180,c=t.centerX+o*Math.cos(r),d=t.centerY+o*Math.sin(r),u=t.centerX+o*Math.cos(l),h=t.centerY+o*Math.sin(l),g=y.polarToCartesian(t.centerX,t.centerY,t.donutSize,a),p=y.polarToCartesian(t.centerX,t.centerY,t.donutSize,s),f=n>180?1:0,m=["M",c,d,"A",o,o,0,f,1,u,h];return"donut"===t.chartType?[].concat(m,["L",g.x,g.y,"A",t.donutSize,t.donutSize,0,f,0,p.x,p.y,"L",c,d,"z"]).join(" "):"pie"===t.chartType||"polarArea"===t.chartType?[].concat(m,["L",t.centerX,t.centerY,"L",c,d]).join(" "):[].concat(m).join(" ")}},{key:"drawPolarElements",value:function(e){var t=this.w,i=new X(this.ctx),n=new C(this.ctx),o=new De(this.ctx),s=n.group(),r=n.group(),a=i.niceScale(0,Math.ceil(this.maxY),t.config.yaxis[0].tickAmount,0,!0),l=a.result.reverse(),c=a.result.length;this.maxY=a.niceMax;for(var d=t.globals.radialSize,u=d/(c-1),h=0;h1&&e.total.show&&(o=e.total.color);var r=s.globals.dom.baseEl.querySelector(".apexcharts-datalabel-label"),a=s.globals.dom.baseEl.querySelector(".apexcharts-datalabel-value");i=(0,e.value.formatter)(i,s),n||"function"!=typeof e.total.formatter||(i=e.total.formatter(s));var l=t===e.total.label;t=e.name.formatter(t,l,s),null!==r&&(r.textContent=t),null!==a&&(a.textContent=i),null!==r&&(r.style.fill=o)}},{key:"printDataLabelsInner",value:function(e,t){var i=this.w,n=e.getAttribute("data:value"),o=i.globals.seriesNames[parseInt(e.parentNode.getAttribute("rel"),10)-1];i.globals.series.length>1&&this.printInnerLabels(t,o,n,e);var s=i.globals.dom.baseEl.querySelector(".apexcharts-datalabels-group");null!==s&&(s.style.opacity=1)}},{key:"drawSpokes",value:function(e){var t=this,i=this.w,n=new C(this.ctx),o=i.config.plotOptions.polarArea.spokes;if(0!==o.strokeWidth){for(var s=[],r=360/i.globals.series.length,a=0;a1)r&&!t.total.showAlways?l({makeSliceOut:!1,printLabel:!0}):this.printInnerLabels(t,t.total.label,t.total.formatter(o));else if(l({makeSliceOut:!1,printLabel:!0}),!r)if(o.globals.selectedDataPoints.length&&o.globals.series.length>1)if(o.globals.selectedDataPoints[0].length>0){var c=o.globals.selectedDataPoints[0],d=o.globals.dom.baseEl.querySelector(".apexcharts-".concat(this.chartType.toLowerCase(),"-slice-").concat(c));this.printDataLabelsInner(d,t)}else s&&o.globals.selectedDataPoints.length&&0===o.globals.selectedDataPoints[0].length&&(s.style.opacity=0);else s&&o.globals.series.length>1&&(s.style.opacity=0)}}]),e}(),Ae=function(){function e(t){a(this,e),this.ctx=t,this.w=t.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 i=this.w;this.graphics=new C(this.ctx),this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=i.globals.svgHeight0&&(f=t.getPreviousPath(a));for(var m=0;m=10?e.x>0?(i="start",n+=10):e.x<0&&(i="end",n-=10):i="middle",Math.abs(e.y)>=t-10&&(e.y<0?o-=10:e.y>0&&(o+=10)),{textAnchor:i,newX:n,newY:o}}},{key:"getPreviousPath",value:function(e){for(var t=this.w,i=null,n=0;n0&&parseInt(o.realIndex,10)===parseInt(e,10)&&void 0!==t.globals.previousPaths[n].paths[0]&&(i=t.globals.previousPaths[n].paths[0].d)}return i}},{key:"getDataPointsPos",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;e=e||[],t=t||[];for(var n=[],o=0;o=360&&(h=360-Math.abs(this.startAngle)-.1);var g=i.drawPath({d:"",stroke:d,strokeWidth:r*parseInt(c.strokeWidth,10)/100,fill:"none",strokeOpacity:c.opacity,classes:"apexcharts-radialbar-area"});if(c.dropShadow.enabled){var p=c.dropShadow;o.dropShadow(g,p)}l.add(g),g.attr("id","apexcharts-radialbarTrack-"+a),this.animatePaths(g,{centerX:e.centerX,centerY:e.centerY,endAngle:h,startAngle:u,size:e.size,i:a,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:t.globals.easing})}return n}},{key:"drawArcs",value:function(e){var t=this.w,i=new C(this.ctx),n=new W(this.ctx),o=new x(this.ctx),s=i.group(),r=this.getStrokeWidth(e);e.size=e.size-r/2;var a=t.config.plotOptions.radialBar.hollow.background,l=e.size-r*e.series.length-this.margin*e.series.length-r*parseInt(t.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,c=l-t.config.plotOptions.radialBar.hollow.margin;void 0!==t.config.plotOptions.radialBar.hollow.image&&(a=this.drawHollowImage(e,s,l,a));var d=this.drawHollow({size:c,centerX:e.centerX,centerY:e.centerY,fill:a||"transparent"});if(t.config.plotOptions.radialBar.hollow.dropShadow.enabled){var u=t.config.plotOptions.radialBar.hollow.dropShadow;o.dropShadow(d,u)}var h=1;!this.radialDataLabels.total.show&&t.globals.series.length>1&&(h=0);var g=null;this.radialDataLabels.show&&(g=this.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:e.centerX,centerY:e.centerY,opacity:h})),"back"===t.config.plotOptions.radialBar.hollow.position&&(s.add(d),g&&s.add(g));var p=!1;t.config.plotOptions.radialBar.inverseOrder&&(p=!0);for(var f=p?e.series.length-1:0;p?f>=0:f100?100:e.series[f])/100,S=Math.round(this.totalAngle*w)+this.startAngle,k=void 0;t.globals.dataChanged&&(b=this.startAngle,k=Math.round(this.totalAngle*y.negToZero(t.globals.previousPaths[f])/100)+b),Math.abs(S)+Math.abs(_)>=360&&(S-=.01),Math.abs(k)+Math.abs(b)>=360&&(k-=.01);var L=S-_,E=Array.isArray(t.config.stroke.dashArray)?t.config.stroke.dashArray[f]:t.config.stroke.dashArray,N=i.drawPath({d:"",stroke:v,strokeWidth:r,fill:"none",fillOpacity:t.config.fill.opacity,classes:"apexcharts-radialbar-area apexcharts-radialbar-slice-"+f,strokeDashArray:E});if(C.setAttrs(N.node,{"data:angle":L,"data:value":e.series[f]}),t.config.chart.dropShadow.enabled){var D=t.config.chart.dropShadow;o.dropShadow(N,D,f)}o.setSelectionFilter(N,0,f),this.addListeners(N,this.radialDataLabels),m.add(N),N.attr({index:0,j:f});var T=0;!this.initialAnim||t.globals.resized||t.globals.dataChanged||(T=t.config.chart.animations.speed),t.globals.dataChanged&&(T=t.config.chart.animations.dynamicAnimation.speed),this.animDur=T/(1.2*e.series.length)+this.animDur,this.animBeginArr.push(this.animDur),this.animatePaths(N,{centerX:e.centerX,centerY:e.centerY,endAngle:S,startAngle:_,prevEndAngle:k,prevStartAngle:b,size:e.size,i:f,totalItems:2,animBeginArr:this.animBeginArr,dur:T,shouldSetPrevPaths:!0,easing:t.globals.easing})}return{g:s,elHollow:d,dataLabels:g}}},{key:"drawHollow",value:function(e){var t=new C(this.ctx).drawCircle(2*e.size);return t.attr({class:"apexcharts-radialbar-hollow",cx:e.centerX,cy:e.centerY,r:e.size,fill:e.fill}),t}},{key:"drawHollowImage",value:function(e,t,i,n){var o=this.w,s=new W(this.ctx),r=y.randomId(),a=o.config.plotOptions.radialBar.hollow.image;if(o.config.plotOptions.radialBar.hollow.imageClipped)s.clippedImgArea({width:i,height:i,image:a,patternID:"pattern".concat(o.globals.cuid).concat(r)}),n="url(#pattern".concat(o.globals.cuid).concat(r,")");else{var l=o.config.plotOptions.radialBar.hollow.imageWidth,c=o.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===c){var d=o.globals.dom.Paper.image(a).loaded((function(t){this.move(e.centerX-t.width/2+o.config.plotOptions.radialBar.hollow.imageOffsetX,e.centerY-t.height/2+o.config.plotOptions.radialBar.hollow.imageOffsetY)}));t.add(d)}else{var u=o.globals.dom.Paper.image(a).loaded((function(t){this.move(e.centerX-l/2+o.config.plotOptions.radialBar.hollow.imageOffsetX,e.centerY-c/2+o.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,c)}));t.add(u)}}return n}},{key:"getStrokeWidth",value:function(e){var t=this.w;return e.size*(100-parseInt(t.config.plotOptions.radialBar.hollow.size,10))/100/(e.series.length+1)-this.margin}}]),i}(),Re=function(e){u(i,Se);var t=f(i);function i(){return a(this,i),t.apply(this,arguments)}return c(i,[{key:"draw",value:function(e,t){var i=this.w,n=new C(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=e,this.seriesRangeStart=i.globals.seriesRangeStart,this.seriesRangeEnd=i.globals.seriesRangeEnd,this.barHelpers.initVariables(e);for(var o=n.group({class:"apexcharts-rangebar-series apexcharts-plot-series"}),r=0;r0&&(this.visibleI=this.visibleI+1);var f=0,m=0;this.yRatio.length>1&&(this.yaxisIndex=g);var v=this.barHelpers.initialPositions();u=v.y,c=v.zeroW,d=v.x,m=v.barWidth,a=v.xDivision,l=v.zeroH;for(var _=n.group({class:"apexcharts-datalabels","data:realIndex":g}),b=n.group({class:"apexcharts-rangebar-goals-markers",style:"pointer-events: none"}),w=0;w0}));return n=l.config.plotOptions.bar.rangeBarGroupRows?o+r*h:o+s*this.visibleI+r*h,g>-1&&!l.config.plotOptions.bar.rangeBarOverlap&&(c=l.globals.seriesRange[t][g].overlaps).indexOf(d)>-1&&(n=(s=a.barHeight/c.length)*this.visibleI+r*(100-parseInt(this.barOptions.barHeight,10))/100/2+s*(this.visibleI+c.indexOf(d))+r*h),{barYPosition:n,barHeight:s}}},{key:"drawRangeColumnPaths",value:function(e){var t=e.indexes,i=e.x;e.strokeWidth;var n=e.xDivision,o=e.barWidth,s=e.zeroH,r=this.w,a=t.i,l=t.j,c=this.yRatio[this.yaxisIndex],d=t.realIndex,u=this.getRangeValue(d,l),h=Math.min(u.start,u.end),g=Math.max(u.start,u.end);r.globals.isXNumeric&&(i=(r.globals.seriesX[a][l]-r.globals.minX)/this.xRatio-o/2);var p=i+o*this.visibleI;void 0===this.series[a][l]||null===this.series[a][l]?h=s:(h=s-h/c,g=s-g/c);var f=Math.abs(g-h),m=this.barHelpers.getColumnPaths({barXPosition:p,barWidth:o,y1:h,y2:g,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:t.realIndex,i:d,j:l,w:r});return r.globals.isXNumeric||(i+=n),{pathTo:m.pathTo,pathFrom:m.pathFrom,barHeight:f,x:i,y:g,goalY:this.barHelpers.getGoalValues("y",null,s,a,l),barXPosition:p}}},{key:"drawRangeBarPaths",value:function(e){var t=e.indexes,i=e.y,n=e.y1,o=e.y2,s=e.yDivision,r=e.barHeight,a=e.barYPosition,l=e.zeroW,c=this.w,d=l+n/this.invertedYRatio,u=l+o/this.invertedYRatio,h=Math.abs(u-d),g=this.barHelpers.getBarpaths({barYPosition:a,barHeight:r,x1:d,x2:u,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:t.realIndex,realIndex:t.realIndex,j:t.j,w:c});return c.globals.isXNumeric||(i+=s),{pathTo:g.pathTo,pathFrom:g.pathFrom,barWidth:h,x:u,goalX:this.barHelpers.getGoalValues("x",l,null,t.realIndex,t.j),y:i}}},{key:"getRangeValue",value:function(e,t){var i=this.w;return{start:i.globals.seriesRangeStart[e][t],end:i.globals.seriesRangeEnd[e][t]}}}]),i}(),Me=function(){function e(t){a(this,e),this.w=t.w,this.lineCtx=t}return c(e,[{key:"sameValueSeriesFix",value:function(e,t){var i=this.w;if(("gradient"===i.config.fill.type||"gradient"===i.config.fill.type[e])&&new S(this.lineCtx.ctx,i).seriesHaveSameValues(e)){var n=t[e].slice();n[n.length-1]=n[n.length-1]+1e-6,t[e]=n}return t}},{key:"calculatePoints",value:function(e){var t=e.series,i=e.realIndex,n=e.x,o=e.y,s=e.i,r=e.j,a=e.prevY,l=this.w,c=[],d=[];if(0===r){var u=this.lineCtx.categoryAxisCorrection+l.config.markers.offsetX;l.globals.isXNumeric&&(u=(l.globals.seriesX[i][0]-l.globals.minX)/this.lineCtx.xRatio+l.config.markers.offsetX),c.push(u),d.push(y.isNumber(t[s][0])?a+l.config.markers.offsetY:null),c.push(n+l.config.markers.offsetX),d.push(y.isNumber(t[s][r+1])?o+l.config.markers.offsetY:null)}else c.push(n+l.config.markers.offsetX),d.push(y.isNumber(t[s][r+1])?o+l.config.markers.offsetY:null);return{x:c,y:d}}},{key:"checkPreviousPaths",value:function(e){for(var t=e.pathFromLine,i=e.pathFromArea,n=e.realIndex,o=this.w,s=0;s0&&parseInt(r.realIndex,10)===parseInt(n,10)&&("line"===r.type?(this.lineCtx.appendPathFrom=!1,t=o.globals.previousPaths[s].paths[0].d):"area"===r.type&&(this.lineCtx.appendPathFrom=!1,i=o.globals.previousPaths[s].paths[0].d,o.config.stroke.show&&o.globals.previousPaths[s].paths[1]&&(t=o.globals.previousPaths[s].paths[1].d)))}return{pathFromLine:t,pathFromArea:i}}},{key:"determineFirstPrevY",value:function(e){var t,i=e.i,n=e.series,o=e.prevY,s=e.lineYPosition,r=this.w;if(void 0!==(null===(t=n[i])||void 0===t?void 0:t[0]))o=(s=r.config.chart.stacked&&i>0?this.lineCtx.prevSeriesY[i-1][0]:this.lineCtx.zeroY)-n[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]+2*(this.lineCtx.isReversed?n[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]:0);else if(r.config.chart.stacked&&i>0&&void 0===n[i][0])for(var a=i-1;a>=0;a--)if(null!==n[a][0]&&void 0!==n[a][0]){o=s=this.lineCtx.prevSeriesY[a][0];break}return{prevY:o,lineYPosition:s}}}]),e}(),Pe=function(){function e(t,i,n){a(this,e),this.ctx=t,this.w=t.w,this.xyRatios=i,this.pointsChart=!("bubble"!==this.w.config.chart.type&&"scatter"!==this.w.config.chart.type)||n,this.scatter=new z(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new Me(this),this.markers=new V(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return c(e,[{key:"draw",value:function(e,t,i,n){var o=this.w,r=new C(this.ctx),a=o.globals.comboCharts?t:o.config.chart.type,l=r.group({class:"apexcharts-".concat(a,"-series apexcharts-plot-series")}),c=new S(this.ctx,o);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,e=c.getLogSeries(e),this.yRatio=c.getLogYRatios(this.yRatio);for(var d=[],u=0;u0&&(f=(o.globals.seriesX[h][0]-o.globals.minX)/this.xRatio),p.push(f);var m,v=f,_=void 0,b=v,y=this.zeroY,w=this.zeroY;y=this.lineHelpers.determineFirstPrevY({i:u,series:e,prevY:y,lineYPosition:0}).prevY,g.push(y),m=y,"rangeArea"===a&&(_=w=this.lineHelpers.determineFirstPrevY({i:u,series:n,prevY:w,lineYPosition:0}).prevY);var x={type:a,series:e,realIndex:h,i:u,x:f,y:1,pX:v,pY:m,pathsFrom:this._calculatePathsFrom({type:a,series:e,i:u,realIndex:h,prevX:b,prevY:y,prevY2:w}),linePaths:[],areaPaths:[],seriesIndex:i,lineYPosition:0,xArrj:p,yArrj:g,seriesRangeEnd:n},k=this._iterateOverDataPoints(s(s({},x),{},{iterations:"rangeArea"===a?e[u].length-1:void 0,isRangeStart:!0}));if("rangeArea"===a){var L=this._calculatePathsFrom({series:n,i:u,realIndex:h,prevX:b,prevY:w}),E=this._iterateOverDataPoints(s(s({},x),{},{series:n,pY:_,pathsFrom:L,iterations:n[u].length-1,isRangeStart:!1}));k.linePaths[0]=E.linePath+k.linePath,k.pathFromLine=E.pathFromLine+k.pathFromLine}this._handlePaths({type:a,realIndex:h,i:u,paths:k}),this.elSeries.add(this.elPointsMain),this.elSeries.add(this.elDataLabelsWrap),d.push(this.elSeries)}if(o.config.chart.stacked)for(var N=d.length;N>0;N--)l.add(d[N-1]);else for(var D=0;D1&&(this.yaxisIndex=i),this.isReversed=n.config.yaxis[this.yaxisIndex]&&n.config.yaxis[this.yaxisIndex].reversed,this.zeroY=n.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?n.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),this.areaBottomY=this.zeroY,(this.zeroY>n.globals.gridHeight||"end"===n.config.plotOptions.area.fillTo)&&(this.areaBottomY=n.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=o.group({class:"apexcharts-series",seriesName:y.escapeString(n.globals.seriesNames[i])}),this.elPointsMain=o.group({class:"apexcharts-series-markers-wrap","data:realIndex":i}),this.elDataLabelsWrap=o.group({class:"apexcharts-datalabels","data:realIndex":i});var s=e[t].length===n.globals.dataPoints;this.elSeries.attr({"data:longestSeries":s,rel:t+1,"data:realIndex":i}),this.appendPathFrom=!0}},{key:"_calculatePathsFrom",value:function(e){var t,i,n,o,s=e.type,r=e.series,a=e.i,l=e.realIndex,c=e.prevX,d=e.prevY,u=e.prevY2,h=this.w,g=new C(this.ctx);if(null===r[a][0]){for(var p=0;p0){var f=this.lineHelpers.checkPreviousPaths({pathFromLine:n,pathFromArea:o,realIndex:l});n=f.pathFromLine,o=f.pathFromArea}return{prevX:c,prevY:d,linePath:t,areaPath:i,pathFromLine:n,pathFromArea:o}}},{key:"_handlePaths",value:function(e){var t=e.type,i=e.realIndex,n=e.i,o=e.paths,r=this.w,a=new C(this.ctx),l=new W(this.ctx);this.prevSeriesY.push(o.yArrj),r.globals.seriesXvalues[i]=o.xArrj,r.globals.seriesYvalues[i]=o.yArrj;var c=r.config.forecastDataPoints;if(c.count>0&&"rangeArea"!==t){var d=r.globals.seriesXvalues[i][r.globals.seriesXvalues[i].length-c.count-1],u=a.drawRect(d,0,r.globals.gridWidth,r.globals.gridHeight,0);r.globals.dom.elForecastMask.appendChild(u.node);var h=a.drawRect(0,0,d,r.globals.gridHeight,0);r.globals.dom.elNonForecastMask.appendChild(h.node)}this.pointsChart||r.globals.delayedElements.push({el:this.elPointsMain.node,index:i});var g={i:n,realIndex:i,animationDelay:n,initialSpeed:r.config.chart.animations.speed,dataChangeSpeed:r.config.chart.animations.dynamicAnimation.speed,className:"apexcharts-".concat(t)};if("area"===t)for(var p=l.fillPath({seriesNumber:i}),f=0;f0&&"rangeArea"!==t){var S=a.renderPaths(w);S.node.setAttribute("stroke-dasharray",c.dashArray),c.strokeWidth&&S.node.setAttribute("stroke-width",c.strokeWidth),this.elSeries.add(S),S.attr("clip-path","url(#forecastMask".concat(r.globals.cuid,")")),x.attr("clip-path","url(#nonForecastMask".concat(r.globals.cuid,")"))}}}}},{key:"_iterateOverDataPoints",value:function(e){var t=e.type,i=e.series,n=e.iterations,o=e.realIndex,s=e.i,r=e.x,a=e.y,l=e.pX,c=e.pY,d=e.pathsFrom,u=e.linePaths,h=e.areaPaths,g=e.seriesIndex,p=e.lineYPosition,f=e.xArrj,m=e.yArrj,v=e.isRangeStart,_=e.seriesRangeEnd,b=this.w,w=new C(this.ctx),x=this.yRatio,S=d.prevY,k=d.linePath,L=d.areaPath,E=d.pathFromLine,N=d.pathFromArea,D=y.isNumber(b.globals.minYArr[o])?b.globals.minYArr[o]:b.globals.minY;n||(n=b.globals.dataPoints>1?b.globals.dataPoints-1:b.globals.dataPoints);for(var T=a,A=0;A0&&b.globals.collapsedSeries.length-1){t--;break}return t>=0?t:0}(s-1)][A+1]:this.zeroY,I?a=p-D/x[this.yaxisIndex]+2*(this.isReversed?D/x[this.yaxisIndex]:0):(a=p-i[s][A+1]/x[this.yaxisIndex]+2*(this.isReversed?i[s][A+1]/x[this.yaxisIndex]:0),"rangeArea"===t&&(T=p-_[s][A+1]/x[this.yaxisIndex]+2*(this.isReversed?_[s][A+1]/x[this.yaxisIndex]:0))),f.push(r),m.push(a);var M=this.lineHelpers.calculatePoints({series:i,x:r,y:a,realIndex:o,i:s,j:A,prevY:S}),P=this._createPaths({type:t,series:i,i:s,realIndex:o,j:A,x:r,y:a,y2:T,pX:l,pY:c,linePath:k,areaPath:L,linePaths:u,areaPaths:h,seriesIndex:g,isRangeStart:v});h=P.areaPaths,u=P.linePaths,l=P.pX,c=P.pY,L=P.areaPath,k=P.linePath,this.appendPathFrom&&(E+=w.line(r,this.zeroY),N+=w.line(r,this.zeroY)),this.handleNullDataPoints(i,M,s,A,o),this._handleMarkersAndLabels({type:t,pointsPos:M,i:s,j:A,realIndex:o,isRangeStart:v})}return{yArrj:m,xArrj:f,pathFromArea:N,areaPaths:h,pathFromLine:E,linePaths:u,linePath:k,areaPath:L}}},{key:"_handleMarkersAndLabels",value:function(e){var t=e.type,i=e.pointsPos,n=e.isRangeStart,o=e.i,s=e.j,r=e.realIndex,a=this.w,l=new U(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,s,{realIndex:r,pointsPos:i,zRatio:this.zRatio,elParent:this.elPointsMain});else{a.globals.series[o].length>1&&this.elPointsMain.node.classList.add("apexcharts-element-hidden");var c=this.markers.plotChartMarkers(i,r,s+1);null!==c&&this.elPointsMain.add(c)}var d=l.drawDataLabel({type:t,isRangeStart:n,pos:i,i:r,j:s+1});null!==d&&this.elDataLabelsWrap.add(d)}},{key:"_createPaths",value:function(e){var t=e.type,i=e.series,n=e.i,o=e.realIndex,s=e.j,r=e.x,a=e.y,l=e.y2,c=e.pX,d=e.pY,u=e.linePath,h=e.areaPath,g=e.linePaths,p=e.areaPaths,f=e.seriesIndex,m=e.isRangeStart,v=this.w,_=new C(this.ctx),b=v.config.stroke.curve,y=this.areaBottomY;if(Array.isArray(v.config.stroke.curve)&&(b=Array.isArray(f)?v.config.stroke.curve[f[n]]:v.config.stroke.curve[n]),"smooth"===b){var w=.35*(r-c);v.globals.hasNullValues?(null!==i[n][s]&&(null!==i[n][s+1]?(u=_.move(c,d)+_.curve(c+w,d,r-w,a,r+1,a),h=_.move(c+1,d)+_.curve(c+w,d,r-w,a,r+1,a)+_.line(r,y)+_.line(c,y)+"z"):(u=_.move(c,d),h=_.move(c,d)+"z")),g.push(u),p.push(h)):(u+=_.curve(c+w,d,r-w,a,r,a),h+=_.curve(c+w,d,r-w,a,r,a)),c=r,d=a,s===i[n].length-2&&(h=h+_.curve(c,d,r,a,r,y)+_.move(r,a)+"z","rangeArea"===t&&m?u=u+_.curve(c,d,r,a,r,l)+_.move(r,l)+"z":v.globals.hasNullValues||(g.push(u),p.push(h)))}else{if(null===i[n][s+1]){u+=_.move(r,a);var x=v.globals.isXNumeric?(v.globals.seriesX[o][s]-v.globals.minX)/this.xRatio:r-this.xDivision;h=h+_.line(x,y)+_.move(r,a)+"z"}null===i[n][s]&&(u+=_.move(r,a),h+=_.move(r,y)),"stepline"===b?(u=u+_.line(r,null,"H")+_.line(null,a,"V"),h=h+_.line(r,null,"H")+_.line(null,a,"V")):"straight"===b&&(u+=_.line(r,a),h+=_.line(r,a)),s===i[n].length-2&&(h=h+_.line(r,y)+_.move(r,a)+"z","rangeArea"===t&&m?u=u+_.line(r,l)+_.move(r,l)+"z":(g.push(u),p.push(h)))}return{linePaths:g,areaPaths:p,pX:c,pY:d,linePath:u,areaPath:h}}},{key:"handleNullDataPoints",value:function(e,t,i,n,o){var s=this.w;if(null===e[i][n]&&s.config.markers.showNullDataPoints||1===e[i].length){var r=this.markers.plotChartMarkers(t,o,n+1,this.strokeWidth-s.config.markers.strokeWidth/2,!0);null!==r&&this.elPointsMain.add(r)}}}]),e}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function e(t,i,n,o){this.xoffset=t,this.yoffset=i,this.height=o,this.width=n,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(e){var t,i=[],n=this.xoffset,o=this.yoffset,r=s(e)/this.height,a=s(e)/this.width;if(this.width>=this.height)for(t=0;t=this.height){var n=t/this.height,o=this.width-n;i=new e(this.xoffset+n,this.yoffset,o,this.height)}else{var s=t/this.width,r=this.height-s;i=new e(this.xoffset,this.yoffset+s,this.width,r)}return i}}function t(t,n,o,r,a){r=void 0===r?0:r,a=void 0===a?0:a;var l=i(function(e,t){var i,n=[],o=t/s(e);for(i=0;i=r}(t,l=e[0],a)?(t.push(l),i(e.slice(1),t,o,r)):(c=o.cutArea(s(t),r),r.push(o.getCoordinates(t)),i(e,[],c,r)),r;r.push(o.getCoordinates(t))}function n(e,t){var i=Math.min.apply(Math,e),n=Math.max.apply(Math,e),o=s(e);return Math.max(Math.pow(t,2)*n/Math.pow(o,2),Math.pow(o,2)/(Math.pow(t,2)*i))}function o(e){return e&&e.constructor===Array}function s(e){var t,i=0;for(t=0;ts-n&&l.width<=r-o){var c=a.rotateAroundCenter(e.node);e.node.setAttribute("transform","rotate(-90 ".concat(c.x," ").concat(c.y,")"))}}},{key:"animateTreemap",value:function(e,t,i,n){var o=new w(this.ctx);o.animateRect(e,{x:t.x,y:t.y,width:t.width,height:t.height},{x:i.x,y:i.y,width:i.width,height:i.height},n,(function(){o.animationCompleted(e)}))}}]),e}(),He=86400,We=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return c(e,[{key:"calculateTimeScaleTicks",value:function(e,t){var i=this,n=this.w;if(n.globals.allSeriesCollapsed)return n.globals.labels=[],n.globals.timescaleLabels=[],[];var o=new I(this.ctx),r=(t-e)/864e5;this.determineInterval(r),n.globals.disableZoomIn=!1,n.globals.disableZoomOut=!1,r<.00011574074074074075?n.globals.disableZoomIn=!0:r>5e4&&(n.globals.disableZoomOut=!0);var a=o.getTimeUnitsfromTimestamp(e,t,this.utc),l=n.globals.gridWidth/r,c=l/24,d=c/60,u=d/60,h=Math.floor(24*r),g=Math.floor(1440*r),p=Math.floor(r*He),f=Math.floor(r),m=Math.floor(r/30),v=Math.floor(r/365),_={minMillisecond:a.minMillisecond,minSecond:a.minSecond,minMinute:a.minMinute,minHour:a.minHour,minDate:a.minDate,minMonth:a.minMonth,minYear:a.minYear},b={firstVal:_,currentMillisecond:_.minMillisecond,currentSecond:_.minSecond,currentMinute:_.minMinute,currentHour:_.minHour,currentMonthDate:_.minDate,currentDate:_.minDate,currentMonth:_.minMonth,currentYear:_.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:c,minutesWidthOnXAxis:d,secondsWidthOnXAxis:u,numberOfSeconds:p,numberOfMinutes:g,numberOfHours:h,numberOfDays:f,numberOfMonths:m,numberOfYears:v};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_fives":case"minutes":this.generateMinuteScale(b);break;case"seconds_tens":case"seconds_fives":case"seconds":this.generateSecondScale(b)}var y=this.timeScaleArray.map((function(e){var t={position:e.position,unit:e.unit,year:e.year,day:e.day?e.day:1,hour:e.hour?e.hour:0,month:e.month+1};return"month"===e.unit?s(s({},t),{},{day:1,value:e.value+1}):"day"===e.unit||"hour"===e.unit?s(s({},t),{},{value:e.value}):"minute"===e.unit?s(s({},t),{},{value:e.value,minute:e.value}):"second"===e.unit?s(s({},t),{},{value:e.value,minute:e.minute,second:e.second}):e}));return y.filter((function(e){var t=1,o=Math.ceil(n.globals.gridWidth/120),s=e.value;void 0!==n.config.xaxis.tickAmount&&(o=n.config.xaxis.tickAmount),y.length>o&&(t=Math.floor(y.length/o));var r=!1,a=!1;switch(i.tickInterval){case"years":"year"===e.unit&&(r=!0);break;case"half_year":t=7,"year"===e.unit&&(r=!0);break;case"months":t=1,"year"===e.unit&&(r=!0);break;case"months_fortnight":t=15,"year"!==e.unit&&"month"!==e.unit||(r=!0),30===s&&(a=!0);break;case"months_days":t=10,"month"===e.unit&&(r=!0),30===s&&(a=!0);break;case"week_days":t=8,"month"===e.unit&&(r=!0);break;case"days":t=1,"month"===e.unit&&(r=!0);break;case"hours":"day"===e.unit&&(r=!0);break;case"minutes_fives":case"seconds_fives":s%5!=0&&(a=!0);break;case"seconds_tens":s%10!=0&&(a=!0)}if("hours"===i.tickInterval||"minutes_fives"===i.tickInterval||"seconds_tens"===i.tickInterval||"seconds_fives"===i.tickInterval){if(!a)return!0}else if((s%t==0||r)&&!a)return!0}))}},{key:"recalcDimensionsBasedOnFormat",value:function(e,t){var i=this.w,n=this.formatDates(e),o=this.removeOverlappingTS(n);i.globals.timescaleLabels=o.slice(),new de(this.ctx).plotCoords()}},{key:"determineInterval",value:function(e){var t=24*e,i=60*t;switch(!0){case e/365>5:this.tickInterval="years";break;case e>800:this.tickInterval="half_year";break;case e>180:this.tickInterval="months";break;case e>90:this.tickInterval="months_fortnight";break;case e>60:this.tickInterval="months_days";break;case e>30:this.tickInterval="week_days";break;case e>2:this.tickInterval="days";break;case t>2.4:this.tickInterval="hours";break;case i>15:this.tickInterval="minutes_fives";break;case i>5:this.tickInterval="minutes";break;case i>1:this.tickInterval="seconds_tens";break;case 60*i>20:this.tickInterval="seconds_fives";break;default:this.tickInterval="seconds"}}},{key:"generateYearScale",value:function(e){var t=e.firstVal,i=e.currentMonth,n=e.currentYear,o=e.daysWidthOnXAxis,s=e.numberOfYears,r=t.minYear,a=0,l=new I(this.ctx),c="year";if(t.minDate>1||t.minMonth>0){var d=l.determineRemainingDaysOfYear(t.minYear,t.minMonth,t.minDate);a=(l.determineDaysOfYear(t.minYear)-d+1)*o,r=t.minYear+1,this.timeScaleArray.push({position:a,value:r,unit:c,year:r,month:y.monthMod(i+1)})}else 1===t.minDate&&0===t.minMonth&&this.timeScaleArray.push({position:a,value:r,unit:c,year:n,month:y.monthMod(i+1)});for(var u=r,h=a,g=0;g1){l=(c.determineDaysOfMonths(n+1,t.minYear)-i+1)*s,a=y.monthMod(n+1);var h=o+u,g=y.monthMod(a),p=a;0===a&&(d="year",p=h,g=1,h+=u+=1),this.timeScaleArray.push({position:l,value:p,unit:d,year:h,month:g})}else this.timeScaleArray.push({position:l,value:a,unit:d,year:o,month:y.monthMod(n)});for(var f=a+1,m=l,v=0,_=1;vr.determineDaysOfMonths(t+1,i)?(c=1,a="month",h=t+=1,t):t},u=(24-t.minHour)*o,h=l,g=d(c,i,n);0===t.minHour&&1===t.minDate?(u=0,h=y.monthMod(t.minMonth),a="month",c=t.minDate,s++):1!==t.minDate&&0===t.minHour&&0===t.minMinute&&(u=0,l=t.minDate,h=l,g=d(c=l,i,n)),this.timeScaleArray.push({position:u,value:h,unit:a,year:this._getYear(n,g,0),month:y.monthMod(g),day:c});for(var p=u,f=0;fa.determineDaysOfMonths(t+1,o)&&(f=1,t+=1),{month:t,date:f}},d=function(e,t){return e>a.determineDaysOfMonths(t+1,o)?t+=1:t},u=60-(t.minMinute+t.minSecond/60),h=u*s,g=t.minHour+1,p=g+1;60===u&&(h=0,p=(g=t.minHour)+1);var f=i,m=d(f,n);this.timeScaleArray.push({position:h,value:g,unit:l,day:f,hour:p,year:o,month:y.monthMod(m)});for(var v=h,_=0;_=24&&(p=0,l="day",m=c(f+=1,m).month,m=d(f,m));var b=this._getYear(o,m,0);v=60*s+v;var w=0===p?f:p;this.timeScaleArray.push({position:v,value:w,unit:l,hour:p,day:f,year:b,month:y.monthMod(m)}),p++}}},{key:"generateMinuteScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,n=e.currentMinute,o=e.currentHour,s=e.currentDate,r=e.currentMonth,a=e.currentYear,l=e.minutesWidthOnXAxis,c=e.secondsWidthOnXAxis,d=e.numberOfMinutes,u=n+1,h=s,g=r,p=a,f=o,m=(60-i-t/1e3)*c,v=0;v=60&&(u=0,24===(f+=1)&&(f=0)),this.timeScaleArray.push({position:m,value:u,unit:"minute",hour:f,minute:u,day:h,year:this._getYear(p,g,0),month:y.monthMod(g)}),m+=l,u++}},{key:"generateSecondScale",value:function(e){for(var t=e.currentMillisecond,i=e.currentSecond,n=e.currentMinute,o=e.currentHour,s=e.currentDate,r=e.currentMonth,a=e.currentYear,l=e.secondsWidthOnXAxis,c=e.numberOfSeconds,d=i+1,u=n,h=s,g=r,p=a,f=o,m=(1e3-t)/1e3*l,v=0;v=60&&(d=0,++u>=60&&(u=0,24===++f&&(f=0))),this.timeScaleArray.push({position:m,value:d,unit:"second",hour:f,minute:u,second:d,day:h,year:this._getYear(p,g,0),month:y.monthMod(g)}),m+=l,d++}},{key:"createRawDateString",value:function(e,t){var i=e.year;return 0===e.month&&(e.month=1),i+="-"+("0"+e.month.toString()).slice(-2),"day"===e.unit?i+="day"===e.unit?"-"+("0"+t).slice(-2):"-01":i+="-"+("0"+(e.day?e.day:"1")).slice(-2),"hour"===e.unit?i+="hour"===e.unit?"T"+("0"+t).slice(-2):"T00":i+="T"+("0"+(e.hour?e.hour:"0")).slice(-2),"minute"===e.unit?i+=":"+("0"+t).slice(-2):i+=":"+(e.minute?("0"+e.minute).slice(-2):"00"),"second"===e.unit?i+=":"+("0"+t).slice(-2):i+=":00",this.utc&&(i+=".000Z"),i}},{key:"formatDates",value:function(e){var t=this,i=this.w;return e.map((function(e){var n=e.value.toString(),o=new I(t.ctx),s=t.createRawDateString(e,n),r=o.getDate(o.parseDate(s));if(t.utc||(r=o.getDate(o.parseDateWithTimezone(s))),void 0===i.config.xaxis.labels.format){var a="dd MMM",l=i.config.xaxis.labels.datetimeFormatter;"year"===e.unit&&(a=l.year),"month"===e.unit&&(a=l.month),"day"===e.unit&&(a=l.day),"hour"===e.unit&&(a=l.hour),"minute"===e.unit&&(a=l.minute),"second"===e.unit&&(a=l.second),n=o.formatDate(r,a)}else n=o.formatDate(r,i.config.xaxis.labels.format);return{dateString:s,position:e.position,value:n,unit:e.unit,year:e.year,month:e.month}}))}},{key:"removeOverlappingTS",value:function(e){var t,i=this,n=new C(this.ctx),o=!1;e.length>0&&e[0].value&&e.every((function(t){return t.value.length===e[0].value.length}))&&(o=!0,t=n.getTextRects(e[0].value).width);var s=0,r=e.map((function(r,a){if(a>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var l=o?t:n.getTextRects(e[s].value).width,c=e[s].position;return r.position>c+l+10?(s=a,r):null}return r}));return r.filter((function(e){return null!==e}))}},{key:"_getYear",value:function(e,t,i){return e+Math.floor(t/12)+i}}]),e}(),Ve=function(){function e(t,i){a(this,e),this.ctx=i,this.w=i.w,this.el=t}return c(e,[{key:"setupElements",value:function(){var e=this.w.globals,t=this.w.config,i=t.chart.type;e.axisCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble","radar","heatmap","treemap"].indexOf(i)>-1,e.xyCharts=["line","area","bar","rangeBar","rangeArea","candlestick","boxPlot","scatter","bubble"].indexOf(i)>-1,e.isBarHorizontal=("bar"===t.chart.type||"rangeBar"===t.chart.type||"boxPlot"===t.chart.type)&&t.plotOptions.bar.horizontal,e.chartClass=".apexcharts"+e.chartID,e.dom.baseEl=this.el,e.dom.elWrap=document.createElement("div"),C.setAttrs(e.dom.elWrap,{id:e.chartClass.substring(1),class:"apexcharts-canvas "+e.chartClass.substring(1)}),this.el.appendChild(e.dom.elWrap),e.dom.Paper=new window.SVG.Doc(e.dom.elWrap),e.dom.Paper.attr({class:"apexcharts-svg","xmlns:data":"ApexChartsNS",transform:"translate(".concat(t.chart.offsetX,", ").concat(t.chart.offsetY,")")}),e.dom.Paper.node.style.background=t.chart.background,this.setSVGDimensions(),e.dom.elLegendForeign=document.createElementNS(e.SVGNS,"foreignObject"),C.setAttrs(e.dom.elLegendForeign,{x:0,y:0,width:e.svgWidth,height:e.svgHeight}),e.dom.elLegendWrap=document.createElement("div"),e.dom.elLegendWrap.classList.add("apexcharts-legend"),e.dom.elLegendWrap.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),e.dom.elLegendForeign.appendChild(e.dom.elLegendWrap),e.dom.Paper.node.appendChild(e.dom.elLegendForeign),e.dom.elGraphical=e.dom.Paper.group().attr({class:"apexcharts-inner apexcharts-graphical"}),e.dom.elDefs=e.dom.Paper.defs(),e.dom.Paper.add(e.dom.elGraphical),e.dom.elGraphical.add(e.dom.elDefs)}},{key:"plotChartType",value:function(e,t){var i=this.w,n=i.config,o=i.globals,s={series:[],i:[]},r={series:[],i:[]},a={series:[],i:[]},l={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]},u={series:[],i:[]},h={series:[],i:[]},g={series:[],seriesRangeEnd:[],i:[]};o.series.map((function(t,p){var f=0;void 0!==e[p].type?("column"===e[p].type||"bar"===e[p].type?(o.series.length>1&&n.plotOptions.bar.horizontal&&console.warn("Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`"),c.series.push(t),c.i.push(p),f++,i.globals.columnSeries=c.series):"area"===e[p].type?(r.series.push(t),r.i.push(p),f++):"line"===e[p].type?(s.series.push(t),s.i.push(p),f++):"scatter"===e[p].type?(a.series.push(t),a.i.push(p)):"bubble"===e[p].type?(l.series.push(t),l.i.push(p),f++):"candlestick"===e[p].type?(d.series.push(t),d.i.push(p),f++):"boxPlot"===e[p].type?(u.series.push(t),u.i.push(p),f++):"rangeBar"===e[p].type?(h.series.push(t),h.i.push(p),f++):"rangeArea"===e[p].type?(g.series.push(o.seriesRangeStart[p]),g.seriesRangeEnd.push(o.seriesRangeEnd[p]),g.i.push(p),f++):console.warn("You have specified an unrecognized chart type. Available types for this property are line/area/column/bar/scatter/bubble/candlestick/boxPlot/rangeBar/rangeArea"),f>1&&(o.comboCharts=!0)):(s.series.push(t),s.i.push(p))}));var p=new Pe(this.ctx,t),f=new Le(this.ctx,t);this.ctx.pie=new Te(this.ctx);var m=new Ie(this.ctx);this.ctx.rangeBar=new Re(this.ctx,t);var v=new Ae(this.ctx),_=[];if(o.comboCharts){if(r.series.length>0&&_.push(p.draw(r.series,"area",r.i)),c.series.length>0)if(i.config.chart.stacked){var b=new ke(this.ctx,t);_.push(b.draw(c.series,c.i))}else this.ctx.bar=new Se(this.ctx,t),_.push(this.ctx.bar.draw(c.series,c.i));if(g.series.length>0&&_.push(p.draw(g.series,"rangeArea",g.i,g.seriesRangeEnd)),s.series.length>0&&_.push(p.draw(s.series,"line",s.i)),d.series.length>0&&_.push(f.draw(d.series,"candlestick",d.i)),u.series.length>0&&_.push(f.draw(u.series,"boxPlot",u.i)),h.series.length>0&&_.push(this.ctx.rangeBar.draw(h.series,h.i)),a.series.length>0){var y=new Pe(this.ctx,t,!0);_.push(y.draw(a.series,"scatter",a.i))}if(l.series.length>0){var w=new Pe(this.ctx,t,!0);_.push(w.draw(l.series,"bubble",l.i))}}else switch(n.chart.type){case"line":_=p.draw(o.series,"line");break;case"area":_=p.draw(o.series,"area");break;case"bar":n.chart.stacked?_=new ke(this.ctx,t).draw(o.series):(this.ctx.bar=new Se(this.ctx,t),_=this.ctx.bar.draw(o.series));break;case"candlestick":_=new Le(this.ctx,t).draw(o.series,"candlestick");break;case"boxPlot":_=new Le(this.ctx,t).draw(o.series,"boxPlot");break;case"rangeBar":_=this.ctx.rangeBar.draw(o.series);break;case"rangeArea":_=p.draw(o.seriesRangeStart,"rangeArea",void 0,o.seriesRangeEnd);break;case"heatmap":_=new Ne(this.ctx,t).draw(o.series);break;case"treemap":_=new Be(this.ctx,t).draw(o.series);break;case"pie":case"donut":case"polarArea":_=this.ctx.pie.draw(o.series);break;case"radialBar":_=m.draw(o.series);break;case"radar":_=v.draw(o.series);break;default:_=p.draw(o.series)}return _}},{key:"setSVGDimensions",value:function(){var e=this.w.globals,t=this.w.config;e.svgWidth=t.chart.width,e.svgHeight=t.chart.height;var i=y.getDimensions(this.el),n=t.chart.width.toString().split(/[0-9]+/g).pop();"%"===n?y.isNumber(i[0])&&(0===i[0].width&&(i=y.getDimensions(this.el.parentNode)),e.svgWidth=i[0]*parseInt(t.chart.width,10)/100):"px"!==n&&""!==n||(e.svgWidth=parseInt(t.chart.width,10));var o=t.chart.height.toString().split(/[0-9]+/g).pop();if("auto"!==e.svgHeight&&""!==e.svgHeight)if("%"===o){var s=y.getDimensions(this.el.parentNode);e.svgHeight=s[1]*parseInt(t.chart.height,10)/100}else e.svgHeight=parseInt(t.chart.height,10);else e.axisCharts?e.svgHeight=e.svgWidth/1.61:e.svgHeight=e.svgWidth/1.2;if(e.svgWidth<0&&(e.svgWidth=0),e.svgHeight<0&&(e.svgHeight=0),C.setAttrs(e.dom.Paper.node,{width:e.svgWidth,height:e.svgHeight}),"%"!==o){var r=t.chart.sparkline.enabled?0:e.axisCharts?t.chart.parentHeightOffset:0;e.dom.Paper.node.parentNode.parentNode.style.minHeight=e.svgHeight+r+"px"}e.dom.elWrap.style.width=e.svgWidth+"px",e.dom.elWrap.style.height=e.svgHeight+"px"}},{key:"shiftGraphPosition",value:function(){var e=this.w.globals,t=e.translateY,i={transform:"translate("+e.translateX+", "+t+")"};C.setAttrs(e.dom.elGraphical.node,i)}},{key:"resizeNonAxisCharts",value:function(){var e=this.w,t=e.globals,i=0,n=e.config.chart.sparkline.enabled?1:15;n+=e.config.grid.padding.bottom,"top"!==e.config.legend.position&&"bottom"!==e.config.legend.position||!e.config.legend.show||e.config.legend.floating||(i=new he(this.ctx).legendHelpers.getLegendBBox().clwh+10);var o=e.globals.dom.baseEl.querySelector(".apexcharts-radialbar, .apexcharts-pie"),s=2.05*e.globals.radialSize;if(o&&!e.config.chart.sparkline.enabled&&0!==e.config.plotOptions.radialBar.startAngle){var r=y.getBoundingClientRect(o);s=r.bottom;var a=r.bottom-r.top;s=Math.max(2.05*e.globals.radialSize,a)}var l=s+t.translateY+i+n;t.dom.elLegendForeign&&t.dom.elLegendForeign.setAttribute("height",l),e.config.chart.height&&String(e.config.chart.height).indexOf("%")>0||(t.dom.elWrap.style.height=l+"px",C.setAttrs(t.dom.Paper.node,{height:l}),t.dom.Paper.node.parentNode.parentNode.style.minHeight=l+"px")}},{key:"coreCalculations",value:function(){new Z(this.ctx).init()}},{key:"resetGlobals",value:function(){var e=this,t=function(){return e.w.config.series.map((function(e){return[]}))},i=new B,n=this.w.globals;i.initGlobalVars(n),n.seriesXvalues=t(),n.seriesYvalues=t()}},{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 e=null,t=this.w;if(t.globals.axisCharts){if("back"===t.config.xaxis.crosshairs.position&&new ie(this.ctx).drawXCrosshairs(),"back"===t.config.yaxis[0].crosshairs.position&&new ie(this.ctx).drawYCrosshairs(),"datetime"===t.config.xaxis.type&&void 0===t.config.xaxis.labels.formatter){this.ctx.timeScale=new We(this.ctx);var i=[];isFinite(t.globals.minX)&&isFinite(t.globals.maxX)&&!t.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minX,t.globals.maxX):t.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(t.globals.minY,t.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}e=new S(this.ctx).getCalculatedRatios()}return e}},{key:"updateSourceChart",value:function(e){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:e.w.globals.minX,max:e.w.globals.maxX}}}},!1,!1)}},{key:"setupBrushHandler",value:function(){var e=this,t=this.w;if(t.config.chart.brush.enabled&&"function"!=typeof t.config.chart.events.selection){var i=t.config.chart.brush.targets||[t.config.chart.brush.target];i.forEach((function(t){var i=ApexCharts.getChartByID(t);i.w.globals.brushSource=e.ctx,"function"!=typeof i.w.config.chart.events.zoomed&&(i.w.config.chart.events.zoomed=function(){e.updateSourceChart(i)}),"function"!=typeof i.w.config.chart.events.scrolled&&(i.w.config.chart.events.scrolled=function(){e.updateSourceChart(i)})})),t.config.chart.events.selection=function(e,n){i.forEach((function(e){var i=ApexCharts.getChartByID(e),o=y.clone(t.config.yaxis);if(t.config.chart.brush.autoScaleYaxis&&1===i.w.globals.series.length){var r=new X(i);o=r.autoScaleY(i,o,n)}var a=i.w.config.yaxis.reduce((function(e,t,n){return[].concat(v(e),[s(s({},i.w.config.yaxis[n]),{},{min:o[0].min,max:o[0].max})])}),[]);i.ctx.updateHelpers._updateOptions({xaxis:{min:n.xaxis.min,max:n.xaxis.max},yaxis:a},!1,!1,!1,!1)}))}}}}]),e}(),ze=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"_updateOptions",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return new Promise((function(a){var l=[t.ctx];o&&(l=t.ctx.getSyncedCharts()),t.ctx.w.globals.isExecCalled&&(l=[t.ctx],t.ctx.w.globals.isExecCalled=!1),l.forEach((function(o,c){var d=o.w;if(d.globals.shouldAnimate=n,i||(d.globals.resized=!0,d.globals.dataChanged=!0,n&&o.series.getPreviousPaths()),e&&"object"===r(e)&&(o.config=new F(e),e=S.extendArrayProps(o.config,e,d),o.w.globals.chartID!==t.ctx.w.globals.chartID&&delete e.series,d.config=y.extend(d.config,e),s&&(d.globals.lastXAxis=e.xaxis?y.clone(e.xaxis):[],d.globals.lastYAxis=e.yaxis?y.clone(e.yaxis):[],d.globals.initialConfig=y.extend({},d.config),d.globals.initialSeries=y.clone(d.config.series),e.series))){for(var u=0;u2&&void 0!==arguments[2]&&arguments[2];return new Promise((function(o){var s,r=i.w;return r.globals.shouldAnimate=t,r.globals.dataChanged=!0,t&&i.ctx.series.getPreviousPaths(),r.globals.axisCharts?(0===(s=e.map((function(e,t){return i._extendSeries(e,t)}))).length&&(s=[{data:[]}]),r.config.series=s):r.config.series=e.slice(),n&&(r.globals.initialConfig.series=y.clone(r.config.series),r.globals.initialSeries=y.clone(r.config.series)),i.ctx.update().then((function(){o(i.ctx)}))}))}},{key:"_extendSeries",value:function(e,t){var i=this.w,n=i.config.series[t];return s(s({},i.config.series[t]),{},{name:e.name?e.name:n&&n.name,color:e.color?e.color:n&&n.color,type:e.type?e.type:n&&n.type,data:e.data?e.data:n&&n.data})}},{key:"toggleDataPointSelection",value:function(e,t){var i=this.w,n=null,o=".apexcharts-series[data\\:realIndex='".concat(e,"']");return i.globals.axisCharts?n=i.globals.dom.Paper.select("".concat(o," path[j='").concat(t,"'], ").concat(o," circle[j='").concat(t,"'], ").concat(o," rect[j='").concat(t,"']")).members[0]:void 0===t&&(n=i.globals.dom.Paper.select("".concat(o," path[j='").concat(e,"']")).members[0],"pie"!==i.config.chart.type&&"polarArea"!==i.config.chart.type&&"donut"!==i.config.chart.type||this.ctx.pie.pieClicked(e)),n?(new C(this.ctx).pathMouseDown(n,null),n.node?n.node:null):(console.warn("toggleDataPointSelection: Element not found"),null)}},{key:"forceXAxisUpdate",value:function(e){var t=this.w;if(["min","max"].forEach((function(i){void 0!==e.xaxis[i]&&(t.config.xaxis[i]=e.xaxis[i],t.globals.lastXAxis[i]=e.xaxis[i])})),e.xaxis.categories&&e.xaxis.categories.length&&(t.config.xaxis.categories=e.xaxis.categories),t.config.xaxis.convertedCatToNumeric){var i=new O(e);e=i.convertCatToNumericXaxis(e,this.ctx)}return e}},{key:"forceYAxisUpdate",value:function(e){return e.chart&&e.chart.stacked&&"100%"===e.chart.stackType&&(Array.isArray(e.yaxis)?e.yaxis.forEach((function(t,i){e.yaxis[i].min=0,e.yaxis[i].max=100})):(e.yaxis.min=0,e.yaxis.max=100)),e}},{key:"revertDefaultAxisMinMax",value:function(e){var t=this,i=this.w,n=i.globals.lastXAxis,o=i.globals.lastYAxis;e&&e.xaxis&&(n=e.xaxis),e&&e.yaxis&&(o=e.yaxis),i.config.xaxis.min=n.min,i.config.xaxis.max=n.max;var s=function(e){void 0!==o[e]&&(i.config.yaxis[e].min=o[e].min,i.config.yaxis[e].max=o[e].max)};i.config.yaxis.map((function(e,n){i.globals.zoomed||void 0!==o[n]?s(n):void 0!==t.ctx.opts.yaxis[n]&&(e.min=t.ctx.opts.yaxis[n].min,e.max=t.ctx.opts.yaxis[n].max)}))}}]),e}();Oe="undefined"!=typeof window?window:void 0,Fe=function(e,t){var i=(void 0!==this?this:e).SVG=function(e){if(i.supported)return e=new i.Doc(e),i.parser.draw||i.prepare(),e};if(i.ns="http://www.w3.org/2000/svg",i.xmlns="http://www.w3.org/2000/xmlns/",i.xlink="http://www.w3.org/1999/xlink",i.svgjs="http://svgjs.dev",i.supported=!0,!i.supported)return!1;i.did=1e3,i.eid=function(e){return"Svgjs"+u(e)+i.did++},i.create=function(e){var i=t.createElementNS(this.ns,e);return i.setAttribute("id",this.eid(e)),i},i.extend=function(){var e,t;t=(e=[].slice.call(arguments)).pop();for(var n=e.length-1;n>=0;n--)if(e[n])for(var o in t)e[n].prototype[o]=t[o];i.Set&&i.Set.inherit&&i.Set.inherit()},i.invent=function(e){var t="function"==typeof e.create?e.create:function(){this.constructor.call(this,i.create(e.create))};return e.inherit&&(t.prototype=new e.inherit),e.extend&&i.extend(t,e.extend),e.construct&&i.extend(e.parent||i.Container,e.construct),t},i.adopt=function(t){return t?t.instance?t.instance:((n="svg"==t.nodeName?t.parentNode instanceof e.SVGElement?new i.Nested:new i.Doc:"linearGradient"==t.nodeName?new i.Gradient("linear"):"radialGradient"==t.nodeName?new i.Gradient("radial"):i[u(t.nodeName)]?new(i[u(t.nodeName)]):new i.Element(t)).type=t.nodeName,n.node=t,t.instance=n,n instanceof i.Doc&&n.namespace().defs(),n.setData(JSON.parse(t.getAttribute("svgjs:data"))||{}),n):null;var n},i.prepare=function(){var e=t.getElementsByTagName("body")[0],n=(e?new i.Doc(e):i.adopt(t.documentElement).nested()).size(2,0);i.parser={body:e||t.documentElement,draw:n.style("opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden").node,poly:n.polyline().node,path:n.path().node,native:i.create("svg")}},i.parser={native:i.create("svg")},t.addEventListener("DOMContentLoaded",(function(){i.parser.draw||i.prepare()}),!1),i.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},i.utils={map:function(e,t){for(var i=e.length,n=[],o=0;o1?1:e,new i.Color({r:~~(this.r+(this.destination.r-this.r)*e),g:~~(this.g+(this.destination.g-this.g)*e),b:~~(this.b+(this.destination.b-this.b)*e)})):this}}),i.Color.test=function(e){return e+="",i.regex.isHex.test(e)||i.regex.isRgb.test(e)},i.Color.isRgb=function(e){return e&&"number"==typeof e.r&&"number"==typeof e.g&&"number"==typeof e.b},i.Color.isColor=function(e){return i.Color.isRgb(e)||i.Color.test(e)},i.Array=function(e,t){0==(e=(e||[]).valueOf()).length&&t&&(e=t.valueOf()),this.value=this.parse(e)},i.extend(i.Array,{toString:function(){return this.value.join(" ")},valueOf:function(){return this.value},parse:function(e){return e=e.valueOf(),Array.isArray(e)?e:this.split(e)}}),i.PointArray=function(e,t){i.Array.call(this,e,t||[[0,0]])},i.PointArray.prototype=new i.Array,i.PointArray.prototype.constructor=i.PointArray;for(var n={M:function(e,t,i){return t.x=i.x=e[0],t.y=i.y=e[1],["M",t.x,t.y]},L:function(e,t){return t.x=e[0],t.y=e[1],["L",e[0],e[1]]},H:function(e,t){return t.x=e[0],["H",e[0]]},V:function(e,t){return t.y=e[0],["V",e[0]]},C:function(e,t){return t.x=e[4],t.y=e[5],["C",e[0],e[1],e[2],e[3],e[4],e[5]]},Q:function(e,t){return t.x=e[2],t.y=e[3],["Q",e[0],e[1],e[2],e[3]]},Z:function(e,t,i){return t.x=i.x,t.y=i.y,["Z"]}},o="mlhvqtcsaz".split(""),s=0,a=o.length;sl);return s},bbox:function(){return i.parser.draw||i.prepare(),i.parser.path.setAttribute("d",this.toString()),i.parser.path.getBBox()}}),i.Number=i.invent({create:function(e,t){this.value=0,this.unit=t||"","number"==typeof e?this.value=isNaN(e)?0:isFinite(e)?e:e<0?-34e37:34e37:"string"==typeof e?(t=e.match(i.regex.numberAndUnit))&&(this.value=parseFloat(t[1]),"%"==t[5]?this.value/=100:"s"==t[5]&&(this.value*=1e3),this.unit=t[5]):e instanceof i.Number&&(this.value=e.valueOf(),this.unit=e.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(e){return e=new i.Number(e),new i.Number(this+e,this.unit||e.unit)},minus:function(e){return e=new i.Number(e),new i.Number(this-e,this.unit||e.unit)},times:function(e){return e=new i.Number(e),new i.Number(this*e,this.unit||e.unit)},divide:function(e){return e=new i.Number(e),new i.Number(this/e,this.unit||e.unit)},to:function(e){var t=new i.Number(this);return"string"==typeof e&&(t.unit=e),t},morph:function(e){return this.destination=new i.Number(e),e.relative&&(this.destination.value+=this.value),this},at:function(e){return this.destination?new i.Number(this.destination).minus(this).times(e).plus(this):this}}}),i.Element=i.invent({create:function(e){this._stroke=i.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=e)&&(this.type=e.nodeName,this.node.instance=this,this._stroke=e.getAttribute("stroke")||this._stroke)},extend:{x:function(e){return this.attr("x",e)},y:function(e){return this.attr("y",e)},cx:function(e){return null==e?this.x()+this.width()/2:this.x(e-this.width()/2)},cy:function(e){return null==e?this.y()+this.height()/2:this.y(e-this.height()/2)},move:function(e,t){return this.x(e).y(t)},center:function(e,t){return this.cx(e).cy(t)},width:function(e){return this.attr("width",e)},height:function(e){return this.attr("height",e)},size:function(e,t){var n=g(this,e,t);return this.width(new i.Number(n.width)).height(new i.Number(n.height))},clone:function(e){this.writeDataToDom();var t=m(this.node.cloneNode(!0));return e?e.add(t):this.after(t),t},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(e){return this.after(e).remove(),e},addTo:function(e){return e.put(this)},putIn:function(e){return e.add(this)},id:function(e){return this.attr("id",e)},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 e=this.attr("class");return null==e?[]:e.trim().split(i.regex.delimiter)},hasClass:function(e){return-1!=this.classes().indexOf(e)},addClass:function(e){if(!this.hasClass(e)){var t=this.classes();t.push(e),this.attr("class",t.join(" "))}return this},removeClass:function(e){return this.hasClass(e)&&this.attr("class",this.classes().filter((function(t){return t!=e})).join(" ")),this},toggleClass:function(e){return this.hasClass(e)?this.removeClass(e):this.addClass(e)},reference:function(e){return i.get(this.attr(e))},parent:function(t){var n=this;if(!n.node.parentNode)return null;if(n=i.adopt(n.node.parentNode),!t)return n;for(;n&&n.node instanceof e.SVGElement;){if("string"==typeof t?n.matches(t):n instanceof t)return n;if(!n.node.parentNode||"#document"==n.node.parentNode.nodeName)return null;n=i.adopt(n.node.parentNode)}},doc:function(){return this instanceof i.Doc?this:this.parent(i.Doc)},parents:function(e){var t=[],i=this;do{if(!(i=i.parent(e))||!i.node)break;t.push(i)}while(i.parent);return t},matches:function(e){return function(e,t){return(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector).call(e,t)}(this.node,e)},native:function(){return this.node},svg:function(e){var n=t.createElement("svg");if(!(e&&this instanceof i.Parent))return n.appendChild(e=t.createElement("svg")),this.writeDataToDom(),e.appendChild(this.node.cloneNode(!0)),n.innerHTML.replace(/^/,"").replace(/<\/svg>$/,"");n.innerHTML=""+e.replace(/\n/,"").replace(/<([\w:-]+)([^<]+?)\/>/g,"<$1$2>")+"";for(var o=0,s=n.firstChild.childNodes.length;o":function(e){return-Math.cos(e*Math.PI)/2+.5},">":function(e){return Math.sin(e*Math.PI/2)},"<":function(e){return 1-Math.cos(e*Math.PI/2)}},i.morph=function(e){return function(t,n){return new i.MorphObj(t,n).at(e)}},i.Situation=i.invent({create:function(e){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new i.Number(e.duration).valueOf(),this.delay=new i.Number(e.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=e.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),i.FX=i.invent({create:function(e){this._target=e,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,t,n){"object"===r(e)&&(t=e.ease,n=e.delay,e=e.duration);var o=new i.Situation({duration:e||1e3,delay:n||0,ease:i.easing[t||"-"]||t});return this.queue(o),this},target:function(e){return e&&e instanceof i.Element?(this._target=e,this):this._target},timeToAbsPos:function(e){return(e-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(e){return this.situation.duration/this._speed*e+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(e){return("function"==typeof e||e instanceof i.Situation)&&this.situations.push(e),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof i.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var e,t=this.situation;if(t.init)return this;for(var n in t.animations){e=this.target()[n](),Array.isArray(e)||(e=[e]),Array.isArray(t.animations[n])||(t.animations[n]=[t.animations[n]]);for(var o=e.length;o--;)t.animations[n][o]instanceof i.Number&&(e[o]=new i.Number(e[o])),t.animations[n][o]=e[o].morph(t.animations[n][o])}for(var n in t.attrs)t.attrs[n]=new i.MorphObj(this.target().attr(n),t.attrs[n]);for(var n in t.styles)t.styles[n]=new i.MorphObj(this.target().style(n),t.styles[n]);return t.initialTransformation=this.target().matrixify(),t.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(e,t){var i=this.active;return this.active=!1,t&&this.clearQueue(),e&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(e){var t=this.last();return this.target().on("finished.fx",(function i(n){n.detail.situation==t&&(e.call(this,t),this.off("finished.fx",i))})),this._callStart()},during:function(e){var t=this.last(),n=function(n){n.detail.situation==t&&e.call(this,n.detail.pos,i.morph(n.detail.pos),n.detail.eased,t)};return this.target().off("during.fx",n).on("during.fx",n),this.after((function(){this.off("during.fx",n)})),this._callStart()},afterAll:function(e){var t=function t(i){e.call(this),this.off("allfinished.fx",t)};return this.target().off("allfinished.fx",t).on("allfinished.fx",t),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(e,t,i){return this.last()[i||"animations"][e]=t,this._callStart()},step:function(e){var t,i,n;e||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops?(t=Math.max(this.absPos,0),i=Math.floor(t),!0===this.situation.loops||ithis.lastPos&&s<=o&&(this.situation.once[s].call(this.target(),this.pos,o),delete this.situation.once[s]);return this.active&&this.target().fire("during",{pos:this.pos,eased:o,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=o,this):this},eachAt:function(){var e,t=this,n=this.target(),o=this.situation;for(var s in o.animations)e=[].concat(o.animations[s]).map((function(e){return"string"!=typeof e&&e.at?e.at(o.ease(t.pos),t.pos):e})),n[s].apply(n,e);for(var s in o.attrs)e=[s].concat(o.attrs[s]).map((function(e){return"string"!=typeof e&&e.at?e.at(o.ease(t.pos),t.pos):e})),n.attr.apply(n,e);for(var s in o.styles)e=[s].concat(o.styles[s]).map((function(e){return"string"!=typeof e&&e.at?e.at(o.ease(t.pos),t.pos):e})),n.style.apply(n,e);if(o.transforms.length){e=o.initialTransformation,s=0;for(var r=o.transforms.length;s=0;--n)this[_[n]]=null!=e[_[n]]?e[_[n]]:t[_[n]]},extend:{extract:function(){var e=p(this,0,1);p(this,1,0);var t=180/Math.PI*Math.atan2(e.y,e.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(t*Math.PI/180)+this.f*Math.sin(t*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(t*Math.PI/180)+this.e*Math.sin(-t*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:t,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new i.Matrix(this)}},clone:function(){return new i.Matrix(this)},morph:function(e){return this.destination=new i.Matrix(e),this},multiply:function(e){return new i.Matrix(this.native().multiply(function(e){return e instanceof i.Matrix||(e=new i.Matrix(e)),e}(e).native()))},inverse:function(){return new i.Matrix(this.native().inverse())},translate:function(e,t){return new i.Matrix(this.native().translate(e||0,t||0))},native:function(){for(var e=i.parser.native.createSVGMatrix(),t=_.length-1;t>=0;t--)e[_[t]]=this[_[t]];return e},toString:function(){return"matrix("+v(this.a)+","+v(this.b)+","+v(this.c)+","+v(this.d)+","+v(this.e)+","+v(this.f)+")"}},parent:i.Element,construct:{ctm:function(){return new i.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof i.Nested){var e=this.rect(1,1),t=e.node.getScreenCTM();return e.remove(),new i.Matrix(t)}return new i.Matrix(this.node.getScreenCTM())}}}),i.Point=i.invent({create:function(e,t){var i;i=Array.isArray(e)?{x:e[0],y:e[1]}:"object"===r(e)?{x:e.x,y:e.y}:null!=e?{x:e,y:null!=t?t:e}:{x:0,y:0},this.x=i.x,this.y=i.y},extend:{clone:function(){return new i.Point(this)},morph:function(e,t){return this.destination=new i.Point(e,t),this}}}),i.extend(i.Element,{point:function(e,t){return new i.Point(e,t).transform(this.screenCTM().inverse())}}),i.extend(i.Element,{attr:function(e,t,n){if(null==e){for(e={},n=(t=this.node.attributes).length-1;n>=0;n--)e[t[n].nodeName]=i.regex.isNumber.test(t[n].nodeValue)?parseFloat(t[n].nodeValue):t[n].nodeValue;return e}if("object"===r(e))for(var o in e)this.attr(o,e[o]);else if(null===t)this.node.removeAttribute(e);else{if(null==t)return null==(t=this.node.getAttribute(e))?i.defaults.attrs[e]:i.regex.isNumber.test(t)?parseFloat(t):t;"stroke-width"==e?this.attr("stroke",parseFloat(t)>0?this._stroke:null):"stroke"==e&&(this._stroke=t),"fill"!=e&&"stroke"!=e||(i.regex.isImage.test(t)&&(t=this.doc().defs().image(t,0,0)),t instanceof i.Image&&(t=this.doc().defs().pattern(0,0,(function(){this.add(t)})))),"number"==typeof t?t=new i.Number(t):i.Color.isColor(t)?t=new i.Color(t):Array.isArray(t)&&(t=new i.Array(t)),"leading"==e?this.leading&&this.leading(t):"string"==typeof n?this.node.setAttributeNS(n,e,t.toString()):this.node.setAttribute(e,t.toString()),!this.rebuild||"font-size"!=e&&"x"!=e||this.rebuild(e,t)}return this}}),i.extend(i.Element,{transform:function(e,t){var n;return"object"!==r(e)?(n=new i.Matrix(this).extract(),"string"==typeof e?n[e]:n):(n=new i.Matrix(this),t=!!t||!!e.relative,null!=e.a&&(n=t?n.multiply(new i.Matrix(e)):new i.Matrix(e)),this.attr("transform",n))}}),i.extend(i.Element,{untransform:function(){return this.attr("transform",null)},matrixify:function(){return(this.attr("transform")||"").split(i.regex.transforms).slice(0,-1).map((function(e){var t=e.trim().split("(");return[t[0],t[1].split(i.regex.delimiter).map((function(e){return parseFloat(e)}))]})).reduce((function(e,t){return"matrix"==t[0]?e.multiply(f(t[1])):e[t[0]].apply(e,t[1])}),new i.Matrix)},toParent:function(e){if(this==e)return this;var t=this.screenCTM(),i=e.screenCTM().inverse();return this.addTo(e).untransform().transform(i.multiply(t)),this},toDoc:function(){return this.toParent(this.doc())}}),i.Transformation=i.invent({create:function(e,t){if(arguments.length>1&&"boolean"!=typeof t)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(e))for(var i=0,n=this.arguments.length;i=0},index:function(e){return[].slice.call(this.node.childNodes).indexOf(e.node)},get:function(e){return i.adopt(this.node.childNodes[e])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(e,t){for(var n=this.children(),o=0,s=n.length;o=0;n--)t.childNodes[n]instanceof e.SVGElement&&m(t.childNodes[n]);return i.adopt(t).id(i.eid(t.nodeName))}function v(e){return Math.abs(e)>1e-37?e:0}["fill","stroke"].forEach((function(e){var t={};t[e]=function(t){if(void 0===t)return this;if("string"==typeof t||i.Color.isRgb(t)||t&&"function"==typeof t.fill)this.attr(e,t);else for(var n=l[e].length-1;n>=0;n--)null!=t[l[e][n]]&&this.attr(l.prefix(e,l[e][n]),t[l[e][n]]);return this},i.extend(i.Element,i.FX,t)})),i.extend(i.Element,i.FX,{translate:function(e,t){return this.transform({x:e,y:t})},matrix:function(e){return this.attr("transform",new i.Matrix(6==arguments.length?[].slice.call(arguments):e))},opacity:function(e){return this.attr("opacity",e)},dx:function(e){return this.x(new i.Number(e).plus(this instanceof i.FX?0:this.x()),!0)},dy:function(e){return this.y(new i.Number(e).plus(this instanceof i.FX?0:this.y()),!0)}}),i.extend(i.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(e){return this.node.getPointAtLength(e)}}),i.Set=i.invent({create:function(e){Array.isArray(e)?this.members=e:this.clear()},extend:{add:function(){for(var e=[].slice.call(arguments),t=0,i=e.length;t-1&&this.members.splice(t,1),this},each:function(e){for(var t=0,i=this.members.length;t=0},index:function(e){return this.members.indexOf(e)},get:function(e){return this.members[e]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(e){return new i.Set(e)}}}),i.FX.Set=i.invent({create:function(e){this.set=e}}),i.Set.inherit=function(){var e=[];for(var t in i.Shape.prototype)"function"==typeof i.Shape.prototype[t]&&"function"!=typeof i.Set.prototype[t]&&e.push(t);for(var t in e.forEach((function(e){i.Set.prototype[e]=function(){for(var t=0,n=this.members.length;t=0;e--)delete this.memory()[arguments[e]];return this},memory:function(){return this._memory||(this._memory={})}}),i.get=function(e){var n=t.getElementById(function(e){var t=(e||"").toString().match(i.regex.reference);if(t)return t[1]}(e)||e);return i.adopt(n)},i.select=function(e,n){return new i.Set(i.utils.map((n||t).querySelectorAll(e),(function(e){return i.adopt(e)})))},i.extend(i.Parent,{select:function(e){return i.select(e,this.node)}});var _="abcdef".split("");if("function"!=typeof e.CustomEvent){var b=function(e,i){i=i||{bubbles:!1,cancelable:!1,detail:void 0};var n=t.createEvent("CustomEvent");return n.initCustomEvent(e,i.bubbles,i.cancelable,i.detail),n};b.prototype=e.Event.prototype,i.CustomEvent=b}else i.CustomEvent=e.CustomEvent;return i},n=function(){return Fe(Oe,Oe.document)}.call(t,i,t,e),void 0!==n&&(e.exports=n), -/*! 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(e,t){return this.add(e,t),!e.attr("in")&&this.autoSetIn&&e.attr("in",this.source),e.attr("result")||e.attr("result",e),e},blend:function(e,t,i){return this.put(new SVG.BlendEffect(e,t,i))},colorMatrix:function(e,t){return this.put(new SVG.ColorMatrixEffect(e,t))},convolveMatrix:function(e){return this.put(new SVG.ConvolveMatrixEffect(e))},componentTransfer:function(e){return this.put(new SVG.ComponentTransferEffect(e))},composite:function(e,t,i){return this.put(new SVG.CompositeEffect(e,t,i))},flood:function(e,t){return this.put(new SVG.FloodEffect(e,t))},offset:function(e,t){return this.put(new SVG.OffsetEffect(e,t))},image:function(e){return this.put(new SVG.ImageEffect(e))},merge:function(){var e=[void 0];for(var t in arguments)e.push(arguments[t]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,e)))},gaussianBlur:function(e,t){return this.put(new SVG.GaussianBlurEffect(e,t))},morphology:function(e,t){return this.put(new SVG.MorphologyEffect(e,t))},diffuseLighting:function(e,t,i){return this.put(new SVG.DiffuseLightingEffect(e,t,i))},displacementMap:function(e,t,i,n,o){return this.put(new SVG.DisplacementMapEffect(e,t,i,n,o))},specularLighting:function(e,t,i,n){return this.put(new SVG.SpecularLightingEffect(e,t,i,n))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(e,t,i,n,o){return this.put(new SVG.TurbulenceEffect(e,t,i,n,o))},toString:function(){return"url(#"+this.attr("id")+")"}}}),SVG.extend(SVG.Defs,{filter:function(e){var t=this.put(new SVG.Filter);return"function"==typeof e&&e.call(t,t),t}}),SVG.extend(SVG.Container,{filter:function(e){return this.defs().filter(e)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(e){return this.filterer=e instanceof SVG.Element?e:this.doc().filter(e),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr("filter",this.filterer),this.filterer},unfilter:function(e){return this.filterer&&!0===e&&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(e){return null==e?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",e)},result:function(e){return null==e?this.attr("result"):this.attr("result",e)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(e){return null==e?this.parent()&&this.parent().select('[result="'+this.attr("in")+'"]').get(0)||this.attr("in"):this.attr("in",e)},result:function(e){return null==e?this.attr("result"):this.attr("result",e)},toString:function(){return this.result()}}});var e={blend:function(e,t){return this.parent()&&this.parent().blend(this,e,t)},colorMatrix:function(e,t){return this.parent()&&this.parent().colorMatrix(e,t).in(this)},convolveMatrix:function(e){return this.parent()&&this.parent().convolveMatrix(e).in(this)},componentTransfer:function(e){return this.parent()&&this.parent().componentTransfer(e).in(this)},composite:function(e,t){return this.parent()&&this.parent().composite(this,e,t)},flood:function(e,t){return this.parent()&&this.parent().flood(e,t)},offset:function(e,t){return this.parent()&&this.parent().offset(e,t).in(this)},image:function(e){return this.parent()&&this.parent().image(e)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(e,t){return this.parent()&&this.parent().gaussianBlur(e,t).in(this)},morphology:function(e,t){return this.parent()&&this.parent().morphology(e,t).in(this)},diffuseLighting:function(e,t,i){return this.parent()&&this.parent().diffuseLighting(e,t,i).in(this)},displacementMap:function(e,t,i,n){return this.parent()&&this.parent().displacementMap(this,e,t,i,n)},specularLighting:function(e,t,i,n){return this.parent()&&this.parent().specularLighting(e,t,i,n).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(e,t,i,n,o){return this.parent()&&this.parent().turbulence(e,t,i,n,o).in(this)}};SVG.extend(SVG.Effect,e),SVG.extend(SVG.ParentEffect,e),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(e){this.attr("in",e)}}});var t={blend:function(e,t,i){this.attr({in:e,in2:t,mode:i||"normal"})},colorMatrix:function(e,t){"matrix"==e&&(t=o(t)),this.attr({type:e,values:void 0===t?null:t})},convolveMatrix:function(e){e=o(e),this.attr({order:Math.sqrt(e.split(" ").length),kernelMatrix:e})},composite:function(e,t,i){this.attr({in:e,in2:t,operator:i})},flood:function(e,t){this.attr("flood-color",e),null!=t&&this.attr("flood-opacity",t)},offset:function(e,t){this.attr({dx:e,dy:t})},image:function(e){this.attr("href",e,SVG.xlink)},displacementMap:function(e,t,i,n,o){this.attr({in:e,in2:t,scale:i,xChannelSelector:n,yChannelSelector:o})},gaussianBlur:function(e,t){null!=e||null!=t?this.attr("stdDeviation",function(e){if(!Array.isArray(e))return e;for(var t=0,i=e.length,n=[];t1&&(N*=n=Math.sqrt(n),D*=n),o=(new SVG.Matrix).rotate(T).scale(1/N,1/D).rotate(-T),P=P.transform(o),O=O.transform(o),s=[O.x-P.x,O.y-P.y],a=s[0]*s[0]+s[1]*s[1],r=Math.sqrt(a),s[0]/=r,s[1]/=r,l=a<4?Math.sqrt(1-a/4):0,A===I&&(l*=-1),c=new SVG.Point((O.x+P.x)/2+l*-s[1],(O.y+P.y)/2+l*s[0]),d=new SVG.Point(P.x-c.x,P.y-c.y),u=new SVG.Point(O.x-c.x,O.y-c.y),h=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(h*=-1),g=Math.acos(u.x/Math.sqrt(u.x*u.x+u.y*u.y)),u.y<0&&(g*=-1),I&&h>g&&(g+=2*Math.PI),!I&&hs.maxX-t.width&&(r=(n=s.maxX-t.width)-this.startPoints.box.x),null!=s.minY&&os.maxY-t.height&&(a=(o=s.maxY-t.height)-this.startPoints.box.y),null!=s.snapToGrid&&(n-=n%s.snapToGrid,o-=o%s.snapToGrid,r-=r%s.snapToGrid,a-=a%s.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:r,y:a},!0):this.el.move(n,o));return i},e.prototype.end=function(e){var t=this.drag(e);this.el.fire("dragend",{event:e,p:t,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(t,i){"function"!=typeof t&&"object"!=typeof t||(i=t,t=!0);var n=this.remember("_draggable")||new e(this);return(t=void 0===t||t)?n.init(i||{},t):(this.off("mousedown.drag"),this.off("touchstart.drag")),this}})}.call(void 0),function(){function e(e){this.el=e,e.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(e,t,i){var n="string"!=typeof e?e:t[e];return i?n/2:n},this.pointCoords=function(e,t){var i=this.pointsList[e];return{x:this.pointCoord(i[0],t,"t"===e||"b"===e),y:this.pointCoord(i[1],t,"r"===e||"l"===e)}}}e.prototype.init=function(e,t){var i=this.el.bbox();this.options={};var n=this.el.selectize.defaults.points;for(var o in this.el.selectize.defaults)this.options[o]=this.el.selectize.defaults[o],void 0!==t[o]&&(this.options[o]=t[o]);var s=["points","pointsExclude"];for(var o in s){var r=this.options[s[o]];"string"==typeof r?r=r.length>0?r.split(/\s*,\s*/i):[]:"boolean"==typeof r&&"points"===s[o]&&(r=r?n:[]),this.options[s[o]]=r}this.options.points=[n,this.options.points].reduce((function(e,t){return e.filter((function(e){return t.indexOf(e)>-1}))})),this.options.points=[this.options.points,this.options.pointsExclude].reduce((function(e,t){return e.filter((function(e){return t.indexOf(e)<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(e):this.selectRect(e),this.observe(),this.cleanup()},e.prototype.selectPoints=function(e){return this.pointSelection.isSelected=e,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},e.prototype.getPointArray=function(){var e=this.el.bbox();return this.el.array().valueOf().map((function(t){return[t[0]-e.x,t[1]-e.y]}))},e.prototype.drawPoints=function(){for(var e=this,t=this.getPointArray(),i=0,n=t.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(e,t){var i=this.snapToGrid(e,t,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(e,t){var i=this.snapToGrid(e,t,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(e,t){var i=this.snapToGrid(e,t,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(e,t){var i=this.snapToGrid(e,t,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(e,t){var i=this.snapToGrid(e,t,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(e,t){var i=this.snapToGrid(e,t,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(e,t){var i=this.snapToGrid(e,t,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(e,t){var i=e+this.parameters.p.x,n=t+this.parameters.p.y,o=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),s=Math.atan2(n-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2),r=this.parameters.rotation+180*(s-o)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(r-r%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case"point":this.calc=function(e,t){var i=this.snapToGrid(e,t,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),n=this.el.array().valueOf();n[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],n[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(n)}}this.el.fire("resizestart",{dx:this.parameters.x,dy:this.parameters.y,event:e}),SVG.on(window,"touchmove.resize",(function(e){t.update(e||window.event)})),SVG.on(window,"touchend.resize",(function(){t.done()})),SVG.on(window,"mousemove.resize",(function(e){t.update(e||window.event)})),SVG.on(window,"mouseup.resize",(function(){t.done()}))},e.prototype.update=function(e){if(e){var t=this._extractPosition(e),i=this.transformPoint(t.x,t.y),n=i.x-this.parameters.p.x,o=i.y-this.parameters.p.y;this.lastUpdateCall=[n,o],this.calc(n,o),this.el.fire("resizing",{dx:n,dy:o,event:e})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},e.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")},e.prototype.snapToGrid=function(e,t,i,n){var o;return void 0!==n?o=[(i+e)%this.options.snapToGrid,(n+t)%this.options.snapToGrid]:(i=null==i?3:i,o=[(this.parameters.box.x+e+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+t+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),e<0&&(o[0]-=this.options.snapToGrid),t<0&&(o[1]-=this.options.snapToGrid),e-=Math.abs(o[0])r.maxX&&(e=r.maxX-o),void 0!==r.minY&&s+tr.maxY&&(t=r.maxY-s),[e,t]},e.prototype.checkAspectRatio=function(e,t){if(!this.options.saveAspectRatio)return e;var i=e.slice(),n=this.parameters.box.width/this.parameters.box.height,o=this.parameters.box.width+e[0],s=this.parameters.box.height-e[1],r=o/s;return rn&&(i[0]=this.parameters.box.width-s*n,t&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(t){return(this.remember("_resizeHandler")||new e(this)).init(t||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}(),void 0===window.Apex&&(window.Apex={});var Ue=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"initModules",value:function(){this.ctx.publicMethods=["updateOptions","updateSeries","appendData","appendSeries","toggleSeries","showSeries","hideSeries","setLocale","resetSeries","zoomX","toggleDataPointSelection","dataURI","exportToCSV","addXaxisAnnotation","addYaxisAnnotation","addPointAnnotation","clearAnnotations","removeAnnotation","paper","destroy"],this.ctx.eventList=["click","mousedown","mousemove","mouseleave","touchstart","touchmove","touchleave","mouseup","touchend"],this.ctx.animations=new w(this.ctx),this.ctx.axes=new te(this.ctx),this.ctx.core=new Ve(this.ctx.el,this.ctx),this.ctx.config=new F({}),this.ctx.data=new $(this.ctx),this.ctx.grid=new Y(this.ctx),this.ctx.graphics=new C(this.ctx),this.ctx.coreUtils=new S(this.ctx),this.ctx.crosshairs=new ie(this.ctx),this.ctx.events=new J(this.ctx),this.ctx.exports=new K(this.ctx),this.ctx.localization=new ee(this.ctx),this.ctx.options=new T,this.ctx.responsive=new ne(this.ctx),this.ctx.series=new q(this.ctx),this.ctx.theme=new oe(this.ctx),this.ctx.formatters=new R(this.ctx),this.ctx.titleSubtitle=new se(this.ctx),this.ctx.legend=new he(this.ctx),this.ctx.toolbar=new ge(this.ctx),this.ctx.tooltip=new we(this.ctx),this.ctx.dimensions=new de(this.ctx),this.ctx.updateHelpers=new ze(this.ctx),this.ctx.zoomPanSelection=new pe(this.ctx),this.ctx.w.globals.tooltip=new we(this.ctx)}}]),e}(),qe=function(){function e(t){a(this,e),this.ctx=t,this.w=t.w}return c(e,[{key:"clear",value:function(e){var t=e.isUpdating;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({isUpdating:t})}},{key:"killSVG",value:function(e){e.each((function(e,t){this.removeClass("*"),this.off(),this.stop()}),!0),e.ungroup(),e.clear()}},{key:"clearDomElements",value:function(e){var t=this,i=e.isUpdating,n=this.w.globals.dom.Paper.node;n.parentNode&&n.parentNode.parentNode&&!i&&(n.parentNode.parentNode.style.minHeight="unset");var o=this.w.globals.dom.baseEl;o&&this.ctx.eventList.forEach((function(e){o.removeEventListener(e,t.ctx.events.documentEvent)}));var s=this.w.globals.dom;if(null!==this.ctx.el)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(s.Paper),s.Paper.remove(),s.elWrap=null,s.elGraphical=null,s.elLegendWrap=null,s.elLegendForeign=null,s.baseEl=null,s.elGridRect=null,s.elGridRectMask=null,s.elGridRectMarkerMask=null,s.elForecastMask=null,s.elNonForecastMask=null,s.elDefs=null}}]),e}(),$e=new WeakMap,je=function(){function e(t,i){a(this,e),this.opts=i,this.ctx=this,this.w=new H(i).init(),this.el=t,this.w.globals.cuid=y.randomId(),this.w.globals.chartID=this.w.config.chart.id?y.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Ue(this).initModules(),this.create=y.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return c(e,[{key:"render",value:function(){var e=this;return new Promise((function(t,i){if(null!==e.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),e.w.config.chart.id&&Apex._chartInstances.push({id:e.w.globals.chartID,group:e.w.config.chart.group,chart:e}),e.setLocale(e.w.config.chart.defaultLocale);var n=e.w.config.chart.events.beforeMount;if("function"==typeof n&&n(e,e.w),e.events.fireEvent("beforeMount",[e,e.w]),window.addEventListener("resize",e.windowResizeHandler),function(e,t){var i=!1;if(e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var n=e.getBoundingClientRect();"none"!==e.style.display&&0!==n.width||(i=!0)}var o=new ResizeObserver((function(n){i&&t.call(e,n),i=!0}));e.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(e.children).forEach((function(e){return o.observe(e)})):o.observe(e),$e.set(t,o)}(e.el.parentNode,e.parentResizeHandler),!e.css){var o=e.el.getRootNode&&e.el.getRootNode(),s=y.is("ShadowRoot",o),r=e.el.ownerDocument,a=r.getElementById("apexcharts-css");!s&&a||(e.css=document.createElement("style"),e.css.id="apexcharts-css",e.css.textContent='@keyframes opaque {\n 0% {\n opacity: 0\n }\n\n to {\n opacity: 1\n }\n}\n\n@keyframes resizeanim {\n 0%,to {\n opacity: 0\n }\n}\n\n.apexcharts-canvas {\n position: relative;\n user-select: none\n}\n\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-inner {\n position: relative\n}\n\n.apexcharts-text tspan {\n font-family: inherit\n}\n\n.legend-mouseover-inactive {\n transition: .15s ease all;\n opacity: .2\n}\n\n.apexcharts-legend-text {\n padding-left: 15px;\n margin-left: -15px;\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 display: flex;\n flex-direction: column;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: .15s ease all\n}\n\n.apexcharts-tooltip.apexcharts-active {\n opacity: 1;\n transition: .15s ease all\n}\n\n.apexcharts-tooltip.apexcharts-theme-light {\n border: 1px solid #e3e3e3;\n background: rgba(255,255,255,.96)\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark {\n color: #fff;\n background: rgba(30,30,30,.8)\n}\n\n.apexcharts-tooltip * {\n font-family: inherit\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,.7);\n border-bottom: 1px solid #333\n}\n\n.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value {\n display: inline-block;\n margin-left: 5px;\n font-weight: 600\n}\n\n.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty {\n display: none\n}\n\n.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\n padding: 6px 0 5px\n}\n\n.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\n display: flex\n}\n\n.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty) {\n margin-top: -6px\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0;\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,.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-custom-tooltip,.apexcharts-tooltip-box {\n padding: 4px 8px\n}\n\n.apexcharts-tooltip-boxPlot {\n display: flex;\n flex-direction: column-reverse\n}\n\n.apexcharts-tooltip-box>div {\n margin: 4px 0\n}\n\n.apexcharts-tooltip-box span.value {\n font-weight: 700\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: 700;\n display: block;\n margin-bottom: 5px\n}\n\n.apexcharts-xaxistooltip,.apexcharts-yaxistooltip {\n opacity: 0;\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-xaxistooltip {\n padding: 9px 10px;\n transition: .15s ease all\n}\n\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\n background: rgba(0,0,0,.7);\n border: 1px solid rgba(0,0,0,.5);\n color: #fff\n}\n\n.apexcharts-xaxistooltip:after,.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: transparent;\n border-width: 6px;\n margin-left: -6px\n}\n\n.apexcharts-xaxistooltip:before {\n border-color: transparent;\n border-width: 7px;\n margin-left: -7px\n}\n\n.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before {\n bottom: 100%\n}\n\n.apexcharts-xaxistooltip-top:after,.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,.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\n border-bottom-color: rgba(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,.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\n border-top-color: rgba(0,0,0,.5)\n}\n\n.apexcharts-xaxistooltip.apexcharts-active {\n opacity: 1;\n transition: .15s ease all\n}\n\n.apexcharts-yaxistooltip {\n padding: 4px 10px\n}\n\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\n background: rgba(0,0,0,.7);\n border: 1px solid rgba(0,0,0,.5);\n color: #fff\n}\n\n.apexcharts-yaxistooltip:after,.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: transparent;\n border-width: 6px;\n margin-top: -6px\n}\n\n.apexcharts-yaxistooltip:before {\n border-color: transparent;\n border-width: 7px;\n margin-top: -7px\n}\n\n.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before {\n left: 100%\n}\n\n.apexcharts-yaxistooltip-right:after,.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,.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\n border-left-color: rgba(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,.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\n border-right-color: rgba(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,.apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: .15s ease all\n}\n\n.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active {\n opacity: 1;\n transition: .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\n.apexcharts-selection-rect+g .svg_select_boundingRect,.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,.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-svg.apexcharts-zoomable.hovering-zoom {\n cursor: crosshair\n}\n\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\n cursor: move\n}\n\n.apexcharts-menu-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-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-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg {\n fill: #6e8192\n}\n\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(.76)\n}\n\n.apexcharts-theme-dark .apexcharts-menu-icon svg,.apexcharts-theme-dark .apexcharts-pan-icon svg,.apexcharts-theme-dark .apexcharts-reset-icon svg,.apexcharts-theme-dark .apexcharts-selection-icon svg,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg,.apexcharts-theme-dark .apexcharts-zoom-icon svg,.apexcharts-theme-dark .apexcharts-zoomin-icon svg,.apexcharts-theme-dark .apexcharts-zoomout-icon svg {\n fill: #f3f4f5\n}\n\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg {\n fill: #008ffb\n}\n\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg,.apexcharts-theme-light .apexcharts-reset-icon:hover svg,.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 {\n fill: #333\n}\n\n.apexcharts-menu-icon,.apexcharts-selection-icon {\n position: relative\n}\n\n.apexcharts-reset-icon {\n margin-left: 5px\n}\n\n.apexcharts-menu-icon,.apexcharts-reset-icon,.apexcharts-zoom-icon {\n transform: scale(.85)\n}\n\n.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\n transform: scale(.7)\n}\n\n.apexcharts-zoomout-icon {\n margin-right: 3px\n}\n\n.apexcharts-pan-icon {\n transform: scale(.62);\n position: relative;\n left: 1px;\n top: 0\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: 0 6px 2px;\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: .15s ease all;\n pointer-events: none\n}\n\n.apexcharts-menu.apexcharts-menu-open {\n opacity: 1;\n pointer-events: all;\n transition: .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,.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-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points {\n opacity: 0\n}\n\n.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label {\n cursor: default;\n pointer-events: none\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: .3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease\n}\n\n.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-gridline,.apexcharts-line,.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-point-annotation-label,.apexcharts-radar-series path,.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect {\n pointer-events: none\n}\n\n.apexcharts-marker {\n transition: .15s ease all\n}\n\n.resize-triggers {\n animation: 1ms resizeanim;\n visibility: hidden;\n opacity: 0;\n height: 100%;\n width: 100%;\n overflow: hidden\n}\n\n.contract-trigger:before,.resize-triggers,.resize-triggers>div {\n content: " ";\n display: block;\n position: absolute;\n top: 0;\n left: 0\n}\n\n.resize-triggers>div {\n height: 100%;\n width: 100%;\n background: #eee;\n overflow: auto\n}\n\n.contract-trigger:before {\n overflow: hidden;\n width: 200%;\n height: 200%\n}\n',s?o.prepend(e.css):r.head.appendChild(e.css))}var l=e.create(e.w.config.series,{});if(!l)return t(e);e.mount(l).then((function(){"function"==typeof e.w.config.chart.events.mounted&&e.w.config.chart.events.mounted(e,e.w),e.events.fireEvent("mounted",[e,e.w]),t(l)})).catch((function(e){i(e)}))}else i(new Error("Element not found"))}))}},{key:"create",value:function(e,t){var i=this.w;new Ue(this).initModules();var n=this.w.globals;if(n.noData=!1,n.animationEnded=!1,this.responsive.checkResponsiveConfig(t),i.config.xaxis.convertedCatToNumeric&&new O(i.config).convertCatToNumericXaxis(i.config,this.ctx),null===this.el)return n.animationEnded=!0,null;if(this.core.setupElements(),"treemap"===i.config.chart.type&&(i.config.grid.show=!1,i.config.yaxis[0].show=!1),0===n.svgWidth)return n.animationEnded=!0,null;var o=S.checkComboSeries(e);n.comboCharts=o.comboCharts,n.comboBarCount=o.comboBarCount;var s=e.every((function(e){return e.data&&0===e.data.length}));(0===e.length||s)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(e),this.theme.init(),new V(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),n.noData&&n.collapsedSeries.length!==n.series.length&&!i.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),n.axisCharts&&(this.core.coreCalculations(),"category"!==i.config.xaxis.type&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=i.globals.minX,this.ctx.toolbar.maxX=i.globals.maxX),this.formatters.heatmapLabelFormatters(),new S(this).getLargestMarkerSize(),this.dimensions.plotCoords();var r=this.core.xySettings();this.grid.createGridMask();var a=this.core.plotChartType(e,r),l=new U(this);return l.bringForward(),i.config.dataLabels.background.enabled&&l.dataLabelsBackground(),this.core.shiftGraphPosition(),{elGraph:a,xyRatios:r,dimensions:{plot:{left:i.globals.translateX,top:i.globals.translateY,width:i.globals.gridWidth,height:i.globals.gridHeight}}}}},{key:"mount",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=this,n=i.w;return new Promise((function(o,s){if(null===i.el)return s(new Error("Not enough data to display or target element not found"));(null===t||n.globals.allSeriesCollapsed)&&i.series.handleNoData(),i.grid=new Y(i);var r=i.grid.drawGrid();if(i.annotations=new A(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),"back"===n.config.grid.position&&r&&n.globals.dom.elGraphical.add(r.el),Array.isArray(t.elGraph))for(var a=0;a0&&n.globals.memory.methodsToExec.forEach((function(e){e.method(e.params,!1,e.context)})),n.globals.axisCharts||n.globals.noData||i.core.resizeNonAxisCharts(),o(i)}))}},{key:"destroy",value:function(){var e,t;window.removeEventListener("resize",this.windowResizeHandler),this.el.parentNode,e=this.parentResizeHandler,(t=$e.get(e))&&(t.disconnect(),$e.delete(e));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach((function(e,t){e.id===y.escapeString(i)&&Apex._chartInstances.splice(t,1)})),new qe(this.ctx).clear({isUpdating:!1})}},{key:"updateOptions",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=this.w;return r.globals.selection=void 0,e.series&&(this.series.resetSeries(!1,!0,!1),e.series.length&&e.series[0].data&&(e.series=e.series.map((function(e,i){return t.updateHelpers._extendSeries(e,i)}))),this.updateHelpers.revertDefaultAxisMinMax()),e.xaxis&&(e=this.updateHelpers.forceXAxisUpdate(e)),e.yaxis&&(e=this.updateHelpers.forceYAxisUpdate(e)),r.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),e.theme&&(e=this.theme.updateThemeOptions(e)),this.updateHelpers._updateOptions(e,i,n,o,s)}},{key:"updateSeries",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=!(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(e,t,i)}},{key:"appendSeries",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=this.w.config.series.slice();return n.push(e),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(n,t,i)}},{key:"appendData",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var n=i.w.config.series.slice(),o=0;o0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.series.resetSeries(e,t)}},{key:"addEventListener",value:function(e,t){this.events.addEventListener(e,t)}},{key:"removeEventListener",value:function(e,t){this.events.removeEventListener(e,t)}},{key:"addXaxisAnnotation",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=this;i&&(n=i),n.annotations.addXaxisAnnotationExternal(e,t,n)}},{key:"addYaxisAnnotation",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=this;i&&(n=i),n.annotations.addYaxisAnnotationExternal(e,t,n)}},{key:"addPointAnnotation",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=this;i&&(n=i),n.annotations.addPointAnnotationExternal(e,t,n)}},{key:"clearAnnotations",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=this;e&&(t=e),t.annotations.clearAnnotations(t)}},{key:"removeAnnotation",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this;t&&(i=t),i.annotations.removeAnnotation(i,e)}},{key:"getChartArea",value:function(){return this.w.globals.dom.baseEl.querySelector(".apexcharts-inner")}},{key:"getSeriesTotalXRange",value:function(e,t){return this.coreUtils.getSeriesTotalsXRange(e,t)}},{key:"getHighestValueInSeries",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Z(this.ctx).getMinYMaxY(e).highestY}},{key:"getLowestValueInSeries",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Z(this.ctx).getMinYMaxY(e).lowestY}},{key:"getSeriesTotal",value:function(){return this.w.globals.seriesTotals}},{key:"toggleDataPointSelection",value:function(e,t){return this.updateHelpers.toggleDataPointSelection(e,t)}},{key:"zoomX",value:function(e,t){this.ctx.toolbar.zoomUpdateOptions(e,t)}},{key:"setLocale",value:function(e){this.localization.setCurrentLocaleValues(e)}},{key:"dataURI",value:function(e){return new K(this.ctx).dataURI(e)}},{key:"exportToCSV",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new K(this.ctx).exportToCSV(e)}},{key:"paper",value:function(){return this.w.globals.dom.Paper}},{key:"_parentResizeCallback",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:"_windowResize",value:function(){var e=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout((function(){e.w.globals.resized=!0,e.w.globals.dataChanged=!1,e.ctx.update()}),150)}},{key:"_windowResizeHandler",value:function(){var e=this.w.config.chart.redrawOnWindowResize;"function"==typeof e&&(e=e()),e&&this._windowResize()}}],[{key:"getChartByID",value:function(e){var t=y.escapeString(e),i=Apex._chartInstances.filter((function(e){return e.id===t}))[0];return i&&i.chart}},{key:"initOnLoad",value:function(){for(var t=document.querySelectorAll("[data-apexcharts]"),i=0;i2?o-2:0),r=2;r{"use strict";i.d(t,{Z:()=>d});var n=i(46264),o=i.n(n),s=i(59835),r=i(22857),a=i(20244),l=i(65987),c=i(22026);const d=(0,l.L)({name:"QAvatar",props:o()(o()({},a.LU),{},{fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean}),setup:function(e,t){var i=t.slots,n=(0,a.ZP)(e),o=(0,s.Fl)((function(){return"q-avatar"+(e.color?" bg-".concat(e.color):"")+(e.textColor?" text-".concat(e.textColor," q-chip--colored"):"")+(!0===e.square?" q-avatar--square":!0===e.rounded?" rounded-borders":"")})),l=(0,s.Fl)((function(){return e.fontSize?{fontSize:e.fontSize}:null}));return function(){var t=void 0!==e.icon?[(0,s.h)(r.Z,{name:e.icon})]:void 0;return(0,s.h)("div",{class:o.value,style:n.value},[(0,s.h)("div",{class:"q-avatar__content row flex-center overflow-hidden",style:l.value},(0,c.pf)(i["default"],t))])}}})},20990:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});i(80676),i(46727);var n=i(59835),o=i(65987),s=i(22026),r=["top","middle","bottom"];const a=(0,o.L)({name:"QBadge",props:{color:String,textColor:String,floating:Boolean,transparent:Boolean,multiLine:Boolean,outline:Boolean,rounded:Boolean,label:[Number,String],align:{type:String,validator:function(e){return r.includes(e)}}},setup:function(e,t){var i=t.slots,o=(0,n.Fl)((function(){return void 0!==e.align?{verticalAlign:e.align}:null})),r=(0,n.Fl)((function(){var t=!0===e.outline&&e.color||e.textColor;return"q-badge flex inline items-center no-wrap"+" q-badge--".concat(!0===e.multiLine?"multi":"single","-line")+(!0===e.outline?" q-badge--outline":void 0!==e.color?" bg-".concat(e.color):"")+(void 0!==t?" text-".concat(t):"")+(!0===e.floating?" q-badge--floating":"")+(!0===e.rounded?" q-badge--rounded":"")+(!0===e.transparent?" q-badge--transparent":"")}));return function(){return(0,n.h)("div",{class:r.value,style:o.value,role:"status","aria-label":e.label},(0,s.vs)(i["default"],void 0!==e.label?[e.label]:[]))}}})},47128:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});var n=i(46264),o=i.n(n),s=(i(69665),i(59835)),r=i(65987),a=i(68234),l=i(22026);const c=(0,r.L)({name:"QBanner",props:o()(o()({},a.S),{},{inlineActions:Boolean,dense:Boolean,rounded:Boolean}),setup:function(e,t){var i=t.slots,n=(0,s.FN)(),o=n.proxy.$q,r=(0,a.Z)(e,o),c=(0,s.Fl)((function(){return"q-banner row items-center"+(!0===e.dense?" q-banner--dense":"")+(!0===r.value?" q-banner--dark q-dark":"")+(!0===e.rounded?" rounded-borders":"")})),d=(0,s.Fl)((function(){return"q-banner__actions row items-center justify-end"+" col-".concat(!0===e.inlineActions?"auto":"all")}));return function(){var t=[(0,s.h)("div",{class:"q-banner__avatar col-auto row items-center self-start"},(0,l.KR)(i.avatar)),(0,s.h)("div",{class:"q-banner__content col text-body2"},(0,l.KR)(i["default"]))],n=(0,l.KR)(i.action);return void 0!==n&&t.push((0,s.h)("div",{class:d.value},n)),(0,s.h)("div",{class:c.value+(!1===e.inlineActions&&void 0!==n?" q-banner--top-padding":""),role:"alert"},t)}}})},68879:(e,t,i)=>{"use strict";i.d(t,{Z:()=>y});var n=i(46264),o=i.n(n),s=(i(80676),i(93954),i(58665),i(69665),i(59835)),r=i(60499),a=i(61957),l=i(22857),c=i(13902),d=i(51136),u=i(36073),h=i(65987),g=i(22026),p=i(91384),f=i(61705),m=p.rU.passiveCapture,v=null,_=null,b=null;const y=(0,h.L)({name:"QBtn",props:o()(o()({},u.b7),{},{percentage:Number,darkPercentage:Boolean,onTouchstart:[Function,Array]}),emits:["click","keydown","mousedown","keyup"],setup:function(e,t){var i,n=t.slots,h=t.emit,y=(0,s.FN)(),w=y.proxy,x=(0,u.ZP)(e),C=x.classes,S=x.style,k=x.innerClasses,L=x.attributes,E=x.hasLink,N=x.linkTag,D=x.navigateOnClick,T=x.isActionable,A=(0,r.iH)(null),I=(0,r.iH)(null),R=null,M=null,P=(0,s.Fl)((function(){return void 0!==e.label&&null!==e.label&&""!==e.label})),O=(0,s.Fl)((function(){return!0!==e.disable&&!1!==e.ripple&&o()({keyCodes:!0===E.value?[13,32]:[13]},!0===e.ripple?{}:e.ripple)})),F=(0,s.Fl)((function(){return{center:e.round}})),B=(0,s.Fl)((function(){var t=Math.max(0,Math.min(100,e.percentage));return t>0?{transition:"transform 0.6s",transform:"translateX(".concat(t-100,"%)")}:{}})),H=(0,s.Fl)((function(){if(!0===e.loading)return{onMousedown:K,onTouchstart:K,onClick:K,onKeydown:K,onKeyup:K};if(!0===T.value){var t={onClick:V,onKeydown:z,onMousedown:q};if(!0===w.$q.platform.has.touch){var i=void 0!==e.onTouchstart?"":"Passive";t["onTouchstart".concat(i)]=U}return t}return{onClick:p.NS}})),W=(0,s.Fl)((function(){return o()(o()({ref:A,class:"q-btn q-btn-item non-selectable no-outline "+C.value,style:S.value},L.value),H.value)}));function V(t){if(null!==A.value){if(void 0!==t){if(!0===t.defaultPrevented)return;var i=document.activeElement;if("submit"===e.type&&i!==document.body&&!1===A.value.contains(i)&&!1===i.contains(A.value)){A.value.focus();var n=function e(){document.removeEventListener("keydown",p.NS,!0),document.removeEventListener("keyup",e,m),null!==A.value&&A.value.removeEventListener("blur",e,m)};document.addEventListener("keydown",p.NS,!0),document.addEventListener("keyup",n,m),A.value.addEventListener("blur",n,m)}}D(t)}}function z(e){null!==A.value&&(h("keydown",e),!0===(0,f.So)(e,[13,32])&&_!==A.value&&(null!==_&&j(),!0!==e.defaultPrevented&&(A.value.focus(),_=A.value,A.value.classList.add("q-btn--active"),document.addEventListener("keyup",$,!0),A.value.addEventListener("blur",$,m)),(0,p.NS)(e)))}function U(e){null!==A.value&&(h("touchstart",e),!0!==e.defaultPrevented&&(v!==A.value&&(null!==v&&j(),v=A.value,R=e.target,R.addEventListener("touchcancel",$,m),R.addEventListener("touchend",$,m)),i=!0,null!==M&&clearTimeout(M),M=setTimeout((function(){M=null,i=!1}),200)))}function q(e){null!==A.value&&(e.qSkipRipple=!0===i,h("mousedown",e),!0!==e.defaultPrevented&&b!==A.value&&(null!==b&&j(),b=A.value,A.value.classList.add("q-btn--active"),document.addEventListener("mouseup",$,m)))}function $(e){if(null!==A.value&&(void 0===e||"blur"!==e.type||document.activeElement!==A.value)){if(void 0!==e&&"keyup"===e.type){if(_===A.value&&!0===(0,f.So)(e,[13,32])){var t=new MouseEvent("click",e);t.qKeyEvent=!0,!0===e.defaultPrevented&&(0,p.X$)(t),!0===e.cancelBubble&&(0,p.sT)(t),A.value.dispatchEvent(t),(0,p.NS)(e),e.qKeyEvent=!0}h("keyup",e)}j()}}function j(e){var t=I.value;!0===e||v!==A.value&&b!==A.value||null===t||t===document.activeElement||(t.setAttribute("tabindex",-1),t.focus()),v===A.value&&(null!==R&&(R.removeEventListener("touchcancel",$,m),R.removeEventListener("touchend",$,m)),v=R=null),b===A.value&&(document.removeEventListener("mouseup",$,m),b=null),_===A.value&&(document.removeEventListener("keyup",$,!0),null!==A.value&&A.value.removeEventListener("blur",$,m),_=null),null!==A.value&&A.value.classList.remove("q-btn--active")}function K(e){(0,p.NS)(e),e.qSkipRipple=!0}return(0,s.Jd)((function(){j(!0)})),Object.assign(w,{click:V}),function(){var t=[];void 0!==e.icon&&t.push((0,s.h)(l.Z,{name:e.icon,left:!1===e.stack&&!0===P.value,role:"img","aria-hidden":"true"})),!0===P.value&&t.push((0,s.h)("span",{class:"block"},[e.label])),t=(0,g.vs)(n["default"],t),void 0!==e.iconRight&&!1===e.round&&t.push((0,s.h)(l.Z,{name:e.iconRight,right:!1===e.stack&&!0===P.value,role:"img","aria-hidden":"true"}));var i=[(0,s.h)("span",{class:"q-focus-helper",ref:I})];return!0===e.loading&&void 0!==e.percentage&&i.push((0,s.h)("span",{class:"q-btn__progress absolute-full overflow-hidden"+(!0===e.darkPercentage?" q-btn__progress--dark":"")},[(0,s.h)("span",{class:"q-btn__progress-indicator fit block",style:B.value})])),i.push((0,s.h)("span",{class:"q-btn__content text-center col items-center q-anchor--skip "+k.value},t)),null!==e.loading&&i.push((0,s.h)(a.uT,{name:"q-transition--fade"},(function(){return!0===e.loading?[(0,s.h)("span",{key:"loading",class:"absolute-full flex flex-center"},void 0!==n.loading?n.loading():[(0,s.h)(c.Z)])]:null}))),(0,s.wy)((0,s.h)(N.value,W.value,i),[[d.Z,O.value,void 0,F.value]])}}})},36073:(e,t,i)=>{"use strict";i.d(t,{V9:()=>g,ZP:()=>m,b7:()=>f,jA:()=>c,xG:()=>p});var n=i(46264),o=i.n(n),s=(i(38761),i(84839),i(45583),i(69665),i(80676),i(55067),i(65716),i(58665),i(91392),i(51393),i(11476),i(68280),i(46727),i(32119),i(52519),i(59835)),r=i(65065),a=i(20244),l=i(70945),c={none:0,xs:4,sm:8,md:16,lg:24,xl:32},d={xs:8,sm:10,md:14,lg:20,xl:24},u=["button","submit","reset"],h=/[^\s]\/[^\s]/,g=["flat","outline","push","unelevated"],p=function(e,t){return!0===e.flat?"flat":!0===e.outline?"outline":!0===e.push?"push":!0===e.unelevated?"unelevated":t},f=o()(o()(o()(o()({},a.LU),l.$),{},{type:{type:String,default:"button"},label:[Number,String],icon:String,iconRight:String},g.reduce((function(e,t){return(e[t]=Boolean)&&e}),{})),{},{square:Boolean,round:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],ripple:{type:[Boolean,Object],default:!0},align:o()(o()({},r.jO.align),{},{default:"center"}),stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean});function m(e){var t=(0,a.ZP)(e,d),i=(0,r.ZP)(e),n=(0,l.Z)({fallbackTag:"button"}),o=n.hasRouterLink,g=n.hasLink,f=n.linkTag,m=n.linkAttrs,v=n.navigateOnClick,_=(0,s.Fl)((function(){var i=!1===e.fab&&!1===e.fabMini?t.value:{};return void 0!==e.padding?Object.assign({},i,{padding:e.padding.split(/\s+/).map((function(e){return e in c?c[e]+"px":e})).join(" "),minWidth:"0",minHeight:"0"}):i})),b=(0,s.Fl)((function(){return!0===e.rounded||!0===e.fab||!0===e.fabMini})),y=(0,s.Fl)((function(){return!0!==e.disable&&!0!==e.loading})),w=(0,s.Fl)((function(){return!0===y.value?e.tabindex||0:-1})),x=(0,s.Fl)((function(){return p(e,"standard")})),C=(0,s.Fl)((function(){var t={tabindex:w.value};return!0===g.value?Object.assign(t,m.value):!0===u.includes(e.type)&&(t.type=e.type),"a"===f.value?(!0===e.disable?t["aria-disabled"]="true":void 0===t.href&&(t.role="button"),!0!==o.value&&!0===h.test(e.type)&&(t.type=e.type)):!0===e.disable&&(t.disabled="",t["aria-disabled"]="true"),!0===e.loading&&void 0!==e.percentage&&Object.assign(t,{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":e.percentage}),t})),S=(0,s.Fl)((function(){var t;void 0!==e.color?t=!0===e.flat||!0===e.outline?"text-".concat(e.textColor||e.color):"bg-".concat(e.color," text-").concat(e.textColor||"white"):e.textColor&&(t="text-".concat(e.textColor));var i=!0===e.round?"round":"rectangle".concat(!0===b.value?" q-btn--rounded":!0===e.square?" q-btn--square":"");return"q-btn--".concat(x.value," q-btn--").concat(i)+(void 0!==t?" "+t:"")+(!0===y.value?" q-btn--actionable q-focusable q-hoverable":!0===e.disable?" disabled":"")+(!0===e.fab?" q-btn--fab":!0===e.fabMini?" q-btn--fab-mini":"")+(!0===e.noCaps?" q-btn--no-uppercase":"")+(!0===e.dense?" q-btn--dense":"")+(!0===e.stretch?" no-border-radius self-stretch":"")+(!0===e.glossy?" glossy":"")+(e.square?" q-btn--square":"")})),k=(0,s.Fl)((function(){return i.value+(!0===e.stack?" column":" row")+(!0===e.noWrap?" no-wrap text-no-wrap":"")+(!0===e.loading?" q-btn__content--hidden":"")}));return{classes:S,style:_,innerClasses:k,attributes:C,hasLink:g,linkTag:f,navigateOnClick:v,isActionable:y}}},44458:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});var n=i(46264),o=i.n(n),s=(i(84839),i(45583),i(59835)),r=i(68234),a=i(65987),l=i(22026);const c=(0,a.L)({name:"QCard",props:o()(o()({},r.S),{},{tag:{type:String,default:"div"},square:Boolean,flat:Boolean,bordered:Boolean}),setup:function(e,t){var i=t.slots,n=(0,s.FN)(),o=n.proxy.$q,a=(0,r.Z)(e,o),c=(0,s.Fl)((function(){return"q-card"+(!0===a.value?" q-card--dark q-dark":"")+(!0===e.bordered?" q-card--bordered":"")+(!0===e.square?" q-card--square no-border-radius":"")+(!0===e.flat?" q-card--flat no-shadow":"")}));return function(){return(0,s.h)(e.tag,{class:c.value},(0,l.KR)(i["default"]))}}})},11821:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});var n=i(46264),o=i.n(n),s=i(59835),r=i(65065),a=i(65987),l=i(22026);const c=(0,a.L)({name:"QCardActions",props:o()(o()({},r.jO),{},{vertical:Boolean}),setup:function(e,t){var i=t.slots,n=(0,r.ZP)(e),o=(0,s.Fl)((function(){return"q-card__actions ".concat(n.value)+" q-card__actions--".concat(!0===e.vertical?"vert column":"horiz row")}));return function(){return(0,s.h)("div",{class:o.value},(0,l.KR)(i["default"]))}}})},63190:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});var n=i(59835),o=i(65987),s=i(22026);const r=(0,o.L)({name:"QCardSection",props:{tag:{type:String,default:"div"},horizontal:Boolean},setup:function(e,t){var i=t.slots,o=(0,n.Fl)((function(){return"q-card__section"+" q-card__section--".concat(!0===e.horizontal?"horiz row no-wrap":"vert")}));return function(){return(0,n.h)(e.tag,{class:o.value},(0,s.KR)(i["default"]))}}})},97052:(e,t,i)=>{"use strict";i.d(t,{Z:()=>b});var n=i(38761),o=i.n(n),s=i(50001),r=i.n(s),a=i(46264),l=i.n(a),c=(i(46727),i(80676),i(52519),i(79481),i(93954),i(51393),i(62590),i(69665),i(59835)),d=i(68879),u=i(68234),h=i(26120),g=i(93929),p=i(65987),f=i(4680),m=i(22026),v=["top","right","bottom","left"],_=["regular","flat","outline","push","unelevated"];const b=(0,p.L)({name:"QCarousel",props:l()(l()(l()(l()({},u.S),h.t6),g.kM),{},{transitionPrev:{type:String,default:"fade"},transitionNext:{type:String,default:"fade"},height:String,padding:Boolean,controlColor:String,controlTextColor:String,controlType:{type:String,validator:function(e){return _.includes(e)},default:"flat"},autoplay:[Number,Boolean],arrows:Boolean,prevIcon:String,nextIcon:String,navigation:Boolean,navigationPosition:{type:String,validator:function(e){return v.includes(e)}},navigationIcon:String,navigationActiveIcon:String,thumbnails:Boolean}),emits:[].concat(r()(g.fL),r()(h.K6)),setup:function(e,t){var i,n=t.slots,s=(0,c.FN)(),r=s.proxy.$q,a=(0,u.Z)(e,r),p=null,v=(0,h.ZP)(),_=v.updatePanelsList,b=v.getPanelContent,y=v.panelDirectives,w=v.goToPanel,x=v.previousPanel,C=v.nextPanel,S=v.getEnabledPanels,k=v.panelIndex,L=(0,g.ZP)(),E=L.inFullscreen,N=(0,c.Fl)((function(){return!0!==E.value&&void 0!==e.height?{height:e.height}:{}})),D=(0,c.Fl)((function(){return!0===e.vertical?"vertical":"horizontal"})),T=(0,c.Fl)((function(){return"q-carousel q-panel-parent q-carousel--with".concat(!0===e.padding?"":"out","-padding")+(!0===E.value?" fullscreen":"")+(!0===a.value?" q-carousel--dark q-dark":"")+(!0===e.arrows?" q-carousel--arrows-".concat(D.value):"")+(!0===e.navigation?" q-carousel--navigation-".concat(M.value):"")})),A=(0,c.Fl)((function(){var t=[e.prevIcon||r.iconSet.carousel[!0===e.vertical?"up":"left"],e.nextIcon||r.iconSet.carousel[!0===e.vertical?"down":"right"]];return!1===e.vertical&&!0===r.lang.rtl?t.reverse():t})),I=(0,c.Fl)((function(){return e.navigationIcon||r.iconSet.carousel.navigationIcon})),R=(0,c.Fl)((function(){return e.navigationActiveIcon||I.value})),M=(0,c.Fl)((function(){return e.navigationPosition||(!0===e.vertical?"right":"bottom")})),P=(0,c.Fl)((function(){var t;return t={color:e.controlColor,textColor:e.controlTextColor,round:!0},o()(t,e.controlType,!0),o()(t,"dense",!0),t}));function O(){var t=!0===(0,f.hj)(e.autoplay)?Math.abs(e.autoplay):5e3;null!==p&&clearTimeout(p),p=setTimeout((function(){p=null,t>=0?C():x()}),t)}function F(t,i){return(0,c.h)("div",{class:"q-carousel__control q-carousel__navigation no-wrap absolute flex"+" q-carousel__navigation--".concat(t," q-carousel__navigation--").concat(M.value)+(void 0!==e.controlColor?" text-".concat(e.controlColor):"")},[(0,c.h)("div",{class:"q-carousel__navigation-inner flex flex-center no-wrap"},S().map(i))])}function B(){var t=[];if(!0===e.navigation){var o=void 0!==n["navigation-icon"]?n["navigation-icon"]:function(e){return(0,c.h)(d.Z,l()(l()({key:"nav"+e.name,class:"q-carousel__navigation-icon q-carousel__navigation-icon--".concat(!0===e.active?"":"in","active")},e.btnProps),{},{onClick:e.onClick}))},s=i-1;t.push(F("buttons",(function(e,t){var i=e.props.name,n=k.value===t;return o({index:t,maxIndex:s,name:i,active:n,btnProps:l()({icon:!0===n?R.value:I.value,size:"sm"},P.value),onClick:function(){w(i)}})})))}else if(!0===e.thumbnails){var r=void 0!==e.controlColor?" text-".concat(e.controlColor):"";t.push(F("thumbnails",(function(t){var i=t.props;return(0,c.h)("img",{key:"tmb#"+i.name,class:"q-carousel__thumbnail q-carousel__thumbnail--".concat(i.name===e.modelValue?"":"in","active")+r,src:i.imgSrc||i["img-src"],onClick:function(){w(i.name)}})})))}return!0===e.arrows&&k.value>=0&&((!0===e.infinite||k.value>0)&&t.push((0,c.h)("div",{key:"prev",class:"q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--".concat(D.value," absolute flex flex-center")},[(0,c.h)(d.Z,l()(l()({icon:A.value[0]},P.value),{},{onClick:x}))])),(!0===e.infinite||k.value{"use strict";i.d(t,{Z:()=>l});var n=i(59835),o=i(22857),s=i(65987),r=i(71926),a=(0,n.h)("div",{key:"svg",class:"q-checkbox__bg absolute"},[(0,n.h)("svg",{class:"q-checkbox__svg fit absolute-full",viewBox:"0 0 24 24"},[(0,n.h)("path",{class:"q-checkbox__truthy",fill:"none",d:"M1.73,12.91 8.1,19.28 22.79,4.59"}),(0,n.h)("path",{class:"q-checkbox__indet",d:"M4,14H20V10H4"})])]);const l=(0,s.L)({name:"QCheckbox",props:r.Fz,emits:r.ZB,setup:function(e){function t(t,i){var s=(0,n.Fl)((function(){return(!0===t.value?e.checkedIcon:!0===i.value?e.indeterminateIcon:e.uncheckedIcon)||null}));return function(){return null!==s.value?[(0,n.h)("div",{key:"icon",class:"q-checkbox__icon-container absolute-full flex flex-center no-wrap"},[(0,n.h)(o.Z,{class:"q-checkbox__icon",name:s.value})])]:[a]}}return(0,r.ZP)("checkbox",t)}})},71926:(e,t,i)=>{"use strict";i.d(t,{Fz:()=>p,ZB:()=>f,ZP:()=>m});var n=i(46264),o=i.n(n),s=(i(80676),i(85711),i(88554),i(52519),i(62590),i(58665),i(60893),i(32455),i(69665),i(59835)),r=i(60499),a=i(68234),l=i(20244),c=i(55917),d=i(99256),u=i(89480),h=i(91384),g=i(22026),p=o()(o()(o()(o()({},a.S),l.LU),d.Fz),{},{modelValue:{required:!0,default:null},val:{},trueValue:{default:!0},falseValue:{default:!1},indeterminateValue:{default:null},checkedIcon:String,uncheckedIcon:String,indeterminateIcon:String,toggleOrder:{type:String,validator:function(e){return"tf"===e||"ft"===e}},toggleIndeterminate:Boolean,label:String,leftLabel:Boolean,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]}),f=["update:modelValue"];function m(e,t){var i=(0,s.FN)(),n=i.props,p=i.slots,f=i.emit,m=i.proxy,v=m.$q,_=(0,a.Z)(n,v),b=(0,r.iH)(null),y=(0,c.Z)(n,b),w=y.refocusTargetEl,x=y.refocusTarget,C=(0,l.ZP)(n,u.Z),S=(0,s.Fl)((function(){return void 0!==n.val&&Array.isArray(n.modelValue)})),k=(0,s.Fl)((function(){var e=(0,r.IU)(n.val);return!0===S.value?n.modelValue.findIndex((function(t){return(0,r.IU)(t)===e})):-1})),L=(0,s.Fl)((function(){return!0===S.value?k.value>-1:(0,r.IU)(n.modelValue)===(0,r.IU)(n.trueValue)})),E=(0,s.Fl)((function(){return!0===S.value?-1===k.value:(0,r.IU)(n.modelValue)===(0,r.IU)(n.falseValue)})),N=(0,s.Fl)((function(){return!1===L.value&&!1===E.value})),D=(0,s.Fl)((function(){return!0===n.disable?-1:n.tabindex||0})),T=(0,s.Fl)((function(){return"q-".concat(e," cursor-pointer no-outline row inline no-wrap items-center")+(!0===n.disable?" disabled":"")+(!0===_.value?" q-".concat(e,"--dark"):"")+(!0===n.dense?" q-".concat(e,"--dense"):"")+(!0===n.leftLabel?" reverse":"")})),A=(0,s.Fl)((function(){var t=!0===L.value?"truthy":!0===E.value?"falsy":"indet",i=void 0===n.color||!0!==n.keepColor&&("toggle"===e?!0!==L.value:!0===E.value)?"":" text-".concat(n.color);return"q-".concat(e,"__inner relative-position non-selectable q-").concat(e,"__inner--").concat(t).concat(i)})),I=(0,s.Fl)((function(){var e={type:"checkbox"};return void 0!==n.name&&Object.assign(e,{".checked":L.value,"^checked":!0===L.value?"checked":void 0,name:n.name,value:!0===S.value?n.val:n.trueValue}),e})),R=(0,d.eX)(I),M=(0,s.Fl)((function(){var t={tabindex:D.value,role:"toggle"===e?"switch":"checkbox","aria-label":n.label,"aria-checked":!0===N.value?"mixed":!0===L.value?"true":"false"};return!0===n.disable&&(t["aria-disabled"]="true"),t}));function P(e){void 0!==e&&((0,h.NS)(e),x(e)),!0!==n.disable&&f("update:modelValue",O(),e)}function O(){if(!0===S.value){if(!0===L.value){var e=n.modelValue.slice();return e.splice(k.value,1),e}return n.modelValue.concat([n.val])}if(!0===L.value){if("ft"!==n.toggleOrder||!1===n.toggleIndeterminate)return n.falseValue}else{if(!0!==E.value)return"ft"!==n.toggleOrder?n.trueValue:n.falseValue;if("ft"===n.toggleOrder||!1===n.toggleIndeterminate)return n.trueValue}return n.indeterminateValue}function F(e){13!==e.keyCode&&32!==e.keyCode||(0,h.NS)(e)}function B(e){13!==e.keyCode&&32!==e.keyCode||P(e)}var H=t(L,N);return Object.assign(m,{toggle:P}),function(){var t=H();!0!==n.disable&&R(t,"unshift"," q-".concat(e,"__native absolute q-ma-none q-pa-none"));var i=[(0,s.h)("div",{class:A.value,style:C.value,"aria-hidden":"true"},t)];null!==w.value&&i.push(w.value);var r=void 0!==n.label?(0,g.vs)(p["default"],[n.label]):(0,g.KR)(p["default"]);return void 0!==r&&i.push((0,s.h)("div",{class:"q-".concat(e,"__label q-anchor--skip")},r)),(0,s.h)("div",o()(o()({ref:b,class:T.value},M.value),{},{onClick:P,onKeydown:F,onKeyup:B}),i)}}},57691:(e,t,i)=>{"use strict";i.d(t,{Z:()=>p});var n=i(46264),o=i.n(n),s=(i(80676),i(69665),i(58665),i(59835)),r=i(22857),a=i(51136),l=i(68234),c=i(20244),d=i(65987),u=i(91384),h=i(22026),g={xs:8,sm:10,md:14,lg:20,xl:24};const p=(0,d.L)({name:"QChip",props:o()(o()(o()({},l.S),c.LU),{},{dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,modelValue:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean,ripple:{type:[Boolean,Object],default:!0}}),emits:["update:modelValue","update:selected","remove","click"],setup:function(e,t){var i=t.slots,n=t.emit,d=(0,s.FN)(),p=d.proxy.$q,f=(0,l.Z)(e,p),m=(0,c.ZP)(e,g),v=(0,s.Fl)((function(){return!0===e.selected||void 0!==e.icon})),_=(0,s.Fl)((function(){return!0===e.selected?e.iconSelected||p.iconSet.chip.selected:e.icon})),b=(0,s.Fl)((function(){return e.iconRemove||p.iconSet.chip.remove})),y=(0,s.Fl)((function(){return!1===e.disable&&(!0===e.clickable||null!==e.selected)})),w=(0,s.Fl)((function(){var t=!0===e.outline&&e.color||e.textColor;return"q-chip row inline no-wrap items-center"+(!1===e.outline&&void 0!==e.color?" bg-".concat(e.color):"")+(t?" text-".concat(t," q-chip--colored"):"")+(!0===e.disable?" disabled":"")+(!0===e.dense?" q-chip--dense":"")+(!0===e.outline?" q-chip--outline":"")+(!0===e.selected?" q-chip--selected":"")+(!0===y.value?" q-chip--clickable cursor-pointer non-selectable q-hoverable":"")+(!0===e.square?" q-chip--square":"")+(!0===f.value?" q-chip--dark q-dark":"")})),x=(0,s.Fl)((function(){var t=!0===e.disable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:e.tabindex||0},i=o()(o()({},t),{},{role:"button","aria-hidden":"false","aria-label":e.removeAriaLabel||p.lang.label.remove});return{chip:t,remove:i}}));function C(e){13===e.keyCode&&S(e)}function S(t){e.disable||(n("update:selected",!e.selected),n("click",t))}function k(t){void 0!==t.keyCode&&13!==t.keyCode||((0,u.NS)(t),!1===e.disable&&(n("update:modelValue",!1),n("remove")))}function L(){var t=[];!0===y.value&&t.push((0,s.h)("div",{class:"q-focus-helper"})),!0===v.value&&t.push((0,s.h)(r.Z,{class:"q-chip__icon q-chip__icon--left",name:_.value}));var n=void 0!==e.label?[(0,s.h)("div",{class:"ellipsis"},[e.label])]:void 0;return t.push((0,s.h)("div",{class:"q-chip__content col row no-wrap items-center q-anchor--skip"},(0,h.pf)(i["default"],n))),e.iconRight&&t.push((0,s.h)(r.Z,{class:"q-chip__icon q-chip__icon--right",name:e.iconRight})),!0===e.removable&&t.push((0,s.h)(r.Z,o()(o()({class:"q-chip__icon q-chip__icon--remove cursor-pointer",name:b.value},x.value.remove),{},{onClick:k,onKeyup:k}))),t}return function(){if(!1!==e.modelValue){var t={class:w.value,style:m.value};return!0===y.value&&Object.assign(t,x.value.chip,{onClick:S,onKeyup:C}),(0,h.Jl)("div",t,L(),"ripple",!1!==e.ripple&&!0!==e.disable,(function(){return[[a.Z,e.ripple]]}))}}}})},83302:(e,t,i)=>{"use strict";i.d(t,{Z:()=>f});var n=i(46264),o=i.n(n),s=(i(80676),i(79481),i(52519),i(69665),i(59835)),r=i(20244),a=o()(o()({},r.LU),{},{min:{type:Number,default:0},max:{type:Number,default:100},color:String,centerColor:String,trackColor:String,fontSize:String,rounded:Boolean,thickness:{type:Number,default:.2,validator:function(e){return e>=0&&e<=1}},angle:{type:Number,default:0},showValue:Boolean,reverse:Boolean,instantFeedback:Boolean}),l=i(65987),c=i(22026),d=i(30321),u=50,h=2*u,g=h*Math.PI,p=Math.round(1e3*g)/1e3;const f=(0,l.L)({name:"QCircularProgress",props:o()(o()({},a),{},{value:{type:Number,default:0},animationSpeed:{type:[String,Number],default:600},indeterminate:Boolean}),setup:function(e,t){var i=t.slots,n=(0,s.FN)(),o=n.proxy.$q,a=(0,r.ZP)(e),l=(0,s.Fl)((function(){var t=(!0===o.lang.rtl?-1:1)*e.angle;return{transform:e.reverse!==(!0===o.lang.rtl)?"scale3d(-1, 1, 1) rotate3d(0, 0, 1, ".concat(-90-t,"deg)"):"rotate3d(0, 0, 1, ".concat(t-90,"deg)")}})),f=(0,s.Fl)((function(){return!0!==e.instantFeedback&&!0!==e.indeterminate?{transition:"stroke-dashoffset ".concat(e.animationSpeed,"ms ease 0s, stroke ").concat(e.animationSpeed,"ms ease")}:""})),m=(0,s.Fl)((function(){return h/(1-e.thickness/2)})),v=(0,s.Fl)((function(){return"".concat(m.value/2," ").concat(m.value/2," ").concat(m.value," ").concat(m.value)})),_=(0,s.Fl)((function(){return(0,d.vX)(e.value,e.min,e.max)})),b=(0,s.Fl)((function(){return g*(1-(_.value-e.min)/(e.max-e.min))})),y=(0,s.Fl)((function(){return e.thickness/2*m.value}));function w(e){var t=e.thickness,i=e.offset,n=e.color,o=e.cls,r=e.rounded;return(0,s.h)("circle",{class:"q-circular-progress__"+o+(void 0!==n?" text-".concat(n):""),style:f.value,fill:"transparent",stroke:"currentColor","stroke-width":t,"stroke-dasharray":p,"stroke-dashoffset":i,"stroke-linecap":r,cx:m.value,cy:m.value,r:u})}return function(){var t=[];void 0!==e.centerColor&&"transparent"!==e.centerColor&&t.push((0,s.h)("circle",{class:"q-circular-progress__center text-".concat(e.centerColor),fill:"currentColor",r:u-y.value/2,cx:m.value,cy:m.value})),void 0!==e.trackColor&&"transparent"!==e.trackColor&&t.push(w({cls:"track",thickness:y.value,offset:0,color:e.trackColor})),t.push(w({cls:"circle",thickness:y.value,offset:b.value,color:e.color,rounded:!0===e.rounded?"round":void 0}));var n=[(0,s.h)("svg",{class:"q-circular-progress__svg",style:l.value,viewBox:v.value,"aria-hidden":"true"},t)];return!0===e.showValue&&n.push((0,s.h)("div",{class:"q-circular-progress__text absolute-full row flex-center content-center",style:{fontSize:e.fontSize}},void 0!==i["default"]?i["default"]():[(0,s.h)("div",_.value)])),(0,s.h)("div",{class:"q-circular-progress q-circular-progress--".concat(!0===e.indeterminate?"in":"","determinate"),style:a.value,role:"progressbar","aria-valuemin":e.min,"aria-valuemax":e.max,"aria-valuenow":!0===e.indeterminate?void 0:_.value},(0,c.pf)(i.internal,n))}}})},32074:(e,t,i)=>{"use strict";i.d(t,{Z:()=>L});var n=i(50001),o=i.n(n),s=i(46264),r=i.n(s),a=(i(46727),i(52519),i(72091),i(93954),i(58665),i(59835)),l=i(60499),c=i(61957),d=i(94953),u=i(52695),h=i(16916),g=i(63842),p=i(20431),f=i(91518),m=i(13963),v=i(65987),_=i(70223),b=i(22026),y=i(16532),w=i(4173),x=i(17026),C=0,S={standard:"fixed-full flex-center",top:"fixed-top justify-center",bottom:"fixed-bottom justify-center",right:"fixed-right items-center",left:"fixed-left items-center"},k={standard:["scale","scale"],top:["slide-down","slide-up"],bottom:["slide-up","slide-down"],right:["slide-left","slide-right"],left:["slide-right","slide-left"]};const L=(0,v.L)({name:"QDialog",inheritAttrs:!1,props:r()(r()(r()({},g.vr),p.D),{},{transitionShow:String,transitionHide:String,persistent:Boolean,autoClose:Boolean,allowFocusOutside:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,position:{type:String,default:"standard",validator:function(e){return"standard"===e||["top","bottom","left","right"].includes(e)}}}),emits:[].concat(o()(g.gH),["shake","click","escapeKey"]),setup:function(e,t){var i,n,o=t.slots,s=t.emit,v=t.attrs,L=(0,a.FN)(),E=(0,l.iH)(null),N=(0,l.iH)(!1),D=(0,l.iH)(!1),T=null,A=null,I=(0,a.Fl)((function(){return!0!==e.persistent&&!0!==e.noRouteDismiss&&!0!==e.seamless})),R=(0,m.Z)(),M=R.preventBodyScroll,P=(0,u.Z)(),O=P.registerTimeout,F=(0,h.Z)(),B=F.registerTick,H=F.removeTick,W=(0,p.Z)(e,(function(){return k[e.position][0]}),(function(){return k[e.position][1]})),V=W.transitionProps,z=W.transitionStyle,U=(0,f.Z)(L,E,ge,"dialog"),q=U.showPortal,$=U.hidePortal,j=U.portalIsAccessible,K=U.renderPortal,G=(0,g.ZP)({showing:N,hideOnRouteChange:I,handleShow:ne,handleHide:oe,processOnMount:!0}),Y=G.hide,X=(0,d.Z)(N,Y,I),Z=X.addToHistory,Q=X.removeFromHistory,J=(0,a.Fl)((function(){return"q-dialog__inner flex no-pointer-events"+" q-dialog__inner--".concat(!0===e.maximized?"maximized":"minimized")+" q-dialog__inner--".concat(e.position," ").concat(S[e.position])+(!0===D.value?" q-dialog__inner--animating":"")+(!0===e.fullWidth?" q-dialog__inner--fullwidth":"")+(!0===e.fullHeight?" q-dialog__inner--fullheight":"")+(!0===e.square?" q-dialog__inner--square":"")})),ee=(0,a.Fl)((function(){return!0===N.value&&!0!==e.seamless})),te=(0,a.Fl)((function(){return!0===e.autoClose?{onClick:de}:{}})),ie=(0,a.Fl)((function(){return["q-dialog fullscreen no-pointer-events "+"q-dialog--".concat(!0===ee.value?"modal":"seamless"),v["class"]]}));function ne(t){Z(),A=!1===e.noRefocus&&null!==document.activeElement?document.activeElement:null,ce(e.maximized),q(),D.value=!0,!0!==e.noFocus?(null!==document.activeElement&&document.activeElement.blur(),B(se)):H(),O((function(){if(!0===L.proxy.$q.platform.is.ios){if(!0!==e.seamless&&document.activeElement){var i=document.activeElement.getBoundingClientRect(),o=i.top,r=i.bottom,a=window,l=a.innerHeight,c=void 0!==window.visualViewport?window.visualViewport.height:l;o>0&&r>c/2&&(document.scrollingElement.scrollTop=Math.min(document.scrollingElement.scrollHeight-c,r>=l?1/0:Math.ceil(document.scrollingElement.scrollTop+r-c/2))),document.activeElement.scrollIntoView()}n=!0,E.value.click(),n=!1}q(!0),D.value=!1,s("show",t)}),e.transitionDuration)}function oe(t){H(),Q(),le(!0),D.value=!0,$(),null!==A&&(((t&&0===t.type.indexOf("key")?A.closest('[tabindex]:not([tabindex^="-"])'):void 0)||A).focus(),A=null),O((function(){$(!0),D.value=!1,s("hide",t)}),e.transitionDuration)}function se(e){(0,x.jd)((function(){var t=E.value;null!==t&&!0!==t.contains(document.activeElement)&&(t=(""!==e?t.querySelector(e):null)||t.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||t.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||t.querySelector("[autofocus], [data-autofocus]")||t,t.focus({preventScroll:!0}))}))}function re(e){e&&"function"===typeof e.focus?e.focus({preventScroll:!0}):se(),s("shake");var t=E.value;null!==t&&(t.classList.remove("q-animate--scale"),t.classList.add("q-animate--scale"),null!==T&&clearTimeout(T),T=setTimeout((function(){T=null,null!==E.value&&(t.classList.remove("q-animate--scale"),se())}),170))}function ae(){!0!==e.seamless&&(!0===e.persistent||!0===e.noEscDismiss?!0!==e.maximized&&!0!==e.noShake&&re():(s("escapeKey"),Y()))}function le(t){null!==T&&(clearTimeout(T),T=null),!0!==t&&!0!==N.value||(ce(!1),!0!==e.seamless&&(M(!1),(0,w.H)(he),(0,y.k)(ae))),!0!==t&&(A=null)}function ce(e){!0===e?!0!==i&&(C<1&&document.body.classList.add("q-body--dialog"),C++,i=!0):!0===i&&(C<2&&document.body.classList.remove("q-body--dialog"),C--,i=!1)}function de(e){!0!==n&&(Y(e),s("click",e))}function ue(t){!0!==e.persistent&&!0!==e.noBackdropDismiss?Y(t):!0!==e.noShake&&re()}function he(t){!0!==e.allowFocusOutside&&!0===j.value&&!0!==(0,_.mY)(E.value,t.target)&&se('[tabindex]:not([tabindex="-1"])')}function ge(){return(0,a.h)("div",r()(r()({role:"dialog","aria-modal":!0===ee.value?"true":"false"},v),{},{class:ie.value}),[(0,a.h)(c.uT,{name:"q-transition--fade",appear:!0},(function(){return!0===ee.value?(0,a.h)("div",{class:"q-dialog__backdrop fixed-full",style:z.value,"aria-hidden":"true",tabindex:-1,onClick:ue}):null})),(0,a.h)(c.uT,V.value,(function(){return!0===N.value?(0,a.h)("div",r()({ref:E,class:J.value,style:z.value,tabindex:-1},te.value),(0,b.KR)(o["default"])):null}))])}return(0,a.YP)((function(){return e.maximized}),(function(e){!0===N.value&&ce(e)})),(0,a.YP)(ee,(function(e){M(e),!0===e?((0,w.i)(he),(0,y.c)(ae)):((0,w.H)(he),(0,y.k)(ae))})),Object.assign(L.proxy,{focus:se,shake:re,__updateRefocusTarget:function(e){A=e||null}}),(0,a.Jd)(le),K}})},10906:(e,t,i)=>{"use strict";i.d(t,{Z:()=>x});var n=i(38761),o=i.n(n),s=i(50001),r=i.n(s),a=i(46264),l=i.n(a),c=(i(46727),i(80676),i(52519),i(72091),i(58665),i(93954),i(69665),i(59835)),d=i(60499),u=i(94953),h=i(63842),g=i(13963),p=i(52695),f=i(68234),m=i(2873),v=i(65987),_=i(30321),b=i(22026),y=i(95439),w=150;const x=(0,v.L)({name:"QDrawer",inheritAttrs:!1,props:l()(l()(l()({},h.vr),f.S),{},{side:{type:String,default:"left",validator:function(e){return["left","right"].includes(e)}},width:{type:Number,default:300},mini:Boolean,miniToOverlay:Boolean,miniWidth:{type:Number,default:57},noMiniAnimation:Boolean,breakpoint:{type:Number,default:1023},showIfAbove:Boolean,behavior:{type:String,validator:function(e){return["default","desktop","mobile"].includes(e)},default:"default"},bordered:Boolean,elevated:Boolean,overlay:Boolean,persistent:Boolean,noSwipeOpen:Boolean,noSwipeClose:Boolean,noSwipeBackdrop:Boolean}),emits:[].concat(r()(h.gH),["onLayout","miniState"]),setup:function(e,t){var i=t.slots,n=t.emit,s=t.attrs,r=(0,c.FN)(),a=r.proxy.$q,v=(0,f.Z)(e,a),x=(0,g.Z)(),C=x.preventBodyScroll,S=(0,p.Z)(),k=S.registerTimeout,L=S.removeTimeout,E=(0,c.f3)(y.YE,y.qO);if(E===y.qO)return console.error("QDrawer needs to be child of QLayout"),y.qO;var N,D,T=null,A=(0,d.iH)("mobile"===e.behavior||"desktop"!==e.behavior&&E.totalWidth.value<=e.breakpoint),I=(0,c.Fl)((function(){return!0===e.mini&&!0!==A.value})),R=(0,c.Fl)((function(){return!0===I.value?e.miniWidth:e.width})),M=(0,d.iH)(!0===e.showIfAbove&&!1===A.value||!0===e.modelValue),P=(0,c.Fl)((function(){return!0!==e.persistent&&(!0===A.value||!0===te.value)}));function O(e,t){if(z(),!1!==e&&E.animate(),pe(0),!0===A.value){var i=E.instances[Z.value];void 0!==i&&!0===i.belowBreakpoint&&i.hide(!1),fe(1),!0!==E.isContainer.value&&C(!0)}else fe(0),!1!==e&&me(!1);k((function(){!1!==e&&me(!0),!0!==t&&n("show",e)}),w)}function F(e,t){U(),!1!==e&&E.animate(),fe(0),pe(j.value*R.value),ye(),!0!==t?k((function(){n("hide",e)}),w):L()}var B=(0,h.ZP)({showing:M,hideOnRouteChange:P,handleShow:O,handleHide:F}),H=B.show,W=B.hide,V=(0,u.Z)(M,W,P),z=V.addToHistory,U=V.removeFromHistory,q={belowBreakpoint:A,hide:W},$=(0,c.Fl)((function(){return"right"===e.side})),j=(0,c.Fl)((function(){return(!0===a.lang.rtl?-1:1)*(!0===$.value?1:-1)})),K=(0,d.iH)(0),G=(0,d.iH)(!1),Y=(0,d.iH)(!1),X=(0,d.iH)(R.value*j.value),Z=(0,c.Fl)((function(){return!0===$.value?"left":"right"})),Q=(0,c.Fl)((function(){return!0===M.value&&!1===A.value&&!1===e.overlay?!0===e.miniToOverlay?e.miniWidth:R.value:0})),J=(0,c.Fl)((function(){return!0===e.overlay||!0===e.miniToOverlay||E.view.value.indexOf($.value?"R":"L")>-1||!0===a.platform.is.ios&&!0===E.isContainer.value})),ee=(0,c.Fl)((function(){return!1===e.overlay&&!0===M.value&&!1===A.value})),te=(0,c.Fl)((function(){return!0===e.overlay&&!0===M.value&&!1===A.value})),ie=(0,c.Fl)((function(){return"fullscreen q-drawer__backdrop"+(!1===M.value&&!1===G.value?" hidden":"")})),ne=(0,c.Fl)((function(){return{backgroundColor:"rgba(0,0,0,".concat(.4*K.value,")")}})),oe=(0,c.Fl)((function(){return!0===$.value?"r"===E.rows.value.top[2]:"l"===E.rows.value.top[0]})),se=(0,c.Fl)((function(){return!0===$.value?"r"===E.rows.value.bottom[2]:"l"===E.rows.value.bottom[0]})),re=(0,c.Fl)((function(){var e={};return!0===E.header.space&&!1===oe.value&&(!0===J.value?e.top="".concat(E.header.offset,"px"):!0===E.header.space&&(e.top="".concat(E.header.size,"px"))),!0===E.footer.space&&!1===se.value&&(!0===J.value?e.bottom="".concat(E.footer.offset,"px"):!0===E.footer.space&&(e.bottom="".concat(E.footer.size,"px"))),e})),ae=(0,c.Fl)((function(){var e={width:"".concat(R.value,"px"),transform:"translateX(".concat(X.value,"px)")};return!0===A.value?e:Object.assign(e,re.value)})),le=(0,c.Fl)((function(){return"q-drawer__content fit "+(!0!==E.isContainer.value?"scroll":"overflow-auto")})),ce=(0,c.Fl)((function(){return"q-drawer q-drawer--".concat(e.side)+(!0===Y.value?" q-drawer--mini-animate":"")+(!0===e.bordered?" q-drawer--bordered":"")+(!0===v.value?" q-drawer--dark q-dark":"")+(!0===G.value?" no-transition":!0===M.value?"":" q-layout--prevent-focus")+(!0===A.value?" fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding":" q-drawer--".concat(!0===I.value?"mini":"standard")+(!0===J.value||!0!==ee.value?" fixed":"")+(!0===e.overlay||!0===e.miniToOverlay?" q-drawer--on-top":"")+(!0===oe.value?" q-drawer--top-padding":""))})),de=(0,c.Fl)((function(){var t,i=!0===a.lang.rtl?e.side:Z.value;return[[m.Z,_e,void 0,(t={},o()(t,i,!0),o()(t,"mouse",!0),t)]]})),ue=(0,c.Fl)((function(){var t,i=!0===a.lang.rtl?Z.value:e.side;return[[m.Z,be,void 0,(t={},o()(t,i,!0),o()(t,"mouse",!0),t)]]})),he=(0,c.Fl)((function(){var t,i=!0===a.lang.rtl?Z.value:e.side;return[[m.Z,be,void 0,(t={},o()(t,i,!0),o()(t,"mouse",!0),o()(t,"mouseAllDir",!0),t)]]}));function ge(){xe(A,"mobile"===e.behavior||"desktop"!==e.behavior&&E.totalWidth.value<=e.breakpoint)}function pe(e){void 0===e?(0,c.Y3)((function(){e=!0===M.value?0:R.value,pe(j.value*e)})):(!0!==E.isContainer.value||!0!==$.value||!0!==A.value&&Math.abs(e)!==R.value||(e+=j.value*E.scrollbarWidth.value),X.value=e)}function fe(e){K.value=e}function me(e){var t=!0===e?"remove":!0!==E.isContainer.value?"add":"";""!==t&&document.body.classList[t]("q-body--drawer-toggle")}function ve(){null!==T&&clearTimeout(T),r.proxy&&r.proxy.$el&&r.proxy.$el.classList.add("q-drawer--mini-animate"),Y.value=!0,T=setTimeout((function(){T=null,Y.value=!1,r&&r.proxy&&r.proxy.$el&&r.proxy.$el.classList.remove("q-drawer--mini-animate")}),150)}function _e(e){if(!1===M.value){var t=R.value,i=(0,_.vX)(e.distance.x,0,t);if(!0===e.isFinal){var n=i>=Math.min(75,t);return!0===n?H():(E.animate(),fe(0),pe(j.value*t)),void(G.value=!1)}pe((!0===a.lang.rtl?!0!==$.value:$.value)?Math.max(t-i,0):Math.min(0,i-t)),fe((0,_.vX)(i/t,0,1)),!0===e.isFirst&&(G.value=!0)}}function be(t){if(!0===M.value){var i=R.value,n=t.direction===e.side,o=(!0===a.lang.rtl?!0!==n:n)?(0,_.vX)(t.distance.x,0,i):0;if(!0===t.isFinal){var s=Math.abs(o){"use strict";i.d(t,{Z:()=>E});var n=i(38761),o=i.n(n),s=i(50001),r=i.n(s),a=i(46264),l=i.n(a),c=(i(34442),i(80676),i(52519),i(91804),i(65716),i(61732),i(58665),i(86890),i(69665),i(60499)),d=i(59835),u=i(61957),h=i(490),g=i(76749),p=i(33115),f=i(22857),m=i(69003),v=i(50926),_=i(68234),b=i(70945),y=i(63842),w=i(65987),x=i(91384),C=i(22026),S=i(50796),k=(0,c.Um)({}),L=Object.keys(b.$);const E=(0,w.L)({name:"QExpansionItem",props:l()(l()(l()(l()({},b.$),y.vr),_.S),{},{icon:String,label:String,labelLines:[Number,String],caption:String,captionLines:[Number,String],dense:Boolean,toggleAriaLabel:String,expandIcon:String,expandedIcon:String,expandIconClass:[Array,String,Object],duration:Number,headerInsetLevel:Number,contentInsetLevel:Number,expandSeparator:Boolean,defaultOpened:Boolean,hideExpandIcon:Boolean,expandIconToggle:Boolean,switchToggleSide:Boolean,denseToggle:Boolean,group:String,popup:Boolean,headerStyle:[Array,String,Object],headerClass:[Array,String,Object]}),emits:[].concat(r()(y.gH),["click","afterShow","afterHide"]),setup:function(e,t){var i,n,s=t.slots,r=t.emit,a=(0,d.FN)(),b=a.proxy.$q,w=(0,_.Z)(e,b),E=(0,c.iH)(null!==e.modelValue?e.modelValue:e.defaultOpened),N=(0,c.iH)(null),D=(0,S.Z)(),T=(0,y.ZP)({showing:E}),A=T.show,I=T.hide,R=T.toggle,M=(0,d.Fl)((function(){return"q-expansion-item q-item-type"+" q-expansion-item--".concat(!0===E.value?"expanded":"collapsed")+" q-expansion-item--".concat(!0===e.popup?"popup":"standard")})),P=(0,d.Fl)((function(){if(void 0===e.contentInsetLevel)return null;var t=!0===b.lang.rtl?"Right":"Left";return o()({},"padding"+t,56*e.contentInsetLevel+"px")})),O=(0,d.Fl)((function(){return!0!==e.disable&&(void 0!==e.href||void 0!==e.to&&null!==e.to&&""!==e.to)})),F=(0,d.Fl)((function(){var t={};return L.forEach((function(i){t[i]=e[i]})),t})),B=(0,d.Fl)((function(){return!0===O.value||!0!==e.expandIconToggle})),H=(0,d.Fl)((function(){return void 0!==e.expandedIcon&&!0===E.value?e.expandedIcon:e.expandIcon||b.iconSet.expansionItem[!0===e.denseToggle?"denseIcon":"icon"]})),W=(0,d.Fl)((function(){return!0!==e.disable&&(!0===O.value||!0===e.expandIconToggle)})),V=(0,d.Fl)((function(){return{expanded:!0===E.value,detailsId:e.targetUid,toggle:R,show:A,hide:I}})),z=(0,d.Fl)((function(){var t=void 0!==e.toggleAriaLabel?e.toggleAriaLabel:b.lang.label[!0===E.value?"collapse":"expand"](e.label);return{role:"button","aria-expanded":!0===E.value?"true":"false","aria-controls":D,"aria-label":t}}));function U(e){!0!==O.value&&R(e),r("click",e)}function q(e){13===e.keyCode&&$(e,!0)}function $(e,t){!0!==t&&null!==N.value&&N.value.focus(),R(e),(0,x.NS)(e)}function j(){r("afterShow")}function K(){r("afterHide")}function G(){void 0===i&&(i=(0,S.Z)()),!0===E.value&&(k[e.group]=i);var t=(0,d.YP)(E,(function(t){!0===t?k[e.group]=i:k[e.group]===i&&delete k[e.group]})),o=(0,d.YP)((function(){return k[e.group]}),(function(e,t){t===i&&void 0!==e&&e!==i&&I()}));n=function(){t(),o(),k[e.group]===i&&delete k[e.group],n=void 0}}function Y(){var t={class:["q-focusable relative-position cursor-pointer"+"".concat(!0===e.denseToggle&&!0===e.switchToggleSide?" items-end":""),e.expandIconClass],side:!0!==e.switchToggleSide,avatar:e.switchToggleSide},i=[(0,d.h)(f.Z,{class:"q-expansion-item__toggle-icon"+(void 0===e.expandedIcon&&!0===E.value?" q-expansion-item__toggle-icon--rotated":""),name:H.value})];return!0===W.value&&(Object.assign(t,l()(l()({tabindex:0},z.value),{},{onClick:$,onKeyup:q})),i.unshift((0,d.h)("div",{ref:N,class:"q-expansion-item__toggle-focus q-icon q-focus-helper q-focus-helper--rounded",tabindex:-1}))),(0,d.h)(g.Z,t,(function(){return i}))}function X(){var t;return void 0!==s.header?t=[].concat(s.header(V.value)):(t=[(0,d.h)(g.Z,(function(){return[(0,d.h)(p.Z,{lines:e.labelLines},(function(){return e.label||""})),e.caption?(0,d.h)(p.Z,{lines:e.captionLines,caption:!0},(function(){return e.caption})):null]}))],e.icon&&t[!0===e.switchToggleSide?"push":"unshift"]((0,d.h)(g.Z,{side:!0===e.switchToggleSide,avatar:!0!==e.switchToggleSide},(function(){return(0,d.h)(f.Z,{name:e.icon})})))),!0!==e.disable&&!0!==e.hideExpandIcon&&t[!0===e.switchToggleSide?"unshift":"push"](Y()),t}function Z(){var t={ref:"item",style:e.headerStyle,class:e.headerClass,dark:w.value,disable:e.disable,dense:e.dense,insetLevel:e.headerInsetLevel};return!0===B.value&&(t.clickable=!0,t.onClick=U,Object.assign(t,!0===O.value?F.value:z.value)),(0,d.h)(h.Z,t,X)}function Q(){return(0,d.wy)((0,d.h)("div",{key:"e-content",class:"q-expansion-item__content relative-position",style:P.value,id:D},(0,C.KR)(s["default"])),[[u.F8,E.value]])}function J(){var t=[Z(),(0,d.h)(m.Z,{duration:e.duration,onShow:j,onHide:K},Q)];return!0===e.expandSeparator&&t.push((0,d.h)(v.Z,{class:"q-expansion-item__border q-expansion-item__border--top absolute-top",dark:w.value}),(0,d.h)(v.Z,{class:"q-expansion-item__border q-expansion-item__border--bottom absolute-bottom",dark:w.value})),t}return(0,d.YP)((function(){return e.group}),(function(e){void 0!==n&&n(),void 0!==e&&G()})),void 0!==e.group&&G(),(0,d.Jd)((function(){void 0!==n&&n()})),function(){return(0,d.h)("div",{class:M.value},[(0,d.h)("div",{class:"q-expansion-item__container relative-position"},J())])}}})},18149:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});var n=i(36169),o=i(65987);const s=(0,o.L)({name:"QField",inheritAttrs:!1,props:n.Cl,emits:n.HJ,setup:function(){return(0,n.ZP)((0,n.tL)())}})},33837:(e,t,i)=>{"use strict";i.d(t,{Z:()=>_});var n=i(50001),o=i.n(n),s=i(46264),r=i.n(s),a=(i(80676),i(52519),i(97605),i(77280),i(91392),i(51393),i(62590),i(55067),i(65716),i(60893),i(32455),i(72091),i(31719),i(46727),i(3452),i(58665),i(59835)),l=i(60499),c=i(57691),d=i(36169),u=i(99256),h=i(21970),g=i(87915),p=i(65987),f=i(30321),m=i(91384),v=i(43251);const _=(0,p.L)({name:"QFile",inheritAttrs:!1,props:r()(r()(r()(r()({},d.Cl),u.Fz),h.TS),{},{modelValue:[File,FileList,Array],append:Boolean,useChips:Boolean,displayValue:[String,Number],tabindex:{type:[String,Number],default:0},counterLabel:Function,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]}),emits:[].concat(o()(d.HJ),o()(h.Pl)),setup:function(e,t){var i=t.slots,n=t.emit,o=t.attrs,s=(0,a.FN)(),p=s.proxy,_=(0,d.tL)(),b=(0,l.iH)(null),y=(0,l.iH)(!1),w=(0,u.Do)(e),x=(0,h.ZP)({editable:_.editable,dnd:y,getFileInput:z,addFilesToQueue:U}),C=x.pickFiles,S=x.onDragover,k=x.onDragleave,L=x.processFiles,E=x.getDndNode,N=(0,g.Z)(e),D=(0,a.Fl)((function(){return Object(e.modelValue)===e.modelValue?"length"in e.modelValue?Array.from(e.modelValue):[e.modelValue]:[]})),T=(0,a.Fl)((function(){return(0,d.yV)(D.value)})),A=(0,a.Fl)((function(){return D.value.map((function(e){return e.name})).join(", ")})),I=(0,a.Fl)((function(){return(0,f.rB)(D.value.reduce((function(e,t){return e+t.size}),0))})),R=(0,a.Fl)((function(){return{totalSize:I.value,filesNumber:D.value.length,maxFiles:e.maxFiles}})),M=(0,a.Fl)((function(){return r()(r()({tabindex:-1,type:"file",title:"",accept:e.accept,capture:e.capture,name:w.value},o),{},{id:_.targetUid.value,disabled:!0!==_.editable.value})})),P=(0,a.Fl)((function(){return"q-file q-field--auto-height"+(!0===y.value?" q-file--dnd":"")})),O=(0,a.Fl)((function(){return!0===e.multiple&&!0===e.append}));function F(e){var t=D.value.slice();t.splice(e,1),H(t)}function B(e){var t=D.value.indexOf(e);t>-1&&F(t)}function H(t){n("update:modelValue",!0===e.multiple?t:t[0])}function W(e){13===e.keyCode&&(0,m.X$)(e)}function V(e){13!==e.keyCode&&32!==e.keyCode||C(e)}function z(){return b.value}function U(t,i){var n=L(t,i,D.value,O.value),o=z();void 0!==o&&null!==o&&(o.value=""),void 0!==n&&((!0===e.multiple?e.modelValue&&n.every((function(e){return D.value.includes(e)})):e.modelValue===n[0])||H(!0===O.value?D.value.concat(n):n))}function q(){return[(0,a.h)("input",{class:[e.inputClass,"q-file__filler"],style:e.inputStyle})]}function $(){var t=this;if(void 0!==i.file)return 0===D.value.length?q():D.value.map((function(e,n){return i.file({index:n,file:e,ref:t})}));if(void 0!==i.selected)return 0===D.value.length?q():i.selected({files:D.value,ref:this});if(!0===e.useChips)return 0===D.value.length?q():D.value.map((function(t,i){return(0,a.h)(c.Z,{key:"file-"+i,removable:_.editable.value,dense:!0,textColor:e.color,tabindex:e.tabindex,onRemove:function(){F(i)}},(function(){return(0,a.h)("span",{class:"ellipsis",textContent:t.name})}))}));var n=void 0!==e.displayValue?e.displayValue:A.value;return 0!==n.length?[(0,a.h)("div",{class:e.inputClass,style:e.inputStyle,textContent:n})]:q()}function j(){var t=r()(r()(r()({ref:b},M.value),N.value),{},{class:"q-field__input fit absolute-full cursor-pointer",onChange:U});return!0===e.multiple&&(t.multiple=!0),(0,a.h)("input",t)}return Object.assign(_,{fieldClass:P,emitValue:H,hasValue:T,inputRef:b,innerValue:D,floatingLabel:(0,a.Fl)((function(){return!0===T.value||(0,d.yV)(e.displayValue)})),computedCounter:(0,a.Fl)((function(){if(void 0!==e.counterLabel)return e.counterLabel(R.value);var t=e.maxFiles;return"".concat(D.value.length).concat(void 0!==t?" / "+t:""," (").concat(I.value,")")})),getControlChild:function(){return E("file")},getControl:function(){var t={ref:_.targetRef,class:"q-field__native row items-center cursor-pointer",tabindex:e.tabindex};return!0===_.editable.value&&Object.assign(t,{onDragover:S,onDragleave:k,onKeydown:W,onKeyup:V}),(0,a.h)("div",t,[j()].concat($()))}}),Object.assign(p,{removeAtIndex:F,removeFile:B,getNativeElement:function(){return b.value}}),(0,v.g)(p,"nativeEl",(function(){return b.value})),(0,d.ZP)(_)}})},71378:(e,t,i)=>{"use strict";i.d(t,{Z:()=>d});i(80676),i(65735),i(72091),i(69665);var n=i(59835),o=i(60499),s=i(47506),r=i(60883),a=i(65987),l=i(22026),c=i(95439);const d=(0,a.L)({name:"QFooter",props:{modelValue:{type:Boolean,default:!0},reveal:Boolean,bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},emits:["reveal","focusin"],setup:function(e,t){var i=t.slots,a=t.emit,d=(0,n.FN)(),u=d.proxy.$q,h=(0,n.f3)(c.YE,c.qO);if(h===c.qO)return console.error("QFooter needs to be child of QLayout"),c.qO;var g=(0,o.iH)(parseInt(e.heightHint,10)),p=(0,o.iH)(!0),f=(0,o.iH)(!0===s.uX.value||!0===h.isContainer.value?0:window.innerHeight),m=(0,n.Fl)((function(){return!0===e.reveal||h.view.value.indexOf("F")>-1||u.platform.is.ios&&!0===h.isContainer.value})),v=(0,n.Fl)((function(){return!0===h.isContainer.value?h.containerHeight.value:f.value})),_=(0,n.Fl)((function(){if(!0!==e.modelValue)return 0;if(!0===m.value)return!0===p.value?g.value:0;var t=h.scroll.value.position+v.value+g.value-h.height.value;return t>0?t:0})),b=(0,n.Fl)((function(){return!0!==e.modelValue||!0===m.value&&!0!==p.value})),y=(0,n.Fl)((function(){return!0===e.modelValue&&!0===b.value&&!0===e.reveal})),w=(0,n.Fl)((function(){return"q-footer q-layout__section--marginal "+(!0===m.value?"fixed":"absolute")+"-bottom"+(!0===e.bordered?" q-footer--bordered":"")+(!0===b.value?" q-footer--hidden":"")+(!0!==e.modelValue?" q-layout--prevent-focus"+(!0!==m.value?" hidden":""):"")})),x=(0,n.Fl)((function(){var e=h.rows.value.bottom,t={};return"l"===e[0]&&!0===h.left.space&&(t[!0===u.lang.rtl?"right":"left"]="".concat(h.left.size,"px")),"r"===e[2]&&!0===h.right.space&&(t[!0===u.lang.rtl?"left":"right"]="".concat(h.right.size,"px")),t}));function C(e,t){h.update("footer",e,t)}function S(e,t){e.value!==t&&(e.value=t)}function k(e){var t=e.height;S(g,t),C("size",t)}function L(){if(!0===e.reveal){var t=h.scroll.value,i=t.direction,n=t.position,o=t.inflectionPoint;S(p,"up"===i||n-o<100||h.height.value-v.value-n-g.value<300)}}function E(e){!0===y.value&&S(p,!0),a("focusin",e)}(0,n.YP)((function(){return e.modelValue}),(function(e){C("space",e),S(p,!0),h.animate()})),(0,n.YP)(_,(function(e){C("offset",e)})),(0,n.YP)((function(){return e.reveal}),(function(t){!1===t&&S(p,e.modelValue)})),(0,n.YP)(p,(function(e){h.animate(),a("reveal",e)})),(0,n.YP)([g,h.scroll,h.height],L),(0,n.YP)((function(){return u.screen.height}),(function(e){!0!==h.isContainer.value&&S(f,e)}));var N={};return h.instances.footer=N,!0===e.modelValue&&C("size",g.value),C("space",e.modelValue),C("offset",_.value),(0,n.Jd)((function(){h.instances.footer===N&&(h.instances.footer=void 0,C("size",0),C("offset",0),C("space",!1))})),function(){var t=(0,l.vs)(i["default"],[(0,n.h)(r.Z,{debounce:0,onResize:k})]);return!0===e.elevated&&t.push((0,n.h)("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),(0,n.h)("footer",{class:w.value,style:x.value,onFocusin:E},t)}}})},16602:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});i(80676),i(65735),i(72091),i(69665);var n=i(59835),o=i(60499),s=i(60883),r=i(65987),a=i(22026),l=i(95439);const c=(0,r.L)({name:"QHeader",props:{modelValue:{type:Boolean,default:!0},reveal:Boolean,revealOffset:{type:Number,default:250},bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},emits:["reveal","focusin"],setup:function(e,t){var i=t.slots,r=t.emit,c=(0,n.FN)(),d=c.proxy.$q,u=(0,n.f3)(l.YE,l.qO);if(u===l.qO)return console.error("QHeader needs to be child of QLayout"),l.qO;var h=(0,o.iH)(parseInt(e.heightHint,10)),g=(0,o.iH)(!0),p=(0,n.Fl)((function(){return!0===e.reveal||u.view.value.indexOf("H")>-1||d.platform.is.ios&&!0===u.isContainer.value})),f=(0,n.Fl)((function(){if(!0!==e.modelValue)return 0;if(!0===p.value)return!0===g.value?h.value:0;var t=h.value-u.scroll.value.position;return t>0?t:0})),m=(0,n.Fl)((function(){return!0!==e.modelValue||!0===p.value&&!0!==g.value})),v=(0,n.Fl)((function(){return!0===e.modelValue&&!0===m.value&&!0===e.reveal})),_=(0,n.Fl)((function(){return"q-header q-layout__section--marginal "+(!0===p.value?"fixed":"absolute")+"-top"+(!0===e.bordered?" q-header--bordered":"")+(!0===m.value?" q-header--hidden":"")+(!0!==e.modelValue?" q-layout--prevent-focus":"")})),b=(0,n.Fl)((function(){var e=u.rows.value.top,t={};return"l"===e[0]&&!0===u.left.space&&(t[!0===d.lang.rtl?"right":"left"]="".concat(u.left.size,"px")),"r"===e[2]&&!0===u.right.space&&(t[!0===d.lang.rtl?"left":"right"]="".concat(u.right.size,"px")),t}));function y(e,t){u.update("header",e,t)}function w(e,t){e.value!==t&&(e.value=t)}function x(e){var t=e.height;w(h,t),y("size",t)}function C(e){!0===v.value&&w(g,!0),r("focusin",e)}(0,n.YP)((function(){return e.modelValue}),(function(e){y("space",e),w(g,!0),u.animate()})),(0,n.YP)(f,(function(e){y("offset",e)})),(0,n.YP)((function(){return e.reveal}),(function(t){!1===t&&w(g,e.modelValue)})),(0,n.YP)(g,(function(e){u.animate(),r("reveal",e)})),(0,n.YP)(u.scroll,(function(t){!0===e.reveal&&w(g,"up"===t.direction||t.position<=e.revealOffset||t.position-t.inflectionPoint<100)}));var S={};return u.instances.header=S,!0===e.modelValue&&y("size",h.value),y("space",e.modelValue),y("offset",f.value),(0,n.Jd)((function(){u.instances.header===S&&(u.instances.header=void 0,y("size",0),y("offset",0),y("space",!1))})),function(){var t=(0,a.Bl)(i["default"],[]);return!0===e.elevated&&t.push((0,n.h)("div",{class:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),t.push((0,n.h)(s.Z,{debounce:0,onResize:x})),(0,n.h)("header",{class:_.value,style:b.value,onFocusin:C},t)}}})},22857:(e,t,i)=>{"use strict";i.d(t,{Z:()=>k});var n=i(37167),o=i.n(n),s=i(46264),r=i.n(s),a=(i(33605),i(36519),i(11476),i(56394),i(22725),i(91392),i(34442),i(62590),i(32119),i(51393),i(24972),i(52519),i(59835)),l=i(20244),c=i(65987),d=i(22026),u="0 0 24 24",h=function(e){return e},g=function(e){return"ionicons ".concat(e)},p={"mdi-":function(e){return"mdi ".concat(e)},"icon-":h,"bt-":function(e){return"bt ".concat(e)},"eva-":function(e){return"eva ".concat(e)},"ion-md":g,"ion-ios":g,"ion-logo":g,"iconfont ":h,"ti-":function(e){return"themify-icon ".concat(e)},"bi-":function(e){return"bootstrap-icons ".concat(e)}},f={o_:"-outlined",r_:"-round",s_:"-sharp"},m={sym_o_:"-outlined",sym_r_:"-rounded",sym_s_:"-sharp"},v=new RegExp("^("+Object.keys(p).join("|")+")"),_=new RegExp("^("+Object.keys(f).join("|")+")"),b=new RegExp("^("+Object.keys(m).join("|")+")"),y=/^[Mm]\s?[-+]?\.?\d/,w=/^img:/,x=/^svguse:/,C=/^ion-/,S=/^(fa-(sharp|solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /;const k=(0,c.L)({name:"QIcon",props:r()(r()({},l.LU),{},{tag:{type:String,default:"i"},name:String,color:String,left:Boolean,right:Boolean}),setup:function(e,t){var i=t.slots,n=(0,a.FN)(),s=n.proxy.$q,r=(0,l.ZP)(e),c=(0,a.Fl)((function(){return"q-icon"+(!0===e.left?" on-left":"")+(!0===e.right?" on-right":"")+(void 0!==e.color?" text-".concat(e.color):"")})),h=(0,a.Fl)((function(){var t,i=e.name;if("none"===i||!i)return{none:!0};if(null!==s.iconMapFn){var n=s.iconMapFn(i);if(void 0!==n){if(void 0===n.icon)return{cls:n.cls,content:void 0!==n.content?n.content:" "};if(i=n.icon,"none"===i||!i)return{none:!0}}}if(!0===y.test(i)){var r=i.split("|"),l=o()(r,2),c=l[0],d=l[1],h=void 0===d?u:d;return{svg:!0,viewBox:h,nodes:c.split("&&").map((function(e){var t=e.split("@@"),i=o()(t,3),n=i[0],s=i[1],r=i[2];return(0,a.h)("path",{style:s,d:n,transform:r})}))}}if(!0===w.test(i))return{img:!0,src:i.substring(4)};if(!0===x.test(i)){var g=i.split("|"),k=o()(g,2),L=k[0],E=k[1],N=void 0===E?u:E;return{svguse:!0,src:L.substring(7),viewBox:N}}var D=" ",T=i.match(v);if(null!==T)t=p[T[1]](i);else if(!0===S.test(i))t=i;else if(!0===C.test(i))t="ionicons ion-".concat(!0===s.platform.is.ios?"ios":"md").concat(i.substring(3));else if(!0===b.test(i)){t="notranslate material-symbols";var A=i.match(b);null!==A&&(i=i.substring(6),t+=m[A[1]]),D=i}else{t="notranslate material-icons";var I=i.match(_);null!==I&&(i=i.substring(2),t+=f[I[1]]),D=i}return{cls:t,content:D}}));return function(){var t={class:c.value,style:r.value,"aria-hidden":"true",role:"presentation"};return!0===h.value.none?(0,a.h)(e.tag,t,(0,d.KR)(i["default"])):!0===h.value.img?(0,a.h)("span",t,(0,d.vs)(i["default"],[(0,a.h)("img",{src:h.value.src})])):!0===h.value.svg?(0,a.h)("span",t,(0,d.vs)(i["default"],[(0,a.h)("svg",{viewBox:h.value.viewBox||"0 0 24 24"},h.value.nodes)])):!0===h.value.svguse?(0,a.h)("span",t,(0,d.vs)(i["default"],[(0,a.h)("svg",{viewBox:h.value.viewBox},[(0,a.h)("use",{"xlink:href":h.value.src})])])):(void 0!==h.value.cls&&(t["class"]+=" "+h.value.cls),(0,a.h)(e.tag,t,(0,d.vs)(i["default"],[h.value.content])))}}})},70335:(e,t,i)=>{"use strict";i.d(t,{Z:()=>p});var n=i(46264),o=i.n(n),s=(i(80676),i(93954),i(58665),i(69665),i(60499)),r=i(59835),a=i(61957),l=i(13902),c={ratio:[String,Number]};function d(e,t){return(0,r.Fl)((function(){var i=Number(e.ratio||(void 0!==t?t.value:void 0));return!0!==isNaN(i)&&i>0?{paddingBottom:"".concat(100/i,"%")}:null}))}var u=i(65987),h=i(22026),g=16/9;const p=(0,u.L)({name:"QImg",props:o()(o()({},c),{},{src:String,srcset:String,sizes:String,alt:String,crossorigin:String,decoding:String,referrerpolicy:String,draggable:Boolean,loading:{type:String,default:"lazy"},fetchpriority:{type:String,default:"auto"},width:String,height:String,initialRatio:{type:[Number,String],default:g},placeholderSrc:String,fit:{type:String,default:"cover"},position:{type:String,default:"50% 50%"},imgClass:String,imgStyle:Object,noSpinner:Boolean,noNativeMenu:Boolean,noTransition:Boolean,spinnerColor:String,spinnerSize:String}),emits:["load","error"],setup:function(e,t){var i=t.slots,n=t.emit,c=(0,s.iH)(e.initialRatio),u=d(e,c),g=null,p=!1,f=[(0,s.iH)(null),(0,s.iH)(S())],m=(0,s.iH)(0),v=(0,s.iH)(!1),_=(0,s.iH)(!1),b=(0,r.Fl)((function(){return"q-img q-img--".concat(!0===e.noNativeMenu?"no-":"","menu")})),y=(0,r.Fl)((function(){return{width:e.width,height:e.height}})),w=(0,r.Fl)((function(){return"q-img__image ".concat(void 0!==e.imgClass?e.imgClass+" ":"")+"q-img__image--with".concat(!0===e.noTransition?"out":"","-transition")})),x=(0,r.Fl)((function(){return o()(o()({},e.imgStyle),{},{objectFit:e.fit,objectPosition:e.position})}));function C(){return e.src||e.srcset||e.sizes?{src:e.src,srcset:e.srcset,sizes:e.sizes}:null}function S(){return void 0!==e.placeholderSrc?{src:e.placeholderSrc}:null}function k(e){null!==g&&(clearTimeout(g),g=null),_.value=!1,null===e?(v.value=!1,f[1^m.value].value=S()):v.value=!0,f[m.value].value=e}function L(e){var t=e.target;!0!==p&&(null!==g&&(clearTimeout(g),g=null),c.value=0===t.naturalHeight?.5:t.naturalWidth/t.naturalHeight,E(t,1))}function E(e,t){!0!==p&&1e3!==t&&(!0===e.complete?N(e):g=setTimeout((function(){g=null,E(e,t+1)}),50))}function N(e){!0!==p&&(m.value=1^m.value,f[m.value].value=null,v.value=!1,_.value=!1,n("load",e.currentSrc||e.src))}function D(e){null!==g&&(clearTimeout(g),g=null),v.value=!1,_.value=!0,f[m.value].value=null,f[1^m.value].value=S(),n("error",e)}function T(t){var i=f[t].value,n=o()({key:"img_"+t,class:w.value,style:x.value,crossorigin:e.crossorigin,decoding:e.decoding,referrerpolicy:e.referrerpolicy,height:e.height,width:e.width,loading:e.loading,fetchpriority:e.fetchpriority,"aria-hidden":"true",draggable:e.draggable},i);return m.value===t?(n["class"]+=" q-img__image--waiting",Object.assign(n,{onLoad:L,onError:D})):n["class"]+=" q-img__image--loaded",(0,r.h)("div",{class:"q-img__container absolute-full",key:"img"+t},(0,r.h)("img",n))}function A(){return!0!==v.value?(0,r.h)("div",{key:"content",class:"q-img__content absolute-full q-anchor--skip"},(0,h.KR)(i[!0===_.value?"error":"default"])):(0,r.h)("div",{key:"loading",class:"q-img__loading absolute-full flex flex-center"},void 0!==i.loading?i.loading():!0===e.noSpinner?void 0:[(0,r.h)(l.Z,{color:e.spinnerColor,size:e.spinnerSize})])}return(0,r.YP)((function(){return C()}),k),k(C()),(0,r.Jd)((function(){p=!0,null!==g&&(clearTimeout(g),g=null)})),function(){var t=[];return null!==u.value&&t.push((0,r.h)("div",{key:"filler",style:u.value})),!0!==_.value&&(null!==f[0].value&&t.push(T(0)),null!==f[1].value&&t.push(T(1))),t.push((0,r.h)(a.uT,{name:"q-transition--fade"},A)),(0,r.h)("div",{class:b.value,style:y.value,role:"img","aria-label":e.alt},t)}}})},13119:(e,t,i)=>{"use strict";i.d(t,{Z:()=>L});var n=i(50001),o=i.n(n),s=i(46264),r=i.n(s),a=(i(80676),i(52519),i(46727),i(72091),i(93954),i(65735),i(58665),i(59835)),l=i(60499),c=i(36169),d=(i(34442),i(91804),i(65716),i(61732),i(33605),i(36519),i(11476),i(56394),i(22725),i(91392),i(60893),i(18964),i(69665),i(51393),i(68280),i(32119),i(61705)),u={date:"####/##/##",datetime:"####/##/## ##:##",time:"##:##",fulltime:"##:##:##",phone:"(###) ### - ####",card:"#### #### #### ####"},h={"#":{pattern:"[\\d]",negate:"[^\\d]"},S:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]"},N:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]"},A:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:function(e){return e.toLocaleUpperCase()}},a:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:function(e){return e.toLocaleLowerCase()}},X:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:function(e){return e.toLocaleUpperCase()}},x:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:function(e){return e.toLocaleLowerCase()}}},g=Object.keys(h);g.forEach((function(e){h[e].regex=new RegExp(h[e].pattern)}));var p=new RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+g.join("")+"])|(.)","g"),f=/[.*+?^${}()|[\]\\]/g,m=String.fromCharCode(1),v={mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean};function _(e,t,i,n){var s,r,c,g,v,_,b=(0,l.iH)(null),y=(0,l.iH)(x());function w(){return!0===e.autogrow||["textarea","text","search","url","tel","password"].includes(e.type)}function x(){if(S(),!0===b.value){var t=T(I(e.modelValue));return!1!==e.fillMask?R(t):t}return e.modelValue}function C(e){if(e-1){for(var o=e-i.length;o>0;o--)t+=m;i=i.slice(0,n)+t+i.slice(n)}return i}function S(){if(b.value=void 0!==e.mask&&0!==e.mask.length&&w(),!1===b.value)return g=void 0,s="",void(r="");var t=void 0===u[e.mask]?e.mask:u[e.mask],i="string"===typeof e.fillMask&&0!==e.fillMask.length?e.fillMask.slice(0,1):"_",n=i.replace(f,"\\$&"),a=[],l=[],d=[],v=!0===e.reverseFillMask,_="",y="";t.replace(p,(function(e,t,i,n,o){if(void 0!==n){var s=h[n];d.push(s),y=s.negate,!0===v&&(l.push("(?:"+y+"+)?("+s.pattern+"+)?(?:"+y+"+)?("+s.pattern+"+)?"),v=!1),l.push("(?:"+y+"+)?("+s.pattern+")?")}else if(void 0!==i)_="\\"+("\\"===i?"":i),d.push(i),a.push("([^"+_+"]+)?"+_+"?");else{var r=void 0!==t?t:o;_="\\"===r?"\\\\\\\\":r.replace(f,"\\\\$&"),d.push(r),a.push("([^"+_+"]+)?"+_+"?")}}));var x=new RegExp("^"+a.join("")+"("+(""===_?".":"[^"+_+"]")+"+)?"+(""===_?"":"["+_+"]*")+"$"),C=l.length-1,S=l.map((function(t,i){return 0===i&&!0===e.reverseFillMask?new RegExp("^"+n+"*"+t):i===C?new RegExp("^"+t+"("+(""===y?".":y)+"+)?"+(!0===e.reverseFillMask?"$":n+"*")):new RegExp("^"+t)}));c=d,g=function(t){var i=x.exec(!0===e.reverseFillMask?t:t.slice(0,d.length+1));null!==i&&(t=i.slice(1).join(""));for(var n=[],s=S.length,r=0,a=t;r-1){var t=!0===e.reverseFillMask?0===d?p.length>g.length?1:0:Math.max(0,p.length-(p===r?0:Math.min(g.length,u)+1))+1:d;c.setSelectionRange(t,t,"forward")}else if(!0===e.reverseFillMask)if(!0===f){var i=Math.max(0,p.length-(p===r?0:Math.min(g.length,u+1)));1===i&&1===d?c.setSelectionRange(i,i,"forward"):E.rightReverse(c,i)}else{var n=p.length-u;c.setSelectionRange(n,n,"backward")}else if(!0===f){var o=Math.max(0,s.indexOf(m),Math.min(g.length,d)-1);E.right(c,o)}else{var a=d-1;E.right(c,a)}else{for(var h=c.selectionEnd,_=d-1,b=v;b<=_&&b=0;n--)if(s[n]===m){t=n,!0===i&&t++;break}if(n<0&&void 0!==s[t]&&s[t]!==m)return E.right(e,0);t>=0&&e.setSelectionRange(t,t,"backward")},right:function(e,t){for(var i=e.value.length,n=Math.min(i,t+1);n<=i;n++){if(s[n]===m){t=n;break}s[n-1]===m&&(t=n)}if(n>i&&void 0!==s[t-1]&&s[t-1]!==m)return E.left(e,i);e.setSelectionRange(t,t,"forward")},leftReverse:function(e,t){for(var i=C(e.value.length),n=Math.max(0,t-1);n>=0;n--){if(i[n-1]===m){t=n;break}if(i[n]===m&&(t=n,0===n))break}if(n<0&&void 0!==i[t]&&i[t]!==m)return E.rightReverse(e,0);t>=0&&e.setSelectionRange(t,t,"backward")},rightReverse:function(e,t){for(var i=e.value.length,n=C(i),o=-1===n.slice(0,t+1).indexOf(m),s=Math.min(i,t+1);s<=i;s++)if(n[s-1]===m){t=s,t>0&&!0===o&&t--;break}if(s>i&&void 0!==n[t-1]&&n[t-1]!==m)return E.leftReverse(e,i);e.setSelectionRange(t,t,"forward")}};function N(e){t("click",e),_=void 0}function D(i){if(t("keydown",i),!0!==(0,d.Wm)(i)){var o=n.value,s=o.selectionStart,r=o.selectionEnd;if(i.shiftKey||(_=void 0),37===i.keyCode||39===i.keyCode){i.shiftKey&&void 0===_&&(_="forward"===o.selectionDirection?s:r);var a=E[(39===i.keyCode?"right":"left")+(!0===e.reverseFillMask?"Reverse":"")];if(i.preventDefault(),a(o,_===s?r:s),i.shiftKey){var l=o.selectionStart;o.setSelectionRange(Math.min(_,l),Math.max(_,l),"forward")}}else 8===i.keyCode&&!0!==e.reverseFillMask&&s===r?(E.left(o,s),o.setSelectionRange(o.selectionStart,r,"backward")):46===i.keyCode&&!0===e.reverseFillMask&&s===r&&(E.rightReverse(o,r),o.setSelectionRange(s,o.selectionEnd,"forward"))}}function T(t){if(void 0===t||null===t||""===t)return"";if(!0===e.reverseFillMask)return A(t);for(var i=c,n=0,o="",s=0;s=0&&n>-1;r--){var a=t[r],l=e[n];if("string"===typeof a)o=a+o,l===a&&n--;else{if(void 0===l||!a.regex.test(l))return o;do{o=(void 0!==a.transform?a.transform(l):l)+o,n--,l=e[n]}while(i===r&&void 0!==l&&a.regex.test(l))}}return o}function I(e){return"string"!==typeof e||void 0===g?"number"===typeof e?g(""+e):e:g(e)}function R(t){return r.length-t.length<=0?t:!0===e.reverseFillMask&&0!==t.length?r.slice(0,-t.length)+t:t+r.slice(t.length)}return{innerValue:y,hasMask:b,moveCursorForPaste:L,updateMaskValue:k,onMaskedKeydown:D,onMaskedClick:N}}var b=i(99256),y=i(87915),w=i(62802),x=i(65987),C=i(91384),S=i(17026),k=i(43251);const L=(0,x.L)({name:"QInput",inheritAttrs:!1,props:r()(r()(r()(r()({},c.Cl),v),b.Fz),{},{modelValue:{required:!1},shadowText:String,type:{type:String,default:"text"},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]}),emits:[].concat(o()(c.HJ),["paste","change","keydown","click","animationend"]),setup:function(e,t){var i,n,o,s=t.emit,d=t.attrs,u=(0,a.FN)(),h=u.proxy,g=h.$q,p={},f=NaN,m=null,v=(0,l.iH)(null),x=(0,b.Do)(e),L=_(e,s,j,v),E=L.innerValue,N=L.hasMask,D=L.moveCursorForPaste,T=L.updateMaskValue,A=L.onMaskedKeydown,I=L.onMaskedClick,R=(0,y.Z)(e,!0),M=(0,a.Fl)((function(){return(0,c.yV)(E.value)})),P=(0,w.Z)(q),O=(0,c.tL)(),F=(0,a.Fl)((function(){return"textarea"===e.type||!0===e.autogrow})),B=(0,a.Fl)((function(){return!0===F.value||["text","search","url","tel","password"].includes(e.type)})),H=(0,a.Fl)((function(){var t=r()(r()({},O.splitAttrs.listeners.value),{},{onInput:q,onPaste:U,onChange:G,onBlur:Y,onFocus:C.sT});return t.onCompositionstart=t.onCompositionupdate=t.onCompositionend=P,!0===N.value&&(t.onKeydown=A,t.onClick=I),!0===e.autogrow&&(t.onAnimationend=$),t})),W=(0,a.Fl)((function(){var t=r()(r()({tabindex:0,"data-autofocus":!0===e.autofocus||void 0,rows:"textarea"===e.type?6:void 0,"aria-label":e.label,name:x.value},O.splitAttrs.attributes.value),{},{id:O.targetUid.value,maxlength:e.maxlength,disabled:!0===e.disable,readonly:!0===e.readonly});return!1===F.value&&(t.type=e.type),!0===e.autogrow&&(t.rows=1),t}));function V(){(0,S.jd)((function(){var e=document.activeElement;null===v.value||v.value===e||null!==e&&e.id===O.targetUid.value||v.value.focus({preventScroll:!0})}))}function z(){null!==v.value&&v.value.select()}function U(t){if(!0===N.value&&!0!==e.reverseFillMask){var i=t.target;D(i,i.selectionStart,i.selectionEnd)}s("paste",t)}function q(t){if(t&&t.target)if("file"!==e.type){var i=t.target.value;if(!0!==t.target.qComposing){if(!0===N.value)T(i,!1,t.inputType);else if(j(i),!0===B.value&&t.target===document.activeElement){var n=t.target,o=n.selectionStart,r=n.selectionEnd;void 0!==o&&void 0!==r&&(0,a.Y3)((function(){t.target===document.activeElement&&0===i.indexOf(t.target.value)&&t.target.setSelectionRange(o,r)}))}!0===e.autogrow&&K()}else p.value=i}else s("update:modelValue",t.target.files)}function $(e){s("animationend",e),K()}function j(t,r){o=function(){m=null,"number"!==e.type&&!0===p.hasOwnProperty("value")&&delete p.value,e.modelValue!==t&&f!==t&&(f=t,!0===r&&(n=!0),s("update:modelValue",t),(0,a.Y3)((function(){f===t&&(f=NaN)}))),o=void 0},"number"===e.type&&(i=!0,p.value=t),void 0!==e.debounce?(null!==m&&clearTimeout(m),p.value=t,m=setTimeout(o,e.debounce)):o()}function K(){requestAnimationFrame((function(){var e=v.value;if(null!==e){var t=e.parentNode.style,i=e.scrollTop,n=!0===g.platform.is.firefox?{}:window.getComputedStyle(e),o=n.overflowY,s=n.maxHeight,r=void 0!==o&&"scroll"!==o;!0===r&&(e.style.overflowY="hidden"),t.marginBottom=e.scrollHeight-1+"px",e.style.height="1px",e.style.height=e.scrollHeight+"px",!0===r&&(e.style.overflowY=parseInt(s,10)0&&(v.value.style.height="auto")})),(0,a.YP)((function(){return e.dense}),(function(){!0===e.autogrow&&(0,a.Y3)(K)})),(0,a.Jd)((function(){Y()})),(0,a.bv)((function(){!0===e.autogrow&&K()})),Object.assign(O,{innerValue:E,fieldClass:(0,a.Fl)((function(){return"q-".concat(!0===F.value?"textarea":"input")+(!0===e.autogrow?" q-textarea--autogrow":"")})),hasShadow:(0,a.Fl)((function(){return"file"!==e.type&&"string"===typeof e.shadowText&&0!==e.shadowText.length})),inputRef:v,emitValue:j,hasValue:M,floatingLabel:(0,a.Fl)((function(){return!0===M.value&&("number"!==e.type||!1===isNaN(E.value))||(0,c.yV)(e.displayValue)})),getControl:function(){return(0,a.h)(!0===F.value?"textarea":"input",r()(r()(r()({ref:v,class:["q-field__native q-placeholder",e.inputClass],style:e.inputStyle},W.value),H.value),"file"!==e.type?{value:X()}:R.value))},getShadowControl:function(){return(0,a.h)("div",{class:"q-field__native q-field__shadow absolute-bottom no-pointer-events"+(!0===F.value?"":" text-no-wrap")},[(0,a.h)("span",{class:"invisible"},X()),(0,a.h)("span",e.shadowText)])}});var Z=(0,c.ZP)(O);return Object.assign(h,{focus:V,select:z,getNativeElement:function(){return v.value}}),(0,k.g)(h,"nativeEl",(function(){return v.value})),Z}})},490:(e,t,i)=>{"use strict";i.d(t,{Z:()=>f});var n=i(38761),o=i.n(n),s=i(46264),r=i.n(s),a=(i(80676),i(86890),i(58665),i(59835)),l=i(60499),c=i(68234),d=i(70945),u=i(65987),h=i(22026),g=i(91384),p=i(61705);const f=(0,u.L)({name:"QItem",props:r()(r()(r()({},c.S),d.$),{},{tag:{type:String,default:"div"},active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean}),emits:["click","keyup"],setup:function(e,t){var i=t.slots,n=t.emit,s=(0,a.FN)(),r=s.proxy.$q,u=(0,c.Z)(e,r),f=(0,d.Z)(),m=f.hasLink,v=f.linkAttrs,_=f.linkClass,b=f.linkTag,y=f.navigateOnClick,w=(0,l.iH)(null),x=(0,l.iH)(null),C=(0,a.Fl)((function(){return!0===e.clickable||!0===m.value||"label"===e.tag})),S=(0,a.Fl)((function(){return!0!==e.disable&&!0===C.value})),k=(0,a.Fl)((function(){return"q-item q-item-type row no-wrap"+(!0===e.dense?" q-item--dense":"")+(!0===u.value?" q-item--dark":"")+(!0===m.value&&null===e.active?_.value:!0===e.active?" q-item--active".concat(void 0!==e.activeClass?" ".concat(e.activeClass):""):"")+(!0===e.disable?" disabled":"")+(!0===S.value?" q-item--clickable q-link cursor-pointer "+(!0===e.manualFocus?"q-manual-focusable":"q-focusable q-hoverable")+(!0===e.focused?" q-manual-focusable--focused":""):"")})),L=(0,a.Fl)((function(){if(void 0===e.insetLevel)return null;var t=!0===r.lang.rtl?"Right":"Left";return o()({},"padding"+t,16+56*e.insetLevel+"px")}));function E(e){!0===S.value&&(null!==x.value&&(!0!==e.qKeyEvent&&document.activeElement===w.value?x.value.focus():document.activeElement===x.value&&w.value.focus()),y(e))}function N(e){if(!0===S.value&&!0===(0,p.So)(e,13)){(0,g.NS)(e),e.qKeyEvent=!0;var t=new MouseEvent("click",e);t.qKeyEvent=!0,w.value.dispatchEvent(t)}n("keyup",e)}function D(){var e=(0,h.Bl)(i["default"],[]);return!0===S.value&&e.unshift((0,a.h)("div",{class:"q-focus-helper",tabindex:-1,ref:x})),e}return function(){var t={ref:w,class:k.value,style:L.value,role:"listitem",onClick:E,onKeyup:N};return!0===S.value?(t.tabindex=e.tabindex||"0",Object.assign(t,v.value)):!0===C.value&&(t["aria-disabled"]="true"),(0,a.h)(b.value,t,D())}}})},33115:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});i(80676),i(65735);var n=i(59835),o=i(65987),s=i(22026);const r=(0,o.L)({name:"QItemLabel",props:{overline:Boolean,caption:Boolean,header:Boolean,lines:[Number,String]},setup:function(e,t){var i=t.slots,o=(0,n.Fl)((function(){return parseInt(e.lines,10)})),r=(0,n.Fl)((function(){return"q-item__label"+(!0===e.overline?" q-item__label--overline text-overline":"")+(!0===e.caption?" q-item__label--caption text-caption":"")+(!0===e.header?" q-item__label--header":"")+(1===o.value?" ellipsis":"")})),a=(0,n.Fl)((function(){return void 0!==e.lines&&o.value>1?{overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":o.value}:null}));return function(){return(0,n.h)("div",{style:a.value,class:r.value},(0,s.KR)(i["default"]))}}})},76749:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});var n=i(59835),o=i(65987),s=i(22026);const r=(0,o.L)({name:"QItemSection",props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},setup:function(e,t){var i=t.slots,o=(0,n.Fl)((function(){return"q-item__section column"+" q-item__section--".concat(!0===e.avatar||!0===e.side||!0===e.thumbnail?"side":"main")+(!0===e.top?" q-item__section--top justify-start":" justify-center")+(!0===e.avatar?" q-item__section--avatar":"")+(!0===e.thumbnail?" q-item__section--thumbnail":"")+(!0===e.noWrap?" q-item__section--nowrap":"")}));return function(){return(0,n.h)("div",{class:o.value},(0,s.KR)(i["default"]))}}})},13246:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});var n=i(46264),o=i.n(n),s=i(59835),r=i(65987),a=i(68234),l=i(22026);const c=(0,r.L)({name:"QList",props:o()(o()({},a.S),{},{bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean,tag:{type:String,default:"div"}}),setup:function(e,t){var i=t.slots,n=(0,s.FN)(),o=(0,a.Z)(e,n.proxy.$q),r=(0,s.Fl)((function(){return"q-list"+(!0===e.bordered?" q-list--bordered":"")+(!0===e.dense?" q-list--dense":"")+(!0===e.separator?" q-list--separator":"")+(!0===o.value?" q-list--dark":"")+(!0===e.padding?" q-list--padding":"")}));return function(){return(0,s.h)(e.tag,{class:r.value},(0,l.KR)(i["default"]))}}})},20249:(e,t,i)=>{"use strict";i.d(t,{Z:()=>p});var n=i(38761),o=i.n(n),s=(i(11476),i(32119),i(93954),i(59835)),r=i(60499),a=i(47506),l=i(71868),c=i(60883),d=i(65987),u=i(43701),h=i(22026),g=i(95439);const p=(0,d.L)({name:"QLayout",props:{container:Boolean,view:{type:String,default:"hhh lpr fff",validator:function(e){return/^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(e.toLowerCase())}},onScroll:Function,onScrollHeight:Function,onResize:Function},setup:function(e,t){var i=t.slots,n=t.emit,d=(0,s.FN)(),p=d.proxy.$q,f=(0,r.iH)(null),m=(0,r.iH)(p.screen.height),v=(0,r.iH)(!0===e.container?0:p.screen.width),_=(0,r.iH)({position:0,direction:"down",inflectionPoint:0}),b=(0,r.iH)(0),y=(0,r.iH)(!0===a.uX.value?0:(0,u.np)()),w=(0,s.Fl)((function(){return"q-layout q-layout--"+(!0===e.container?"containerized":"standard")})),x=(0,s.Fl)((function(){return!1===e.container?{minHeight:p.screen.height+"px"}:null})),C=(0,s.Fl)((function(){return 0!==y.value?o()({},!0===p.lang.rtl?"left":"right","".concat(y.value,"px")):null})),S=(0,s.Fl)((function(){var e;return 0!==y.value?(e={},o()(e,!0===p.lang.rtl?"right":"left",0),o()(e,!0===p.lang.rtl?"left":"right","-".concat(y.value,"px")),o()(e,"width","calc(100% + ".concat(y.value,"px)")),e):null}));function k(t){if(!0===e.container||!0!==document.qScrollPrevented){var i={position:t.position.top,direction:t.direction,directionChanged:t.directionChanged,inflectionPoint:t.inflectionPoint.top,delta:t.delta.top};_.value=i,void 0!==e.onScroll&&n("scroll",i)}}function L(t){var i=t.height,o=t.width,s=!1;m.value!==i&&(s=!0,m.value=i,void 0!==e.onScrollHeight&&n("scrollHeight",i),N()),v.value!==o&&(s=!0,v.value=o),!0===s&&void 0!==e.onResize&&n("resize",t)}function E(e){var t=e.height;b.value!==t&&(b.value=t,N())}function N(){if(!0===e.container){var t=m.value>b.value?(0,u.np)():0;y.value!==t&&(y.value=t)}}var D=null,T={instances:{},view:(0,s.Fl)((function(){return e.view})),isContainer:(0,s.Fl)((function(){return e.container})),rootRef:f,height:m,containerHeight:b,scrollbarWidth:y,totalWidth:(0,s.Fl)((function(){return v.value+y.value})),rows:(0,s.Fl)((function(){var t=e.view.toLowerCase().split(" ");return{top:t[0].split(""),middle:t[1].split(""),bottom:t[2].split("")}})),header:(0,r.qj)({size:0,offset:0,space:!1}),right:(0,r.qj)({size:300,offset:0,space:!1}),footer:(0,r.qj)({size:0,offset:0,space:!1}),left:(0,r.qj)({size:300,offset:0,space:!1}),scroll:_,animate:function(){null!==D?clearTimeout(D):document.body.classList.add("q-body--layout-animate"),D=setTimeout((function(){D=null,document.body.classList.remove("q-body--layout-animate")}),155)},update:function(e,t,i){T[e][t]=i}};if((0,s.JJ)(g.YE,T),(0,u.np)()>0){var A=function(){M=null,P.classList.remove("hide-scrollbar")},I=function(){if(null===M){if(P.scrollHeight>p.screen.height)return;P.classList.add("hide-scrollbar")}else clearTimeout(M);M=setTimeout(A,300)},R=function(e){null!==M&&"remove"===e&&(clearTimeout(M),A()),window["".concat(e,"EventListener")]("resize",I)},M=null,P=document.body;(0,s.YP)((function(){return!0!==e.container?"add":"remove"}),R),!0!==e.container&&R("add"),(0,s.Ah)((function(){R("remove")}))}return function(){var t=(0,h.vs)(i["default"],[(0,s.h)(l.Z,{onScroll:k}),(0,s.h)(c.Z,{onResize:L})]),n=(0,s.h)("div",{class:w.value,style:x.value,ref:!0===e.container?void 0:f,tabindex:-1},t);return!0===e.container?(0,s.h)("div",{class:"q-layout-container overflow-hidden",ref:f},[(0,s.h)(c.Z,{onResize:E}),(0,s.h)("div",{class:"absolute-full",style:C.value},[(0,s.h)("div",{class:"scroll",style:S.value},[n])])]):n}}})},8289:(e,t,i)=>{"use strict";i.d(t,{Z:()=>h});var n=i(46264),o=i.n(n),s=(i(52519),i(80676),i(79481),i(69665),i(59835)),r=i(68234),a=i(20244),l=i(65987),c=i(22026),d={xs:2,sm:4,md:6,lg:10,xl:14};function u(e,t,i){return{transform:!0===t?"translateX(".concat(!0===i.lang.rtl?"-":"","100%) scale3d(").concat(-e,",1,1)"):"scale3d(".concat(e,",1,1)")}}const h=(0,l.L)({name:"QLinearProgress",props:o()(o()(o()({},r.S),a.LU),{},{value:{type:Number,default:0},buffer:Number,color:String,trackColor:String,reverse:Boolean,stripe:Boolean,indeterminate:Boolean,query:Boolean,rounded:Boolean,animationSpeed:{type:[String,Number],default:2100},instantFeedback:Boolean}),setup:function(e,t){var i=t.slots,n=(0,s.FN)(),l=n.proxy,h=(0,r.Z)(e,l.$q),g=(0,a.ZP)(e,d),p=(0,s.Fl)((function(){return!0===e.indeterminate||!0===e.query})),f=(0,s.Fl)((function(){return e.reverse!==e.query})),m=(0,s.Fl)((function(){return o()(o()({},null!==g.value?g.value:{}),{},{"--q-linear-progress-speed":"".concat(e.animationSpeed,"ms")})})),v=(0,s.Fl)((function(){return"q-linear-progress"+(void 0!==e.color?" text-".concat(e.color):"")+(!0===e.reverse||!0===e.query?" q-linear-progress--reverse":"")+(!0===e.rounded?" rounded-borders":"")})),_=(0,s.Fl)((function(){return u(void 0!==e.buffer?e.buffer:1,f.value,l.$q)})),b=(0,s.Fl)((function(){return"with".concat(!0===e.instantFeedback?"out":"","-transition")})),y=(0,s.Fl)((function(){return"q-linear-progress__track absolute-full"+" q-linear-progress__track--".concat(b.value)+" q-linear-progress__track--".concat(!0===h.value?"dark":"light")+(void 0!==e.trackColor?" bg-".concat(e.trackColor):"")})),w=(0,s.Fl)((function(){return u(!0===p.value?1:e.value,f.value,l.$q)})),x=(0,s.Fl)((function(){return"q-linear-progress__model absolute-full"+" q-linear-progress__model--".concat(b.value)+" q-linear-progress__model--".concat(!0===p.value?"in":"","determinate")})),C=(0,s.Fl)((function(){return{width:"".concat(100*e.value,"%")}})),S=(0,s.Fl)((function(){return"q-linear-progress__stripe absolute-".concat(!0===e.reverse?"right":"left")+" q-linear-progress__stripe--".concat(b.value)}));return function(){var t=[(0,s.h)("div",{class:y.value,style:_.value}),(0,s.h)("div",{class:x.value,style:w.value})];return!0===e.stripe&&!1===p.value&&t.push((0,s.h)("div",{class:S.value,style:C.value})),(0,s.h)("div",{class:v.value,style:m.value,role:"progressbar","aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":!0===e.indeterminate?void 0:e.value},(0,c.vs)(i["default"],t))}}})},66933:(e,t,i)=>{"use strict";i.d(t,{Z:()=>d});var n=i(46264),o=i.n(n),s=(i(46727),i(84839),i(45583),i(59835)),r=i(68234),a=i(65987),l=i(22026),c=["horizontal","vertical","cell","none"];const d=(0,a.L)({name:"QMarkupTable",props:o()(o()({},r.S),{},{dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,wrapCells:Boolean,separator:{type:String,default:"horizontal",validator:function(e){return c.includes(e)}}}),setup:function(e,t){var i=t.slots,n=(0,s.FN)(),o=(0,r.Z)(e,n.proxy.$q),a=(0,s.Fl)((function(){return"q-markup-table q-table__container q-table__card"+" q-table--".concat(e.separator,"-separator")+(!0===o.value?" q-table--dark q-table__card--dark q-dark":"")+(!0===e.dense?" q-table--dense":"")+(!0===e.flat?" q-table--flat":"")+(!0===e.bordered?" q-table--bordered":"")+(!0===e.square?" q-table--square":"")+(!1===e.wrapCells?" q-table--no-wrap":"")}));return function(){return(0,s.h)("div",{class:a.value},[(0,s.h)("table",{class:"q-table"},(0,l.KR)(i["default"]))])}}})},56362:(e,t,i)=>{"use strict";i.d(t,{Z:()=>D});var n=i(50001),o=i.n(n),s=i(46264),r=i.n(s),a=(i(52519),i(2514),i(72091),i(58665),i(59835)),l=i(60499),c=i(61957),d=i(74397),u=i(64088),h=i(63842),g=i(68234),p=i(91518),f=i(20431),m=i(16916),v=i(52695),_=i(65987),b=i(2909),y=i(43701),w=i(91384),x=i(22026),C=i(16532),S=i(4173),k=i(70223),L=i(49092),E=i(17026),N=i(49388);const D=(0,_.L)({name:"QMenu",inheritAttrs:!1,props:r()(r()(r()(r()(r()({},d.u),h.vr),g.S),f.D),{},{persistent:Boolean,autoClose:Boolean,separateClosePopup:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,fit:Boolean,cover:Boolean,square:Boolean,anchor:{type:String,validator:N.$},self:{type:String,validator:N.$},offset:{type:Array,validator:N.io},scrollTarget:{default:void 0},touchPosition:Boolean,maxHeight:{type:String,default:null},maxWidth:{type:String,default:null}}),emits:[].concat(o()(h.gH),["click","escapeKey"]),setup:function(e,t){var i,n,o,s=t.slots,_=t.emit,D=t.attrs,T=null,A=(0,a.FN)(),I=A.proxy,R=I.$q,M=(0,l.iH)(null),P=(0,l.iH)(!1),O=(0,a.Fl)((function(){return!0!==e.persistent&&!0!==e.noRouteDismiss})),F=(0,g.Z)(e,R),B=(0,m.Z)(),H=B.registerTick,W=B.removeTick,V=(0,v.Z)(),z=V.registerTimeout,U=(0,f.Z)(e),q=U.transitionProps,$=U.transitionStyle,j=(0,u.Z)(e,fe),K=j.localScrollTarget,G=j.changeScrollEvent,Y=j.unconfigureScrollTarget,X=(0,d.Z)({showing:P}),Z=X.anchorEl,Q=X.canShow,J=(0,h.ZP)({showing:P,canShow:Q,handleShow:he,handleHide:ge,hideOnRouteChange:O,processOnMount:!0}),ee=J.hide,te=(0,p.Z)(A,M,ye,"menu"),ie=te.showPortal,ne=te.hidePortal,oe=te.renderPortal,se={anchorEl:Z,innerRef:M,onClickOutside:function(t){if(!0!==e.persistent&&!0===P.value)return ee(t),("touchstart"===t.type||t.target.classList.contains("q-dialog__backdrop"))&&(0,w.NS)(t),!0}},re=(0,a.Fl)((function(){return(0,N.li)(e.anchor||(!0===e.cover?"center middle":"bottom start"),R.lang.rtl)})),ae=(0,a.Fl)((function(){return!0===e.cover?re.value:(0,N.li)(e.self||"top start",R.lang.rtl)})),le=(0,a.Fl)((function(){return(!0===e.square?" q-menu--square":"")+(!0===F.value?" q-menu--dark q-dark":"")})),ce=(0,a.Fl)((function(){return!0===e.autoClose?{onClick:me}:{}})),de=(0,a.Fl)((function(){return!0===P.value&&!0!==e.persistent}));function ue(){(0,E.jd)((function(){var e=M.value;e&&!0!==e.contains(document.activeElement)&&(e=e.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||e.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||e.querySelector("[autofocus], [data-autofocus]")||e,e.focus({preventScroll:!0}))}))}function he(t){if(T=!1===e.noRefocus?document.activeElement:null,(0,S.i)(ve),ie(),fe(),i=void 0,void 0!==t&&(e.touchPosition||e.contextMenu)){var s=(0,w.FK)(t);if(void 0!==s.left){var r=Z.value.getBoundingClientRect(),l=r.top,c=r.left;i={left:s.left-c,top:s.top-l}}}void 0===n&&(n=(0,a.YP)((function(){return R.screen.width+"|"+R.screen.height+"|"+e.self+"|"+e.anchor+"|"+R.lang.rtl}),be)),!0!==e.noFocus&&document.activeElement.blur(),H((function(){be(),!0!==e.noFocus&&ue()})),z((function(){!0===R.platform.is.ios&&(o=e.autoClose,M.value.click()),be(),ie(!0),_("show",t)}),e.transitionDuration)}function ge(t){W(),ne(),pe(!0),null===T||void 0!==t&&!0===t.qClickOutside||(((t&&0===t.type.indexOf("key")?T.closest('[tabindex]:not([tabindex^="-"])'):void 0)||T).focus(),T=null),z((function(){ne(!0),_("hide",t)}),e.transitionDuration)}function pe(e){i=void 0,void 0!==n&&(n(),n=void 0),!0!==e&&!0!==P.value||((0,S.H)(ve),Y(),(0,L.D)(se),(0,C.k)(_e)),!0!==e&&(T=null)}function fe(){null===Z.value&&void 0===e.scrollTarget||(K.value=(0,y.b0)(Z.value,e.scrollTarget),G(K.value,be))}function me(e){!0!==o?((0,b.AH)(I,e),_("click",e)):o=!1}function ve(t){!0===de.value&&!0!==e.noFocus&&!0!==(0,k.mY)(M.value,t.target)&&ue()}function _e(e){_("escapeKey"),ee(e)}function be(){var t=M.value;null!==t&&null!==Z.value&&(0,N.wq)({el:t,offset:e.offset,anchorEl:Z.value,anchorOrigin:re.value,selfOrigin:ae.value,absoluteOffset:i,fit:e.fit,cover:e.cover,maxHeight:e.maxHeight,maxWidth:e.maxWidth})}function ye(){return(0,a.h)(c.uT,q.value,(function(){return!0===P.value?(0,a.h)("div",r()(r()({role:"menu"},D),{},{ref:M,tabindex:-1,class:["q-menu q-position-engine scroll"+le.value,D["class"]],style:[D.style,$.value]},ce.value),(0,x.KR)(s["default"])):null}))}return(0,a.YP)(de,(function(e){!0===e?((0,C.c)(_e),(0,L.m)(se)):((0,C.k)(_e),(0,L.D)(se))})),(0,a.Jd)(pe),Object.assign(I,{focus:ue,updatePosition:be}),oe}})},2286:(e,t,i)=>{"use strict";i.d(t,{Z:()=>g});var n=i(46264),o=i.n(n),s=(i(34442),i(31719),i(65716),i(46727),i(3452),i(85711),i(51393),i(62590),i(59835)),r=i(11480),a=i(11221),l=i(23175),c=i(65987),d=i(68234),u={radio:r.Z,checkbox:a.Z,toggle:l.Z},h=Object.keys(u);const g=(0,c.L)({name:"QOptionGroup",props:o()(o()({},d.S),{},{modelValue:{required:!0},options:{type:Array,validator:function(e){return e.every((function(e){return"value"in e&&"label"in e}))}},name:String,type:{default:"radio",validator:function(e){return h.includes(e)}},color:String,keepColor:Boolean,dense:Boolean,size:String,leftLabel:Boolean,inline:Boolean,disable:Boolean}),emits:["update:modelValue"],setup:function(e,t){var i=t.emit,n=t.slots,r=(0,s.FN)(),a=r.proxy.$q,l=Array.isArray(e.modelValue);"radio"===e.type?!0===l&&console.error("q-option-group: model should not be array"):!1===l&&console.error("q-option-group: model should be array in your case");var c=(0,d.Z)(e,a),h=(0,s.Fl)((function(){return u[e.type]})),g=(0,s.Fl)((function(){return"q-option-group q-gutter-x-sm"+(!0===e.inline?" q-option-group--inline":"")})),p=(0,s.Fl)((function(){var t={role:"group"};return"radio"===e.type&&(t.role="radiogroup",!0===e.disable&&(t["aria-disabled"]="true")),t}));function f(e){i("update:modelValue",e)}return function(){return(0,s.h)("div",o()({class:g.value},p.value),e.options.map((function(t,i){var o=void 0!==n["label-"+i]?function(){return n["label-"+i](t)}:void 0!==n.label?function(){return n.label(t)}:void 0;return(0,s.h)("div",[(0,s.h)(h.value,{modelValue:e.modelValue,val:t.value,name:void 0===t.name?e.name:t.name,disable:e.disable||t.disable,label:void 0===o?t.label:null,leftLabel:void 0===t.leftLabel?e.leftLabel:t.leftLabel,color:void 0===t.color?e.color:t.color,checkedIcon:t.checkedIcon,uncheckedIcon:t.uncheckedIcon,dark:t.dark||c.value,size:void 0===t.size?e.size:t.size,dense:e.dense,keepColor:void 0===t.keepColor?e.keepColor:t.keepColor,"onUpdate:modelValue":f},o)])})))}}})},69885:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});var n=i(59835),o=i(65987),s=i(22026),r=i(95439);const a=(0,o.L)({name:"QPage",props:{padding:Boolean,styleFn:Function},setup:function(e,t){var i=t.slots,o=(0,n.FN)(),a=o.proxy.$q,l=(0,n.f3)(r.YE,r.qO);if(l===r.qO)return console.error("QPage needs to be a deep child of QLayout"),r.qO;var c=(0,n.f3)(r.Mw,r.qO);if(c===r.qO)return console.error("QPage needs to be child of QPageContainer"),r.qO;var d=(0,n.Fl)((function(){var t=(!0===l.header.space?l.header.size:0)+(!0===l.footer.space?l.footer.size:0);if("function"===typeof e.styleFn){var i=!0===l.isContainer.value?l.containerHeight.value:a.screen.height;return e.styleFn(t,i)}return{minHeight:!0===l.isContainer.value?l.containerHeight.value-t+"px":0===a.screen.height?0!==t?"calc(100vh - ".concat(t,"px)"):"100vh":a.screen.height-t+"px"}})),u=(0,n.Fl)((function(){return"q-page".concat(!0===e.padding?" q-layout-padding":"")}));return function(){return(0,n.h)("main",{class:u.value,style:d.value},(0,s.KR)(i["default"]))}}})},12133:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});var n=i(59835),o=i(65987),s=i(22026),r=i(95439);const a=(0,o.L)({name:"QPageContainer",setup:function(e,t){var i=t.slots,o=(0,n.FN)(),a=o.proxy.$q,l=(0,n.f3)(r.YE,r.qO);if(l===r.qO)return console.error("QPageContainer needs to be child of QLayout"),r.qO;(0,n.JJ)(r.Mw,!0);var c=(0,n.Fl)((function(){var e={};return!0===l.header.space&&(e.paddingTop="".concat(l.header.size,"px")),!0===l.right.space&&(e["padding".concat(!0===a.lang.rtl?"Left":"Right")]="".concat(l.right.size,"px")),!0===l.footer.space&&(e.paddingBottom="".concat(l.footer.size,"px")),!0===l.left.space&&(e["padding".concat(!0===a.lang.rtl?"Right":"Left")]="".concat(l.left.size,"px")),e}));return function(){return(0,n.h)("div",{class:"q-page-container",style:c.value},(0,s.KR)(i["default"]))}}})},80996:(e,t,i)=>{"use strict";i.d(t,{Z:()=>v});var n=i(38761),o=i.n(n),s=i(46264),r=i.n(s),a=(i(46727),i(80676),i(65735),i(3452),i(52519),i(79481),i(58665),i(69665),i(86890),i(59835)),l=i(60499),c=i(68879),d=i(13119),u=i(68234),h=i(36073),g=i(65987),p=i(30321),f=i(61705);function m(e,t){return[!0,!1].includes(e)?e:t}const v=(0,g.L)({name:"QPagination",props:r()(r()({},u.S),{},{modelValue:{type:Number,required:!0},min:{type:[Number,String],default:1},max:{type:[Number,String],required:!0},maxPages:{type:[Number,String],default:0,validator:function(e){return("string"===typeof e?parseInt(e,10):e)>=0}},inputStyle:[Array,String,Object],inputClass:[Array,String,Object],size:String,disable:Boolean,input:Boolean,iconPrev:String,iconNext:String,iconFirst:String,iconLast:String,toFn:Function,boundaryLinks:{type:Boolean,default:null},boundaryNumbers:{type:Boolean,default:null},directionLinks:{type:Boolean,default:null},ellipses:{type:Boolean,default:null},ripple:{type:[Boolean,Object],default:null},round:Boolean,rounded:Boolean,flat:Boolean,outline:Boolean,unelevated:Boolean,push:Boolean,glossy:Boolean,color:{type:String,default:"primary"},textColor:String,activeDesign:{type:String,default:"",values:function(e){return""===e||h.V9.includes(e)}},activeColor:String,activeTextColor:String,gutter:String,padding:{type:String,default:"3px 2px"}}),emits:["update:modelValue"],setup:function(e,t){var i=t.emit,n=(0,a.FN)(),s=n.proxy,g=s.$q,v=(0,u.Z)(e,g),_=(0,a.Fl)((function(){return parseInt(e.min,10)})),b=(0,a.Fl)((function(){return parseInt(e.max,10)})),y=(0,a.Fl)((function(){return parseInt(e.maxPages,10)})),w=(0,a.Fl)((function(){return E.value+" / "+b.value})),x=(0,a.Fl)((function(){return m(e.boundaryLinks,e.input)})),C=(0,a.Fl)((function(){return m(e.boundaryNumbers,!e.input)})),S=(0,a.Fl)((function(){return m(e.directionLinks,e.input)})),k=(0,a.Fl)((function(){return m(e.ellipses,!e.input)})),L=(0,l.iH)(null),E=(0,a.Fl)({get:function(){return e.modelValue},set:function(t){if(t=parseInt(t,10),!e.disable&&!isNaN(t)){var n=(0,p.vX)(t,_.value,b.value);e.modelValue!==n&&i("update:modelValue",n)}}});(0,a.YP)((function(){return"".concat(_.value,"|").concat(b.value)}),(function(){E.value=e.modelValue}));var N=(0,a.Fl)((function(){return"q-pagination row no-wrap items-center"+(!0===e.disable?" disabled":"")})),D=(0,a.Fl)((function(){return e.gutter in h.jA?"".concat(h.jA[e.gutter],"px"):e.gutter||null})),T=(0,a.Fl)((function(){return null!==D.value?"--q-pagination-gutter-parent:-".concat(D.value,";--q-pagination-gutter-child:").concat(D.value):null})),A=(0,a.Fl)((function(){var t=[e.iconFirst||g.iconSet.pagination.first,e.iconPrev||g.iconSet.pagination.prev,e.iconNext||g.iconSet.pagination.next,e.iconLast||g.iconSet.pagination.last];return!0===g.lang.rtl?t.reverse():t})),I=(0,a.Fl)((function(){return{"aria-disabled":!0===e.disable?"true":"false",role:"navigation"}})),R=(0,a.Fl)((function(){return(0,h.xG)(e,"flat")})),M=(0,a.Fl)((function(){var t;return t={},o()(t,R.value,!0),o()(t,"round",e.round),o()(t,"rounded",e.rounded),o()(t,"padding",e.padding),o()(t,"color",e.color),o()(t,"textColor",e.textColor),o()(t,"size",e.size),o()(t,"ripple",null===e.ripple||e.ripple),t})),P=(0,a.Fl)((function(){var t=o()({},R.value,!1);return""!==e.activeDesign&&(t[e.activeDesign]=!0),t})),O=(0,a.Fl)((function(){return r()(r()({},P.value),{},{color:e.activeColor||e.color,textColor:e.activeTextColor||e.textColor})})),F=(0,a.Fl)((function(){var t=Math.max(y.value,1+(k.value?2:0)+(C.value?2:0)),i={pgFrom:_.value,pgTo:b.value,ellipsesStart:!1,ellipsesEnd:!1,boundaryStart:!1,boundaryEnd:!1,marginalStyle:{minWidth:"".concat(Math.max(2,String(b.value).length),"em")}};return y.value&&t_.value+(C.value?1:0)&&(i.ellipsesStart=!0,i.pgFrom++),C.value&&(i.boundaryEnd=!0,i.pgTo--),k.value&&i.pgTo=b.value,icon:A.value[3]},b.value))),!0===S.value&&(i.push(V({key:"bdp",disable:e.disable||e.modelValue<=_.value,icon:A.value[1]},e.modelValue-1)),n.unshift(V({key:"bdn",disable:e.disable||e.modelValue>=b.value,icon:A.value[2]},e.modelValue+1))),!0!==e.input){t=[];var o=F.value,s=o.pgFrom,l=o.pgTo,c=o.marginalStyle;if(!0===F.value.boundaryStart){var u=_.value===e.modelValue;i.push(V({key:"bns",style:c,disable:e.disable,label:_.value},_.value,u))}if(!0===F.value.boundaryEnd){var h=b.value===e.modelValue;n.unshift(V({key:"bne",style:c,disable:e.disable,label:b.value},b.value,h))}!0===F.value.ellipsesStart&&i.push(V({key:"bes",style:c,disable:e.disable,label:"…",ripple:!1},s-1)),!0===F.value.ellipsesEnd&&n.unshift(V({key:"bee",style:c,disable:e.disable,label:"…",ripple:!1},l+1));for(var g=s;g<=l;g++)t.push(V({key:"bpg".concat(g),style:c,disable:e.disable,label:g},g,g===e.modelValue))}return(0,a.h)("div",r()({class:N.value},I.value),[(0,a.h)("div",{class:"q-pagination__content row no-wrap items-center",style:T.value},[].concat(i,[!0===e.input?(0,a.h)(d.Z,r()({class:"inline",style:{width:"".concat(w.value.length/1.5,"em")},type:"number",dense:!0,value:L.value,disable:e.disable,dark:v.value,borderless:!0,inputClass:e.inputClass,inputStyle:e.inputStyle,placeholder:w.value,min:_.value,max:b.value},W.value)):(0,a.h)("div",{class:"q-pagination__middle row justify-center"},t)],n))])}}})},11480:(e,t,i)=>{"use strict";i.d(t,{Z:()=>v});var n=i(46264),o=i.n(n),s=(i(80676),i(52519),i(62590),i(58665),i(69665),i(59835)),r=i(60499),a=i(22857),l=i(68234),c=i(20244),d=i(55917),u=i(99256),h=i(65987),g=i(89480),p=i(91384),f=i(22026),m=(0,s.h)("svg",{key:"svg",class:"q-radio__bg absolute non-selectable",viewBox:"0 0 24 24"},[(0,s.h)("path",{d:"M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12"}),(0,s.h)("path",{class:"q-radio__check",d:"M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6"})]);const v=(0,h.L)({name:"QRadio",props:o()(o()(o()(o()({},l.S),c.LU),u.Fz),{},{modelValue:{required:!0},val:{required:!0},label:String,leftLabel:Boolean,checkedIcon:String,uncheckedIcon:String,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]}),emits:["update:modelValue"],setup:function(e,t){var i=t.slots,n=t.emit,o=(0,s.FN)(),h=o.proxy,v=(0,l.Z)(e,h.$q),_=(0,c.ZP)(e,g.Z),b=(0,r.iH)(null),y=(0,d.Z)(e,b),w=y.refocusTargetEl,x=y.refocusTarget,C=(0,s.Fl)((function(){return(0,r.IU)(e.modelValue)===(0,r.IU)(e.val)})),S=(0,s.Fl)((function(){return"q-radio cursor-pointer no-outline row inline no-wrap items-center"+(!0===e.disable?" disabled":"")+(!0===v.value?" q-radio--dark":"")+(!0===e.dense?" q-radio--dense":"")+(!0===e.leftLabel?" reverse":"")})),k=(0,s.Fl)((function(){var t=void 0===e.color||!0!==e.keepColor&&!0!==C.value?"":" text-".concat(e.color);return"q-radio__inner relative-position "+"q-radio__inner--".concat(!0===C.value?"truthy":"falsy").concat(t)})),L=(0,s.Fl)((function(){return(!0===C.value?e.checkedIcon:e.uncheckedIcon)||null})),E=(0,s.Fl)((function(){return!0===e.disable?-1:e.tabindex||0})),N=(0,s.Fl)((function(){var t={type:"radio"};return void 0!==e.name&&Object.assign(t,{".checked":!0===C.value,"^checked":!0===C.value?"checked":void 0,name:e.name,value:e.val}),t})),D=(0,u.eX)(N);function T(t){void 0!==t&&((0,p.NS)(t),x(t)),!0!==e.disable&&!0!==C.value&&n("update:modelValue",e.val,t)}function A(e){13!==e.keyCode&&32!==e.keyCode||(0,p.NS)(e)}function I(e){13!==e.keyCode&&32!==e.keyCode||T(e)}return Object.assign(h,{set:T}),function(){var t=null!==L.value?[(0,s.h)("div",{key:"icon",class:"q-radio__icon-container absolute-full flex flex-center no-wrap"},[(0,s.h)(a.Z,{class:"q-radio__icon",name:L.value})])]:[m];!0!==e.disable&&D(t,"unshift"," q-radio__native q-ma-none q-pa-none");var n=[(0,s.h)("div",{class:k.value,style:_.value,"aria-hidden":"true"},t)];null!==w.value&&n.push(w.value);var o=void 0!==e.label?(0,f.vs)(i["default"],[e.label]):(0,f.KR)(i["default"]);return void 0!==o&&n.push((0,s.h)("div",{class:"q-radio__label q-anchor--skip"},o)),(0,s.h)("div",{ref:b,class:S.value,tabindex:E.value,role:"radio","aria-label":e.label,"aria-checked":!0===C.value?"true":"false","aria-disabled":!0===e.disable?"true":void 0,onClick:T,onKeydown:A,onKeyup:I},n)}}})},60883:(e,t,i)=>{"use strict";i.d(t,{Z:()=>u});i(80676),i(93954);var n=i(59835),o=i(60499),s=i(47506);function r(){var e=(0,o.iH)(!s.uX.value);return!1===e.value&&(0,n.bv)((function(){e.value=!0})),e}var a=i(65987),l=i(91384),c="undefined"!==typeof ResizeObserver,d=!0===c?{}:{style:"display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;",url:"about:blank"};const u=(0,a.L)({name:"QResizeObserver",props:{debounce:{type:[String,Number],default:100}},emits:["resize"],setup:function(e,t){var i=t.emit;var o,s=null,a={width:-1,height:-1};function u(t){!0===t||0===e.debounce||"0"===e.debounce?h():null===s&&(s=setTimeout(h,e.debounce))}function h(){if(null!==s&&(clearTimeout(s),s=null),o){var e=o,t=e.offsetWidth,n=e.offsetHeight;t===a.width&&n===a.height||(a={width:t,height:n},i("resize",a))}}var g=(0,n.FN)(),p=g.proxy;if(!0===c){var f,m=function e(t){o=p.$el.parentNode,o?(f=new ResizeObserver(u),f.observe(o),h()):!0!==t&&(0,n.Y3)((function(){e(!0)}))};return(0,n.bv)((function(){m()})),(0,n.Jd)((function(){null!==s&&clearTimeout(s),void 0!==f&&(void 0!==f.disconnect?f.disconnect():o&&f.unobserve(o))})),l.ZT}var v,_=function(){null!==s&&(clearTimeout(s),s=null),void 0!==v&&(void 0!==v.removeEventListener&&v.removeEventListener("resize",u,l.rU.passive),v=void 0)},b=function(){_(),o&&o.contentDocument&&(v=o.contentDocument.defaultView,v.addEventListener("resize",u,l.rU.passive),h())},y=r();return(0,n.bv)((function(){(0,n.Y3)((function(){o=p.$el,o&&b()}))})),(0,n.Jd)(_),p.trigger=u,function(){if(!0===y.value)return(0,n.h)("object",{style:d.style,tabindex:-1,type:"text/html",data:d.url,"aria-hidden":"true",onLoad:b})}}})},66663:(e,t,i)=>{"use strict";i.d(t,{Z:()=>x});var n=i(38761),o=i.n(n),s=i(46264),r=i.n(s),a=(i(80676),i(91804),i(65716),i(46727),i(93954),i(58665),i(60499)),l=i(59835),c=i(68234),d=i(60883),u=i(71868),h=i(2873),g=i(65987),p=i(30321),f=i(43701),m=i(22026),v=i(60899),_=["vertical","horizontal"],b={vertical:{offset:"offsetY",scroll:"scrollTop",dir:"down",dist:"y"},horizontal:{offset:"offsetX",scroll:"scrollLeft",dir:"right",dist:"x"}},y={prevent:!0,mouse:!0,mouseAllDir:!0},w=function(e){return e>=250?50:Math.ceil(e/5)};const x=(0,g.L)({name:"QScrollArea",props:r()(r()({},c.S),{},{thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},tabindex:[String,Number],onScroll:Function}),setup:function(e,t){var i,n=t.slots,s=t.emit,g=(0,a.iH)(!1),x=(0,a.iH)(!1),C=(0,a.iH)(!1),S={vertical:(0,a.iH)(0),horizontal:(0,a.iH)(0)},k={vertical:{ref:(0,a.iH)(null),position:(0,a.iH)(0),size:(0,a.iH)(0)},horizontal:{ref:(0,a.iH)(null),position:(0,a.iH)(0),size:(0,a.iH)(0)}},L=(0,l.FN)(),E=L.proxy,N=(0,c.Z)(e,E.$q),D=null,T=(0,a.iH)(null),A=(0,l.Fl)((function(){return"q-scrollarea"+(!0===N.value?" q-scrollarea--dark":"")}));k.vertical.percentage=(0,l.Fl)((function(){var e=k.vertical.size.value-S.vertical.value;if(e<=0)return 0;var t=(0,p.vX)(k.vertical.position.value/e,0,1);return Math.round(1e4*t)/1e4})),k.vertical.thumbHidden=(0,l.Fl)((function(){return!0!==(null===e.visible?C.value:e.visible)&&!1===g.value&&!1===x.value||k.vertical.size.value<=S.vertical.value+1})),k.vertical.thumbStart=(0,l.Fl)((function(){return k.vertical.percentage.value*(S.vertical.value-k.vertical.thumbSize.value)})),k.vertical.thumbSize=(0,l.Fl)((function(){return Math.round((0,p.vX)(S.vertical.value*S.vertical.value/k.vertical.size.value,w(S.vertical.value),S.vertical.value))})),k.vertical.style=(0,l.Fl)((function(){return r()(r()(r()({},e.thumbStyle),e.verticalThumbStyle),{},{top:"".concat(k.vertical.thumbStart.value,"px"),height:"".concat(k.vertical.thumbSize.value,"px")})})),k.vertical.thumbClass=(0,l.Fl)((function(){return"q-scrollarea__thumb q-scrollarea__thumb--v absolute-right"+(!0===k.vertical.thumbHidden.value?" q-scrollarea__thumb--invisible":"")})),k.vertical.barClass=(0,l.Fl)((function(){return"q-scrollarea__bar q-scrollarea__bar--v absolute-right"+(!0===k.vertical.thumbHidden.value?" q-scrollarea__bar--invisible":"")})),k.horizontal.percentage=(0,l.Fl)((function(){var e=k.horizontal.size.value-S.horizontal.value;if(e<=0)return 0;var t=(0,p.vX)(Math.abs(k.horizontal.position.value)/e,0,1);return Math.round(1e4*t)/1e4})),k.horizontal.thumbHidden=(0,l.Fl)((function(){return!0!==(null===e.visible?C.value:e.visible)&&!1===g.value&&!1===x.value||k.horizontal.size.value<=S.horizontal.value+1})),k.horizontal.thumbStart=(0,l.Fl)((function(){return k.horizontal.percentage.value*(S.horizontal.value-k.horizontal.thumbSize.value)})),k.horizontal.thumbSize=(0,l.Fl)((function(){return Math.round((0,p.vX)(S.horizontal.value*S.horizontal.value/k.horizontal.size.value,w(S.horizontal.value),S.horizontal.value))})),k.horizontal.style=(0,l.Fl)((function(){var t;return r()(r()(r()({},e.thumbStyle),e.horizontalThumbStyle),{},(t={},o()(t,!0===E.$q.lang.rtl?"right":"left","".concat(k.horizontal.thumbStart.value,"px")),o()(t,"width","".concat(k.horizontal.thumbSize.value,"px")),t))})),k.horizontal.thumbClass=(0,l.Fl)((function(){return"q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom"+(!0===k.horizontal.thumbHidden.value?" q-scrollarea__thumb--invisible":"")})),k.horizontal.barClass=(0,l.Fl)((function(){return"q-scrollarea__bar q-scrollarea__bar--h absolute-bottom"+(!0===k.horizontal.thumbHidden.value?" q-scrollarea__bar--invisible":"")}));var I=(0,l.Fl)((function(){return!0===k.vertical.thumbHidden.value&&!0===k.horizontal.thumbHidden.value?e.contentStyle:e.contentActiveStyle})),R=[[h.Z,function(e){V(e,"vertical")},void 0,r()({vertical:!0},y)]],M=[[h.Z,function(e){V(e,"horizontal")},void 0,r()({horizontal:!0},y)]];function P(){var e={};return _.forEach((function(t){var i=k[t];e[t+"Position"]=i.position.value,e[t+"Percentage"]=i.percentage.value,e[t+"Size"]=i.size.value,e[t+"ContainerSize"]=S[t].value})),e}var O=(0,v.Z)((function(){var e=P();e.ref=E,s("scroll",e)}),0);function F(e,t,i){if(!1!==_.includes(e)){var n="vertical"===e?f.f3:f.ik;n(T.value,t,i)}else console.error("[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)")}function B(e){var t=e.height,i=e.width,n=!1;S.vertical.value!==t&&(S.vertical.value=t,n=!0),S.horizontal.value!==i&&(S.horizontal.value=i,n=!0),!0===n&&$()}function H(e){var t=e.position,i=!1;k.vertical.position.value!==t.top&&(k.vertical.position.value=t.top,i=!0),k.horizontal.position.value!==t.left&&(k.horizontal.position.value=t.left,i=!0),!0===i&&$()}function W(e){var t=e.height,i=e.width;k.horizontal.size.value!==i&&(k.horizontal.size.value=i,$()),k.vertical.size.value!==t&&(k.vertical.size.value=t,$())}function V(e,t){var n=k[t];if(!0===e.isFirst){if(!0===n.thumbHidden.value)return;i=n.position.value,x.value=!0}else if(!0!==x.value)return;!0===e.isFinal&&(x.value=!1);var o=b[t],s=S[t].value,r=(n.size.value-s)/(s-n.thumbSize.value),a=e.distance[o.dist],l=i+(e.direction===o.dir?1:-1)*a*r;j(l,t)}function z(e,t){var i=k[t];if(!0!==i.thumbHidden.value){var n=e[b[t].offset];if(ni.thumbStart.value+i.thumbSize.value){var o=n-i.thumbSize.value/2;j(o/S[t].value*i.size.value,t)}null!==i.ref.value&&i.ref.value.dispatchEvent(new MouseEvent(e.type,e))}}function U(e){z(e,"vertical")}function q(e){z(e,"horizontal")}function $(){g.value=!0,null!==D&&clearTimeout(D),D=setTimeout((function(){D=null,g.value=!1}),e.delay),void 0!==e.onScroll&&O()}function j(e,t){T.value[b[t].scroll]=e}function K(){C.value=!0}function G(){C.value=!1}var Y=null;return(0,l.YP)((function(){return E.$q.lang.rtl}),(function(e){null!==T.value&&(0,f.ik)(T.value,Math.abs(k.horizontal.position.value)*(!0===e?-1:1))})),(0,l.se)((function(){Y={top:k.vertical.position.value,left:k.horizontal.position.value}})),(0,l.dl)((function(){if(null!==Y){var e=T.value;null!==e&&((0,f.ik)(e,Y.left),(0,f.f3)(e,Y.top))}})),(0,l.Jd)(O.cancel),Object.assign(E,{getScrollTarget:function(){return T.value},getScroll:P,getScrollPosition:function(){return{top:k.vertical.position.value,left:k.horizontal.position.value}},getScrollPercentage:function(){return{top:k.vertical.percentage.value,left:k.horizontal.percentage.value}},setScrollPosition:F,setScrollPercentage:function(e,t,i){F(e,t*(k[e].size.value-S[e].value)*("horizontal"===e&&!0===E.$q.lang.rtl?-1:1),i)}}),function(){return(0,l.h)("div",{class:A.value,onMouseenter:K,onMouseleave:G},[(0,l.h)("div",{ref:T,class:"q-scrollarea__container scroll relative-position fit hide-scrollbar",tabindex:void 0!==e.tabindex?e.tabindex:void 0},[(0,l.h)("div",{class:"q-scrollarea__content absolute",style:I.value},(0,m.vs)(n["default"],[(0,l.h)(d.Z,{debounce:0,onResize:W})])),(0,l.h)(u.Z,{axis:"both",onScroll:H})]),(0,l.h)(d.Z,{debounce:0,onResize:B}),(0,l.h)("div",{class:k.vertical.barClass.value,style:[e.barStyle,e.verticalBarStyle],"aria-hidden":"true",onMousedown:U}),(0,l.h)("div",{class:k.horizontal.barClass.value,style:[e.barStyle,e.horizontalBarStyle],"aria-hidden":"true",onMousedown:q}),(0,l.wy)((0,l.h)("div",{ref:k.vertical.ref,class:k.vertical.thumbClass.value,style:k.vertical.style.value,"aria-hidden":"true"}),R),(0,l.wy)((0,l.h)("div",{ref:k.horizontal.ref,class:k.horizontal.thumbClass.value,style:k.horizontal.style.value,"aria-hidden":"true"}),M)])}}})},71868:(e,t,i)=>{"use strict";i.d(t,{Z:()=>g});var n=i(37167),o=i.n(n),s=i(46264),r=i.n(s),a=(i(46727),i(80676),i(93954),i(58665),i(59835)),l=i(65987),c=i(43701),d=i(91384),u=d.rU.passive,h=["both","horizontal","vertical"];const g=(0,l.L)({name:"QScrollObserver",props:{axis:{type:String,validator:function(e){return h.includes(e)},default:"vertical"},debounce:[String,Number],scrollTarget:{default:void 0}},emits:["scroll"],setup:function(e,t){var i,n,s=t.emit,l={position:{top:0,left:0},direction:"down",directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}},h=null;function g(){null!==h&&h();var t=Math.max(0,(0,c.u3)(i)),n=(0,c.OI)(i),o={top:t-l.position.top,left:n-l.position.left};if(!("vertical"===e.axis&&0===o.top||"horizontal"===e.axis&&0===o.left)){var a=Math.abs(o.top)>=Math.abs(o.left)?o.top<0?"up":"down":o.left<0?"left":"right";l.position={top:t,left:n},l.directionChanged=l.direction!==a,l.delta=o,!0===l.directionChanged&&(l.direction=a,l.inflectionPoint=l.position),s("scroll",r()({},l))}}function p(){i=(0,c.b0)(n,e.scrollTarget),i.addEventListener("scroll",m,u),m(!0)}function f(){void 0!==i&&(i.removeEventListener("scroll",m,u),i=void 0)}function m(t){if(!0===t||0===e.debounce||"0"===e.debounce)g();else if(null===h){var i=e.debounce?[setTimeout(g,e.debounce),clearTimeout]:[requestAnimationFrame(g),cancelAnimationFrame],n=o()(i,2),s=n[0],r=n[1];h=function(){r(s),h=null}}}(0,a.YP)((function(){return e.scrollTarget}),(function(){f(),p()}));var v=(0,a.FN)(),_=v.proxy;return(0,a.YP)((function(){return _.$q.lang.rtl}),g),(0,a.bv)((function(){n=_.$el.parentNode,p()})),(0,a.Jd)((function(){null!==h&&h(),f()})),Object.assign(_,{trigger:m,getPosition:function(){return l}}),d.ZT}})},32259:(e,t,i)=>{"use strict";i.d(t,{Z:()=>M});var n=i(38761),o=i.n(n),s=i(18774),r=i.n(s),a=i(50001),l=i.n(a),c=i(46264),d=i.n(c),u=(i(46727),i(34442),i(80676),i(52519),i(85711),i(51393),i(56072),i(65716),i(91804),i(61732),i(91392),i(46776),i(60893),i(32455),i(69665),i(88554),i(18381),i(72091),i(73417),i(12518),i(33605),i(36519),i(11476),i(56394),i(22725),i(32119),i(93954),i(58665),i(59835)),h=i(60499),g=i(18149),p=i(22857),f=i(57691),m=i(490),v=i(76749),_=i(33115),b=i(56362),y=i(32074),w=i(36169),x=i(92043),C=i(99256),S=i(62802),k=i(65987),L=i(4680),E=i(91384),N=i(30321),D=i(61705),T=i(22026),A=function(e){return["add","add-unique","toggle"].includes(e)},I=".*+?^${}()|[]\\",R=Object.keys(w.Cl);const M=(0,k.L)({name:"QSelect",inheritAttrs:!1,props:d()(d()(d()(d()({},x.t9),C.Fz),w.Cl),{},{modelValue:{required:!0},multiple:Boolean,displayValue:[String,Number],displayValueHtml:Boolean,dropdownIcon:String,options:{type:Array,default:function(){return[]}},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],hideSelected:Boolean,hideDropdownIcon:Boolean,fillInput:Boolean,maxValues:[Number,String],optionsDense:Boolean,optionsDark:{type:Boolean,default:null},optionsSelectedClass:String,optionsHtml:Boolean,optionsCover:Boolean,menuShrink:Boolean,menuAnchor:String,menuSelf:String,menuOffset:Array,popupContentClass:String,popupContentStyle:[String,Array,Object],useInput:Boolean,useChips:Boolean,newValueMode:{type:String,validator:A},mapOptions:Boolean,emitValue:Boolean,inputDebounce:{type:[Number,String],default:500},inputClass:[Array,String,Object],inputStyle:[Array,String,Object],tabindex:{type:[String,Number],default:0},autocomplete:String,transitionShow:String,transitionHide:String,transitionDuration:[String,Number],behavior:{type:String,validator:function(e){return["default","menu","dialog"].includes(e)},default:"default"},virtualScrollItemSize:{type:[Number,String],default:void 0},onNewValue:Function,onFilter:Function}),emits:[].concat(l()(w.HJ),["add","remove","inputValue","newValue","keyup","keypress","keydown","filterAbort"]),setup:function(e,t){var i,n,s,a,c,k,M,P=t.slots,O=t.emit,F=(0,u.FN)(),B=F.proxy,H=B.$q,W=(0,h.iH)(!1),V=(0,h.iH)(!1),z=(0,h.iH)(-1),U=(0,h.iH)(""),q=(0,h.iH)(!1),$=(0,h.iH)(!1),j=null,K=null,G=(0,h.iH)(null),Y=(0,h.iH)(null),X=(0,h.iH)(null),Z=(0,h.iH)(null),Q=(0,h.iH)(null),J=(0,C.Do)(e),ee=(0,S.Z)(it),te=(0,u.Fl)((function(){return Array.isArray(e.options)?e.options.length:0})),ie=(0,u.Fl)((function(){return void 0===e.virtualScrollItemSize?!0===e.optionsDense?24:48:e.virtualScrollItemSize})),ne=(0,x.vp)({virtualScrollLength:te,getVirtualScrollTarget:Qe,getVirtualScrollEl:Ze,virtualScrollItemSizeComputed:ie}),oe=ne.virtualScrollSliceRange,se=ne.virtualScrollSliceSizeComputed,re=ne.localResetVirtualScroll,ae=ne.padVirtualScroll,le=ne.onVirtualScrollEvt,ce=ne.scrollTo,de=ne.setVirtualScrollSize,ue=(0,w.tL)(),he=(0,u.Fl)((function(){var t=!0===e.mapOptions&&!0!==e.multiple,n=void 0===e.modelValue||null===e.modelValue&&!0!==t?[]:!0===e.multiple&&Array.isArray(e.modelValue)?e.modelValue:[e.modelValue];if(!0===e.mapOptions&&!0===Array.isArray(e.options)){var o=!0===e.mapOptions&&void 0!==i?i:[],s=n.map((function(e){return Ue(e,o)}));return null===e.modelValue&&!0===t?s.filter((function(e){return null!==e})):s}return n})),ge=(0,u.Fl)((function(){var t={};return R.forEach((function(i){var n=e[i];void 0!==n&&(t[i]=n)})),t})),pe=(0,u.Fl)((function(){return null===e.optionsDark?ue.isDark.value:e.optionsDark})),fe=(0,u.Fl)((function(){return(0,w.yV)(he.value)})),me=(0,u.Fl)((function(){var t="q-field__input q-placeholder col";return!0===e.hideSelected||0===he.value.length?[t,e.inputClass]:(t+=" q-field__input--padding",void 0===e.inputClass?t:[t,e.inputClass])})),ve=(0,u.Fl)((function(){return(!0===e.virtualScrollHorizontal?"q-virtual-scroll--horizontal":"")+(e.popupContentClass?" "+e.popupContentClass:"")})),_e=(0,u.Fl)((function(){return 0===te.value})),be=(0,u.Fl)((function(){return he.value.map((function(e){return Ie.value(e)})).join(", ")})),ye=(0,u.Fl)((function(){return void 0!==e.displayValue?e.displayValue:be.value})),we=(0,u.Fl)((function(){return!0===e.optionsHtml?function(){return!0}:function(e){return void 0!==e&&null!==e&&!0===e.html}})),xe=(0,u.Fl)((function(){return!0===e.displayValueHtml||void 0===e.displayValue&&(!0===e.optionsHtml||he.value.some(we.value))})),Ce=(0,u.Fl)((function(){return!0===ue.focused.value?e.tabindex:-1})),Se=(0,u.Fl)((function(){var t={tabindex:e.tabindex,role:"combobox","aria-label":e.label,"aria-readonly":!0===e.readonly?"true":"false","aria-autocomplete":!0===e.useInput?"list":"none","aria-expanded":!0===W.value?"true":"false","aria-controls":"".concat(ue.targetUid.value,"_lb")};return z.value>=0&&(t["aria-activedescendant"]="".concat(ue.targetUid.value,"_").concat(z.value)),t})),ke=(0,u.Fl)((function(){return{id:"".concat(ue.targetUid.value,"_lb"),role:"listbox","aria-multiselectable":!0===e.multiple?"true":"false"}})),Le=(0,u.Fl)((function(){return he.value.map((function(e,t){return{index:t,opt:e,html:we.value(e),selected:!0,removeAtIndex:Be,toggleOption:We,tabindex:Ce.value}}))})),Ee=(0,u.Fl)((function(){if(0===te.value)return[];var t=oe.value,i=t.from,n=t.to;return e.options.slice(i,n).map((function(t,n){var o=!0===Re.value(t),s=i+n,r={clickable:!0,active:!1,activeClass:Te.value,manualFocus:!0,focused:!1,disable:o,tabindex:-1,dense:e.optionsDense,dark:pe.value,role:"option",id:"".concat(ue.targetUid.value,"_").concat(s),onClick:function(){We(t)}};return!0!==o&&(!0===$e(t)&&(r.active=!0),z.value===s&&(r.focused=!0),r["aria-selected"]=!0===r.active?"true":"false",!0===H.platform.is.desktop&&(r.onMousemove=function(){!0===W.value&&Ve(s)})),{index:s,opt:t,html:we.value(t),label:Ie.value(t),selected:r.active,focused:r.focused,toggleOption:We,setOptionIndex:Ve,itemProps:r}}))})),Ne=(0,u.Fl)((function(){return void 0!==e.dropdownIcon?e.dropdownIcon:H.iconSet.arrow.dropdown})),De=(0,u.Fl)((function(){return!1===e.optionsCover&&!0!==e.outlined&&!0!==e.standout&&!0!==e.borderless&&!0!==e.rounded})),Te=(0,u.Fl)((function(){return void 0!==e.optionsSelectedClass?e.optionsSelectedClass:void 0!==e.color?"text-".concat(e.color):""})),Ae=(0,u.Fl)((function(){return qe(e.optionValue,"value")})),Ie=(0,u.Fl)((function(){return qe(e.optionLabel,"label")})),Re=(0,u.Fl)((function(){return qe(e.optionDisable,"disable")})),Me=(0,u.Fl)((function(){return he.value.map((function(e){return Ae.value(e)}))})),Pe=(0,u.Fl)((function(){var e={onInput:it,onChange:ee,onKeydown:Xe,onKeyup:Ge,onKeypress:Ye,onFocus:je,onClick:function(e){!0===n&&(0,E.sT)(e)}};return e.onCompositionstart=e.onCompositionupdate=e.onCompositionend=ee,e}));function Oe(t){return!0===e.emitValue?Ae.value(t):t}function Fe(t){if(t>-1&&t=e.maxValues)){var o=e.modelValue.slice();O("add",{index:o.length,value:n}),o.push(n),O("update:modelValue",o)}}function We(t,i){if(!0===ue.editable.value&&void 0!==t&&!0!==Re.value(t)){var o=Ae.value(t);if(!0!==e.multiple)return!0!==i&&(ot(!0===e.fillInput?Ie.value(t):"",!0,!0),vt()),null!==Y.value&&Y.value.focus(),void(0!==he.value.length&&!0===(0,L.xb)(Ae.value(he.value[0]),o)||O("update:modelValue",!0===e.emitValue?o:t));if((!0!==n||!0===q.value)&&ue.focus(),je(),0===he.value.length){var s=!0===e.emitValue?o:t;return O("add",{index:0,value:s}),void O("update:modelValue",!0===e.multiple?[s]:s)}var r=e.modelValue.slice(),a=Me.value.findIndex((function(e){return(0,L.xb)(e,o)}));if(a>-1)O("remove",{index:a,value:r.splice(a,1)[0]});else{if(void 0!==e.maxValues&&r.length>=e.maxValues)return;var l=!0===e.emitValue?o:t;O("add",{index:r.length,value:l}),r.push(l)}O("update:modelValue",r)}}function Ve(e){if(!0===H.platform.is.desktop){var t=e>-1&&e0&&void 0!==arguments[0]?arguments[0]:1,i=arguments.length>1?arguments[1]:void 0;if(!0===W.value){var n=z.value;do{n=(0,N.Uz)(n+t,-1,te.value-1)}while(-1!==n&&n!==z.value&&!0===Re.value(e.options[n]));z.value!==n&&(Ve(n),ce(n),!0!==i&&!0===e.useInput&&!0===e.fillInput&&nt(n>=0?Ie.value(e.options[n]):a))}}function Ue(t,i){var n=function(e){return(0,L.xb)(Ae.value(e),t)};return e.options.find(n)||i.find(n)||t}function qe(e,t){var i=void 0!==e?e:t;return"function"===typeof i?i:function(e){return null!==e&&"object"===r()(e)&&i in e?e[i]:e}}function $e(e){var t=Ae.value(e);return void 0!==Me.value.find((function(e){return(0,L.xb)(e,t)}))}function je(t){!0===e.useInput&&null!==Y.value&&(void 0===t||Y.value===t.target&&t.target.value===be.value)&&Y.value.select()}function Ke(e){!0===(0,D.So)(e,27)&&!0===W.value&&((0,E.sT)(e),vt(),_t()),O("keyup",e)}function Ge(t){var i=t.target.value;if(void 0===t.keyCode)if(t.target.value="",null!==j&&(clearTimeout(j),j=null),_t(),"string"===typeof i&&0!==i.length){var n=i.toLocaleLowerCase(),o=function(t){var i=e.options.find((function(e){return t.value(e).toLocaleLowerCase()===n}));return void 0!==i&&(-1===he.value.indexOf(i)?We(i):vt(),!0)},s=function e(t){!0!==o(Ae)&&!0!==o(Ie)&&!0!==t&&st(i,!0,(function(){return e(!0)}))};s()}else ue.clearValue(t);else Ke(t)}function Ye(e){O("keypress",e)}function Xe(t){if(O("keydown",t),!0!==(0,D.Wm)(t)){var i=0!==U.value.length&&(void 0!==e.newValueMode||void 0!==e.onNewValue),n=!0!==t.shiftKey&&!0!==e.multiple&&(z.value>-1||!0===i);if(27!==t.keyCode)if(9!==t.keyCode||!1!==n){if(void 0!==t.target&&t.target.id===ue.targetUid.value){if(40===t.keyCode&&!0!==ue.innerLoading.value&&!1===W.value)return(0,E.NS)(t),void mt();if(8!==t.keyCode||!0===e.hideSelected||0!==U.value.length){35!==t.keyCode&&36!==t.keyCode||"string"===typeof U.value&&0!==U.value.length||((0,E.NS)(t),z.value=-1,ze(36===t.keyCode?1:-1,e.multiple)),33!==t.keyCode&&34!==t.keyCode||void 0===se.value||((0,E.NS)(t),z.value=Math.max(-1,Math.min(te.value,z.value+(33===t.keyCode?-1:1)*se.value.view)),ze(33===t.keyCode?1:-1,e.multiple)),38!==t.keyCode&&40!==t.keyCode||((0,E.NS)(t),ze(38===t.keyCode?-1:1,e.multiple));var o=te.value;if((void 0===k||M0&&!0!==e.useInput&&void 0!==t.key&&1===t.key.length&&!1===t.altKey&&!1===t.ctrlKey&&!1===t.metaKey&&(32!==t.keyCode||0!==k.length)){!0!==W.value&&mt(t);var s=t.key.toLocaleLowerCase(),r=1===k.length&&k[0]===s;M=Date.now()+1500,!1===r&&((0,E.NS)(t),k+=s);var a=new RegExp("^"+k.split("").map((function(e){return I.indexOf(e)>-1?"\\"+e:e})).join(".*"),"i"),l=z.value;if(!0===r||l<0||!0!==a.test(Ie.value(e.options[l])))do{l=(0,N.Uz)(l+1,-1,o-1)}while(l!==z.value&&(!0===Re.value(e.options[l])||!0!==a.test(Ie.value(e.options[l]))));z.value!==l&&(0,u.Y3)((function(){Ve(l),ce(l),l>=0&&!0===e.useInput&&!0===e.fillInput&&nt(Ie.value(e.options[l]))}))}else if(13===t.keyCode||32===t.keyCode&&!0!==e.useInput&&""===k||9===t.keyCode&&!1!==n)if(9!==t.keyCode&&(0,E.NS)(t),z.value>-1&&z.value [tabindex]:last-child")),ue.focused.value=!1}function gt(e){vt(),!1===ue.focused.value&&O("blur",e),_t()}function pt(){var e=document.activeElement;null!==e&&e.id===ue.targetUid.value||null===Y.value||Y.value===e||Y.value.focus(),de()}function ft(){!0!==V.value&&(z.value=-1,!0===W.value&&(W.value=!1),!1===ue.focused.value&&(null!==K&&(clearTimeout(K),K=null),!0===ue.innerLoading.value&&(O("filterAbort"),ue.innerLoading.value=!1,$.value=!1)))}function mt(t){!0===ue.editable.value&&(!0===n?(ue.onControlFocusin(t),V.value=!0,(0,u.Y3)((function(){ue.focus()}))):ue.focus(),void 0!==e.onFilter?st(U.value):!0===_e.value&&void 0===P["no-option"]||(W.value=!0))}function vt(){V.value=!1,ft()}function _t(){!0===e.useInput&&ot(!0!==e.multiple&&!0===e.fillInput&&0!==he.value.length&&Ie.value(he.value[0])||"",!0,!0)}function bt(t){var i=-1;if(!0===t){if(0!==he.value.length){var n=Ae.value(he.value[0]);i=e.options.findIndex((function(e){return(0,L.xb)(Ae.value(e),n)}))}re(i)}Ve(i)}function yt(e,t){!0===W.value&&!1===ue.innerLoading.value&&(re(-1,!0),(0,u.Y3)((function(){!0===W.value&&!1===ue.innerLoading.value&&(e>t?re():bt(!0))})))}function wt(){!1===V.value&&null!==X.value&&X.value.updatePosition()}function xt(e){void 0!==e&&(0,E.sT)(e),O("popupShow",e),ue.hasPopupOpen=!0,ue.onControlFocusin(e)}function Ct(e){void 0!==e&&(0,E.sT)(e),O("popupHide",e),ue.hasPopupOpen=!1,ue.onControlFocusout(e)}function St(){n=(!0===H.platform.is.mobile||"dialog"===e.behavior)&&("menu"!==e.behavior&&(!0!==e.useInput||(void 0!==P["no-option"]||void 0!==e.onFilter||!1===_e.value))),c=!0===H.platform.is.ios&&!0===n&&!0===e.useInput?"fade":e.transitionShow}return(0,u.YP)(he,(function(t){i=t,!0===e.useInput&&!0===e.fillInput&&!0!==e.multiple&&!0!==ue.innerLoading.value&&(!0!==V.value&&!0!==W.value||!0!==fe.value)&&(!0!==s&&_t(),!0!==V.value&&!0!==W.value||st(""))}),{immediate:!0}),(0,u.YP)((function(){return e.fillInput}),_t),(0,u.YP)(W,bt),(0,u.YP)(te,yt),(0,u.Xn)(St),(0,u.ic)(wt),St(),(0,u.Jd)((function(){null!==j&&clearTimeout(j)})),Object.assign(B,{showPopup:mt,hidePopup:vt,removeAtIndex:Fe,add:He,toggleOption:We,getOptionIndex:function(){return z.value},setOptionIndex:Ve,moveOptionSelection:ze,filter:st,updateMenuPosition:wt,updateInputValue:ot,isOptionSelected:$e,getEmittingOptionValue:Oe,isOptionDisabled:function(){for(var e=arguments.length,t=new Array(e),i=0;i{"use strict";i.d(t,{Z:()=>d});var n=i(46264),o=i.n(n),s=(i(52519),i(59835)),r=i(68234),a=i(65987),l={true:"inset",item:"item-inset","item-thumbnail":"item-thumbnail-inset"},c={xs:2,sm:4,md:8,lg:16,xl:24};const d=(0,a.L)({name:"QSeparator",props:o()(o()({},r.S),{},{spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String}),setup:function(e){var t=(0,s.FN)(),i=(0,r.Z)(e,t.proxy.$q),n=(0,s.Fl)((function(){return!0===e.vertical?"vertical":"horizontal"})),o=(0,s.Fl)((function(){return" q-separator--".concat(n.value)})),a=(0,s.Fl)((function(){return!1!==e.inset?"".concat(o.value,"-").concat(l[e.inset]):""})),d=(0,s.Fl)((function(){return"q-separator".concat(o.value).concat(a.value)+(void 0!==e.color?" bg-".concat(e.color):"")+(!0===i.value?" q-separator--dark":"")})),u=(0,s.Fl)((function(){var t={};if(void 0!==e.size&&(t[!0===e.vertical?"width":"height"]=e.size),!1!==e.spaced){var i=!0===e.spaced?"".concat(c.md,"px"):e.spaced in c?"".concat(c[e.spaced],"px"):e.spaced,n=!0===e.vertical?["Left","Right"]:["Top","Bottom"];t["margin".concat(n[0])]=t["margin".concat(n[1])]=i}return t}));return function(){return(0,s.h)("hr",{class:d.value,style:u.value,"aria-orientation":n.value})}}})},57133:(e,t,i)=>{"use strict";i.d(t,{ZP:()=>u});var n=i(46264),o=i.n(n),s=(i(46727),i(80676),i(52519),i(59835)),r=i(68234),a=i(65987),l=i(22026),c=["text","rect","circle","QBtn","QBadge","QChip","QToolbar","QCheckbox","QRadio","QToggle","QSlider","QRange","QInput","QAvatar"],d=["wave","pulse","pulse-x","pulse-y","fade","blink","none"];const u=(0,a.L)({name:"QSkeleton",props:o()(o()({},r.S),{},{tag:{type:String,default:"div"},type:{type:String,validator:function(e){return c.includes(e)},default:"rect"},animation:{type:String,validator:function(e){return d.includes(e)},default:"wave"},animationSpeed:{type:[String,Number],default:1500},square:Boolean,bordered:Boolean,size:String,width:String,height:String}),setup:function(e,t){var i=t.slots,n=(0,s.FN)(),o=(0,r.Z)(e,n.proxy.$q),a=(0,s.Fl)((function(){var t=void 0!==e.size?[e.size,e.size]:[e.width,e.height];return{"--q-skeleton-speed":"".concat(e.animationSpeed,"ms"),width:t[0],height:t[1]}})),c=(0,s.Fl)((function(){return"q-skeleton q-skeleton--".concat(!0===o.value?"dark":"light"," q-skeleton--type-").concat(e.type)+("none"!==e.animation?" q-skeleton--anim q-skeleton--anim-".concat(e.animation):"")+(!0===e.square?" q-skeleton--square":"")+(!0===e.bordered?" q-skeleton--bordered":"")}));return function(){return(0,s.h)(e.tag,{class:c.value,style:a.value},(0,l.KR)(i["default"]))}}})},69003:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});i(80676),i(93954);var n=i(59835),o=i(61957),s=i(65987);const r=(0,s.L)({name:"QSlideTransition",props:{appear:Boolean,duration:{type:Number,default:300}},emits:["show","hide"],setup:function(e,t){var i,s,r,a,l=t.slots,c=t.emit,d=!1,u=null,h=null;function g(){i&&i(),i=null,d=!1,null!==u&&(clearTimeout(u),u=null),null!==h&&(clearTimeout(h),h=null),void 0!==s&&s.removeEventListener("transitionend",r),r=null}function p(t,n,o){void 0!==n&&(t.style.height="".concat(n,"px")),t.style.transition="height ".concat(e.duration,"ms cubic-bezier(.25, .8, .50, 1)"),d=!0,i=o}function f(e,t){e.style.overflowY=null,e.style.height=null,e.style.transition=null,g(),t!==a&&c(t)}function m(t,i){var n=0;s=t,!0===d?(g(),n=t.offsetHeight===t.scrollHeight?0:void 0):(a="hide",t.style.overflowY="hidden"),p(t,n,i),u=setTimeout((function(){u=null,t.style.height="".concat(t.scrollHeight,"px"),r=function(e){h=null,Object(e)===e&&e.target!==t||f(t,"show")},t.addEventListener("transitionend",r),h=setTimeout(r,1.1*e.duration)}),100)}function v(t,i){var n;s=t,!0===d?g():(a="show",t.style.overflowY="hidden",n=t.scrollHeight),p(t,n,i),u=setTimeout((function(){u=null,t.style.height=0,r=function(e){h=null,Object(e)===e&&e.target!==t||f(t,"hide")},t.addEventListener("transitionend",r),h=setTimeout(r,1.1*e.duration)}),100)}return(0,n.Jd)((function(){!0===d&&g()})),function(){return(0,n.h)(o.uT,{css:!1,appear:e.appear,onEnter:m,onLeave:v},l["default"])}}})},90136:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});var n=i(59835),o=i(65987),s=(0,n.h)("div",{class:"q-space"});const r=(0,o.L)({name:"QSpace",setup:function(){return function(){return s}}})},13902:(e,t,i)=>{"use strict";i.d(t,{Z:()=>l});var n=i(46264),o=i.n(n),s=(i(80676),i(59835)),r=i(8313),a=i(65987);const l=(0,a.L)({name:"QSpinner",props:o()(o()({},r.G),{},{thickness:{type:Number,default:5}}),setup:function(e){var t=(0,r.Z)(e),i=t.cSize,n=t.classes;return function(){return(0,s.h)("svg",{class:n.value+" q-spinner-mat",width:i.value,height:i.value,viewBox:"25 25 50 50"},[(0,s.h)("circle",{class:"path",cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":e.thickness,"stroke-miterlimit":"10"})])}}})},93382:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});var n=i(59835),o=i(8313),s=i(65987),r=[(0,n.h)("rect",{y:"10",width:"15",height:"120",rx:"6"},[(0,n.h)("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),(0,n.h)("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})]),(0,n.h)("rect",{x:"30",y:"10",width:"15",height:"120",rx:"6"},[(0,n.h)("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),(0,n.h)("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})]),(0,n.h)("rect",{x:"60",width:"15",height:"140",rx:"6"},[(0,n.h)("animate",{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),(0,n.h)("animate",{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})]),(0,n.h)("rect",{x:"90",y:"10",width:"15",height:"120",rx:"6"},[(0,n.h)("animate",{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),(0,n.h)("animate",{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})]),(0,n.h)("rect",{x:"120",y:"10",width:"15",height:"120",rx:"6"},[(0,n.h)("animate",{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}),(0,n.h)("animate",{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"})])];const a=(0,s.L)({name:"QSpinnerBars",props:o.G,setup:function(e){var t=(0,o.Z)(e),i=t.cSize,s=t.classes;return function(){return(0,n.h)("svg",{class:s.value,fill:"currentColor",width:i.value,height:i.value,viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg"},r)}}})},9120:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});var n=i(59835),o=i(8313),s=i(65987),r=[(0,n.h)("g",{transform:"translate(-20,-20)"},[(0,n.h)("path",{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"},[(0,n.h)("animateTransform",{attributeName:"transform",type:"rotate",from:"90 50 50",to:"0 50 50",dur:"1s",repeatCount:"indefinite"})])]),(0,n.h)("g",{transform:"translate(20,20) rotate(15 50 50)"},[(0,n.h)("path",{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"},[(0,n.h)("animateTransform",{attributeName:"transform",type:"rotate",from:"0 50 50",to:"90 50 50",dur:"1s",repeatCount:"indefinite"})])])];const a=(0,s.L)({name:"QSpinnerGears",props:o.G,setup:function(e){var t=(0,o.Z)(e),i=t.cSize,s=t.classes;return function(){return(0,n.h)("svg",{class:s.value,width:i.value,height:i.value,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"},r)}}})},8313:(e,t,i)=>{"use strict";i.d(t,{G:()=>s,Z:()=>r});i(80676);var n=i(59835),o=i(20244),s={size:{type:[Number,String],default:"1em"},color:String};function r(e){return{cSize:(0,n.Fl)((function(){return e.size in o.Ok?"".concat(o.Ok[e.size],"px"):e.size})),classes:(0,n.Fl)((function(){return"q-spinner"+(e.color?" text-".concat(e.color):"")}))}}},7498:(e,t,i)=>{"use strict";i.d(t,{Z:()=>g});var n=i(38761),o=i.n(n),s=i(46264),r=i.n(s),a=(i(80676),i(46727),i(79481),i(59835)),l=i(60499),c=i(2873),d=i(68234),u=i(65987),h=i(22026);const g=(0,u.L)({name:"QSplitter",props:r()(r()({},d.S),{},{modelValue:{type:Number,required:!0},reverse:Boolean,unit:{type:String,default:"%",validator:function(e){return["%","px"].includes(e)}},limits:{type:Array,validator:function(e){return 2===e.length&&("number"===typeof e[0]&&"number"===typeof e[1]&&(e[0]>=0&&e[0]<=e[1]))}},emitImmediately:Boolean,horizontal:Boolean,disable:Boolean,beforeClass:[Array,String,Object],afterClass:[Array,String,Object],separatorClass:[Array,String,Object],separatorStyle:[Array,String,Object]}),emits:["update:modelValue"],setup:function(e,t){var i=t.slots,n=t.emit,s=(0,a.FN)(),r=s.proxy.$q,u=(0,d.Z)(e,r),g=(0,l.iH)(null),p={before:(0,l.iH)(null),after:(0,l.iH)(null)},f=(0,a.Fl)((function(){return"q-splitter no-wrap "+"".concat(!0===e.horizontal?"q-splitter--horizontal column":"q-splitter--vertical row")+" q-splitter--".concat(!0===e.disable?"disabled":"workable")+(!0===u.value?" q-splitter--dark":"")})),m=(0,a.Fl)((function(){return!0===e.horizontal?"height":"width"})),v=(0,a.Fl)((function(){return!0!==e.reverse?"before":"after"})),_=(0,a.Fl)((function(){return void 0!==e.limits?e.limits:"%"===e.unit?[10,90]:[50,1/0]}));function b(t){return("%"===e.unit?t:Math.round(t))+e.unit}var y,w,x,C,S,k=(0,a.Fl)((function(){return o()({},v.value,o()({},m.value,b(e.modelValue)))}));function L(t){if(!0===t.isFirst){var i=g.value.getBoundingClientRect()[m.value];return y=!0===e.horizontal?"up":"left",w="%"===e.unit?100:i,x=Math.min(w,_.value[1],Math.max(_.value[0],e.modelValue)),C=(!0!==e.reverse?1:-1)*(!0===e.horizontal?1:!0===r.lang.rtl?-1:1)*("%"===e.unit?0===i?0:100/i:1),void g.value.classList.add("q-splitter--active")}if(!0===t.isFinal)return S!==e.modelValue&&n("update:modelValue",S),void g.value.classList.remove("q-splitter--active");var o=x+C*(t.direction===y?-1:1)*t.distance[!0===e.horizontal?"y":"x"];S=Math.min(w,_.value[1],Math.max(_.value[0],o)),p[v.value].value.style[m.value]=b(S),!0===e.emitImmediately&&e.modelValue!==S&&n("update:modelValue",S)}var E=(0,a.Fl)((function(){var t;return[[c.Z,L,void 0,(t={},o()(t,!0===e.horizontal?"vertical":"horizontal",!0),o()(t,"prevent",!0),o()(t,"stop",!0),o()(t,"mouse",!0),o()(t,"mouseAllDir",!0),t)]]}));function N(e,t){et[1]&&n("update:modelValue",t[1])}return(0,a.YP)((function(){return e.modelValue}),(function(e){N(e,_.value)})),(0,a.YP)((function(){return e.limits}),(function(){(0,a.Y3)((function(){N(e.modelValue,_.value)}))})),function(){var t=[(0,a.h)("div",{ref:p.before,class:["q-splitter__panel q-splitter__before"+(!0===e.reverse?" col":""),e.beforeClass],style:k.value.before},(0,h.KR)(i.before)),(0,a.h)("div",{class:["q-splitter__separator",e.separatorClass],style:e.separatorStyle,"aria-disabled":!0===e.disable?"true":void 0},[(0,h.Jl)("div",{class:"q-splitter__separator-area absolute-full"},(0,h.KR)(i.separator),"sep",!0!==e.disable,(function(){return E.value}))]),(0,a.h)("div",{ref:p.after,class:["q-splitter__panel q-splitter__after"+(!0===e.reverse?"":" col"),e.afterClass],style:k.value.after},(0,h.KR)(i.after))];return(0,a.h)("div",{class:f.value,ref:g},(0,h.vs)(i["default"],t))}}})},84106:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});var n=i(59835),o=i(26120),s=i(65987),r=i(22026);const a=(0,s.L)({name:"QTabPanel",props:o.vZ,setup:function(e,t){var i=t.slots;return function(){return(0,n.h)("div",{class:"q-tab-panel",role:"tabpanel"},(0,r.KR)(i["default"]))}}})},89800:(e,t,i)=>{"use strict";i.d(t,{Z:()=>d});var n=i(46264),o=i.n(n),s=i(59835),r=i(68234),a=i(26120),l=i(65987),c=i(22026);const d=(0,l.L)({name:"QTabPanels",props:o()(o()({},a.t6),r.S),emits:a.K6,setup:function(e,t){var i=t.slots,n=(0,s.FN)(),o=(0,r.Z)(e,n.proxy.$q),l=(0,a.ZP)(),d=l.updatePanelsList,u=l.getPanelContent,h=l.panelDirectives,g=(0,s.Fl)((function(){return"q-tab-panels q-panel-parent"+(!0===o.value?" q-tab-panels--dark q-dark":"")}));return function(){return d(i),(0,c.Jl)("div",{class:g.value},u(),"pan",e.swipeable,(function(){return h.value}))}}})},84277:(e,t,i)=>{"use strict";i.d(t,{Z:()=>ee});var n=i(50001),o=i.n(n),s=i(46264),r=i.n(s),a=(i(91804),i(65716),i(61732),i(46727),i(52519),i(84839),i(45583),i(56072),i(60893),i(58839),i(86890),i(65735),i(51393),i(62590),i(58665),i(69665),i(79481),i(59835)),l=i(60499),c=i(21682),d=i(50926),u=i(22857),h=(i(80676),i(85711),i(13246)),g=i(66933);function p(e,t){return(0,a.h)("div",e,[(0,a.h)("table",{class:"q-table"},t)])}var f=i(92043),m=i(65987),v=i(43701),_=i(91384),b=i(22026),y={list:h.Z,table:g.Z},w=["list","table","__qtable"];const x=(0,m.L)({name:"QVirtualScroll",props:r()(r()({},f.t9),{},{type:{type:String,default:"list",validator:function(e){return w.includes(e)}},items:{type:Array,default:function(){return[]}},itemsFn:Function,itemsSize:Number,scrollTarget:{default:void 0}}),setup:function(e,t){var i,n=t.slots,o=t.attrs,s=(0,l.iH)(null),c=(0,a.Fl)((function(){return e.itemsSize>=0&&void 0!==e.itemsFn?parseInt(e.itemsSize,10):Array.isArray(e.items)?e.items.length:0})),d=(0,f.vp)({virtualScrollLength:c,getVirtualScrollTarget:k,getVirtualScrollEl:S}),u=d.virtualScrollSliceRange,h=d.localResetVirtualScroll,g=d.padVirtualScroll,m=d.onVirtualScrollEvt,w=(0,a.Fl)((function(){if(0===c.value)return[];var t=function(e,t){return{index:u.value.from+t,item:e}};return void 0===e.itemsFn?e.items.slice(u.value.from,u.value.to).map(t):e.itemsFn(u.value.from,u.value.to-u.value.from).map(t)})),x=(0,a.Fl)((function(){return"q-virtual-scroll q-virtual-scroll"+(!0===e.virtualScrollHorizontal?"--horizontal":"--vertical")+(void 0!==e.scrollTarget?"":" scroll")})),C=(0,a.Fl)((function(){return void 0!==e.scrollTarget?{}:{tabindex:0}}));function S(){return s.value.$el||s.value}function k(){return i}function L(){i=(0,v.b0)(S(),e.scrollTarget),i.addEventListener("scroll",m,_.rU.passive)}function E(){void 0!==i&&(i.removeEventListener("scroll",m,_.rU.passive),i=void 0)}function N(){var t=g("list"===e.type?"div":"tbody",w.value.map(n["default"]));return void 0!==n.before&&(t=n.before().concat(t)),(0,b.vs)(n.after,t)}return(0,a.YP)(c,(function(){h()})),(0,a.YP)((function(){return e.scrollTarget}),(function(){E(),L()})),(0,a.wF)((function(){h()})),(0,a.bv)((function(){L()})),(0,a.dl)((function(){L()})),(0,a.se)((function(){E()})),(0,a.Jd)((function(){E()})),function(){if(void 0!==n["default"])return"__qtable"===e.type?p({ref:s,class:"q-table__middle "+x.value},N()):(0,a.h)(y[e.type],r()(r()({},o),{},{ref:s,class:[o["class"],x.value]},C.value),N);console.error("QVirtualScroll: default scoped slot is required for rendering")}}});var C=i(32259),S=i(8289),k=i(11221),L=i(68879),E=i(68234),N=i(93929),D=i(37167),T=i.n(D);i(18381),i(12518);function A(e,t){return new Date(e)-new Date(t)}var I=i(4680),R={sortMethod:Function,binaryStateSort:Boolean,columnSortOrder:{type:String,validator:function(e){return"ad"===e||"da"===e},default:"ad"}};function M(e,t,i,n){var o=(0,a.Fl)((function(){var e=t.value.sortBy;return e&&i.value.find((function(t){return t.name===e}))||null})),s=(0,a.Fl)((function(){return void 0!==e.sortMethod?e.sortMethod:function(e,t,n){var o=i.value.find((function(e){return e.name===t}));if(void 0===o||void 0===o.field)return e;var s=!0===n?-1:1,r="function"===typeof o.field?function(e){return o.field(e)}:function(e){return e[o.field]};return e.sort((function(e,t){var i=r(e),n=r(t);if(null===i||void 0===i)return-1*s;if(null===n||void 0===n)return 1*s;if(void 0!==o.sort)return o.sort(i,n,e,t)*s;if(!0===(0,I.hj)(i)&&!0===(0,I.hj)(n))return(i-n)*s;if(!0===(0,I.J_)(i)&&!0===(0,I.J_)(n))return A(i,n)*s;if("boolean"===typeof i&&"boolean"===typeof n)return(i-n)*s;var a=[i,n].map((function(e){return(e+"").toLocaleString().toLowerCase()})),l=T()(a,2);return i=l[0],n=l[1],i0&&void 0!==arguments[0]?arguments[0]:{};(0,a.Y3)((function(){n("request",{pagination:e.pagination||s.value,filter:e.filter||i.filter,getCellValue:t})}))}function h(e,t){var a=B(r()(r()({},s.value),e));!0!==F(s.value,a)?!0!==c.value?void 0!==i.pagination&&void 0!==i["onUpdate:pagination"]?n("update:pagination",a):o.value=a:d(a):!0===c.value&&!0===t&&d(a)}return{innerPagination:o,computedPagination:s,isServerSide:c,requestServerInteraction:u,setPagination:h}}function V(e,t,i,n,o,s){var l=e.props,c=e.emit,d=e.proxy.$q,u=(0,a.Fl)((function(){return!0===n.value?i.value.rowsNumber||0:s.value})),h=(0,a.Fl)((function(){var e=i.value,t=e.page,n=e.rowsPerPage;return(t-1)*n})),g=(0,a.Fl)((function(){var e=i.value,t=e.page,n=e.rowsPerPage;return t*n})),p=(0,a.Fl)((function(){return 1===i.value.page})),f=(0,a.Fl)((function(){return 0===i.value.rowsPerPage?1:Math.max(1,Math.ceil(u.value/i.value.rowsPerPage))})),m=(0,a.Fl)((function(){return 0===g.value||i.value.page>=f.value})),v=(0,a.Fl)((function(){var e=l.rowsPerPageOptions.includes(t.value.rowsPerPage)?l.rowsPerPageOptions:[t.value.rowsPerPage].concat(l.rowsPerPageOptions);return e.map((function(e){return{label:0===e?d.lang.table.allRows:""+e,value:e}}))}));function _(){o({page:1})}function b(){var e=i.value.page;e>1&&o({page:e-1})}function y(){var e=i.value,t=e.page,n=e.rowsPerPage;g.value>0&&t*nCe.value&&(t=t.slice(0,Ce.value)):t=t.slice(xe.value,Ce.value)),t})),ie=q(e,n,te,_),ne=ie.hasSelectionMode,oe=ie.singleSelection,se=ie.multipleSelection,re=ie.allRowsSelected,ae=ie.someRowsSelected,le=ie.rowsSelectedNumber,ce=ie.isRowSelected,de=ie.clearSelection,ue=ie.updateSelection,he=X(e,P,ne),ge=he.colList,pe=he.computedCols,fe=he.computedColsMap,me=he.computedColspan,ve=M(e,P,ge,H),_e=ve.columnToSort,be=ve.computedSortMethod,ye=ve.sort,we=V(o,R,P,F,H,ee),xe=we.firstRowIndex,Ce=we.lastRowIndex,Se=we.isFirstPage,ke=we.isLastPage,Le=we.pagesNumber,Ee=we.computedRowsPerPageOptions,Ne=we.computedRowsNumber,De=we.firstPage,Te=we.prevPage,Ae=we.nextPage,Ie=we.lastPage,Re=(0,a.Fl)((function(){return 0===te.value.length})),Me=(0,a.Fl)((function(){var t={};return f.If.forEach((function(i){t[i]=e[i]})),void 0===t.virtualScrollItemSize&&(t.virtualScrollItemSize=!0===e.dense?28:48),t}));function Pe(){!0===w.value&&y.value.reset()}function Oe(){if(!0===e.grid)return st();var t=!0!==e.hideHeader?Xe:null;if(!0===w.value){var n=i["top-row"],o=i["bottom-row"],s={default:function(e){return We(e.item,i.body,e.index)}};if(void 0!==n){var l=(0,a.h)("tbody",n({cols:pe.value}));s.before=null===t?function(){return l}:function(){return[t()].concat(l)}}else null!==t&&(s.before=t);return void 0!==o&&(s.after=function(){return(0,a.h)("tbody",o({cols:pe.value}))}),(0,a.h)(x,r()(r()({ref:y,class:e.tableClass,style:e.tableStyle},Me.value),{},{scrollTarget:e.virtualScrollTarget,items:te.value,type:"__qtable",tableColspan:me.value,onVirtualScroll:Be}),s)}var c=[Ve()];return null!==t&&c.unshift(t()),p({class:["q-table__middle scroll",e.tableClass],style:e.tableStyle},c)}function Fe(t,i){if(null===y.value){t=parseInt(t,10);var o=b.value.querySelector("tbody tr:nth-of-type(".concat(t+1,")"));if(null!==o){var s=b.value.querySelector(".q-table__middle.scroll"),r=o.offsetTop-e.virtualScrollStickySizeStart,a=r0,c="q-table__top relative-position row items-center";return void 0!==n?(0,a.h)("div",{class:c},[n(Ke.value)]):(!0===l?t=r(Ke.value).slice():(t=[],void 0!==o?t.push((0,a.h)("div",{class:"q-table__control"},[o(Ke.value)])):e.title&&t.push((0,a.h)("div",{class:"q-table__control"},[(0,a.h)("div",{class:["q-table__title",e.titleClass]},e.title)]))),void 0!==s&&(t.push((0,a.h)("div",{class:"q-table__separator col"})),t.push((0,a.h)("div",{class:"q-table__control"},[s(Ke.value)]))),0!==t.length?(0,a.h)("div",{class:c},t):void 0)}var Ye=(0,a.Fl)((function(){return!0===ae.value?null:re.value}));function Xe(){var t=Ze();return!0===e.loading&&void 0===i.loading&&t.push((0,a.h)("tr",{class:"q-table__progress"},[(0,a.h)("th",{class:"relative-position",colspan:me.value},He())])),(0,a.h)("thead",t)}function Ze(){var t=i.header,n=i["header-cell"];if(void 0!==t)return t(Qe({header:!0})).slice();var o=pe.value.map((function(e){var t=i["header-cell-".concat(e.name)],o=void 0!==t?t:n,s=Qe({col:e});return void 0!==o?o(s):(0,a.h)(c.Z,{key:e.name,props:s},(function(){return e.label}))}));if(!0===oe.value&&!0!==e.grid)o.unshift((0,a.h)("th",{class:"q-table--col-auto-width"}," "));else if(!0===se.value){var s=i["header-selection"],r=void 0!==s?s(Qe({})):[(0,a.h)(k.Z,{color:e.color,modelValue:Ye.value,dark:h.value,dense:e.dense,"onUpdate:modelValue":Je})];o.unshift((0,a.h)("th",{class:"q-table--col-auto-width"},r))}return[(0,a.h)("tr",{class:e.tableHeaderClass,style:e.tableHeaderStyle},o)]}function Qe(t){return Object.assign(t,{cols:pe.value,sort:ye,colsMap:fe.value,color:e.color,dark:h.value,dense:e.dense}),!0===se.value&&(0,Z.g)(t,"selected",(function(){return Ye.value}),Je),t}function Je(e){!0===ae.value&&(e=!1),ue(te.value.map(_.value),te.value,e)}var et=(0,a.Fl)((function(){var t=[e.iconFirstPage||s.iconSet.table.firstPage,e.iconPrevPage||s.iconSet.table.prevPage,e.iconNextPage||s.iconSet.table.nextPage,e.iconLastPage||s.iconSet.table.lastPage];return!0===s.lang.rtl?t.reverse():t}));function tt(){if(!0!==e.hideBottom){if(!0===Re.value){if(!0===e.hideNoData)return;var t=!0===e.loading?e.loadingLabel||s.lang.table.loading:e.filter?e.noResultsLabel||s.lang.table.noResults:e.noDataLabel||s.lang.table.noData,n=i["no-data"],o=void 0!==n?[n({message:t,icon:s.iconSet.table.warning,filter:e.filter})]:[(0,a.h)(u.Z,{class:"q-table__bottom-nodata-icon",name:s.iconSet.table.warning}),t];return(0,a.h)("div",{class:Q+" q-table__bottom--nodata"},o)}var r=i.bottom;if(void 0!==r)return(0,a.h)("div",{class:Q},[r(Ke.value)]);var l=!0!==e.hideSelectedBanner&&!0===ne.value&&le.value>0?[(0,a.h)("div",{class:"q-table__control"},[(0,a.h)("div",[(e.selectedRowsLabel||s.lang.table.selectedRecords)(le.value)])])]:[];return!0!==e.hidePagination?(0,a.h)("div",{class:Q+" justify-end"},nt(l)):0!==l.length?(0,a.h)("div",{class:Q},l):void 0}}function it(e){H({page:1,rowsPerPage:e.value})}function nt(t){var n,o=P.value.rowsPerPage,l=e.paginationLabel||s.lang.table.pagination,c=i.pagination,d=e.rowsPerPageOptions.length>1;if(t.push((0,a.h)("div",{class:"q-table__separator col"})),!0===d&&t.push((0,a.h)("div",{class:"q-table__control"},[(0,a.h)("span",{class:"q-table__bottom-item"},[e.rowsPerPageLabel||s.lang.table.recordsPerPage]),(0,a.h)(C.Z,{class:"q-table__select inline q-table__bottom-item",color:e.color,modelValue:o,options:Ee.value,displayValue:0===o?s.lang.table.allRows:o,dark:h.value,borderless:!0,dense:!0,optionsDense:!0,optionsCover:!0,"onUpdate:modelValue":it})])),void 0!==c)n=c(Ke.value);else if(n=[(0,a.h)("span",0!==o?{class:"q-table__bottom-item"}:{},[o?l(xe.value+1,Math.min(Ce.value,Ne.value),Ne.value):l(1,ee.value,Ne.value)])],0!==o&&Le.value>1){var u={color:e.color,round:!0,dense:!0,flat:!0};!0===e.dense&&(u.size="sm"),Le.value>2&&n.push((0,a.h)(L.Z,r()(r()({key:"pgFirst"},u),{},{icon:et.value[0],disable:Se.value,onClick:De}))),n.push((0,a.h)(L.Z,r()(r()({key:"pgPrev"},u),{},{icon:et.value[1],disable:Se.value,onClick:Te})),(0,a.h)(L.Z,r()(r()({key:"pgNext"},u),{},{icon:et.value[2],disable:ke.value,onClick:Ae}))),Le.value>2&&n.push((0,a.h)(L.Z,r()(r()({key:"pgLast"},u),{},{icon:et.value[3],disable:ke.value,onClick:Ie})))}return t.push((0,a.h)("div",{class:"q-table__control"},n)),t}function ot(){var t=!0===e.gridHeader?[(0,a.h)("table",{class:"q-table"},[Xe(a.h)])]:!0===e.loading&&void 0===i.loading?He(a.h):void 0;return(0,a.h)("div",{class:"q-table__middle"},t)}function st(){var t=void 0!==i.item?i.item:function(t){var o=t.cols.map((function(e){return(0,a.h)("div",{class:"q-table__grid-item-row"},[(0,a.h)("div",{class:"q-table__grid-item-title"},[e.label]),(0,a.h)("div",{class:"q-table__grid-item-value"},[e.value])])}));if(!0===ne.value){var s=i["body-selection"],r=void 0!==s?s(t):[(0,a.h)(k.Z,{modelValue:t.selected,color:e.color,dark:h.value,dense:e.dense,"onUpdate:modelValue":function(e,i){ue([t.key],[t.row],e,i)}})];o.unshift((0,a.h)("div",{class:"q-table__grid-item-row"},r),(0,a.h)(d.Z,{dark:h.value}))}var l={class:["q-table__grid-item-card"+D.value,e.cardClass],style:e.cardStyle};return void 0===e.onRowClick&&void 0===e.onRowDblclick||(l["class"][0]+=" cursor-pointer",void 0!==e.onRowClick&&(l.onClick=function(e){n("RowClick",e,t.row,t.pageIndex)}),void 0!==e.onRowDblclick&&(l.onDblclick=function(e){n("RowDblclick",e,t.row,t.pageIndex)})),(0,a.h)("div",{class:"q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3"+(!0===t.selected?" q-table__grid-item--selected":"")},[(0,a.h)("div",l,o)])};return(0,a.h)("div",{class:["q-table__grid-content row",e.cardContainerClass],style:e.cardContainerStyle},te.value.map((function(e,i){return t(ze({key:_.value(e),row:e,pageIndex:i}))})))}return Object.assign(o.proxy,{requestServerInteraction:B,setPagination:H,firstPage:De,prevPage:Te,nextPage:Ae,lastPage:Ie,isRowSelected:ce,clearSelection:de,isRowExpanded:j,setExpanded:K,sort:ye,resetVirtualScroll:Pe,scrollTo:Fe,getCellValue:je}),(0,Z.K)(o.proxy,{filteredSortedRows:function(){return J.value},computedRows:function(){return te.value},computedRowsNumber:function(){return Ne.value}}),function(){var t=[Ge()],n={ref:b,class:A.value};return!0===e.grid?t.push(ot()):Object.assign(n,{class:[n["class"],e.cardClass],style:e.cardStyle}),t.push(Oe(),tt()),!0===e.loading&&void 0!==i.loading&&t.push(i.loading()),(0,a.h)("div",n,t)}}})},67220:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});var n=i(59835),o=i(65987),s=i(22026);const r=(0,o.L)({name:"QTd",props:{props:Object,autoWidth:Boolean,noHover:Boolean},setup:function(e,t){var i=t.slots,o=(0,n.FN)(),r=(0,n.Fl)((function(){return"q-td"+(!0===e.autoWidth?" q-table--col-auto-width":"")+(!0===e.noHover?" q-td--no-hover":"")+" "}));return function(){if(void 0===e.props)return(0,n.h)("td",{class:r.value},(0,s.KR)(i["default"]));var t=o.vnode.key,a=(void 0!==e.props.colsMap?e.props.colsMap[t]:null)||e.props.col;if(void 0!==a){var l=e.props.row;return(0,n.h)("td",{class:r.value+a.__tdClass(l),style:a.__tdStyle(l)},(0,s.KR)(i["default"]))}}}})},21682:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});i(58839);var n=i(59835),o=i(22857),s=i(65987),r=i(22026);const a=(0,s.L)({name:"QTh",props:{props:Object,autoWidth:Boolean},emits:["click"],setup:function(e,t){var i=t.slots,s=t.emit,a=(0,n.FN)(),l=a.proxy.$q,c=function(e){s("click",e)};return function(){if(void 0===e.props)return(0,n.h)("th",{class:!0===e.autoWidth?"q-table--col-auto-width":"",onClick:c},(0,r.KR)(i["default"]));var t,s,d=a.vnode.key;if(d){if(t=e.props.colsMap[d],void 0===t)return}else t=e.props.col;if(!0===t.sortable){var u="right"===t.align?"unshift":"push";s=(0,r.Bl)(i["default"],[]),s[u]((0,n.h)(o.Z,{class:t.__iconClass,name:l.iconSet.table.arrowUp}))}else s=(0,r.KR)(i["default"]);var h={class:t.__thClass+(!0===e.autoWidth?" q-table--col-auto-width":""),style:t.headerStyle,onClick:function(i){!0===t.sortable&&e.props.sort(t),c(i)}};return(0,n.h)("th",h,s)}}})},31233:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});var n=i(59835),o=i(65987),s=i(22026);const r=(0,o.L)({name:"QTr",props:{props:Object,noHover:Boolean},setup:function(e,t){var i=t.slots,o=(0,n.Fl)((function(){return"q-tr"+(void 0===e.props||!0===e.props.header?"":" "+e.props.__trClass)+(!0===e.noHover?" q-tr--no-hover":"")}));return function(){return(0,n.h)("tr",{class:o.value},(0,s.KR)(i["default"]))}}})},70900:(e,t,i)=>{"use strict";i.d(t,{Z:()=>y});var n=i(46264),o=i.n(n),s=(i(80676),i(58665),i(62590),i(34464),i(65716),i(59437),i(69665),i(59835)),r=i(60499),a=i(22857),l=i(51136),c=i(22026),d=i(61705),u=i(95439),h=i(91384),g=i(50796),p=i(4680),f=0,m=["click","keydown"],v={icon:String,label:[Number,String],alert:[Boolean,String],alertIcon:String,name:{type:[Number,String],default:function(){return"t_".concat(f++)}},noCaps:Boolean,tabindex:[String,Number],disable:Boolean,contentClass:String,ripple:{type:[Boolean,Object],default:!0}};function _(e,t,i,n){var f=(0,s.f3)(u.Nd,u.qO);if(f===u.qO)return console.error("QTab/QRouteTab component needs to be child of QTabs"),u.qO;var m=(0,s.FN)(),v=m.proxy,_=(0,r.iH)(null),b=(0,r.iH)(null),y=(0,r.iH)(null),w=(0,s.Fl)((function(){return!0!==e.disable&&!1!==e.ripple&&Object.assign({keyCodes:[13,32],early:!0},!0===e.ripple?{}:e.ripple)})),x=(0,s.Fl)((function(){return f.currentModel.value===e.name})),C=(0,s.Fl)((function(){return"q-tab relative-position self-stretch flex flex-center text-center"+(!0===x.value?" q-tab--active"+(f.tabProps.value.activeClass?" "+f.tabProps.value.activeClass:"")+(f.tabProps.value.activeColor?" text-".concat(f.tabProps.value.activeColor):"")+(f.tabProps.value.activeBgColor?" bg-".concat(f.tabProps.value.activeBgColor):""):" q-tab--inactive")+(e.icon&&e.label&&!1===f.tabProps.value.inlineLabel?" q-tab--full":"")+(!0===e.noCaps||!0===f.tabProps.value.noCaps?" q-tab--no-caps":"")+(!0===e.disable?" disabled":" q-focusable q-hoverable cursor-pointer")+(void 0!==n?n.linkClass.value:"")})),S=(0,s.Fl)((function(){return"q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable "+(!0===f.tabProps.value.inlineLabel?"row no-wrap q-tab__content--inline":"column")+(void 0!==e.contentClass?" ".concat(e.contentClass):"")})),k=(0,s.Fl)((function(){return!0===e.disable||!0===f.hasFocus.value||!1===x.value&&!0===f.hasActiveTab.value?-1:e.tabindex||0}));function L(t,s){if(!0!==s&&null!==_.value&&_.value.focus(),!0!==e.disable){if(void 0===n)return f.updateModel({name:e.name}),void i("click",t);if(!0===n.hasRouterLink.value){var r=function(){var i,s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=void 0===s.to||!0===(0,p.xb)(s.to,e.to)?f.avoidRouteWatcher=(0,g.Z)():null;return n.navigateToRouterLink(t,o()(o()({},s),{},{returnRouterError:!0}))["catch"]((function(e){i=e})).then((function(t){if(r===f.avoidRouteWatcher&&(f.avoidRouteWatcher=!1,void 0!==i||void 0!==t&&!0!==t.message.startsWith("Avoided redundant navigation")||f.updateModel({name:e.name})),!0===s.returnRouterError)return void 0!==i?Promise.reject(i):t}))};return i("click",t,r),void(!0!==t.defaultPrevented&&r())}i("click",t)}else void 0!==n&&!0===n.hasRouterLink.value&&(0,h.NS)(t)}function E(e){(0,d.So)(e,[13,32])?L(e,!0):!0!==(0,d.Wm)(e)&&e.keyCode>=35&&e.keyCode<=40&&!0!==e.altKey&&!0!==e.metaKey&&!0===f.onKbdNavigate(e.keyCode,v.$el)&&(0,h.NS)(e),i("keydown",e)}function N(){var i=f.tabProps.value.narrowIndicator,n=[],o=(0,s.h)("div",{ref:y,class:["q-tab__indicator",f.tabProps.value.indicatorClass]});void 0!==e.icon&&n.push((0,s.h)(a.Z,{class:"q-tab__icon",name:e.icon})),void 0!==e.label&&n.push((0,s.h)("div",{class:"q-tab__label"},e.label)),!1!==e.alert&&n.push(void 0!==e.alertIcon?(0,s.h)(a.Z,{class:"q-tab__alert-icon",color:!0!==e.alert?e.alert:void 0,name:e.alertIcon}):(0,s.h)("div",{class:"q-tab__alert"+(!0!==e.alert?" text-".concat(e.alert):"")})),!0===i&&n.push(o);var r=[(0,s.h)("div",{class:"q-focus-helper",tabindex:-1,ref:_}),(0,s.h)("div",{class:S.value},(0,c.vs)(t["default"],n))];return!1===i&&r.push(o),r}var D={name:(0,s.Fl)((function(){return e.name})),rootRef:b,tabIndicatorRef:y,routeData:n};function T(t,i){var n=o()({ref:b,class:C.value,tabindex:k.value,role:"tab","aria-selected":!0===x.value?"true":"false","aria-disabled":!0===e.disable?"true":void 0,onClick:L,onKeydown:E},i);return(0,s.wy)((0,s.h)(t,n,N()),[[l.Z,w.value]])}return(0,s.Jd)((function(){f.unregisterTab(D)})),(0,s.bv)((function(){f.registerTab(D)})),{renderTab:T,$tabs:f}}var b=i(65987);const y=(0,b.L)({name:"QTab",props:v,emits:m,setup:function(e,t){var i=t.slots,n=t.emit,o=_(e,i,n),s=o.renderTab;return function(){return s("div")}}})},47817:(e,t,i)=>{"use strict";i.d(t,{Z:()=>v});var n=i(54080),o=i.n(n),s=(i(52519),i(80676),i(46727),i(62590),i(55067),i(65716),i(65735),i(18381),i(93954),i(14331),i(56072),i(72091),i(34442),i(46776),i(69665),i(32455),i(31719),i(59835)),r=i(60499),a=i(22857),l=i(60883),c=i(16916),d=i(52695),u=i(65987),h=i(22026),g=i(95439),p=i(78383);function f(e,t,i){var n=!0===i?["left","right"]:["top","bottom"];return"absolute-".concat(!0===t?n[0]:n[1]).concat(e?" text-".concat(e):"")}var m=["left","center","right","justify"];const v=(0,u.L)({name:"QTabs",props:{modelValue:[Number,String],align:{type:String,default:"center",validator:function(e){return m.includes(e)}},breakpoint:{type:[String,Number],default:600},vertical:Boolean,shrink:Boolean,stretch:Boolean,activeClass:String,activeColor:String,activeBgColor:String,indicatorColor:String,leftIcon:String,rightIcon:String,outsideArrows:Boolean,mobileArrows:Boolean,switchIndicator:Boolean,narrowIndicator:Boolean,inlineLabel:Boolean,noCaps:Boolean,dense:Boolean,contentClass:String,"onUpdate:modelValue":[Function,Array]},setup:function(e,t){var i,n=t.slots,u=t.emit,m=(0,s.FN)(),v=m.proxy,_=v.$q,b=(0,c.Z)(),y=b.registerTick,w=(0,c.Z)(),x=w.registerTick,C=(0,c.Z)(),S=C.registerTick,k=(0,d.Z)(),L=k.registerTimeout,E=k.removeTimeout,N=(0,d.Z)(),D=N.registerTimeout,T=N.removeTimeout,A=(0,r.iH)(null),I=(0,r.iH)(null),R=(0,r.iH)(e.modelValue),M=(0,r.iH)(!1),P=(0,r.iH)(!0),O=(0,r.iH)(!1),F=(0,r.iH)(!1),B=[],H=(0,r.iH)(0),W=(0,r.iH)(!1),V=null,z=null,U=(0,s.Fl)((function(){return{activeClass:e.activeClass,activeColor:e.activeColor,activeBgColor:e.activeBgColor,indicatorClass:f(e.indicatorColor,e.switchIndicator,e.vertical),narrowIndicator:e.narrowIndicator,inlineLabel:e.inlineLabel,noCaps:e.noCaps}})),q=(0,s.Fl)((function(){for(var e=H.value,t=R.value,i=0;i0&&n>i;M.value=o,!0===o&&x(ie),F.value=i0&&(I.value[!0===e.vertical?"scrollTop":"scrollLeft"]+=Math.ceil(l),ie())}function ie(){var t=I.value;if(null!==t){var i=t.getBoundingClientRect(),n=!0===e.vertical?t.scrollTop:Math.abs(t.scrollLeft);!0===Y.value?(P.value=Math.ceil(n+i.width)0):(P.value=n>0,O.value=!0===e.vertical?Math.ceil(n+i.height)=0&&c=e)&&(s=!0,r=e),o(t,r),ie(),s}function de(e,t){for(var i in e)if(e[i]!==t[i])return!1;return!0}function ue(){var e,t=null,i={matchedLen:0,queryDiff:9999,hrefLen:0},n=B.filter((function(e){return void 0!==e.routeData&&!0===e.routeData.hasRouterLink.value})),s=v.$route,r=s.hash,a=s.query,l=Object.keys(a).length,c=o()(n);try{for(c.s();!(e=c.n()).done;){var d=e.value,u=!0===d.routeData.exact.value;if(!0===d.routeData[!0===u?"linkIsExactActive":"linkIsActive"].value){var h=d.routeData.resolvedLink.value,g=h.hash,p=h.query,f=h.matched,m=h.href,_=Object.keys(p).length;if(!0===u){if(g!==r)continue;if(_!==l||!1===de(a,p))continue;t=d.name.value;break}if((""===g||g===r)&&(0===_||!1!==de(p,a))){var b={matchedLen:f.length,queryDiff:l-_,hrefLen:m.length-g.length};if(b.matchedLen>i.matchedLen)t=d.name.value,i=b;else if(b.matchedLen===i.matchedLen){if(b.queryDiffi.hrefLen&&(t=d.name.value,i=b)}}}}}catch(y){c.e(y)}finally{c.f()}null===t&&!0===B.some((function(e){return void 0===e.routeData&&e.name.value===R.value}))||Z({name:t,setCurrent:!0})}function he(e){if(E(),!0!==W.value&&null!==A.value&&e.target&&"function"===typeof e.target.closest){var t=e.target.closest(".q-tab");t&&!0===A.value.contains(t)&&(W.value=!0,!0===M.value&&te(t))}}function ge(){L((function(){W.value=!1}),30)}function pe(){!1===be.avoidRouteWatcher?D(ue):T()}function fe(){if(void 0===i){var e=(0,s.YP)((function(){return v.$route.fullPath}),pe);i=function(){e(),i=void 0}}}function me(e){B.push(e),H.value++,Q(),void 0===e.routeData||void 0===v.$route?D((function(){if(!0===M.value){var e=R.value,t=void 0!==e&&null!==e&&""!==e?B.find((function(t){return t.name.value===e})):null;t&&te(t.rootRef.value)}})):(fe(),!0===e.routeData.hasRouterLink.value&&pe())}function ve(e){B.splice(B.indexOf(e),1),H.value--,Q(),void 0!==i&&void 0!==e.routeData&&(!0===B.every((function(e){return void 0===e.routeData}))&&i(),pe())}var _e,be={currentModel:R,tabProps:U,hasFocus:W,hasActiveTab:q,registerTab:me,unregisterTab:ve,verifyRouteModel:pe,updateModel:Z,onKbdNavigate:ae,avoidRouteWatcher:!1};function ye(){null!==V&&clearTimeout(V),re(),void 0!==i&&i()}return(0,s.JJ)(g.Nd,be),(0,s.Jd)(ye),(0,s.se)((function(){_e=void 0!==i,ye()})),(0,s.dl)((function(){!0===_e&&fe(),Q()})),function(){return(0,s.h)("div",{ref:A,class:j.value,role:"tablist",onFocusin:he,onFocusout:ge},[(0,s.h)(l.Z,{onResize:J}),(0,s.h)("div",{ref:I,class:K.value,onScroll:ie},(0,h.KR)(n["default"])),(0,s.h)(a.Z,{class:"q-tabs__arrow q-tabs__arrow--left absolute q-tab__icon"+(!0===P.value?"":" q-tabs__arrow--faded"),name:e.leftIcon||_.iconSet.tabs[!0===e.vertical?"up":"left"],onMousedownPassive:oe,onTouchstartPassive:oe,onMouseupPassive:re,onMouseleavePassive:re,onTouchendPassive:re}),(0,s.h)(a.Z,{class:"q-tabs__arrow q-tabs__arrow--right absolute q-tab__icon"+(!0===O.value?"":" q-tabs__arrow--faded"),name:e.rightIcon||_.iconSet.tabs[!0===e.vertical?"down":"right"],onMousedownPassive:se,onTouchstartPassive:se,onMouseupPassive:re,onMouseleavePassive:re,onTouchendPassive:re})])}}})},23175:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});var n=i(46264),o=i.n(n),s=i(59835),r=i(22857),a=i(71926),l=i(65987);const c=(0,l.L)({name:"QToggle",props:o()(o()({},a.Fz),{},{icon:String,iconColor:String}),emits:a.ZB,setup:function(e){function t(t,i){var n=(0,s.Fl)((function(){return(!0===t.value?e.checkedIcon:!0===i.value?e.indeterminateIcon:e.uncheckedIcon)||e.icon})),o=(0,s.Fl)((function(){return!0===t.value?e.iconColor:null}));return function(){return[(0,s.h)("div",{class:"q-toggle__track"}),(0,s.h)("div",{class:"q-toggle__thumb absolute flex flex-center no-wrap"},void 0!==n.value?[(0,s.h)(r.Z,{name:n.value,color:o.value})]:void 0)]}}return(0,a.ZP)("toggle",t)}})},51663:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});var n=i(59835),o=i(65987),s=i(22026);const r=(0,o.L)({name:"QToolbar",props:{inset:Boolean},setup:function(e,t){var i=t.slots,o=(0,n.Fl)((function(){return"q-toolbar row no-wrap items-center"+(!0===e.inset?" q-toolbar--inset":"")}));return function(){return(0,n.h)("div",{class:o.value,role:"toolbar"},(0,s.KR)(i["default"]))}}})},46858:(e,t,i)=>{"use strict";i.d(t,{Z:()=>S});var n=i(50001),o=i.n(n),s=i(46264),r=i.n(s),a=(i(80676),i(2514),i(58665),i(51393),i(93954),i(59835)),l=i(60499),c=i(61957),d=i(74397),u=i(64088),h=i(63842),g=i(91518),p=i(20431),f=i(16916),m=i(52695),v=i(65987),_=i(43701),b=i(91384),y=i(2589),w=i(22026),x=i(49092),C=i(49388);const S=(0,v.L)({name:"QTooltip",inheritAttrs:!1,props:r()(r()(r()(r()({},d.u),h.vr),p.D),{},{maxHeight:{type:String,default:null},maxWidth:{type:String,default:null},transitionShow:{default:"jump-down"},transitionHide:{default:"jump-up"},anchor:{type:String,default:"bottom middle",validator:C.$},self:{type:String,default:"top middle",validator:C.$},offset:{type:Array,default:function(){return[14,14]},validator:C.io},scrollTarget:{default:void 0},delay:{type:Number,default:0},hideDelay:{type:Number,default:0}}),emits:o()(h.gH),setup:function(e,t){var i,n,o=t.slots,s=t.emit,v=t.attrs,S=(0,a.FN)(),k=S.proxy.$q,L=(0,l.iH)(null),E=(0,l.iH)(!1),N=(0,a.Fl)((function(){return(0,C.li)(e.anchor,k.lang.rtl)})),D=(0,a.Fl)((function(){return(0,C.li)(e.self,k.lang.rtl)})),T=(0,a.Fl)((function(){return!0!==e.persistent})),A=(0,f.Z)(),I=A.registerTick,R=A.removeTick,M=(0,m.Z)(),P=M.registerTimeout,O=(0,p.Z)(e),F=O.transitionProps,B=O.transitionStyle,H=(0,u.Z)(e,ce),W=H.localScrollTarget,V=H.changeScrollEvent,z=H.unconfigureScrollTarget,U=(0,d.Z)({showing:E,configureAnchorEl:le}),q=U.anchorEl,$=U.canShow,j=U.anchorEvents,K=(0,h.ZP)({showing:E,canShow:$,handleShow:ie,handleHide:ne,hideOnRouteChange:T,processOnMount:!0}),G=K.show,Y=K.hide;Object.assign(j,{delayShow:re,delayHide:ae});var X=(0,g.Z)(S,L,ue,"tooltip"),Z=X.showPortal,Q=X.hidePortal,J=X.renderPortal;if(!0===k.platform.is.mobile){var ee={anchorEl:q,innerRef:L,onClickOutside:function(e){return Y(e),e.target.classList.contains("q-dialog__backdrop")&&(0,b.NS)(e),!0}},te=(0,a.Fl)((function(){return null===e.modelValue&&!0!==e.persistent&&!0===E.value}));(0,a.YP)(te,(function(e){var t=!0===e?x.m:x.D;t(ee)})),(0,a.Jd)((function(){(0,x.D)(ee)}))}function ie(t){Z(),I((function(){n=new MutationObserver((function(){return se()})),n.observe(L.value,{attributes:!1,childList:!0,characterData:!0,subtree:!0}),se(),ce()})),void 0===i&&(i=(0,a.YP)((function(){return k.screen.width+"|"+k.screen.height+"|"+e.self+"|"+e.anchor+"|"+k.lang.rtl}),se)),P((function(){Z(!0),s("show",t)}),e.transitionDuration)}function ne(t){R(),Q(),oe(),P((function(){Q(!0),s("hide",t)}),e.transitionDuration)}function oe(){void 0!==n&&(n.disconnect(),n=void 0),void 0!==i&&(i(),i=void 0),z(),(0,b.ul)(j,"tooltipTemp")}function se(){var t=L.value;null!==q.value&&t&&(0,C.wq)({el:t,offset:e.offset,anchorEl:q.value,anchorOrigin:N.value,selfOrigin:D.value,maxHeight:e.maxHeight,maxWidth:e.maxWidth})}function re(t){if(!0===k.platform.is.mobile){(0,y.M)(),document.body.classList.add("non-selectable");var i=q.value,n=["touchmove","touchcancel","touchend","click"].map((function(e){return[i,e,"delayHide","passiveCapture"]}));(0,b.M0)(j,"tooltipTemp",n)}P((function(){G(t)}),e.delay)}function ae(t){!0===k.platform.is.mobile&&((0,b.ul)(j,"tooltipTemp"),(0,y.M)(),setTimeout((function(){document.body.classList.remove("non-selectable")}),10)),P((function(){Y(t)}),e.hideDelay)}function le(){if(!0!==e.noParentEvent&&null!==q.value){var t=!0===k.platform.is.mobile?[[q.value,"touchstart","delayShow","passive"]]:[[q.value,"mouseenter","delayShow","passive"],[q.value,"mouseleave","delayHide","passive"]];(0,b.M0)(j,"anchor",t)}}function ce(){if(null!==q.value||void 0!==e.scrollTarget){W.value=(0,_.b0)(q.value,e.scrollTarget);var t=!0===e.noParentEvent?se:Y;V(W.value,t)}}function de(){return!0===E.value?(0,a.h)("div",r()(r()({},v),{},{ref:L,class:["q-tooltip q-tooltip--style q-position-engine no-pointer-events",v["class"]],style:[v.style,B.value],role:"tooltip"}),(0,w.KR)(o["default"])):null}function ue(){return(0,a.h)(c.uT,F.value,de)}return(0,a.Jd)(oe),Object.assign(S.proxy,{updatePosition:se}),J}})},84749:(e,t,i)=>{"use strict";i.d(t,{Z:()=>_});var n=i(46264),o=i.n(n),s=(i(46727),i(80676),i(72091),i(85711),i(56072),i(65716),i(3452),i(51393),i(46776),i(31719),i(55067),i(91804),i(61732),i(69665),i(60893),i(52519),i(27453),i(58665),i(59835)),r=i(60499),a=i(61957),l=i(22857),c=i(11221),d=i(69003),u=i(13902),h=i(68234),g=i(65987),p=i(91384),f=i(61705),m=i(43251),v=["none","strict","leaf","leaf-filtered"];const _=(0,g.L)({name:"QTree",props:o()(o()({},h.S),{},{nodes:{type:Array,required:!0},nodeKey:{type:String,required:!0},labelKey:{type:String,default:"label"},childrenKey:{type:String,default:"children"},dense:Boolean,color:String,controlColor:String,textColor:String,selectedColor:String,icon:String,tickStrategy:{type:String,default:"none",validator:function(e){return v.includes(e)}},ticked:Array,expanded:Array,selected:{},noSelectionUnset:Boolean,defaultExpandAll:Boolean,accordion:Boolean,filter:String,filterMethod:Function,duration:Number,noConnectors:Boolean,noTransition:Boolean,noNodesLabel:String,noResultsLabel:String}),emits:["update:expanded","update:ticked","update:selected","lazyLoad","afterShow","afterHide"],setup:function(e,t){var i=t.slots,n=t.emit,o=(0,s.FN)(),g=o.proxy,v=g.$q,_=(0,h.Z)(e,v),b=(0,r.iH)({}),y=(0,r.iH)(e.ticked||[]),w=(0,r.iH)(e.expanded||[]),x={};(0,s.Xn)((function(){x={}}));var C=(0,s.Fl)((function(){return"q-tree q-tree--".concat(!0===e.dense?"dense":"standard")+(!0===e.noConnectors?" q-tree--no-connectors":"")+(!0===_.value?" q-tree--dark":"")+(void 0!==e.color?" text-".concat(e.color):"")})),S=(0,s.Fl)((function(){return void 0!==e.selected})),k=(0,s.Fl)((function(){return e.icon||v.iconSet.tree.icon})),L=(0,s.Fl)((function(){return e.controlColor||e.color})),E=(0,s.Fl)((function(){return void 0!==e.textColor?" text-".concat(e.textColor):""})),N=(0,s.Fl)((function(){var t=e.selectedColor||e.color;return t?" text-".concat(t):""})),D=(0,s.Fl)((function(){return void 0!==e.filterMethod?e.filterMethod:function(t,i){var n=i.toLowerCase();return t[e.labelKey]&&t[e.labelKey].toLowerCase().indexOf(n)>-1}})),T=(0,s.Fl)((function(){var t={},i=function i(n,o){var s=n.tickStrategy||(o?o.tickStrategy:e.tickStrategy),r=n[e.nodeKey],a=n[e.childrenKey]&&0!==n[e.childrenKey].length,l=!0!==n.disabled&&!0===S.value&&!1!==n.selectable,c=!0!==n.disabled&&!1!==n.expandable,d="none"!==s,u="strict"===s,h="leaf-filtered"===s,g="leaf"===s||"leaf-filtered"===s,p=!0!==n.disabled&&!1!==n.tickable;!0===g&&!0===p&&o&&!0!==o.tickable&&(p=!1);var f=n.lazy;!0===f&&void 0!==b.value[r]&&!0===Array.isArray(n[e.childrenKey])&&(f=b.value[r]);var m={key:r,parent:o,isParent:a,lazy:f,disabled:n.disabled,link:!0!==n.disabled&&(!0===l||!0===c&&(!0===a||!0===f)),children:[],matchesFilter:!e.filter||D.value(n,e.filter),selected:r===e.selected&&!0===l,selectable:l,expanded:!0===a&&w.value.includes(r),expandable:c,noTick:!0===n.noTick||!0!==u&&f&&"loaded"!==f,tickable:p,tickStrategy:s,hasTicking:d,strictTicking:u,leafFilteredTicking:h,leafTicking:g,ticked:(!0===u||!0!==a)&&y.value.includes(r)};if(t[r]=m,!0===a&&(m.children=n[e.childrenKey].map((function(e){return i(e,m)})),e.filter&&(!0!==m.matchesFilter?m.matchesFilter=m.children.some((function(e){return e.matchesFilter})):!0!==m.noTick&&!0!==m.disabled&&!0===m.tickable&&!0===h&&!0===m.children.every((function(e){return!0!==e.matchesFilter||!0===e.noTick||!0!==e.tickable}))&&(m.tickable=!1)),!0===m.matchesFilter&&(!0!==m.noTick&&!0!==u&&!0===m.children.every((function(e){return e.noTick}))&&(m.noTick=!0),g))){if(m.ticked=!1,m.indeterminate=m.children.some((function(e){return!0===e.indeterminate})),m.tickable=!0===m.tickable&&m.children.some((function(e){return e.tickable})),!0!==m.indeterminate){var v=m.children.reduce((function(e,t){return!0===t.ticked?e+1:e}),0);v===m.children.length?m.ticked=!0:v>0&&(m.indeterminate=!0)}!0===m.indeterminate&&(m.indeterminateNextState=m.children.every((function(e){return!0!==e.tickable||!0!==e.ticked})))}return m};return e.nodes.forEach((function(e){return i(e,null)})),t}));function A(t){var i=[].reduce,n=function n(o,s){return o||!s?o:!0===Array.isArray(s)?i.call(Object(s),n,o):s[e.nodeKey]===t?s:s[e.childrenKey]?n(null,s[e.childrenKey]):void 0};return n(null,e.nodes)}function I(){return y.value.map((function(e){return A(e)}))}function R(){return w.value.map((function(e){return A(e)}))}function M(e){return!(!e||!T.value[e])&&T.value[e].expanded}function P(){void 0!==e.expanded?n("update:expanded",[]):w.value=[]}function O(){var t=[],i=function i(n){n[e.childrenKey]&&0!==n[e.childrenKey].length&&!1!==n.expandable&&!0!==n.disabled&&(t.push(n[e.nodeKey]),n[e.childrenKey].forEach(i))};e.nodes.forEach(i),void 0!==e.expanded?n("update:expanded",t):w.value=t}function F(t,i){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:A(t),r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:T.value[t];if(r.lazy&&"loaded"!==r.lazy){if("loading"===r.lazy)return;b.value[t]="loading",!0!==Array.isArray(o[e.childrenKey])&&(o[e.childrenKey]=[]),n("lazyLoad",{node:o,key:t,done:function(i){b.value[t]="loaded",o[e.childrenKey]=!0===Array.isArray(i)?i:[],(0,s.Y3)((function(){var e=T.value[t];e&&!0===e.isParent&&B(t,!0)}))},fail:function(){delete b.value[t],0===o[e.childrenKey].length&&delete o[e.childrenKey]}})}else!0===r.isParent&&!0===r.expandable&&B(t,i)}function B(t,i){var o=w.value,s=void 0!==e.expanded;if(!0===s&&(o=o.slice()),i){if(e.accordion&&T.value[t]){var r=[];T.value[t].parent?T.value[t].parent.children.forEach((function(e){e.key!==t&&!0===e.expandable&&r.push(e.key)})):e.nodes.forEach((function(i){var n=i[e.nodeKey];n!==t&&r.push(n)})),0!==r.length&&(o=o.filter((function(e){return!1===r.includes(e)})))}o=o.concat([t]).filter((function(e,t,i){return i.indexOf(e)===t}))}else o=o.filter((function(e){return e!==t}));!0===s?n("update:expanded",o):w.value=o}function H(e){return!(!e||!T.value[e])&&T.value[e].ticked}function W(t,i){var o=y.value,s=void 0!==e.ticked;!0===s&&(o=o.slice()),o=i?o.concat(t).filter((function(e,t,i){return i.indexOf(e)===t})):o.filter((function(e){return!1===t.includes(e)})),!0===s&&n("update:ticked",o)}function V(t,i,n){var o={tree:g,node:t,key:n,color:e.color,dark:_.value};return(0,m.g)(o,"expanded",(function(){return i.expanded}),(function(e){e!==i.expanded&&F(n,e)})),(0,m.g)(o,"ticked",(function(){return i.ticked}),(function(e){e!==i.ticked&&W([n],e)})),o}function z(t){return(e.filter?t.filter((function(t){return T.value[t[e.nodeKey]].matchesFilter})):t).map((function(e){return j(e)}))}function U(e){if(void 0!==e.icon)return(0,s.h)(l.Z,{class:"q-tree__icon q-mr-sm",name:e.icon,color:e.iconColor});var t=e.img||e.avatar;return t?(0,s.h)("img",{class:"q-tree__".concat(e.img?"img":"avatar"," q-mr-sm"),src:t}):void 0}function q(){n("afterShow")}function $(){n("afterHide")}function j(t){var n=t[e.nodeKey],o=T.value[n],r=t.header&&i["header-".concat(t.header)]||i["default-header"],h=!0===o.isParent?z(t[e.childrenKey]):[],g=0!==h.length||o.lazy&&"loaded"!==o.lazy,m=t.body&&i["body-".concat(t.body)]||i["default-body"],v=void 0!==r||void 0!==m?V(t,o,n):null;return void 0!==m&&(m=(0,s.h)("div",{class:"q-tree__node-body relative-position"},[(0,s.h)("div",{class:E.value},[m(v)])])),(0,s.h)("div",{key:n,class:"q-tree__node relative-position"+" q-tree__node--".concat(!0===g?"parent":"child")},[(0,s.h)("div",{class:"q-tree__node-header relative-position row no-wrap items-center"+(!0===o.link?" q-tree__node--link q-hoverable q-focusable":"")+(!0===o.selected?" q-tree__node--selected":"")+(!0===o.disabled?" q-tree__node--disabled":""),tabindex:!0===o.link?0:-1,onClick:function(e){G(t,o,e)},onKeypress:function(e){!0!==(0,f.Wm)(e)&&(13===e.keyCode?G(t,o,e,!0):32===e.keyCode&&Y(t,o,e,!0))}},[(0,s.h)("div",{class:"q-focus-helper",tabindex:-1,ref:function(e){x[o.key]=e}}),"loading"===o.lazy?(0,s.h)(u.Z,{class:"q-tree__spinner",color:L.value}):!0===g?(0,s.h)(l.Z,{class:"q-tree__arrow"+(!0===o.expanded?" q-tree__arrow--rotate":""),name:k.value,onClick:function(e){Y(t,o,e)}}):null,!0===o.hasTicking&&!0!==o.noTick?(0,s.h)(c.Z,{class:"q-tree__tickbox",modelValue:!0===o.indeterminate?null:o.ticked,color:L.value,dark:_.value,dense:!0,keepColor:!0,disable:!0!==o.tickable,onKeydown:p.NS,"onUpdate:modelValue":function(e){X(o,e)}}):null,(0,s.h)("div",{class:"q-tree__node-header-content col row no-wrap items-center"+(!0===o.selected?N.value:E.value)},[r?r(v):[U(t),(0,s.h)("div",t[e.labelKey])]])]),!0===g?!0===e.noTransition?(0,s.h)("div",{class:"q-tree__node-collapsible"+E.value,key:"".concat(n,"__q")},[m,(0,s.h)("div",{class:"q-tree__children"+(!0===o.disabled?" q-tree__node--disabled":"")},o.expanded?h:null)]):(0,s.h)(d.Z,{duration:e.duration,onShow:q,onHide:$},(function(){return(0,s.wy)((0,s.h)("div",{class:"q-tree__node-collapsible"+E.value,key:"".concat(n,"__q")},[m,(0,s.h)("div",{class:"q-tree__children"+(!0===o.disabled?" q-tree__node--disabled":"")},h)]),[[a.F8,o.expanded]])})):m])}function K(e){var t=x[e];t&&t.focus()}function G(t,i,o,s){!0!==s&&!1!==i.selectable&&K(i.key),S.value&&i.selectable?!1===e.noSelectionUnset?n("update:selected",i.key!==e.selected?i.key:null):i.key!==e.selected&&n("update:selected",void 0===i.key?null:i.key):Y(t,i,o,s),"function"===typeof t.handler&&t.handler(t)}function Y(e,t,i,n){void 0!==i&&(0,p.NS)(i),!0!==n&&!1!==t.selectable&&K(t.key),F(t.key,!t.expanded,e,t)}function X(e,t){if(!0===e.indeterminate&&(t=e.indeterminateNextState),e.strictTicking)W([e.key],t);else if(e.leafTicking){var i=[],n=function e(n){n.isParent?(!0!==t&&!0!==n.noTick&&!0===n.tickable&&i.push(n.key),!0===n.leafTicking&&n.children.forEach(e)):!0===n.noTick||!0!==n.tickable||!0===n.leafFilteredTicking&&!0!==n.matchesFilter||i.push(n.key)};n(e),W(i,t)}}return(0,s.YP)((function(){return e.ticked}),(function(e){y.value=e})),(0,s.YP)((function(){return e.expanded}),(function(e){w.value=e})),!0===e.defaultExpandAll&&O(),Object.assign(g,{getNodeByKey:A,getTickedNodes:I,getExpandedNodes:R,isExpanded:M,collapseAll:P,expandAll:O,setExpanded:F,isTicked:H,setTicked:W}),function(){var t=z(e.nodes);return(0,s.h)("div",{class:C.value},0===t.length?e.filter?e.noResultsLabel||v.lang.tree.noResults:e.noNodesLabel||v.lang.tree.noNodes:t)}}})},88855:(e,t,i)=>{"use strict";i.d(t,{Z:()=>P});var n=i(50001),o=i.n(n),s=i(46264),r=i.n(s),a=(i(62590),i(52519),i(95330),i(58665),i(84839),i(45583),i(56072),i(65716),i(72091),i(69665),i(98998),i(77280),i(40702),i(84641),i(83269),i(95516),i(23036),i(62309),i(91804),i(61732),i(34464),i(51393),i(59835)),l=i(60499),c=i(68879),d=i(22857),u=i(13902),h=i(83302),g=i(68234),p=i(21970),f=i(91384),m=i(30321),v=i(95439),_=i(43251),b=i(52046);function y(e){return(100*e).toFixed(2)+"%"}var w=r()(r()(r()({},g.S),p.TS),{},{label:String,color:String,textColor:String,square:Boolean,flat:Boolean,bordered:Boolean,noThumbnails:Boolean,autoUpload:Boolean,hideUploadBtn:Boolean,disable:Boolean,readonly:Boolean}),x=[].concat(o()(p.Pl),["start","finish","added","removed"]);function C(e){var t=(0,a.FN)(),i=t.props,n=t.slots,o=t.emit,s=t.proxy,r=s.$q,w=(0,g.Z)(i,r);function x(e,t,i){if(e.__status=t,"idle"===t)return e.__uploaded=0,e.__progress=0,e.__sizeLabel=(0,m.rB)(e.size),void(e.__progressLabel="0.00%");"failed"!==t?(e.__uploaded="uploaded"===t?e.size:i,e.__progress="uploaded"===t?1:Math.min(.9999,e.__uploaded/e.size),e.__progressLabel=y(e.__progress),s.$forceUpdate()):s.$forceUpdate()}var C=(0,a.Fl)((function(){return!0!==i.disable&&!0!==i.readonly})),S=(0,l.iH)(!1),k=(0,l.iH)(null),L=(0,l.iH)(null),E={files:(0,l.iH)([]),queuedFiles:(0,l.iH)([]),uploadedFiles:(0,l.iH)([]),uploadedSize:(0,l.iH)(0),updateFileStatus:x,isAlive:function(){return!1===(0,b.$D)(t)}},N=(0,p.ZP)({editable:C,dnd:S,getFileInput:Z,addFilesToQueue:Q}),D=N.pickFiles,T=N.addFiles,A=N.onDragover,I=N.onDragleave,R=N.processFiles,M=N.getDndNode,P=N.maxFilesNumber,O=N.maxTotalSizeNumber;Object.assign(E,e({props:i,slots:n,emit:o,helpers:E})),void 0===E.isBusy&&(E.isBusy=(0,l.iH)(!1));var F=(0,l.iH)(0),B=(0,a.Fl)((function(){return 0===F.value?0:E.uploadedSize.value/F.value})),H=(0,a.Fl)((function(){return y(B.value)})),W=(0,a.Fl)((function(){return(0,m.rB)(F.value)})),V=(0,a.Fl)((function(){return!0===C.value&&!0!==E.isUploading.value&&(!0===i.multiple||0===E.queuedFiles.value.length)&&(void 0===i.maxFiles||E.files.value.length0})),h=(0,a.Fl)((function(){return 0!==r.value.length}));function g(){s.value.forEach((function(e){e.abort()})),0!==r.value.length&&(t=!0)}function p(){var e=o.queuedFiles.value.slice(0);o.queuedFiles.value=[],d.value.batch(e)?f(e):e.forEach((function(e){f([e])}))}function f(e){if(c.value++,"function"===typeof i.factory){var s=i.factory(e);if(s)if("function"===typeof s["catch"]&&"function"===typeof s.then){r.value.push(s);var a=function(i){!0===o.isAlive()&&(r.value=r.value.filter((function(e){return e!==s})),0===r.value.length&&(t=!1),o.queuedFiles.value=o.queuedFiles.value.concat(e),e.forEach((function(e){o.updateFileStatus(e,"failed")})),n("factoryFailed",i,e),c.value--)};s.then((function(i){!0===t?a(new Error("Aborted")):!0===o.isAlive()&&(r.value=r.value.filter((function(e){return e!==s})),m(e,i))}))["catch"](a)}else m(e,s||{});else n("factoryFailed",new Error("QUploader: factory() does not return properly"),e),c.value--}else m(e,{})}function m(e,t){var i=new FormData,r=new XMLHttpRequest,a=function(e,i){return void 0!==t[e]?T(t[e])(i):d.value[e](i)},l=a("url",e);if(!l)return console.error("q-uploader: invalid or no URL specified"),void c.value--;var u=a("formFields",e);void 0!==u&&u.forEach((function(e){i.append(e.name,e.value)}));var h,g=0,p=0,f=0,m=0;r.upload.addEventListener("progress",(function(t){if(!0!==h){var i=Math.min(m,t.loaded);o.uploadedSize.value+=i-f,f=i;for(var n=f-p,s=g;n>0&&sr.size;if(!a)return void o.updateFileStatus(r,"uploading",n);n-=r.size,g++,p+=r.size,o.updateFileStatus(r,"uploading",r.size)}}}),!1),r.onreadystatechange=function(){r.readyState<4||(r.status&&r.status<400?(o.uploadedFiles.value=o.uploadedFiles.value.concat(e),e.forEach((function(e){o.updateFileStatus(e,"uploaded")})),n("uploaded",{files:e,xhr:r})):(h=!0,o.uploadedSize.value-=f,o.queuedFiles.value=o.queuedFiles.value.concat(e),e.forEach((function(e){o.updateFileStatus(e,"failed")})),n("failed",{files:e,xhr:r})),c.value--,s.value=s.value.filter((function(e){return e!==r})))},r.open(a("method",e),l),!0===a("withCredentials",e)&&(r.withCredentials=!0);var v=a("headers",e);void 0!==v&&v.forEach((function(e){r.setRequestHeader(e.name,e.value)}));var _=a("sendRaw",e);e.forEach((function(e){o.updateFileStatus(e,"uploading",0),!0!==_&&i.append(a("fieldName",e),e,e.name),e.xhr=r,e.__abort=function(){r.abort()},m+=e.size})),n("uploading",{files:e,xhr:r}),s.value.push(r),!0===_?r.send(new Blob(e)):r.send(i)}return{isUploading:u,isBusy:h,abort:g,upload:p}}const M={name:"QUploader",props:A,emits:I,injectPlugin:R},P=D(M)},46246:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});var n=i(59835),o=i(65987),s=i(95439);const r=(0,o.L)({name:"QUploaderAddTrigger",setup:function(){var e=(0,n.f3)(s.Xh,s.qO);return e===s.qO&&console.error("QUploaderAddTrigger needs to be child of QUploader"),e}})},92043:(e,t,i)=>{"use strict";i.d(t,{If:()=>w,t9:()=>x,vp:()=>C});var n=i(38761),o=i.n(n),s=i(46264),r=i.n(s),a=(i(56072),i(65716),i(91804),i(61732),i(55067),i(60893),i(80676),i(34442),i(65735),i(72091),i(11476),i(18964),i(93954),i(85711),i(69665),i(95149),i(84839),i(45583),i(58665),i(59835)),l=i(60499),c=i(60899),d=i(91384),u=i(78383),h=1e3,g=["start","center","end","start-force","center-force","end-force"],p=Array.prototype.filter,f=void 0===window.getComputedStyle(document.body).overflowAnchor?d.ZT:function(e,t){null!==e&&(void 0!==e._qOverflowAnimationFrame&&cancelAnimationFrame(e._qOverflowAnimationFrame),e._qOverflowAnimationFrame=requestAnimationFrame((function(){if(null!==e){e._qOverflowAnimationFrame=void 0;var i=e.children||[];p.call(i,(function(e){return e.dataset&&void 0!==e.dataset.qVsAnchor})).forEach((function(e){delete e.dataset.qVsAnchor}));var n=i[t];n&&n.dataset&&(n.dataset.qVsAnchor="")}})))};function m(e,t){return e+t}function v(e,t,i,n,o,s,r,a){var l=e===window?document.scrollingElement||document.documentElement:e,c=!0===o?"offsetWidth":"offsetHeight",d={scrollStart:0,scrollViewSize:-r-a,scrollMaxSize:0,offsetStart:-r,offsetEnd:-a};if(!0===o?(e===window?(d.scrollStart=window.pageXOffset||window.scrollX||document.body.scrollLeft||0,d.scrollViewSize+=document.documentElement.clientWidth):(d.scrollStart=l.scrollLeft,d.scrollViewSize+=l.clientWidth),d.scrollMaxSize=l.scrollWidth,!0===s&&(d.scrollStart=(!0===u.e?d.scrollMaxSize-d.scrollViewSize:0)-d.scrollStart)):(e===window?(d.scrollStart=window.pageYOffset||window.scrollY||document.body.scrollTop||0,d.scrollViewSize+=document.documentElement.clientHeight):(d.scrollStart=l.scrollTop,d.scrollViewSize+=l.clientHeight),d.scrollMaxSize=l.scrollHeight),null!==i)for(var h=i.previousElementSibling;null!==h;h=h.previousElementSibling)!1===h.classList.contains("q-virtual-scroll--skip")&&(d.offsetStart+=h[c]);if(null!==n)for(var g=n.nextElementSibling;null!==g;g=g.nextElementSibling)!1===g.classList.contains("q-virtual-scroll--skip")&&(d.offsetEnd+=g[c]);if(t!==e){var p=l.getBoundingClientRect(),f=t.getBoundingClientRect();!0===o?(d.offsetStart+=f.left-p.left,d.offsetEnd-=f.width):(d.offsetStart+=f.top-p.top,d.offsetEnd-=f.height),e!==window&&(d.offsetStart+=d.scrollStart),d.offsetEnd+=d.scrollMaxSize-d.offsetStart}return d}function _(e,t,i,n){"end"===t&&(t=(e===window?document.body:e)[!0===i?"scrollWidth":"scrollHeight"]),e===window?!0===i?(!0===n&&(t=(!0===u.e?document.body.scrollWidth-document.documentElement.clientWidth:0)-t),window.scrollTo(t,window.pageYOffset||window.scrollY||document.body.scrollTop||0)):window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,t):!0===i?(!0===n&&(t=(!0===u.e?e.scrollWidth-e.offsetWidth:0)-t),e.scrollLeft=t):e.scrollTop=t}function b(e,t,i,n){if(i>=n)return 0;var o=t.length,s=Math.floor(i/h),r=Math.floor((n-1)/h)+1,a=e.slice(s,r).reduce(m,0);return i%h!==0&&(a-=t.slice(s*h,i).reduce(m,0)),n%h!==0&&n!==o&&(a-=t.slice(n,r*h).reduce(m,0)),a}var y={virtualScrollSliceSize:{type:[Number,String],default:null},virtualScrollSliceRatioBefore:{type:[Number,String],default:1},virtualScrollSliceRatioAfter:{type:[Number,String],default:1},virtualScrollItemSize:{type:[Number,String],default:24},virtualScrollStickySizeStart:{type:[Number,String],default:0},virtualScrollStickySizeEnd:{type:[Number,String],default:0},tableColspan:[Number,String]},w=Object.keys(y),x=r()({virtualScrollHorizontal:Boolean,onVirtualScroll:Function},y);function C(e){var t,i,n,s,d=e.virtualScrollLength,u=e.getVirtualScrollTarget,y=e.getVirtualScrollEl,w=e.virtualScrollItemSizeComputed,x=(0,a.FN)(),C=x.props,S=x.emit,k=x.proxy,L=k.$q,E=[],N=(0,l.iH)(0),D=(0,l.iH)(0),T=(0,l.iH)({}),A=(0,l.iH)(null),I=(0,l.iH)(null),R=(0,l.iH)(null),M=(0,l.iH)({from:0,to:0}),P=(0,a.Fl)((function(){return void 0!==C.tableColspan?C.tableColspan:100}));void 0===w&&(w=(0,a.Fl)((function(){return C.virtualScrollItemSize})));var O=(0,a.Fl)((function(){return w.value+";"+C.virtualScrollHorizontal})),F=(0,a.Fl)((function(){return O.value+";"+C.virtualScrollSliceRatioBefore+";"+C.virtualScrollSliceRatioAfter}));function B(){$(i,!0)}function H(e){$(void 0===e?i:e)}function W(e,t){var o=u();if(void 0!==o&&null!==o&&8!==o.nodeType){var s=v(o,y(),A.value,I.value,C.virtualScrollHorizontal,L.lang.rtl,C.virtualScrollStickySizeStart,C.virtualScrollStickySizeEnd);n!==s.scrollViewSize&&j(s.scrollViewSize),z(o,s,Math.min(d.value-1,Math.max(0,parseInt(e,10)||0)),0,g.indexOf(t)>-1?t:i>-1&&e>i?"end":"start")}}function V(){var e=u();if(void 0!==e&&null!==e&&8!==e.nodeType){var i=v(e,y(),A.value,I.value,C.virtualScrollHorizontal,L.lang.rtl,C.virtualScrollStickySizeStart,C.virtualScrollStickySizeEnd),o=d.value-1,r=i.scrollMaxSize-i.offsetStart-i.offsetEnd-D.value;if(t!==i.scrollStart)if(i.scrollMaxSize<=0)z(e,i,0,0);else{n!==i.scrollViewSize&&j(i.scrollViewSize),U(M.value.from);var a=Math.floor(i.scrollMaxSize-Math.max(i.scrollViewSize,i.offsetEnd)-Math.min(s[o],i.scrollViewSize/2));if(a>0&&Math.ceil(i.scrollStart)>=a)z(e,i,o,i.scrollMaxSize-i.offsetEnd-E.reduce(m,0));else{var l=0,c=i.scrollStart-i.offsetStart,g=c;if(c<=r&&c+i.scrollViewSize>=N.value)c-=N.value,l=M.value.from,g=c;else for(var p=0;c>=E[p]&&l0&&l-i.scrollViewSize?(l++,g=c):g=s[l]+c;z(e,i,l,g)}}}}function z(e,i,n,o,r){var a="string"===typeof r&&r.indexOf("-force")>-1,l=!0===a?r.replace("-force",""):r,c=void 0!==l?l:"start",u=Math.max(0,n-T.value[c]),h=u+T.value.total;h>d.value&&(h=d.value,u=Math.max(0,h-T.value.total)),t=i.scrollStart;var g=u!==M.value.from||h!==M.value.to;if(!1!==g||void 0!==l){var p=document,v=p.activeElement,y=R.value;!0===g&&null!==y&&y!==v&&!0===y.contains(v)&&(y.addEventListener("focusout",q),setTimeout((function(){null!==y&&y.removeEventListener("focusout",q)}))),f(y,n-u);var w=void 0!==l?s.slice(u,n).reduce(m,0):0;if(!0===g){var x=h>=M.value.from&&u<=M.value.to?M.value.to:h;M.value={from:u,to:x},N.value=b(E,s,0,u),D.value=b(E,s,h,d.value),requestAnimationFrame((function(){M.value.to!==h&&t===i.scrollStart&&(M.value={from:M.value.from,to:h},D.value=b(E,s,h,d.value))}))}requestAnimationFrame((function(){if(t===i.scrollStart){!0===g&&U(u);var r=s.slice(u,n).reduce(m,0),c=r+i.offsetStart+N.value,d=c+s[n],h=c+o;if(void 0!==l){var p=r-w,f=i.scrollStart+p;h=!0!==a&&f=r;l--)s[l]=o;var c=Math.floor((d.value-1)/h);E=[];for(var u=0;u<=c;u++){for(var g=0,p=Math.min((u+1)*h,d.value),f=u*h;f=0?(U(M.value.from),(0,a.Y3)((function(){W(e)}))):Y()}function j(e){if(void 0===e&&"undefined"!==typeof window){var t=u();void 0!==t&&null!==t&&8!==t.nodeType&&(e=v(t,y(),A.value,I.value,C.virtualScrollHorizontal,L.lang.rtl,C.virtualScrollStickySizeStart,C.virtualScrollStickySizeEnd).scrollViewSize)}n=e;var i=parseFloat(C.virtualScrollSliceRatioBefore)||0,o=parseFloat(C.virtualScrollSliceRatioAfter)||0,s=1+i+o,r=void 0===e||e<=0?1:Math.ceil(e/w.value),a=Math.max(1,r,Math.ceil((C.virtualScrollSliceSize>0?C.virtualScrollSliceSize:10)/s));T.value={total:Math.ceil(a*s),start:Math.ceil(a*i),center:Math.ceil(a*(.5+i)),end:Math.ceil(a*(1+i)),view:r}}function K(e,t){var i=!0===C.virtualScrollHorizontal?"width":"height",n=o()({},"--q-virtual-scroll-item-"+i,w.value+"px");return["tbody"===e?(0,a.h)(e,{class:"q-virtual-scroll__padding",key:"before",ref:A},[(0,a.h)("tr",[(0,a.h)("td",{style:r()(o()({},i,"".concat(N.value,"px")),n),colspan:P.value})])]):(0,a.h)(e,{class:"q-virtual-scroll__padding",key:"before",ref:A,style:r()(o()({},i,"".concat(N.value,"px")),n)}),(0,a.h)(e,{class:"q-virtual-scroll__content",key:"content",ref:R,tabindex:-1},t.flat()),"tbody"===e?(0,a.h)(e,{class:"q-virtual-scroll__padding",key:"after",ref:I},[(0,a.h)("tr",[(0,a.h)("td",{style:r()(o()({},i,"".concat(D.value,"px")),n),colspan:P.value})])]):(0,a.h)(e,{class:"q-virtual-scroll__padding",key:"after",ref:I,style:r()(o()({},i,"".concat(D.value,"px")),n)})]}function G(e){i!==e&&(void 0!==C.onVirtualScroll&&S("virtualScroll",{index:e,from:M.value.from,to:M.value.to-1,direction:e{"use strict";i.d(t,{ZP:()=>a,jO:()=>r});i(34442),i(46727),i(3452),i(52519);var n=i(59835),o={left:"start",center:"center",right:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},s=Object.keys(o),r={align:{type:String,validator:function(e){return s.includes(e)}}};function a(e){return(0,n.Fl)((function(){var t=void 0===e.align?!0===e.vertical?"stretch":"left":e.align;return"".concat(!0===e.vertical?"items":"justify","-").concat(o[t])}))}},74397:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c,u:()=>l});i(58665),i(93954);var n=i(59835),o=i(60499),s=i(2589),r=i(91384),a=i(61705),l={target:{default:!0},noParentEvent:Boolean,contextMenu:Boolean};function c(e){var t=e.showing,i=e.avoidEmit,l=e.configureAnchorEl,c=(0,n.FN)(),d=c.props,u=c.proxy,h=c.emit,g=(0,o.iH)(null),p=null;function f(e){return null!==g.value&&(void 0===e||void 0===e.touches||e.touches.length<=1)}var m={};function v(){(0,r.ul)(m,"anchor")}function _(e){g.value=e;while(g.value.classList.contains("q-anchor--skip"))g.value=g.value.parentNode;l()}function b(){if(!1===d.target||""===d.target||null===u.$el.parentNode)g.value=null;else if(!0===d.target)_(u.$el.parentNode);else{var e=d.target;if("string"===typeof d.target)try{e=document.querySelector(d.target)}catch(t){e=void 0}void 0!==e&&null!==e?(g.value=e.$el||e,l()):(g.value=null,console.error('Anchor: target "'.concat(d.target,'" not found')))}}return void 0===l&&(Object.assign(m,{hide:function(e){u.hide(e)},toggle:function(e){u.toggle(e),e.qAnchorHandled=!0},toggleKey:function(e){!0===(0,a.So)(e,13)&&m.toggle(e)},contextClick:function(e){u.hide(e),(0,r.X$)(e),(0,n.Y3)((function(){u.show(e),e.qAnchorHandled=!0}))},prevent:r.X$,mobileTouch:function(e){if(m.mobileCleanup(e),!0===f(e)){u.hide(e),g.value.classList.add("non-selectable");var t=e.target;(0,r.M0)(m,"anchor",[[t,"touchmove","mobileCleanup","passive"],[t,"touchend","mobileCleanup","passive"],[t,"touchcancel","mobileCleanup","passive"],[g.value,"contextmenu","prevent","notPassive"]]),p=setTimeout((function(){p=null,u.show(e),e.qAnchorHandled=!0}),300)}},mobileCleanup:function(e){g.value.classList.remove("non-selectable"),null!==p&&(clearTimeout(p),p=null),!0===t.value&&void 0!==e&&(0,s.M)()}}),l=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:d.contextMenu;!0!==d.noParentEvent&&null!==g.value&&(e=!0===t?!0===u.$q.platform.is.mobile?[[g.value,"touchstart","mobileTouch","passive"]]:[[g.value,"mousedown","hide","passive"],[g.value,"contextmenu","contextClick","notPassive"]]:[[g.value,"click","toggle","passive"],[g.value,"keyup","toggleKey","passive"]],(0,r.M0)(m,"anchor",e))}),(0,n.YP)((function(){return d.contextMenu}),(function(e){null!==g.value&&(v(),l(e))})),(0,n.YP)((function(){return d.target}),(function(){null!==g.value&&v(),b()})),(0,n.YP)((function(){return d.noParentEvent}),(function(e){null!==g.value&&(!0===e?v():l())})),(0,n.bv)((function(){b(),!0!==i&&!0===d.modelValue&&null===g.value&&h("update:modelValue",!1)})),(0,n.Jd)((function(){null!==p&&clearTimeout(p),v()})),{anchorEl:g,canShow:f,anchorEvents:m}}},68234:(e,t,i)=>{"use strict";i.d(t,{S:()=>o,Z:()=>s});var n=i(59835),o={dark:{type:Boolean,default:null}};function s(e,t){return(0,n.Fl)((function(){return null===e.dark?t.dark.isActive:e.dark}))}},36169:(e,t,i)=>{"use strict";i.d(t,{ZP:()=>O,yV:()=>I,HJ:()=>M,Cl:()=>R,tL:()=>P});var n=i(46264),o=i.n(n),s=(i(80676),i(58665),i(85711),i(93954),i(69665),i(52519),i(59835)),r=i(60499),a=i(61957),l=i(47506),c=i(22857),d=i(13902),u=i(68234),h=(i(46727),i(98998),i(65716),i(59437),i(77280),i(40702),i(18381),i(95439));function g(e){var t=e.validate,i=e.resetValidation,n=e.requiresQForm,o=(0,s.f3)(h.vh,!1);if(!1!==o){var r=(0,s.FN)(),a=r.props,l=r.proxy;Object.assign(l,{validate:t,resetValidation:i}),(0,s.YP)((function(){return a.disable}),(function(e){!0===e?("function"===typeof i&&i(),o.unbindComponent(l)):o.bindComponent(l)})),(0,s.bv)((function(){!0!==a.disable&&o.bindComponent(l)})),(0,s.Jd)((function(){!0!==a.disable&&o.unbindComponent(l)}))}else!0===n&&console.error("Parent QForm not found on useFormChild()!")}i(11476),i(32119);var p=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,f=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,m=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,v=/^rgb\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5])\)$/,_=/^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/,b={date:function(e){return/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(e)},time:function(e){return/^([0-1]?\d|2[0-3]):[0-5]\d$/.test(e)},fulltime:function(e){return/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(e)},timeOrFulltime:function(e){return/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(e)},email:function(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)},hexColor:function(e){return p.test(e)},hexaColor:function(e){return f.test(e)},hexOrHexaColor:function(e){return m.test(e)},rgbColor:function(e){return v.test(e)},rgbaColor:function(e){return _.test(e)},rgbOrRgbaColor:function(e){return v.test(e)||_.test(e)},hexOrRgbColor:function(e){return p.test(e)||v.test(e)},hexaOrRgbaColor:function(e){return f.test(e)||_.test(e)},anyColor:function(e){return m.test(e)||v.test(e)||_.test(e)}};var y=i(60899),w=i(43251),x=[!0,!1,"ondemand"],C={modelValue:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],validator:function(e){return x.includes(e)}}};function S(e,t){var i=(0,s.FN)(),n=i.props,o=i.proxy,a=(0,r.iH)(!1),l=(0,r.iH)(null),c=(0,r.iH)(null);g({validate:_,resetValidation:v});var d,u=0,h=(0,s.Fl)((function(){return void 0!==n.rules&&null!==n.rules&&0!==n.rules.length})),p=(0,s.Fl)((function(){return!0!==n.disable&&!0===h.value})),f=(0,s.Fl)((function(){return!0===n.error||!0===a.value})),m=(0,s.Fl)((function(){return"string"===typeof n.errorMessage&&0!==n.errorMessage.length?n.errorMessage:l.value}));function v(){u++,t.value=!1,c.value=null,a.value=!1,l.value=null,C.cancel()}function _(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:n.modelValue;if(!0!==p.value)return!0;for(var i=++u,o=!0!==t.value?function(){c.value=!0}:function(){},s=function(e,i){!0===e&&o(),a.value=e,l.value=i||null,t.value=!1},r=[],d=0;d{"use strict";i.d(t,{Z:()=>o});i(91804),i(65716),i(61732),i(97605),i(77280);var n=i(59835);function o(e,t){function i(){var t=e.modelValue;try{var i="DataTransfer"in window?new DataTransfer:"ClipboardEvent"in window?new ClipboardEvent("").clipboardData:void 0;return Object(t)===t&&("length"in t?Array.from(t):[t]).forEach((function(e){i.items.add(e)})),{files:i.files}}catch(n){return{files:void 0}}}return!0===t?(0,n.Fl)((function(){if("file"===e.type)return i()})):(0,n.Fl)(i)}},21970:(e,t,i)=>{"use strict";i.d(t,{Pl:()=>d,TS:()=>c,ZP:()=>u});i(91804),i(65716),i(61732),i(69665),i(80676),i(51393),i(48015),i(17513),i(60893),i(65735),i(97605),i(77280),i(72091),i(46776),i(34464),i(62590),i(46727),i(3452),i(55067),i(56072),i(58665);var n=i(59835),o=i(60499),s=i(47506),r=i(91384);function a(e,t,i,n){var o=[];return e.forEach((function(e){!0===n(e)?o.push(e):t.push({failedPropValidation:i,file:e})})),o}function l(e){e&&e.dataTransfer&&(e.dataTransfer.dropEffect="copy"),(0,r.NS)(e)}var c={multiple:Boolean,accept:String,capture:String,maxFileSize:[Number,String],maxTotalSize:[Number,String],maxFiles:[Number,String],filter:Function},d=["rejected"];function u(e){var t=e.editable,i=e.dnd,c=e.getFileInput,d=e.addFilesToQueue,u=(0,n.FN)(),h=u.props,g=u.emit,p=u.proxy,f=(0,o.iH)(null),m=(0,n.Fl)((function(){return void 0!==h.accept?h.accept.split(",").map((function(e){return e=e.trim(),"*"===e?"*/":(e.endsWith("/*")&&(e=e.slice(0,e.length-1)),e.toUpperCase())})):null})),v=(0,n.Fl)((function(){return parseInt(h.maxFiles,10)})),_=(0,n.Fl)((function(){return parseInt(h.maxTotalSize,10)}));function b(e){if(t.value)if(e!==Object(e)&&(e={target:null}),null!==e.target&&!0===e.target.matches('input[type="file"]'))0===e.clientX&&0===e.clientY&&(0,r.sT)(e);else{var i=c();i&&i!==e.target&&i.click(e)}}function y(e){t.value&&e&&d(null,e)}function w(e,t,i,n){var o=Array.from(t||e.target.files),s=[],r=function(){0!==s.length&&g("rejected",s)};if(void 0!==h.accept&&-1===m.value.indexOf("*/")&&(o=a(o,s,"accept",(function(e){return m.value.some((function(t){return e.type.toUpperCase().startsWith(t)||e.name.toUpperCase().endsWith(t)}))})),0===o.length))return r();if(void 0!==h.maxFileSize){var l=parseInt(h.maxFileSize,10);if(o=a(o,s,"max-file-size",(function(e){return e.size<=l})),0===o.length)return r()}if(!0!==h.multiple&&0!==o.length&&(o=[o[0]]),o.forEach((function(e){e.__key=e.webkitRelativePath+e.lastModified+e.name+e.size})),!0===n){var c=i.map((function(e){return e.__key}));o=a(o,s,"duplicate",(function(e){return!1===c.includes(e.__key)}))}if(0===o.length)return r();if(void 0!==h.maxTotalSize){var d=!0===n?i.reduce((function(e,t){return e+t.size}),0):0;if(o=a(o,s,"max-total-size",(function(e){return d+=e.size,d<=_.value})),0===o.length)return r()}if("function"===typeof h.filter){var u=h.filter(o);o=a(o,s,"filter",(function(e){return u.includes(e)}))}if(void 0!==h.maxFiles){var p=!0===n?i.length:0;if(o=a(o,s,"max-files",(function(){return p++,p<=v.value})),0===o.length)return r()}return r(),0!==o.length?o:void 0}function x(e){l(e),!0!==i.value&&(i.value=!0)}function C(e){(0,r.NS)(e);var t=null!==e.relatedTarget||!0!==s.Lp.is.safari?e.relatedTarget!==f.value:!1===document.elementsFromPoint(e.clientX,e.clientY).includes(f.value);!0===t&&(i.value=!1)}function S(e){l(e);var t=e.dataTransfer.files;0!==t.length&&d(null,t),i.value=!1}function k(e){if(!0===i.value)return(0,n.h)("div",{ref:f,class:"q-".concat(e,"__dnd absolute-full"),onDragenter:l,onDragover:l,onDragleave:C,onDrop:S})}return Object.assign(p,{pickFiles:b,addFiles:y}),{pickFiles:b,addFiles:y,onDragover:x,onDragleave:C,processFiles:w,getDndNode:k,maxFilesNumber:v,maxTotalSizeNumber:_}}},99256:(e,t,i)=>{"use strict";i.d(t,{Do:()=>l,Fz:()=>r,eX:()=>a});var n=i(46264),o=i.n(n),s=(i(62590),i(59835)),r={name:String};function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function(t,i,n){t[i]((0,s.h)("input",o()({class:"hidden"+(n||"")},e.value)))}}function l(e){return(0,s.Fl)((function(){return e.name||e["for"]}))}},93929:(e,t,i)=>{"use strict";i.d(t,{ZP:()=>d,fL:()=>c,kM:()=>l});i(93954),i(58665);var n=i(59835),o=i(60499),s=i(25310),r=i(52046),a=0,l={fullscreen:Boolean,noRouteFullscreenExit:Boolean},c=["update:fullscreen","fullscreen"];function d(){var e,t,i,l=(0,n.FN)(),c=l.props,d=l.emit,u=l.proxy,h=(0,o.iH)(!1);function g(){!0===h.value?f():p()}function p(){!0!==h.value&&(h.value=!0,i=u.$el.parentNode,i.replaceChild(t,u.$el),document.body.appendChild(u.$el),a++,1===a&&document.body.classList.add("q-body--fullscreen-mixin"),e={handler:f},s.Z.add(e))}function f(){!0===h.value&&(void 0!==e&&(s.Z.remove(e),e=void 0),i.replaceChild(u.$el,t),h.value=!1,a=Math.max(0,a-1),0===a&&(document.body.classList.remove("q-body--fullscreen-mixin"),void 0!==u.$el.scrollIntoView&&setTimeout((function(){u.$el.scrollIntoView()}))))}return!0===(0,r.Rb)(l)&&(0,n.YP)((function(){return u.$route.fullPath}),(function(){!0!==c.noRouteFullscreenExit&&f()})),(0,n.YP)((function(){return c.fullscreen}),(function(e){h.value!==e&&g()})),(0,n.YP)(h,(function(e){d("update:fullscreen",e),d("fullscreen",e)})),(0,n.wF)((function(){t=document.createElement("span")})),(0,n.bv)((function(){!0===c.fullscreen&&p()})),(0,n.Jd)(f),Object.assign(u,{toggleFullscreen:g,setFullscreen:p,exitFullscreen:f}),{inFullscreen:h,toggleFullscreen:g}}},94953:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});var n=i(59835),o=i(25310);function s(e,t,i){var s;function r(){void 0!==s&&(o.Z.remove(s),s=void 0)}return(0,n.Jd)((function(){!0===e.value&&r()})),{removeFromHistory:r,addToHistory:function(){s={condition:function(){return!0===i.value},handler:t},o.Z.add(s)}}}},62802:(e,t,i)=>{"use strict";i.d(t,{Z:()=>l});i(11476),i(32119);var n=i(47506),o=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/,s=/(?:[\u3300-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\uFE30-\uFE4F]|[\uD840-\uD868\uD86A-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD873[\uDC00-\uDEAF]|\uD87E[\uDC00-\uDE1F])/,r=/[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/,a=/[a-z0-9_ -]$/i;function l(e){return function(t){if("compositionend"===t.type||"change"===t.type){if(!0!==t.target.qComposing)return;t.target.qComposing=!1,e(t)}else if("compositionupdate"===t.type&&!0!==t.target.qComposing&&"string"===typeof t.data){var i=!0===n.Lp.is.firefox?!1===a.test(t.data):!0===o.test(t.data)||!0===s.test(t.data)||!0===r.test(t.data);!0===i&&(t.target.qComposing=!0)}}}},63842:(e,t,i)=>{"use strict";i.d(t,{ZP:()=>a,gH:()=>r,vr:()=>s});i(58665);var n=i(59835),o=i(52046),s={modelValue:{type:Boolean,default:null},"onUpdate:modelValue":[Function,Array]},r=["beforeShow","show","beforeHide","hide"];function a(e){var t,i=e.showing,s=e.canShow,r=e.hideOnRouteChange,a=e.handleShow,l=e.handleHide,c=e.processOnMount,d=(0,n.FN)(),u=d.props,h=d.emit,g=d.proxy;function p(e){!0===i.value?v(e):f(e)}function f(e){if(!(!0===u.disable||void 0!==e&&!0===e.qAnchorHandled||void 0!==s&&!0!==s(e))){var i=void 0!==u["onUpdate:modelValue"];!0===i&&(h("update:modelValue",!0),t=e,(0,n.Y3)((function(){t===e&&(t=void 0)}))),null!==u.modelValue&&!1!==i||m(e)}}function m(e){!0!==i.value&&(i.value=!0,h("beforeShow",e),void 0!==a?a(e):h("show",e))}function v(e){if(!0!==u.disable){var i=void 0!==u["onUpdate:modelValue"];!0===i&&(h("update:modelValue",!1),t=e,(0,n.Y3)((function(){t===e&&(t=void 0)}))),null!==u.modelValue&&!1!==i||_(e)}}function _(e){!1!==i.value&&(i.value=!1,h("beforeHide",e),void 0!==l?l(e):h("hide",e))}function b(e){if(!0===u.disable&&!0===e)void 0!==u["onUpdate:modelValue"]&&h("update:modelValue",!1);else if(!0===e!==i.value){var n=!0===e?m:_;n(t)}}(0,n.YP)((function(){return u.modelValue}),b),void 0!==r&&!0===(0,o.Rb)(d)&&(0,n.YP)((function(){return g.$route.fullPath}),(function(){!0===r.value&&!0===i.value&&v()})),!0===c&&(0,n.bv)((function(){b(u.modelValue)}));var y={show:f,hide:v,toggle:p};return Object.assign(g,y),y}},26120:(e,t,i)=>{"use strict";i.d(t,{ZP:()=>x,vZ:()=>_,K6:()=>w,t6:()=>y});var n=i(46264),o=i.n(n),s=(i(80676),i(33605),i(36519),i(11476),i(56394),i(22725),i(88554),i(62590),i(56072),i(65716),i(93954),i(58665),i(59835)),r=i(60499),a=i(61957),l=(i(91804),i(61732),i(95149),i(73417),i(12518),i(67451),i(47506)),c=i(65987),d=i(99367),u=i(91384),h=i(2589);function g(e){var t=[.06,6,50];return"string"===typeof e&&e.length&&e.split(":").forEach((function(e,i){var n=parseFloat(e);n&&(t[i]=n)})),t}const p=(0,c.f)({name:"touch-swipe",beforeMount:function(e,t){var i=t.value,n=t.arg,o=t.modifiers;if(!0===o.mouse||!0===l.Lp.has.touch){var s=!0===o.mouseCapture?"Capture":"",r={handler:i,sensitivity:g(n),direction:(0,d.R)(o),noop:u.ZT,mouseStart:function(e){(0,d.n)(e,r)&&(0,u.du)(e)&&((0,u.M0)(r,"temp",[[document,"mousemove","move","notPassive".concat(s)],[document,"mouseup","end","notPassiveCapture"]]),r.start(e,!0))},touchStart:function(e){if((0,d.n)(e,r)){var t=e.target;(0,u.M0)(r,"temp",[[t,"touchmove","move","notPassiveCapture"],[t,"touchcancel","end","notPassiveCapture"],[t,"touchend","end","notPassiveCapture"]]),r.start(e)}},start:function(t,i){!0===l.Lp.is.firefox&&(0,u.Jf)(e,!0);var n=(0,u.FK)(t);r.event={x:n.left,y:n.top,time:Date.now(),mouse:!0===i,dir:!1}},move:function(e){if(void 0!==r.event)if(!1===r.event.dir){var t=Date.now()-r.event.time;if(0!==t){var i=(0,u.FK)(e),n=i.left-r.event.x,o=Math.abs(n),s=i.top-r.event.y,a=Math.abs(s);if(!0!==r.event.mouse){if(or.sensitivity[0]&&(r.event.dir=s<0?"up":"down"),!0===r.direction.horizontal&&o>a&&a<100&&l>r.sensitivity[0]&&(r.event.dir=n<0?"left":"right"),!0===r.direction.up&&or.sensitivity[0]&&(r.event.dir="up"),!0===r.direction.down&&o0&&o<100&&c>r.sensitivity[0]&&(r.event.dir="down"),!0===r.direction.left&&o>a&&n<0&&a<100&&l>r.sensitivity[0]&&(r.event.dir="left"),!0===r.direction.right&&o>a&&n>0&&a<100&&l>r.sensitivity[0]&&(r.event.dir="right"),!1!==r.event.dir?((0,u.NS)(e),!0===r.event.mouse&&(document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),(0,h.M)(),r.styleCleanup=function(e){r.styleCleanup=void 0,document.body.classList.remove("non-selectable");var t=function(){document.body.classList.remove("no-pointer-events--children")};!0===e?setTimeout(t,50):t()}),r.handler({evt:e,touch:!0!==r.event.mouse,mouse:r.event.mouse,direction:r.event.dir,duration:t,distance:{x:o,y:a}})):r.end(e)}}else(0,u.NS)(e)},end:function(t){void 0!==r.event&&((0,u.ul)(r,"temp"),!0===l.Lp.is.firefox&&(0,u.Jf)(e,!1),void 0!==r.styleCleanup&&r.styleCleanup(!0),void 0!==t&&!1!==r.event.dir&&(0,u.NS)(t),r.event=void 0)}};if(e.__qtouchswipe=r,!0===o.mouse){var a=!0===o.mouseCapture||!0===o.mousecapture?"Capture":"";(0,u.M0)(r,"main",[[e,"mousedown","mouseStart","passive".concat(a)]])}!0===l.Lp.has.touch&&(0,u.M0)(r,"main",[[e,"touchstart","touchStart","passive".concat(!0===o.capture?"Capture":"")],[e,"touchmove","noop","notPassiveCapture"]])}},updated:function(e,t){var i=e.__qtouchswipe;void 0!==i&&(t.oldValue!==t.value&&("function"!==typeof t.value&&i.end(),i.handler=t.value),i.direction=(0,d.R)(t.modifiers))},beforeUnmount:function(e){var t=e.__qtouchswipe;void 0!==t&&((0,u.ul)(t,"main"),(0,u.ul)(t,"temp"),!0===l.Lp.is.firefox&&(0,u.Jf)(e,!1),void 0!==t.styleCleanup&&t.styleCleanup(),delete e.__qtouchswipe)}});i(98998),i(38194),i(77280),i(40702);function f(){var e=new Map;return{getCache:function(t,i){return void 0===e[t]?e[t]=i:e[t]},getCacheWithFn:function(t,i){return void 0===e[t]?e[t]=i():e[t]}}}var m=i(22026),v=i(52046),_={name:{required:!0},disable:Boolean},b={setup:function(e,t){var i=t.slots;return function(){return(0,s.h)("div",{class:"q-panel scroll",role:"tabpanel"},(0,m.KR)(i["default"]))}}},y={modelValue:{required:!0},animated:Boolean,infinite:Boolean,swipeable:Boolean,vertical:Boolean,transitionPrev:String,transitionNext:String,transitionDuration:{type:[String,Number],default:300},keepAlive:Boolean,keepAliveInclude:[String,Array,RegExp],keepAliveExclude:[String,Array,RegExp],keepAliveMax:Number},w=["update:modelValue","beforeTransition","transition"];function x(){var e,t,i=(0,s.FN)(),n=i.props,l=i.emit,c=i.proxy,d=f(),u=d.getCacheWithFn,h=(0,r.iH)(null),g=(0,r.iH)(null);function _(e){var t=!0===n.vertical?"up":"left";M((!0===c.$q.lang.rtl?-1:1)*(e.direction===t?1:-1))}var y=(0,s.Fl)((function(){return[[p,_,void 0,{horizontal:!0!==n.vertical,vertical:n.vertical,mouse:!0}]]})),w=(0,s.Fl)((function(){return n.transitionPrev||"slide-".concat(!0===n.vertical?"down":"right")})),x=(0,s.Fl)((function(){return n.transitionNext||"slide-".concat(!0===n.vertical?"up":"left")})),C=(0,s.Fl)((function(){return"--q-transition-duration: ".concat(n.transitionDuration,"ms")})),S=(0,s.Fl)((function(){return"string"===typeof n.modelValue||"number"===typeof n.modelValue?n.modelValue:String(n.modelValue)})),k=(0,s.Fl)((function(){return{include:n.keepAliveInclude,exclude:n.keepAliveExclude,max:n.keepAliveMax}})),L=(0,s.Fl)((function(){return void 0!==n.keepAliveInclude||void 0!==n.keepAliveExclude}));function E(){M(1)}function N(){M(-1)}function D(e){l("update:modelValue",e)}function T(e){return void 0!==e&&null!==e&&""!==e}function A(t){return e.findIndex((function(e){return e.props.name===t&&""!==e.props.disable&&!0!==e.props.disable}))}function I(){return e.filter((function(e){return""!==e.props.disable&&!0!==e.props.disable}))}function R(e){var t=0!==e&&!0===n.animated&&-1!==h.value?"q-transition--"+(-1===e?w.value:x.value):null;g.value!==t&&(g.value=t)}function M(i){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:h.value,s=o+i;while(s>-1&&s{"use strict";i.d(t,{Z:()=>d});i(62590),i(69665),i(72091),i(32455);var n=i(60499),o=i(59835),s=(i(91384),i(17026)),r=i(56669),a=i(2909),l=i(43251);function c(e){e=e.parent;while(void 0!==e&&null!==e){if("QGlobalDialog"===e.type.name)return!0;if("QDialog"===e.type.name||"QMenu"===e.type.name)return!1;e=e.parent}return!1}function d(e,t,i,d){var u=(0,n.iH)(!1),h=(0,n.iH)(!1);var g=null,p={},f="dialog"===d&&c(e);function m(t){if(!0===t)return(0,s.xF)(p),void(h.value=!0);h.value=!1,!1===u.value&&(!1===f&&null===g&&(g=(0,r.q_)(!1,d)),u.value=!0,a.Q$.push(e.proxy),(0,s.YX)(p))}function v(t){if(h.value=!1,!0===t){(0,s.xF)(p),u.value=!1;var i=a.Q$.indexOf(e.proxy);-1!==i&&a.Q$.splice(i,1),null!==g&&((0,r.pB)(g),g=null)}}return(0,o.Ah)((function(){v(!0)})),e.proxy.__qPortal=!0,(0,l.g)(e.proxy,"contentEl",(function(){return t.value})),{showPortal:m,hidePortal:v,portalIsActive:u,portalIsAccessible:h,renderPortal:function(){return!0===f?i():!0===u.value?[(0,o.h)(o.lR,{to:g},i())]:void 0}}}},13963:(e,t,i)=>{"use strict";i.d(t,{Z:()=>o});var n=i(5984);function o(){var e;return{preventBodyScroll:function(t){t===e||void 0===e&&!0!==t||(e=t,(0,n.Z)(t))}}}},55917:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});i(72091);var n=i(60499),o=i(59835);function s(e,t){var i=(0,n.iH)(null),s=(0,o.Fl)((function(){return!0===e.disable?null:(0,o.h)("span",{ref:i,class:"no-outline",tabindex:-1})}));function r(e){var n=t.value;void 0!==e&&0===e.type.indexOf("key")?null!==n&&document.activeElement!==n&&!0===n.contains(document.activeElement)&&n.focus():null!==i.value&&(void 0===e||null!==n&&!0===n.contains(e.target))&&i.value.focus()}return{refocusTargetEl:s,refocusTarget:r}}},70945:(e,t,i)=>{"use strict";i.d(t,{$:()=>u,Z:()=>h});i(85711),i(46776),i(65716),i(31719),i(34442),i(88554),i(87360),i(52519),i(11476),i(18964),i(59437);var n=i(59835),o=i(52046);function s(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}function r(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function a(e,t){var i,n=function(){var i=t[o],n=e[o];if("string"===typeof i){if(i!==n)return{v:!1}}else if(!1===Array.isArray(n)||n.length!==i.length||i.some((function(e,t){return e!==n[t]})))return{v:!1}};for(var o in t)if(i=n(),i)return i.v;return!0}function l(e,t){return!0===Array.isArray(t)?e.length===t.length&&e.every((function(e,i){return e===t[i]})):1===e.length&&e[0]===t}function c(e,t){return!0===Array.isArray(e)?l(e,t):!0===Array.isArray(t)?l(t,e):e===t}function d(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var i in e)if(!1===c(e[i],t[i]))return!1;return!0}var u={to:[String,Object],replace:Boolean,exact:Boolean,activeClass:{type:String,default:"q-router-link--active"},exactActiveClass:{type:String,default:"q-router-link--exact-active"},href:String,target:String,disable:Boolean};function h(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.fallbackTag,i=e.useDisableForRouterLinkProps,l=void 0===i||i,c=(0,n.FN)(),u=c.props,h=c.proxy,g=c.emit,p=(0,o.Rb)(c),f=(0,n.Fl)((function(){return!0!==u.disable&&void 0!==u.href})),m=!0===l?(0,n.Fl)((function(){return!0===p&&!0!==u.disable&&!0!==f.value&&void 0!==u.to&&null!==u.to&&""!==u.to})):(0,n.Fl)((function(){return!0===p&&!0!==f.value&&void 0!==u.to&&null!==u.to&&""!==u.to})),v=(0,n.Fl)((function(){return!0===m.value?L(u.to):null})),_=(0,n.Fl)((function(){return null!==v.value})),b=(0,n.Fl)((function(){return!0===f.value||!0===_.value})),y=(0,n.Fl)((function(){return"a"===u.type||!0===b.value?"a":u.tag||t||"div"})),w=(0,n.Fl)((function(){return!0===f.value?{href:u.href,target:u.target}:!0===_.value?{href:v.value.href,target:u.target}:{}})),x=(0,n.Fl)((function(){if(!1===_.value)return-1;var e=v.value.matched,t=e.length,i=e[t-1];if(void 0===i)return-1;var n=h.$route.matched;if(0===n.length)return-1;var o=n.findIndex(r.bind(null,i));if(o>-1)return o;var a=s(e[t-2]);return t>1&&s(i)===a&&n[n.length-1].path!==a?n.findIndex(r.bind(null,e[t-2])):o})),C=(0,n.Fl)((function(){return!0===_.value&&-1!==x.value&&a(h.$route.params,v.value.params)})),S=(0,n.Fl)((function(){return!0===C.value&&x.value===h.$route.matched.length-1&&d(h.$route.params,v.value.params)})),k=(0,n.Fl)((function(){return!0===_.value?!0===S.value?" ".concat(u.exactActiveClass," ").concat(u.activeClass):!0===u.exact?"":!0===C.value?" ".concat(u.activeClass):"":""}));function L(e){try{return h.$router.resolve(e)}catch(t){}return null}function E(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.returnRouterError,n=t.to,o=void 0===n?u.to:n,s=t.replace,r=void 0===s?u.replace:s;if(!0===u.disable)return e.preventDefault(),Promise.resolve(!1);if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||void 0!==e.button&&0!==e.button||"_blank"===u.target)return Promise.resolve(!1);e.preventDefault();var a=h.$router[!0===r?"replace":"push"](o);return!0===i?a:a.then((function(){}))["catch"]((function(){}))}function N(e){if(!0===_.value){var t=function(t){return E(e,t)};g("click",e,t),!0!==e.defaultPrevented&&t()}else g("click",e)}return{hasRouterLink:_,hasHrefLink:f,hasLink:b,linkTag:y,resolvedLink:v,linkIsActive:C,linkIsExactActive:S,linkClass:k,linkAttrs:w,getLink:L,navigateToRouterLink:E,navigateOnClick:N}}},64088:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});var n=i(60499),o=i(59835),s=i(91384);function r(e,t){var i,r=(0,n.iH)(null);function a(e,t){var n="".concat(void 0!==t?"add":"remove","EventListener"),o=void 0!==t?t:i;e!==window&&e[n]("scroll",o,s.rU.passive),window[n]("scroll",o,s.rU.passive),i=t}function l(){null!==r.value&&(a(r.value),r.value=null)}var c=(0,o.YP)((function(){return e.noParentEvent}),(function(){null!==r.value&&(l(),t())}));return(0,o.Jd)(c),{localScrollTarget:r,unconfigureScrollTarget:l,changeScrollEvent:a}}},20244:(e,t,i)=>{"use strict";i.d(t,{LU:()=>s,Ok:()=>o,ZP:()=>r});var n=i(59835),o={xs:18,sm:24,md:32,lg:38,xl:46},s={size:String};function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o;return(0,n.Fl)((function(){return void 0!==e.size?{fontSize:e.size in t?"".concat(t[e.size],"px"):e.size}:null}))}},16916:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});var n=i(59835),o=i(52046);function s(){var e,t=(0,n.FN)();function i(){e=void 0}return(0,n.se)(i),(0,n.Jd)(i),{removeTick:i,registerTick:function(i){e=i,(0,n.Y3)((function(){e===i&&(!1===(0,o.$D)(t)&&e(),e=void 0)}))}}}},52695:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});i(93954);var n=i(59835),o=i(52046);function s(){var e=null,t=(0,n.FN)();function i(){null!==e&&(clearTimeout(e),e=null)}return(0,n.se)(i),(0,n.Jd)(i),{removeTimeout:i,registerTimeout:function(n,s){i(e),!1===(0,o.$D)(t)&&(e=setTimeout(n,s))}}}},20431:(e,t,i)=>{"use strict";i.d(t,{D:()=>o,Z:()=>s});i(80676);var n=i(59835),o={transitionShow:{type:String,default:"fade"},transitionHide:{type:String,default:"fade"},transitionDuration:{type:[String,Number],default:300}};function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){};return{transitionProps:(0,n.Fl)((function(){var n="q-transition--".concat(e.transitionShow||t()),o="q-transition--".concat(e.transitionHide||i());return{appear:!0,enterFromClass:"".concat(n,"-enter-from"),enterActiveClass:"".concat(n,"-enter-active"),enterToClass:"".concat(n,"-enter-to"),leaveFromClass:"".concat(o,"-leave-from"),leaveActiveClass:"".concat(o,"-leave-active"),leaveToClass:"".concat(o,"-leave-to")}})),transitionStyle:(0,n.Fl)((function(){return"--q-transition-duration: ".concat(e.transitionDuration,"ms")}))}}},19302:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});var n=i(59835),o=i(95439);function s(){return(0,n.f3)(o.Ng)}},62146:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});i(65735),i(93954);var n=i(65987),o=i(2909),s=i(61705);function r(e){if(!1===e)return 0;if(!0===e||void 0===e)return 1;var t=parseInt(e,10);return isNaN(t)?0:t}const a=(0,n.f)({name:"close-popup",beforeMount:function(e,t){var i=t.value,n={depth:r(i),handler:function(t){0!==n.depth&&setTimeout((function(){var i=(0,o.je)(e);void 0!==i&&(0,o.S7)(i,t,n.depth)}))},handlerKey:function(e){!0===(0,s.So)(e,13)&&n.handler(e)}};e.__qclosepopup=n,e.addEventListener("click",n.handler),e.addEventListener("keyup",n.handlerKey)},updated:function(e,t){var i=t.value,n=t.oldValue;i!==n&&(e.__qclosepopup.depth=r(i))},beforeUnmount:function(e){var t=e.__qclosepopup;e.removeEventListener("click",t.handler),e.removeEventListener("keyup",t.handlerKey),delete e.__qclosepopup}})},51136:(e,t,i)=>{"use strict";i.d(t,{Z:()=>d});i(52519),i(69665),i(93954),i(32455),i(72091),i(58665),i(91804),i(65716),i(61732);var n=i(65987),o=i(70223),s=i(91384),r=i(61705);function a(e){var t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:250,n=!1;return function(){return!1===n&&(n=!0,setTimeout((function(){n=!1}),i),t=e.apply(this,arguments)),t}}function l(e,t,i,n){!0===i.modifiers.stop&&(0,s.sT)(e);var r=i.modifiers.color,a=i.modifiers.center;a=!0===a||!0===n;var l=document.createElement("span"),c=document.createElement("span"),d=(0,s.FK)(e),u=t.getBoundingClientRect(),h=u.left,g=u.top,p=u.width,f=u.height,m=Math.sqrt(p*p+f*f),v=m/2,_="".concat((p-m)/2,"px"),b=a?_:"".concat(d.left-h-v,"px"),y="".concat((f-m)/2,"px"),w=a?y:"".concat(d.top-g-v,"px");c.className="q-ripple__inner",(0,o.iv)(c,{height:"".concat(m,"px"),width:"".concat(m,"px"),transform:"translate3d(".concat(b,",").concat(w,",0) scale3d(.2,.2,1)"),opacity:0}),l.className="q-ripple".concat(r?" text-"+r:""),l.setAttribute("dir","ltr"),l.appendChild(c),t.appendChild(l);var x=function(){l.remove(),clearTimeout(C)};i.abort.push(x);var C=setTimeout((function(){c.classList.add("q-ripple__inner--enter"),c.style.transform="translate3d(".concat(_,",").concat(y,",0) scale3d(1,1,1)"),c.style.opacity=.2,C=setTimeout((function(){c.classList.remove("q-ripple__inner--enter"),c.classList.add("q-ripple__inner--leave"),c.style.opacity=0,C=setTimeout((function(){l.remove(),i.abort.splice(i.abort.indexOf(x),1)}),275)}),250)}),50)}function c(e,t){var i=t.modifiers,n=t.value,o=t.arg,s=Object.assign({},e.cfg.ripple,i,n);e.modifiers={early:!0===s.early,stop:!0===s.stop,center:!0===s.center,color:s.color||o,keyCodes:[].concat(s.keyCodes||13)}}const d=(0,n.f)({name:"ripple",beforeMount:function(e,t){var i=t.instance.$.appContext.config.globalProperties.$q.config||{};if(!1!==i.ripple){var n={cfg:i,enabled:!1!==t.value,modifiers:{},abort:[],start:function(t){!0===n.enabled&&!0!==t.qSkipRipple&&t.type===(!0===n.modifiers.early?"pointerdown":"click")&&l(t,e,n,!0===t.qKeyEvent)},keystart:a((function(t){!0===n.enabled&&!0!==t.qSkipRipple&&!0===(0,r.So)(t,n.modifiers.keyCodes)&&t.type==="key".concat(!0===n.modifiers.early?"down":"up")&&l(t,e,n,!0)}),300)};c(n,t),e.__qripple=n,(0,s.M0)(n,"main",[[e,"pointerdown","start","passive"],[e,"click","start","passive"],[e,"keydown","keystart","passive"],[e,"keyup","keystart","passive"]])}},updated:function(e,t){if(t.oldValue!==t.value){var i=e.__qripple;void 0!==i&&(i.enabled=!1!==t.value,!0===i.enabled&&Object(t.value)===t.value&&c(i,t))}},beforeUnmount:function(e){var t=e.__qripple;void 0!==t&&(t.abort.forEach((function(e){e()})),(0,s.ul)(t,"main"),delete e._qripple)}})},2873:(e,t,i)=>{"use strict";i.d(t,{Z:()=>d});i(73417),i(12518),i(72091),i(58665),i(52519),i(93954);var n=i(47506),o=i(65987),s=i(99367),r=i(91384),a=i(2589);function l(e,t,i){var n,o=(0,r.FK)(e),s=o.left-t.event.x,a=o.top-t.event.y,l=Math.abs(s),c=Math.abs(a),d=t.direction;!0===d.horizontal&&!0!==d.vertical?n=s<0?"left":"right":!0!==d.horizontal&&!0===d.vertical?n=a<0?"up":"down":!0===d.up&&a<0?(n="up",l>c&&(!0===d.left&&s<0?n="left":!0===d.right&&s>0&&(n="right"))):!0===d.down&&a>0?(n="down",l>c&&(!0===d.left&&s<0?n="left":!0===d.right&&s>0&&(n="right"))):!0===d.left&&s<0?(n="left",l0&&(n="down"))):!0===d.right&&s>0&&(n="right",l0&&(n="down")));var u=!1;if(void 0===n&&!1===i){if(!0===t.event.isFirst||void 0===t.event.lastDir)return{};n=t.event.lastDir,u=!0,"left"===n||"right"===n?(o.left-=s,l=0,s=0):(o.top-=a,c=0,a=0)}return{synthetic:u,payload:{evt:e,touch:!0!==t.event.mouse,mouse:!0===t.event.mouse,position:o,direction:n,isFirst:t.event.isFirst,isFinal:!0===i,duration:Date.now()-t.event.time,distance:{x:l,y:c},offset:{x:s,y:a},delta:{x:o.left-t.event.lastX,y:o.top-t.event.lastY}}}}var c=0;const d=(0,o.f)({name:"touch-pan",beforeMount:function(e,t){var i=t.value,o=t.modifiers;if(!0===o.mouse||!0===n.Lp.has.touch){var d={uid:"qvtp_"+c++,handler:i,modifiers:o,direction:(0,s.R)(o),noop:r.ZT,mouseStart:function(e){(0,s.n)(e,d)&&(0,r.du)(e)&&((0,r.M0)(d,"temp",[[document,"mousemove","move","notPassiveCapture"],[document,"mouseup","end","passiveCapture"]]),d.start(e,!0))},touchStart:function(e){if((0,s.n)(e,d)){var t=e.target;(0,r.M0)(d,"temp",[[t,"touchmove","move","notPassiveCapture"],[t,"touchcancel","end","passiveCapture"],[t,"touchend","end","passiveCapture"]]),d.start(e)}},start:function(t,i){if(!0===n.Lp.is.firefox&&(0,r.Jf)(e,!0),d.lastEvt=t,!0===i||!0===o.stop){if(!0!==d.direction.all&&(!0!==i||!0!==d.modifiers.mouseAllDir&&!0!==d.modifiers.mousealldir)){var s=t.type.indexOf("mouse")>-1?new MouseEvent(t.type,t):new TouchEvent(t.type,t);!0===t.defaultPrevented&&(0,r.X$)(s),!0===t.cancelBubble&&(0,r.sT)(s),Object.assign(s,{qKeyEvent:t.qKeyEvent,qClickOutside:t.qClickOutside,qAnchorHandled:t.qAnchorHandled,qClonedBy:void 0===t.qClonedBy?[d.uid]:t.qClonedBy.concat(d.uid)}),d.initialEvent={target:t.target,event:s}}(0,r.sT)(t)}var a=(0,r.FK)(t),l=a.left,c=a.top;d.event={x:l,y:c,time:Date.now(),mouse:!0===i,detected:!1,isFirst:!0,isFinal:!1,lastX:l,lastY:c}},move:function(e){if(void 0!==d.event){var t=(0,r.FK)(e),i=t.left-d.event.x,n=t.top-d.event.y;if(0!==i||0!==n){d.lastEvt=e;var s=!0===d.event.mouse,c=function(){var t;h(e,s),!0!==o.preserveCursor&&!0!==o.preservecursor&&(t=document.documentElement.style.cursor||"",document.documentElement.style.cursor="grabbing"),!0===s&&document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),(0,a.M)(),d.styleCleanup=function(e){if(d.styleCleanup=void 0,void 0!==t&&(document.documentElement.style.cursor=t),document.body.classList.remove("non-selectable"),!0===s){var i=function(){document.body.classList.remove("no-pointer-events--children")};void 0!==e?setTimeout((function(){i(),e()}),50):i()}else void 0!==e&&e()}};if(!0!==d.event.detected){if(!0===d.direction.all||!0===s&&(!0===d.modifiers.mouseAllDir||!0===d.modifiers.mousealldir))return c(),d.event.detected=!0,void d.move(e);var u=Math.abs(i),g=Math.abs(n);u!==g&&(!0===d.direction.horizontal&&u>g||!0===d.direction.vertical&&u0||!0===d.direction.left&&u>g&&i<0||!0===d.direction.right&&u>g&&i>0?(d.event.detected=!0,d.move(e)):d.end(e,!0))}else{!0!==d.event.isFirst&&h(e,d.event.mouse);var p=l(e,d,!1),f=p.payload,m=p.synthetic;void 0!==f&&(!1===d.handler(f)?d.end(e):(void 0===d.styleCleanup&&!0===d.event.isFirst&&c(),d.event.lastX=f.position.left,d.event.lastY=f.position.top,d.event.lastDir=!0===m?void 0:f.direction,d.event.isFirst=!1))}}}},end:function(t,i){if(void 0!==d.event){if((0,r.ul)(d,"temp"),!0===n.Lp.is.firefox&&(0,r.Jf)(e,!1),!0===i)void 0!==d.styleCleanup&&d.styleCleanup(),!0!==d.event.detected&&void 0!==d.initialEvent&&d.initialEvent.target.dispatchEvent(d.initialEvent.event);else if(!0===d.event.detected){!0===d.event.isFirst&&d.handler(l(void 0===t?d.lastEvt:t,d).payload);var o=l(void 0===t?d.lastEvt:t,d,!0),s=o.payload,a=function(){d.handler(s)};void 0!==d.styleCleanup?d.styleCleanup(a):a()}d.event=void 0,d.initialEvent=void 0,d.lastEvt=void 0}}};if(e.__qtouchpan=d,!0===o.mouse){var u=!0===o.mouseCapture||!0===o.mousecapture?"Capture":"";(0,r.M0)(d,"main",[[e,"mousedown","mouseStart","passive".concat(u)]])}!0===n.Lp.has.touch&&(0,r.M0)(d,"main",[[e,"touchstart","touchStart","passive".concat(!0===o.capture?"Capture":"")],[e,"touchmove","noop","notPassiveCapture"]])}function h(e,t){!0===o.mouse&&!0===t?(0,r.NS)(e):(!0===o.stop&&(0,r.sT)(e),!0===o.prevent&&(0,r.X$)(e))}},updated:function(e,t){var i=e.__qtouchpan;void 0!==i&&(t.oldValue!==t.value&&("function"!==typeof value&&i.end(),i.handler=t.value),i.direction=(0,s.R)(t.modifiers))},beforeUnmount:function(e){var t=e.__qtouchpan;void 0!==t&&(void 0!==t.event&&t.end(),(0,r.ul)(t,"main"),(0,r.ul)(t,"temp"),!0===n.Lp.is.firefox&&(0,r.Jf)(e,!1),void 0!==t.styleCleanup&&t.styleCleanup(),delete e.__qtouchpan)}})},25310:(e,t,i)=>{"use strict";i.d(t,{Z:()=>u});var n=i(50001),o=i.n(n),s=(i(34464),i(17513),i(85711),i(69665),i(51393),i(56072),i(65716),i(46727),i(72091),i(32455),i(58665),i(47506)),r=i(91384),a=function(){return!0};function l(e){return"string"===typeof e&&""!==e&&"/"!==e&&"#/"!==e}function c(e){return!0===e.startsWith("#")&&(e=e.substring(1)),!1===e.startsWith("/")&&(e="/"+e),!0===e.endsWith("/")&&(e=e.substring(0,e.length-1)),"#"+e}function d(e){if(!1===e.backButtonExit)return function(){return!1};if("*"===e.backButtonExit)return a;var t=["#/"];return!0===Array.isArray(e.backButtonExit)&&t.push.apply(t,o()(e.backButtonExit.filter(l).map(c))),function(){return t.includes(window.location.hash)}}const u={__history:[],add:r.ZT,remove:r.ZT,install:function(e){var t=this,i=e.$q;if(!0!==this.__installed){var n=s.Lp.is,o=n.cordova,r=n.capacitor;if(!0===o||!0===r){var l=i.config[!0===o?"cordova":"capacitor"];if((void 0===l||!1!==l.backButton)&&(!0!==r||void 0!==window.Capacitor&&void 0!==window.Capacitor.Plugins.App)){this.add=function(e){void 0===e.condition&&(e.condition=a),t.__history.push(e)},this.remove=function(e){var i=t.__history.indexOf(e);i>=0&&t.__history.splice(i,1)};var c=d(Object.assign({backButtonExit:!0},l)),u=function(){if(t.__history.length){var e=t.__history[t.__history.length-1];!0===e.condition()&&(t.__history.pop(),e.handler())}else!0===c()?navigator.app.exitApp():window.history.back()};!0===o?document.addEventListener("deviceready",(function(){document.addEventListener("backbutton",u,!1)})):window.Capacitor.Plugins.App.addListener("backButton",u)}}}}}},72289:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});var n=i(46264),o=i.n(n),s=(i(58665),i(74124)),r=i(43251);const a={name:"material-icons",type:{positive:"check_circle",negative:"warning",info:"info",warning:"priority_high"},arrow:{up:"arrow_upward",right:"arrow_forward",down:"arrow_downward",left:"arrow_back",dropdown:"arrow_drop_down"},chevron:{left:"chevron_left",right:"chevron_right"},colorPicker:{spectrum:"gradient",tune:"tune",palette:"style"},pullToRefresh:{icon:"refresh"},carousel:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down",navigationIcon:"lens"},chip:{remove:"cancel",selected:"check"},datetime:{arrowLeft:"chevron_left",arrowRight:"chevron_right",now:"access_time",today:"today"},editor:{bold:"format_bold",italic:"format_italic",strikethrough:"strikethrough_s",underline:"format_underlined",unorderedList:"format_list_bulleted",orderedList:"format_list_numbered",subscript:"vertical_align_bottom",superscript:"vertical_align_top",hyperlink:"link",toggleFullscreen:"fullscreen",quote:"format_quote",left:"format_align_left",center:"format_align_center",right:"format_align_right",justify:"format_align_justify",print:"print",outdent:"format_indent_decrease",indent:"format_indent_increase",removeFormat:"format_clear",formatting:"text_format",fontSize:"format_size",align:"format_align_left",hr:"remove",undo:"undo",redo:"redo",heading:"format_size",code:"code",size:"format_size",font:"font_download",viewSource:"code"},expansionItem:{icon:"keyboard_arrow_down",denseIcon:"arrow_drop_down"},fab:{icon:"add",activeIcon:"close"},field:{clear:"cancel",error:"error"},pagination:{first:"first_page",prev:"keyboard_arrow_left",next:"keyboard_arrow_right",last:"last_page"},rating:{icon:"grade"},stepper:{done:"check",active:"edit",error:"warning"},tabs:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down"},table:{arrowUp:"arrow_upward",warning:"warning",firstPage:"first_page",prevPage:"chevron_left",nextPage:"chevron_right",lastPage:"last_page"},tree:{icon:"play_arrow"},uploader:{done:"done",clear:"clear",add:"add_box",upload:"cloud_upload",removeQueue:"clear_all",removeUploaded:"done_all"}};var l=(0,s.Z)({iconMapFn:null,__icons:{}},{set:function(e,t){var i=o()(o()({},e),{},{rtl:!0===e.rtl});i.set=l.set,Object.assign(l.__icons,i)},install:function(e){var t=this,i=e.$q,n=e.iconSet;e.ssrContext;void 0!==i.config.iconMapFn&&(this.iconMapFn=i.config.iconMapFn),i.iconSet=this.__icons,(0,r.g)(i,"iconMapFn",(function(){return t.iconMapFn}),(function(e){t.iconMapFn=e})),!0===this.__installed?void 0!==n&&this.set(n):this.set(n||a)}});const c=l},87451:(e,t,i)=>{"use strict";i.d(t,{$:()=>M,Z:()=>F});var n=i(46264),o=i.n(n),s=i(44288),r=i.n(s),a=(i(58665),i(91804),i(65716),i(61732),i(31408),i(62590),i(56072),i(46727),i(3452),i(61957)),l=i(47506),c=i(37167),d=i.n(c),u=(i(65735),i(34442),i(69665),i(74124)),h=i(91384),g=i(60899),p=["sm","md","lg","xl"],f=h.rU.passive;const m=(0,u.Z)({width:0,height:0,name:"xs",sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1},{setSizes:h.ZT,setDebounce:h.ZT,install:function(e){var t=this,i=e.$q,n=e.onSSRHydrated;if(i.screen=this,!0!==this.__installed){var o=window,s=o.visualViewport,r=s||window,a=document.scrollingElement||document.documentElement,c=void 0===s||!0===l.Lp.is.mobile?function(){return[Math.max(window.innerWidth,a.clientWidth),Math.max(window.innerHeight,a.clientHeight)]}:function(){return[s.width*s.scale+window.innerWidth-a.clientWidth,s.height*s.scale+window.innerHeight-a.clientHeight]},u=void 0!==i.config.screen&&!0===i.config.screen.bodyClasses;this.__update=function(e){var i=c(),n=d()(i,2),o=n[0],s=n[1];if(s!==t.height&&(t.height=s),o!==t.width)t.width=o;else if(!0!==e)return;var r=t.sizes;t.gt.xs=o>=r.sm,t.gt.sm=o>=r.md,t.gt.md=o>=r.lg,t.gt.lg=o>=r.xl,t.lt.sm=o0?(0,g.Z)(t.__update,e):t.__update,r.addEventListener("resize",h,f)},t.setDebounce(v),0!==Object.keys(m).length?(t.setSizes(m),m=void 0):t.__update(),!0===u&&"xs"===t.name&&document.body.classList.add("screen--xs")};!0===l.uX.value?n.push(_):_()}else void 0!==i.config.screen&&(!1===i.config.screen.bodyClasses?document.body.classList.remove("screen--".concat(this.name)):this.__update(!0))}});i(11476),i(18964);var v=(0,u.Z)({isActive:!1,mode:!1},{__media:void 0,set:function(e){v.mode=e,"auto"===e?(void 0===v.__media&&(v.__media=window.matchMedia("(prefers-color-scheme: dark)"),v.__updateMedia=function(){v.set("auto")},v.__media.addListener(v.__updateMedia)),e=v.__media.matches):void 0!==v.__media&&(v.__media.removeListener(v.__updateMedia),v.__media=void 0),v.isActive=!0===e,document.body.classList.remove("body--".concat(!0===e?"light":"dark")),document.body.classList.add("body--".concat(!0===e?"dark":"light"))},toggle:function(){v.set(!1===v.isActive)},install:function(e){var t=this,i=e.$q,n=e.onSSRHydrated,o=(e.ssrContext,i.config.dark);if(i.dark=this,!0!==this.__installed||void 0!==o){this.isActive=!0===o;var s=void 0!==o&&o;if(!0===l.uX.value){var r=function(e){t.__fromSSR=e},a=this.set;this.set=r,r(s),n.push((function(){t.set=a,t.set(t.__fromSSR)}))}else this.set(s)}}});const _=v;var b=i(25310),y=i(50892);i(98998),i(43682),i(77280),i(40702),i(91392),i(97605),i(51393),i(52519),i(6822),i(67451);function w(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:document.body;if("string"!==typeof e)throw new TypeError("Expected a string as propName");if("string"!==typeof t)throw new TypeError("Expected a string as value");if(!(i instanceof Element))throw new TypeError("Expected a DOM element");i.style.setProperty("--q-".concat(e),t)}var x=i(61705);function C(e){return!0===e.ios?"ios":!0===e.android?"android":void 0}function S(e,t){var i=e.is,n=e.has,o=e.within,s=[!0===i.desktop?"desktop":"mobile","".concat(!1===n.touch?"no-":"","touch")];if(!0===i.mobile){var r=C(i);void 0!==r&&s.push("platform-"+r)}if(!0===i.nativeMobile){var a=i.nativeMobileWrapper;s.push(a),s.push("native-mobile"),!0!==i.ios||void 0!==t[a]&&!1===t[a].iosStatusBarPadding||s.push("q-ios-padding")}else!0===i.electron?s.push("electron"):!0===i.bex&&s.push("bex");return!0===o.iframe&&s.push("within-iframe"),s}function k(){var e=l.Lp.is,t=document.body.className,i=new Set(t.replace(/ {2}/g," ").split(" "));if(void 0!==l.aG)i["delete"]("desktop"),i.add("platform-ios"),i.add("mobile");else if(!0!==e.nativeMobile&&!0!==e.electron&&!0!==e.bex)if(!0===e.desktop)i["delete"]("mobile"),i["delete"]("platform-ios"),i["delete"]("platform-android"),i.add("desktop");else if(!0===e.mobile){i["delete"]("desktop"),i.add("mobile");var n=C(e);void 0!==n?(i.add("platform-".concat(n)),i["delete"]("platform-".concat("ios"===n?"android":"ios"))):(i["delete"]("platform-ios"),i["delete"]("platform-android"))}!0===l.Lp.has.touch&&(i["delete"]("no-touch"),i.add("touch")),!0===l.Lp.within.iframe&&i.add("within-iframe");var o=Array.from(i).join(" ");t!==o&&(document.body.className=o)}function L(e){for(var t in e)w(t,e[t])}const E={install:function(e){if(!0!==this.__installed){if(!0===l.uX.value)k();else{var t=e.$q;void 0!==t.config.brand&&L(t.config.brand);var i=S(l.Lp,t.config);document.body.classList.add.apply(document.body.classList,i)}!0===l.Lp.is.ios&&document.body.addEventListener("touchstart",h.ZT),window.addEventListener("keydown",x.ZK,!0)}}};var N=i(72289),D=i(95439),T=i(27495),A=i(4680),I=["reload"],R=[l.ZP,E,_,m,b.Z,y.Z,N.Z];function M(e,t){var i=(0,a.ri)(e);i.config.globalProperties=t.config.globalProperties;var n=t._context,o=(n.reload,r()(n,I));return Object.assign(i._context,o),i}function P(e,t){t.forEach((function(t){t.install(e),t.__installed=!0}))}function O(e,t,i){e.config.globalProperties.$q=i.$q,e.provide(D.Ng,i.$q),P(i,R),void 0!==t.components&&Object.values(t.components).forEach((function(t){!0===(0,A.Kn)(t)&&void 0!==t.name&&e.component(t.name,t)})),void 0!==t.directives&&Object.values(t.directives).forEach((function(t){!0===(0,A.Kn)(t)&&void 0!==t.name&&e.directive(t.name,t)})),void 0!==t.plugins&&P(i,Object.values(t.plugins).filter((function(e){return"function"===typeof e.install&&!1===R.includes(e)}))),!0===l.uX.value&&(i.$q.onSSRHydrated=function(){i.onSSRHydrated.forEach((function(e){e()})),i.$q.onSSRHydrated=function(){}})}const F=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i={version:"2.12.0"};!1===T.Uf?(void 0!==t.config&&Object.assign(T.w6,t.config),i.config=o()({},T.w6),(0,T.tP)()):i.config=t.config||{},O(e,t,{parentApp:e,$q:i,lang:t.lang,iconSet:t.iconSet,onSSRHydrated:[]})}},50892:(e,t,i)=>{"use strict";i.d(t,{F:()=>r.Z,Z:()=>c});var n=i(46264),o=i.n(n),s=(i(85711),i(91392),i(51393),i(11476),i(68280),i(60893),i(52519),i(18964),i(58665),i(74124)),r=i(99527);function a(){var e=!0===Array.isArray(navigator.languages)&&0!==navigator.languages.length?navigator.languages[0]:navigator.language;if("string"===typeof e)return e.split(/[-_]/).map((function(e,t){return 0===t?e.toLowerCase():t>1||e.length<4?e.toUpperCase():e[0].toUpperCase()+e.slice(1).toLowerCase()})).join("-")}var l=(0,s.Z)({__langPack:{}},{getLocale:a,set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r.Z,t=o()(o()({},e),{},{rtl:!0===e.rtl,getLocale:a});if(t.set=l.set,void 0===l.__langConfig||!0!==l.__langConfig.noHtmlAttrs){var i=document.documentElement;i.setAttribute("dir",!0===t.rtl?"rtl":"ltr"),i.setAttribute("lang",t.isoName)}Object.assign(l.__langPack,t),l.props=t,l.isoName=t.isoName,l.nativeName=t.nativeName},install:function(e){var t=e.$q,i=e.lang;e.ssrContext;t.lang=l.__langPack,l.__langConfig=t.config.lang,!0===this.__installed?void 0!==i&&this.set(i):this.set(i||r.Z)}});const c=l},84006:(e,t,i)=>{"use strict";i.d(t,{Z:()=>v});var n=i(46264),o=i.n(n);i(25328),i(72091),i(11476),i(18964),i(60893),i(34442),i(85711),i(12518),i(24972),i(67451),i(65716),i(22725),i(95149),i(52519),i(91392),i(69665),i(58665);function s(e){return encodeURIComponent(e)}function r(e){return decodeURIComponent(e)}function a(e){return s(e===Object(e)?JSON.stringify(e):""+e)}function l(e){if(""===e)return e;0===e.indexOf('"')&&(e=e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")),e=r(e.replace(/\+/g," "));try{var t=JSON.parse(e);t!==Object(t)&&!0!==Array.isArray(t)||(e=t)}catch(i){}return e}function c(e){var t=new Date;return t.setMilliseconds(t.getMilliseconds()+e),t.toUTCString()}function d(e){var t=0,i=e.match(/(\d+)d/),n=e.match(/(\d+)h/),o=e.match(/(\d+)m/),s=e.match(/(\d+)s/);return i&&(t+=864e5*i[1]),n&&(t+=36e5*n[1]),o&&(t+=6e4*o[1]),s&&(t+=1e3*s[1]),0===t?e:c(t)}function u(e,t){var i,n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3?arguments[3]:void 0;void 0!==o.expires&&("[object Date]"===Object.prototype.toString.call(o.expires)?i=o.expires.toUTCString():"string"===typeof o.expires?i=d(o.expires):(n=parseFloat(o.expires),i=!1===isNaN(n)?c(864e5*n):o.expires));var l="".concat(s(e),"=").concat(a(t)),u=[l,void 0!==i?"; Expires="+i:"",o.path?"; Path="+o.path:"",o.domain?"; Domain="+o.domain:"",o.sameSite?"; SameSite="+o.sameSite:"",o.httpOnly?"; HttpOnly":"",o.secure?"; Secure":"",o.other?"; "+o.other:""].join("");if(r){r.req.qCookies?r.req.qCookies.push(u):r.req.qCookies=[u],r.res.setHeader("Set-Cookie",r.req.qCookies);var g=r.req.headers.cookie||"";if(void 0!==i&&n<0){var p=h(e,r);void 0!==p&&(g=g.replace("".concat(e,"=").concat(p,"; "),"").replace("; ".concat(e,"=").concat(p),"").replace("".concat(e,"=").concat(p),""))}else g=g?"".concat(l,"; ").concat(g):u;r.req.headers.cookie=g}else document.cookie=u}function h(e,t){for(var i,n,o,s=t?t.req.headers:document,a=s.cookie?s.cookie.split("; "):[],c=a.length,d=e?null:{},u=0;u{"use strict";i.d(t,{Z:()=>k});var n,o,s=i(38761),r=i.n(s),a=i(46264),l=i.n(a),c=(i(58665),i(93954),i(69665),i(48015),i(34442),i(59835)),d=i(61957),u=i(13902),h=i(87451),g=i(74124),p=i(56669),f=i(5984),m=i(4680),v=0,_=null,b={},y={},w={group:"__default_quasar_group__",delay:0,message:!1,html:!1,spinnerSize:80,spinnerColor:"",messageColor:"",backgroundColor:"",boxClass:"",spinner:u.Z,customClass:""},x=l()({},w);function C(e){if(e&&void 0!==e.group&&void 0!==y[e.group])return Object.assign(y[e.group],e);var t=!0===(0,m.Kn)(e)&&!0===e.ignoreDefaults?l()(l()({},w),e):l()(l()({},x),e);return y[t.group]=t,t}var S=(0,g.Z)({isActive:!1},{show:function(e){b=C(e);var t=b,i=t.group;return S.isActive=!0,void 0!==n?(b.uid=v,o.$forceUpdate()):(b.uid=++v,null!==_&&clearTimeout(_),_=setTimeout((function(){_=null;var e=(0,p.q_)("q-loading");n=(0,h.$)({name:"QLoading",setup:function(){function t(){!0!==S.isActive&&void 0!==n&&((0,f.Z)(!1),n.unmount(e),(0,p.pB)(e),n=void 0,o=void 0)}function i(){if(!0!==S.isActive)return null;var e=[(0,c.h)(b.spinner,{class:"q-loading__spinner",color:b.spinnerColor,size:b.spinnerSize})];return b.message&&e.push((0,c.h)("div",r()({class:"q-loading__message"+(b.messageColor?" text-".concat(b.messageColor):"")},!0===b.html?"innerHTML":"textContent",b.message))),(0,c.h)("div",{class:"q-loading fullscreen flex flex-center z-max "+b.customClass.trim(),key:b.uid},[(0,c.h)("div",{class:"q-loading__backdrop"+(b.backgroundColor?" bg-".concat(b.backgroundColor):"")}),(0,c.h)("div",{class:"q-loading__box column items-center "+b.boxClass},e)])}return(0,c.bv)((function(){(0,f.Z)(!0)})),function(){return(0,c.h)(d.uT,{name:"q-transition--fade",appear:!0,onAfterLeave:t},i)}}},S.__parentApp),o=n.mount(e)}),b.delay)),function(e){void 0!==e&&Object(e)===e?S.show(l()(l()({},e),{},{group:i})):S.hide(i)}},hide:function(e){if(!0===S.isActive){if(void 0===e)y={};else{if(void 0===y[e])return;delete y[e];var t=Object.keys(y);if(0!==t.length){var i=t[t.length-1];return void S.show({group:i})}}null!==_&&(clearTimeout(_),_=null),S.isActive=!1}},setDefaults:function(e){!0===(0,m.Kn)(e)&&Object.assign(x,e)},install:function(e){var t=e.$q,i=e.parentApp;t.loading=this,S.__parentApp=i,void 0!==t.config.loading&&this.setDefaults(t.config.loading)}});const k=S},5917:(e,t,i)=>{"use strict";i.d(t,{Z:()=>L});var n=i(46264),o=i.n(n),s=(i(58665),i(60499)),r=i(59835),a=i(74124),l=i(91384),c=i(56669),d=i(87451),u=(i(79481),i(52519),i(69665),i(91804),i(65716),i(61732),i(56072),i(46727),i(93954),i(65987)),h=i(30321),g=XMLHttpRequest,p=g.prototype.open,f=["top","right","bottom","left"],m=[],v=0;function _(e){var t=e.p,i=e.pos,n=e.active,o=e.horiz,s=e.reverse,r=e.dir,a=1,l=1;return!0===o?(!0===s&&(a=-1),"bottom"===i&&(l=-1),{transform:"translate3d(".concat(a*(t-100),"%,").concat(n?0:-200*l,"%,0)")}):(!0===s&&(l=-1),"right"===i&&(a=-1),{transform:"translate3d(".concat(n?0:r*a*-200,"%,").concat(l*(t-100),"%,0)")})}function b(e,t){return"number"!==typeof t&&(t=e<25?3*Math.random()+3:e<65?3*Math.random():e<85?2*Math.random():e<99?.6:0),(0,h.vX)(e+t,0,100)}function y(e){v++,m.push(e),v>1||(g.prototype.open=function(e,t){var i=[],n=function(){m.forEach((function(e){null!==e.hijackFilter.value&&!0!==e.hijackFilter.value(t)||(e.start(),i.push(e.stop))}))},o=function(){i.forEach((function(e){e()}))};this.addEventListener("loadstart",n,{once:!0}),this.addEventListener("loadend",o,{once:!0}),p.apply(this,arguments)})}function w(e){m=m.filter((function(t){return t.start!==e})),v=Math.max(0,v-1),0===v&&(g.prototype.open=p)}const x=(0,u.L)({name:"QAjaxBar",props:{position:{type:String,default:"top",validator:function(e){return f.includes(e)}},size:{type:String,default:"2px"},color:String,skipHijack:Boolean,reverse:Boolean,hijackFilter:Function},emits:["start","stop"],setup:function(e,t){var i,n,a=t.emit,l=(0,r.FN)(),c=l.proxy,d=(0,s.iH)(0),u=(0,s.iH)(!1),h=(0,s.iH)(!0),g=0,p=null,f=(0,r.Fl)((function(){return"q-loading-bar q-loading-bar--".concat(e.position)+(void 0!==e.color?" bg-".concat(e.color):"")+(!0===h.value?"":" no-transition")})),m=(0,r.Fl)((function(){return"top"===e.position||"bottom"===e.position})),v=(0,r.Fl)((function(){return!0===m.value?"height":"width"})),x=(0,r.Fl)((function(){var t=u.value,i=_({p:d.value,pos:e.position,active:t,horiz:m.value,reverse:!0===c.$q.lang.rtl&&["top","bottom"].includes(e.position)?!1===e.reverse:e.reverse,dir:!0===c.$q.lang.rtl?-1:1});return i[v.value]=e.size,i.opacity=t?1:0,i})),C=(0,r.Fl)((function(){return!0===u.value?{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":d.value}:{"aria-hidden":"true"}}));function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:300,t=i;return i=Math.max(0,e)||0,g++,g>1?(0===t&&e>0?E():null!==p&&t>0&&e<=0&&(clearTimeout(p),p=null),g):(null!==p&&clearTimeout(p),a("start"),d.value=0,p=setTimeout((function(){p=null,h.value=!0,e>0&&E()}),!0===u.value?500:1),!0!==u.value&&(u.value=!0,h.value=!1),g)}function k(e){return g>0&&(d.value=b(d.value,e)),g}function L(){if(g=Math.max(0,g-1),g>0)return g;null!==p&&(clearTimeout(p),p=null),a("stop");var e=function(){h.value=!0,d.value=100,p=setTimeout((function(){p=null,u.value=!1}),1e3)};return 0===d.value?p=setTimeout(e,1):e(),g}function E(){d.value<100&&(p=setTimeout((function(){p=null,k(),E()}),i))}return(0,r.bv)((function(){!0!==e.skipHijack&&(n=!0,y({start:S,stop:L,hijackFilter:(0,r.Fl)((function(){return e.hijackFilter||null}))}))})),(0,r.Jd)((function(){null!==p&&clearTimeout(p),!0===n&&w(S)})),Object.assign(c,{start:S,stop:L,increment:k}),function(){return(0,r.h)("div",o()({class:f.value,style:x.value},C.value))}}});var C=i(4680),S=(0,s.iH)(null),k=(0,a.Z)({isActive:!1},{start:l.ZT,stop:l.ZT,increment:l.ZT,setDefaults:l.ZT,install:function(e){var t=e.$q,i=e.parentApp;if(t.loadingBar=this,!0!==this.__installed){var n=(0,s.iH)(void 0!==t.config.loadingBar?o()({},t.config.loadingBar):{}),a=(0,c.q_)("q-loading-bar");(0,d.$)({name:"LoadingBar",devtools:{hide:!0},setup:function(){return function(){return(0,r.h)(x,o()(o()({},n.value),{},{onStart:l,onStop:u,ref:S}))}}},i).mount(a),Object.assign(this,{start:function(e){S.value.start(e)},stop:function(){S.value.stop()},increment:function(){S.value.increment.apply(null,arguments)},setDefaults:function(e){!0===(0,C.Kn)(e)&&Object.assign(n.value,e)}})}else void 0!==t.config.loadingBar&&this.setDefaults(t.config.loadingBar);function l(){k.isActive=!0}function u(){k.isActive=!1}}});const L=k},63703:(e,t,i)=>{"use strict";i.d(t,{Z:()=>h});i(58665);var n=i(47506),o=(i(67451),i(12518),i(65716),i(22725),i(25328),i(33605),i(36519),i(11476),i(56394),i(80676),i(34442),i(69665),i(91384)),s=i(4680);function r(e){return!0===(0,s.J_)(e)?"__q_date|"+e.toUTCString():!0===(0,s.Gf)(e)?"__q_expr|"+e.source:"number"===typeof e?"__q_numb|"+e:"boolean"===typeof e?"__q_bool|"+(e?"1":"0"):"string"===typeof e?"__q_strn|"+e:"function"===typeof e?"__q_strn|"+e.toString():e===Object(e)?"__q_objt|"+JSON.stringify(e):e}function a(e){var t=e.length;if(t<9)return e;var i=e.substring(0,8),n=e.substring(9);switch(i){case"__q_date":return new Date(n);case"__q_expr":return new RegExp(n);case"__q_numb":return Number(n);case"__q_bool":return Boolean("1"===n);case"__q_strn":return""+n;case"__q_objt":return JSON.parse(n);default:return e}}function l(){var e=function(){return null};return{has:function(){return!1},getLength:function(){return 0},getItem:e,getIndex:e,getKey:e,getAll:function(){},getAllKeys:function(){return[]},set:o.ZT,remove:o.ZT,clear:o.ZT,isEmpty:function(){return!0}}}function c(e){var t=window[e+"Storage"],i=function(e){var i=t.getItem(e);return i?a(i):null};return{has:function(e){return null!==t.getItem(e)},getLength:function(){return t.length},getItem:i,getIndex:function(e){return e{"use strict";i.d(t,{Z:()=>M});var n=i(46264),o=i.n(n),s=i(44288),r=i.n(s),a=(i(58665),i(46727),i(65735),i(52519),i(85711),i(69665),i(51393),i(91392),i(72091),i(32455),i(93954),i(11476),i(32119),i(91804),i(65716),i(60499)),l=i(59835),c=i(61957),d=i(61357),u=i(22857),h=i(68879),g=i(13902),p=i(65987),f=(i(91384),i(56669)),m=i(87451),v=i(4680),_=["handler","noDismiss"],b=0,y={},w={},x={},C={},S=/^\s*$/,k=[],L=["top-left","top-right","bottom-left","bottom-right","top","bottom","left","right","center"],E=["top-left","top-right","bottom-left","bottom-right"],N={positive:{icon:function(e){return e.iconSet.type.positive},color:"positive"},negative:{icon:function(e){return e.iconSet.type.negative},color:"negative"},warning:{icon:function(e){return e.iconSet.type.warning},color:"warning",textColor:"dark"},info:{icon:function(e){return e.iconSet.type.info},color:"info"},ongoing:{group:!1,timeout:0,spinner:!0,color:"grey-8"}};function D(e,t,i){if(!e)return I("parameter required");var n,s={textColor:"white"};if(!0!==e.ignoreDefaults&&Object.assign(s,y),!1===(0,v.Kn)(e)&&(s.type&&Object.assign(s,N[s.type]),e={message:e}),Object.assign(s,N[e.type||s.type],e),"function"===typeof s.icon&&(s.icon=s.icon(t)),s.spinner?(!0===s.spinner&&(s.spinner=g.Z),s.spinner=(0,a.Xl)(s.spinner)):s.spinner=!1,s.meta={hasMedia:Boolean(!1!==s.spinner||s.icon||s.avatar),hasText:A(s.message)||A(s.caption)},s.position){if(!1===L.includes(s.position))return I("wrong position",e)}else s.position="bottom";if(void 0===s.timeout)s.timeout=5e3;else{var l=parseInt(s.timeout,10);if(isNaN(l)||l<0)return I("wrong timeout",e);s.timeout=l}0===s.timeout?s.progress=!1:!0===s.progress&&(s.meta.progressClass="q-notification__progress"+(s.progressClass?" ".concat(s.progressClass):""),s.meta.progressStyle={animationDuration:"".concat(s.timeout+1e3,"ms")});var c=(!0===Array.isArray(e.actions)?e.actions:[]).concat(!0!==e.ignoreDefaults&&!0===Array.isArray(y.actions)?y.actions:[]).concat(void 0!==N[e.type]&&!0===Array.isArray(N[e.type].actions)?N[e.type].actions:[]),d=s.closeBtn;if(d&&c.push({label:"string"===typeof d?d:t.lang.label.close}),s.actions=c.map((function(e){var t=e.handler,i=e.noDismiss,n=r()(e,_);return o()(o()({flat:!0},n),{},{onClick:"function"===typeof t?function(){t(),!0!==i&&m()}:function(){m()}})})),void 0===s.multiLine&&(s.multiLine=s.actions.length>1),Object.assign(s.meta,{class:"q-notification row items-stretch"+" q-notification--".concat(!0===s.multiLine?"multi-line":"standard")+(void 0!==s.color?" bg-".concat(s.color):"")+(void 0!==s.textColor?" text-".concat(s.textColor):"")+(void 0!==s.classes?" ".concat(s.classes):""),wrapperClass:"q-notification__wrapper col relative-position border-radius-inherit "+(!0===s.multiLine?"column no-wrap justify-center":"row items-center"),contentClass:"q-notification__content row items-center"+(!0===s.multiLine?"":" col"),leftClass:!0===s.meta.hasText?"additional":"single",attrs:o()({role:"alert"},s.attrs)}),!1===s.group?(s.group=void 0,s.meta.group=void 0):(void 0!==s.group&&!0!==s.group||(s.group=[s.message,s.caption,s.multiline].concat(s.actions.map((function(e){return"".concat(e.label,"*").concat(e.icon)}))).join("|")),s.meta.group=s.group+"|"+s.position),0===s.actions.length?s.actions=void 0:s.meta.actionsClass="q-notification__actions row items-center "+(!0===s.multiLine?"justify-end":"col-auto")+(!0===s.meta.hasMedia?" q-notification__actions--with-media":""),void 0!==i){i.notif.meta.timer&&(clearTimeout(i.notif.meta.timer),i.notif.meta.timer=void 0),s.meta.uid=i.notif.meta.uid;var u=x[s.position].value.indexOf(i.notif);x[s.position].value[u]=s}else{var h=w[s.meta.group];if(void 0===h){if(s.meta.uid=b++,s.meta.badge=1,-1!==["left","right","center"].indexOf(s.position))x[s.position].value.splice(Math.floor(x[s.position].value.length/2),0,s);else{var p=s.position.indexOf("top")>-1?"unshift":"push";x[s.position].value[p](s)}void 0!==s.group&&(w[s.meta.group]=s)}else{if(h.meta.timer&&(clearTimeout(h.meta.timer),h.meta.timer=void 0),void 0!==s.badgePosition){if(!1===E.includes(s.badgePosition))return I("wrong badgePosition",e)}else s.badgePosition="top-".concat(s.position.indexOf("left")>-1?"right":"left");s.meta.uid=h.meta.uid,s.meta.badge=h.meta.badge+1,s.meta.badgeClass="q-notification__badge q-notification__badge--".concat(s.badgePosition)+(void 0!==s.badgeColor?" bg-".concat(s.badgeColor):"")+(void 0!==s.badgeTextColor?" text-".concat(s.badgeTextColor):"")+(s.badgeClass?" ".concat(s.badgeClass):"");var f=x[s.position].value.indexOf(h);x[s.position].value[f]=w[s.meta.group]=s}}var m=function(){T(s),n=void 0};return s.timeout>0&&(s.meta.timer=setTimeout((function(){s.meta.timer=void 0,m()}),s.timeout+1e3)),void 0!==s.group?function(t){void 0!==t?I("trying to update a grouped one which is forbidden",e):m()}:(n={dismiss:m,config:e,notif:s},void 0===i?function(e){if(void 0!==n)if(void 0===e)n.dismiss();else{var i=Object.assign({},n.config,e,{group:!1,position:s.position});D(i,t,n)}}:void Object.assign(i,n))}function T(e){e.meta.timer&&(clearTimeout(e.meta.timer),e.meta.timer=void 0);var t=x[e.position].value.indexOf(e);if(-1!==t){void 0!==e.group&&delete w[e.meta.group];var i=k[""+e.meta.uid];if(i){var n=getComputedStyle(i),o=n.width,s=n.height;i.style.left="".concat(i.offsetLeft,"px"),i.style.width=o,i.style.height=s}x[e.position].value.splice(t,1),"function"===typeof e.onDismiss&&e.onDismiss()}}function A(e){return void 0!==e&&null!==e&&!0!==S.test(e)}function I(e,t){return console.error("Notify: ".concat(e),t),!1}function R(){return(0,p.L)({name:"QNotifications",devtools:{hide:!0},setup:function(){return function(){return(0,l.h)("div",{class:"q-notifications"},L.map((function(e){return(0,l.h)(c.W3,{key:e,class:C[e],tag:"div",name:"q-notification--".concat(e)},(function(){return x[e].value.map((function(e){var t=e.meta,i=[];if(!0===t.hasMedia&&(!1!==e.spinner?i.push((0,l.h)(e.spinner,{class:"q-notification__spinner q-notification__spinner--"+t.leftClass,color:e.spinnerColor,size:e.spinnerSize})):e.icon?i.push((0,l.h)(u.Z,{class:"q-notification__icon q-notification__icon--"+t.leftClass,name:e.icon,color:e.iconColor,size:e.iconSize,role:"img"})):e.avatar&&i.push((0,l.h)(d.Z,{class:"q-notification__avatar q-notification__avatar--"+t.leftClass},(function(){return(0,l.h)("img",{src:e.avatar,"aria-hidden":"true"})})))),!0===t.hasText){var n,s={class:"q-notification__message col"};if(!0===e.html)s.innerHTML=e.caption?"
    ".concat(e.message,'
    ').concat(e.caption,"
    "):e.message;else{var r=[e.message];n=e.caption?[(0,l.h)("div",r),(0,l.h)("div",{class:"q-notification__caption"},[e.caption])]:r}i.push((0,l.h)("div",s,n))}var a=[(0,l.h)("div",{class:t.contentClass},i)];return!0===e.progress&&a.push((0,l.h)("div",{key:"".concat(t.uid,"|p|").concat(t.badge),class:t.progressClass,style:t.progressStyle})),void 0!==e.actions&&a.push((0,l.h)("div",{class:t.actionsClass},e.actions.map((function(e){return(0,l.h)(h.Z,e)})))),t.badge>1&&a.push((0,l.h)("div",{key:"".concat(t.uid,"|").concat(t.badge),class:e.meta.badgeClass,style:e.badgeStyle},[t.badge])),(0,l.h)("div",o()({ref:function(e){k[""+t.uid]=e},key:t.uid,class:t["class"]},t.attrs),[(0,l.h)("div",{class:t.wrapperClass},a)])}))}))})))}}})}const M={setDefaults:function(e){!0===(0,v.Kn)(e)&&Object.assign(y,e)},registerType:function(e,t){!0===(0,v.Kn)(t)&&(N[e]=t)},install:function(e){var t=e.$q,i=e.parentApp;if(t.notify=this.create=function(e){return D(e,t)},t.notify.setDefaults=this.setDefaults,t.notify.registerType=this.registerType,void 0!==t.config.notify&&this.setDefaults(t.config.notify),!0!==this.__installed){L.forEach((function(e){x[e]=(0,a.iH)([]);var t=!0===["left","center","right"].includes(e)?"center":e.indexOf("top")>-1?"top":"bottom",i=e.indexOf("left")>-1?"start":e.indexOf("right")>-1?"end":"center",n=["left","right"].includes(e)?"items-".concat("left"===e?"start":"end"," justify-center"):"center"===e?"flex-center":"items-".concat(i);C[e]="q-notifications__list q-notifications__list--".concat(t," fixed column no-wrap ").concat(n)}));var n=(0,f.q_)("q-notify");(0,m.$)(R(),i).mount(n)}}}},47506:(e,t,i)=>{"use strict";i.d(t,{Lp:()=>b,ZP:()=>w,aG:()=>n,uX:()=>d});var n,o=i(38761),s=i.n(o),r=i(46264),a=i.n(r),l=(i(11476),i(58665),i(65735),i(72091),i(62590),i(82364),i(69665),i(60499)),c=i(43251),d=(0,l.iH)(!1);function u(e,t){var i=/(edg|edge|edga|edgios)\/([\w.]+)/.exec(e)||/(opr)[\/]([\w.]+)/.exec(e)||/(vivaldi)[\/]([\w.]+)/.exec(e)||/(chrome|crios)[\/]([\w.]+)/.exec(e)||/(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(e)||/(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(e)||/(firefox|fxios)[\/]([\w.]+)/.exec(e)||/(webkit)[\/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[\/]([\w.]+)/.exec(e)||[];return{browser:i[5]||i[3]||i[1]||"",version:i[2]||i[4]||"0",versionNumber:i[4]||i[2]||"0",platform:t[0]||""}}function h(e){return/(ipad)/.exec(e)||/(ipod)/.exec(e)||/(windows phone)/.exec(e)||/(iphone)/.exec(e)||/(kindle)/.exec(e)||/(silk)/.exec(e)||/(android)/.exec(e)||/(win)/.exec(e)||/(mac)/.exec(e)||/(linux)/.exec(e)||/(cros)/.exec(e)||/(playbook)/.exec(e)||/(bb)/.exec(e)||/(blackberry)/.exec(e)||[]}var g="ontouchstart"in window||window.navigator.maxTouchPoints>0;function p(e){n={is:a()({},e)},delete e.mac,delete e.desktop;var t=Math.min(window.innerHeight,window.innerWidth)>414?"ipad":"iphone";Object.assign(e,s()({mobile:!0,ios:!0,platform:t},t,!0))}function f(e){var t=e.toLowerCase(),i=h(t),n=u(t,i),o={};n.browser&&(o[n.browser]=!0,o.version=n.version,o.versionNumber=parseInt(n.versionNumber,10)),n.platform&&(o[n.platform]=!0);var s=o.android||o.ios||o.bb||o.blackberry||o.ipad||o.iphone||o.ipod||o.kindle||o.playbook||o.silk||o["windows phone"];return!0===s||t.indexOf("mobile")>-1?(o.mobile=!0,o.edga||o.edgios?(o.edge=!0,n.browser="edge"):o.crios?(o.chrome=!0,n.browser="chrome"):o.fxios&&(o.firefox=!0,n.browser="firefox")):o.desktop=!0,(o.ipod||o.ipad||o.iphone)&&(o.ios=!0),o["windows phone"]&&(o.winphone=!0,delete o["windows phone"]),(o.chrome||o.opr||o.safari||o.vivaldi||!0===o.mobile&&!0!==o.ios&&!0!==s)&&(o.webkit=!0),o.edg&&(n.browser="edgechromium",o.edgeChromium=!0),(o.safari&&o.blackberry||o.bb)&&(n.browser="blackberry",o.blackberry=!0),o.safari&&o.playbook&&(n.browser="playbook",o.playbook=!0),o.opr&&(n.browser="opera",o.opera=!0),o.safari&&o.android&&(n.browser="android",o.android=!0),o.safari&&o.kindle&&(n.browser="kindle",o.kindle=!0),o.safari&&o.silk&&(n.browser="silk",o.silk=!0),o.vivaldi&&(n.browser="vivaldi",o.vivaldi=!0),o.name=n.browser,o.platform=n.platform,t.indexOf("electron")>-1?o.electron=!0:document.location.href.indexOf("-extension://")>-1?o.bex=!0:(void 0!==window.Capacitor?(o.capacitor=!0,o.nativeMobile=!0,o.nativeMobileWrapper="capacitor"):void 0===window._cordovaNative&&void 0===window.cordova||(o.cordova=!0,o.nativeMobile=!0,o.nativeMobileWrapper="cordova"),!0===g&&!0===o.mac&&(!0===o.desktop&&!0===o.safari||!0===o.nativeMobile&&!0!==o.android&&!0!==o.ios&&!0!==o.ipad)&&p(o)),o}var m,v=navigator.userAgent||navigator.vendor||window.opera,_={has:{touch:!1,webStorage:!1},within:{iframe:!1}},b={userAgent:v,is:f(v),has:{touch:g},within:{iframe:window.self!==window.top}},y={install:function(e){var t=e.$q;!0===d.value?(e.onSSRHydrated.push((function(){Object.assign(t.platform,b),d.value=!1,n=void 0})),t.platform=(0,l.qj)(this)):t.platform=this}};(0,c.g)(b.has,"webStorage",(function(){if(void 0!==m)return m;try{if(window.localStorage)return m=!0,!0}catch(e){}return m=!1,!1})),!0===b.is.ios&&window.navigator.vendor.toLowerCase().indexOf("apple"),!0===d.value?Object.assign(y,b,n,_):Object.assign(y,b);const w=y},4376:(e,t,i)=>{"use strict";i.d(t,{ZP:()=>te});var n=i(46264),o=i.n(n),s=(i(91392),i(11476),i(18964),i(33605),i(36519),i(56394),i(22725),i(12518),i(60893),i(52519),i(58665),i(51393),i(24972),i(65735),i(72091),i(91804),i(65716),i(61732),i(6822),i(67451),i(4680)),r=i(30321),a=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178];function l(e){return 0===d(e)}function c(e,t){return t<=6?31:t<=11||l(e)?30:29}function d(e){var t,i,n,o,s,r=a.length,l=a[0];if(e=a[r-1])throw new Error("Invalid Jalaali year "+e);for(s=1;s1&&void 0!==arguments[1]?arguments[1]:"",i=e>0?"-":"+",n=Math.abs(e),o=Math.floor(n/60),s=n%60;return i+(0,r.vk)(o)+t+(0,r.vk)(s)}function S(e,t,i){var n=e.getFullYear(),o=e.getMonth(),s=e.getDate();return void 0!==t.year&&(n+=i*t.year,delete t.year),void 0!==t.month&&(o+=i*t.month,delete t.month),e.setDate(1),e.setMonth(2),e.setFullYear(n),e.setMonth(o),e.setDate(Math.min(s,X(e))),void 0!==t.date&&(e.setDate(e.getDate()+i*t.date),delete t.date),e}function k(e,t,i){var n=void 0!==t.year?t.year:e["get".concat(i,"FullYear")](),o=void 0!==t.month?t.month-1:e["get".concat(i,"Month")](),s=new Date(n,o+1,0).getDate(),r=Math.min(s,void 0!==t.date?t.date:e["get".concat(i,"Date")]());return e["set".concat(i,"Date")](1),e["set".concat(i,"Month")](2),e["set".concat(i,"FullYear")](n),e["set".concat(i,"Month")](o),e["set".concat(i,"Date")](r),delete t.year,delete t.month,delete t.date,e}function L(e,t,i){var n=E(t),o=new Date(e),s=void 0!==n.year||void 0!==n.month||void 0!==n.date?S(o,n,i):o;for(var a in n){var l=(0,r.kC)(a);s["set".concat(l)](s["get".concat(l)]()+i*n[a])}return s}function E(e){var t=o()({},e);return void 0!==e.years&&(t.year=e.years,delete t.years),void 0!==e.months&&(t.month=e.months,delete t.months),void 0!==e.days&&(t.date=e.days,delete t.days),void 0!==e.day&&(t.date=e.day,delete t.day),void 0!==e.hour&&(t.hours=e.hour,delete t.hour),void 0!==e.minute&&(t.minutes=e.minute,delete t.minute),void 0!==e.second&&(t.seconds=e.second,delete t.second),void 0!==e.millisecond&&(t.milliseconds=e.millisecond,delete t.millisecond),t}function N(e,t,i){var n=E(t),o=!0===i?"UTC":"",s=new Date(e),r=void 0!==n.year||void 0!==n.month||void 0!==n.date?k(s,n,o):s;for(var a in n){var l=a.charAt(0).toUpperCase()+a.slice(1);r["set".concat(o).concat(l)](n[a])}return r}function D(e,t,i){var n=T(e,t,i),o=new Date(n.year,null===n.month?null:n.month-1,null===n.day?1:n.day,n.hour,n.minute,n.second,n.millisecond),s=o.getTimezoneOffset();return null===n.timezoneOffset||n.timezoneOffset===s?o:L(o,{minutes:n.timezoneOffset-s},1)}function T(e,t,i,n,o){var s={year:null,month:null,day:null,hour:null,minute:null,second:null,millisecond:null,timezoneOffset:null,dateHash:null,timeHash:null};if(void 0!==o&&Object.assign(s,o),void 0===e||null===e||""===e||"string"!==typeof e)return s;void 0===t&&(t=v);var a=x(i,g.Z.props),l=a.months,d=a.monthsShort,u=w(t,a),h=u.regex,p=u.map,f=e.match(h);if(null===f)return s;var m="";if(void 0!==p.X||void 0!==p.x){var _=parseInt(f[void 0!==p.X?p.X:p.x],10);if(!0===isNaN(_)||_<0)return s;var b=new Date(_*(void 0!==p.X?1e3:1));s.year=b.getFullYear(),s.month=b.getMonth()+1,s.day=b.getDate(),s.hour=b.getHours(),s.minute=b.getMinutes(),s.second=b.getSeconds(),s.millisecond=b.getMilliseconds()}else{if(void 0!==p.YYYY)s.year=parseInt(f[p.YYYY],10);else if(void 0!==p.YY){var y=parseInt(f[p.YY],10);s.year=y<0?y:2e3+y}if(void 0!==p.M){if(s.month=parseInt(f[p.M],10),s.month<1||s.month>12)return s}else void 0!==p.MMM?s.month=d.indexOf(f[p.MMM])+1:void 0!==p.MMMM&&(s.month=l.indexOf(f[p.MMMM])+1);if(void 0!==p.D){if(s.day=parseInt(f[p.D],10),null===s.year||null===s.month||s.day<1)return s;var C="persian"!==n?new Date(s.year,s.month,0).getDate():c(s.year,s.month);if(s.day>C)return s}void 0!==p.H?s.hour=parseInt(f[p.H],10)%24:void 0!==p.h&&(s.hour=parseInt(f[p.h],10)%12,(p.A&&"PM"===f[p.A]||p.a&&"pm"===f[p.a]||p.aa&&"p.m."===f[p.aa])&&(s.hour+=12),s.hour=s.hour%24),void 0!==p.m&&(s.minute=parseInt(f[p.m],10)%60),void 0!==p.s&&(s.second=parseInt(f[p.s],10)%60),void 0!==p.S&&(s.millisecond=parseInt(f[p.S],10)*Math.pow(10,3-f[p.S].length)),void 0===p.Z&&void 0===p.ZZ||(m=void 0!==p.Z?f[p.Z].replace(":",""):f[p.ZZ],s.timezoneOffset=("+"===m[0]?-1:1)*(60*m.slice(1,3)+1*m.slice(3,5)))}return s.dateHash=(0,r.vk)(s.year,6)+"/"+(0,r.vk)(s.month)+"/"+(0,r.vk)(s.day),s.timeHash=(0,r.vk)(s.hour)+":"+(0,r.vk)(s.minute)+":"+(0,r.vk)(s.second)+m,s}function A(e){return"number"===typeof e||!1===isNaN(Date.parse(e))}function I(e,t){return N(new Date,e,t)}function R(e){var t=new Date(e).getDay();return 0===t?7:t}function M(e){var t=new Date(e.getFullYear(),e.getMonth(),e.getDate());t.setDate(t.getDate()-(t.getDay()+6)%7+3);var i=new Date(t.getFullYear(),0,4);i.setDate(i.getDate()-(i.getDay()+6)%7+3);var n=t.getTimezoneOffset()-i.getTimezoneOffset();t.setHours(t.getHours()-n);var o=(t-i)/(7*p);return 1+Math.floor(o)}function P(e){return 1e4*e.getFullYear()+100*e.getMonth()+e.getDate()}function O(e,t){var i=new Date(e);return!0===t?P(i):i.getTime()}function F(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=O(t,n.onlyDate),s=O(i,n.onlyDate),r=O(e,n.onlyDate);return(r>o||!0===n.inclusiveFrom&&r===o)&&(r2&&void 0!==arguments[2]?arguments[2]:"days",n=new Date(e),o=new Date(t);switch(i){case"years":case"year":return n.getFullYear()-o.getFullYear();case"months":case"month":return 12*(n.getFullYear()-o.getFullYear())+n.getMonth()-o.getMonth();case"days":case"day":case"date":return q(W(n,"day"),W(o,"day"),p);case"hours":case"hour":return q(W(n,"hour"),W(o,"hour"),f);case"minutes":case"minute":return q(W(n,"minute"),W(o,"minute"),m);case"seconds":case"second":return q(W(n,"second"),W(o,"second"),1e3)}}function j(e){return $(e,W(e,"year"),"days")+1}function K(e){return!0===(0,s.J_)(e)?"date":"number"===typeof e?"number":"string"}function G(e,t,i){var n=new Date(e);if(t){var o=new Date(t);if(ns)return s}return n}function Y(e,t,i){var n=new Date(e),o=new Date(t);if(void 0===i)return n.getTime()===o.getTime();switch(i){case"second":case"seconds":if(n.getSeconds()!==o.getSeconds())return!1;case"minute":case"minutes":if(n.getMinutes()!==o.getMinutes())return!1;case"hour":case"hours":if(n.getHours()!==o.getHours())return!1;case"day":case"days":case"date":if(n.getDate()!==o.getDate())return!1;case"month":case"months":if(n.getMonth()!==o.getMonth())return!1;case"year":case"years":if(n.getFullYear()!==o.getFullYear())return!1;break;default:throw new Error("date isSameDate unknown unit ".concat(i))}return!0}function X(e){return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()}function Z(e){if(e>=11&&e<=13)return"".concat(e,"th");switch(e%10){case 1:return"".concat(e,"st");case 2:return"".concat(e,"nd");case 3:return"".concat(e,"rd")}return"".concat(e,"th")}var Q={YY:function(e,t,i){var n=this.YYYY(e,t,i)%100;return n>=0?(0,r.vk)(n):"-"+(0,r.vk)(Math.abs(n))},YYYY:function(e,t,i){return void 0!==i&&null!==i?i:e.getFullYear()},M:function(e){return e.getMonth()+1},MM:function(e){return(0,r.vk)(e.getMonth()+1)},MMM:function(e,t){return t.monthsShort[e.getMonth()]},MMMM:function(e,t){return t.months[e.getMonth()]},Q:function(e){return Math.ceil((e.getMonth()+1)/3)},Qo:function(e){return Z(this.Q(e))},D:function(e){return e.getDate()},Do:function(e){return Z(e.getDate())},DD:function(e){return(0,r.vk)(e.getDate())},DDD:function(e){return j(e)},DDDD:function(e){return(0,r.vk)(j(e),3)},d:function(e){return e.getDay()},dd:function(e,t){return this.dddd(e,t).slice(0,2)},ddd:function(e,t){return t.daysShort[e.getDay()]},dddd:function(e,t){return t.days[e.getDay()]},E:function(e){return e.getDay()||7},w:function(e){return M(e)},ww:function(e){return(0,r.vk)(M(e))},H:function(e){return e.getHours()},HH:function(e){return(0,r.vk)(e.getHours())},h:function(e){var t=e.getHours();return 0===t?12:t>12?t%12:t},hh:function(e){return(0,r.vk)(this.h(e))},m:function(e){return e.getMinutes()},mm:function(e){return(0,r.vk)(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return(0,r.vk)(e.getSeconds())},S:function(e){return Math.floor(e.getMilliseconds()/100)},SS:function(e){return(0,r.vk)(Math.floor(e.getMilliseconds()/10))},SSS:function(e){return(0,r.vk)(e.getMilliseconds(),3)},A:function(e){return this.H(e)<12?"AM":"PM"},a:function(e){return this.H(e)<12?"am":"pm"},aa:function(e){return this.H(e)<12?"a.m.":"p.m."},Z:function(e,t,i,n){var o=void 0===n||null===n?e.getTimezoneOffset():n;return C(o,":")},ZZ:function(e,t,i,n){var o=void 0===n||null===n?e.getTimezoneOffset():n;return C(o)},X:function(e){return Math.floor(e.getTime()/1e3)},x:function(e){return e.getTime()}};function J(e,t,i,n,o){if((0===e||e)&&e!==1/0&&e!==-1/0){var s=new Date(e);if(!isNaN(s)){void 0===t&&(t=v);var r=x(i,g.Z.props);return t.replace(_,(function(e,t){return e in Q?Q[e](s,r,n,o):void 0===t?e:t.split("\\]").join("]")}))}}}function ee(e){return!0===(0,s.J_)(e)?new Date(e.getTime()):e}const te={isValid:A,extractDate:D,buildDate:I,getDayOfWeek:R,getWeekOfYear:M,isBetweenDates:F,addToDate:B,subtractFromDate:H,adjustDate:N,startOfDate:W,endOfDate:V,getMaxDate:z,getMinDate:U,getDateDiff:$,getDayOfYear:j,inferDateFormat:K,getDateBetween:G,isSameDate:Y,daysInMonth:X,formatDate:J,clone:ee}},60899:(e,t,i)=>{"use strict";i.d(t,{Z:()=>n});i(93954);function n(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:250,i=arguments.length>2?arguments[2]:void 0,n=null;function o(){var o=this,s=arguments,r=function(){n=null,!0!==i&&e.apply(o,s)};null!==n?clearTimeout(n):!0===i&&e.apply(this,s),n=setTimeout(r,t)}return o.cancel=function(){null!==n&&clearTimeout(n)},o}},70223:(e,t,i)=>{"use strict";i.d(t,{iv:()=>o,mY:()=>r,sb:()=>s});i(91804),i(65716),i(61732);var n=i(60499);function o(e,t){var i=e.style;for(var n in t)i[n]=t[n]}function s(e){if(void 0!==e&&null!==e){if("string"===typeof e)try{return document.querySelector(e)||void 0}catch(i){return}var t=(0,n.SU)(e);return t?t.$el||t:void 0}}function r(e,t){if(void 0===e||null===e||!0===e.contains(t))return!0;for(var i=e.nextElementSibling;null!==i;i=i.nextElementSibling)if(i.contains(t))return!0;return!1}},91384:(e,t,i)=>{"use strict";i.d(t,{AZ:()=>l,FK:()=>a,Jf:()=>h,M0:()=>g,NS:()=>u,X$:()=>d,ZT:()=>s,du:()=>r,rU:()=>n,sT:()=>c,ul:()=>p});i(86752),i(58665),i(69665),i(91804),i(65716),i(61732),i(52519);var n={hasPassive:!1,passiveCapture:!0,notPassiveCapture:!0};try{var o=Object.defineProperty({},"passive",{get:function(){Object.assign(n,{hasPassive:!0,passive:{passive:!0},notPassive:{passive:!1},passiveCapture:{passive:!0,capture:!0},notPassiveCapture:{passive:!1,capture:!0}})}});window.addEventListener("qtest",null,o),window.removeEventListener("qtest",null,o)}catch(f){}function s(){}function r(e){return 0===e.button}function a(e){return e.touches&&e.touches[0]?e=e.touches[0]:e.changedTouches&&e.changedTouches[0]?e=e.changedTouches[0]:e.targetTouches&&e.targetTouches[0]&&(e=e.targetTouches[0]),{top:e.clientY,left:e.clientX}}function l(e){if(e.path)return e.path;if(e.composedPath)return e.composedPath();var t=[],i=e.target;while(i){if(t.push(i),"HTML"===i.tagName)return t.push(document),t.push(window),t;i=i.parentElement}}function c(e){e.stopPropagation()}function d(e){!1!==e.cancelable&&e.preventDefault()}function u(e){!1!==e.cancelable&&e.preventDefault(),e.stopPropagation()}function h(e,t){if(void 0!==e&&(!0!==t||!0!==e.__dragPrevented)){var i=!0===t?function(e){e.__dragPrevented=!0,e.addEventListener("dragstart",d,n.notPassiveCapture)}:function(e){delete e.__dragPrevented,e.removeEventListener("dragstart",d,n.notPassiveCapture)};e.querySelectorAll("a, img").forEach(i)}}function g(e,t,i){var o="__q_".concat(t,"_evt");e[o]=void 0!==e[o]?e[o].concat(i):i,i.forEach((function(t){t[0].addEventListener(t[1],e[t[2]],n[t[3]])}))}function p(e,t){var i="__q_".concat(t,"_evt");void 0!==e[i]&&(e[i].forEach((function(t){t[0].removeEventListener(t[1],e[t[2]],n[t[3]])})),e[i]=void 0)}},30321:(e,t,i)=>{"use strict";i.d(t,{Uz:()=>a,kC:()=>s,rB:()=>o,vX:()=>r,vk:()=>l});i(65735),i(52519),i(95330),i(60893),i(91392);var n=["B","KB","MB","GB","TB","PB"];function o(e){var t=0;while(parseInt(e,10)>=1024&&t1&&void 0!==arguments[1]?arguments[1]:2,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"0";if(void 0===e||null===e)return e;var n=""+e;return n.length>=t?n:new Array(t-n.length+1).join(i)+n}},4680:(e,t,i)=>{"use strict";i.d(t,{Gf:()=>l,J_:()=>a,Kn:()=>r,hj:()=>c,xb:()=>s});var n=i(18774),o=i.n(n);i(98998),i(38194),i(65716),i(77280),i(40702),i(43682),i(6945),i(30998),i(33605),i(36519),i(11476),i(56394),i(22725),i(83122),i(67451),i(12518),i(56072),i(34442),i(85711);function s(e,t){if(e===t)return!0;if(null!==e&&null!==t&&"object"===o()(e)&&"object"===o()(t)){if(e.constructor!==t.constructor)return!1;var i,n;if(e.constructor===Array){if(i=e.length,i!==t.length)return!1;for(n=i;0!==n--;)if(!0!==s(e[n],t[n]))return!1;return!0}if(e.constructor===Map){if(e.size!==t.size)return!1;var r=e.entries();n=r.next();while(!0!==n.done){if(!0!==t.has(n.value[0]))return!1;n=r.next()}r=e.entries(),n=r.next();while(!0!==n.done){if(!0!==s(n.value[1],t.get(n.value[0])))return!1;n=r.next()}return!0}if(e.constructor===Set){if(e.size!==t.size)return!1;var a=e.entries();n=a.next();while(!0!==n.done){if(!0!==t.has(n.value[0]))return!1;n=a.next()}return!0}if(null!=e.buffer&&e.buffer.constructor===ArrayBuffer){if(i=e.length,i!==t.length)return!1;for(n=i;0!==n--;)if(e[n]!==t[n])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();var l=Object.keys(e).filter((function(t){return void 0!==e[t]}));if(i=l.length,i!==Object.keys(t).filter((function(e){return void 0!==t[e]})).length)return!1;for(n=i;0!==n--;){var c=l[n];if(!0!==s(e[c],t[c]))return!1}return!0}return e!==e&&t!==t}function r(e){return null!==e&&"object"===o()(e)&&!0!==Array.isArray(e)}function a(e){return"[object Date]"===Object.prototype.toString.call(e)}function l(e){return"[object RegExp]"===Object.prototype.toString.call(e)}function c(e){return"number"===typeof e&&isFinite(e)}},5984:(e,t,i)=>{"use strict";i.d(t,{Z:()=>y});i(93954);var n,o,s,r,a,l,c=i(91384),d=i(43701),u=i(47506),h=0,g=!1,p=null;function f(e){m(e)&&(0,c.NS)(e)}function m(e){if(e.target===document.body||e.target.classList.contains("q-layout__backdrop"))return!0;for(var t=(0,c.AZ)(e),i=e.shiftKey&&!e.deltaX,n=!i&&Math.abs(e.deltaX)<=Math.abs(e.deltaY),o=i||n?e.deltaY:e.deltaX,s=0;s0&&r.scrollTop+r.clientHeight===r.scrollHeight:o<0&&0===r.scrollLeft||o>0&&r.scrollLeft+r.clientWidth===r.scrollWidth}return!0}function v(e){e.target===document&&(document.scrollingElement.scrollTop=document.scrollingElement.scrollTop)}function _(e){!0!==g&&(g=!0,requestAnimationFrame((function(){g=!1;var t=e.target.height,i=document.scrollingElement,n=i.clientHeight,o=i.scrollTop;void 0!==s&&t===window.innerHeight||(s=n-t,document.scrollingElement.scrollTop=o),o>s&&(document.scrollingElement.scrollTop-=Math.ceil((o-s)/8))})))}function b(e){var t=document.body,i=void 0!==window.visualViewport;if("add"===e){var h=window.getComputedStyle(t),g=h.overflowY,p=h.overflowX;n=(0,d.OI)(window),o=(0,d.u3)(window),r=t.style.left,a=t.style.top,l=window.location.href,t.style.left="-".concat(n,"px"),t.style.top="-".concat(o,"px"),"hidden"!==p&&("scroll"===p||t.scrollWidth>window.innerWidth)&&t.classList.add("q-body--force-scrollbar-x"),"hidden"!==g&&("scroll"===g||t.scrollHeight>window.innerHeight)&&t.classList.add("q-body--force-scrollbar-y"),t.classList.add("q-body--prevent-scroll"),document.qScrollPrevented=!0,!0===u.Lp.is.ios&&(!0===i?(window.scrollTo(0,0),window.visualViewport.addEventListener("resize",_,c.rU.passiveCapture),window.visualViewport.addEventListener("scroll",_,c.rU.passiveCapture),window.scrollTo(0,0)):window.addEventListener("scroll",v,c.rU.passiveCapture))}!0===u.Lp.is.desktop&&!0===u.Lp.is.mac&&window["".concat(e,"EventListener")]("wheel",f,c.rU.notPassive),"remove"===e&&(!0===u.Lp.is.ios&&(!0===i?(window.visualViewport.removeEventListener("resize",_,c.rU.passiveCapture),window.visualViewport.removeEventListener("scroll",_,c.rU.passiveCapture)):window.removeEventListener("scroll",v,c.rU.passiveCapture)),t.classList.remove("q-body--prevent-scroll"),t.classList.remove("q-body--force-scrollbar-x"),t.classList.remove("q-body--force-scrollbar-y"),document.qScrollPrevented=!1,t.style.left=r,t.style.top=a,window.location.href===l&&window.scrollTo(n,o),s=void 0)}function y(e){var t="add";if(!0===e){if(h++,null!==p)return clearTimeout(p),void(p=null);if(h>1)return}else{if(0===h)return;if(h--,h>0)return;if(t="remove",!0===u.Lp.is.ios&&!0===u.Lp.is.nativeMobile)return null!==p&&clearTimeout(p),void(p=setTimeout((function(){b(t),p=null}),100))}b(t)}},49092:(e,t,i)=>{"use strict";i.d(t,{D:()=>d,m:()=>c});i(62590),i(69665),i(88554),i(32455);var n=i(91384),o=i(2909),s=null,r=n.rU.notPassiveCapture,a=[];function l(e){null!==s&&(clearTimeout(s),s=null);var t=e.target;if(void 0!==t&&8!==t.nodeType&&!0!==t.classList.contains("no-pointer-events")){var i=o.Q$.length-1;while(i>=0){var n=o.Q$[i].$;if("QDialog"!==n.type.name)break;if(!0!==n.props.seamless)return;i--}for(var r=a.length-1;r>=0;r--){var l=a[r];if(null!==l.anchorEl.value&&!1!==l.anchorEl.value.contains(t)||t!==document.body&&(null===l.innerRef.value||!1!==l.innerRef.value.contains(t)))return;e.qClickOutside=!0,l.onClickOutside(e)}}}function c(e){a.push(e),1===a.length&&(document.addEventListener("mousedown",l,r),document.addEventListener("touchstart",l,r))}function d(e){var t=a.findIndex((function(t){return t===e}));t>-1&&(a.splice(t,1),0===a.length&&(null!==s&&(clearTimeout(s),s=null),document.removeEventListener("mousedown",l,r),document.removeEventListener("touchstart",l,r)))}},65987:(e,t,i)=>{"use strict";i.d(t,{L:()=>s,f:()=>r});var n=i(60499),o=i(59835),s=function(e){return(0,n.Xl)((0,o.aZ)(e))},r=function(e){return(0,n.Xl)(e)}},74124:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});i(58665);var n=i(60499),o=i(43251);const s=function(e,t){var i=(0,n.qj)(e),s=function(e){(0,o.g)(t,e,(function(){return i[e]}),(function(t){i[e]=t}))};for(var r in e)s(r);return t}},16532:(e,t,i)=>{"use strict";i.d(t,{c:()=>u,k:()=>h});i(69665),i(72091),i(32455);var n,o=i(47506),s=i(61705),r=[];function a(e){n=27===e.keyCode}function l(){!0===n&&(n=!1)}function c(e){!0===n&&(n=!1,!0===(0,s.So)(e,27)&&r[r.length-1](e))}function d(e){window[e]("keydown",a),window[e]("blur",l),window[e]("keyup",c),n=!1}function u(e){!0===o.Lp.is.desktop&&(r.push(e),1===r.length&&d("addEventListener"))}function h(e){var t=r.indexOf(e);t>-1&&(r.splice(t,1),0===r.length&&d("removeEventListener"))}},17026:(e,t,i)=>{"use strict";i.d(t,{YX:()=>r,fP:()=>c,jd:()=>l,xF:()=>a});i(56072),i(65716),i(69665);var n=[],o=[];function s(e){o=o.filter((function(t){return t!==e}))}function r(e){s(e),o.push(e)}function a(e){s(e),0===o.length&&0!==n.length&&(n[n.length-1](),n=[])}function l(e){0===o.length?e():n.push(e)}function c(e){n=n.filter((function(t){return t!==e}))}},4173:(e,t,i)=>{"use strict";i.d(t,{H:()=>a,i:()=>r});i(69665),i(72091),i(32455);var n=i(47506),o=[];function s(e){o[o.length-1](e)}function r(e){!0===n.Lp.is.desktop&&(o.push(e),1===o.length&&document.body.addEventListener("focusin",s))}function a(e){var t=o.indexOf(e);t>-1&&(o.splice(t,1),0===o.length&&document.body.removeEventListener("focusin",s))}},27495:(e,t,i)=>{"use strict";i.d(t,{Uf:()=>o,tP:()=>s,w6:()=>n});var n={},o=!1;function s(){o=!0}},56669:(e,t,i)=>{"use strict";i.d(t,{pB:()=>c,q_:()=>l});i(52519),i(69665),i(72091),i(32455),i(55067),i(65716),i(91804),i(85448);var n=i(27495),o=[],s=[],r=1,a=document.body;function l(e,t){var i=document.createElement("div");if(i.id=void 0!==t?"q-portal--".concat(t,"--").concat(r++):e,void 0!==n.w6.globalNodes){var l=n.w6.globalNodes["class"];void 0!==l&&(i.className=l)}return a.appendChild(i),o.push(i),s.push(t),i}function c(e){var t=o.indexOf(e);o.splice(t,1),s.splice(t,1),e.remove()}},43251:(e,t,i)=>{"use strict";i.d(t,{K:()=>o,g:()=>n});i(86752);function n(e,t,i,n){return Object.defineProperty(e,t,{get:i,set:n,enumerable:!0}),e}function o(e,t){for(var i in t)n(e,i,t[i]);return e}},61705:(e,t,i)=>{"use strict";i.d(t,{So:()=>r,Wm:()=>s,ZK:()=>o});i(46727),i(3452),i(52519);var n=!1;function o(e){n=!0===e.isComposing}function s(e){return!0===n||e!==Object(e)||!0===e.isComposing||!0===e.qKeyEvent}function r(e,t){return!0!==s(e)&&[].concat(t).includes(e.keyCode)}},89480:(e,t,i)=>{"use strict";i.d(t,{Z:()=>n});const n={xs:30,sm:35,md:40,lg:50,xl:60}},2909:(e,t,i)=>{"use strict";i.d(t,{AH:()=>r,Q$:()=>o,S7:()=>a,je:()=>s});i(18381),i(65716),i(62590);var n=i(52046),o=[];function s(e){return o.find((function(t){return null!==t.contentEl&&t.contentEl.contains(e)}))}function r(e,t){do{if("QMenu"===e.$options.name){if(e.hide(t),!0===e.$props.separateClosePopup)return(0,n.O2)(e)}else if(!0===e.__qPortal){var i=(0,n.O2)(e);return void 0!==i&&"QPopupProxy"===i.$options.name?(e.hide(t),i):e}e=(0,n.O2)(e)}while(void 0!==e&&null!==e)}function a(e,t,i){while(0!==i&&void 0!==e&&null!==e){if(!0===e.__qPortal){if(i--,"QMenu"===e.$options.name){e=r(e,t);continue}e.hide(t)}e=(0,n.O2)(e)}}},49388:(e,t,i)=>{"use strict";i.d(t,{$:()=>a,io:()=>l,li:()=>d,wq:()=>f});i(46727),i(91804),i(65716),i(52519),i(58665);var n,o,s=i(43701),r=i(47506);function a(e){var t=e.split(" ");return 2===t.length&&(!0!==["top","center","bottom"].includes(t[0])?(console.error("Anchor/Self position must start with one of top/center/bottom"),!1):!0===["left","middle","right","start","end"].includes(t[1])||(console.error("Anchor/Self position must end with one of left/middle/right/start/end"),!1))}function l(e){return!e||2===e.length&&("number"===typeof e[0]&&"number"===typeof e[1])}var c={"start#ltr":"left","start#rtl":"right","end#ltr":"right","end#rtl":"left"};function d(e,t){var i=e.split(" ");return{vertical:i[0],horizontal:c["".concat(i[1],"#").concat(!0===t?"rtl":"ltr")]}}function u(e,t){var i=e.getBoundingClientRect(),n=i.top,o=i.left,s=i.right,r=i.bottom,a=i.width,l=i.height;return void 0!==t&&(n-=t[1],o-=t[0],r+=t[1],s+=t[0],a+=t[0],l+=t[1]),{top:n,bottom:r,height:l,left:o,right:s,width:a,middle:o+(s-o)/2,center:n+(r-n)/2}}function h(e,t,i){var n=e.getBoundingClientRect(),o=n.top,s=n.left;return o+=t.top,s+=t.left,void 0!==i&&(o+=i[1],s+=i[0]),{top:o,bottom:o+1,height:1,left:s,right:s+1,width:1,middle:s,center:o}}function g(e){return{top:0,center:e.offsetHeight/2,bottom:e.offsetHeight,left:0,middle:e.offsetWidth/2,right:e.offsetWidth}}function p(e,t,i){return{top:e[i.anchorOrigin.vertical]-t[i.selfOrigin.vertical],left:e[i.anchorOrigin.horizontal]-t[i.selfOrigin.horizontal]}}function f(e){if(!0===r.Lp.is.ios&&void 0!==window.visualViewport){var t=document.body.style,i=window.visualViewport,s=i.offsetLeft,a=i.offsetTop;s!==n&&(t.setProperty("--q-pe-left",s+"px"),n=s),a!==o&&(t.setProperty("--q-pe-top",a+"px"),o=a)}var l=e.el,c=l.scrollLeft,d=l.scrollTop,f=void 0===e.absoluteOffset?u(e.anchorEl,!0===e.cover?[0,0]:e.offset):h(e.anchorEl,e.absoluteOffset,e.offset),v={maxHeight:e.maxHeight,maxWidth:e.maxWidth,visibility:"visible"};!0!==e.fit&&!0!==e.cover||(v.minWidth=f.width+"px",!0===e.cover&&(v.minHeight=f.height+"px")),Object.assign(e.el.style,v);var _=g(e.el),b=p(f,_,e);if(void 0===e.absoluteOffset||void 0===e.offset)m(b,f,_,e.anchorOrigin,e.selfOrigin);else{var y=b,w=y.top,x=y.left;m(b,f,_,e.anchorOrigin,e.selfOrigin);var C=!1;if(b.top!==w){C=!0;var S=2*e.offset[1];f.center=f.top-=S,f.bottom-=S+2}if(b.left!==x){C=!0;var k=2*e.offset[0];f.middle=f.left-=k,f.right-=k+2}!0===C&&(b=p(f,_,e),m(b,f,_,e.anchorOrigin,e.selfOrigin))}v={top:b.top+"px",left:b.left+"px"},void 0!==b.maxHeight&&(v.maxHeight=b.maxHeight+"px",f.height>b.maxHeight&&(v.minHeight=v.maxHeight)),void 0!==b.maxWidth&&(v.maxWidth=b.maxWidth+"px",f.width>b.maxWidth&&(v.minWidth=v.maxWidth)),Object.assign(e.el.style,v),e.el.scrollTop!==d&&(e.el.scrollTop=d),e.el.scrollLeft!==c&&(e.el.scrollLeft=c)}function m(e,t,i,n,o){var r=i.bottom,a=i.right,l=(0,s.np)(),c=window.innerHeight-l,d=document.body.clientWidth;if(e.top<0||e.top+r>c)if("center"===o.vertical)e.top=t[n.vertical]>c/2?Math.max(0,c-r):0,e.maxHeight=Math.min(r,c);else if(t[n.vertical]>c/2){var u=Math.min(c,"center"===n.vertical?t.center:n.vertical===o.vertical?t.bottom:t.top);e.maxHeight=Math.min(r,u),e.top=Math.max(0,u-r)}else e.top=Math.max(0,"center"===n.vertical?t.center:n.vertical===o.vertical?t.top:t.bottom),e.maxHeight=Math.min(r,c-e.top);if(e.left<0||e.left+a>d)if(e.maxWidth=Math.min(a,d),"middle"===o.horizontal)e.left=t[n.horizontal]>d/2?Math.max(0,d-a):0;else if(t[n.horizontal]>d/2){var h=Math.min(d,"middle"===n.horizontal?t.middle:n.horizontal===o.horizontal?t.right:t.left);e.maxWidth=Math.min(a,h),e.left=Math.max(0,h-e.maxWidth)}else e.left=Math.max(0,"middle"===n.horizontal?t.middle:n.horizontal===o.horizontal?t.left:t.right),e.maxWidth=Math.min(a,d-e.left)}["left","middle","right"].forEach((function(e){c["".concat(e,"#ltr")]=e,c["".concat(e,"#rtl")]=e}))},22026:(e,t,i)=>{"use strict";i.d(t,{Bl:()=>s,Jl:()=>l,KR:()=>o,pf:()=>a,vs:()=>r});i(60893),i(52519);var n=i(59835);function o(e,t){return void 0!==e&&e()||t}function s(e,t){if(void 0!==e){var i=e();if(void 0!==i&&null!==i)return i.slice()}return t}function r(e,t){return void 0!==e?t.concat(e()):t}function a(e,t){return void 0===e?t:void 0!==t?t.concat(e()):e()}function l(e,t,i,o,s,r){t.key=o+s;var a=(0,n.h)(e,t,i);return!0===s?(0,n.wy)(a,r()):a}},78383:(e,t,i)=>{"use strict";i.d(t,{e:()=>n});i(58665);var n=!1,o=document.createElement("div");o.setAttribute("dir","rtl"),Object.assign(o.style,{width:"1px",height:"1px",overflow:"auto"});var s=document.createElement("div");Object.assign(s.style,{width:"1000px",height:"1px"}),document.body.appendChild(o),o.appendChild(s),o.scrollLeft=-1e3,n=o.scrollLeft>=0,o.remove()},2589:(e,t,i)=>{"use strict";i.d(t,{M:()=>o});var n=i(47506);function o(){if(void 0!==window.getSelection){var e=window.getSelection();void 0!==e.empty?e.empty():void 0!==e.removeAllRanges&&(e.removeAllRanges(),!0!==n.ZP.is.mobile&&e.addRange(document.createRange()))}else void 0!==document.selection&&document.selection.empty()}},95439:(e,t,i)=>{"use strict";i.d(t,{Mw:()=>s,Nd:()=>a,Ng:()=>n,Xh:()=>l,YE:()=>o,qO:()=>c,vh:()=>r});var n="_q_",o="_q_l_",s="_q_pc_",r="_q_fo_",a="_q_tabs_",l="_q_u_",c=function(){}},99367:(e,t,i)=>{"use strict";i.d(t,{R:()=>a,n:()=>c});var n=i(54080),o=i.n(n),s=(i(34442),i(46727),i(72091),{left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0}),r=Object.keys(s);function a(e){var t,i={},n=o()(r);try{for(n.s();!(t=n.n()).done;){var a=t.value;!0===e[a]&&(i[a]=!0)}}catch(l){n.e(l)}finally{n.f()}return 0===Object.keys(i).length?s:(!0===i.horizontal?i.left=i.right=!0:!0===i.left&&!0===i.right&&(i.horizontal=!0),!0===i.vertical?i.up=i.down=!0:!0===i.up&&!0===i.down&&(i.vertical=!0),!0===i.horizontal&&!0===i.vertical&&(i.all=!0),i)}s.all=!0;var l=["INPUT","TEXTAREA"];function c(e,t){return void 0===t.event&&void 0!==e.target&&!0!==e.target.draggable&&"function"===typeof t.handler&&!1===l.includes(e.target.nodeName.toUpperCase())&&(void 0===e.qClonedBy||-1===e.qClonedBy.indexOf(t.uid))}},52046:(e,t,i)=>{"use strict";i.d(t,{$D:()=>c,O2:()=>s,Pf:()=>a,Rb:()=>l});var n=i(18774),o=i.n(n);i(85711),i(91804),i(65716),i(61732),i(98998),i(43682),i(77280),i(40702),i(97605);function s(e){if(Object(e.$parent)===e.$parent)return e.$parent;var t=e.$.parent;while(Object(t)===t){if(Object(t.proxy)===t.proxy)return t.proxy;t=t.parent}}function r(e,t){"symbol"===o()(t.type)?!0===Array.isArray(t.children)&&t.children.forEach((function(t){r(e,t)})):e.add(t)}function a(e){var t=new Set;return e.forEach((function(e){r(t,e)})),Array.from(t)}function l(e){return void 0!==e.appContext.config.globalProperties.$router}function c(e){return!0===e.isUnmounted||!0===e.isDeactivated}},43701:(e,t,i)=>{"use strict";i.d(t,{OI:()=>l,QA:()=>m,b0:()=>r,f3:()=>g,ik:()=>p,np:()=>f,u3:()=>a});i(46727),i(3452);var n,o=i(70223),s=[null,document,document.body,document.scrollingElement,document.documentElement];function r(e,t){var i=(0,o.sb)(t);if(void 0===i){if(void 0===e||null===e)return window;i=e.closest(".scroll,.scroll-y,.overflow-auto")}return s.includes(i)?window:i}function a(e){return e===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:e.scrollTop}function l(e){return e===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:e.scrollLeft}function c(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=void 0===arguments[3]?performance.now():arguments[3],o=a(e);i<=0?o!==t&&u(e,t):requestAnimationFrame((function(s){var r=s-n,a=o+(t-o)/Math.max(r,i)*r;u(e,a),a!==t&&c(e,t,i-r,s)}))}function d(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=void 0===arguments[3]?performance.now():arguments[3],o=l(e);i<=0?o!==t&&h(e,t):requestAnimationFrame((function(s){var r=s-n,a=o+(t-o)/Math.max(r,i)*r;h(e,a),a!==t&&d(e,t,i-r,s)}))}function u(e,t){e!==window?e.scrollTop=t:window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,t)}function h(e,t){e!==window?e.scrollLeft=t:window.scrollTo(t,window.pageYOffset||window.scrollY||document.body.scrollTop||0)}function g(e,t,i){i?c(e,t,i):u(e,t)}function p(e,t,i){i?d(e,t,i):h(e,t)}function f(){if(void 0!==n)return n;var e=document.createElement("p"),t=document.createElement("div");(0,o.iv)(e,{width:"100%",height:"200px"}),(0,o.iv)(t,{position:"absolute",top:"0px",left:"0px",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),t.appendChild(e),document.body.appendChild(t);var i=e.offsetWidth;t.style.overflow="scroll";var s=e.offsetWidth;return i===s&&(s=t.clientWidth),t.remove(),n=i-s,n}function m(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!(!e||e.nodeType!==Node.ELEMENT_NODE)&&(t?e.scrollHeight>e.clientHeight&&(e.classList.contains("scroll")||e.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(e)["overflow-y"])):e.scrollWidth>e.clientWidth&&(e.classList.contains("scroll")||e.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(e)["overflow-x"])))}},50796:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});i(67451),i(12518),i(65716),i(22725),i(98998),i(30998),i(48170),i(25231),i(31192),i(83827),i(47725),i(85395),i(8968),i(98234),i(3075),i(90548),i(61343),i(76094),i(26638),i(73049),i(6364),i(20276),i(19077),i(6894),i(25764),i(9141),i(69359),i(78849),i(59699),i(56408),i(32045),i(7025),i(62279),i(2157),i(53536),i(46735),i(69665),i(60893);for(var n,o=0,s=new Array(256),r=0;r<256;r++)s[r]=(r+256).toString(16).substring(1);var a=function(){var e="undefined"!==typeof crypto?crypto:"undefined"!==typeof window?window.crypto||window.msCrypto:void 0;if(void 0!==e){if(void 0!==e.randomBytes)return e.randomBytes;if(void 0!==e.getRandomValues)return function(t){var i=new Uint8Array(t);return e.getRandomValues(i),i}}return function(e){for(var t=[],i=e;i>0;i--)t.push(Math.floor(256*Math.random()));return t}}(),l=4096;function c(){(void 0===n||o+16>l)&&(o=0,n=a(l));var e=Array.prototype.slice.call(n,o,o+=16);return e[6]=15&e[6]|64,e[8]=63&e[8]|128,s[e[0]]+s[e[1]]+s[e[2]]+s[e[3]]+"-"+s[e[4]]+s[e[5]]+"-"+s[e[6]]+s[e[7]]+"-"+s[e[8]]+s[e[9]]+"-"+s[e[10]]+s[e[11]]+s[e[12]]+s[e[13]]+s[e[14]]+s[e[15]]}},71947:(e,t,i)=>{"use strict";i.d(t,{Z:()=>r});var n=i(87451),o=i(50892),s=i(72289);const r={version:"2.12.0",install:n.Z,lang:o.Z,iconSet:s.Z}},28762:(e,t,i)=>{"use strict";var n=i(66107),o=i(57545),s=TypeError;e.exports=function(e){if(n(e))return e;throw s(o(e)+" is not a function")}},39667:(e,t,i)=>{"use strict";var n=i(99627),o=i(57545),s=TypeError;e.exports=function(e){if(n(e))return e;throw s(o(e)+" is not a constructor")}},29220:(e,t,i)=>{"use strict";var n=i(66107),o=String,s=TypeError;e.exports=function(e){if("object"==typeof e||n(e))return e;throw s("Can't set "+o(e)+" as a prototype")}},5323:(e,t,i)=>{"use strict";var n=i(14103),o=i(5267),s=i(21012).f,r=n("unscopables"),a=Array.prototype;void 0===a[r]&&s(a,r,{configurable:!0,value:o(null)}),e.exports=function(e){a[r][e]=!0}},53366:(e,t,i)=>{"use strict";var n=i(46823).charAt;e.exports=function(e,t,i){return t+(i?n(e,t).length:1)}},28406:(e,t,i)=>{"use strict";var n=i(36123),o=TypeError;e.exports=function(e,t){if(n(t,e))return e;throw o("Incorrect invocation")}},30616:(e,t,i)=>{"use strict";var n=i(71419),o=String,s=TypeError;e.exports=function(e){if(n(e))return e;throw s(o(e)+" is not an object")}},48389:e=>{"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},7288:(e,t,i)=>{"use strict";var n=i(88814);e.exports=n((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},68086:(e,t,i)=>{"use strict";var n,o,s,r=i(48389),a=i(94133),l=i(53834),c=i(66107),d=i(71419),u=i(62924),h=i(34239),g=i(57545),p=i(64722),f=i(54076),m=i(59570),v=i(36123),_=i(27886),b=i(16534),y=i(14103),w=i(93965),x=i(80780),C=x.enforce,S=x.get,k=l.Int8Array,L=k&&k.prototype,E=l.Uint8ClampedArray,N=E&&E.prototype,D=k&&_(k),T=L&&_(L),A=Object.prototype,I=l.TypeError,R=y("toStringTag"),M=w("TYPED_ARRAY_TAG"),P="TypedArrayConstructor",O=r&&!!b&&"Opera"!==h(l.opera),F=!1,B={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},H={BigInt64Array:8,BigUint64Array:8},W=function(e){if(!d(e))return!1;var t=h(e);return"DataView"===t||u(B,t)||u(H,t)},V=function(e){var t=_(e);if(d(t)){var i=S(t);return i&&u(i,P)?i[P]:V(t)}},z=function(e){if(!d(e))return!1;var t=h(e);return u(B,t)||u(H,t)},U=function(e){if(z(e))return e;throw I("Target is not a typed array")},q=function(e){if(c(e)&&(!b||v(D,e)))return e;throw I(g(e)+" is not a typed array constructor")},$=function(e,t,i,n){if(a){if(i)for(var o in B){var s=l[o];if(s&&u(s.prototype,e))try{delete s.prototype[e]}catch(r){try{s.prototype[e]=t}catch(c){}}}T[e]&&!i||f(T,e,i?t:O&&L[e]||t,n)}},j=function(e,t,i){var n,o;if(a){if(b){if(i)for(n in B)if(o=l[n],o&&u(o,e))try{delete o[e]}catch(s){}if(D[e]&&!i)return;try{return f(D,e,i?t:O&&D[e]||t)}catch(s){}}for(n in B)o=l[n],!o||o[e]&&!i||f(o,e,t)}};for(n in B)o=l[n],s=o&&o.prototype,s?C(s)[P]=o:O=!1;for(n in H)o=l[n],s=o&&o.prototype,s&&(C(s)[P]=o);if((!O||!c(D)||D===Function.prototype)&&(D=function(){throw I("Incorrect invocation")},O))for(n in B)l[n]&&b(l[n],D);if((!O||!T||T===A)&&(T=D.prototype,O))for(n in B)l[n]&&b(l[n].prototype,T);if(O&&_(N)!==T&&b(N,T),a&&!u(T,R))for(n in F=!0,m(T,R,{configurable:!0,get:function(){return d(this)?this[M]:void 0}}),B)l[n]&&p(l[n],M,n);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:O,TYPED_ARRAY_TAG:F&&M,aTypedArray:U,aTypedArrayConstructor:q,exportTypedArrayMethod:$,exportTypedArrayStaticMethod:j,getTypedArrayConstructor:V,isView:W,isTypedArray:z,TypedArray:D,TypedArrayPrototype:T}},92248:(e,t,i)=>{"use strict";var n=i(53834),o=i(81636),s=i(94133),r=i(48389),a=i(49104),l=i(64722),c=i(59570),d=i(52714),u=i(88814),h=i(28406),g=i(46675),p=i(27302),f=i(74686),m=i(59798),v=i(27886),_=i(16534),b=i(53450).f,y=i(15408),w=i(46378),x=i(52365),C=i(80780),S=a.PROPER,k=a.CONFIGURABLE,L="ArrayBuffer",E="DataView",N="prototype",D="Wrong length",T="Wrong index",A=C.getterFor(L),I=C.getterFor(E),R=C.set,M=n[L],P=M,O=P&&P[N],F=n[E],B=F&&F[N],H=Object.prototype,W=n.Array,V=n.RangeError,z=o(y),U=o([].reverse),q=m.pack,$=m.unpack,j=function(e){return[255&e]},K=function(e){return[255&e,e>>8&255]},G=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},Y=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},X=function(e){return q(e,23,4)},Z=function(e){return q(e,52,8)},Q=function(e,t,i){c(e[N],t,{configurable:!0,get:function(){return i(this)[t]}})},J=function(e,t,i,n){var o=I(e),s=f(i),r=!!n;if(s+t>o.byteLength)throw V(T);var a=o.bytes,l=s+o.byteOffset,c=w(a,l,l+t);return r?c:U(c)},ee=function(e,t,i,n,o,s){var r=I(e),a=f(i),l=n(+o),c=!!s;if(a+t>r.byteLength)throw V(T);for(var d=r.bytes,u=a+r.byteOffset,h=0;hoe;)(ie=ne[oe++])in P||l(P,ie,M[ie]);O.constructor=P}_&&v(B)!==H&&_(B,H);var se=new F(new P(2)),re=o(B.setInt8);se.setInt8(0,2147483648),se.setInt8(1,2147483649),!se.getInt8(0)&&se.getInt8(1)||d(B,{setInt8:function(e,t){re(this,e,t<<24>>24)},setUint8:function(e,t){re(this,e,t<<24>>24)}},{unsafe:!0})}else P=function(e){h(this,O);var t=f(e);R(this,{type:L,bytes:z(W(t),0),byteLength:t}),s||(this.byteLength=t,this.detached=!1)},O=P[N],F=function(e,t,i){h(this,B),h(e,O);var n=A(e),o=n.byteLength,r=g(t);if(r<0||r>o)throw V("Wrong offset");if(i=void 0===i?o-r:p(i),r+i>o)throw V(D);R(this,{type:E,buffer:e,byteLength:i,byteOffset:r,bytes:n.bytes}),s||(this.buffer=e,this.byteLength=i,this.byteOffset=r)},B=F[N],s&&(Q(P,"byteLength",A),Q(F,"buffer",I),Q(F,"byteLength",I),Q(F,"byteOffset",I)),d(B,{getInt8:function(e){return J(this,1,e)[0]<<24>>24},getUint8:function(e){return J(this,1,e)[0]},getInt16:function(e){var t=J(this,2,e,arguments.length>1&&arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=J(this,2,e,arguments.length>1&&arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return Y(J(this,4,e,arguments.length>1&&arguments[1]))},getUint32:function(e){return Y(J(this,4,e,arguments.length>1&&arguments[1]))>>>0},getFloat32:function(e){return $(J(this,4,e,arguments.length>1&&arguments[1]),23)},getFloat64:function(e){return $(J(this,8,e,arguments.length>1&&arguments[1]),52)},setInt8:function(e,t){ee(this,1,e,j,t)},setUint8:function(e,t){ee(this,1,e,j,t)},setInt16:function(e,t){ee(this,2,e,K,t,arguments.length>2&&arguments[2])},setUint16:function(e,t){ee(this,2,e,K,t,arguments.length>2&&arguments[2])},setInt32:function(e,t){ee(this,4,e,G,t,arguments.length>2&&arguments[2])},setUint32:function(e,t){ee(this,4,e,G,t,arguments.length>2&&arguments[2])},setFloat32:function(e,t){ee(this,4,e,X,t,arguments.length>2&&arguments[2])},setFloat64:function(e,t){ee(this,8,e,Z,t,arguments.length>2&&arguments[2])}});x(P,L),x(F,E),e.exports={ArrayBuffer:P,DataView:F}},80404:(e,t,i)=>{"use strict";var n=i(38332),o=i(32661),s=i(8600),r=i(26405),a=Math.min;e.exports=[].copyWithin||function(e,t){var i=n(this),l=s(i),c=o(e,l),d=o(t,l),u=arguments.length>2?arguments[2]:void 0,h=a((void 0===u?l:o(u,l))-d,l-c),g=1;d0)d in i?i[c]=i[d]:r(i,c),c+=g,d+=g;return i}},15408:(e,t,i)=>{"use strict";var n=i(38332),o=i(32661),s=i(8600);e.exports=function(e){var t=n(this),i=s(t),r=arguments.length,a=o(r>1?arguments[1]:void 0,i),l=r>2?arguments[2]:void 0,c=void 0===l?i:o(l,i);while(c>a)t[a++]=e;return t}},7028:(e,t,i)=>{"use strict";var n=i(79226).forEach,o=i(67340),s=o("forEach");e.exports=s?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},73364:(e,t,i)=>{"use strict";var n=i(8600);e.exports=function(e,t){var i=0,o=n(t),s=new e(o);while(o>i)s[i]=t[i++];return s}},37508:(e,t,i)=>{"use strict";var n=i(16158),o=i(76654),s=i(38332),r=i(61108),a=i(65712),l=i(99627),c=i(8600),d=i(35976),u=i(54021),h=i(33395),g=Array;e.exports=function(e){var t=s(e),i=l(this),p=arguments.length,f=p>1?arguments[1]:void 0,m=void 0!==f;m&&(f=n(f,p>2?arguments[2]:void 0));var v,_,b,y,w,x,C=h(t),S=0;if(!C||this===g&&a(C))for(v=c(t),_=i?new this(v):g(v);v>S;S++)x=m?f(t[S],S):t[S],d(_,S,x);else for(y=u(t,C),w=y.next,_=i?new this:[];!(b=o(w,y)).done;S++)x=m?r(y,f,[b.value,S],!0):b.value,d(_,S,x);return _.length=S,_}},67714:(e,t,i)=>{"use strict";var n=i(37447),o=i(32661),s=i(8600),r=function(e){return function(t,i,r){var a,l=n(t),c=s(l),d=o(r,c);if(e&&i!==i){while(c>d)if(a=l[d++],a!==a)return!0}else for(;c>d;d++)if((e||d in l)&&l[d]===i)return e||d||0;return!e&&-1}};e.exports={includes:r(!0),indexOf:r(!1)}},49275:(e,t,i)=>{"use strict";var n=i(16158),o=i(53972),s=i(38332),r=i(8600),a=function(e){var t=1===e;return function(i,a,l){var c,d,u=s(i),h=o(u),g=n(a,l),p=r(h);while(p-- >0)if(c=h[p],d=g(c,p,u),d)switch(e){case 0:return c;case 1:return p}return t?-1:void 0}};e.exports={findLast:a(0),findLastIndex:a(1)}},79226:(e,t,i)=>{"use strict";var n=i(16158),o=i(81636),s=i(53972),r=i(38332),a=i(8600),l=i(14837),c=o([].push),d=function(e){var t=1===e,i=2===e,o=3===e,d=4===e,u=6===e,h=7===e,g=5===e||u;return function(p,f,m,v){for(var _,b,y=r(p),w=s(y),x=n(f,m),C=a(w),S=0,k=v||l,L=t?k(p,C):i||h?k(p,0):void 0;C>S;S++)if((g||S in w)&&(_=w[S],b=x(_,S,y),e))if(t)L[S]=b;else if(b)switch(e){case 3:return!0;case 5:return _;case 6:return S;case 2:c(L,_)}else switch(e){case 4:return!1;case 7:c(L,_)}return u?-1:o||d?d:L}};e.exports={forEach:d(0),map:d(1),filter:d(2),some:d(3),every:d(4),find:d(5),findIndex:d(6),filterReject:d(7)}},15744:(e,t,i)=>{"use strict";var n=i(56112),o=i(37447),s=i(46675),r=i(8600),a=i(67340),l=Math.min,c=[].lastIndexOf,d=!!c&&1/[1].lastIndexOf(1,-0)<0,u=a("lastIndexOf"),h=d||!u;e.exports=h?function(e){if(d)return n(c,this,arguments)||0;var t=o(this),i=r(t),a=i-1;for(arguments.length>1&&(a=l(a,s(arguments[1]))),a<0&&(a=i+a);a>=0;a--)if(a in t&&t[a]===e)return a||0;return-1}:c},95442:(e,t,i)=>{"use strict";var n=i(88814),o=i(14103),s=i(71418),r=o("species");e.exports=function(e){return s>=51||!n((function(){var t=[],i=t.constructor={};return i[r]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},67340:(e,t,i)=>{"use strict";var n=i(88814);e.exports=function(e,t){var i=[][e];return!!i&&n((function(){i.call(null,t||function(){return 1},1)}))}},76506:(e,t,i)=>{"use strict";var n=i(28762),o=i(38332),s=i(53972),r=i(8600),a=TypeError,l=function(e){return function(t,i,l,c){n(i);var d=o(t),u=s(d),h=r(d),g=e?h-1:0,p=e?-1:1;if(l<2)while(1){if(g in u){c=u[g],g+=p;break}if(g+=p,e?g<0:h<=g)throw a("Reduce of empty array with no initial value")}for(;e?g>=0:h>g;g+=p)g in u&&(c=i(c,u[g],g,d));return c}};e.exports={left:l(!1),right:l(!0)}},53614:(e,t,i)=>{"use strict";var n=i(94133),o=i(6555),s=TypeError,r=Object.getOwnPropertyDescriptor,a=n&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=a?function(e,t){if(o(e)&&!r(e,"length").writable)throw s("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},46378:(e,t,i)=>{"use strict";var n=i(32661),o=i(8600),s=i(35976),r=Array,a=Math.max;e.exports=function(e,t,i){for(var l=o(e),c=n(t,l),d=n(void 0===i?l:i,l),u=r(a(d-c,0)),h=0;c{"use strict";var n=i(81636);e.exports=n([].slice)},17085:(e,t,i)=>{"use strict";var n=i(46378),o=Math.floor,s=function(e,t){var i=e.length,l=o(i/2);return i<8?r(e,t):a(e,s(n(e,0,l),t),s(n(e,l),t),t)},r=function(e,t){var i,n,o=e.length,s=1;while(s0)e[n]=e[--n];n!==s++&&(e[n]=i)}return e},a=function(e,t,i,n){var o=t.length,s=i.length,r=0,a=0;while(r{"use strict";var n=i(6555),o=i(99627),s=i(71419),r=i(14103),a=r("species"),l=Array;e.exports=function(e){var t;return n(e)&&(t=e.constructor,o(t)&&(t===l||n(t.prototype))?t=void 0:s(t)&&(t=t[a],null===t&&(t=void 0))),void 0===t?l:t}},14837:(e,t,i)=>{"use strict";var n=i(84622);e.exports=function(e,t){return new(n(e))(0===t?0:t)}},37579:(e,t,i)=>{"use strict";var n=i(8600);e.exports=function(e,t){for(var i=n(e),o=new t(i),s=0;s{"use strict";var n=i(8600),o=i(46675),s=RangeError;e.exports=function(e,t,i,r){var a=n(e),l=o(i),c=l<0?a+l:l;if(c>=a||c<0)throw s("Incorrect index");for(var d=new t(a),u=0;u{"use strict";var n=i(30616),o=i(44829);e.exports=function(e,t,i,s){try{return s?t(n(i)[0],i[1]):t(i)}catch(r){o(e,"throw",r)}}},88272:(e,t,i)=>{"use strict";var n=i(14103),o=n("iterator"),s=!1;try{var r=0,a={next:function(){return{done:!!r++}},return:function(){s=!0}};a[o]=function(){return this},Array.from(a,(function(){throw 2}))}catch(l){}e.exports=function(e,t){if(!t&&!s)return!1;var i=!1;try{var n={};n[o]=function(){return{next:function(){return{done:i=!0}}}},e(n)}catch(l){}return i}},16749:(e,t,i)=>{"use strict";var n=i(81636),o=n({}.toString),s=n("".slice);e.exports=function(e){return s(o(e),8,-1)}},34239:(e,t,i)=>{"use strict";var n=i(14130),o=i(66107),s=i(16749),r=i(14103),a=r("toStringTag"),l=Object,c="Arguments"===s(function(){return arguments}()),d=function(e,t){try{return e[t]}catch(i){}};e.exports=n?s:function(e){var t,i,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=d(t=l(e),a))?i:c?s(t):"Object"===(n=s(t))&&o(t.callee)?"Arguments":n}},29694:(e,t,i)=>{"use strict";var n=i(5267),o=i(59570),s=i(52714),r=i(16158),a=i(28406),l=i(13873),c=i(53034),d=i(74987),u=i(49490),h=i(7104),g=i(94133),p=i(71157).fastKey,f=i(80780),m=f.set,v=f.getterFor;e.exports={getConstructor:function(e,t,i,d){var u=e((function(e,o){a(e,h),m(e,{type:t,index:n(null),first:void 0,last:void 0,size:0}),g||(e.size=0),l(o)||c(o,e[d],{that:e,AS_ENTRIES:i})})),h=u.prototype,f=v(t),_=function(e,t,i){var n,o,s=f(e),r=b(e,t);return r?r.value=i:(s.last=r={index:o=p(t,!0),key:t,value:i,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=r),n&&(n.next=r),g?s.size++:e.size++,"F"!==o&&(s.index[o]=r)),e},b=function(e,t){var i,n=f(e),o=p(t);if("F"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key===t)return i};return s(h,{clear:function(){var e=this,t=f(e),i=t.index,n=t.first;while(n)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete i[n.index],n=n.next;t.first=t.last=void 0,g?t.size=0:e.size=0},delete:function(e){var t=this,i=f(t),n=b(t,e);if(n){var o=n.next,s=n.previous;delete i.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),i.first===n&&(i.first=o),i.last===n&&(i.last=s),g?i.size--:t.size--}return!!n},forEach:function(e){var t,i=f(this),n=r(e,arguments.length>1?arguments[1]:void 0);while(t=t?t.next:i.first){n(t.value,t.key,this);while(t&&t.removed)t=t.previous}},has:function(e){return!!b(this,e)}}),s(h,i?{get:function(e){var t=b(this,e);return t&&t.value},set:function(e,t){return _(this,0===e?0:e,t)}}:{add:function(e){return _(this,e=0===e?0:e,e)}}),g&&o(h,"size",{configurable:!0,get:function(){return f(this).size}}),u},setStrong:function(e,t,i){var n=t+" Iterator",o=v(t),s=v(n);d(e,t,(function(e,t){m(this,{type:n,target:e,state:o(e),kind:t,last:void 0})}),(function(){var e=s(this),t=e.kind,i=e.last;while(i&&i.removed)i=i.previous;return e.target&&(e.last=i=i?i.next:e.state.first)?u("keys"===t?i.key:"values"===t?i.value:[i.key,i.value],!1):(e.target=void 0,u(void 0,!0))}),i?"entries":"values",!i,!0),h(t)}}},99072:(e,t,i)=>{"use strict";var n=i(76943),o=i(53834),s=i(81636),r=i(42764),a=i(54076),l=i(71157),c=i(53034),d=i(28406),u=i(66107),h=i(13873),g=i(71419),p=i(88814),f=i(88272),m=i(52365),v=i(32511);e.exports=function(e,t,i){var _=-1!==e.indexOf("Map"),b=-1!==e.indexOf("Weak"),y=_?"set":"add",w=o[e],x=w&&w.prototype,C=w,S={},k=function(e){var t=s(x[e]);a(x,e,"add"===e?function(e){return t(this,0===e?0:e),this}:"delete"===e?function(e){return!(b&&!g(e))&&t(this,0===e?0:e)}:"get"===e?function(e){return b&&!g(e)?void 0:t(this,0===e?0:e)}:"has"===e?function(e){return!(b&&!g(e))&&t(this,0===e?0:e)}:function(e,i){return t(this,0===e?0:e,i),this})},L=r(e,!u(w)||!(b||x.forEach&&!p((function(){(new w).entries().next()}))));if(L)C=i.getConstructor(t,e,_,y),l.enable();else if(r(e,!0)){var E=new C,N=E[y](b?{}:-0,1)!==E,D=p((function(){E.has(1)})),T=f((function(e){new w(e)})),A=!b&&p((function(){var e=new w,t=5;while(t--)e[y](t,t);return!e.has(-0)}));T||(C=t((function(e,t){d(e,x);var i=v(new w,e,C);return h(t)||c(t,i[y],{that:i,AS_ENTRIES:_}),i})),C.prototype=x,x.constructor=C),(D||A)&&(k("delete"),k("has"),_&&k("get")),(A||N)&&k(y),b&&x.clear&&delete x.clear}return S[e]=C,n({global:!0,constructor:!0,forced:C!==w},S),m(C,e),b||i.setStrong(C,e,_),C}},37366:(e,t,i)=>{"use strict";var n=i(62924),o=i(71240),s=i(60863),r=i(21012);e.exports=function(e,t,i){for(var a=o(t),l=r.f,c=s.f,d=0;d{"use strict";var n=i(14103),o=n("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(i){try{return t[o]=!1,"/./"[e](t)}catch(n){}}return!1}},30911:(e,t,i)=>{"use strict";var n=i(88814);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},94964:(e,t,i)=>{"use strict";var n=i(81636),o=i(5177),s=i(96975),r=/"/g,a=n("".replace);e.exports=function(e,t,i,n){var l=s(o(e)),c="<"+t;return""!==i&&(c+=" "+i+'="'+a(s(n),r,""")+'"'),c+">"+l+""}},49490:e=>{"use strict";e.exports=function(e,t){return{value:e,done:t}}},64722:(e,t,i)=>{"use strict";var n=i(94133),o=i(21012),s=i(53386);e.exports=n?function(e,t,i){return o.f(e,t,s(1,i))}:function(e,t,i){return e[t]=i,e}},53386:e=>{"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},35976:(e,t,i)=>{"use strict";var n=i(61017),o=i(21012),s=i(53386);e.exports=function(e,t,i){var r=n(t);r in e?o.f(e,r,s(0,i)):e[r]=i}},494:(e,t,i)=>{"use strict";var n=i(30616),o=i(79370),s=TypeError;e.exports=function(e){if(n(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw s("Incorrect hint");return o(this,e)}},59570:(e,t,i)=>{"use strict";var n=i(92358),o=i(21012);e.exports=function(e,t,i){return i.get&&n(i.get,t,{getter:!0}),i.set&&n(i.set,t,{setter:!0}),o.f(e,t,i)}},54076:(e,t,i)=>{"use strict";var n=i(66107),o=i(21012),s=i(92358),r=i(95437);e.exports=function(e,t,i,a){a||(a={});var l=a.enumerable,c=void 0!==a.name?a.name:t;if(n(i)&&s(i,c,a),a.global)l?e[t]=i:r(t,i);else{try{a.unsafe?e[t]&&(l=!0):delete e[t]}catch(d){}l?e[t]=i:o.f(e,t,{value:i,enumerable:!1,configurable:!a.nonConfigurable,writable:!a.nonWritable})}return e}},52714:(e,t,i)=>{"use strict";var n=i(54076);e.exports=function(e,t,i){for(var o in t)n(e,o,t[o],i);return e}},95437:(e,t,i)=>{"use strict";var n=i(53834),o=Object.defineProperty;e.exports=function(e,t){try{o(n,e,{value:t,configurable:!0,writable:!0})}catch(i){n[e]=t}return t}},26405:(e,t,i)=>{"use strict";var n=i(57545),o=TypeError;e.exports=function(e,t){if(!delete e[t])throw o("Cannot delete property "+n(t)+" of "+n(e))}},94133:(e,t,i)=>{"use strict";var n=i(88814);e.exports=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},30948:e=>{"use strict";var t="object"==typeof document&&document.all,i="undefined"==typeof t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:i}},11657:(e,t,i)=>{"use strict";var n=i(53834),o=i(71419),s=n.document,r=o(s)&&o(s.createElement);e.exports=function(e){return r?s.createElement(e):{}}},76689:e=>{"use strict";var t=TypeError,i=9007199254740991;e.exports=function(e){if(e>i)throw t("Maximum allowed index exceeded");return e}},75243:e=>{"use strict";e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},84130:(e,t,i)=>{"use strict";var n=i(11657),o=n("span").classList,s=o&&o.constructor&&o.constructor.prototype;e.exports=s===Object.prototype?void 0:s},80259:(e,t,i)=>{"use strict";var n=i(80322),o=n.match(/firefox\/(\d+)/i);e.exports=!!o&&+o[1]},17819:(e,t,i)=>{"use strict";var n=i(67085),o=i(62889);e.exports=!n&&!o&&"object"==typeof window&&"object"==typeof document},54868:e=>{"use strict";e.exports="function"==typeof Bun&&Bun&&"string"==typeof Bun.version},67085:e=>{"use strict";e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},31280:(e,t,i)=>{"use strict";var n=i(80322);e.exports=/MSIE|Trident/.test(n)},65461:(e,t,i)=>{"use strict";var n=i(80322);e.exports=/ipad|iphone|ipod/i.test(n)&&"undefined"!=typeof Pebble},44869:(e,t,i)=>{"use strict";var n=i(80322);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},62889:(e,t,i)=>{"use strict";var n=i(53834),o=i(16749);e.exports="process"===o(n.process)},33820:(e,t,i)=>{"use strict";var n=i(80322);e.exports=/web0s(?!.*chrome)/i.test(n)},80322:e=>{"use strict";e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},71418:(e,t,i)=>{"use strict";var n,o,s=i(53834),r=i(80322),a=s.process,l=s.Deno,c=a&&a.versions||l&&l.version,d=c&&c.v8;d&&(n=d.split("."),o=n[0]>0&&n[0]<4?1:+(n[0]+n[1])),!o&&r&&(n=r.match(/Edge\/(\d+)/),(!n||n[1]>=74)&&(n=r.match(/Chrome\/(\d+)/),n&&(o=+n[1]))),e.exports=o},57433:(e,t,i)=>{"use strict";var n=i(80322),o=n.match(/AppleWebKit\/(\d+)\./);e.exports=!!o&&+o[1]},30203:e=>{"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},97940:(e,t,i)=>{"use strict";var n=i(81636),o=Error,s=n("".replace),r=function(e){return String(o(e).stack)}("zxcasd"),a=/\n\s*at [^:]*:[^\n]*/,l=a.test(r);e.exports=function(e,t){if(l&&"string"==typeof e&&!o.prepareStackTrace)while(t--)e=s(e,a,"");return e}},64044:(e,t,i)=>{"use strict";var n=i(64722),o=i(97940),s=i(79277),r=Error.captureStackTrace;e.exports=function(e,t,i,a){s&&(r?r(e,t):n(e,"stack",o(i,a)))}},79277:(e,t,i)=>{"use strict";var n=i(88814),o=i(53386);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},14558:(e,t,i)=>{"use strict";var n=i(94133),o=i(88814),s=i(30616),r=i(5267),a=i(21356),l=Error.prototype.toString,c=o((function(){if(n){var e=r(Object.defineProperty({},"name",{get:function(){return this===e}}));if("true"!==l.call(e))return!0}return"2: 1"!==l.call({message:1,name:2})||"Error"!==l.call({})}));e.exports=c?function(){var e=s(this),t=a(e.name,"Error"),i=a(e.message);return t?i?t+": "+i:t:i}:l},76943:(e,t,i)=>{"use strict";var n=i(53834),o=i(60863).f,s=i(64722),r=i(54076),a=i(95437),l=i(37366),c=i(42764);e.exports=function(e,t){var i,d,u,h,g,p,f=e.target,m=e.global,v=e.stat;if(d=m?n:v?n[f]||a(f,{}):(n[f]||{}).prototype,d)for(u in t){if(g=t[u],e.dontCallGetSet?(p=o(d,u),h=p&&p.value):h=d[u],i=c(m?u:f+(v?".":"#")+u,e.forced),!i&&void 0!==h){if(typeof g==typeof h)continue;l(g,h)}(e.sham||h&&h.sham)&&s(g,"sham",!0),r(d,u,g,e)}}},88814:e=>{"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},93218:(e,t,i)=>{"use strict";i(11476);var n=i(59287),o=i(54076),s=i(40738),r=i(88814),a=i(14103),l=i(64722),c=a("species"),d=RegExp.prototype;e.exports=function(e,t,i,u){var h=a(e),g=!r((function(){var t={};return t[h]=function(){return 7},7!==""[e](t)})),p=g&&!r((function(){var t=!1,i=/a/;return"split"===e&&(i={},i.constructor={},i.constructor[c]=function(){return i},i.flags="",i[h]=/./[h]),i.exec=function(){return t=!0,null},i[h](""),!t}));if(!g||!p||i){var f=n(/./[h]),m=t(h,""[e],(function(e,t,i,o,r){var a=n(e),l=t.exec;return l===s||l===d.exec?g&&!r?{done:!0,value:f(t,i,o)}:{done:!0,value:a(i,t,o)}:{done:!1}}));o(String.prototype,e,m[0]),o(d,h,m[1])}u&&l(d[h],"sham",!0)}},47535:(e,t,i)=>{"use strict";var n=i(6555),o=i(8600),s=i(76689),r=i(16158),a=function(e,t,i,l,c,d,u,h){var g,p,f=c,m=0,v=!!u&&r(u,h);while(m0&&n(g)?(p=o(g),f=a(e,t,g,p,f,d-1)-1):(s(f+1),e[f]=g),f++),m++;return f};e.exports=a},46289:(e,t,i)=>{"use strict";var n=i(88814);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},56112:(e,t,i)=>{"use strict";var n=i(99793),o=Function.prototype,s=o.apply,r=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?r.bind(s):function(){return r.apply(s,arguments)})},16158:(e,t,i)=>{"use strict";var n=i(59287),o=i(28762),s=i(99793),r=n(n.bind);e.exports=function(e,t){return o(e),void 0===t?e:s?r(e,t):function(){return e.apply(t,arguments)}}},99793:(e,t,i)=>{"use strict";var n=i(88814);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},71376:(e,t,i)=>{"use strict";var n=i(81636),o=i(28762),s=i(71419),r=i(62924),a=i(76437),l=i(99793),c=Function,d=n([].concat),u=n([].join),h={},g=function(e,t,i){if(!r(h,t)){for(var n=[],o=0;o{"use strict";var n=i(99793),o=Function.prototype.call;e.exports=n?o.bind(o):function(){return o.apply(o,arguments)}},49104:(e,t,i)=>{"use strict";var n=i(94133),o=i(62924),s=Function.prototype,r=n&&Object.getOwnPropertyDescriptor,a=o(s,"name"),l=a&&"something"===function(){}.name,c=a&&(!n||n&&r(s,"name").configurable);e.exports={EXISTS:a,PROPER:l,CONFIGURABLE:c}},65478:(e,t,i)=>{"use strict";var n=i(81636),o=i(28762);e.exports=function(e,t,i){try{return n(o(Object.getOwnPropertyDescriptor(e,t)[i]))}catch(s){}}},59287:(e,t,i)=>{"use strict";var n=i(16749),o=i(81636);e.exports=function(e){if("Function"===n(e))return o(e)}},81636:(e,t,i)=>{"use strict";var n=i(99793),o=Function.prototype,s=o.call,r=n&&o.bind.bind(s,s);e.exports=n?r:function(e){return function(){return s.apply(e,arguments)}}},97859:(e,t,i)=>{"use strict";var n=i(53834),o=i(66107),s=function(e){return o(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?s(n[e]):n[e]&&n[e][t]}},33395:(e,t,i)=>{"use strict";var n=i(34239),o=i(37689),s=i(13873),r=i(21366),a=i(14103),l=a("iterator");e.exports=function(e){if(!s(e))return o(e,l)||o(e,"@@iterator")||r[n(e)]}},54021:(e,t,i)=>{"use strict";var n=i(76654),o=i(28762),s=i(30616),r=i(57545),a=i(33395),l=TypeError;e.exports=function(e,t){var i=arguments.length<2?a(e):t;if(o(i))return s(n(i,e));throw l(r(e)+" is not iterable")}},95271:(e,t,i)=>{"use strict";var n=i(81636),o=i(6555),s=i(66107),r=i(16749),a=i(96975),l=n([].push);e.exports=function(e){if(s(e))return e;if(o(e)){for(var t=e.length,i=[],n=0;n{"use strict";var n=i(28762),o=i(13873);e.exports=function(e,t){var i=e[t];return o(i)?void 0:n(i)}},43075:(e,t,i)=>{"use strict";var n=i(81636),o=i(38332),s=Math.floor,r=n("".charAt),a=n("".replace),l=n("".slice),c=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,d=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,i,n,u,h){var g=i+e.length,p=n.length,f=d;return void 0!==u&&(u=o(u),f=c),a(h,f,(function(o,a){var c;switch(r(a,0)){case"$":return"$";case"&":return e;case"`":return l(t,0,i);case"'":return l(t,g);case"<":c=u[l(a,1,-1)];break;default:var d=+a;if(0===d)return o;if(d>p){var h=s(d/10);return 0===h?o:h<=p?void 0===n[h-1]?r(a,1):n[h-1]+r(a,1):o}c=n[d-1]}return void 0===c?"":c}))}},53834:function(e,t,i){"use strict";var n=function(e){return e&&e.Math===Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof i.g&&i.g)||function(){return this}()||this||Function("return this")()},62924:(e,t,i)=>{"use strict";var n=i(81636),o=i(38332),s=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return s(o(e),t)}},71999:e=>{"use strict";e.exports={}},43709:e=>{"use strict";e.exports=function(e,t){try{1===arguments.length?console.error(e):console.error(e,t)}catch(i){}}},66052:(e,t,i)=>{"use strict";var n=i(97859);e.exports=n("document","documentElement")},26335:(e,t,i)=>{"use strict";var n=i(94133),o=i(88814),s=i(11657);e.exports=!n&&!o((function(){return 7!==Object.defineProperty(s("div"),"a",{get:function(){return 7}}).a}))},59798:(e,t,i)=>{"use strict";var n=i(79957),o=i(57233),s=Array,r=Math.abs,a=Math.pow,l=Math.floor,c=Math.log,d=Math.LN2,u=function(e){var t=o(e),i=r(e-t);return i>.5||.5===i&&t%2!==0?t+n(e):t},h=function(e,t,i){var n,o,h,g=s(i),p=8*i-t-1,f=(1<>1,v=23===t?a(2,-24)-a(2,-77):0,_=e<0||0===e&&1/e<0?1:0,b=0;e=r(e),e!==e||e===1/0?(o=e!==e?1:0,n=f):(n=l(c(e)/d),h=a(2,-n),e*h<1&&(n--,h*=2),e+=n+m>=1?v/h:v*a(2,1-m),e*h>=2&&(n++,h/=2),n+m>=f?(o=0,n=f):n+m>=1?(o=u((e*h-1)*a(2,t)),n+=m):(o=u(e*a(2,m-1)*a(2,t)),n=0));while(t>=8)g[b++]=255&o,o/=256,t-=8;n=n<0)g[b++]=255&n,n/=256,p-=8;return g[--b]|=128*_,g},g=function(e,t){var i,n=e.length,o=8*n-t-1,s=(1<>1,l=o-7,c=n-1,d=e[c--],u=127&d;d>>=7;while(l>0)u=256*u+e[c--],l-=8;i=u&(1<<-l)-1,u>>=-l,l+=t;while(l>0)i=256*i+e[c--],l-=8;if(0===u)u=1-r;else{if(u===s)return i?NaN:d?-1/0:1/0;i+=a(2,t),u-=r}return(d?-1:1)*i*a(2,u-t)};e.exports={pack:h,unpack:g}},53972:(e,t,i)=>{"use strict";var n=i(81636),o=i(88814),s=i(16749),r=Object,a=n("".split);e.exports=o((function(){return!r("z").propertyIsEnumerable(0)}))?function(e){return"String"===s(e)?a(e,""):r(e)}:r},32511:(e,t,i)=>{"use strict";var n=i(66107),o=i(71419),s=i(16534);e.exports=function(e,t,i){var r,a;return s&&n(r=t.constructor)&&r!==i&&o(a=r.prototype)&&a!==i.prototype&&s(e,a),e}},6461:(e,t,i)=>{"use strict";var n=i(81636),o=i(66107),s=i(76081),r=n(Function.toString);o(s.inspectSource)||(s.inspectSource=function(e){return r(e)}),e.exports=s.inspectSource},56270:(e,t,i)=>{"use strict";var n=i(71419),o=i(64722);e.exports=function(e,t){n(t)&&"cause"in t&&o(e,"cause",t.cause)}},71157:(e,t,i)=>{"use strict";var n=i(76943),o=i(81636),s=i(71999),r=i(71419),a=i(62924),l=i(21012).f,c=i(53450),d=i(18788),u=i(50375),h=i(93965),g=i(46289),p=!1,f=h("meta"),m=0,v=function(e){l(e,f,{value:{objectID:"O"+m++,weakData:{}}})},_=function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!a(e,f)){if(!u(e))return"F";if(!t)return"E";v(e)}return e[f].objectID},b=function(e,t){if(!a(e,f)){if(!u(e))return!0;if(!t)return!1;v(e)}return e[f].weakData},y=function(e){return g&&p&&u(e)&&!a(e,f)&&v(e),e},w=function(){x.enable=function(){},p=!0;var e=c.f,t=o([].splice),i={};i[f]=1,e(i).length&&(c.f=function(i){for(var n=e(i),o=0,s=n.length;o{"use strict";var n,o,s,r=i(75779),a=i(53834),l=i(71419),c=i(64722),d=i(62924),u=i(76081),h=i(35315),g=i(71999),p="Object already initialized",f=a.TypeError,m=a.WeakMap,v=function(e){return s(e)?o(e):n(e,{})},_=function(e){return function(t){var i;if(!l(t)||(i=o(t)).type!==e)throw f("Incompatible receiver, "+e+" required");return i}};if(r||u.state){var b=u.state||(u.state=new m);b.get=b.get,b.has=b.has,b.set=b.set,n=function(e,t){if(b.has(e))throw f(p);return t.facade=e,b.set(e,t),t},o=function(e){return b.get(e)||{}},s=function(e){return b.has(e)}}else{var y=h("state");g[y]=!0,n=function(e,t){if(d(e,y))throw f(p);return t.facade=e,c(e,y,t),t},o=function(e){return d(e,y)?e[y]:{}},s=function(e){return d(e,y)}}e.exports={set:n,get:o,has:s,enforce:v,getterFor:_}},65712:(e,t,i)=>{"use strict";var n=i(14103),o=i(21366),s=n("iterator"),r=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||r[s]===e)}},6555:(e,t,i)=>{"use strict";var n=i(16749);e.exports=Array.isArray||function(e){return"Array"===n(e)}},20354:(e,t,i)=>{"use strict";var n=i(34239);e.exports=function(e){var t=n(e);return"BigInt64Array"===t||"BigUint64Array"===t}},66107:(e,t,i)=>{"use strict";var n=i(30948),o=n.all;e.exports=n.IS_HTMLDDA?function(e){return"function"==typeof e||e===o}:function(e){return"function"==typeof e}},99627:(e,t,i)=>{"use strict";var n=i(81636),o=i(88814),s=i(66107),r=i(34239),a=i(97859),l=i(6461),c=function(){},d=[],u=a("Reflect","construct"),h=/^\s*(?:class|function)\b/,g=n(h.exec),p=!h.exec(c),f=function(e){if(!s(e))return!1;try{return u(c,d,e),!0}catch(t){return!1}},m=function(e){if(!s(e))return!1;switch(r(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return p||!!g(h,l(e))}catch(t){return!0}};m.sham=!0,e.exports=!u||o((function(){var e;return f(f.call)||!f(Object)||!f((function(){e=!0}))||e}))?m:f},42764:(e,t,i)=>{"use strict";var n=i(88814),o=i(66107),s=/#|\.prototype\./,r=function(e,t){var i=l[a(e)];return i===d||i!==c&&(o(t)?n(t):!!t)},a=r.normalize=function(e){return String(e).replace(s,".").toLowerCase()},l=r.data={},c=r.NATIVE="N",d=r.POLYFILL="P";e.exports=r},3903:(e,t,i)=>{"use strict";var n=i(71419),o=Math.floor;e.exports=Number.isInteger||function(e){return!n(e)&&isFinite(e)&&o(e)===e}},13873:e=>{"use strict";e.exports=function(e){return null===e||void 0===e}},71419:(e,t,i)=>{"use strict";var n=i(66107),o=i(30948),s=o.all;e.exports=o.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:n(e)||e===s}:function(e){return"object"==typeof e?null!==e:n(e)}},20200:e=>{"use strict";e.exports=!1},83575:(e,t,i)=>{"use strict";var n=i(71419),o=i(16749),s=i(14103),r=s("match");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[r])?!!t:"RegExp"===o(e))}},51637:(e,t,i)=>{"use strict";var n=i(97859),o=i(66107),s=i(36123),r=i(90049),a=Object;e.exports=r?function(e){return"symbol"==typeof e}:function(e){var t=n("Symbol");return o(t)&&s(t.prototype,a(e))}},53034:(e,t,i)=>{"use strict";var n=i(16158),o=i(76654),s=i(30616),r=i(57545),a=i(65712),l=i(8600),c=i(36123),d=i(54021),u=i(33395),h=i(44829),g=TypeError,p=function(e,t){this.stopped=e,this.result=t},f=p.prototype;e.exports=function(e,t,i){var m,v,_,b,y,w,x,C=i&&i.that,S=!(!i||!i.AS_ENTRIES),k=!(!i||!i.IS_RECORD),L=!(!i||!i.IS_ITERATOR),E=!(!i||!i.INTERRUPTED),N=n(t,C),D=function(e){return m&&h(m,"normal",e),new p(!0,e)},T=function(e){return S?(s(e),E?N(e[0],e[1],D):N(e[0],e[1])):E?N(e,D):N(e)};if(k)m=e.iterator;else if(L)m=e;else{if(v=u(e),!v)throw g(r(e)+" is not iterable");if(a(v)){for(_=0,b=l(e);b>_;_++)if(y=T(e[_]),y&&c(f,y))return y;return new p(!1)}m=d(e,v)}w=k?e.next:m.next;while(!(x=o(w,m)).done){try{y=T(x.value)}catch(A){h(m,"throw",A)}if("object"==typeof y&&y&&c(f,y))return y}return new p(!1)}},44829:(e,t,i)=>{"use strict";var n=i(76654),o=i(30616),s=i(37689);e.exports=function(e,t,i){var r,a;o(e);try{if(r=s(e,"return"),!r){if("throw"===t)throw i;return i}r=n(r,e)}catch(l){a=!0,r=l}if("throw"===t)throw i;if(a)throw r;return o(r),i}},2950:(e,t,i)=>{"use strict";var n=i(50619).IteratorPrototype,o=i(5267),s=i(53386),r=i(52365),a=i(21366),l=function(){return this};e.exports=function(e,t,i,c){var d=t+" Iterator";return e.prototype=o(n,{next:s(+!c,i)}),r(e,d,!1,!0),a[d]=l,e}},74987:(e,t,i)=>{"use strict";var n=i(76943),o=i(76654),s=i(20200),r=i(49104),a=i(66107),l=i(2950),c=i(27886),d=i(16534),u=i(52365),h=i(64722),g=i(54076),p=i(14103),f=i(21366),m=i(50619),v=r.PROPER,_=r.CONFIGURABLE,b=m.IteratorPrototype,y=m.BUGGY_SAFARI_ITERATORS,w=p("iterator"),x="keys",C="values",S="entries",k=function(){return this};e.exports=function(e,t,i,r,p,m,L){l(i,t,r);var E,N,D,T=function(e){if(e===p&&P)return P;if(!y&&e in R)return R[e];switch(e){case x:return function(){return new i(this,e)};case C:return function(){return new i(this,e)};case S:return function(){return new i(this,e)}}return function(){return new i(this)}},A=t+" Iterator",I=!1,R=e.prototype,M=R[w]||R["@@iterator"]||p&&R[p],P=!y&&M||T(p),O="Array"===t&&R.entries||M;if(O&&(E=c(O.call(new e)),E!==Object.prototype&&E.next&&(s||c(E)===b||(d?d(E,b):a(E[w])||g(E,w,k)),u(E,A,!0,!0),s&&(f[A]=k))),v&&p===C&&M&&M.name!==C&&(!s&&_?h(R,"name",C):(I=!0,P=function(){return o(M,this)})),p)if(N={values:T(C),keys:m?P:T(x),entries:T(S)},L)for(D in N)(y||I||!(D in R))&&g(R,D,N[D]);else n({target:t,proto:!0,forced:y||I},N);return s&&!L||R[w]===P||g(R,w,P,{name:p}),f[t]=P,N}},50619:(e,t,i)=>{"use strict";var n,o,s,r=i(88814),a=i(66107),l=i(71419),c=i(5267),d=i(27886),u=i(54076),h=i(14103),g=i(20200),p=h("iterator"),f=!1;[].keys&&(s=[].keys(),"next"in s?(o=d(d(s)),o!==Object.prototype&&(n=o)):f=!0);var m=!l(n)||r((function(){var e={};return n[p].call(e)!==e}));m?n={}:g&&(n=c(n)),a(n[p])||u(n,p,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:f}},21366:e=>{"use strict";e.exports={}},8600:(e,t,i)=>{"use strict";var n=i(27302);e.exports=function(e){return n(e.length)}},92358:(e,t,i)=>{"use strict";var n=i(81636),o=i(88814),s=i(66107),r=i(62924),a=i(94133),l=i(49104).CONFIGURABLE,c=i(6461),d=i(80780),u=d.enforce,h=d.get,g=String,p=Object.defineProperty,f=n("".slice),m=n("".replace),v=n([].join),_=a&&!o((function(){return 8!==p((function(){}),"length",{value:8}).length})),b=String(String).split("String"),y=e.exports=function(e,t,i){"Symbol("===f(g(t),0,7)&&(t="["+m(g(t),/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(t="get "+t),i&&i.setter&&(t="set "+t),(!r(e,"name")||l&&e.name!==t)&&(a?p(e,"name",{value:t,configurable:!0}):e.name=t),_&&i&&r(i,"arity")&&e.length!==i.arity&&p(e,"length",{value:i.arity});try{i&&r(i,"constructor")&&i.constructor?a&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(o){}var n=u(e);return r(n,"source")||(n.source=v(b,"string"==typeof t?t:"")),e};Function.prototype.toString=y((function(){return s(this)&&h(this).source||c(this)}),"toString")},79957:e=>{"use strict";e.exports=Math.sign||function(e){var t=+e;return 0===t||t!==t?t:t<0?-1:1}},57233:e=>{"use strict";var t=Math.ceil,i=Math.floor;e.exports=Math.trunc||function(e){var n=+e;return(n>0?i:t)(n)}},44995:(e,t,i)=>{"use strict";var n,o,s,r,a,l=i(53834),c=i(16158),d=i(60863).f,u=i(3865).set,h=i(53630),g=i(44869),p=i(65461),f=i(33820),m=i(62889),v=l.MutationObserver||l.WebKitMutationObserver,_=l.document,b=l.process,y=l.Promise,w=d(l,"queueMicrotask"),x=w&&w.value;if(!x){var C=new h,S=function(){var e,t;m&&(e=b.domain)&&e.exit();while(t=C.get())try{t()}catch(i){throw C.head&&n(),i}e&&e.enter()};g||m||f||!v||!_?!p&&y&&y.resolve?(r=y.resolve(void 0),r.constructor=y,a=c(r.then,r),n=function(){a(S)}):m?n=function(){b.nextTick(S)}:(u=c(u,l),n=function(){u(S)}):(o=!0,s=_.createTextNode(""),new v(S).observe(s,{characterData:!0}),n=function(){s.data=o=!o}),x=function(e){C.head||n(),C.add(e)}}e.exports=x},29332:(e,t,i)=>{"use strict";var n=i(28762),o=TypeError,s=function(e){var t,i;this.promise=new e((function(e,n){if(void 0!==t||void 0!==i)throw o("Bad Promise constructor");t=e,i=n})),this.resolve=n(t),this.reject=n(i)};e.exports.f=function(e){return new s(e)}},21356:(e,t,i)=>{"use strict";var n=i(96975);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:n(e)}},42851:(e,t,i)=>{"use strict";var n=i(83575),o=TypeError;e.exports=function(e){if(n(e))throw o("The method doesn't accept regular expressions");return e}},29733:(e,t,i)=>{"use strict";var n=i(53834),o=i(88814),s=i(81636),r=i(96975),a=i(33924).trim,l=i(49629),c=s("".charAt),d=n.parseFloat,u=n.Symbol,h=u&&u.iterator,g=1/d(l+"-0")!==-1/0||h&&!o((function(){d(Object(h))}));e.exports=g?function(e){var t=a(r(e)),i=d(t);return 0===i&&"-"===c(t,0)?-0:i}:d},38619:(e,t,i)=>{"use strict";var n=i(53834),o=i(88814),s=i(81636),r=i(96975),a=i(33924).trim,l=i(49629),c=n.parseInt,d=n.Symbol,u=d&&d.iterator,h=/^[+-]?0x/i,g=s(h.exec),p=8!==c(l+"08")||22!==c(l+"0x16")||u&&!o((function(){c(Object(u))}));e.exports=p?function(e,t){var i=a(r(e));return c(i,t>>>0||(g(h,i)?16:10))}:c},9804:(e,t,i)=>{"use strict";var n=i(94133),o=i(81636),s=i(76654),r=i(88814),a=i(34315),l=i(91996),c=i(58068),d=i(38332),u=i(53972),h=Object.assign,g=Object.defineProperty,p=o([].concat);e.exports=!h||r((function(){if(n&&1!==h({b:1},h(g({},"a",{enumerable:!0,get:function(){g(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},i=Symbol("assign detection"),o="abcdefghijklmnopqrst";return e[i]=7,o.split("").forEach((function(e){t[e]=e})),7!==h({},e)[i]||a(h({},t)).join("")!==o}))?function(e,t){var i=d(e),o=arguments.length,r=1,h=l.f,g=c.f;while(o>r){var f,m=u(arguments[r++]),v=h?p(a(m),h(m)):a(m),_=v.length,b=0;while(_>b)f=v[b++],n&&!s(g,m,f)||(i[f]=m[f])}return i}:h},5267:(e,t,i)=>{"use strict";var n,o=i(30616),s=i(26029),r=i(30203),a=i(71999),l=i(66052),c=i(11657),d=i(35315),u=">",h="<",g="prototype",p="script",f=d("IE_PROTO"),m=function(){},v=function(e){return h+p+u+e+h+"/"+p+u},_=function(e){e.write(v("")),e.close();var t=e.parentWindow.Object;return e=null,t},b=function(){var e,t=c("iframe"),i="java"+p+":";return t.style.display="none",l.appendChild(t),t.src=String(i),e=t.contentWindow.document,e.open(),e.write(v("document.F=Object")),e.close(),e.F},y=function(){try{n=new ActiveXObject("htmlfile")}catch(t){}y="undefined"!=typeof document?document.domain&&n?_(n):b():_(n);var e=r.length;while(e--)delete y[g][r[e]];return y()};a[f]=!0,e.exports=Object.create||function(e,t){var i;return null!==e?(m[g]=o(e),i=new m,m[g]=null,i[f]=e):i=y(),void 0===t?i:s.f(i,t)}},26029:(e,t,i)=>{"use strict";var n=i(94133),o=i(50064),s=i(21012),r=i(30616),a=i(37447),l=i(34315);t.f=n&&!o?Object.defineProperties:function(e,t){r(e);var i,n=a(t),o=l(t),c=o.length,d=0;while(c>d)s.f(e,i=o[d++],n[i]);return e}},21012:(e,t,i)=>{"use strict";var n=i(94133),o=i(26335),s=i(50064),r=i(30616),a=i(61017),l=TypeError,c=Object.defineProperty,d=Object.getOwnPropertyDescriptor,u="enumerable",h="configurable",g="writable";t.f=n?s?function(e,t,i){if(r(e),t=a(t),r(i),"function"===typeof e&&"prototype"===t&&"value"in i&&g in i&&!i[g]){var n=d(e,t);n&&n[g]&&(e[t]=i.value,i={configurable:h in i?i[h]:n[h],enumerable:u in i?i[u]:n[u],writable:!1})}return c(e,t,i)}:c:function(e,t,i){if(r(e),t=a(t),r(i),o)try{return c(e,t,i)}catch(n){}if("get"in i||"set"in i)throw l("Accessors not supported");return"value"in i&&(e[t]=i.value),e}},60863:(e,t,i)=>{"use strict";var n=i(94133),o=i(76654),s=i(58068),r=i(53386),a=i(37447),l=i(61017),c=i(62924),d=i(26335),u=Object.getOwnPropertyDescriptor;t.f=n?u:function(e,t){if(e=a(e),t=l(t),d)try{return u(e,t)}catch(i){}if(c(e,t))return r(!o(s.f,e,t),e[t])}},18788:(e,t,i)=>{"use strict";var n=i(16749),o=i(37447),s=i(53450).f,r=i(46378),a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],l=function(e){try{return s(e)}catch(t){return r(a)}};e.exports.f=function(e){return a&&"Window"===n(e)?l(e):s(o(e))}},53450:(e,t,i)=>{"use strict";var n=i(76682),o=i(30203),s=o.concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,s)}},91996:(e,t)=>{"use strict";t.f=Object.getOwnPropertySymbols},27886:(e,t,i)=>{"use strict";var n=i(62924),o=i(66107),s=i(38332),r=i(35315),a=i(30911),l=r("IE_PROTO"),c=Object,d=c.prototype;e.exports=a?c.getPrototypeOf:function(e){var t=s(e);if(n(t,l))return t[l];var i=t.constructor;return o(i)&&t instanceof i?i.prototype:t instanceof c?d:null}},50375:(e,t,i)=>{"use strict";var n=i(88814),o=i(71419),s=i(16749),r=i(7288),a=Object.isExtensible,l=n((function(){a(1)}));e.exports=l||r?function(e){return!!o(e)&&((!r||"ArrayBuffer"!==s(e))&&(!a||a(e)))}:a},36123:(e,t,i)=>{"use strict";var n=i(81636);e.exports=n({}.isPrototypeOf)},76682:(e,t,i)=>{"use strict";var n=i(81636),o=i(62924),s=i(37447),r=i(67714).indexOf,a=i(71999),l=n([].push);e.exports=function(e,t){var i,n=s(e),c=0,d=[];for(i in n)!o(a,i)&&o(n,i)&&l(d,i);while(t.length>c)o(n,i=t[c++])&&(~r(d,i)||l(d,i));return d}},34315:(e,t,i)=>{"use strict";var n=i(76682),o=i(30203);e.exports=Object.keys||function(e){return n(e,o)}},58068:(e,t)=>{"use strict";var i={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,o=n&&!i.call({1:2},1);t.f=o?function(e){var t=n(this,e);return!!t&&t.enumerable}:i},16534:(e,t,i)=>{"use strict";var n=i(65478),o=i(30616),s=i(29220);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{e=n(Object.prototype,"__proto__","set"),e(i,[]),t=i instanceof Array}catch(r){}return function(i,n){return o(i),s(n),t?e(i,n):i.__proto__=n,i}}():void 0)},50108:(e,t,i)=>{"use strict";var n=i(94133),o=i(88814),s=i(81636),r=i(27886),a=i(34315),l=i(37447),c=i(58068).f,d=s(c),u=s([].push),h=n&&o((function(){var e=Object.create(null);return e[2]=2,!d(e,2)})),g=function(e){return function(t){var i,o=l(t),s=a(o),c=h&&null===r(o),g=s.length,p=0,f=[];while(g>p)i=s[p++],n&&!(c?i in o:d(o,i))||u(f,e?[i,o[i]]:o[i]);return f}};e.exports={entries:g(!0),values:g(!1)}},98098:(e,t,i)=>{"use strict";var n=i(14130),o=i(34239);e.exports=n?{}.toString:function(){return"[object "+o(this)+"]"}},79370:(e,t,i)=>{"use strict";var n=i(76654),o=i(66107),s=i(71419),r=TypeError;e.exports=function(e,t){var i,a;if("string"===t&&o(i=e.toString)&&!s(a=n(i,e)))return a;if(o(i=e.valueOf)&&!s(a=n(i,e)))return a;if("string"!==t&&o(i=e.toString)&&!s(a=n(i,e)))return a;throw r("Can't convert object to primitive value")}},71240:(e,t,i)=>{"use strict";var n=i(97859),o=i(81636),s=i(53450),r=i(91996),a=i(30616),l=o([].concat);e.exports=n("Reflect","ownKeys")||function(e){var t=s.f(a(e)),i=r.f;return i?l(t,i(e)):t}},86282:(e,t,i)=>{"use strict";var n=i(53834);e.exports=n},28871:e=>{"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},76202:(e,t,i)=>{"use strict";var n=i(53834),o=i(81425),s=i(66107),r=i(42764),a=i(6461),l=i(14103),c=i(17819),d=i(67085),u=i(20200),h=i(71418),g=o&&o.prototype,p=l("species"),f=!1,m=s(n.PromiseRejectionEvent),v=r("Promise",(function(){var e=a(o),t=e!==String(o);if(!t&&66===h)return!0;if(u&&(!g["catch"]||!g["finally"]))return!0;if(!h||h<51||!/native code/.test(e)){var i=new o((function(e){e(1)})),n=function(e){e((function(){}),(function(){}))},s=i.constructor={};if(s[p]=n,f=i.then((function(){}))instanceof n,!f)return!0}return!t&&(c||d)&&!m}));e.exports={CONSTRUCTOR:v,REJECTION_EVENT:m,SUBCLASSING:f}},81425:(e,t,i)=>{"use strict";var n=i(53834);e.exports=n.Promise},42546:(e,t,i)=>{"use strict";var n=i(30616),o=i(71419),s=i(29332);e.exports=function(e,t){if(n(e),o(t)&&t.constructor===e)return t;var i=s.f(e),r=i.resolve;return r(t),i.promise}},78953:(e,t,i)=>{"use strict";var n=i(81425),o=i(88272),s=i(76202).CONSTRUCTOR;e.exports=s||!o((function(e){n.all(e).then(void 0,(function(){}))}))},34569:(e,t,i)=>{"use strict";var n=i(21012).f;e.exports=function(e,t,i){i in e||n(e,i,{configurable:!0,get:function(){return t[i]},set:function(e){t[i]=e}})}},53630:e=>{"use strict";var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null},i=this.tail;i?i.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e){var t=this.head=e.next;return null===t&&(this.tail=null),e.item}}},e.exports=t},23808:(e,t,i)=>{"use strict";var n=i(76654),o=i(30616),s=i(66107),r=i(16749),a=i(40738),l=TypeError;e.exports=function(e,t){var i=e.exec;if(s(i)){var c=n(i,e,t);return null!==c&&o(c),c}if("RegExp"===r(e))return n(a,e,t);throw l("RegExp#exec called on incompatible receiver")}},40738:(e,t,i)=>{"use strict";var n=i(76654),o=i(81636),s=i(96975),r=i(69592),a=i(9165),l=i(48850),c=i(5267),d=i(80780).get,u=i(93425),h=i(70010),g=l("native-string-replace",String.prototype.replace),p=RegExp.prototype.exec,f=p,m=o("".charAt),v=o("".indexOf),_=o("".replace),b=o("".slice),y=function(){var e=/a/,t=/b*/g;return n(p,e,"a"),n(p,t,"a"),0!==e.lastIndex||0!==t.lastIndex}(),w=a.BROKEN_CARET,x=void 0!==/()??/.exec("")[1],C=y||x||w||u||h;C&&(f=function(e){var t,i,o,a,l,u,h,C=this,S=d(C),k=s(e),L=S.raw;if(L)return L.lastIndex=C.lastIndex,t=n(f,L,k),C.lastIndex=L.lastIndex,t;var E=S.groups,N=w&&C.sticky,D=n(r,C),T=C.source,A=0,I=k;if(N&&(D=_(D,"y",""),-1===v(D,"g")&&(D+="g"),I=b(k,C.lastIndex),C.lastIndex>0&&(!C.multiline||C.multiline&&"\n"!==m(k,C.lastIndex-1))&&(T="(?: "+T+")",I=" "+I,A++),i=new RegExp("^(?:"+T+")",D)),x&&(i=new RegExp("^"+T+"$(?!\\s)",D)),y&&(o=C.lastIndex),a=n(p,N?i:C,I),N?a?(a.input=b(a.input,A),a[0]=b(a[0],A),a.index=C.lastIndex,C.lastIndex+=a[0].length):C.lastIndex=0:y&&a&&(C.lastIndex=C.global?a.index+a[0].length:o),x&&a&&a.length>1&&n(g,a[0],i,(function(){for(l=1;l{"use strict";var n=i(30616);e.exports=function(){var e=n(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},57515:(e,t,i)=>{"use strict";var n=i(76654),o=i(62924),s=i(36123),r=i(69592),a=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in a||o(e,"flags")||!s(a,e)?t:n(r,e)}},9165:(e,t,i)=>{"use strict";var n=i(88814),o=i(53834),s=o.RegExp,r=n((function(){var e=s("a","y");return e.lastIndex=2,null!==e.exec("abcd")})),a=r||n((function(){return!s("a","y").sticky})),l=r||n((function(){var e=s("^r","gy");return e.lastIndex=2,null!==e.exec("str")}));e.exports={BROKEN_CARET:l,MISSED_STICKY:a,UNSUPPORTED_Y:r}},93425:(e,t,i)=>{"use strict";var n=i(88814),o=i(53834),s=o.RegExp;e.exports=n((function(){var e=s(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)}))},70010:(e,t,i)=>{"use strict";var n=i(88814),o=i(53834),s=o.RegExp;e.exports=n((function(){var e=s("(?b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$c")}))},5177:(e,t,i)=>{"use strict";var n=i(13873),o=TypeError;e.exports=function(e){if(n(e))throw o("Can't call method on "+e);return e}},7932:(e,t,i)=>{"use strict";var n=i(53834),o=i(56112),s=i(66107),r=i(54868),a=i(80322),l=i(76437),c=i(5809),d=n.Function,u=/MSIE .\./.test(a)||r&&function(){var e=n.Bun.version.split(".");return e.length<3||"0"===e[0]&&(e[1]<3||"3"===e[1]&&"0"===e[2])}();e.exports=function(e,t){var i=t?2:1;return u?function(n,r){var a=c(arguments.length,1)>i,u=s(n)?n:d(n),h=a?l(arguments,i):[],g=a?function(){o(u,this,h)}:u;return t?e(g,r):e(g)}:e}},7104:(e,t,i)=>{"use strict";var n=i(97859),o=i(59570),s=i(14103),r=i(94133),a=s("species");e.exports=function(e){var t=n(e);r&&t&&!t[a]&&o(t,a,{configurable:!0,get:function(){return this}})}},52365:(e,t,i)=>{"use strict";var n=i(21012).f,o=i(62924),s=i(14103),r=s("toStringTag");e.exports=function(e,t,i){e&&!i&&(e=e.prototype),e&&!o(e,r)&&n(e,r,{configurable:!0,value:t})}},35315:(e,t,i)=>{"use strict";var n=i(48850),o=i(93965),s=n("keys");e.exports=function(e){return s[e]||(s[e]=o(e))}},76081:(e,t,i)=>{"use strict";var n=i(53834),o=i(95437),s="__core-js_shared__",r=n[s]||o(s,{});e.exports=r},48850:(e,t,i)=>{"use strict";var n=i(20200),o=i(76081);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.32.1",mode:n?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.32.1/LICENSE",source:"https://github.com/zloirock/core-js"})},90517:(e,t,i)=>{"use strict";var n=i(30616),o=i(39667),s=i(13873),r=i(14103),a=r("species");e.exports=function(e,t){var i,r=n(e).constructor;return void 0===r||s(i=n(r)[a])?t:o(i)}},26210:(e,t,i)=>{"use strict";var n=i(88814);e.exports=function(e){return n((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},46823:(e,t,i)=>{"use strict";var n=i(81636),o=i(46675),s=i(96975),r=i(5177),a=n("".charAt),l=n("".charCodeAt),c=n("".slice),d=function(e){return function(t,i){var n,d,u=s(r(t)),h=o(i),g=u.length;return h<0||h>=g?e?"":void 0:(n=l(u,h),n<55296||n>56319||h+1===g||(d=l(u,h+1))<56320||d>57343?e?a(u,h):n:e?c(u,h,h+2):d-56320+(n-55296<<10)+65536)}};e.exports={codeAt:d(!1),charAt:d(!0)}},22552:(e,t,i)=>{"use strict";var n=i(81636),o=2147483647,s=36,r=1,a=26,l=38,c=700,d=72,u=128,h="-",g=/[^\0-\u007E]/,p=/[.\u3002\uFF0E\uFF61]/g,f="Overflow: input needs wider integers to process",m=s-r,v=RangeError,_=n(p.exec),b=Math.floor,y=String.fromCharCode,w=n("".charCodeAt),x=n([].join),C=n([].push),S=n("".replace),k=n("".split),L=n("".toLowerCase),E=function(e){var t=[],i=0,n=e.length;while(i=55296&&o<=56319&&i>1,e+=b(e/t);while(e>m*a>>1)e=b(e/m),n+=s;return b(n+(m+1)*e/(e+l))},T=function(e){var t=[];e=E(e);var i,n,l=e.length,c=u,g=0,p=d;for(i=0;i=c&&nb((o-g)/S))throw v(f);for(g+=(w-c)*S,c=w,i=0;io)throw v(f);if(n===c){var k=g,L=s;while(1){var T=L<=p?r:L>=p+a?a:L-p;if(k{"use strict";var n=i(46675),o=i(96975),s=i(5177),r=RangeError;e.exports=function(e){var t=o(s(this)),i="",a=n(e);if(a<0||a===1/0)throw r("Wrong number of repetitions");for(;a>0;(a>>>=1)&&(t+=t))1&a&&(i+=t);return i}},84820:(e,t,i)=>{"use strict";var n=i(49104).PROPER,o=i(88814),s=i(49629),r="​…᠎";e.exports=function(e){return o((function(){return!!s[e]()||r[e]()!==r||n&&s[e].name!==e}))}},33924:(e,t,i)=>{"use strict";var n=i(81636),o=i(5177),s=i(96975),r=i(49629),a=n("".replace),l=RegExp("^["+r+"]+"),c=RegExp("(^|[^"+r+"])["+r+"]+$"),d=function(e){return function(t){var i=s(o(t));return 1&e&&(i=a(i,l,"")),2&e&&(i=a(i,c,"$1")),i}};e.exports={start:d(1),end:d(2),trim:d(3)}},4651:(e,t,i)=>{"use strict";var n=i(71418),o=i(88814),s=i(53834),r=s.String;e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol("symbol detection");return!r(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},58359:(e,t,i)=>{"use strict";var n=i(76654),o=i(97859),s=i(14103),r=i(54076);e.exports=function(){var e=o("Symbol"),t=e&&e.prototype,i=t&&t.valueOf,a=s("toPrimitive");t&&!t[a]&&r(t,a,(function(e){return n(i,this)}),{arity:1})}},13151:(e,t,i)=>{"use strict";var n=i(4651);e.exports=n&&!!Symbol["for"]&&!!Symbol.keyFor},3865:(e,t,i)=>{"use strict";var n,o,s,r,a=i(53834),l=i(56112),c=i(16158),d=i(66107),u=i(62924),h=i(88814),g=i(66052),p=i(76437),f=i(11657),m=i(5809),v=i(44869),_=i(62889),b=a.setImmediate,y=a.clearImmediate,w=a.process,x=a.Dispatch,C=a.Function,S=a.MessageChannel,k=a.String,L=0,E={},N="onreadystatechange";h((function(){n=a.location}));var D=function(e){if(u(E,e)){var t=E[e];delete E[e],t()}},T=function(e){return function(){D(e)}},A=function(e){D(e.data)},I=function(e){a.postMessage(k(e),n.protocol+"//"+n.host)};b&&y||(b=function(e){m(arguments.length,1);var t=d(e)?e:C(e),i=p(arguments,1);return E[++L]=function(){l(t,void 0,i)},o(L),L},y=function(e){delete E[e]},_?o=function(e){w.nextTick(T(e))}:x&&x.now?o=function(e){x.now(T(e))}:S&&!v?(s=new S,r=s.port2,s.port1.onmessage=A,o=c(r.postMessage,r)):a.addEventListener&&d(a.postMessage)&&!a.importScripts&&n&&"file:"!==n.protocol&&!h(I)?(o=I,a.addEventListener("message",A,!1)):o=N in f("script")?function(e){g.appendChild(f("script"))[N]=function(){g.removeChild(this),D(e)}}:function(e){setTimeout(T(e),0)}),e.exports={set:b,clear:y}},8565:(e,t,i)=>{"use strict";var n=i(81636);e.exports=n(1..valueOf)},32661:(e,t,i)=>{"use strict";var n=i(46675),o=Math.max,s=Math.min;e.exports=function(e,t){var i=n(e);return i<0?o(i+t,0):s(i,t)}},57385:(e,t,i)=>{"use strict";var n=i(34384),o=TypeError;e.exports=function(e){var t=n(e,"number");if("number"==typeof t)throw o("Can't convert number to bigint");return BigInt(t)}},74686:(e,t,i)=>{"use strict";var n=i(46675),o=i(27302),s=RangeError;e.exports=function(e){if(void 0===e)return 0;var t=n(e),i=o(t);if(t!==i)throw s("Wrong length or index");return i}},37447:(e,t,i)=>{"use strict";var n=i(53972),o=i(5177);e.exports=function(e){return n(o(e))}},46675:(e,t,i)=>{"use strict";var n=i(57233);e.exports=function(e){var t=+e;return t!==t||0===t?0:n(t)}},27302:(e,t,i)=>{"use strict";var n=i(46675),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},38332:(e,t,i)=>{"use strict";var n=i(5177),o=Object;e.exports=function(e){return o(n(e))}},84084:(e,t,i)=>{"use strict";var n=i(40859),o=RangeError;e.exports=function(e,t){var i=n(e);if(i%t)throw o("Wrong offset");return i}},40859:(e,t,i)=>{"use strict";var n=i(46675),o=RangeError;e.exports=function(e){var t=n(e);if(t<0)throw o("The argument can't be less than 0");return t}},34384:(e,t,i)=>{"use strict";var n=i(76654),o=i(71419),s=i(51637),r=i(37689),a=i(79370),l=i(14103),c=TypeError,d=l("toPrimitive");e.exports=function(e,t){if(!o(e)||s(e))return e;var i,l=r(e,d);if(l){if(void 0===t&&(t="default"),i=n(l,e,t),!o(i)||s(i))return i;throw c("Can't convert object to primitive value")}return void 0===t&&(t="number"),a(e,t)}},61017:(e,t,i)=>{"use strict";var n=i(34384),o=i(51637);e.exports=function(e){var t=n(e,"string");return o(t)?t:t+""}},14130:(e,t,i)=>{"use strict";var n=i(14103),o=n("toStringTag"),s={};s[o]="z",e.exports="[object z]"===String(s)},96975:(e,t,i)=>{"use strict";var n=i(34239),o=String;e.exports=function(e){if("Symbol"===n(e))throw TypeError("Cannot convert a Symbol value to a string");return o(e)}},60056:e=>{"use strict";var t=Math.round;e.exports=function(e){var i=t(e);return i<0?0:i>255?255:255&i}},57545:e=>{"use strict";var t=String;e.exports=function(e){try{return t(e)}catch(i){return"Object"}}},68532:(e,t,i)=>{"use strict";var n=i(76943),o=i(53834),s=i(76654),r=i(94133),a=i(5136),l=i(68086),c=i(92248),d=i(28406),u=i(53386),h=i(64722),g=i(3903),p=i(27302),f=i(74686),m=i(84084),v=i(60056),_=i(61017),b=i(62924),y=i(34239),w=i(71419),x=i(51637),C=i(5267),S=i(36123),k=i(16534),L=i(53450).f,E=i(21157),N=i(79226).forEach,D=i(7104),T=i(59570),A=i(21012),I=i(60863),R=i(80780),M=i(32511),P=R.get,O=R.set,F=R.enforce,B=A.f,H=I.f,W=o.RangeError,V=c.ArrayBuffer,z=V.prototype,U=c.DataView,q=l.NATIVE_ARRAY_BUFFER_VIEWS,$=l.TYPED_ARRAY_TAG,j=l.TypedArray,K=l.TypedArrayPrototype,G=l.aTypedArrayConstructor,Y=l.isTypedArray,X="BYTES_PER_ELEMENT",Z="Wrong length",Q=function(e,t){G(e);var i=0,n=t.length,o=new e(n);while(n>i)o[i]=t[i++];return o},J=function(e,t){T(e,t,{configurable:!0,get:function(){return P(this)[t]}})},ee=function(e){var t;return S(z,e)||"ArrayBuffer"===(t=y(e))||"SharedArrayBuffer"===t},te=function(e,t){return Y(e)&&!x(t)&&t in e&&g(+t)&&t>=0},ie=function(e,t){return t=_(t),te(e,t)?u(2,e[t]):H(e,t)},ne=function(e,t,i){return t=_(t),!(te(e,t)&&w(i)&&b(i,"value"))||b(i,"get")||b(i,"set")||i.configurable||b(i,"writable")&&!i.writable||b(i,"enumerable")&&!i.enumerable?B(e,t,i):(e[t]=i.value,e)};r?(q||(I.f=ie,A.f=ne,J(K,"buffer"),J(K,"byteOffset"),J(K,"byteLength"),J(K,"length")),n({target:"Object",stat:!0,forced:!q},{getOwnPropertyDescriptor:ie,defineProperty:ne}),e.exports=function(e,t,i){var r=e.match(/\d+/)[0]/8,l=e+(i?"Clamped":"")+"Array",c="get"+e,u="set"+e,g=o[l],_=g,b=_&&_.prototype,y={},x=function(e,t){var i=P(e);return i.view[c](t*r+i.byteOffset,!0)},S=function(e,t,n){var o=P(e);o.view[u](t*r+o.byteOffset,i?v(n):n,!0)},T=function(e,t){B(e,t,{get:function(){return x(this,t)},set:function(e){return S(this,t,e)},enumerable:!0})};q?a&&(_=t((function(e,t,i,n){return d(e,b),M(function(){return w(t)?ee(t)?void 0!==n?new g(t,m(i,r),n):void 0!==i?new g(t,m(i,r)):new g(t):Y(t)?Q(_,t):s(E,_,t):new g(f(t))}(),e,_)})),k&&k(_,j),N(L(g),(function(e){e in _||h(_,e,g[e])})),_.prototype=b):(_=t((function(e,t,i,n){d(e,b);var o,a,l,c=0,u=0;if(w(t)){if(!ee(t))return Y(t)?Q(_,t):s(E,_,t);o=t,u=m(i,r);var h=t.byteLength;if(void 0===n){if(h%r)throw W(Z);if(a=h-u,a<0)throw W(Z)}else if(a=p(n)*r,a+u>h)throw W(Z);l=a/r}else l=f(t),a=l*r,o=new V(a);O(e,{buffer:o,byteOffset:u,byteLength:a,length:l,view:new U(o)});while(c{"use strict";var n=i(53834),o=i(88814),s=i(88272),r=i(68086).NATIVE_ARRAY_BUFFER_VIEWS,a=n.ArrayBuffer,l=n.Int8Array;e.exports=!r||!o((function(){l(1)}))||!o((function(){new l(-1)}))||!s((function(e){new l,new l(null),new l(1.5),new l(e)}),!0)||o((function(){return 1!==new l(new a(2),1,void 0).length}))},76352:(e,t,i)=>{"use strict";var n=i(73364),o=i(38148);e.exports=function(e,t){return n(o(e),t)}},21157:(e,t,i)=>{"use strict";var n=i(16158),o=i(76654),s=i(39667),r=i(38332),a=i(8600),l=i(54021),c=i(33395),d=i(65712),u=i(20354),h=i(68086).aTypedArrayConstructor,g=i(57385);e.exports=function(e){var t,i,p,f,m,v,_,b,y=s(this),w=r(e),x=arguments.length,C=x>1?arguments[1]:void 0,S=void 0!==C,k=c(w);if(k&&!d(k)){_=l(w,k),b=_.next,w=[];while(!(v=o(b,_)).done)w.push(v.value)}for(S&&x>2&&(C=n(C,arguments[2])),i=a(w),p=new(h(y))(i),f=u(p),t=0;i>t;t++)m=S?C(w[t],t):w[t],p[t]=f?g(m):+m;return p}},38148:(e,t,i)=>{"use strict";var n=i(68086),o=i(90517),s=n.aTypedArrayConstructor,r=n.getTypedArrayConstructor;e.exports=function(e){return s(o(e,r(e)))}},93965:(e,t,i)=>{"use strict";var n=i(81636),o=0,s=Math.random(),r=n(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+r(++o+s,36)}},40036:(e,t,i)=>{"use strict";var n=i(88814),o=i(14103),s=i(94133),r=i(20200),a=o("iterator");e.exports=!n((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,i=new URLSearchParams("a=1&a=2&b=3"),n="";return e.pathname="c%20d",t.forEach((function(e,i){t["delete"]("b"),n+=i+e})),i["delete"]("a",2),i["delete"]("b",void 0),r&&(!e.toJSON||!i.has("a",1)||i.has("a",2)||!i.has("a",void 0)||i.has("b"))||!t.size&&(r||!s)||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[a]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},90049:(e,t,i)=>{"use strict";var n=i(4651);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},50064:(e,t,i)=>{"use strict";var n=i(94133),o=i(88814);e.exports=n&&o((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},5809:e=>{"use strict";var t=TypeError;e.exports=function(e,i){if(e{"use strict";var n=i(53834),o=i(66107),s=n.WeakMap;e.exports=o(s)&&/native code/.test(String(s))},78755:(e,t,i)=>{"use strict";var n=i(86282),o=i(62924),s=i(24615),r=i(21012).f;e.exports=function(e){var t=n.Symbol||(n.Symbol={});o(t,e)||r(t,e,{value:s.f(e)})}},24615:(e,t,i)=>{"use strict";var n=i(14103);t.f=n},14103:(e,t,i)=>{"use strict";var n=i(53834),o=i(48850),s=i(62924),r=i(93965),a=i(4651),l=i(90049),c=n.Symbol,d=o("wks"),u=l?c["for"]||c:c&&c.withoutSetter||r;e.exports=function(e){return s(d,e)||(d[e]=a&&s(c,e)?c[e]:u("Symbol."+e)),d[e]}},49629:e=>{"use strict";e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},38376:(e,t,i)=>{"use strict";var n=i(97859),o=i(62924),s=i(64722),r=i(36123),a=i(16534),l=i(37366),c=i(34569),d=i(32511),u=i(21356),h=i(56270),g=i(64044),p=i(94133),f=i(20200);e.exports=function(e,t,i,m){var v="stackTraceLimit",_=m?2:1,b=e.split("."),y=b[b.length-1],w=n.apply(null,b);if(w){var x=w.prototype;if(!f&&o(x,"cause")&&delete x.cause,!i)return w;var C=n("Error"),S=t((function(e,t){var i=u(m?t:e,void 0),n=m?new w(e):new w;return void 0!==i&&s(n,"message",i),g(n,S,n.stack,2),this&&r(x,this)&&d(n,this,S),arguments.length>_&&h(n,arguments[_]),n}));if(S.prototype=x,"Error"!==y?a?a(S,C):l(S,C,{name:!0}):p&&v in w&&(c(S,w,v),c(S,w,"prepareStackTrace")),l(S,w),!f)try{x.name!==y&&s(x,"name",y),x.constructor=S}catch(k){}return S}}},6945:(e,t,i)=>{"use strict";var n=i(76943),o=i(53834),s=i(92248),r=i(7104),a="ArrayBuffer",l=s[a],c=o[a];n({global:!0,constructor:!0,forced:c!==l},{ArrayBuffer:l}),r(a)},30998:(e,t,i)=>{"use strict";var n=i(76943),o=i(59287),s=i(88814),r=i(92248),a=i(30616),l=i(32661),c=i(27302),d=i(90517),u=r.ArrayBuffer,h=r.DataView,g=h.prototype,p=o(u.prototype.slice),f=o(g.getUint8),m=o(g.setUint8),v=s((function(){return!new u(2).slice(1,void 0).byteLength}));n({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:v},{slice:function(e,t){if(p&&void 0===t)return p(a(this),e);var i=a(this).byteLength,n=l(e,i),o=l(void 0===t?i:t,i),s=new(d(this,u))(c(o-n)),r=new h(this),g=new h(s),v=0;while(n{"use strict";var n=i(76943),o=i(88814),s=i(6555),r=i(71419),a=i(38332),l=i(8600),c=i(76689),d=i(35976),u=i(14837),h=i(95442),g=i(14103),p=i(71418),f=g("isConcatSpreadable"),m=p>=51||!o((function(){var e=[];return e[f]=!1,e.concat()[0]!==e})),v=function(e){if(!r(e))return!1;var t=e[f];return void 0!==t?!!t:s(e)},_=!m||!h("concat");n({target:"Array",proto:!0,arity:1,forced:_},{concat:function(e){var t,i,n,o,s,r=a(this),h=u(r,0),g=0;for(t=-1,n=arguments.length;t{"use strict";var n=i(76943),o=i(79226).every,s=i(67340),r=s("every");n({target:"Array",proto:!0,forced:!r},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},56072:(e,t,i)=>{"use strict";var n=i(76943),o=i(79226).filter,s=i(95442),r=s("filter");n({target:"Array",proto:!0,forced:!r},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},88554:(e,t,i)=>{"use strict";var n=i(76943),o=i(79226).findIndex,s=i(5323),r="findIndex",a=!0;r in[]&&Array(1)[r]((function(){a=!1})),n({target:"Array",proto:!0,forced:a},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),s(r)},18381:(e,t,i)=>{"use strict";var n=i(76943),o=i(79226).find,s=i(5323),r="find",a=!0;r in[]&&Array(1)[r]((function(){a=!1})),n({target:"Array",proto:!0,forced:a},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),s(r)},84839:(e,t,i)=>{"use strict";var n=i(76943),o=i(47535),s=i(38332),r=i(8600),a=i(46675),l=i(14837);n({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=s(this),i=r(t),n=l(t,0);return n.length=o(n,t,t,i,0,void 0===e?1:a(e)),n}})},91804:(e,t,i)=>{"use strict";var n=i(76943),o=i(7028);n({target:"Array",proto:!0,forced:[].forEach!==o},{forEach:o})},97605:(e,t,i)=>{"use strict";var n=i(76943),o=i(37508),s=i(88272),r=!s((function(e){Array.from(e)}));n({target:"Array",stat:!0,forced:r},{from:o})},46727:(e,t,i)=>{"use strict";var n=i(76943),o=i(67714).includes,s=i(88814),r=i(5323),a=s((function(){return!Array(1).includes()}));n({target:"Array",proto:!0,forced:a},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),r("includes")},72091:(e,t,i)=>{"use strict";var n=i(76943),o=i(59287),s=i(67714).indexOf,r=i(67340),a=o([].indexOf),l=!!a&&1/a([1],1,-0)<0,c=l||!r("indexOf");n({target:"Array",proto:!0,forced:c},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return l?a(this,e,t)||0:s(this,e,t)}})},85711:(e,t,i)=>{"use strict";var n=i(76943),o=i(6555);n({target:"Array",stat:!0},{isArray:o})},98998:(e,t,i)=>{"use strict";var n=i(37447),o=i(5323),s=i(21366),r=i(80780),a=i(21012).f,l=i(74987),c=i(49490),d=i(20200),u=i(94133),h="Array Iterator",g=r.set,p=r.getterFor(h);e.exports=l(Array,"Array",(function(e,t){g(this,{type:h,target:n(e),index:0,kind:t})}),(function(){var e=p(this),t=e.target,i=e.kind,n=e.index++;if(!t||n>=t.length)return e.target=void 0,c(void 0,!0);switch(i){case"keys":return c(n,!1);case"values":return c(t[n],!1)}return c([n,t[n]],!1)}),"values");var f=s.Arguments=s.Array;if(o("keys"),o("values"),o("entries"),!d&&u&&"values"!==f.name)try{a(f,"name",{value:"values"})}catch(m){}},91392:(e,t,i)=>{"use strict";var n=i(76943),o=i(81636),s=i(53972),r=i(37447),a=i(67340),l=o([].join),c=s!==Object,d=c||!a("join",",");n({target:"Array",proto:!0,forced:d},{join:function(e){return l(r(this),void 0===e?",":e)}})},85448:(e,t,i)=>{"use strict";var n=i(76943),o=i(15744);n({target:"Array",proto:!0,forced:o!==[].lastIndexOf},{lastIndexOf:o})},51393:(e,t,i)=>{"use strict";var n=i(76943),o=i(79226).map,s=i(95442),r=s("map");n({target:"Array",proto:!0,forced:!r},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},69665:(e,t,i)=>{"use strict";var n=i(76943),o=i(38332),s=i(8600),r=i(53614),a=i(76689),l=i(88814),c=l((function(){return 4294967297!==[].push.call({length:4294967296},1)})),d=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(e){return e instanceof TypeError}},u=c||!d();n({target:"Array",proto:!0,arity:1,forced:u},{push:function(e){var t=o(this),i=s(t),n=arguments.length;a(i+n);for(var l=0;l{"use strict";var n=i(76943),o=i(76506).left,s=i(67340),r=i(71418),a=i(62889),l=!a&&r>79&&r<83,c=l||!s("reduce");n({target:"Array",proto:!0,forced:c},{reduce:function(e){var t=arguments.length;return o(this,e,t,t>1?arguments[1]:void 0)}})},79481:(e,t,i)=>{"use strict";var n=i(76943),o=i(81636),s=i(6555),r=o([].reverse),a=[1,2];n({target:"Array",proto:!0,forced:String(a)===String(a.reverse())},{reverse:function(){return s(this)&&(this.length=this.length),r(this)}})},60893:(e,t,i)=>{"use strict";var n=i(76943),o=i(6555),s=i(99627),r=i(71419),a=i(32661),l=i(8600),c=i(37447),d=i(35976),u=i(14103),h=i(95442),g=i(76437),p=h("slice"),f=u("species"),m=Array,v=Math.max;n({target:"Array",proto:!0,forced:!p},{slice:function(e,t){var i,n,u,h=c(this),p=l(h),_=a(e,p),b=a(void 0===t?p:t,p);if(o(h)&&(i=h.constructor,s(i)&&(i===m||o(i.prototype))?i=void 0:r(i)&&(i=i[f],null===i&&(i=void 0)),i===m||void 0===i))return g(h,_,b);for(n=new(void 0===i?m:i)(v(b-_,0)),u=0;_{"use strict";var n=i(76943),o=i(79226).some,s=i(67340),r=s("some");n({target:"Array",proto:!0,forced:!r},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},58839:(e,t,i)=>{"use strict";var n=i(76943),o=i(81636),s=i(28762),r=i(38332),a=i(8600),l=i(26405),c=i(96975),d=i(88814),u=i(17085),h=i(67340),g=i(80259),p=i(31280),f=i(71418),m=i(57433),v=[],_=o(v.sort),b=o(v.push),y=d((function(){v.sort(void 0)})),w=d((function(){v.sort(null)})),x=h("sort"),C=!d((function(){if(f)return f<70;if(!(g&&g>3)){if(p)return!0;if(m)return m<603;var e,t,i,n,o="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)v.push({k:t+n,v:i})}for(v.sort((function(e,t){return t.v-e.v})),n=0;nc(i)?1:-1}};n({target:"Array",proto:!0,forced:S},{sort:function(e){void 0!==e&&s(e);var t=r(this);if(C)return void 0===e?_(t):_(t,e);var i,n,o=[],c=a(t);for(n=0;n{"use strict";var n=i(76943),o=i(38332),s=i(32661),r=i(46675),a=i(8600),l=i(53614),c=i(76689),d=i(14837),u=i(35976),h=i(26405),g=i(95442),p=g("splice"),f=Math.max,m=Math.min;n({target:"Array",proto:!0,forced:!p},{splice:function(e,t){var i,n,g,p,v,_,b=o(this),y=a(b),w=s(e,y),x=arguments.length;for(0===x?i=n=0:1===x?(i=0,n=y-w):(i=x-2,n=m(f(r(t),0),y-w)),c(y+i-n),g=d(b,n),p=0;py-n+i;p--)h(b,p-1)}else if(i>n)for(p=y-n;p>w;p--)v=p+n-1,_=p+i-1,v in b?b[_]=b[v]:h(b,_);for(p=0;p{"use strict";var n=i(5323);n("flat")},86890:(e,t,i)=>{"use strict";var n=i(76943),o=i(38332),s=i(8600),r=i(53614),a=i(26405),l=i(76689),c=1!==[].unshift(0),d=function(){try{Object.defineProperty([],"length",{writable:!1}).unshift()}catch(e){return e instanceof TypeError}},u=c||!d();n({target:"Array",proto:!0,arity:1,forced:u},{unshift:function(e){var t=o(this),i=s(t),n=arguments.length;if(n){l(i+n);var c=i;while(c--){var d=c+n;c in t?t[d]=t[c]:a(t,d)}for(var u=0;u{"use strict";var n=i(76943),o=i(81636),s=Date,r=o(s.prototype.getTime);n({target:"Date",stat:!0},{now:function(){return r(new s)}})},78472:(e,t,i)=>{"use strict";var n=i(62924),o=i(54076),s=i(494),r=i(14103),a=r("toPrimitive"),l=Date.prototype;n(l,a)||o(l,a,s)},12518:(e,t,i)=>{"use strict";var n=i(81636),o=i(54076),s=Date.prototype,r="Invalid Date",a="toString",l=n(s[a]),c=n(s.getTime);String(new Date(NaN))!==r&&o(s,a,(function(){var e=c(this);return e===e?l(this):r}))},6822:(e,t,i)=>{"use strict";var n=i(76943),o=i(53834),s=i(56112),r=i(38376),a="WebAssembly",l=o[a],c=7!==Error("e",{cause:7}).cause,d=function(e,t){var i={};i[e]=r(e,t,c),n({global:!0,constructor:!0,arity:1,forced:c},i)},u=function(e,t){if(l&&l[e]){var i={};i[e]=r(a+"."+e,t,c),n({target:a,stat:!0,constructor:!0,arity:1,forced:c},i)}};d("Error",(function(e){return function(t){return s(e,this,arguments)}})),d("EvalError",(function(e){return function(t){return s(e,this,arguments)}})),d("RangeError",(function(e){return function(t){return s(e,this,arguments)}})),d("ReferenceError",(function(e){return function(t){return s(e,this,arguments)}})),d("SyntaxError",(function(e){return function(t){return s(e,this,arguments)}})),d("TypeError",(function(e){return function(t){return s(e,this,arguments)}})),d("URIError",(function(e){return function(t){return s(e,this,arguments)}})),u("CompileError",(function(e){return function(t){return s(e,this,arguments)}})),u("LinkError",(function(e){return function(t){return s(e,this,arguments)}})),u("RuntimeError",(function(e){return function(t){return s(e,this,arguments)}}))},67451:(e,t,i)=>{"use strict";var n=i(54076),o=i(14558),s=Error.prototype;s.toString!==o&&n(s,"toString",o)},87360:(e,t,i)=>{"use strict";var n=i(76943),o=i(71376);n({target:"Function",proto:!0,forced:Function.bind!==o},{bind:o})},62590:(e,t,i)=>{"use strict";var n=i(94133),o=i(49104).EXISTS,s=i(81636),r=i(59570),a=Function.prototype,l=s(a.toString),c=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,d=s(c.exec),u="name";n&&!o&&r(a,u,{configurable:!0,get:function(){try{return d(c,l(this))[1]}catch(e){return""}}})},25328:(e,t,i)=>{"use strict";var n=i(76943),o=i(97859),s=i(56112),r=i(76654),a=i(81636),l=i(88814),c=i(66107),d=i(51637),u=i(76437),h=i(95271),g=i(4651),p=String,f=o("JSON","stringify"),m=a(/./.exec),v=a("".charAt),_=a("".charCodeAt),b=a("".replace),y=a(1..toString),w=/[\uD800-\uDFFF]/g,x=/^[\uD800-\uDBFF]$/,C=/^[\uDC00-\uDFFF]$/,S=!g||l((function(){var e=o("Symbol")("stringify detection");return"[null]"!==f([e])||"{}"!==f({a:e})||"{}"!==f(Object(e))})),k=l((function(){return'"\\udf06\\ud834"'!==f("\udf06\ud834")||'"\\udead"'!==f("\udead")})),L=function(e,t){var i=u(arguments),n=h(t);if(c(n)||void 0!==e&&!d(e))return i[1]=function(e,t){if(c(n)&&(t=r(n,this,p(e),t)),!d(t))return t},s(f,null,i)},E=function(e,t,i){var n=v(i,t-1),o=v(i,t+1);return m(x,e)&&!m(C,o)||m(C,e)&&!m(x,n)?"\\u"+y(_(e,0),16):e};f&&n({target:"JSON",stat:!0,arity:3,forced:S||k},{stringify:function(e,t,i){var n=u(arguments),o=s(S?L:f,null,n);return k&&"string"==typeof o?b(o,w,E):o}})},13790:(e,t,i)=>{"use strict";var n=i(53834),o=i(52365);o(n.JSON,"JSON",!0)},26045:(e,t,i)=>{"use strict";var n=i(99072),o=i(29694);n("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),o)},38194:(e,t,i)=>{"use strict";i(26045)},59763:(e,t,i)=>{"use strict";var n=i(52365);n(Math,"Math",!0)},80676:(e,t,i)=>{"use strict";var n=i(76943),o=i(20200),s=i(94133),r=i(53834),a=i(86282),l=i(81636),c=i(42764),d=i(62924),u=i(32511),h=i(36123),g=i(51637),p=i(34384),f=i(88814),m=i(53450).f,v=i(60863).f,_=i(21012).f,b=i(8565),y=i(33924).trim,w="Number",x=r[w],C=a[w],S=x.prototype,k=r.TypeError,L=l("".slice),E=l("".charCodeAt),N=function(e){var t=p(e,"number");return"bigint"==typeof t?t:D(t)},D=function(e){var t,i,n,o,s,r,a,l,c=p(e,"number");if(g(c))throw k("Cannot convert a Symbol value to a number");if("string"==typeof c&&c.length>2)if(c=y(c),t=E(c,0),43===t||45===t){if(i=E(c,2),88===i||120===i)return NaN}else if(48===t){switch(E(c,1)){case 66:case 98:n=2,o=49;break;case 79:case 111:n=8,o=55;break;default:return+c}for(s=L(c,2),r=s.length,a=0;ao)return NaN;return parseInt(s,n)}return+c},T=c(w,!x(" 0o1")||!x("0b1")||x("+0x1")),A=function(e){return h(S,e)&&f((function(){b(e)}))},I=function(e){var t=arguments.length<1?0:x(N(e));return A(this)?u(Object(t),this,I):t};I.prototype=S,T&&!o&&(S.constructor=I),n({global:!0,constructor:!0,wrap:!0,forced:T},{Number:I});var R=function(e,t){for(var i,n=s?m(t):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),o=0;n.length>o;o++)d(t,i=n[o])&&!d(e,i)&&_(e,i,v(t,i))};o&&C&&R(a[w],C),(T||o)&&R(a[w],x)},14331:(e,t,i)=>{"use strict";var n=i(76943);n({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{MAX_SAFE_INTEGER:9007199254740991})},95330:(e,t,i)=>{"use strict";var n=i(76943),o=i(81636),s=i(46675),r=i(8565),a=i(83360),l=i(88814),c=RangeError,d=String,u=Math.floor,h=o(a),g=o("".slice),p=o(1..toFixed),f=function(e,t,i){return 0===t?i:t%2===1?f(e,t-1,i*e):f(e*e,t/2,i)},m=function(e){var t=0,i=e;while(i>=4096)t+=12,i/=4096;while(i>=2)t+=1,i/=2;return t},v=function(e,t,i){var n=-1,o=i;while(++n<6)o+=t*e[n],e[n]=o%1e7,o=u(o/1e7)},_=function(e,t){var i=6,n=0;while(--i>=0)n+=e[i],e[i]=u(n/t),n=n%t*1e7},b=function(e){var t=6,i="";while(--t>=0)if(""!==i||0===t||0!==e[t]){var n=d(e[t]);i=""===i?n:i+h("0",7-n.length)+n}return i},y=l((function(){return"0.000"!==p(8e-5,3)||"1"!==p(.9,0)||"1.25"!==p(1.255,2)||"1000000000000000128"!==p(0xde0b6b3a7640080,0)}))||!l((function(){p({})}));n({target:"Number",proto:!0,forced:y},{toFixed:function(e){var t,i,n,o,a=r(this),l=s(e),u=[0,0,0,0,0,0],p="",y="0";if(l<0||l>20)throw c("Incorrect fraction digits");if(a!==a)return"NaN";if(a<=-1e21||a>=1e21)return d(a);if(a<0&&(p="-",a=-a),a>1e-21)if(t=m(a*f(2,69,1))-69,i=t<0?a*f(2,-t,1):a/f(2,t,1),i*=4503599627370496,t=52-t,t>0){v(u,0,i),n=l;while(n>=7)v(u,1e7,0),n-=7;v(u,f(10,n,1),0),n=t-1;while(n>=23)_(u,1<<23),n-=23;_(u,1<0?(o=y.length,y=p+(o<=l?"0."+h("0",l-o)+y:g(y,0,o-l)+"."+g(y,o-l))):y=p+y,y}})},58665:(e,t,i)=>{"use strict";var n=i(76943),o=i(9804);n({target:"Object",stat:!0,arity:2,forced:Object.assign!==o},{assign:o})},51602:(e,t,i)=>{"use strict";var n=i(76943),o=i(94133),s=i(5267);n({target:"Object",stat:!0,sham:!o},{create:s})},88118:(e,t,i)=>{"use strict";var n=i(76943),o=i(94133),s=i(26029).f;n({target:"Object",stat:!0,forced:Object.defineProperties!==s,sham:!o},{defineProperties:s})},86752:(e,t,i)=>{"use strict";var n=i(76943),o=i(94133),s=i(21012).f;n({target:"Object",stat:!0,forced:Object.defineProperty!==s,sham:!o},{defineProperty:s})},47348:(e,t,i)=>{"use strict";var n=i(76943),o=i(88814),s=i(37447),r=i(60863).f,a=i(94133),l=!a||o((function(){r(1)}));n({target:"Object",stat:!0,forced:l,sham:!a},{getOwnPropertyDescriptor:function(e,t){return r(s(e),t)}})},64984:(e,t,i)=>{"use strict";var n=i(76943),o=i(94133),s=i(71240),r=i(37447),a=i(60863),l=i(35976);n({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){var t,i,n=r(e),o=a.f,c=s(n),d={},u=0;while(c.length>u)i=o(n,t=c[u++]),void 0!==i&&l(d,t,i);return d}})},72983:(e,t,i)=>{"use strict";var n=i(76943),o=i(4651),s=i(88814),r=i(91996),a=i(38332),l=!o||s((function(){r.f(1)}));n({target:"Object",stat:!0,forced:l},{getOwnPropertySymbols:function(e){var t=r.f;return t?t(a(e)):[]}})},47228:(e,t,i)=>{"use strict";var n=i(76943),o=i(88814),s=i(38332),r=i(27886),a=i(30911),l=o((function(){r(1)}));n({target:"Object",stat:!0,forced:l,sham:!a},{getPrototypeOf:function(e){return r(s(e))}})},34442:(e,t,i)=>{"use strict";var n=i(76943),o=i(38332),s=i(34315),r=i(88814),a=r((function(){s(1)}));n({target:"Object",stat:!0,forced:a},{keys:function(e){return s(o(e))}})},68430:(e,t,i)=>{"use strict";var n=i(94133),o=i(59570),s=i(71419),r=i(38332),a=i(5177),l=Object.getPrototypeOf,c=Object.setPrototypeOf,d=Object.prototype,u="__proto__";if(n&&l&&c&&!(u in d))try{o(d,u,{configurable:!0,get:function(){return l(r(this))},set:function(e){var t=a(this);(s(e)||null===e)&&s(t)&&c(t,e)}})}catch(h){}},93757:(e,t,i)=>{"use strict";var n=i(76943),o=i(16534);n({target:"Object",stat:!0},{setPrototypeOf:o})},65716:(e,t,i)=>{"use strict";var n=i(14130),o=i(54076),s=i(98098);n||o(Object.prototype,"toString",s,{unsafe:!0})},31408:(e,t,i)=>{"use strict";var n=i(76943),o=i(50108).values;n({target:"Object",stat:!0},{values:function(e){return o(e)}})},95149:(e,t,i)=>{"use strict";var n=i(76943),o=i(29733);n({global:!0,forced:parseFloat!==o},{parseFloat:o})},65735:(e,t,i)=>{"use strict";var n=i(76943),o=i(38619);n({global:!0,forced:parseInt!==o},{parseInt:o})},33697:(e,t,i)=>{"use strict";var n=i(76943),o=i(76654),s=i(28762),r=i(29332),a=i(28871),l=i(53034),c=i(78953);n({target:"Promise",stat:!0,forced:c},{allSettled:function(e){var t=this,i=r.f(t),n=i.resolve,c=i.reject,d=a((function(){var i=s(t.resolve),r=[],a=0,c=1;l(e,(function(e){var s=a++,l=!1;c++,o(i,t,e).then((function(e){l||(l=!0,r[s]={status:"fulfilled",value:e},--c||n(r))}),(function(e){l||(l=!0,r[s]={status:"rejected",reason:e},--c||n(r))}))})),--c||n(r)}));return d.error&&c(d.value),i.promise}})},1871:(e,t,i)=>{"use strict";var n=i(76943),o=i(76654),s=i(28762),r=i(29332),a=i(28871),l=i(53034),c=i(78953);n({target:"Promise",stat:!0,forced:c},{all:function(e){var t=this,i=r.f(t),n=i.resolve,c=i.reject,d=a((function(){var i=s(t.resolve),r=[],a=0,d=1;l(e,(function(e){var s=a++,l=!1;d++,o(i,t,e).then((function(e){l||(l=!0,r[s]=e,--d||n(r))}),c)})),--d||n(r)}));return d.error&&c(d.value),i.promise}})},67854:(e,t,i)=>{"use strict";var n=i(76943),o=i(20200),s=i(76202).CONSTRUCTOR,r=i(81425),a=i(97859),l=i(66107),c=i(54076),d=r&&r.prototype;if(n({target:"Promise",proto:!0,forced:s,real:!0},{catch:function(e){return this.then(void 0,e)}}),!o&&l(r)){var u=a("Promise").prototype["catch"];d["catch"]!==u&&c(d,"catch",u,{unsafe:!0})}},52267:(e,t,i)=>{"use strict";var n,o,s,r,a=i(76943),l=i(20200),c=i(62889),d=i(53834),u=i(76654),h=i(54076),g=i(16534),p=i(52365),f=i(7104),m=i(28762),v=i(66107),_=i(71419),b=i(28406),y=i(90517),w=i(3865).set,x=i(44995),C=i(43709),S=i(28871),k=i(53630),L=i(80780),E=i(81425),N=i(76202),D=i(29332),T="Promise",A=N.CONSTRUCTOR,I=N.REJECTION_EVENT,R=N.SUBCLASSING,M=L.getterFor(T),P=L.set,O=E&&E.prototype,F=E,B=O,H=d.TypeError,W=d.document,V=d.process,z=D.f,U=z,q=!!(W&&W.createEvent&&d.dispatchEvent),$="unhandledrejection",j="rejectionhandled",K=0,G=1,Y=2,X=1,Z=2,Q=function(e){var t;return!(!_(e)||!v(t=e.then))&&t},J=function(e,t){var i,n,o,s=t.value,r=t.state===G,a=r?e.ok:e.fail,l=e.resolve,c=e.reject,d=e.domain;try{a?(r||(t.rejection===Z&&oe(t),t.rejection=X),!0===a?i=s:(d&&d.enter(),i=a(s),d&&(d.exit(),o=!0)),i===e.promise?c(H("Promise-chain cycle")):(n=Q(i))?u(n,i,l,c):l(i)):c(s)}catch(h){d&&!o&&d.exit(),c(h)}},ee=function(e,t){e.notified||(e.notified=!0,x((function(){var i,n=e.reactions;while(i=n.get())J(i,e);e.notified=!1,t&&!e.rejection&&ie(e)})))},te=function(e,t,i){var n,o;q?(n=W.createEvent("Event"),n.promise=t,n.reason=i,n.initEvent(e,!1,!0),d.dispatchEvent(n)):n={promise:t,reason:i},!I&&(o=d["on"+e])?o(n):e===$&&C("Unhandled promise rejection",i)},ie=function(e){u(w,d,(function(){var t,i=e.facade,n=e.value,o=ne(e);if(o&&(t=S((function(){c?V.emit("unhandledRejection",n,i):te($,i,n)})),e.rejection=c||ne(e)?Z:X,t.error))throw t.value}))},ne=function(e){return e.rejection!==X&&!e.parent},oe=function(e){u(w,d,(function(){var t=e.facade;c?V.emit("rejectionHandled",t):te(j,t,e.value)}))},se=function(e,t,i){return function(n){e(t,n,i)}},re=function(e,t,i){e.done||(e.done=!0,i&&(e=i),e.value=t,e.state=Y,ee(e,!0))},ae=function(e,t,i){if(!e.done){e.done=!0,i&&(e=i);try{if(e.facade===t)throw H("Promise can't be resolved itself");var n=Q(t);n?x((function(){var i={done:!1};try{u(n,t,se(ae,i,e),se(re,i,e))}catch(o){re(i,o,e)}})):(e.value=t,e.state=G,ee(e,!1))}catch(o){re({done:!1},o,e)}}};if(A&&(F=function(e){b(this,B),m(e),u(n,this);var t=M(this);try{e(se(ae,t),se(re,t))}catch(i){re(t,i)}},B=F.prototype,n=function(e){P(this,{type:T,done:!1,notified:!1,parent:!1,reactions:new k,rejection:!1,state:K,value:void 0})},n.prototype=h(B,"then",(function(e,t){var i=M(this),n=z(y(this,F));return i.parent=!0,n.ok=!v(e)||e,n.fail=v(t)&&t,n.domain=c?V.domain:void 0,i.state===K?i.reactions.add(n):x((function(){J(n,i)})),n.promise})),o=function(){var e=new n,t=M(e);this.promise=e,this.resolve=se(ae,t),this.reject=se(re,t)},D.f=z=function(e){return e===F||e===s?new o(e):U(e)},!l&&v(E)&&O!==Object.prototype)){r=O.then,R||h(O,"then",(function(e,t){var i=this;return new F((function(e,t){u(r,i,e,t)})).then(e,t)}),{unsafe:!0});try{delete O.constructor}catch(le){}g&&g(O,B)}a({global:!0,constructor:!0,wrap:!0,forced:A},{Promise:F}),p(F,T,!1,!0),f(T)},59437:(e,t,i)=>{"use strict";i(52267),i(1871),i(67854),i(6150),i(32286),i(62064)},6150:(e,t,i)=>{"use strict";var n=i(76943),o=i(76654),s=i(28762),r=i(29332),a=i(28871),l=i(53034),c=i(78953);n({target:"Promise",stat:!0,forced:c},{race:function(e){var t=this,i=r.f(t),n=i.reject,c=a((function(){var r=s(t.resolve);l(e,(function(e){o(r,t,e).then(i.resolve,n)}))}));return c.error&&n(c.value),i.promise}})},32286:(e,t,i)=>{"use strict";var n=i(76943),o=i(76654),s=i(29332),r=i(76202).CONSTRUCTOR;n({target:"Promise",stat:!0,forced:r},{reject:function(e){var t=s.f(this);return o(t.reject,void 0,e),t.promise}})},62064:(e,t,i)=>{"use strict";var n=i(76943),o=i(97859),s=i(20200),r=i(81425),a=i(76202).CONSTRUCTOR,l=i(42546),c=o("Promise"),d=s&&!a;n({target:"Promise",stat:!0,forced:s||a},{resolve:function(e){return l(d&&this===c?r:this,e)}})},33605:(e,t,i)=>{"use strict";var n=i(94133),o=i(53834),s=i(81636),r=i(42764),a=i(32511),l=i(64722),c=i(53450).f,d=i(36123),u=i(83575),h=i(96975),g=i(57515),p=i(9165),f=i(34569),m=i(54076),v=i(88814),_=i(62924),b=i(80780).enforce,y=i(7104),w=i(14103),x=i(93425),C=i(70010),S=w("match"),k=o.RegExp,L=k.prototype,E=o.SyntaxError,N=s(L.exec),D=s("".charAt),T=s("".replace),A=s("".indexOf),I=s("".slice),R=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,M=/a/g,P=/a/g,O=new k(M)!==M,F=p.MISSED_STICKY,B=p.UNSUPPORTED_Y,H=n&&(!O||F||x||C||v((function(){return P[S]=!1,k(M)!==M||k(P)===P||"/a/i"!==String(k(M,"i"))}))),W=function(e){for(var t,i=e.length,n=0,o="",s=!1;n<=i;n++)t=D(e,n),"\\"!==t?s||"."!==t?("["===t?s=!0:"]"===t&&(s=!1),o+=t):o+="[\\s\\S]":o+=t+D(e,++n);return o},V=function(e){for(var t,i=e.length,n=0,o="",s=[],r={},a=!1,l=!1,c=0,d="";n<=i;n++){if(t=D(e,n),"\\"===t)t+=D(e,++n);else if("]"===t)a=!1;else if(!a)switch(!0){case"["===t:a=!0;break;case"("===t:N(R,I(e,n+1))&&(n+=2,l=!0),o+=t,c++;continue;case">"===t&&l:if(""===d||_(r,d))throw new E("Invalid capture group name");r[d]=!0,s[s.length]=[d,c],l=!1,d="";continue}l?d+=t:o+=t}return[o,s]};if(r("RegExp",H)){for(var z=function(e,t){var i,n,o,s,r,c,p=d(L,this),f=u(e),m=void 0===t,v=[],_=e;if(!p&&f&&m&&e.constructor===z)return e;if((f||d(L,e))&&(e=e.source,m&&(t=g(_))),e=void 0===e?"":h(e),t=void 0===t?"":h(t),_=e,x&&"dotAll"in M&&(n=!!t&&A(t,"s")>-1,n&&(t=T(t,/s/g,""))),i=t,F&&"sticky"in M&&(o=!!t&&A(t,"y")>-1,o&&B&&(t=T(t,/y/g,""))),C&&(s=V(e),e=s[0],v=s[1]),r=a(k(e,t),p?this:L,z),(n||o||v.length)&&(c=b(r),n&&(c.dotAll=!0,c.raw=z(W(e),i)),o&&(c.sticky=!0),v.length&&(c.groups=v)),e!==_)try{l(r,"source",""===_?"(?:)":_)}catch(y){}return r},U=c(k),q=0;U.length>q;)f(z,k,U[q++]);L.constructor=z,z.prototype=L,m(o,"RegExp",z,{constructor:!0})}y("RegExp")},36519:(e,t,i)=>{"use strict";var n=i(94133),o=i(93425),s=i(16749),r=i(59570),a=i(80780).get,l=RegExp.prototype,c=TypeError;n&&o&&r(l,"dotAll",{configurable:!0,get:function(){if(this!==l){if("RegExp"===s(this))return!!a(this).dotAll;throw c("Incompatible receiver, RegExp required")}}})},11476:(e,t,i)=>{"use strict";var n=i(76943),o=i(40738);n({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},83122:(e,t,i)=>{"use strict";var n=i(53834),o=i(94133),s=i(59570),r=i(69592),a=i(88814),l=n.RegExp,c=l.prototype,d=o&&a((function(){var e=!0;try{l(".","d")}catch(d){e=!1}var t={},i="",n=e?"dgimsy":"gimsy",o=function(e,n){Object.defineProperty(t,e,{get:function(){return i+=n,!0}})},s={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var r in e&&(s.hasIndices="d"),s)o(r,s[r]);var a=Object.getOwnPropertyDescriptor(c,"flags").get.call(t);return a!==n||i!==n}));d&&s(c,"flags",{configurable:!0,get:r})},56394:(e,t,i)=>{"use strict";var n=i(94133),o=i(9165).MISSED_STICKY,s=i(16749),r=i(59570),a=i(80780).get,l=RegExp.prototype,c=TypeError;n&&o&&r(l,"sticky",{configurable:!0,get:function(){if(this!==l){if("RegExp"===s(this))return!!a(this).sticky;throw c("Incompatible receiver, RegExp required")}}})},32119:(e,t,i)=>{"use strict";i(11476);var n=i(76943),o=i(76654),s=i(66107),r=i(30616),a=i(96975),l=function(){var e=!1,t=/[ac]/;return t.exec=function(){return e=!0,/./.exec.apply(this,arguments)},!0===t.test("abc")&&e}(),c=/./.test;n({target:"RegExp",proto:!0,forced:!l},{test:function(e){var t=r(this),i=a(e),n=t.exec;if(!s(n))return o(c,t,i);var l=o(n,t,i);return null!==l&&(r(l),!0)}})},22725:(e,t,i)=>{"use strict";var n=i(49104).PROPER,o=i(54076),s=i(30616),r=i(96975),a=i(88814),l=i(57515),c="toString",d=RegExp.prototype,u=d[c],h=a((function(){return"/a/b"!==u.call({source:"a",flags:"b"})})),g=n&&u.name!==c;(h||g)&&o(RegExp.prototype,c,(function(){var e=s(this),t=r(e.source),i=r(l(e));return"/"+t+"/"+i}),{unsafe:!0})},37925:(e,t,i)=>{"use strict";var n=i(99072),o=i(29694);n("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),o)},43682:(e,t,i)=>{"use strict";i(37925)},2514:(e,t,i)=>{"use strict";var n=i(76943),o=i(94964),s=i(26210);n({target:"String",proto:!0,forced:s("anchor")},{anchor:function(e){return o(this,"a","name",e)}})},17513:(e,t,i)=>{"use strict";var n=i(76943),o=i(59287),s=i(60863).f,r=i(27302),a=i(96975),l=i(42851),c=i(5177),d=i(48365),u=i(20200),h=o("".endsWith),g=o("".slice),p=Math.min,f=d("endsWith"),m=!u&&!f&&!!function(){var e=s(String.prototype,"endsWith");return e&&!e.writable}();n({target:"String",proto:!0,forced:!m&&!f},{endsWith:function(e){var t=a(c(this));l(e);var i=arguments.length>1?arguments[1]:void 0,n=t.length,o=void 0===i?n:p(r(i),n),s=a(e);return h?h(t,s,o):g(t,o-s.length,o)===s}})},3452:(e,t,i)=>{"use strict";var n=i(76943),o=i(81636),s=i(42851),r=i(5177),a=i(96975),l=i(48365),c=o("".indexOf);n({target:"String",proto:!0,forced:!l("includes")},{includes:function(e){return!!~c(a(r(this)),a(s(e)),arguments.length>1?arguments[1]:void 0)}})},77280:(e,t,i)=>{"use strict";var n=i(46823).charAt,o=i(96975),s=i(80780),r=i(74987),a=i(49490),l="String Iterator",c=s.set,d=s.getterFor(l);r(String,"String",(function(e){c(this,{type:l,string:o(e),index:0})}),(function(){var e,t=d(this),i=t.string,o=t.index;return o>=i.length?a(void 0,!0):(e=n(i,o),t.index+=e.length,a(e,!1))}))},27453:(e,t,i)=>{"use strict";var n=i(76943),o=i(94964),s=i(26210);n({target:"String",proto:!0,forced:s("link")},{link:function(e){return o(this,"a","href",e)}})},24972:(e,t,i)=>{"use strict";var n=i(76654),o=i(93218),s=i(30616),r=i(13873),a=i(27302),l=i(96975),c=i(5177),d=i(37689),u=i(53366),h=i(23808);o("match",(function(e,t,i){return[function(t){var i=c(this),o=r(t)?void 0:d(t,e);return o?n(o,t,i):new RegExp(t)[e](l(i))},function(e){var n=s(this),o=l(e),r=i(t,n,o);if(r.done)return r.value;if(!n.global)return h(n,o);var c=n.unicode;n.lastIndex=0;var d,g=[],p=0;while(null!==(d=h(n,o))){var f=l(d[0]);g[p]=f,""===f&&(n.lastIndex=u(o,a(n.lastIndex),c)),p++}return 0===p?null:g}]}))},18964:(e,t,i)=>{"use strict";var n=i(56112),o=i(76654),s=i(81636),r=i(93218),a=i(88814),l=i(30616),c=i(66107),d=i(13873),u=i(46675),h=i(27302),g=i(96975),p=i(5177),f=i(53366),m=i(37689),v=i(43075),_=i(23808),b=i(14103),y=b("replace"),w=Math.max,x=Math.min,C=s([].concat),S=s([].push),k=s("".indexOf),L=s("".slice),E=function(e){return void 0===e?e:String(e)},N=function(){return"$0"==="a".replace(/./,"$0")}(),D=function(){return!!/./[y]&&""===/./[y]("a","$0")}(),T=!a((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")}));r("replace",(function(e,t,i){var s=D?"$":"$0";return[function(e,i){var n=p(this),s=d(e)?void 0:m(e,y);return s?o(s,e,n,i):o(t,g(n),e,i)},function(e,o){var r=l(this),a=g(e);if("string"==typeof o&&-1===k(o,s)&&-1===k(o,"$<")){var d=i(t,r,a,o);if(d.done)return d.value}var p=c(o);p||(o=g(o));var m,b=r.global;b&&(m=r.unicode,r.lastIndex=0);var y,N=[];while(1){if(y=_(r,a),null===y)break;if(S(N,y),!b)break;var D=g(y[0]);""===D&&(r.lastIndex=f(a,h(r.lastIndex),m))}for(var T="",A=0,I=0;I=A&&(T+=L(a,A,P)+R,A=P+M.length)}return T+L(a,A)}]}),!T||!N||D)},68280:(e,t,i)=>{"use strict";var n=i(56112),o=i(76654),s=i(81636),r=i(93218),a=i(30616),l=i(13873),c=i(83575),d=i(5177),u=i(90517),h=i(53366),g=i(27302),p=i(96975),f=i(37689),m=i(46378),v=i(23808),_=i(40738),b=i(9165),y=i(88814),w=b.UNSUPPORTED_Y,x=4294967295,C=Math.min,S=[].push,k=s(/./.exec),L=s(S),E=s("".slice),N=!y((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var i="ab".split(e);return 2!==i.length||"a"!==i[0]||"b"!==i[1]}));r("split",(function(e,t,i){var s;return s="c"==="abbc".split(/(b)*/)[1]||4!=="test".split(/(?:)/,-1).length||2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,i){var s=p(d(this)),r=void 0===i?x:i>>>0;if(0===r)return[];if(void 0===e)return[s];if(!c(e))return o(t,s,e,r);var a,l,u,h=[],g=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),f=0,v=new RegExp(e.source,g+"g");while(a=o(_,v,s)){if(l=v.lastIndex,l>f&&(L(h,E(s,f,a.index)),a.length>1&&a.index=r))break;v.lastIndex===a.index&&v.lastIndex++}return f===s.length?!u&&k(v,"")||L(h,""):L(h,E(s,f)),h.length>r?m(h,0,r):h}:"0".split(void 0,0).length?function(e,i){return void 0===e&&0===i?[]:o(t,this,e,i)}:t,[function(t,i){var n=d(this),r=l(t)?void 0:f(t,e);return r?o(r,t,n,i):o(s,p(n),t,i)},function(e,n){var o=a(this),r=p(e),l=i(s,o,r,n,s!==t);if(l.done)return l.value;var c=u(o,RegExp),d=o.unicode,f=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(w?"g":"y"),m=new c(w?"^(?:"+o.source+")":o,f),_=void 0===n?x:n>>>0;if(0===_)return[];if(0===r.length)return null===v(m,r)?[r]:[];var b=0,y=0,S=[];while(y{"use strict";var n=i(76943),o=i(59287),s=i(60863).f,r=i(27302),a=i(96975),l=i(42851),c=i(5177),d=i(48365),u=i(20200),h=o("".startsWith),g=o("".slice),p=Math.min,f=d("startsWith"),m=!u&&!f&&!!function(){var e=s(String.prototype,"startsWith");return e&&!e.writable}();n({target:"String",proto:!0,forced:!m&&!f},{startsWith:function(e){var t=a(c(this));l(e);var i=r(p(arguments.length>1?arguments[1]:void 0,t.length)),n=a(e);return h?h(t,n,i):g(t,i,i+n.length)===n}})},48015:(e,t,i)=>{"use strict";var n=i(76943),o=i(33924).trim,s=i(84820);n({target:"String",proto:!0,forced:s("trim")},{trim:function(){return o(this)}})},92461:(e,t,i)=>{"use strict";var n=i(78755);n("asyncIterator")},32946:(e,t,i)=>{"use strict";var n=i(76943),o=i(53834),s=i(76654),r=i(81636),a=i(20200),l=i(94133),c=i(4651),d=i(88814),u=i(62924),h=i(36123),g=i(30616),p=i(37447),f=i(61017),m=i(96975),v=i(53386),_=i(5267),b=i(34315),y=i(53450),w=i(18788),x=i(91996),C=i(60863),S=i(21012),k=i(26029),L=i(58068),E=i(54076),N=i(59570),D=i(48850),T=i(35315),A=i(71999),I=i(93965),R=i(14103),M=i(24615),P=i(78755),O=i(58359),F=i(52365),B=i(80780),H=i(79226).forEach,W=T("hidden"),V="Symbol",z="prototype",U=B.set,q=B.getterFor(V),$=Object[z],j=o.Symbol,K=j&&j[z],G=o.TypeError,Y=o.QObject,X=C.f,Z=S.f,Q=w.f,J=L.f,ee=r([].push),te=D("symbols"),ie=D("op-symbols"),ne=D("wks"),oe=!Y||!Y[z]||!Y[z].findChild,se=l&&d((function(){return 7!==_(Z({},"a",{get:function(){return Z(this,"a",{value:7}).a}})).a}))?function(e,t,i){var n=X($,t);n&&delete $[t],Z(e,t,i),n&&e!==$&&Z($,t,n)}:Z,re=function(e,t){var i=te[e]=_(K);return U(i,{type:V,tag:e,description:t}),l||(i.description=t),i},ae=function(e,t,i){e===$&&ae(ie,t,i),g(e);var n=f(t);return g(i),u(te,n)?(i.enumerable?(u(e,W)&&e[W][n]&&(e[W][n]=!1),i=_(i,{enumerable:v(0,!1)})):(u(e,W)||Z(e,W,v(1,{})),e[W][n]=!0),se(e,n,i)):Z(e,n,i)},le=function(e,t){g(e);var i=p(t),n=b(i).concat(ge(i));return H(n,(function(t){l&&!s(de,i,t)||ae(e,t,i[t])})),e},ce=function(e,t){return void 0===t?_(e):le(_(e),t)},de=function(e){var t=f(e),i=s(J,this,t);return!(this===$&&u(te,t)&&!u(ie,t))&&(!(i||!u(this,t)||!u(te,t)||u(this,W)&&this[W][t])||i)},ue=function(e,t){var i=p(e),n=f(t);if(i!==$||!u(te,n)||u(ie,n)){var o=X(i,n);return!o||!u(te,n)||u(i,W)&&i[W][n]||(o.enumerable=!0),o}},he=function(e){var t=Q(p(e)),i=[];return H(t,(function(e){u(te,e)||u(A,e)||ee(i,e)})),i},ge=function(e){var t=e===$,i=Q(t?ie:p(e)),n=[];return H(i,(function(e){!u(te,e)||t&&!u($,e)||ee(n,te[e])})),n};c||(j=function(){if(h(K,this))throw G("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?m(arguments[0]):void 0,t=I(e),i=function(e){this===$&&s(i,ie,e),u(this,W)&&u(this[W],t)&&(this[W][t]=!1),se(this,t,v(1,e))};return l&&oe&&se($,t,{configurable:!0,set:i}),re(t,e)},K=j[z],E(K,"toString",(function(){return q(this).tag})),E(j,"withoutSetter",(function(e){return re(I(e),e)})),L.f=de,S.f=ae,k.f=le,C.f=ue,y.f=w.f=he,x.f=ge,M.f=function(e){return re(R(e),e)},l&&(N(K,"description",{configurable:!0,get:function(){return q(this).description}}),a||E($,"propertyIsEnumerable",de,{unsafe:!0}))),n({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:j}),H(b(ne),(function(e){P(e)})),n({target:V,stat:!0,forced:!c},{useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),n({target:"Object",stat:!0,forced:!c,sham:!l},{create:ce,defineProperty:ae,defineProperties:le,getOwnPropertyDescriptor:ue}),n({target:"Object",stat:!0,forced:!c},{getOwnPropertyNames:he}),O(),F(j,V),A[W]=!0},89933:(e,t,i)=>{"use strict";var n=i(76943),o=i(94133),s=i(53834),r=i(81636),a=i(62924),l=i(66107),c=i(36123),d=i(96975),u=i(59570),h=i(37366),g=s.Symbol,p=g&&g.prototype;if(o&&l(g)&&(!("description"in p)||void 0!==g().description)){var f={},m=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:d(arguments[0]),t=c(p,this)?new g(e):void 0===e?g():g(e);return""===e&&(f[t]=!0),t};h(m,g),m.prototype=p,p.constructor=m;var v="Symbol(description detection)"===String(g("description detection")),_=r(p.valueOf),b=r(p.toString),y=/^Symbol\((.*)\)[^)]+$/,w=r("".replace),x=r("".slice);u(p,"description",{configurable:!0,get:function(){var e=_(this);if(a(f,e))return"";var t=b(e),i=v?x(t,7,-1):w(t,y,"$1");return""===i?void 0:i}}),n({global:!0,constructor:!0,forced:!0},{Symbol:m})}},11746:(e,t,i)=>{"use strict";var n=i(76943),o=i(97859),s=i(62924),r=i(96975),a=i(48850),l=i(13151),c=a("string-to-symbol-registry"),d=a("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!l},{for:function(e){var t=r(e);if(s(c,t))return c[t];var i=o("Symbol")(t);return c[t]=i,d[i]=t,i}})},55233:(e,t,i)=>{"use strict";var n=i(78755);n("iterator")},83296:(e,t,i)=>{"use strict";i(32946),i(11746),i(41956),i(25328),i(72983)},41956:(e,t,i)=>{"use strict";var n=i(76943),o=i(62924),s=i(51637),r=i(57545),a=i(48850),l=i(13151),c=a("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!l},{keyFor:function(e){if(!s(e))throw TypeError(r(e)+" is not a symbol");if(o(c,e))return c[e]}})},32997:(e,t,i)=>{"use strict";var n=i(78755),o=i(58359);n("toPrimitive"),o()},72996:(e,t,i)=>{"use strict";var n=i(97859),o=i(78755),s=i(52365);o("toStringTag"),s(n("Symbol"),"Symbol")},25231:(e,t,i)=>{"use strict";var n=i(68086),o=i(8600),s=i(46675),r=n.aTypedArray,a=n.exportTypedArrayMethod;a("at",(function(e){var t=r(this),i=o(t),n=s(e),a=n>=0?n:i+n;return a<0||a>=i?void 0:t[a]}))},31192:(e,t,i)=>{"use strict";var n=i(81636),o=i(68086),s=i(80404),r=n(s),a=o.aTypedArray,l=o.exportTypedArrayMethod;l("copyWithin",(function(e,t){return r(a(this),e,t,arguments.length>2?arguments[2]:void 0)}))},83827:(e,t,i)=>{"use strict";var n=i(68086),o=i(79226).every,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("every",(function(e){return o(s(this),e,arguments.length>1?arguments[1]:void 0)}))},47725:(e,t,i)=>{"use strict";var n=i(68086),o=i(15408),s=i(57385),r=i(34239),a=i(76654),l=i(81636),c=i(88814),d=n.aTypedArray,u=n.exportTypedArrayMethod,h=l("".slice),g=c((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}));u("fill",(function(e){var t=arguments.length;d(this);var i="Big"===h(r(this),0,3)?s(e):+e;return a(o,this,i,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),g)},85395:(e,t,i)=>{"use strict";var n=i(68086),o=i(79226).filter,s=i(76352),r=n.aTypedArray,a=n.exportTypedArrayMethod;a("filter",(function(e){var t=o(r(this),e,arguments.length>1?arguments[1]:void 0);return s(this,t)}))},98234:(e,t,i)=>{"use strict";var n=i(68086),o=i(79226).findIndex,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("findIndex",(function(e){return o(s(this),e,arguments.length>1?arguments[1]:void 0)}))},90548:(e,t,i)=>{"use strict";var n=i(68086),o=i(49275).findLastIndex,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("findLastIndex",(function(e){return o(s(this),e,arguments.length>1?arguments[1]:void 0)}))},3075:(e,t,i)=>{"use strict";var n=i(68086),o=i(49275).findLast,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("findLast",(function(e){return o(s(this),e,arguments.length>1?arguments[1]:void 0)}))},8968:(e,t,i)=>{"use strict";var n=i(68086),o=i(79226).find,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("find",(function(e){return o(s(this),e,arguments.length>1?arguments[1]:void 0)}))},61343:(e,t,i)=>{"use strict";var n=i(68086),o=i(79226).forEach,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("forEach",(function(e){o(s(this),e,arguments.length>1?arguments[1]:void 0)}))},76094:(e,t,i)=>{"use strict";var n=i(68086),o=i(67714).includes,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("includes",(function(e){return o(s(this),e,arguments.length>1?arguments[1]:void 0)}))},26638:(e,t,i)=>{"use strict";var n=i(68086),o=i(67714).indexOf,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("indexOf",(function(e){return o(s(this),e,arguments.length>1?arguments[1]:void 0)}))},73049:(e,t,i)=>{"use strict";var n=i(53834),o=i(88814),s=i(81636),r=i(68086),a=i(98998),l=i(14103),c=l("iterator"),d=n.Uint8Array,u=s(a.values),h=s(a.keys),g=s(a.entries),p=r.aTypedArray,f=r.exportTypedArrayMethod,m=d&&d.prototype,v=!o((function(){m[c].call([1])})),_=!!m&&m.values&&m[c]===m.values&&"values"===m.values.name,b=function(){return u(p(this))};f("entries",(function(){return g(p(this))}),v),f("keys",(function(){return h(p(this))}),v),f("values",b,v||!_,{name:"values"}),f(c,b,v||!_,{name:"values"})},6364:(e,t,i)=>{"use strict";var n=i(68086),o=i(81636),s=n.aTypedArray,r=n.exportTypedArrayMethod,a=o([].join);r("join",(function(e){return a(s(this),e)}))},20276:(e,t,i)=>{"use strict";var n=i(68086),o=i(56112),s=i(15744),r=n.aTypedArray,a=n.exportTypedArrayMethod;a("lastIndexOf",(function(e){var t=arguments.length;return o(s,r(this),t>1?[e,arguments[1]]:[e])}))},19077:(e,t,i)=>{"use strict";var n=i(68086),o=i(79226).map,s=i(38148),r=n.aTypedArray,a=n.exportTypedArrayMethod;a("map",(function(e){return o(r(this),e,arguments.length>1?arguments[1]:void 0,(function(e,t){return new(s(e))(t)}))}))},25764:(e,t,i)=>{"use strict";var n=i(68086),o=i(76506).right,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("reduceRight",(function(e){var t=arguments.length;return o(s(this),e,t,t>1?arguments[1]:void 0)}))},6894:(e,t,i)=>{"use strict";var n=i(68086),o=i(76506).left,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("reduce",(function(e){var t=arguments.length;return o(s(this),e,t,t>1?arguments[1]:void 0)}))},9141:(e,t,i)=>{"use strict";var n=i(68086),o=n.aTypedArray,s=n.exportTypedArrayMethod,r=Math.floor;s("reverse",(function(){var e,t=this,i=o(t).length,n=r(i/2),s=0;while(s{"use strict";var n=i(53834),o=i(76654),s=i(68086),r=i(8600),a=i(84084),l=i(38332),c=i(88814),d=n.RangeError,u=n.Int8Array,h=u&&u.prototype,g=h&&h.set,p=s.aTypedArray,f=s.exportTypedArrayMethod,m=!c((function(){var e=new Uint8ClampedArray(2);return o(g,e,{length:1,0:3},1),3!==e[1]})),v=m&&s.NATIVE_ARRAY_BUFFER_VIEWS&&c((function(){var e=new u(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));f("set",(function(e){p(this);var t=a(arguments.length>1?arguments[1]:void 0,1),i=l(e);if(m)return o(g,this,i,t);var n=this.length,s=r(i),c=0;if(s+t>n)throw d("Wrong length");while(c{"use strict";var n=i(68086),o=i(38148),s=i(88814),r=i(76437),a=n.aTypedArray,l=n.exportTypedArrayMethod,c=s((function(){new Int8Array(1).slice()}));l("slice",(function(e,t){var i=r(a(this),e,t),n=o(this),s=0,l=i.length,c=new n(l);while(l>s)c[s]=i[s++];return c}),c)},59699:(e,t,i)=>{"use strict";var n=i(68086),o=i(79226).some,s=n.aTypedArray,r=n.exportTypedArrayMethod;r("some",(function(e){return o(s(this),e,arguments.length>1?arguments[1]:void 0)}))},56408:(e,t,i)=>{"use strict";var n=i(53834),o=i(59287),s=i(88814),r=i(28762),a=i(17085),l=i(68086),c=i(80259),d=i(31280),u=i(71418),h=i(57433),g=l.aTypedArray,p=l.exportTypedArrayMethod,f=n.Uint16Array,m=f&&o(f.prototype.sort),v=!!m&&!(s((function(){m(new f(2),null)}))&&s((function(){m(new f(2),{})}))),_=!!m&&!s((function(){if(u)return u<74;if(c)return c<67;if(d)return!0;if(h)return h<602;var e,t,i=new f(516),n=Array(516);for(e=0;e<516;e++)t=e%4,i[e]=515-e,n[e]=e-2*t+3;for(m(i,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(i[e]!==n[e])return!0})),b=function(e){return function(t,i){return void 0!==e?+e(t,i)||0:i!==i?-1:t!==t?1:0===t&&0===i?1/t>0&&1/i<0?1:-1:t>i}};p("sort",(function(e){return void 0!==e&&r(e),_?m(this,e):a(g(this),b(e))}),!_||v)},32045:(e,t,i)=>{"use strict";var n=i(68086),o=i(27302),s=i(32661),r=i(38148),a=n.aTypedArray,l=n.exportTypedArrayMethod;l("subarray",(function(e,t){var i=a(this),n=i.length,l=s(e,n),c=r(i);return new c(i.buffer,i.byteOffset+l*i.BYTES_PER_ELEMENT,o((void 0===t?n:s(t,n))-l))}))},7025:(e,t,i)=>{"use strict";var n=i(53834),o=i(56112),s=i(68086),r=i(88814),a=i(76437),l=n.Int8Array,c=s.aTypedArray,d=s.exportTypedArrayMethod,u=[].toLocaleString,h=!!l&&r((function(){u.call(new l(1))})),g=r((function(){return[1,2].toLocaleString()!==new l([1,2]).toLocaleString()}))||!r((function(){l.prototype.toLocaleString.call([1,2])}));d("toLocaleString",(function(){return o(u,h?a(c(this)):c(this),a(arguments))}),g)},62279:(e,t,i)=>{"use strict";var n=i(37579),o=i(68086),s=o.aTypedArray,r=o.exportTypedArrayMethod,a=o.getTypedArrayConstructor;r("toReversed",(function(){return n(s(this),a(this))}))},2157:(e,t,i)=>{"use strict";var n=i(68086),o=i(81636),s=i(28762),r=i(73364),a=n.aTypedArray,l=n.getTypedArrayConstructor,c=n.exportTypedArrayMethod,d=o(n.TypedArrayPrototype.sort);c("toSorted",(function(e){void 0!==e&&s(e);var t=a(this),i=r(l(t),t);return d(i,e)}))},53536:(e,t,i)=>{"use strict";var n=i(68086).exportTypedArrayMethod,o=i(88814),s=i(53834),r=i(81636),a=s.Uint8Array,l=a&&a.prototype||{},c=[].toString,d=r([].join);o((function(){c.call({})}))&&(c=function(){return d(this)});var u=l.toString!==c;n("toString",c,u)},48170:(e,t,i)=>{"use strict";var n=i(68532);n("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}}))},46735:(e,t,i)=>{"use strict";var n=i(25330),o=i(68086),s=i(20354),r=i(46675),a=i(57385),l=o.aTypedArray,c=o.getTypedArrayConstructor,d=o.exportTypedArrayMethod,u=!!function(){try{new Int8Array(1)["with"](2,{valueOf:function(){throw 8}})}catch(e){return 8===e}}();d("with",{with:function(e,t){var i=l(this),o=r(e),d=s(i)?a(t):+t;return n(i,c(i),o,d)}}["with"],!u)},61732:(e,t,i)=>{"use strict";var n=i(53834),o=i(75243),s=i(84130),r=i(7028),a=i(64722),l=function(e){if(e&&e.forEach!==r)try{a(e,"forEach",r)}catch(t){e.forEach=r}};for(var c in o)o[c]&&l(n[c]&&n[c].prototype);l(s)},40702:(e,t,i)=>{"use strict";var n=i(53834),o=i(75243),s=i(84130),r=i(98998),a=i(64722),l=i(14103),c=l("iterator"),d=l("toStringTag"),u=r.values,h=function(e,t){if(e){if(e[c]!==u)try{a(e,c,u)}catch(n){e[c]=u}if(e[d]||a(e,d,t),o[t])for(var i in r)if(e[i]!==r[i])try{a(e,i,r[i])}catch(n){e[i]=r[i]}}};for(var g in o)h(n[g]&&n[g].prototype,g);h(s,"DOMTokenList")},82364:(e,t,i)=>{"use strict";var n=i(76943),o=i(53834),s=i(59570),r=i(94133),a=TypeError,l=Object.defineProperty,c=o.self!==o;try{if(r){var d=Object.getOwnPropertyDescriptor(o,"self");!c&&d&&d.get&&d.enumerable||s(o,"self",{get:function(){return o},set:function(e){if(this!==o)throw a("Illegal invocation");l(o,"self",{value:e,writable:!0,configurable:!0,enumerable:!0})},configurable:!0,enumerable:!0})}else n({global:!0,simple:!0,forced:c},{self:o})}catch(u){}},38076:(e,t,i)=>{"use strict";var n=i(76943),o=i(53834),s=i(7932),r=s(o.setInterval,!0);n({global:!0,bind:!0,forced:o.setInterval!==r},{setInterval:r})},22073:(e,t,i)=>{"use strict";var n=i(76943),o=i(53834),s=i(7932),r=s(o.setTimeout,!0);n({global:!0,bind:!0,forced:o.setTimeout!==r},{setTimeout:r})},93954:(e,t,i)=>{"use strict";i(38076),i(22073)},38623:(e,t,i)=>{"use strict";i(98998);var n=i(76943),o=i(53834),s=i(76654),r=i(81636),a=i(94133),l=i(40036),c=i(54076),d=i(59570),u=i(52714),h=i(52365),g=i(2950),p=i(80780),f=i(28406),m=i(66107),v=i(62924),_=i(16158),b=i(34239),y=i(30616),w=i(71419),x=i(96975),C=i(5267),S=i(53386),k=i(54021),L=i(33395),E=i(5809),N=i(14103),D=i(17085),T=N("iterator"),A="URLSearchParams",I=A+"Iterator",R=p.set,M=p.getterFor(A),P=p.getterFor(I),O=Object.getOwnPropertyDescriptor,F=function(e){if(!a)return o[e];var t=O(o,e);return t&&t.value},B=F("fetch"),H=F("Request"),W=F("Headers"),V=H&&H.prototype,z=W&&W.prototype,U=o.RegExp,q=o.TypeError,$=o.decodeURIComponent,j=o.encodeURIComponent,K=r("".charAt),G=r([].join),Y=r([].push),X=r("".replace),Z=r([].shift),Q=r([].splice),J=r("".split),ee=r("".slice),te=/\+/g,ie=Array(4),ne=function(e){return ie[e-1]||(ie[e-1]=U("((?:%[\\da-f]{2}){"+e+"})","gi"))},oe=function(e){try{return $(e)}catch(t){return e}},se=function(e){var t=X(e,te," "),i=4;try{return $(t)}catch(n){while(i)t=X(t,ne(i--),oe);return t}},re=/[!'()~]|%20/g,ae={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},le=function(e){return ae[e]},ce=function(e){return X(j(e),re,le)},de=g((function(e,t){R(this,{type:I,iterator:k(M(e).entries),kind:t})}),"Iterator",(function(){var e=P(this),t=e.kind,i=e.iterator.next(),n=i.value;return i.done||(i.value="keys"===t?n.key:"values"===t?n.value:[n.key,n.value]),i}),!0),ue=function(e){this.entries=[],this.url=null,void 0!==e&&(w(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===K(e,0)?ee(e,1):e:x(e)))};ue.prototype={type:A,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,i,n,o,r,a,l,c=L(e);if(c){t=k(e,c),i=t.next;while(!(n=s(i,t)).done){if(o=k(y(n.value)),r=o.next,(a=s(r,o)).done||(l=s(r,o)).done||!s(r,o).done)throw q("Expected sequence with length 2");Y(this.entries,{key:x(a.value),value:x(l.value)})}}else for(var d in e)v(e,d)&&Y(this.entries,{key:d,value:x(e[d])})},parseQuery:function(e){if(e){var t,i,n=J(e,"&"),o=0;while(o0?arguments[0]:void 0,t=R(this,new ue(e));a||(this.size=t.entries.length)},ge=he.prototype;if(u(ge,{append:function(e,t){var i=M(this);E(arguments.length,2),Y(i.entries,{key:x(e),value:x(t)}),a||this.length++,i.updateURL()},delete:function(e){var t=M(this),i=E(arguments.length,1),n=t.entries,o=x(e),s=i<2?void 0:arguments[1],r=void 0===s?s:x(s),l=0;while(lt.key?1:-1})),e.updateURL()},forEach:function(e){var t,i=M(this).entries,n=_(e,arguments.length>1?arguments[1]:void 0),o=0;while(o1?me(arguments[1]):{})}}),m(H)){var ve=function(e){return f(this,V),new H(e,arguments.length>1?me(arguments[1]):{})};V.constructor=ve,ve.prototype=V,n({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:ve})}}e.exports={URLSearchParams:he,getState:M}},95516:(e,t,i)=>{"use strict";var n=i(54076),o=i(81636),s=i(96975),r=i(5809),a=URLSearchParams,l=a.prototype,c=o(l.append),d=o(l["delete"]),u=o(l.forEach),h=o([].push),g=new a("a=1&a=2&b=3");g["delete"]("a",1),g["delete"]("b",void 0),g+""!=="a=2"&&n(l,"delete",(function(e){var t=arguments.length,i=t<2?void 0:arguments[1];if(t&&void 0===i)return d(this,e);var n=[];u(this,(function(e,t){h(n,{key:t,value:e})})),r(t,1);var o,a=s(e),l=s(i),g=0,p=0,f=!1,m=n.length;while(g{"use strict";var n=i(54076),o=i(81636),s=i(96975),r=i(5809),a=URLSearchParams,l=a.prototype,c=o(l.getAll),d=o(l.has),u=new a("a=1");!u.has("a",2)&&u.has("a",void 0)||n(l,"has",(function(e){var t=arguments.length,i=t<2?void 0:arguments[1];if(t&&void 0===i)return d(this,e);var n=c(this,e);r(t,1);var o=s(i),a=0;while(a{"use strict";i(38623)},62309:(e,t,i)=>{"use strict";var n=i(94133),o=i(81636),s=i(59570),r=URLSearchParams.prototype,a=o(r.forEach);n&&!("size"in r)&&s(r,"size",{get:function(){var e=0;return a(this,(function(){e++})),e},configurable:!0,enumerable:!0})},86614:(e,t,i)=>{"use strict";i(77280);var n,o=i(76943),s=i(94133),r=i(40036),a=i(53834),l=i(16158),c=i(81636),d=i(54076),u=i(59570),h=i(28406),g=i(62924),p=i(9804),f=i(37508),m=i(46378),v=i(46823).codeAt,_=i(22552),b=i(96975),y=i(52365),w=i(5809),x=i(38623),C=i(80780),S=C.set,k=C.getterFor("URL"),L=x.URLSearchParams,E=x.getState,N=a.URL,D=a.TypeError,T=a.parseInt,A=Math.floor,I=Math.pow,R=c("".charAt),M=c(/./.exec),P=c([].join),O=c(1..toString),F=c([].pop),B=c([].push),H=c("".replace),W=c([].shift),V=c("".split),z=c("".slice),U=c("".toLowerCase),q=c([].unshift),$="Invalid authority",j="Invalid scheme",K="Invalid host",G="Invalid port",Y=/[a-z]/i,X=/[\d+-.a-z]/i,Z=/\d/,Q=/^0x/i,J=/^[0-7]+$/,ee=/^\d+$/,te=/^[\da-f]+$/i,ie=/[\0\t\n\r #%/:<>?@[\\\]^|]/,ne=/[\0\t\n\r #/:<>?@[\\\]^|]/,oe=/^[\u0000-\u0020]+/,se=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,re=/[\t\n\r]/g,ae=function(e){var t,i,n,o,s,r,a,l=V(e,".");if(l.length&&""===l[l.length-1]&&l.length--,t=l.length,t>4)return e;for(i=[],n=0;n1&&"0"===R(o,0)&&(s=M(Q,o)?16:8,o=z(o,8===s?1:2)),""===o)r=0;else{if(!M(10===s?ee:8===s?J:te,o))return e;r=T(o,s)}B(i,r)}for(n=0;n=I(256,5-t))return null}else if(r>255)return null;for(a=F(i),n=0;n6)return;n=0;while(h()){if(o=null,n>0){if(!("."===h()&&n<4))return;u++}if(!M(Z,h()))return;while(M(Z,h())){if(s=T(h(),10),null===o)o=s;else{if(0===o)return;o=10*o+s}if(o>255)return;u++}l[c]=256*l[c]+o,n++,2!==n&&4!==n||c++}if(4!==n)return;break}if(":"===h()){if(u++,!h())return}else if(h())return;l[c++]=t}else{if(null!==d)return;u++,c++,d=c}}if(null!==d){r=c-d,c=7;while(0!==c&&r>0)a=l[c],l[c--]=l[d+r-1],l[d+--r]=a}else if(8!==c)return;return l},ce=function(e){for(var t=null,i=1,n=null,o=0,s=0;s<8;s++)0!==e[s]?(o>i&&(t=n,i=o),n=null,o=0):(null===n&&(n=s),++o);return o>i&&(t=n,i=o),t},de=function(e){var t,i,n,o;if("number"==typeof e){for(t=[],i=0;i<4;i++)q(t,e%256),e=A(e/256);return P(t,".")}if("object"==typeof e){for(t="",n=ce(e),i=0;i<8;i++)o&&0===e[i]||(o&&(o=!1),n===i?(t+=i?":":"::",o=!0):(t+=O(e[i],16),i<7&&(t+=":")));return"["+t+"]"}return e},ue={},he=p({},ue,{" ":1,'"':1,"<":1,">":1,"`":1}),ge=p({},he,{"#":1,"?":1,"{":1,"}":1}),pe=p({},ge,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),fe=function(e,t){var i=v(e,0);return i>32&&i<127&&!g(t,e)?e:encodeURIComponent(e)},me={ftp:21,file:null,http:80,https:443,ws:80,wss:443},ve=function(e,t){var i;return 2===e.length&&M(Y,R(e,0))&&(":"===(i=R(e,1))||!t&&"|"===i)},_e=function(e){var t;return e.length>1&&ve(z(e,0,2))&&(2===e.length||"/"===(t=R(e,2))||"\\"===t||"?"===t||"#"===t)},be=function(e){return"."===e||"%2e"===U(e)},ye=function(e){return e=U(e),".."===e||"%2e."===e||".%2e"===e||"%2e%2e"===e},we={},xe={},Ce={},Se={},ke={},Le={},Ee={},Ne={},De={},Te={},Ae={},Ie={},Re={},Me={},Pe={},Oe={},Fe={},Be={},He={},We={},Ve={},ze=function(e,t,i){var n,o,s,r=b(e);if(t){if(o=this.parse(r),o)throw D(o);this.searchParams=null}else{if(void 0!==i&&(n=new ze(i,!0)),o=this.parse(r,null,n),o)throw D(o);s=E(new L),s.bindURL(this),this.searchParams=s}};ze.prototype={type:"URL",parse:function(e,t,i){var o,s,r,a,l=this,c=t||we,d=0,u="",h=!1,p=!1,v=!1;e=b(e),t||(l.scheme="",l.username="",l.password="",l.host=null,l.port=null,l.path=[],l.query=null,l.fragment=null,l.cannotBeABaseURL=!1,e=H(e,oe,""),e=H(e,se,"$1")),e=H(e,re,""),o=f(e);while(d<=o.length){switch(s=o[d],c){case we:if(!s||!M(Y,s)){if(t)return j;c=Ce;continue}u+=U(s),c=xe;break;case xe:if(s&&(M(X,s)||"+"===s||"-"===s||"."===s))u+=U(s);else{if(":"!==s){if(t)return j;u="",c=Ce,d=0;continue}if(t&&(l.isSpecial()!==g(me,u)||"file"===u&&(l.includesCredentials()||null!==l.port)||"file"===l.scheme&&!l.host))return;if(l.scheme=u,t)return void(l.isSpecial()&&me[l.scheme]===l.port&&(l.port=null));u="","file"===l.scheme?c=Me:l.isSpecial()&&i&&i.scheme===l.scheme?c=Se:l.isSpecial()?c=Ne:"/"===o[d+1]?(c=ke,d++):(l.cannotBeABaseURL=!0,B(l.path,""),c=He)}break;case Ce:if(!i||i.cannotBeABaseURL&&"#"!==s)return j;if(i.cannotBeABaseURL&&"#"===s){l.scheme=i.scheme,l.path=m(i.path),l.query=i.query,l.fragment="",l.cannotBeABaseURL=!0,c=Ve;break}c="file"===i.scheme?Me:Le;continue;case Se:if("/"!==s||"/"!==o[d+1]){c=Le;continue}c=De,d++;break;case ke:if("/"===s){c=Te;break}c=Be;continue;case Le:if(l.scheme=i.scheme,s===n)l.username=i.username,l.password=i.password,l.host=i.host,l.port=i.port,l.path=m(i.path),l.query=i.query;else if("/"===s||"\\"===s&&l.isSpecial())c=Ee;else if("?"===s)l.username=i.username,l.password=i.password,l.host=i.host,l.port=i.port,l.path=m(i.path),l.query="",c=We;else{if("#"!==s){l.username=i.username,l.password=i.password,l.host=i.host,l.port=i.port,l.path=m(i.path),l.path.length--,c=Be;continue}l.username=i.username,l.password=i.password,l.host=i.host,l.port=i.port,l.path=m(i.path),l.query=i.query,l.fragment="",c=Ve}break;case Ee:if(!l.isSpecial()||"/"!==s&&"\\"!==s){if("/"!==s){l.username=i.username,l.password=i.password,l.host=i.host,l.port=i.port,c=Be;continue}c=Te}else c=De;break;case Ne:if(c=De,"/"!==s||"/"!==R(u,d+1))continue;d++;break;case De:if("/"!==s&&"\\"!==s){c=Te;continue}break;case Te:if("@"===s){h&&(u="%40"+u),h=!0,r=f(u);for(var _=0;_65535)return G;l.port=l.isSpecial()&&x===me[l.scheme]?null:x,u=""}if(t)return;c=Fe;continue}return G}u+=s;break;case Me:if(l.scheme="file","/"===s||"\\"===s)c=Pe;else{if(!i||"file"!==i.scheme){c=Be;continue}switch(s){case n:l.host=i.host,l.path=m(i.path),l.query=i.query;break;case"?":l.host=i.host,l.path=m(i.path),l.query="",c=We;break;case"#":l.host=i.host,l.path=m(i.path),l.query=i.query,l.fragment="",c=Ve;break;default:_e(P(m(o,d),""))||(l.host=i.host,l.path=m(i.path),l.shortenPath()),c=Be;continue}}break;case Pe:if("/"===s||"\\"===s){c=Oe;break}i&&"file"===i.scheme&&!_e(P(m(o,d),""))&&(ve(i.path[0],!0)?B(l.path,i.path[0]):l.host=i.host),c=Be;continue;case Oe:if(s===n||"/"===s||"\\"===s||"?"===s||"#"===s){if(!t&&ve(u))c=Be;else if(""===u){if(l.host="",t)return;c=Fe}else{if(a=l.parseHost(u),a)return a;if("localhost"===l.host&&(l.host=""),t)return;u="",c=Fe}continue}u+=s;break;case Fe:if(l.isSpecial()){if(c=Be,"/"!==s&&"\\"!==s)continue}else if(t||"?"!==s)if(t||"#"!==s){if(s!==n&&(c=Be,"/"!==s))continue}else l.fragment="",c=Ve;else l.query="",c=We;break;case Be:if(s===n||"/"===s||"\\"===s&&l.isSpecial()||!t&&("?"===s||"#"===s)){if(ye(u)?(l.shortenPath(),"/"===s||"\\"===s&&l.isSpecial()||B(l.path,"")):be(u)?"/"===s||"\\"===s&&l.isSpecial()||B(l.path,""):("file"===l.scheme&&!l.path.length&&ve(u)&&(l.host&&(l.host=""),u=R(u,0)+":"),B(l.path,u)),u="","file"===l.scheme&&(s===n||"?"===s||"#"===s))while(l.path.length>1&&""===l.path[0])W(l.path);"?"===s?(l.query="",c=We):"#"===s&&(l.fragment="",c=Ve)}else u+=fe(s,ge);break;case He:"?"===s?(l.query="",c=We):"#"===s?(l.fragment="",c=Ve):s!==n&&(l.path[0]+=fe(s,ue));break;case We:t||"#"!==s?s!==n&&("'"===s&&l.isSpecial()?l.query+="%27":l.query+="#"===s?"%23":fe(s,ue)):(l.fragment="",c=Ve);break;case Ve:s!==n&&(l.fragment+=fe(s,he));break}d++}},parseHost:function(e){var t,i,n;if("["===R(e,0)){if("]"!==R(e,e.length-1))return K;if(t=le(z(e,1,-1)),!t)return K;this.host=t}else if(this.isSpecial()){if(e=_(e),M(ie,e))return K;if(t=ae(e),null===t)return K;this.host=t}else{if(M(ne,e))return K;for(t="",i=f(e),n=0;n1?arguments[1]:void 0,n=S(t,new ze(e,!1,i));s||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},qe=Ue.prototype,$e=function(e,t){return{get:function(){return k(this)[e]()},set:t&&function(e){return k(this)[t](e)},configurable:!0,enumerable:!0}};if(s&&(u(qe,"href",$e("serialize","setHref")),u(qe,"origin",$e("getOrigin")),u(qe,"protocol",$e("getProtocol","setProtocol")),u(qe,"username",$e("getUsername","setUsername")),u(qe,"password",$e("getPassword","setPassword")),u(qe,"host",$e("getHost","setHost")),u(qe,"hostname",$e("getHostname","setHostname")),u(qe,"port",$e("getPort","setPort")),u(qe,"pathname",$e("getPathname","setPathname")),u(qe,"search",$e("getSearch","setSearch")),u(qe,"searchParams",$e("getSearchParams")),u(qe,"hash",$e("getHash","setHash"))),d(qe,"toJSON",(function(){return k(this).serialize()}),{enumerable:!0}),d(qe,"toString",(function(){return k(this).serialize()}),{enumerable:!0}),N){var je=N.createObjectURL,Ke=N.revokeObjectURL;je&&d(Ue,"createObjectURL",l(je,N)),Ke&&d(Ue,"revokeObjectURL",l(Ke,N))}y(Ue,"URL"),o({global:!0,constructor:!0,forced:!r,sham:!s},{URL:Ue})},84641:(e,t,i)=>{"use strict";i(86614)},97141:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(16706),i(74815),i(78163),i(72705))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.BlockCipher,o=t.algo,s=[],r=[],a=[],l=[],c=[],d=[],u=[],h=[],g=[],p=[];(function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var i=0,n=0;for(t=0;t<256;t++){var o=n^n<<1^n<<2^n<<3^n<<4;o=o>>>8^255&o^99,s[i]=o,r[o]=i;var f=e[i],m=e[f],v=e[m],_=257*e[o]^16843008*o;a[i]=_<<24|_>>>8,l[i]=_<<16|_>>>16,c[i]=_<<8|_>>>24,d[i]=_;_=16843009*v^65537*m^257*f^16843008*i;u[o]=_<<24|_>>>8,h[o]=_<<16|_>>>16,g[o]=_<<8|_>>>24,p[o]=_,i?(i=f^e[e[e[v^f]]],n^=e[e[n]]):i=n=1}})();var f=[0,1,2,4,8,16,32,64,128,27,54],m=o.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,i=e.sigBytes/4,n=this._nRounds=i+6,o=4*(n+1),r=this._keySchedule=[],a=0;a6&&a%i==4&&(d=s[d>>>24]<<24|s[d>>>16&255]<<16|s[d>>>8&255]<<8|s[255&d]):(d=d<<8|d>>>24,d=s[d>>>24]<<24|s[d>>>16&255]<<16|s[d>>>8&255]<<8|s[255&d],d^=f[a/i|0]<<24),r[a]=r[a-i]^d);for(var l=this._invKeySchedule=[],c=0;c>>24]]^h[s[d>>>16&255]]^g[s[d>>>8&255]]^p[s[255&d]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,a,l,c,d,s)},decryptBlock:function(e,t){var i=e[t+1];e[t+1]=e[t+3],e[t+3]=i,this._doCryptBlock(e,t,this._invKeySchedule,u,h,g,p,r);i=e[t+1];e[t+1]=e[t+3],e[t+3]=i},_doCryptBlock:function(e,t,i,n,o,s,r,a){for(var l=this._nRounds,c=e[t]^i[0],d=e[t+1]^i[1],u=e[t+2]^i[2],h=e[t+3]^i[3],g=4,p=1;p>>24]^o[d>>>16&255]^s[u>>>8&255]^r[255&h]^i[g++],m=n[d>>>24]^o[u>>>16&255]^s[h>>>8&255]^r[255&c]^i[g++],v=n[u>>>24]^o[h>>>16&255]^s[c>>>8&255]^r[255&d]^i[g++],_=n[h>>>24]^o[c>>>16&255]^s[d>>>8&255]^r[255&u]^i[g++];c=f,d=m,u=v,h=_}f=(a[c>>>24]<<24|a[d>>>16&255]<<16|a[u>>>8&255]<<8|a[255&h])^i[g++],m=(a[d>>>24]<<24|a[u>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^i[g++],v=(a[u>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&d])^i[g++],_=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[d>>>8&255]<<8|a[255&u])^i[g++];e[t]=f,e[t+1]=m,e[t+2]=v,e[t+3]=_},keySize:8});t.AES=n._createHelper(m)}(),e.AES}))},49693:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(16706),i(74815),i(78163),i(72705))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.BlockCipher,o=t.algo;const s=16,r=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],a=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function c(e,t){let i=t>>24&255,n=t>>16&255,o=t>>8&255,s=255&t,r=e.sbox[0][i]+e.sbox[1][n];return r^=e.sbox[2][o],r+=e.sbox[3][s],r}function d(e,t,i){let n,o=t,r=i;for(let a=0;a1;--a)o^=e.pbox[a],r=c(e,o)^r,n=o,o=r,r=n;return n=o,o=r,r=n,r^=e.pbox[1],o^=e.pbox[0],{left:o,right:r}}function h(e,t,i){for(let s=0;s<4;s++){e.sbox[s]=[];for(let t=0;t<256;t++)e.sbox[s][t]=a[s][t]}let n=0;for(let a=0;a=i&&(n=0);let o=0,l=0,c=0;for(let r=0;r>>2];e.sigBytes-=t}},v=(n.BlockCipher=u.extend({cfg:u.cfg.extend({mode:p,padding:m}),reset:function(){var e;u.reset.call(this);var t=this.cfg,i=t.iv,n=t.mode;this._xformMode==this._ENC_XFORM_MODE?e=n.createEncryptor:(e=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==e?this._mode.init(this,i&&i.words):(this._mode=e.call(n,this,i&&i.words),this._mode.__creator=e)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e,t=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e},blockSize:4}),n.CipherParams=o.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}})),_=i.format={},b=_.OpenSSL={stringify:function(e){var t,i=e.ciphertext,n=e.salt;return t=n?s.create([1398893684,1701076831]).concat(n).concat(i):i,t.toString(l)},parse:function(e){var t,i=l.parse(e),n=i.words;return 1398893684==n[0]&&1701076831==n[1]&&(t=s.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),v.create({ciphertext:i,salt:t})}},y=n.SerializableCipher=o.extend({cfg:o.extend({format:b}),encrypt:function(e,t,i,n){n=this.cfg.extend(n);var o=e.createEncryptor(i,n),s=o.finalize(t),r=o.cfg;return v.create({ciphertext:s,key:i,iv:r.iv,algorithm:e,mode:r.mode,padding:r.padding,blockSize:e.blockSize,formatter:n.format})},decrypt:function(e,t,i,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var o=e.createDecryptor(i,n).finalize(t.ciphertext);return o},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),w=i.kdf={},x=w.OpenSSL={execute:function(e,t,i,n,o){if(n||(n=s.random(8)),o)r=d.create({keySize:t+i,hasher:o}).compute(e,n);else var r=d.create({keySize:t+i}).compute(e,n);var a=s.create(r.words.slice(t),4*i);return r.sigBytes=4*t,v.create({key:r,iv:a,salt:n})}},C=n.PasswordBasedCipher=y.extend({cfg:y.cfg.extend({kdf:x}),encrypt:function(e,t,i,n){n=this.cfg.extend(n);var o=n.kdf.execute(i,e.keySize,e.ivSize,n.salt,n.hasher);n.iv=o.iv;var s=y.encrypt.call(this,e,t,o.key,n);return s.mixIn(o),s},decrypt:function(e,t,i,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var o=n.kdf.execute(i,e.keySize,e.ivSize,t.salt,n.hasher);n.iv=o.iv;var s=y.decrypt.call(this,e,t,o.key,n);return s}})}()}))},4790:function(e,t,i){(function(t,i){e.exports=i()})(0,(function(){var e=e||function(e,t){var n;if("undefined"!==typeof window&&window.crypto&&(n=window.crypto),"undefined"!==typeof self&&self.crypto&&(n=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!==typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&"undefined"!==typeof i.g&&i.g.crypto&&(n=i.g.crypto),!n)try{n=i(42480)}catch(m){}var o=function(){if(n){if("function"===typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(m){}if("function"===typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(m){}}throw new Error("Native crypto module could not be used to get secure random number.")},s=Object.create||function(){function e(){}return function(t){var i;return e.prototype=t,i=new e,e.prototype=null,i}}(),r={},a=r.lib={},l=a.Base=function(){return{extend:function(e){var t=s(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=a.WordArray=l.extend({init:function(e,i){e=this.words=e||[],this.sigBytes=i!=t?i:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,i=e.words,n=this.sigBytes,o=e.sigBytes;if(this.clamp(),n%4)for(var s=0;s>>2]>>>24-s%4*8&255;t[n+s>>>2]|=r<<24-(n+s)%4*8}else for(var a=0;a>>2]=i[a>>>2];return this.sigBytes+=o,this},clamp:function(){var t=this.words,i=this.sigBytes;t[i>>>2]&=4294967295<<32-i%4*8,t.length=e.ceil(i/4)},clone:function(){var e=l.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],i=0;i>>2]>>>24-o%4*8&255;n.push((s>>>4).toString(16)),n.push((15&s).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,i=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new c.init(i,t/2)}},h=d.Latin1={stringify:function(e){for(var t=e.words,i=e.sigBytes,n=[],o=0;o>>2]>>>24-o%4*8&255;n.push(String.fromCharCode(s))}return n.join("")},parse:function(e){for(var t=e.length,i=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new c.init(i,t)}},g=d.Utf8={stringify:function(e){try{return decodeURIComponent(escape(h.stringify(e)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(e){return h.parse(unescape(encodeURIComponent(e)))}},p=a.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=g.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var i,n=this._data,o=n.words,s=n.sigBytes,r=this.blockSize,a=4*r,l=s/a;l=t?e.ceil(l):e.max((0|l)-this._minBufferSize,0);var d=l*r,u=e.min(4*d,s);if(d){for(var h=0;h>>2]>>>24-s%4*8&255,a=t[s+1>>>2]>>>24-(s+1)%4*8&255,l=t[s+2>>>2]>>>24-(s+2)%4*8&255,c=r<<16|a<<8|l,d=0;d<4&&s+.75*d>>6*(3-d)&63));var u=n.charAt(64);if(u)while(o.length%4)o.push(u);return o.join("")},parse:function(e){var t=e.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var o=0;o>>6-r%4*2,c=a|l;o[s>>>2]|=c<<24-s%4*8,s++}return n.create(o,s)}}(),e.enc.Base64}))},10682:function(e,t,i){(function(t,n){e.exports=n(i(4790))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.WordArray,o=t.enc;o.Base64url={stringify:function(e,t){void 0===t&&(t=!0);var i=e.words,n=e.sigBytes,o=t?this._safe_map:this._map;e.clamp();for(var s=[],r=0;r>>2]>>>24-r%4*8&255,l=i[r+1>>>2]>>>24-(r+1)%4*8&255,c=i[r+2>>>2]>>>24-(r+2)%4*8&255,d=a<<16|l<<8|c,u=0;u<4&&r+.75*u>>6*(3-u)&63));var h=o.charAt(64);if(h)while(s.length%4)s.push(h);return s.join("")},parse:function(e,t){void 0===t&&(t=!0);var i=e.length,n=t?this._safe_map:this._map,o=this._reverseMap;if(!o){o=this._reverseMap=[];for(var r=0;r>>6-r%4*2,c=a|l;o[s>>>2]|=c<<24-s%4*8,s++}return n.create(o,s)}}(),e.enc.Base64url}))},24871:function(e,t,i){(function(t,n){e.exports=n(i(4790))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.WordArray,o=t.enc;o.Utf16=o.Utf16BE={stringify:function(e){for(var t=e.words,i=e.sigBytes,n=[],o=0;o>>2]>>>16-o%4*8&65535;n.push(String.fromCharCode(s))}return n.join("")},parse:function(e){for(var t=e.length,i=[],o=0;o>>1]|=e.charCodeAt(o)<<16-o%2*16;return n.create(i,2*t)}};function s(e){return e<<8&4278255360|e>>>8&16711935}o.Utf16LE={stringify:function(e){for(var t=e.words,i=e.sigBytes,n=[],o=0;o>>2]>>>16-o%4*8&65535);n.push(String.fromCharCode(r))}return n.join("")},parse:function(e){for(var t=e.length,i=[],o=0;o>>1]|=s(e.charCodeAt(o)<<16-o%2*16);return n.create(i,2*t)}}}(),e.enc.Utf16}))},78163:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(55296),i(90902))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.Base,o=i.WordArray,s=t.algo,r=s.MD5,a=s.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:r,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){var i,n=this.cfg,s=n.hasher.create(),r=o.create(),a=r.words,l=n.keySize,c=n.iterations;while(a.lengthn&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),r=this._iKey=t.clone(),a=o.words,l=r.words,c=0;c>>2]|=e[n]<<24-n%4*8;o.call(this,i,t)}else o.apply(this,arguments)};s.prototype=n}}(),e.lib.WordArray}))},74815:function(e,t,i){(function(t,n){e.exports=n(i(4790))})(0,(function(e){return function(t){var i=e,n=i.lib,o=n.WordArray,s=n.Hasher,r=i.algo,a=[];(function(){for(var e=0;e<64;e++)a[e]=4294967296*t.abs(t.sin(e+1))|0})();var l=r.MD5=s.extend({_doReset:function(){this._hash=new o.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var i=0;i<16;i++){var n=t+i,o=e[n];e[n]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}var s=this._hash.words,r=e[t+0],l=e[t+1],g=e[t+2],p=e[t+3],f=e[t+4],m=e[t+5],v=e[t+6],_=e[t+7],b=e[t+8],y=e[t+9],w=e[t+10],x=e[t+11],C=e[t+12],S=e[t+13],k=e[t+14],L=e[t+15],E=s[0],N=s[1],D=s[2],T=s[3];E=c(E,N,D,T,r,7,a[0]),T=c(T,E,N,D,l,12,a[1]),D=c(D,T,E,N,g,17,a[2]),N=c(N,D,T,E,p,22,a[3]),E=c(E,N,D,T,f,7,a[4]),T=c(T,E,N,D,m,12,a[5]),D=c(D,T,E,N,v,17,a[6]),N=c(N,D,T,E,_,22,a[7]),E=c(E,N,D,T,b,7,a[8]),T=c(T,E,N,D,y,12,a[9]),D=c(D,T,E,N,w,17,a[10]),N=c(N,D,T,E,x,22,a[11]),E=c(E,N,D,T,C,7,a[12]),T=c(T,E,N,D,S,12,a[13]),D=c(D,T,E,N,k,17,a[14]),N=c(N,D,T,E,L,22,a[15]),E=d(E,N,D,T,l,5,a[16]),T=d(T,E,N,D,v,9,a[17]),D=d(D,T,E,N,x,14,a[18]),N=d(N,D,T,E,r,20,a[19]),E=d(E,N,D,T,m,5,a[20]),T=d(T,E,N,D,w,9,a[21]),D=d(D,T,E,N,L,14,a[22]),N=d(N,D,T,E,f,20,a[23]),E=d(E,N,D,T,y,5,a[24]),T=d(T,E,N,D,k,9,a[25]),D=d(D,T,E,N,p,14,a[26]),N=d(N,D,T,E,b,20,a[27]),E=d(E,N,D,T,S,5,a[28]),T=d(T,E,N,D,g,9,a[29]),D=d(D,T,E,N,_,14,a[30]),N=d(N,D,T,E,C,20,a[31]),E=u(E,N,D,T,m,4,a[32]),T=u(T,E,N,D,b,11,a[33]),D=u(D,T,E,N,x,16,a[34]),N=u(N,D,T,E,k,23,a[35]),E=u(E,N,D,T,l,4,a[36]),T=u(T,E,N,D,f,11,a[37]),D=u(D,T,E,N,_,16,a[38]),N=u(N,D,T,E,w,23,a[39]),E=u(E,N,D,T,S,4,a[40]),T=u(T,E,N,D,r,11,a[41]),D=u(D,T,E,N,p,16,a[42]),N=u(N,D,T,E,v,23,a[43]),E=u(E,N,D,T,y,4,a[44]),T=u(T,E,N,D,C,11,a[45]),D=u(D,T,E,N,L,16,a[46]),N=u(N,D,T,E,g,23,a[47]),E=h(E,N,D,T,r,6,a[48]),T=h(T,E,N,D,_,10,a[49]),D=h(D,T,E,N,k,15,a[50]),N=h(N,D,T,E,m,21,a[51]),E=h(E,N,D,T,C,6,a[52]),T=h(T,E,N,D,p,10,a[53]),D=h(D,T,E,N,w,15,a[54]),N=h(N,D,T,E,l,21,a[55]),E=h(E,N,D,T,b,6,a[56]),T=h(T,E,N,D,L,10,a[57]),D=h(D,T,E,N,v,15,a[58]),N=h(N,D,T,E,S,21,a[59]),E=h(E,N,D,T,f,6,a[60]),T=h(T,E,N,D,x,10,a[61]),D=h(D,T,E,N,g,15,a[62]),N=h(N,D,T,E,y,21,a[63]),s[0]=s[0]+E|0,s[1]=s[1]+N|0,s[2]=s[2]+D|0,s[3]=s[3]+T|0},_doFinalize:function(){var e=this._data,i=e.words,n=8*this._nDataBytes,o=8*e.sigBytes;i[o>>>5]|=128<<24-o%32;var s=t.floor(n/4294967296),r=n;i[15+(o+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),i[14+(o+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),e.sigBytes=4*(i.length+1),this._process();for(var a=this._hash,l=a.words,c=0;c<4;c++){var d=l[c];l[c]=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8)}return a},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});function c(e,t,i,n,o,s,r){var a=e+(t&i|~t&n)+o+r;return(a<>>32-s)+t}function d(e,t,i,n,o,s,r){var a=e+(t&n|i&~n)+o+r;return(a<>>32-s)+t}function u(e,t,i,n,o,s,r){var a=e+(t^i^n)+o+r;return(a<>>32-s)+t}function h(e,t,i,n,o,s,r){var a=e+(i^(t|~n))+o+r;return(a<>>32-s)+t}i.MD5=s._createHelper(l),i.HmacMD5=s._createHmacHelper(l)}(Math),e.MD5}))},34740:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(72705))})(0,(function(e){return e.mode.CFB=function(){var t=e.lib.BlockCipherMode.extend();function i(e,t,i,n){var o,s=this._iv;s?(o=s.slice(0),this._iv=void 0):o=this._prevBlock,n.encryptBlock(o,0);for(var r=0;r>24&255)){var t=e>>16&255,i=e>>8&255,n=255&e;255===t?(t=0,255===i?(i=0,255===n?n=0:++n):++i):++t,e=0,e+=t<<16,e+=i<<8,e+=n}else e+=1<<24;return e}function n(e){return 0===(e[0]=i(e[0]))&&(e[1]=i(e[1])),e}var o=t.Encryptor=t.extend({processBlock:function(e,t){var i=this._cipher,o=i.blockSize,s=this._iv,r=this._counter;s&&(r=this._counter=s.slice(0),this._iv=void 0),n(r);var a=r.slice(0);i.encryptBlock(a,0);for(var l=0;l>>2]|=o<<24-s%4*8,e.sigBytes+=o},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Ansix923}))},52999:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(72705))})(0,(function(e){return e.pad.Iso10126={pad:function(t,i){var n=4*i,o=n-t.sigBytes%n;t.concat(e.lib.WordArray.random(o-1)).concat(e.lib.WordArray.create([o<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Iso10126}))},22895:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(72705))})(0,(function(e){return e.pad.Iso97971={pad:function(t,i){t.concat(e.lib.WordArray.create([2147483648],1)),e.pad.ZeroPadding.pad(t,i)},unpad:function(t){e.pad.ZeroPadding.unpad(t),t.sigBytes--}},e.pad.Iso97971}))},63632:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(72705))})(0,(function(e){return e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding}))},56537:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(72705))})(0,(function(e){return e.pad.ZeroPadding={pad:function(e,t){var i=4*t;e.clamp(),e.sigBytes+=i-(e.sigBytes%i||i)},unpad:function(e){var t=e.words,i=e.sigBytes-1;for(i=e.sigBytes-1;i>=0;i--)if(t[i>>>2]>>>24-i%4*8&255){e.sigBytes=i+1;break}}},e.pad.ZeroPadding}))},84638:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(77985),i(90902))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.Base,o=i.WordArray,s=t.algo,r=s.SHA256,a=s.HMAC,l=s.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:r,iterations:25e4}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){var i=this.cfg,n=a.create(i.hasher,e),s=o.create(),r=o.create([1]),l=s.words,c=r.words,d=i.keySize,u=i.iterations;while(l.length>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],n=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var o=0;o<4;o++)c.call(this);for(o=0;o<8;o++)n[o]^=i[o+4&7];if(t){var s=t.words,r=s[0],a=s[1],l=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),u=l>>>16|4294901760&d,h=d<<16|65535&l;n[0]^=l,n[1]^=u,n[2]^=d,n[3]^=h,n[4]^=l,n[5]^=u,n[6]^=d,n[7]^=h;for(o=0;o<4;o++)c.call(this)}},_doProcessBlock:function(e,t){var i=this._X;c.call(this),s[0]=i[0]^i[5]>>>16^i[3]<<16,s[1]=i[2]^i[7]>>>16^i[5]<<16,s[2]=i[4]^i[1]>>>16^i[7]<<16,s[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)s[n]=16711935&(s[n]<<8|s[n]>>>24)|4278255360&(s[n]<<24|s[n]>>>8),e[t+n]^=s[n]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,i=0;i<8;i++)r[i]=t[i];t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=e[i]+t[i],o=65535&n,s=n>>>16,l=((o*o>>>17)+o*s>>>15)+s*s,c=((4294901760&n)*n|0)+((65535&n)*n|0);a[i]=l^c}e[0]=a[0]+(a[7]<<16|a[7]>>>16)+(a[6]<<16|a[6]>>>16)|0,e[1]=a[1]+(a[0]<<8|a[0]>>>24)+a[7]|0,e[2]=a[2]+(a[1]<<16|a[1]>>>16)+(a[0]<<16|a[0]>>>16)|0,e[3]=a[3]+(a[2]<<8|a[2]>>>24)+a[1]|0,e[4]=a[4]+(a[3]<<16|a[3]>>>16)+(a[2]<<16|a[2]>>>16)|0,e[5]=a[5]+(a[4]<<8|a[4]>>>24)+a[3]|0,e[6]=a[6]+(a[5]<<16|a[5]>>>16)+(a[4]<<16|a[4]>>>16)|0,e[7]=a[7]+(a[6]<<8|a[6]>>>24)+a[5]|0}t.RabbitLegacy=n._createHelper(l)}(),e.RabbitLegacy}))},36970:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(16706),i(74815),i(78163),i(72705))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.StreamCipher,o=t.algo,s=[],r=[],a=[],l=o.Rabbit=n.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,i=0;i<4;i++)e[i]=16711935&(e[i]<<8|e[i]>>>24)|4278255360&(e[i]<<24|e[i]>>>8);var n=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],o=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)o[i]^=n[i+4&7];if(t){var s=t.words,r=s[0],a=s[1],l=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),u=l>>>16|4294901760&d,h=d<<16|65535&l;o[0]^=l,o[1]^=u,o[2]^=d,o[3]^=h,o[4]^=l,o[5]^=u,o[6]^=d,o[7]^=h;for(i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(e,t){var i=this._X;c.call(this),s[0]=i[0]^i[5]>>>16^i[3]<<16,s[1]=i[2]^i[7]>>>16^i[5]<<16,s[2]=i[4]^i[1]>>>16^i[7]<<16,s[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)s[n]=16711935&(s[n]<<8|s[n]>>>24)|4278255360&(s[n]<<24|s[n]>>>8),e[t+n]^=s[n]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,i=0;i<8;i++)r[i]=t[i];t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=e[i]+t[i],o=65535&n,s=n>>>16,l=((o*o>>>17)+o*s>>>15)+s*s,c=((4294901760&n)*n|0)+((65535&n)*n|0);a[i]=l^c}e[0]=a[0]+(a[7]<<16|a[7]>>>16)+(a[6]<<16|a[6]>>>16)|0,e[1]=a[1]+(a[0]<<8|a[0]>>>24)+a[7]|0,e[2]=a[2]+(a[1]<<16|a[1]>>>16)+(a[0]<<16|a[0]>>>16)|0,e[3]=a[3]+(a[2]<<8|a[2]>>>24)+a[1]|0,e[4]=a[4]+(a[3]<<16|a[3]>>>16)+(a[2]<<16|a[2]>>>16)|0,e[5]=a[5]+(a[4]<<8|a[4]>>>24)+a[3]|0,e[6]=a[6]+(a[5]<<16|a[5]>>>16)+(a[4]<<16|a[4]>>>16)|0,e[7]=a[7]+(a[6]<<8|a[6]>>>24)+a[5]|0}t.Rabbit=n._createHelper(l)}(),e.Rabbit}))},57037:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(16706),i(74815),i(78163),i(72705))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.StreamCipher,o=t.algo,s=o.RC4=n.extend({_doReset:function(){for(var e=this._key,t=e.words,i=e.sigBytes,n=this._S=[],o=0;o<256;o++)n[o]=o;o=0;for(var s=0;o<256;o++){var r=o%i,a=t[r>>>2]>>>24-r%4*8&255;s=(s+n[o]+a)%256;var l=n[o];n[o]=n[s],n[s]=l}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=r.call(this)},keySize:8,ivSize:0});function r(){for(var e=this._S,t=this._i,i=this._j,n=0,o=0;o<4;o++){t=(t+1)%256,i=(i+e[t])%256;var s=e[t];e[t]=e[i],e[i]=s,n|=e[(e[t]+e[i])%256]<<24-8*o}return this._i=t,this._j=i,n}t.RC4=n._createHelper(s);var a=o.RC4Drop=s.extend({cfg:s.cfg.extend({drop:192}),_doReset:function(){s._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)r.call(this)}});t.RC4Drop=n._createHelper(a)}(),e.RC4}))},267:function(e,t,i){(function(t,n){e.exports=n(i(4790))})(0,(function(e){ -/** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -return function(t){var i=e,n=i.lib,o=n.WordArray,s=n.Hasher,r=i.algo,a=o.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),l=o.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),c=o.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),d=o.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),u=o.create([0,1518500249,1859775393,2400959708,2840853838]),h=o.create([1352829926,1548603684,1836072691,2053994217,0]),g=r.RIPEMD160=s.extend({_doReset:function(){this._hash=o.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var i=0;i<16;i++){var n=t+i,o=e[n];e[n]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}var s,r,g,y,w,x,C,S,k,L,E,N=this._hash.words,D=u.words,T=h.words,A=a.words,I=l.words,R=c.words,M=d.words;x=s=N[0],C=r=N[1],S=g=N[2],k=y=N[3],L=w=N[4];for(i=0;i<80;i+=1)E=s+e[t+A[i]]|0,E+=i<16?p(r,g,y)+D[0]:i<32?f(r,g,y)+D[1]:i<48?m(r,g,y)+D[2]:i<64?v(r,g,y)+D[3]:_(r,g,y)+D[4],E|=0,E=b(E,R[i]),E=E+w|0,s=w,w=y,y=b(g,10),g=r,r=E,E=x+e[t+I[i]]|0,E+=i<16?_(C,S,k)+T[0]:i<32?v(C,S,k)+T[1]:i<48?m(C,S,k)+T[2]:i<64?f(C,S,k)+T[3]:p(C,S,k)+T[4],E|=0,E=b(E,M[i]),E=E+L|0,x=L,L=k,k=b(S,10),S=C,C=E;E=N[1]+g+k|0,N[1]=N[2]+y+L|0,N[2]=N[3]+w+x|0,N[3]=N[4]+s+C|0,N[4]=N[0]+r+S|0,N[0]=E},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),e.sigBytes=4*(t.length+1),this._process();for(var o=this._hash,s=o.words,r=0;r<5;r++){var a=s[r];s[r]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return o},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});function p(e,t,i){return e^t^i}function f(e,t,i){return e&t|~e&i}function m(e,t,i){return(e|~t)^i}function v(e,t,i){return e&i|t&~i}function _(e,t,i){return e^(t|~i)}function b(e,t){return e<>>32-t}i.RIPEMD160=s._createHelper(g),i.HmacRIPEMD160=s._createHmacHelper(g)}(Math),e.RIPEMD160}))},55296:function(e,t,i){(function(t,n){e.exports=n(i(4790))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.WordArray,o=i.Hasher,s=t.algo,r=[],a=s.SHA1=o.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var i=this._hash.words,n=i[0],o=i[1],s=i[2],a=i[3],l=i[4],c=0;c<80;c++){if(c<16)r[c]=0|e[t+c];else{var d=r[c-3]^r[c-8]^r[c-14]^r[c-16];r[c]=d<<1|d>>>31}var u=(n<<5|n>>>27)+l+r[c];u+=c<20?1518500249+(o&s|~o&a):c<40?1859775393+(o^s^a):c<60?(o&s|o&a|s&a)-1894007588:(o^s^a)-899497514,l=a,a=s,s=o<<30|o>>>2,o=n,n=u}i[0]=i[0]+n|0,i[1]=i[1]+o|0,i[2]=i[2]+s|0,i[3]=i[3]+a|0,i[4]=i[4]+l|0},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=Math.floor(i/4294967296),t[15+(n+64>>>9<<4)]=i,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a)}(),e.SHA1}))},17480:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(77985))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.WordArray,o=t.algo,s=o.SHA256,r=o.SHA224=s.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var e=s._doFinalize.call(this);return e.sigBytes-=4,e}});t.SHA224=s._createHelper(r),t.HmacSHA224=s._createHmacHelper(r)}(),e.SHA224}))},77985:function(e,t,i){(function(t,n){e.exports=n(i(4790))})(0,(function(e){return function(t){var i=e,n=i.lib,o=n.WordArray,s=n.Hasher,r=i.algo,a=[],l=[];(function(){function e(e){for(var i=t.sqrt(e),n=2;n<=i;n++)if(!(e%n))return!1;return!0}function i(e){return 4294967296*(e-(0|e))|0}var n=2,o=0;while(o<64)e(n)&&(o<8&&(a[o]=i(t.pow(n,.5))),l[o]=i(t.pow(n,1/3)),o++),n++})();var c=[],d=r.SHA256=s.extend({_doReset:function(){this._hash=new o.init(a.slice(0))},_doProcessBlock:function(e,t){for(var i=this._hash.words,n=i[0],o=i[1],s=i[2],r=i[3],a=i[4],d=i[5],u=i[6],h=i[7],g=0;g<64;g++){if(g<16)c[g]=0|e[t+g];else{var p=c[g-15],f=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,m=c[g-2],v=(m<<15|m>>>17)^(m<<13|m>>>19)^m>>>10;c[g]=f+c[g-7]+v+c[g-16]}var _=a&d^~a&u,b=n&o^n&s^o&s,y=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),w=(a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25),x=h+w+_+l[g]+c[g],C=y+b;h=u,u=d,d=a,a=r+x|0,r=s,s=o,o=n,n=x+C|0}i[0]=i[0]+n|0,i[1]=i[1]+o|0,i[2]=i[2]+s|0,i[3]=i[3]+r|0,i[4]=i[4]+a|0,i[5]=i[5]+d|0,i[6]=i[6]+u|0,i[7]=i[7]+h|0},_doFinalize:function(){var e=this._data,i=e.words,n=8*this._nDataBytes,o=8*e.sigBytes;return i[o>>>5]|=128<<24-o%32,i[14+(o+64>>>9<<4)]=t.floor(n/4294967296),i[15+(o+64>>>9<<4)]=n,e.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});i.SHA256=s._createHelper(d),i.HmacSHA256=s._createHmacHelper(d)}(Math),e.SHA256}))},66856:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(71688))})(0,(function(e){return function(t){var i=e,n=i.lib,o=n.WordArray,s=n.Hasher,r=i.x64,a=r.Word,l=i.algo,c=[],d=[],u=[];(function(){for(var e=1,t=0,i=0;i<24;i++){c[e+5*t]=(i+1)*(i+2)/2%64;var n=t%5,o=(2*e+3*t)%5;e=n,t=o}for(e=0;e<5;e++)for(t=0;t<5;t++)d[e+5*t]=t+(2*e+3*t)%5*5;for(var s=1,r=0;r<24;r++){for(var l=0,h=0,g=0;g<7;g++){if(1&s){var p=(1<>>24)|4278255360&(s<<24|s>>>8),r=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8);var a=i[o];a.high^=r,a.low^=s}for(var l=0;l<24;l++){for(var g=0;g<5;g++){for(var p=0,f=0,m=0;m<5;m++){a=i[g+5*m];p^=a.high,f^=a.low}var v=h[g];v.high=p,v.low=f}for(g=0;g<5;g++){var _=h[(g+4)%5],b=h[(g+1)%5],y=b.high,w=b.low;for(p=_.high^(y<<1|w>>>31),f=_.low^(w<<1|y>>>31),m=0;m<5;m++){a=i[g+5*m];a.high^=p,a.low^=f}}for(var x=1;x<25;x++){a=i[x];var C=a.high,S=a.low,k=c[x];k<32?(p=C<>>32-k,f=S<>>32-k):(p=S<>>64-k,f=C<>>64-k);var L=h[d[x]];L.high=p,L.low=f}var E=h[0],N=i[0];E.high=N.high,E.low=N.low;for(g=0;g<5;g++)for(m=0;m<5;m++){x=g+5*m,a=i[x];var D=h[x],T=h[(g+1)%5+5*m],A=h[(g+2)%5+5*m];a.high=D.high^~T.high&A.high,a.low=D.low^~T.low&A.low}a=i[0];var I=u[l];a.high^=I.high,a.low^=I.low}},_doFinalize:function(){var e=this._data,i=e.words,n=(this._nDataBytes,8*e.sigBytes),s=32*this.blockSize;i[n>>>5]|=1<<24-n%32,i[(t.ceil((n+1)/s)*s>>>5)-1]|=128,e.sigBytes=4*i.length,this._process();for(var r=this._state,a=this.cfg.outputLength/8,l=a/8,c=[],d=0;d>>24)|4278255360&(h<<24|h>>>8),g=16711935&(g<<8|g>>>24)|4278255360&(g<<24|g>>>8),c.push(g),c.push(h)}return new o.init(c,a)},clone:function(){for(var e=s.clone.call(this),t=e._state=this._state.slice(0),i=0;i<25;i++)t[i]=t[i].clone();return e}});i.SHA3=s._createHelper(g),i.HmacSHA3=s._createHmacHelper(g)}(Math),e.SHA3}))},28044:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(71688),i(86054))})(0,(function(e){return function(){var t=e,i=t.x64,n=i.Word,o=i.WordArray,s=t.algo,r=s.SHA512,a=s.SHA384=r.extend({_doReset:function(){this._hash=new o.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var e=r._doFinalize.call(this);return e.sigBytes-=16,e}});t.SHA384=r._createHelper(a),t.HmacSHA384=r._createHmacHelper(a)}(),e.SHA384}))},86054:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(71688))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.Hasher,o=t.x64,s=o.Word,r=o.WordArray,a=t.algo;function l(){return s.create.apply(s,arguments)}var c=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],d=[];(function(){for(var e=0;e<80;e++)d[e]=l()})();var u=a.SHA512=n.extend({_doReset:function(){this._hash=new r.init([new s.init(1779033703,4089235720),new s.init(3144134277,2227873595),new s.init(1013904242,4271175723),new s.init(2773480762,1595750129),new s.init(1359893119,2917565137),new s.init(2600822924,725511199),new s.init(528734635,4215389547),new s.init(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var i=this._hash.words,n=i[0],o=i[1],s=i[2],r=i[3],a=i[4],l=i[5],u=i[6],h=i[7],g=n.high,p=n.low,f=o.high,m=o.low,v=s.high,_=s.low,b=r.high,y=r.low,w=a.high,x=a.low,C=l.high,S=l.low,k=u.high,L=u.low,E=h.high,N=h.low,D=g,T=p,A=f,I=m,R=v,M=_,P=b,O=y,F=w,B=x,H=C,W=S,V=k,z=L,U=E,q=N,$=0;$<80;$++){var j,K,G=d[$];if($<16)K=G.high=0|e[t+2*$],j=G.low=0|e[t+2*$+1];else{var Y=d[$-15],X=Y.high,Z=Y.low,Q=(X>>>1|Z<<31)^(X>>>8|Z<<24)^X>>>7,J=(Z>>>1|X<<31)^(Z>>>8|X<<24)^(Z>>>7|X<<25),ee=d[$-2],te=ee.high,ie=ee.low,ne=(te>>>19|ie<<13)^(te<<3|ie>>>29)^te>>>6,oe=(ie>>>19|te<<13)^(ie<<3|te>>>29)^(ie>>>6|te<<26),se=d[$-7],re=se.high,ae=se.low,le=d[$-16],ce=le.high,de=le.low;j=J+ae,K=Q+re+(j>>>0>>0?1:0),j+=oe,K=K+ne+(j>>>0>>0?1:0),j+=de,K=K+ce+(j>>>0>>0?1:0),G.high=K,G.low=j}var ue=F&H^~F&V,he=B&W^~B&z,ge=D&A^D&R^A&R,pe=T&I^T&M^I&M,fe=(D>>>28|T<<4)^(D<<30|T>>>2)^(D<<25|T>>>7),me=(T>>>28|D<<4)^(T<<30|D>>>2)^(T<<25|D>>>7),ve=(F>>>14|B<<18)^(F>>>18|B<<14)^(F<<23|B>>>9),_e=(B>>>14|F<<18)^(B>>>18|F<<14)^(B<<23|F>>>9),be=c[$],ye=be.high,we=be.low,xe=q+_e,Ce=U+ve+(xe>>>0>>0?1:0),Se=(xe=xe+he,Ce=Ce+ue+(xe>>>0>>0?1:0),xe=xe+we,Ce=Ce+ye+(xe>>>0>>0?1:0),xe=xe+j,Ce=Ce+K+(xe>>>0>>0?1:0),me+pe),ke=fe+ge+(Se>>>0>>0?1:0);U=V,q=z,V=H,z=W,H=F,W=B,B=O+xe|0,F=P+Ce+(B>>>0>>0?1:0)|0,P=R,O=M,R=A,M=I,A=D,I=T,T=xe+Se|0,D=Ce+ke+(T>>>0>>0?1:0)|0}p=n.low=p+T,n.high=g+D+(p>>>0>>0?1:0),m=o.low=m+I,o.high=f+A+(m>>>0>>0?1:0),_=s.low=_+M,s.high=v+R+(_>>>0>>0?1:0),y=r.low=y+O,r.high=b+P+(y>>>0>>0?1:0),x=a.low=x+B,a.high=w+F+(x>>>0>>0?1:0),S=l.low=S+W,l.high=C+H+(S>>>0>>0?1:0),L=u.low=L+z,u.high=k+V+(L>>>0>>0?1:0),N=h.low=N+q,h.high=E+U+(N>>>0>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;t[n>>>5]|=128<<24-n%32,t[30+(n+128>>>10<<5)]=Math.floor(i/4294967296),t[31+(n+128>>>10<<5)]=i,e.sigBytes=4*t.length,this._process();var o=this._hash.toX32();return o},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32});t.SHA512=n._createHelper(u),t.HmacSHA512=n._createHmacHelper(u)}(),e.SHA512}))},44818:function(e,t,i){(function(t,n,o){e.exports=n(i(4790),i(16706),i(74815),i(78163),i(72705))})(0,(function(e){return function(){var t=e,i=t.lib,n=i.WordArray,o=i.BlockCipher,s=t.algo,r=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],a=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],l=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],d=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],u=s.DES=o.extend({_doReset:function(){for(var e=this._key,t=e.words,i=[],n=0;n<56;n++){var o=r[n]-1;i[n]=t[o>>>5]>>>31-o%32&1}for(var s=this._subKeys=[],c=0;c<16;c++){var d=s[c]=[],u=l[c];for(n=0;n<24;n++)d[n/6|0]|=i[(a[n]-1+u)%28]<<31-n%6,d[4+(n/6|0)]|=i[28+(a[n+24]-1+u)%28]<<31-n%6;d[0]=d[0]<<1|d[0]>>>31;for(n=1;n<7;n++)d[n]=d[n]>>>4*(n-1)+3;d[7]=d[7]<<5|d[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=s[15-n]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._subKeys)},decryptBlock:function(e,t){this._doCryptBlock(e,t,this._invSubKeys)},_doCryptBlock:function(e,t,i){this._lBlock=e[t],this._rBlock=e[t+1],h.call(this,4,252645135),h.call(this,16,65535),g.call(this,2,858993459),g.call(this,8,16711935),h.call(this,1,1431655765);for(var n=0;n<16;n++){for(var o=i[n],s=this._lBlock,r=this._rBlock,a=0,l=0;l<8;l++)a|=c[l][((r^o[l])&d[l])>>>0];this._lBlock=r,this._rBlock=s^a}var u=this._lBlock;this._lBlock=this._rBlock,this._rBlock=u,h.call(this,1,1431655765),g.call(this,8,16711935),g.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),e[t]=this._lBlock,e[t+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(e,t){var i=(this._lBlock>>>e^this._rBlock)&t;this._rBlock^=i,this._lBlock^=i<>>e^this._lBlock)&t;this._lBlock^=i,this._rBlock^=i<192.");var i=t.slice(0,2),o=t.length<4?t.slice(0,2):t.slice(2,4),s=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=u.createEncryptor(n.create(i)),this._des2=u.createEncryptor(n.create(o)),this._des3=u.createEncryptor(n.create(s))},encryptBlock:function(e,t){this._des1.encryptBlock(e,t),this._des2.decryptBlock(e,t),this._des3.encryptBlock(e,t)},decryptBlock:function(e,t){this._des3.decryptBlock(e,t),this._des2.encryptBlock(e,t),this._des1.decryptBlock(e,t)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=o._createHelper(p)}(),e.TripleDES}))},71688:function(e,t,i){(function(t,n){e.exports=n(i(4790))})(0,(function(e){return function(t){var i=e,n=i.lib,o=n.Base,s=n.WordArray,r=i.x64={};r.Word=o.extend({init:function(e,t){this.high=e,this.low=t}}),r.WordArray=o.extend({init:function(e,i){e=this.words=e||[],this.sigBytes=i!=t?i:8*e.length},toX32:function(){for(var e=this.words,t=e.length,i=[],n=0;n{"use strict";i.d(t,{$W:()=>w,Dt:()=>b,G6:()=>v,MG:()=>_,Pf:()=>f,Tz:()=>u,i7:()=>m,ie:()=>h,uB:()=>d,vU:()=>p});var n=i(36606),o=i(11271),s=i(70959);class r{constructor(){this._zoomFactor=1}getZoomFactor(){return this._zoomFactor}}r.INSTANCE=new r;class a extends s.JT{constructor(){super(),this._onDidChange=this._register(new o.Q5),this.onDidChange=this._onDidChange.event,this._listener=()=>this._handleChange(!0),this._mediaQueryList=null,this._handleChange(!1)}_handleChange(e){var t;null===(t=this._mediaQueryList)||void 0===t||t.removeEventListener("change",this._listener),this._mediaQueryList=n.vO.matchMedia(`(resolution: ${n.vO.devicePixelRatio}dppx)`),this._mediaQueryList.addEventListener("change",this._listener),e&&this._onDidChange.fire()}}class l extends s.JT{get value(){return this._value}constructor(){super(),this._onDidChange=this._register(new o.Q5),this.onDidChange=this._onDidChange.event,this._value=this._getPixelRatio();const e=this._register(new a);this._register(e.onDidChange((()=>{this._value=this._getPixelRatio(),this._onDidChange.fire(this._value)})))}_getPixelRatio(){const e=document.createElement("canvas").getContext("2d"),t=n.vO.devicePixelRatio||1,i=e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return t/i}}class c{constructor(){this._pixelRatioMonitor=null}_getOrCreatePixelRatioMonitor(){return this._pixelRatioMonitor||(this._pixelRatioMonitor=(0,s.dk)(new l)),this._pixelRatioMonitor}get value(){return this._getOrCreatePixelRatioMonitor().value}get onDidChange(){return this._getOrCreatePixelRatioMonitor().onDidChange}}function d(e,t){"string"===typeof e&&(e=n.vO.matchMedia(e)),e.addEventListener("change",t)}const u=new c;function h(){return r.INSTANCE.getZoomFactor()}const g=navigator.userAgent,p=g.indexOf("Firefox")>=0,f=g.indexOf("AppleWebKit")>=0,m=g.indexOf("Chrome")>=0,v=!m&&g.indexOf("Safari")>=0,_=!m&&!v&&f,b=(g.indexOf("Electron/"),g.indexOf("Android")>=0);let y=!1;if(n.vO.matchMedia){const e=n.vO.matchMedia("(display-mode: standalone) or (display-mode: window-controls-overlay)"),t=n.vO.matchMedia("(display-mode: fullscreen)");y=e.matches,d(e,(({matches:e})=>{y&&t.matches||(y=e)}))}function w(){return y}},53915:(e,t,i)=>{"use strict";i.d(t,{D:()=>r});var n=i(90882),o=i(36606),s=i(47606);const r={clipboard:{writeText:s.tY||document.queryCommandSupported&&document.queryCommandSupported("copy")||!!(navigator&&navigator.clipboard&&navigator.clipboard.writeText),readText:s.tY||!!(navigator&&navigator.clipboard&&navigator.clipboard.readText)},keyboard:(()=>s.tY||n.$W()?0:navigator.keyboard||n.G6?1:2)(),touch:"ontouchstart"in o.Ex||navigator.maxTouchPoints>0,pointerEvents:o.Ex.PointerEvent&&("ontouchstart"in o.Ex||navigator.maxTouchPoints>0||navigator.maxTouchPoints>0)}},1483:(e,t,i)=>{"use strict";i.d(t,{g:()=>o});var n=i(96358);const o={RESOURCES:"ResourceURLs",DOWNLOAD_URL:"DownloadURL",FILES:"Files",TEXT:n.v.text,INTERNAL_URI_LIST:"application/vnd.code.uri-list"}},2548:(e,t,i)=>{"use strict";i.d(t,{$:()=>Oe,$Z:()=>Be,Ay:()=>oe,Ce:()=>Ae,Cp:()=>He,D6:()=>z,Dx:()=>V,FK:()=>X,GQ:()=>R,H9:()=>re,I8:()=>G,If:()=>Z,Jc:()=>k,Jj:()=>v,N5:()=>ye,OO:()=>ne,PO:()=>E,R3:()=>Te,Ro:()=>q,Uh:()=>We,V3:()=>Ve,WN:()=>ce,XT:()=>$e,Xo:()=>S,_0:()=>Le,_F:()=>je,_h:()=>qe,_q:()=>Ge,b5:()=>ae,cl:()=>Ce,dS:()=>ue,dp:()=>j,e4:()=>De,eg:()=>Ye,fk:()=>ve,go:()=>Ne,h:()=>Ze,i:()=>K,iJ:()=>Fe,jL:()=>B,jg:()=>J,jt:()=>ze,lI:()=>F,mc:()=>Ie,mu:()=>I,ne:()=>H,nm:()=>D,sQ:()=>Ke,se:()=>P,tw:()=>xe,uN:()=>_e,uP:()=>le,uU:()=>te,vL:()=>ke,vY:()=>se,vd:()=>we,vx:()=>O,w:()=>Y,wY:()=>Ue,wn:()=>Q,xQ:()=>$,zB:()=>Se});var n=i(90882),o=i(53915),s=i(45429),r=i(75467),a=i(85398),l=i(98642),c=i(11271),d=i(29739),u=i(70959),h=i(50200),g=i(47606),p=i(63381),f=i(36606);const{registerWindow:m,getWindow:v,getDocument:_,getWindows:b,getWindowsCount:y,getWindowId:w,getWindowById:x,hasWindow:C,onDidRegisterWindow:S,onWillUnregisterWindow:k,onDidUnregisterWindow:L}=function(){const e=new Map;(0,f.HA)(f.Ex,1),e.set(f.Ex.vscodeWindowId,{window:f.Ex,disposables:new u.SL});const t=new c.Q5,i=new c.Q5,n=new c.Q5;return{onDidRegisterWindow:t.event,onWillUnregisterWindow:n.event,onDidUnregisterWindow:i.event,registerWindow(o){if(e.has(o.vscodeWindowId))return u.JT.None;const s=new u.SL,r={window:o,disposables:s.add(new u.SL)};return e.set(o.vscodeWindowId,r),s.add((0,u.OF)((()=>{e.delete(o.vscodeWindowId),i.fire(o)}))),s.add(D(o,xe.BEFORE_UNLOAD,(()=>{n.fire(o)}))),t.fire(r),s},getWindows(){return e.values()},getWindowsCount(){return e.size},getWindowId(e){return e.vscodeWindowId},hasWindow(t){return e.has(t)},getWindowById(t){return e.get(t)},getWindow(e){var t;const i=e;if(null===(t=null===i||void 0===i?void 0:i.ownerDocument)||void 0===t?void 0:t.defaultView)return i.ownerDocument.defaultView.window;const n=e;return(null===n||void 0===n?void 0:n.view)?n.view.window:f.Ex},getDocument(e){const t=e;return v(t).document}}}();function E(e){while(e.firstChild)e.firstChild.remove()}class N{constructor(e,t,i,n){this._node=e,this._type=t,this._handler=i,this._options=n||!1,this._node.addEventListener(this._type,this._handler,this._options)}dispose(){this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function D(e,t,i,n){return new N(e,t,i,n)}function T(e,t){return function(i){return t(new r.n(e,i))}}function A(e){return function(t){return e(new s.y(t))}}const I=function(e,t,i,n){let o=i;return"click"===t||"mousedown"===t?o=T(v(e),i):"keydown"!==t&&"keypress"!==t&&"keyup"!==t||(o=A(i)),D(e,t,o,n)},R=function(e,t,i){const n=T(v(e),t);return M(e,n,i)};function M(e,t,i){return D(e,g.gn&&o.D.pointerEvents?xe.POINTER_DOWN:xe.MOUSE_DOWN,t,i)}function P(e,t,i){return(0,a.y5)(e,t,i)}class O extends a.hF{constructor(e,t){super(e,t)}}let F,B;class H extends a.zh{cancelAndSet(e,t,i){return super.cancelAndSet(e,t,i)}}class W{constructor(e,t=0){this._runner=e,this.priority=t,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(e){(0,l.dL)(e)}}static sort(e,t){return t.priority-e.priority}}function V(e){return v(e).getComputedStyle(e,null)}function z(e,t){const i=v(e),n=i.document;if(e!==n.body)return new q(e.clientWidth,e.clientHeight);if(g.gn&&(null===i||void 0===i?void 0:i.visualViewport))return new q(i.visualViewport.width,i.visualViewport.height);if((null===i||void 0===i?void 0:i.innerWidth)&&i.innerHeight)return new q(i.innerWidth,i.innerHeight);if(n.body&&n.body.clientWidth&&n.body.clientHeight)return new q(n.body.clientWidth,n.body.clientHeight);if(n.documentElement&&n.documentElement.clientWidth&&n.documentElement.clientHeight)return new q(n.documentElement.clientWidth,n.documentElement.clientHeight);if(t)return z(t);throw new Error("Unable to figure out browser width and height")}(function(){const e=new Map,t=new Map,i=new Map,n=new Map,o=o=>{var s;i.set(o,!1);const r=null!==(s=e.get(o))&&void 0!==s?s:[];t.set(o,r),e.set(o,[]),n.set(o,!0);while(r.length>0){r.sort(W.sort);const e=r.shift();e.execute()}n.set(o,!1)};B=(t,n,s=0)=>{const r=w(t),a=new W(n,s);let l=e.get(r);return l||(l=[],e.set(r,l)),l.push(a),i.get(r)||(i.set(r,!0),t.requestAnimationFrame((()=>o(r)))),a},F=(e,i,o)=>{const s=w(e);if(n.get(s)){const e=new W(i,o);let n=t.get(s);return n||(n=[],t.set(s,n)),n.push(e),e}return B(e,i,o)}})();class U{static convertToPixels(e,t){return parseFloat(t)||0}static getDimension(e,t,i){const n=V(e),o=n?n.getPropertyValue(t):"0";return U.convertToPixels(e,o)}static getBorderLeftWidth(e){return U.getDimension(e,"border-left-width","borderLeftWidth")}static getBorderRightWidth(e){return U.getDimension(e,"border-right-width","borderRightWidth")}static getBorderTopWidth(e){return U.getDimension(e,"border-top-width","borderTopWidth")}static getBorderBottomWidth(e){return U.getDimension(e,"border-bottom-width","borderBottomWidth")}static getPaddingLeft(e){return U.getDimension(e,"padding-left","paddingLeft")}static getPaddingRight(e){return U.getDimension(e,"padding-right","paddingRight")}static getPaddingTop(e){return U.getDimension(e,"padding-top","paddingTop")}static getPaddingBottom(e){return U.getDimension(e,"padding-bottom","paddingBottom")}static getMarginLeft(e){return U.getDimension(e,"margin-left","marginLeft")}static getMarginTop(e){return U.getDimension(e,"margin-top","marginTop")}static getMarginRight(e){return U.getDimension(e,"margin-right","marginRight")}static getMarginBottom(e){return U.getDimension(e,"margin-bottom","marginBottom")}}class q{constructor(e,t){this.width=e,this.height=t}with(e=this.width,t=this.height){return e!==this.width||t!==this.height?new q(e,t):this}static is(e){return"object"===typeof e&&"number"===typeof e.height&&"number"===typeof e.width}static lift(e){return e instanceof q?e:new q(e.width,e.height)}static equals(e,t){return e===t||!(!e||!t)&&(e.width===t.width&&e.height===t.height)}}function $(e){let t=e.offsetParent,i=e.offsetTop,n=e.offsetLeft;while(null!==(e=e.parentNode)&&e!==e.ownerDocument.body&&e!==e.ownerDocument.documentElement){i-=e.scrollTop;const o=ie(e)?null:V(e);o&&(n-="rtl"!==o.direction?e.scrollLeft:-e.scrollLeft),e===t&&(n+=U.getBorderLeftWidth(e),i+=U.getBorderTopWidth(e),i+=e.offsetTop,n+=e.offsetLeft,t=e.offsetParent)}return{left:n,top:i}}function j(e,t,i){"number"===typeof t&&(e.style.width=`${t}px`),"number"===typeof i&&(e.style.height=`${i}px`)}function K(e){const t=e.getBoundingClientRect(),i=v(e);return{left:t.left+i.scrollX,top:t.top+i.scrollY,width:t.width,height:t.height}}function G(e){let t=e,i=1;do{const e=V(t).zoom;null!==e&&void 0!==e&&"1"!==e&&(i*=e),t=t.parentElement}while(null!==t&&t!==t.ownerDocument.documentElement);return i}function Y(e){const t=U.getMarginLeft(e)+U.getMarginRight(e);return e.offsetWidth+t}function X(e){const t=U.getBorderLeftWidth(e)+U.getBorderRightWidth(e),i=U.getPaddingLeft(e)+U.getPaddingRight(e);return e.offsetWidth-t-i}function Z(e){const t=U.getBorderTopWidth(e)+U.getBorderBottomWidth(e),i=U.getPaddingTop(e)+U.getPaddingBottom(e);return e.offsetHeight-t-i}function Q(e){const t=U.getMarginTop(e)+U.getMarginBottom(e);return e.offsetHeight+t}function J(e,t){return Boolean(null===t||void 0===t?void 0:t.contains(e))}function ee(e,t,i){while(e&&e.nodeType===e.ELEMENT_NODE){if(e.classList.contains(t))return e;if(i)if("string"===typeof i){if(e.classList.contains(i))return null}else if(e===i)return null;e=e.parentNode}return null}function te(e,t,i){return!!ee(e,t,i)}function ie(e){return e&&!!e.host&&!!e.mode}function ne(e){return!!oe(e)}function oe(e){var t;while(e.parentNode){if(e===(null===(t=e.ownerDocument)||void 0===t?void 0:t.body))return null;e=e.parentNode}return ie(e)?e:null}function se(){let e=le().activeElement;while(null===e||void 0===e?void 0:e.shadowRoot)e=e.shadowRoot.activeElement;return e}function re(e){return e.ownerDocument.activeElement===e}function ae(e){return J(e.ownerDocument.activeElement,e)}function le(){var e;if(y()<=1)return document;const t=Array.from(b()).map((({window:e})=>e.document));return null!==(e=t.find((e=>e.hasFocus())))&&void 0!==e?e:document}function ce(){var e,t;const i=le();return null!==(t=null===(e=i.defaultView)||void 0===e?void 0:e.window)&&void 0!==t?t:f.Ex}q.None=new q(0,0);const de=new Map;function ue(e=f.Ex.document.head,t,i){const n=document.createElement("style");if(n.type="text/css",n.media="screen",null===t||void 0===t||t(n),e.appendChild(n),i&&i.add((0,u.OF)((()=>e.removeChild(n)))),e===f.Ex.document.head){const e=new Set;de.set(n,e);for(const{window:t,disposables:o}of b()){if(t===f.Ex)continue;const s=o.add(he(n,e,t));null===i||void 0===i||i.add(s)}}return n}function he(e,t,i){var n,o;const s=new u.SL,r=e.cloneNode(!0);i.document.head.appendChild(r),s.add((0,u.OF)((()=>i.document.head.removeChild(r))));for(const a of me(e))null===(n=r.sheet)||void 0===n||n.insertRule(a.cssText,null===(o=r.sheet)||void 0===o?void 0:o.cssRules.length);return s.add(ge.observe(e,s,{childList:!0})((()=>{r.textContent=e.textContent}))),t.add(r),s.add((0,u.OF)((()=>t.delete(r)))),s}const ge=new class{constructor(){this.mutationObservers=new Map}observe(e,t,i){let n=this.mutationObservers.get(e);n||(n=new Map,this.mutationObservers.set(e,n));const o=(0,p.vp)(i);let s=n.get(o);if(s)s.users+=1;else{const r=new c.Q5,a=new MutationObserver((e=>r.fire(e)));a.observe(e,i);const l=s={users:1,observer:a,onDidMutate:r.event};t.add((0,u.OF)((()=>{l.users-=1,0===l.users&&(r.dispose(),a.disconnect(),null===n||void 0===n||n.delete(o),0===(null===n||void 0===n?void 0:n.size)&&this.mutationObservers.delete(e))}))),n.set(o,s)}return s.onDidMutate}};let pe=null;function fe(){return pe||(pe=ue()),pe}function me(e){var t,i;return(null===(t=null===e||void 0===e?void 0:e.sheet)||void 0===t?void 0:t.rules)?e.sheet.rules:(null===(i=null===e||void 0===e?void 0:e.sheet)||void 0===i?void 0:i.cssRules)?e.sheet.cssRules:[]}function ve(e,t,i=fe()){var n,o;if(i&&t){null===(n=i.sheet)||void 0===n||n.insertRule(`${e} {${t}}`,0);for(const n of null!==(o=de.get(i))&&void 0!==o?o:[])ve(e,t,n)}}function _e(e,t=fe()){var i,n;if(!t)return;const o=me(t),s=[];for(let r=0;r=0;r--)null===(i=t.sheet)||void 0===i||i.deleteRule(s[r]);for(const r of null!==(n=de.get(t))&&void 0!==n?n:[])_e(e,r)}function be(e){return"string"===typeof e.selectorText}function ye(e){return e instanceof MouseEvent||e instanceof v(e).MouseEvent}function we(e){return e instanceof KeyboardEvent||e instanceof v(e).KeyboardEvent}const xe={CLICK:"click",AUXCLICK:"auxclick",DBLCLICK:"dblclick",MOUSE_UP:"mouseup",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_MOVE:"mousemove",MOUSE_OUT:"mouseout",MOUSE_ENTER:"mouseenter",MOUSE_LEAVE:"mouseleave",MOUSE_WHEEL:"wheel",POINTER_UP:"pointerup",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",POINTER_LEAVE:"pointerleave",CONTEXT_MENU:"contextmenu",WHEEL:"wheel",KEY_DOWN:"keydown",KEY_PRESS:"keypress",KEY_UP:"keyup",LOAD:"load",BEFORE_UNLOAD:"beforeunload",UNLOAD:"unload",PAGE_SHOW:"pageshow",PAGE_HIDE:"pagehide",PASTE:"paste",ABORT:"abort",ERROR:"error",RESIZE:"resize",SCROLL:"scroll",FULLSCREEN_CHANGE:"fullscreenchange",WK_FULLSCREEN_CHANGE:"webkitfullscreenchange",SELECT:"select",CHANGE:"change",SUBMIT:"submit",RESET:"reset",FOCUS:"focus",FOCUS_IN:"focusin",FOCUS_OUT:"focusout",BLUR:"blur",INPUT:"input",STORAGE:"storage",DRAG_START:"dragstart",DRAG:"drag",DRAG_ENTER:"dragenter",DRAG_LEAVE:"dragleave",DRAG_OVER:"dragover",DROP:"drop",DRAG_END:"dragend",ANIMATION_START:n.Pf?"webkitAnimationStart":"animationstart",ANIMATION_END:n.Pf?"webkitAnimationEnd":"animationend",ANIMATION_ITERATION:n.Pf?"webkitAnimationIteration":"animationiteration"};function Ce(e){const t=e;return!(!t||"function"!==typeof t.preventDefault||"function"!==typeof t.stopPropagation)}const Se={stop:(e,t)=>(e.preventDefault(),t&&e.stopPropagation(),e)};function ke(e){const t=[];for(let i=0;e&&e.nodeType===e.ELEMENT_NODE;i++)t[i]=e.scrollTop,e=e.parentNode;return t}function Le(e,t){for(let i=0;e&&e.nodeType===e.ELEMENT_NODE;i++)e.scrollTop!==t[i]&&(e.scrollTop=t[i]),e=e.parentNode}class Ee extends u.JT{static hasFocusWithin(e){if(e instanceof HTMLElement){const t=oe(e),i=t?t.activeElement:e.ownerDocument.activeElement;return J(i,e)}{const t=e;return J(t.document.activeElement,t.document)}}constructor(e){super(),this._onDidFocus=this._register(new c.Q5),this.onDidFocus=this._onDidFocus.event,this._onDidBlur=this._register(new c.Q5),this.onDidBlur=this._onDidBlur.event;let t=Ee.hasFocusWithin(e),i=!1;const n=()=>{i=!1,t||(t=!0,this._onDidFocus.fire())},o=()=>{t&&(i=!0,(e instanceof HTMLElement?v(e):e).setTimeout((()=>{i&&(i=!1,t=!1,this._onDidBlur.fire())}),0))};this._refreshStateHandler=()=>{const i=Ee.hasFocusWithin(e);i!==t&&(t?o():n())},this._register(D(e,xe.FOCUS,n,!0)),this._register(D(e,xe.BLUR,o,!0)),e instanceof HTMLElement&&(this._register(D(e,xe.FOCUS_IN,(()=>this._refreshStateHandler()))),this._register(D(e,xe.FOCUS_OUT,(()=>this._refreshStateHandler()))))}}function Ne(e){return new Ee(e)}function De(e,t){return e.after(t),t}function Te(e,...t){if(e.append(...t),1===t.length&&"string"!==typeof t[0])return t[0]}function Ae(e,t){return e.insertBefore(t,e.firstChild),t}function Ie(e,...t){e.innerText="",Te(e,...t)}const Re=/([\w\-]+)?(#([\w\-]+))?((\.([\w\-]+))*)/;var Me;function Pe(e,t,i,...n){const o=Re.exec(t);if(!o)throw new Error("Bad use of emmet");const s=o[1]||"div";let r;return r=e!==Me.HTML?document.createElementNS(e,s):document.createElement(s),o[3]&&(r.id=o[3]),o[4]&&(r.className=o[4].replace(/\./g," ").trim()),i&&Object.entries(i).forEach((([e,t])=>{"undefined"!==typeof t&&(/^on\w+$/.test(e)?r[e]=t:"selected"===e?t&&r.setAttribute(e,"true"):r.setAttribute(e,t))})),r.append(...n),r}function Oe(e,t,...i){return Pe(Me.HTML,e,t,...i)}function Fe(e,...t){e?Be(...t):He(...t)}function Be(...e){for(const t of e)t.style.display="",t.removeAttribute("aria-hidden")}function He(...e){for(const t of e)t.style.display="none",t.setAttribute("aria-hidden","true")}function We(e,t){const i=e.devicePixelRatio*t;return Math.max(1,Math.floor(i))/e.devicePixelRatio}function Ve(e){f.Ex.open(e,"_blank","noopener")}function ze(e,t){const i=()=>{t(),n=B(e,i)};let n=B(e,i);return(0,u.OF)((()=>n.dispose()))}function Ue(e){return e?`url('${h.Gi.uriToBrowserUri(e).toString(!0).replace(/'/g,"%27")}')`:"url('')"}function qe(e){return`'${e.replace(/'/g,"%27")}'`}function $e(e,t){if(void 0!==e){const i=e.match(/^\s*var\((.+)\)$/);if(i){const e=i[1].split(",",2);return 2===e.length&&(t=$e(e[1].trim(),t)),`var(${e[0]}, ${t})`}return e}return t}function je(e,t=!1){const i=document.createElement("a");return d.v5("afterSanitizeAttributes",(n=>{for(const o of["href","src"])if(n.hasAttribute(o)){const s=n.getAttribute(o);if("href"===o&&s.startsWith("#"))continue;if(i.href=s,!e.includes(i.protocol.replace(/:$/,""))){if(t&&"src"===o&&i.href.startsWith("data:"))continue;n.removeAttribute(o)}}})),(0,u.OF)((()=>{d.ok("afterSanitizeAttributes")}))}(function(e){e["HTML"]="http://www.w3.org/1999/xhtml",e["SVG"]="http://www.w3.org/2000/svg"})(Me||(Me={})),Oe.SVG=function(e,t,...i){return Pe(Me.SVG,e,t,...i)},h.WX.setPreferredWebSchema(/^https:/.test(f.Ex.location.href)?"https":"http");const Ke=Object.freeze(["a","abbr","b","bdo","blockquote","br","caption","cite","code","col","colgroup","dd","del","details","dfn","div","dl","dt","em","figcaption","figure","h1","h2","h3","h4","h5","h6","hr","i","img","ins","kbd","label","li","mark","ol","p","pre","q","rp","rt","ruby","samp","small","small","source","span","strike","strong","sub","summary","sup","table","tbody","td","tfoot","th","thead","time","tr","tt","u","ul","var","video","wbr"]);Object.freeze({ALLOWED_TAGS:["a","button","blockquote","code","div","h1","h2","h3","h4","h5","h6","hr","input","label","li","p","pre","select","small","span","strong","textarea","ul","ol"],ALLOWED_ATTR:["href","data-href","data-command","target","title","name","src","alt","class","id","role","tabindex","style","data-code","width","height","align","x-dispatch","required","checked","placeholder","type","start"],RETURN_DOM:!1,RETURN_DOM_FRAGMENT:!1,RETURN_TRUSTED_TYPE:!0});class Ge extends c.Q5{constructor(){super(),this._subscriptions=new u.SL,this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1},this._subscriptions.add(c.ju.runAndSubscribe(S,(({window:e,disposables:t})=>this.registerListeners(e,t)),{window:f.Ex,disposables:this._subscriptions}))}registerListeners(e,t){t.add(D(e,"keydown",(e=>{if(e.defaultPrevented)return;const t=new s.y(e);if(6!==t.keyCode||!e.repeat){if(e.altKey&&!this._keyStatus.altKey)this._keyStatus.lastKeyPressed="alt";else if(e.ctrlKey&&!this._keyStatus.ctrlKey)this._keyStatus.lastKeyPressed="ctrl";else if(e.metaKey&&!this._keyStatus.metaKey)this._keyStatus.lastKeyPressed="meta";else if(e.shiftKey&&!this._keyStatus.shiftKey)this._keyStatus.lastKeyPressed="shift";else{if(6===t.keyCode)return;this._keyStatus.lastKeyPressed=void 0}this._keyStatus.altKey=e.altKey,this._keyStatus.ctrlKey=e.ctrlKey,this._keyStatus.metaKey=e.metaKey,this._keyStatus.shiftKey=e.shiftKey,this._keyStatus.lastKeyPressed&&(this._keyStatus.event=e,this.fire(this._keyStatus))}}),!0)),t.add(D(e,"keyup",(e=>{e.defaultPrevented||(!e.altKey&&this._keyStatus.altKey?this._keyStatus.lastKeyReleased="alt":!e.ctrlKey&&this._keyStatus.ctrlKey?this._keyStatus.lastKeyReleased="ctrl":!e.metaKey&&this._keyStatus.metaKey?this._keyStatus.lastKeyReleased="meta":!e.shiftKey&&this._keyStatus.shiftKey?this._keyStatus.lastKeyReleased="shift":this._keyStatus.lastKeyReleased=void 0,this._keyStatus.lastKeyPressed!==this._keyStatus.lastKeyReleased&&(this._keyStatus.lastKeyPressed=void 0),this._keyStatus.altKey=e.altKey,this._keyStatus.ctrlKey=e.ctrlKey,this._keyStatus.metaKey=e.metaKey,this._keyStatus.shiftKey=e.shiftKey,this._keyStatus.lastKeyReleased&&(this._keyStatus.event=e,this.fire(this._keyStatus)))}),!0)),t.add(D(e.document.body,"mousedown",(()=>{this._keyStatus.lastKeyPressed=void 0}),!0)),t.add(D(e.document.body,"mouseup",(()=>{this._keyStatus.lastKeyPressed=void 0}),!0)),t.add(D(e.document.body,"mousemove",(e=>{e.buttons&&(this._keyStatus.lastKeyPressed=void 0)}),!0)),t.add(D(e,"blur",(()=>{this.resetKeyStatus()})))}get keyStatus(){return this._keyStatus}resetKeyStatus(){this.doResetKeyStatus(),this.fire(this._keyStatus)}doResetKeyStatus(){this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1}}static getInstance(){return Ge.instance||(Ge.instance=new Ge),Ge.instance}dispose(){super.dispose(),this._subscriptions.dispose()}}class Ye extends u.JT{constructor(e,t){super(),this.element=e,this.callbacks=t,this.counter=0,this.dragStartTime=0,this.registerListeners()}registerListeners(){this.callbacks.onDragStart&&this._register(D(this.element,xe.DRAG_START,(e=>{var t,i;null===(i=(t=this.callbacks).onDragStart)||void 0===i||i.call(t,e)}))),this.callbacks.onDrag&&this._register(D(this.element,xe.DRAG,(e=>{var t,i;null===(i=(t=this.callbacks).onDrag)||void 0===i||i.call(t,e)}))),this._register(D(this.element,xe.DRAG_ENTER,(e=>{var t,i;this.counter++,this.dragStartTime=e.timeStamp,null===(i=(t=this.callbacks).onDragEnter)||void 0===i||i.call(t,e)}))),this._register(D(this.element,xe.DRAG_OVER,(e=>{var t,i;e.preventDefault(),null===(i=(t=this.callbacks).onDragOver)||void 0===i||i.call(t,e,e.timeStamp-this.dragStartTime)}))),this._register(D(this.element,xe.DRAG_LEAVE,(e=>{var t,i;this.counter--,0===this.counter&&(this.dragStartTime=0,null===(i=(t=this.callbacks).onDragLeave)||void 0===i||i.call(t,e))}))),this._register(D(this.element,xe.DRAG_END,(e=>{var t,i;this.counter=0,this.dragStartTime=0,null===(i=(t=this.callbacks).onDragEnd)||void 0===i||i.call(t,e)}))),this._register(D(this.element,xe.DROP,(e=>{var t,i;this.counter=0,this.dragStartTime=0,null===(i=(t=this.callbacks).onDrop)||void 0===i||i.call(t,e)})))}}const Xe=/(?[\w\-]+)?(?:#(?[\w\-]+))?(?(?:\.(?:[\w\-]+))*)(?:@(?(?:[\w\_])+))?/;function Ze(e,...t){let i,n;Array.isArray(t[0])?(i={},n=t[0]):(i=t[0]||{},n=t[1]);const o=Xe.exec(e);if(!o||!o.groups)throw new Error("Bad use of h");const s=o.groups["tag"]||"div",r=document.createElement(s);o.groups["id"]&&(r.id=o.groups["id"]);const a=[];if(o.groups["class"])for(const c of o.groups["class"].split("."))""!==c&&a.push(c);if(void 0!==i.className)for(const c of i.className.split("."))""!==c&&a.push(c);a.length>0&&(r.className=a.join(" "));const l={};if(o.groups["name"]&&(l[o.groups["name"]]=r),n)for(const c of n)c instanceof HTMLElement?r.appendChild(c):"string"===typeof c?r.append(c):"root"in c&&(Object.assign(l,c),r.appendChild(c.root));for(const[c,d]of Object.entries(i))if("className"!==c)if("style"===c)for(const[e,t]of Object.entries(d))r.style.setProperty(Qe(e),"number"===typeof t?t+"px":""+t);else"tabIndex"===c?r.tabIndex=d:r.setAttribute(Qe(c),d.toString());return l["root"]=r,l}function Qe(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}},29739:(e,t,i)=>{"use strict";i.d(t,{Nw:()=>ee,ok:()=>ie,v5:()=>te}); -/*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */ -const{entries:n,setPrototypeOf:o,isFrozen:s,getPrototypeOf:r,getOwnPropertyDescriptor:a}=Object;let{freeze:l,seal:c,create:d}=Object,{apply:u,construct:h}="undefined"!==typeof Reflect&&Reflect;u||(u=function(e,t,i){return e.apply(t,i)}),l||(l=function(e){return e}),c||(c=function(e){return e}),h||(h=function(e,t){return new e(...t)});const g=S(Array.prototype.forEach),p=S(Array.prototype.pop),f=S(Array.prototype.push),m=S(String.prototype.toLowerCase),v=S(String.prototype.toString),_=S(String.prototype.match),b=S(String.prototype.replace),y=S(String.prototype.indexOf),w=S(String.prototype.trim),x=S(RegExp.prototype.test),C=k(TypeError);function S(e){return function(t){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o/gm),z=c(/\${[\w\W]*}/gm),U=c(/^data-[\-\w.\u00B7-\uFFFF]/),q=c(/^aria-[\-\w]+$/),$=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),j=c(/^(?:\w+script|data):/i),K=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),G=c(/^html$/i);var Y=Object.freeze({__proto__:null,MUSTACHE_EXPR:W,ERB_EXPR:V,TMPLIT_EXPR:z,DATA_ATTR:U,ARIA_ATTR:q,IS_ALLOWED_URI:$,IS_SCRIPT_OR_DATA:j,ATTR_WHITESPACE:K,DOCTYPE_NAME:G});const X=()=>"undefined"===typeof window?null:window,Z=function(e,t){if("object"!==typeof e||"function"!==typeof e.createPolicy)return null;let i=null;const n="data-tt-policy-suffix";t&&t.hasAttribute(n)&&(i=t.getAttribute(n));const o="dompurify"+(i?"#"+i:"");try{return e.createPolicy(o,{createHTML(e){return e},createScriptURL(e){return e}})}catch(s){return console.warn("TrustedTypes policy "+o+" could not be created."),null}};function Q(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:X();const t=e=>Q(e);if(t.version="3.0.5",t.removed=[],!e||!e.document||9!==e.document.nodeType)return t.isSupported=!1,t;const i=e.document,o=i.currentScript;let{document:s}=e;const{DocumentFragment:r,HTMLTemplateElement:a,Node:c,Element:d,NodeFilter:u,NamedNodeMap:h=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:S,DOMParser:k,trustedTypes:W}=e,V=d.prototype,z=N(V,"cloneNode"),U=N(V,"nextSibling"),q=N(V,"childNodes"),j=N(V,"parentNode");if("function"===typeof a){const e=s.createElement("template");e.content&&e.content.ownerDocument&&(s=e.content.ownerDocument)}let K,J="";const{implementation:ee,createNodeIterator:te,createDocumentFragment:ie,getElementsByTagName:ne}=s,{importNode:oe}=i;let se={};t.isSupported="function"===typeof n&&"function"===typeof j&&ee&&void 0!==ee.createHTMLDocument;const{MUSTACHE_EXPR:re,ERB_EXPR:ae,TMPLIT_EXPR:le,DATA_ATTR:ce,ARIA_ATTR:de,IS_SCRIPT_OR_DATA:ue,ATTR_WHITESPACE:he}=Y;let{IS_ALLOWED_URI:ge}=Y,pe=null;const fe=L({},[...D,...T,...A,...R,...P]);let me=null;const ve=L({},[...O,...F,...B,...H]);let _e=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),be=null,ye=null,we=!0,xe=!0,Ce=!1,Se=!0,ke=!1,Le=!1,Ee=!1,Ne=!1,De=!1,Te=!1,Ae=!1,Ie=!0,Re=!1;const Me="user-content-";let Pe=!0,Oe=!1,Fe={},Be=null;const He=L({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let We=null;const Ve=L({},["audio","video","img","source","image","track"]);let ze=null;const Ue=L({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",$e="http://www.w3.org/2000/svg",je="http://www.w3.org/1999/xhtml";let Ke=je,Ge=!1,Ye=null;const Xe=L({},[qe,$e,je],v);let Ze;const Qe=["application/xhtml+xml","text/html"],Je="text/html";let et,tt=null;const it=s.createElement("form"),nt=function(e){return e instanceof RegExp||e instanceof Function},ot=function(e){if(!tt||tt!==e){if(e&&"object"===typeof e||(e={}),e=E(e),Ze=Ze=-1===Qe.indexOf(e.PARSER_MEDIA_TYPE)?Je:e.PARSER_MEDIA_TYPE,et="application/xhtml+xml"===Ze?v:m,pe="ALLOWED_TAGS"in e?L({},e.ALLOWED_TAGS,et):fe,me="ALLOWED_ATTR"in e?L({},e.ALLOWED_ATTR,et):ve,Ye="ALLOWED_NAMESPACES"in e?L({},e.ALLOWED_NAMESPACES,v):Xe,ze="ADD_URI_SAFE_ATTR"in e?L(E(Ue),e.ADD_URI_SAFE_ATTR,et):Ue,We="ADD_DATA_URI_TAGS"in e?L(E(Ve),e.ADD_DATA_URI_TAGS,et):Ve,Be="FORBID_CONTENTS"in e?L({},e.FORBID_CONTENTS,et):He,be="FORBID_TAGS"in e?L({},e.FORBID_TAGS,et):{},ye="FORBID_ATTR"in e?L({},e.FORBID_ATTR,et):{},Fe="USE_PROFILES"in e&&e.USE_PROFILES,we=!1!==e.ALLOW_ARIA_ATTR,xe=!1!==e.ALLOW_DATA_ATTR,Ce=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Se=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,ke=e.SAFE_FOR_TEMPLATES||!1,Le=e.WHOLE_DOCUMENT||!1,De=e.RETURN_DOM||!1,Te=e.RETURN_DOM_FRAGMENT||!1,Ae=e.RETURN_TRUSTED_TYPE||!1,Ne=e.FORCE_BODY||!1,Ie=!1!==e.SANITIZE_DOM,Re=e.SANITIZE_NAMED_PROPS||!1,Pe=!1!==e.KEEP_CONTENT,Oe=e.IN_PLACE||!1,ge=e.ALLOWED_URI_REGEXP||$,Ke=e.NAMESPACE||je,_e=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&nt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(_e.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&nt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(_e.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"===typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(_e.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ke&&(xe=!1),Te&&(De=!0),Fe&&(pe=L({},[...P]),me=[],!0===Fe.html&&(L(pe,D),L(me,O)),!0===Fe.svg&&(L(pe,T),L(me,F),L(me,H)),!0===Fe.svgFilters&&(L(pe,A),L(me,F),L(me,H)),!0===Fe.mathMl&&(L(pe,R),L(me,B),L(me,H))),e.ADD_TAGS&&(pe===fe&&(pe=E(pe)),L(pe,e.ADD_TAGS,et)),e.ADD_ATTR&&(me===ve&&(me=E(me)),L(me,e.ADD_ATTR,et)),e.ADD_URI_SAFE_ATTR&&L(ze,e.ADD_URI_SAFE_ATTR,et),e.FORBID_CONTENTS&&(Be===He&&(Be=E(Be)),L(Be,e.FORBID_CONTENTS,et)),Pe&&(pe["#text"]=!0),Le&&L(pe,["html","head","body"]),pe.table&&(L(pe,["tbody"]),delete be.tbody),e.TRUSTED_TYPES_POLICY){if("function"!==typeof e.TRUSTED_TYPES_POLICY.createHTML)throw C('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!==typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw C('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');K=e.TRUSTED_TYPES_POLICY,J=K.createHTML("")}else void 0===K&&(K=Z(W,o)),null!==K&&"string"===typeof J&&(J=K.createHTML(""));l&&l(e),tt=e}},st=L({},["mi","mo","mn","ms","mtext"]),rt=L({},["foreignobject","desc","title","annotation-xml"]),at=L({},["title","style","font","a","script"]),lt=L({},T);L(lt,A),L(lt,I);const ct=L({},R);L(ct,M);const dt=function(e){let t=j(e);t&&t.tagName||(t={namespaceURI:Ke,tagName:"template"});const i=m(e.tagName),n=m(t.tagName);return!!Ye[e.namespaceURI]&&(e.namespaceURI===$e?t.namespaceURI===je?"svg"===i:t.namespaceURI===qe?"svg"===i&&("annotation-xml"===n||st[n]):Boolean(lt[i]):e.namespaceURI===qe?t.namespaceURI===je?"math"===i:t.namespaceURI===$e?"math"===i&&rt[n]:Boolean(ct[i]):e.namespaceURI===je?!(t.namespaceURI===$e&&!rt[n])&&(!(t.namespaceURI===qe&&!st[n])&&(!ct[i]&&(at[i]||!lt[i]))):!("application/xhtml+xml"!==Ze||!Ye[e.namespaceURI]))},ut=function(e){f(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(i){e.remove()}},ht=function(e,i){try{f(t.removed,{attribute:i.getAttributeNode(e),from:i})}catch(n){f(t.removed,{attribute:null,from:i})}if(i.removeAttribute(e),"is"===e&&!me[e])if(De||Te)try{ut(i)}catch(n){}else try{i.setAttribute(e,"")}catch(n){}},gt=function(e){let t,i;if(Ne)e=""+e;else{const t=_(e,/^[\r\n\t ]+/);i=t&&t[0]}"application/xhtml+xml"===Ze&&Ke===je&&(e=''+e+"");const n=K?K.createHTML(e):e;if(Ke===je)try{t=(new k).parseFromString(n,Ze)}catch(r){}if(!t||!t.documentElement){t=ee.createDocument(Ke,"template",null);try{t.documentElement.innerHTML=Ge?J:n}catch(r){}}const o=t.body||t.documentElement;return e&&i&&o.insertBefore(s.createTextNode(i),o.childNodes[0]||null),Ke===je?ne.call(t,Le?"html":"body")[0]:Le?t.documentElement:o},pt=function(e){return te.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,null,!1)},ft=function(e){return e instanceof S&&("string"!==typeof e.nodeName||"string"!==typeof e.textContent||"function"!==typeof e.removeChild||!(e.attributes instanceof h)||"function"!==typeof e.removeAttribute||"function"!==typeof e.setAttribute||"string"!==typeof e.namespaceURI||"function"!==typeof e.insertBefore||"function"!==typeof e.hasChildNodes)},mt=function(e){return"object"===typeof c?e instanceof c:e&&"object"===typeof e&&"number"===typeof e.nodeType&&"string"===typeof e.nodeName},vt=function(e,i,n){se[e]&&g(se[e],(e=>{e.call(t,i,n,tt)}))},_t=function(e){let i;if(vt("beforeSanitizeElements",e,null),ft(e))return ut(e),!0;const n=et(e.nodeName);if(vt("uponSanitizeElement",e,{tagName:n,allowedTags:pe}),e.hasChildNodes()&&!mt(e.firstElementChild)&&(!mt(e.content)||!mt(e.content.firstElementChild))&&x(/<[/\w]/g,e.innerHTML)&&x(/<[/\w]/g,e.textContent))return ut(e),!0;if(!pe[n]||be[n]){if(!be[n]&&yt(n)){if(_e.tagNameCheck instanceof RegExp&&x(_e.tagNameCheck,n))return!1;if(_e.tagNameCheck instanceof Function&&_e.tagNameCheck(n))return!1}if(Pe&&!Be[n]){const t=j(e)||e.parentNode,i=q(e)||e.childNodes;if(i&&t){const n=i.length;for(let o=n-1;o>=0;--o)t.insertBefore(z(i[o],!0),U(e))}}return ut(e),!0}return e instanceof d&&!dt(e)?(ut(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!x(/<\/no(script|embed|frames)/i,e.innerHTML)?(ke&&3===e.nodeType&&(i=e.textContent,i=b(i,re," "),i=b(i,ae," "),i=b(i,le," "),e.textContent!==i&&(f(t.removed,{element:e.cloneNode()}),e.textContent=i)),vt("afterSanitizeElements",e,null),!1):(ut(e),!0)},bt=function(e,t,i){if(Ie&&("id"===t||"name"===t)&&(i in s||i in it))return!1;if(xe&&!ye[t]&&x(ce,t));else if(we&&x(de,t));else if(!me[t]||ye[t]){if(!(yt(e)&&(_e.tagNameCheck instanceof RegExp&&x(_e.tagNameCheck,e)||_e.tagNameCheck instanceof Function&&_e.tagNameCheck(e))&&(_e.attributeNameCheck instanceof RegExp&&x(_e.attributeNameCheck,t)||_e.attributeNameCheck instanceof Function&&_e.attributeNameCheck(t))||"is"===t&&_e.allowCustomizedBuiltInElements&&(_e.tagNameCheck instanceof RegExp&&x(_e.tagNameCheck,i)||_e.tagNameCheck instanceof Function&&_e.tagNameCheck(i))))return!1}else if(ze[t]);else if(x(ge,b(i,he,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(i,"data:")||!We[e]){if(Ce&&!x(ue,b(i,he,"")));else if(i)return!1}else;return!0},yt=function(e){return e.indexOf("-")>0},wt=function(e){let i,n,o,s;vt("beforeSanitizeAttributes",e,null);const{attributes:r}=e;if(!r)return;const a={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};s=r.length;while(s--){i=r[s];const{name:c,namespaceURI:d}=i;if(n="value"===c?i.value:w(i.value),o=et(c),a.attrName=o,a.attrValue=n,a.keepAttr=!0,a.forceKeepAttr=void 0,vt("uponSanitizeAttribute",e,a),n=a.attrValue,a.forceKeepAttr)continue;if(ht(c,e),!a.keepAttr)continue;if(!Se&&x(/\/>/i,n)){ht(c,e);continue}ke&&(n=b(n,re," "),n=b(n,ae," "),n=b(n,le," "));const u=et(e.nodeName);if(bt(u,o,n)){if(!Re||"id"!==o&&"name"!==o||(ht(c,e),n=Me+n),K&&"object"===typeof W&&"function"===typeof W.getAttributeType)if(d);else switch(W.getAttributeType(u,o)){case"TrustedHTML":n=K.createHTML(n);break;case"TrustedScriptURL":n=K.createScriptURL(n);break}try{d?e.setAttributeNS(d,c,n):e.setAttribute(c,n),p(t.removed)}catch(l){}}}vt("afterSanitizeAttributes",e,null)},xt=function e(t){let i;const n=pt(t);vt("beforeSanitizeShadowDOM",t,null);while(i=n.nextNode())vt("uponSanitizeShadowNode",i,null),_t(i)||(i.content instanceof r&&e(i.content),wt(i));vt("afterSanitizeShadowDOM",t,null)};return t.sanitize=function(e){let n,o,s,a,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Ge=!e,Ge&&(e="\x3c!--\x3e"),"string"!==typeof e&&!mt(e)){if("function"!==typeof e.toString)throw C("toString is not a function");if(e=e.toString(),"string"!==typeof e)throw C("dirty is not a string, aborting")}if(!t.isSupported)return e;if(Ee||ot(l),t.removed=[],"string"===typeof e&&(Oe=!1),Oe){if(e.nodeName){const t=et(e.nodeName);if(!pe[t]||be[t])throw C("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof c)n=gt("\x3c!----\x3e"),o=n.ownerDocument.importNode(e,!0),1===o.nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?n=o:n.appendChild(o);else{if(!De&&!ke&&!Le&&-1===e.indexOf("<"))return K&&Ae?K.createHTML(e):e;if(n=gt(e),!n)return De?null:Ae?J:""}n&&Ne&&ut(n.firstChild);const d=pt(Oe?e:n);while(s=d.nextNode())_t(s)||(s.content instanceof r&&xt(s.content),wt(s));if(Oe)return e;if(De){if(Te){a=ie.call(n.ownerDocument);while(n.firstChild)a.appendChild(n.firstChild)}else a=n;return(me.shadowroot||me.shadowrootmode)&&(a=oe.call(i,a,!0)),a}let u=Le?n.outerHTML:n.innerHTML;return Le&&pe["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&x(G,n.ownerDocument.doctype.name)&&(u="\n"+u),ke&&(u=b(u,re," "),u=b(u,ae," "),u=b(u,le," ")),K&&Ae?K.createHTML(u):u},t.setConfig=function(e){ot(e),Ee=!0},t.clearConfig=function(){tt=null,Ee=!1},t.isValidAttribute=function(e,t,i){tt||ot({});const n=et(e),o=et(t);return bt(n,o,i)},t.addHook=function(e,t){"function"===typeof t&&(se[e]=se[e]||[],f(se[e],t))},t.removeHook=function(e){if(se[e])return p(se[e])},t.removeHooks=function(e){se[e]&&(se[e]=[])},t.removeAllHooks=function(){se={}},t}var J=Q();J.version,J.isSupported;const ee=J.sanitize,te=(J.setConfig,J.clearConfig,J.isValidAttribute,J.addHook),ie=J.removeHook;J.removeHooks,J.removeAllHooks},9172:(e,t,i)=>{"use strict";i.d(t,{Y:()=>o});var n=i(11271);class o{get event(){return this.emitter.event}constructor(e,t,i){const o=e=>this.emitter.fire(e);this.emitter=new n.Q5({onWillAddFirstListener:()=>e.addEventListener(t,o,i),onDidRemoveLastListener:()=>e.removeEventListener(t,o,i)})}dispose(){this.emitter.dispose()}}},26090:(e,t,i)=>{"use strict";i.d(t,{X:()=>s,Z:()=>n});class n{constructor(e){this.domNode=e,this._maxWidth="",this._width="",this._height="",this._top="",this._left="",this._bottom="",this._right="",this._paddingLeft="",this._fontFamily="",this._fontWeight="",this._fontSize="",this._fontStyle="",this._fontFeatureSettings="",this._fontVariationSettings="",this._textDecoration="",this._lineHeight="",this._letterSpacing="",this._className="",this._display="",this._position="",this._visibility="",this._color="",this._backgroundColor="",this._layerHint=!1,this._contain="none",this._boxShadow=""}setMaxWidth(e){const t=o(e);this._maxWidth!==t&&(this._maxWidth=t,this.domNode.style.maxWidth=this._maxWidth)}setWidth(e){const t=o(e);this._width!==t&&(this._width=t,this.domNode.style.width=this._width)}setHeight(e){const t=o(e);this._height!==t&&(this._height=t,this.domNode.style.height=this._height)}setTop(e){const t=o(e);this._top!==t&&(this._top=t,this.domNode.style.top=this._top)}setLeft(e){const t=o(e);this._left!==t&&(this._left=t,this.domNode.style.left=this._left)}setBottom(e){const t=o(e);this._bottom!==t&&(this._bottom=t,this.domNode.style.bottom=this._bottom)}setRight(e){const t=o(e);this._right!==t&&(this._right=t,this.domNode.style.right=this._right)}setPaddingLeft(e){const t=o(e);this._paddingLeft!==t&&(this._paddingLeft=t,this.domNode.style.paddingLeft=this._paddingLeft)}setFontFamily(e){this._fontFamily!==e&&(this._fontFamily=e,this.domNode.style.fontFamily=this._fontFamily)}setFontWeight(e){this._fontWeight!==e&&(this._fontWeight=e,this.domNode.style.fontWeight=this._fontWeight)}setFontSize(e){const t=o(e);this._fontSize!==t&&(this._fontSize=t,this.domNode.style.fontSize=this._fontSize)}setFontStyle(e){this._fontStyle!==e&&(this._fontStyle=e,this.domNode.style.fontStyle=this._fontStyle)}setFontFeatureSettings(e){this._fontFeatureSettings!==e&&(this._fontFeatureSettings=e,this.domNode.style.fontFeatureSettings=this._fontFeatureSettings)}setFontVariationSettings(e){this._fontVariationSettings!==e&&(this._fontVariationSettings=e,this.domNode.style.fontVariationSettings=this._fontVariationSettings)}setTextDecoration(e){this._textDecoration!==e&&(this._textDecoration=e,this.domNode.style.textDecoration=this._textDecoration)}setLineHeight(e){const t=o(e);this._lineHeight!==t&&(this._lineHeight=t,this.domNode.style.lineHeight=this._lineHeight)}setLetterSpacing(e){const t=o(e);this._letterSpacing!==t&&(this._letterSpacing=t,this.domNode.style.letterSpacing=this._letterSpacing)}setClassName(e){this._className!==e&&(this._className=e,this.domNode.className=this._className)}toggleClassName(e,t){this.domNode.classList.toggle(e,t),this._className=this.domNode.className}setDisplay(e){this._display!==e&&(this._display=e,this.domNode.style.display=this._display)}setPosition(e){this._position!==e&&(this._position=e,this.domNode.style.position=this._position)}setVisibility(e){this._visibility!==e&&(this._visibility=e,this.domNode.style.visibility=this._visibility)}setColor(e){this._color!==e&&(this._color=e,this.domNode.style.color=this._color)}setBackgroundColor(e){this._backgroundColor!==e&&(this._backgroundColor=e,this.domNode.style.backgroundColor=this._backgroundColor)}setLayerHinting(e){this._layerHint!==e&&(this._layerHint=e,this.domNode.style.transform=this._layerHint?"translate3d(0px, 0px, 0px)":"")}setBoxShadow(e){this._boxShadow!==e&&(this._boxShadow=e,this.domNode.style.boxShadow=e)}setContain(e){this._contain!==e&&(this._contain=e,this.domNode.style.contain=this._contain)}setAttribute(e,t){this.domNode.setAttribute(e,t)}removeAttribute(e){this.domNode.removeAttribute(e)}appendChild(e){this.domNode.appendChild(e.domNode)}removeChild(e){this.domNode.removeChild(e.domNode)}}function o(e){return"number"===typeof e?`${e}px`:e}function s(e){return new n(e)}},73228:(e,t,i)=>{"use strict";i.d(t,{BO:()=>s,IY:()=>o,az:()=>r});var n=i(2548);function o(e,t={}){const i=r(t);return i.textContent=e,i}function s(e,t={}){const i=r(t);return l(i,c(e,!!t.renderCodeSegments),t.actionHandler,t.renderCodeSegments),i}function r(e){const t=e.inline?"span":"div",i=document.createElement(t);return e.className&&(i.className=e.className),i}class a{constructor(e){this.source=e,this.index=0}eos(){return this.index>=this.source.length}next(){const e=this.peek();return this.advance(),e}peek(){return this.source[this.index]}advance(){this.index++}}function l(e,t,i,o){let s;if(2===t.type)s=document.createTextNode(t.content||"");else if(3===t.type)s=document.createElement("b");else if(4===t.type)s=document.createElement("i");else if(7===t.type&&o)s=document.createElement("code");else if(5===t.type&&i){const e=document.createElement("a");i.disposables.add(n.mu(e,"click",(e=>{i.callback(String(t.index),e)}))),s=e}else 8===t.type?s=document.createElement("br"):1===t.type&&(s=e);s&&e!==s&&e.appendChild(s),s&&Array.isArray(t.children)&&t.children.forEach((e=>{l(s,e,i,o)}))}function c(e,t){const i={type:1,children:[]};let n=0,o=i;const s=[],r=new a(e);while(!r.eos()){let e=r.next();const i="\\"===e&&0!==u(r.peek(),t);if(i&&(e=r.next()),!i&&d(e,t)&&e===r.peek()){r.advance(),2===o.type&&(o=s.pop());const i=u(e,t);if(o.type===i||5===o.type&&6===i)o=s.pop();else{const e={type:i,children:[]};5===i&&(e.index=n,n++),o.children.push(e),s.push(o),o=e}}else if("\n"===e)2===o.type&&(o=s.pop()),o.children.push({type:8});else if(2!==o.type){const t={type:2,content:e};o.children.push(t),s.push(o),o=t}else o.content+=e}return 2===o.type&&(o=s.pop()),s.length,i}function d(e,t){return 0!==u(e,t)}function u(e,t){switch(e){case"*":return 3;case"_":return 4;case"[":return 5;case"]":return 6;case"`":return t?7:0;default:return 0}}},75853:(e,t,i)=>{"use strict";i.d(t,{C:()=>s});var n=i(2548),o=i(70959);class s{constructor(){this._hooks=new o.SL,this._pointerMoveCallback=null,this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(e,t){if(!this.isMonitoring())return;this._hooks.clear(),this._pointerMoveCallback=null;const i=this._onStopCallback;this._onStopCallback=null,e&&i&&i(t)}isMonitoring(){return!!this._pointerMoveCallback}startMonitoring(e,t,i,s,r){this.isMonitoring()&&this.stopMonitoring(!1),this._pointerMoveCallback=s,this._onStopCallback=r;let a=e;try{e.setPointerCapture(t),this._hooks.add((0,o.OF)((()=>{try{e.releasePointerCapture(t)}catch(i){}})))}catch(l){a=n.Jj(e)}this._hooks.add(n.nm(a,n.tw.POINTER_MOVE,(e=>{e.buttons===i?(e.preventDefault(),this._pointerMoveCallback(e)):this.stopMonitoring(!0)}))),this._hooks.add(n.nm(a,n.tw.POINTER_UP,(e=>this.stopMonitoring(!0))))}}},45429:(e,t,i)=>{"use strict";i.d(t,{y:()=>h});var n=i(90882),o=i(56082),s=i(19321),r=i(47606);function a(e){if(e.charCode){const t=String.fromCharCode(e.charCode).toUpperCase();return o.kL.fromString(t)}const t=e.keyCode;if(3===t)return 7;if(n.vU)switch(t){case 59:return 85;case 60:if(r.IJ)return 97;break;case 61:return 86;case 107:return 109;case 109:return 111;case 173:return 88;case 224:if(r.dz)return 57;break}else if(n.Pf){if(r.dz&&93===t)return 57;if(!r.dz&&92===t)return 57}return o.H_[t]||0}const l=r.dz?256:2048,c=512,d=1024,u=r.dz?2048:256;class h{constructor(e){this._standardKeyboardEventBrand=!0;const t=e;this.browserEvent=t,this.target=t.target,this.ctrlKey=t.ctrlKey,this.shiftKey=t.shiftKey,this.altKey=t.altKey,this.metaKey=t.metaKey,this.altGraphKey=t.getModifierState("AltGraph"),this.keyCode=a(t),this.code=t.code,this.ctrlKey=this.ctrlKey||5===this.keyCode,this.altKey=this.altKey||6===this.keyCode,this.shiftKey=this.shiftKey||4===this.keyCode,this.metaKey=this.metaKey||57===this.keyCode,this._asKeybinding=this._computeKeybinding(),this._asKeyCodeChord=this._computeKeyCodeChord()}preventDefault(){this.browserEvent&&this.browserEvent.preventDefault&&this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent&&this.browserEvent.stopPropagation&&this.browserEvent.stopPropagation()}toKeyCodeChord(){return this._asKeyCodeChord}equals(e){return this._asKeybinding===e}_computeKeybinding(){let e=0;5!==this.keyCode&&4!==this.keyCode&&6!==this.keyCode&&57!==this.keyCode&&(e=this.keyCode);let t=0;return this.ctrlKey&&(t|=l),this.altKey&&(t|=c),this.shiftKey&&(t|=d),this.metaKey&&(t|=u),t|=e,t}_computeKeyCodeChord(){let e=0;return 5!==this.keyCode&&4!==this.keyCode&&6!==this.keyCode&&57!==this.keyCode&&(e=this.keyCode),new s.$M(this.ctrlKey,this.shiftKey,this.altKey,this.metaKey,e)}}},98162:(e,t,i)=>{"use strict";i.d(t,{ap:()=>L,et:()=>I});var n=i(2548),o=i(29739),s=i(9172),r=i(73228),a=i(45429),l=i(75467),c=i(66426),d=i(98642),u=i(11271),h=i(81478),g=i(96559),p=i(58247),f=i(21815),m=i(70959);let v={};(function(){function e(e,t){t(v)}e.amd=!0,function(t,i){"function"===typeof e&&e.amd?e(["exports"],i):"object"===typeof exports?i(exports):(t="undefined"!==typeof globalThis?globalThis:t||self,i(t.marked={}))}(this,(function(e){function t(e,t){for(var i=0;ie.length)&&(t=e.length);for(var i=0,n=new Array(t);i=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}function a(t){e.defaults=t}e.defaults=r();var l=/[&<>"']/,c=/[&<>"']/g,d=/[<>"']|&(?!#?\w+;)/,u=/[<>"']|&(?!#?\w+;)/g,h={"&":"&","<":"<",">":">",'"':""","'":"'"},g=function(e){return h[e]};function p(e,t){if(t){if(l.test(e))return e.replace(c,g)}else if(d.test(e))return e.replace(u,g);return e}var f=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function m(e){return e.replace(f,(function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var v=/(^|[^\[])\^/g;function _(e,t){e="string"===typeof e?e:e.source,t=t||"";var i={replace:function(t,n){return n=n.source||n,n=n.replace(v,"$1"),e=e.replace(t,n),i},getRegex:function(){return new RegExp(e,t)}};return i}var b=/[^\w:]/g,y=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function w(e,t,i){if(e){var n;try{n=decodeURIComponent(m(i)).replace(b,"").toLowerCase()}catch(o){return null}if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}t&&!y.test(i)&&(i=L(t,i));try{i=encodeURI(i).replace(/%25/g,"%")}catch(o){return null}return i}var x={},C=/^[^:]+:\/*[^/]*$/,S=/^([^:]+:)[\s\S]*$/,k=/^([^:]+:\/*[^/]*)[\s\S]*$/;function L(e,t){x[" "+e]||(C.test(e)?x[" "+e]=e+"/":x[" "+e]=T(e,"/",!0)),e=x[" "+e];var i=-1===e.indexOf(":");return"//"===t.substring(0,2)?i?t:e.replace(S,"$1")+t:"/"===t.charAt(0)?i?t:e.replace(k,"$1")+t:e+t}var E={exec:function(){}};function N(e){for(var t,i,n=1;n=0&&"\\"===i[o])n=!n;return n?"|":" |"})),n=i.split(/ \|/),o=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),n.length>t)n.splice(t);else while(n.length1)1&t&&(i+=e),t>>=1,e+=e;return i+e}function M(e,t,i,n){var o=t.href,s=t.title?p(t.title):null,r=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){n.state.inLink=!0;var a={type:"link",raw:i,href:o,title:s,text:r,tokens:n.inlineTokens(r)};return n.state.inLink=!1,a}return{type:"image",raw:i,href:o,title:s,text:p(r)}}function P(e,t){var i=e.match(/^(\s+)(?:```)/);if(null===i)return t;var n=i[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);if(null===t)return e;var i=t[0];return i.length>=n.length?e.slice(n.length):e})).join("\n")}var O=function(){function t(t){this.options=t||e.defaults}var i=t.prototype;return i.space=function(e){var t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}},i.code=function(e){var t=this.rules.block.code.exec(e);if(t){var i=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?i:T(i,"\n")}}},i.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var i=t[0],n=P(i,t[3]||"");return{type:"code",raw:i,lang:t[2]?t[2].trim():t[2],text:n}}},i.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var i=t[2].trim();if(/#$/.test(i)){var n=T(i,"#");this.options.pedantic?i=n.trim():n&&!/ $/.test(n)||(i=n.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:i,tokens:this.lexer.inline(i)}}},i.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},i.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var i=t[0].replace(/^ *>[ \t]?/gm,"");return{type:"blockquote",raw:t[0],tokens:this.lexer.blockTokens(i,[]),text:i}}},i.list=function(e){var t=this.rules.block.list.exec(e);if(t){var i,n,o,r,a,l,c,d,u,h,g,p,f=t[1].trim(),m=f.length>1,v={type:"list",raw:"",ordered:m,start:m?+f.slice(0,-1):"",loose:!1,items:[]};f=m?"\\d{1,9}\\"+f.slice(-1):"\\"+f,this.options.pedantic&&(f=m?f:"[*+-]");var _=new RegExp("^( {0,3}"+f+")((?:[\t ][^\\n]*)?(?:\\n|$))");while(e){if(p=!1,!(t=_.exec(e)))break;if(this.rules.block.hr.test(e))break;if(i=t[0],e=e.substring(i.length),d=t[2].split("\n",1)[0],u=e.split("\n",1)[0],this.options.pedantic?(r=2,g=d.trimLeft()):(r=t[2].search(/[^ ]/),r=r>4?1:r,g=d.slice(r),r+=t[1].length),l=!1,!d&&/^ *$/.test(u)&&(i+=u+"\n",e=e.substring(u.length+1),p=!0),!p){var b=new RegExp("^ {0,"+Math.min(3,r-1)+"}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))"),y=new RegExp("^ {0,"+Math.min(3,r-1)+"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"),w=new RegExp("^ {0,"+Math.min(3,r-1)+"}(?:```|~~~)"),x=new RegExp("^ {0,"+Math.min(3,r-1)+"}#");while(e){if(h=e.split("\n",1)[0],d=h,this.options.pedantic&&(d=d.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),w.test(d))break;if(x.test(d))break;if(b.test(d))break;if(y.test(e))break;if(d.search(/[^ ]/)>=r||!d.trim())g+="\n"+d.slice(r);else{if(l)break;g+="\n"+d}l||d.trim()||(l=!0),i+=h+"\n",e=e.substring(h.length+1)}}v.loose||(c?v.loose=!0:/\n *\n *$/.test(i)&&(c=!0)),this.options.gfm&&(n=/^\[[ xX]\] /.exec(g),n&&(o="[ ] "!==n[0],g=g.replace(/^\[[ xX]\] +/,""))),v.items.push({type:"list_item",raw:i,task:!!n,checked:o,loose:!1,text:g}),v.raw+=i}v.items[v.items.length-1].raw=i.trimRight(),v.items[v.items.length-1].text=g.trimRight(),v.raw=v.raw.trimRight();var C=v.items.length;for(a=0;a1)return!0}return!1}));!v.loose&&S.length&&k&&(v.loose=!0,v.items[a].loose=!0)}return v}},i.html=function(e){var t=this.rules.block.html.exec(e);if(t){var i={type:"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:t[0]};if(this.options.sanitize){var n=this.options.sanitizer?this.options.sanitizer(t[0]):p(t[0]);i.type="paragraph",i.text=n,i.tokens=this.lexer.inline(n)}return i}},i.def=function(e){var t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));var i=t[1].toLowerCase().replace(/\s+/g," ");return{type:"def",tag:i,raw:t[0],href:t[2],title:t[3]}}},i.table=function(e){var t=this.rules.block.table.exec(e);if(t){var i={type:"table",header:D(t[1]).map((function(e){return{text:e}})),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(i.header.length===i.align.length){i.raw=t[0];var n,o,s,r,a=i.align.length;for(n=0;n/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):p(t[0]):t[0]}},i.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var i=t[2].trim();if(!this.options.pedantic&&/^$/.test(i))return;var n=T(i.slice(0,-1),"\\");if((i.length-n.length)%2===0)return}else{var o=A(t[2],"()");if(o>-1){var s=0===t[0].indexOf("!")?5:4,r=s+t[1].length+o;t[2]=t[2].substring(0,o),t[0]=t[0].substring(0,r).trim(),t[3]=""}}var a=t[2],l="";if(this.options.pedantic){var c=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(a);c&&(a=c[1],l=c[3])}else l=t[3]?t[3].slice(1,-1):"";return a=a.trim(),/^$/.test(i)?a.slice(1):a.slice(1,-1)),M(t,{href:a?a.replace(this.rules.inline._escapes,"$1"):a,title:l?l.replace(this.rules.inline._escapes,"$1"):l},t[0],this.lexer)}},i.reflink=function(e,t){var i;if((i=this.rules.inline.reflink.exec(e))||(i=this.rules.inline.nolink.exec(e))){var n=(i[2]||i[1]).replace(/\s+/g," ");if(n=t[n.toLowerCase()],!n||!n.href){var o=i[0].charAt(0);return{type:"text",raw:o,text:o}}return M(i,n,i[0],this.lexer)}},i.emStrong=function(e,t,i){void 0===i&&(i="");var n=this.rules.inline.emStrong.lDelim.exec(e);if(n&&(!n[3]||!i.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var o=n[1]||n[2]||"";if(!o||o&&(""===i||this.rules.inline.punctuation.exec(i))){var s,r,a=n[0].length-1,l=a,c=0,d="*"===n[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;d.lastIndex=0,t=t.slice(-1*e.length+a);while(null!=(n=d.exec(t)))if(s=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],s)if(r=s.length,n[3]||n[4])l+=r;else if(!((n[5]||n[6])&&a%3)||(a+r)%3){if(l-=r,!(l>0)){if(r=Math.min(r,r+l+c),Math.min(a,r)%2){var u=e.slice(1,a+n.index+r);return{type:"em",raw:e.slice(0,a+n.index+r+1),text:u,tokens:this.lexer.inlineTokens(u)}}var h=e.slice(2,a+n.index+r-1);return{type:"strong",raw:e.slice(0,a+n.index+r+1),text:h,tokens:this.lexer.inlineTokens(h)}}}else c+=r}}},i.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var i=t[2].replace(/\n/g," "),n=/[^ ]/.test(i),o=/^ /.test(i)&&/ $/.test(i);return n&&o&&(i=i.substring(1,i.length-1)),i=p(i,!0),{type:"codespan",raw:t[0],text:i}}},i.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},i.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}},i.autolink=function(e,t){var i,n,o=this.rules.inline.autolink.exec(e);if(o)return"@"===o[2]?(i=p(this.options.mangle?t(o[1]):o[1]),n="mailto:"+i):(i=p(o[1]),n=i),{type:"link",raw:o[0],text:i,href:n,tokens:[{type:"text",raw:i,text:i}]}},i.url=function(e,t){var i;if(i=this.rules.inline.url.exec(e)){var n,o;if("@"===i[2])n=p(this.options.mangle?t(i[0]):i[0]),o="mailto:"+n;else{var s;do{s=i[0],i[0]=this.rules.inline._backpedal.exec(i[0])[0]}while(s!==i[0]);n=p(i[0]),o="www."===i[1]?"http://"+n:n}return{type:"link",raw:i[0],text:n,href:o,tokens:[{type:"text",raw:n,text:n}]}}},i.inlineText=function(e,t){var i,n=this.rules.inline.text.exec(e);if(n)return i=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(n[0]):p(n[0]):n[0]:p(this.options.smartypants?t(n[0]):n[0]),{type:"text",raw:n[0],text:i}},t}(),F={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:E,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};F.def=_(F.def).replace("label",F._label).replace("title",F._title).getRegex(),F.bullet=/(?:[*+-]|\d{1,9}[.)])/,F.listItemStart=_(/^( *)(bull) */).replace("bull",F.bullet).getRegex(),F.list=_(F.list).replace(/bull/g,F.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+F.def.source+")").getRegex(),F._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",F._comment=/|$)/,F.html=_(F.html,"i").replace("comment",F._comment).replace("tag",F._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),F.paragraph=_(F._paragraph).replace("hr",F.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",F._tag).getRegex(),F.blockquote=_(F.blockquote).replace("paragraph",F.paragraph).getRegex(),F.normal=N({},F),F.gfm=N({},F.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),F.gfm.table=_(F.gfm.table).replace("hr",F.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",F._tag).getRegex(),F.gfm.paragraph=_(F._paragraph).replace("hr",F.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",F.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",F._tag).getRegex(),F.pedantic=N({},F.normal,{html:_("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",F._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:E,paragraph:_(F.normal._paragraph).replace("hr",F.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",F.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var B={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:E,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:E,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\.5&&(i="x"+i.toString(16)),n+="&#"+i+";";return n}B._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",B.punctuation=_(B.punctuation).replace(/punctuation/g,B._punctuation).getRegex(),B.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,B.escapedEmSt=/\\\*|\\_/g,B._comment=_(F._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),B.emStrong.lDelim=_(B.emStrong.lDelim).replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimAst=_(B.emStrong.rDelimAst,"g").replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimUnd=_(B.emStrong.rDelimUnd,"g").replace(/punct/g,B._punctuation).getRegex(),B._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,B._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,B._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,B.autolink=_(B.autolink).replace("scheme",B._scheme).replace("email",B._email).getRegex(),B._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,B.tag=_(B.tag).replace("comment",B._comment).replace("attribute",B._attribute).getRegex(),B._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,B._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,B._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,B.link=_(B.link).replace("label",B._label).replace("href",B._href).replace("title",B._title).getRegex(),B.reflink=_(B.reflink).replace("label",B._label).replace("ref",F._label).getRegex(),B.nolink=_(B.nolink).replace("ref",F._label).getRegex(),B.reflinkSearch=_(B.reflinkSearch,"g").replace("reflink",B.reflink).replace("nolink",B.nolink).getRegex(),B.normal=N({},B),B.pedantic=N({},B.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:_(/^!?\[(label)\]\((.*?)\)/).replace("label",B._label).getRegex(),reflink:_(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",B._label).getRegex()}),B.gfm=N({},B.normal,{escape:_(B.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\0?t[t.length-1].raw+="\n":t.push(i);else if(i=this.tokenizer.code(e))e=e.substring(i.raw.length),n=t[t.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?t.push(i):(n.raw+="\n"+i.raw,n.text+="\n"+i.text,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(i=this.tokenizer.fences(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.heading(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.hr(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.blockquote(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.list(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.html(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.def(e))e=e.substring(i.raw.length),n=t[t.length-1],!n||"paragraph"!==n.type&&"text"!==n.type?this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title}):(n.raw+="\n"+i.raw,n.text+="\n"+i.raw,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(i=this.tokenizer.table(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.lheading(e))e=e.substring(i.raw.length),t.push(i);else if(o=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=1/0,i=e.slice(1),n=void 0;r.options.extensions.startBlock.forEach((function(e){n=e.call({lexer:this},i),"number"===typeof n&&n>=0&&(t=Math.min(t,n))})),t<1/0&&t>=0&&(o=e.substring(0,t+1))}(),this.state.top&&(i=this.tokenizer.paragraph(o)))n=t[t.length-1],s&&"paragraph"===n.type?(n.raw+="\n"+i.raw,n.text+="\n"+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):t.push(i),s=o.length!==e.length,e=e.substring(i.raw.length);else if(i=this.tokenizer.text(e))e=e.substring(i.raw.length),n=t[t.length-1],n&&"text"===n.type?(n.raw+="\n"+i.raw,n.text+="\n"+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):t.push(i);else if(e){var a="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(a);break}throw new Error(a)}return this.state.top=!0,t},n.inline=function(e,t){return void 0===t&&(t=[]),this.inlineQueue.push({src:e,tokens:t}),t},n.inlineTokens=function(e,t){var i,n,o,s=this;void 0===t&&(t=[]);var r,a,l,c=e;if(this.tokens.links){var d=Object.keys(this.tokens.links);if(d.length>0)while(null!=(r=this.tokenizer.rules.inline.reflinkSearch.exec(c)))d.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,r.index)+"["+R("a",r[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}while(null!=(r=this.tokenizer.rules.inline.blockSkip.exec(c)))c=c.slice(0,r.index)+"["+R("a",r[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);while(null!=(r=this.tokenizer.rules.inline.escapedEmSt.exec(c)))c=c.slice(0,r.index)+"++"+c.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);while(e)if(a||(l=""),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(n){return!!(i=n.call({lexer:s},e,t))&&(e=e.substring(i.raw.length),t.push(i),!0)}))))if(i=this.tokenizer.escape(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.tag(e))e=e.substring(i.raw.length),n=t[t.length-1],n&&"text"===i.type&&"text"===n.type?(n.raw+=i.raw,n.text+=i.text):t.push(i);else if(i=this.tokenizer.link(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(i.raw.length),n=t[t.length-1],n&&"text"===i.type&&"text"===n.type?(n.raw+=i.raw,n.text+=i.text):t.push(i);else if(i=this.tokenizer.emStrong(e,c,l))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.codespan(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.br(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.del(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.autolink(e,W))e=e.substring(i.raw.length),t.push(i);else if(this.state.inLink||!(i=this.tokenizer.url(e,W))){if(o=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=1/0,i=e.slice(1),n=void 0;s.options.extensions.startInline.forEach((function(e){n=e.call({lexer:this},i),"number"===typeof n&&n>=0&&(t=Math.min(t,n))})),t<1/0&&t>=0&&(o=e.substring(0,t+1))}(),i=this.tokenizer.inlineText(o,H))e=e.substring(i.raw.length),"_"!==i.raw.slice(-1)&&(l=i.raw.slice(-1)),a=!0,n=t[t.length-1],n&&"text"===n.type?(n.raw+=i.raw,n.text+=i.text):t.push(i);else if(e){var u="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(u);break}throw new Error(u)}}else e=e.substring(i.raw.length),t.push(i);return t},i(t,null,[{key:"rules",get:function(){return{block:F,inline:B}}}]),t}(),z=function(){function t(t){this.options=t||e.defaults}var i=t.prototype;return i.code=function(e,t,i){var n=(t||"").match(/\S*/)[0];if(this.options.highlight){var o=this.options.highlight(e,n);null!=o&&o!==e&&(i=!0,e=o)}return e=e.replace(/\n$/,"")+"\n",n?'
    '+(i?e:p(e,!0))+"
    \n":"
    "+(i?e:p(e,!0))+"
    \n"},i.blockquote=function(e){return"
    \n"+e+"
    \n"},i.html=function(e){return e},i.heading=function(e,t,i,n){if(this.options.headerIds){var o=this.options.headerPrefix+n.slug(i);return"'+e+"\n"}return""+e+"\n"},i.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},i.list=function(e,t,i){var n=t?"ol":"ul",o=t&&1!==i?' start="'+i+'"':"";return"<"+n+o+">\n"+e+"\n"},i.listitem=function(e){return"
  • "+e+"
  • \n"},i.checkbox=function(e){return" "},i.paragraph=function(e){return"

    "+e+"

    \n"},i.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},i.tablerow=function(e){return"\n"+e+"\n"},i.tablecell=function(e,t){var i=t.header?"th":"td",n=t.align?"<"+i+' align="'+t.align+'">':"<"+i+">";return n+e+"\n"},i.strong=function(e){return""+e+""},i.em=function(e){return""+e+""},i.codespan=function(e){return""+e+""},i.br=function(){return this.options.xhtml?"
    ":"
    "},i.del=function(e){return""+e+""},i.link=function(e,t,i){if(e=w(this.options.sanitize,this.options.baseUrl,e),null===e)return i;var n='
    ",n},i.image=function(e,t,i){if(e=w(this.options.sanitize,this.options.baseUrl,e),null===e)return i;var n=''+i+'":">",n},i.text=function(e){return e},t}(),U=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,i){return""+i},t.image=function(e,t,i){return""+i},t.br=function(){return""},e}(),q=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var i=e,n=0;if(this.seen.hasOwnProperty(i)){n=this.seen[e];do{n++,i=e+"-"+n}while(this.seen.hasOwnProperty(i))}return t||(this.seen[e]=n,this.seen[i]=0),i},t.slug=function(e,t){void 0===t&&(t={});var i=this.serialize(e);return this.getNextSafeSlug(i,t.dryrun)},e}(),$=function(){function t(t){this.options=t||e.defaults,this.options.renderer=this.options.renderer||new z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new U,this.slugger=new q}t.parse=function(e,i){var n=new t(i);return n.parse(e)},t.parseInline=function(e,i){var n=new t(i);return n.parseInline(e)};var i=t.prototype;return i.parse=function(e,t){void 0===t&&(t=!0);var i,n,o,s,r,a,l,c,d,u,h,g,p,f,v,_,b,y,w,x="",C=e.length;for(i=0;i0&&"paragraph"===v.tokens[0].type?(v.tokens[0].text=y+" "+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&"text"===v.tokens[0].tokens[0].type&&(v.tokens[0].tokens[0].text=y+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:y}):f+=y),f+=this.parse(v.tokens,p),d+=this.renderer.listitem(f,b,_);x+=this.renderer.list(d,h,g);continue;case"html":x+=this.renderer.html(u.text);continue;case"paragraph":x+=this.renderer.paragraph(this.parseInline(u.tokens));continue;case"text":d=u.tokens?this.parseInline(u.tokens):u.text;while(i+1An error occurred:

    "+p(e.message+"",!0)+"
    ";throw e}try{var l=V.lex(e,t);if(t.walkTokens){if(t.async)return Promise.all(j.walkTokens(l,t.walkTokens)).then((function(){return $.parse(l,t)}))["catch"](a);j.walkTokens(l,t.walkTokens)}return $.parse(l,t)}catch(c){a(c)}}j.options=j.setOptions=function(e){return N(j.defaults,e),a(j.defaults),j},j.getDefaults=r,j.defaults=e.defaults,j.use=function(){for(var e=arguments.length,t=new Array(e),i=0;iAn error occurred:

    "+p(n.message+"",!0)+"
    ";throw n}},j.Parser=$,j.parser=$.parse,j.Renderer=z,j.TextRenderer=U,j.Lexer=V,j.lexer=V.lex,j.Tokenizer=O,j.Slugger=q,j.parse=j;var K=j.options,G=j.setOptions,Y=j.use,X=j.walkTokens,Z=j.parseInline,Q=j,J=$.parse,ee=V.lex;e.Lexer=V,e.Parser=$,e.Renderer=z,e.Slugger=q,e.TextRenderer=U,e.Tokenizer=O,e.getDefaults=r,e.lexer=ee,e.marked=j,e.options=K,e.parse=Q,e.parseInline=Z,e.parser=J,e.setOptions=G,e.use=Y,e.walkTokens=X,Object.defineProperty(e,"__esModule",{value:!0})}))})();v.Lexer||exports.Lexer,v.Parser||exports.Parser,v.Renderer||exports.Renderer,v.Slugger||exports.Slugger,v.TextRenderer||exports.TextRenderer,v.Tokenizer||exports.Tokenizer,v.getDefaults||exports.getDefaults,v.lexer||exports.lexer;var _=v.marked||exports.marked,b=(v.options||exports.options,v.parse||exports.parse,v.parseInline||exports.parseInline,v.parser||exports.parser,v.setOptions||exports.setOptions,v.use||exports.use,v.walkTokens||exports.walkTokens,i(79247)),y=i(50200),w=i(2179),x=i(21230),C=i(61720),S=i(95896);const k=Object.freeze({image:(e,t,i)=>{let n=[],o=[];return e&&(({href:e,dimensions:n}=(0,h.v1)(e)),o.push(`src="${(0,h.d9)(e)}"`)),i&&o.push(`alt="${(0,h.d9)(i)}"`),t&&o.push(`title="${(0,h.d9)(t)}"`),n.length&&(o=o.concat(n)),""},paragraph:e=>`

    ${e}

    `,link:(e,t,i)=>"string"!==typeof e?"":(e===i&&(i=(0,h.oR)(i)),t="string"===typeof t?(0,h.d9)((0,h.oR)(t)):"",e=(0,h.oR)(e),e=e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),`
    ${i}`)});function L(e,t={},i={}){var o,h;const f=new m.SL;let v=!1;const x=(0,r.az)(t),L=function(t){let i;try{i=(0,b.Qc)(decodeURIComponent(t))}catch(n){}return i?(i=(0,w.rs)(i,(t=>e.uris&&e.uris[t]?S.o.revive(e.uris[t]):void 0)),encodeURIComponent(JSON.stringify(i))):t},T=function(t,i){const n=e.uris&&e.uris[t];let o=S.o.revive(n);return i?t.startsWith(y.lg.data+":")?t:(o||(o=S.o.parse(t)),y.Gi.uriToBrowserUri(o).toString(!0)):o?S.o.parse(t).toString()===o.toString()?t:(o.query&&(o=o.with({query:L(o.query)})),o.toString()):t},A=new _.Renderer;A.image=k.image,A.link=k.link,A.paragraph=k.paragraph;const I=[],R=[];if(t.codeBlockRendererSync?A.code=(e,i)=>{const n=p.a.nextId(),o=t.codeBlockRendererSync(E(i),e);return R.push([n,o]),`
    ${(0,C.YU)(e)}
    `}:t.codeBlockRenderer&&(A.code=(e,i)=>{const n=p.a.nextId(),o=t.codeBlockRenderer(E(i),e);return I.push(o.then((e=>[n,e]))),`
    ${(0,C.YU)(e)}
    `}),t.actionHandler){const i=function(i){let n=i.target;if("A"===n.tagName||(n=n.parentElement,n&&"A"===n.tagName))try{let o=n.dataset["href"];o&&(e.baseUri&&(o=N(S.o.from(e.baseUri),o)),t.actionHandler.callback(o,i))}catch(o){(0,d.dL)(o)}finally{i.preventDefault()}},o=t.actionHandler.disposables.add(new s.Y(x,"click")),r=t.actionHandler.disposables.add(new s.Y(x,"auxclick"));t.actionHandler.disposables.add(u.ju.any(o.event,r.event)((e=>{const t=new l.n(n.Jj(x),e);(t.leftButton||t.middleButton)&&i(t)}))),t.actionHandler.disposables.add(n.nm(x,"keydown",(e=>{const t=new a.y(e);(t.equals(10)||t.equals(3))&&i(t)})))}e.supportHtml||(i.sanitizer=t=>{const i=e.isTrusted?t.match(/^(]+>)|(<\/\s*span>)$/):void 0;return i?t:""},i.sanitize=!0,i.silent=!0),i.renderer=A;let M,P=null!==(o=e.value)&&void 0!==o?o:"";if(P.length>1e5&&(P=`${P.substr(0,1e5)}…`),e.supportThemeIcons&&(P=(0,g.f$)(P)),t.fillInIncompleteTokens){const e={..._.defaults,...i},t=_.lexer(P,e),n=B(t);M=_.parser(n,e)}else M=_.parse(P,i);if(e.supportThemeIcons){const e=(0,c.T)(M);M=e.map((e=>"string"===typeof e?e:e.outerHTML)).join("")}const O=new DOMParser,F=O.parseFromString(D(e,M),"text/html");if(F.body.querySelectorAll("img").forEach((t=>{const i=t.getAttribute("src");if(i){let o=i;try{e.baseUri&&(o=N(S.o.from(e.baseUri),o))}catch(n){}t.src=T(o,!0)}})),F.body.querySelectorAll("a").forEach((t=>{const i=t.getAttribute("href");if(t.setAttribute("href",""),!i||/^data:|javascript:/i.test(i)||/^command:/i.test(i)&&!e.isTrusted||/^command:(\/\/\/)?_workbench\.downloadResource/i.test(i))t.replaceWith(...t.childNodes);else{let n=T(i,!1);e.baseUri&&(n=N(S.o.from(e.baseUri),i)),t.dataset.href=n}})),x.innerHTML=D(e,F.body.innerHTML),I.length>0)Promise.all(I).then((e=>{var i,o;if(v)return;const s=new Map(e),r=x.querySelectorAll("div[data-code]");for(const t of r){const e=s.get(null!==(i=t.dataset["code"])&&void 0!==i?i:"");e&&n.mc(t,e)}null===(o=t.asyncRenderCallback)||void 0===o||o.call(t)}));else if(R.length>0){const e=new Map(R),t=x.querySelectorAll("div[data-code]");for(const i of t){const t=e.get(null!==(h=i.dataset["code"])&&void 0!==h?h:"");t&&n.mc(i,t)}}if(t.asyncRenderCallback)for(const s of x.getElementsByTagName("img")){const e=f.add(n.nm(s,"load",(()=>{e.dispose(),t.asyncRenderCallback()})))}return{element:x,dispose:()=>{v=!0,f.dispose()}}}function E(e){if(!e)return"";const t=e.split(/[\s+|:|,|\{|\?]/,1);return t.length?t[0]:e}function N(e,t){const i=/^\w[\w\d+.-]*:/.test(t);return i?t:e.path.endsWith("/")?(0,x.i3)(e,t).toString():(0,x.i3)((0,x.XX)(e),t).toString()}function D(e,t){const{config:i,allowedSchemes:s}=A(e);o.v5("uponSanitizeAttribute",((e,t)=>{if("style"!==t.attrName&&"class"!==t.attrName);else{if("SPAN"===e.tagName){if("style"===t.attrName)return void(t.keepAttr=/^(color\:(#[0-9a-fA-F]+|var\(--vscode(-[a-zA-Z]+)+\));)?(background-color\:(#[0-9a-fA-F]+|var\(--vscode(-[a-zA-Z]+)+\));)?$/.test(t.attrValue));if("class"===t.attrName)return void(t.keepAttr=/^codicon codicon-[a-z\-]+( codicon-modifier-[a-z\-]+)?$/.test(t.attrValue))}t.keepAttr=!1}}));const r=n._F(s);try{return o.Nw(t,{...i,RETURN_TRUSTED_TYPE:!0})}finally{o.ok("uponSanitizeAttribute"),r.dispose()}}const T=["align","autoplay","alt","class","controls","data-code","data-href","draggable","height","href","loop","muted","playsinline","poster","src","style","target","title","width","start"];function A(e){const t=[y.lg.http,y.lg.https,y.lg.mailto,y.lg.data,y.lg.file,y.lg.vscodeFileResource,y.lg.vscodeRemote,y.lg.vscodeRemoteResource];return e.isTrusted&&t.push(y.lg.command),{config:{ALLOWED_TAGS:[...n.sQ],ALLOWED_ATTR:T,ALLOW_UNKNOWN_PROTOCOLS:!0},allowedSchemes:t}}function I(e){return"string"===typeof e?e:R(e)}function R(e){var t;let i=null!==(t=e.value)&&void 0!==t?t:"";i.length>1e5&&(i=`${i.substr(0,1e5)}…`);const n=_.parse(i,{renderer:P.value}).replace(/&(#\d+|[a-zA-Z]+);/g,(e=>{var t;return null!==(t=M.get(e))&&void 0!==t?t:e}));return D({isTrusted:!1},n).toString()}const M=new Map([[""",'"'],[" "," "],["&","&"],["'","'"],["<","<"],[">",">"]]),P=new f.o((()=>{const e=new _.Renderer;return e.code=e=>e,e.blockquote=e=>e,e.html=e=>"",e.heading=(e,t,i)=>e+"\n",e.hr=()=>"",e.list=(e,t)=>e,e.listitem=e=>e+"\n",e.paragraph=e=>e+"\n",e.table=(e,t)=>e+t+"\n",e.tablerow=e=>e,e.tablecell=(e,t)=>e+" ",e.strong=e=>e,e.em=e=>e,e.codespan=e=>e,e.br=()=>"\n",e.del=e=>e,e.image=(e,t,i)=>"",e.text=e=>e,e.link=(e,t,i)=>i,e}));function O(e){let t="";return e.forEach((e=>{t+=e.raw})),t}function F(e){for(const t of e.tokens)if("text"===t.type){const i=t.raw.split("\n"),n=i[i.length-1];if(n.includes("`"))return W(e);if(n.includes("**"))return $(e);if(n.match(/\*\w/))return V(e);if(n.match(/(^|\s)__\w/))return j(e);if(n.match(/(^|\s)_\w/))return z(e);if(n.match(/(^|\s)\[.*\]\(\w*/))return U(e);if(n.match(/(^|\s)\[\w/))return q(e)}}function B(e){let t,i;for(t=0;t0){const e=o?i.slice(0,-1).join("\n"):t,s=!!e.match(/\|\s*$/),r=e+(s?"":"|")+`\n|${" --- |".repeat(n)}`;return _.lexer(r)}}},75467:(e,t,i)=>{"use strict";i.d(t,{n:()=>l,q:()=>c});var n=i(90882);const o=new WeakMap;function s(e){if(!e.parent||e.parent===e)return null;try{const t=e.location,i=e.parent.location;if("null"!==t.origin&&"null"!==i.origin&&t.origin!==i.origin)return null}catch(t){return null}return e.parent}class r{static getSameOriginWindowChain(e){let t=o.get(e);if(!t){t=[],o.set(e,t);let i,n=e;do{i=s(n),i?t.push({window:new WeakRef(n),iframeElement:n.frameElement||null}):t.push({window:new WeakRef(n),iframeElement:null}),n=i}while(n)}return t.slice(0)}static getPositionOfChildWindowRelativeToAncestorWindow(e,t){var i,n;if(!t||e===t)return{top:0,left:0};let o=0,s=0;const r=this.getSameOriginWindowChain(e);for(const a of r){const e=a.window.deref();if(o+=null!==(i=null===e||void 0===e?void 0:e.scrollY)&&void 0!==i?i:0,s+=null!==(n=null===e||void 0===e?void 0:e.scrollX)&&void 0!==n?n:0,e===t)break;if(!a.iframeElement)break;const r=a.iframeElement.getBoundingClientRect();o+=r.top,s+=r.left}return{top:o,left:s}}}var a=i(47606);class l{constructor(e,t){this.timestamp=Date.now(),this.browserEvent=t,this.leftButton=0===t.button,this.middleButton=1===t.button,this.rightButton=2===t.button,this.buttons=t.buttons,this.target=t.target,this.detail=t.detail||1,"dblclick"===t.type&&(this.detail=2),this.ctrlKey=t.ctrlKey,this.shiftKey=t.shiftKey,this.altKey=t.altKey,this.metaKey=t.metaKey,"number"===typeof t.pageX?(this.posx=t.pageX,this.posy=t.pageY):(this.posx=t.clientX+this.target.ownerDocument.body.scrollLeft+this.target.ownerDocument.documentElement.scrollLeft,this.posy=t.clientY+this.target.ownerDocument.body.scrollTop+this.target.ownerDocument.documentElement.scrollTop);const i=r.getPositionOfChildWindowRelativeToAncestorWindow(e,t.view);this.posx-=i.left,this.posy-=i.top}preventDefault(){this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent.stopPropagation()}}class c{constructor(e,t=0,i=0){if(this.browserEvent=e||null,this.target=e?e.target||e.targetNode||e.srcElement:null,this.deltaY=i,this.deltaX=t,e){const t=e,i=e;if("undefined"!==typeof t.wheelDeltaY)this.deltaY=t.wheelDeltaY/120;else if("undefined"!==typeof i.VERTICAL_AXIS&&i.axis===i.VERTICAL_AXIS)this.deltaY=-i.detail/3;else if("wheel"===e.type){const t=e;t.deltaMode===t.DOM_DELTA_LINE?n.vU&&!a.dz?this.deltaY=-e.deltaY/3:this.deltaY=-e.deltaY:this.deltaY=-e.deltaY/40}if("undefined"!==typeof t.wheelDeltaX)n.G6&&a.ED?this.deltaX=-t.wheelDeltaX/120:this.deltaX=t.wheelDeltaX/120;else if("undefined"!==typeof i.HORIZONTAL_AXIS&&i.axis===i.HORIZONTAL_AXIS)this.deltaX=-e.detail/3;else if("wheel"===e.type){const t=e;t.deltaMode===t.DOM_DELTA_LINE?n.vU&&!a.dz?this.deltaX=-e.deltaX/3:this.deltaX=-e.deltaX:this.deltaX=-e.deltaX/40}0===this.deltaY&&0===this.deltaX&&e.wheelDelta&&(this.deltaY=e.wheelDelta/120)}}preventDefault(){var e;null===(e=this.browserEvent)||void 0===e||e.preventDefault()}stopPropagation(){var e;null===(e=this.browserEvent)||void 0===e||e.stopPropagation()}}},53007:(e,t,i)=>{"use strict";var n;i.d(t,{B:()=>n}),function(e){const t={total:0,min:Number.MAX_VALUE,max:0},i={...t},n={...t},o={...t};let s=0;const r={keydown:0,input:0,render:0};function a(){v(),performance.mark("inputlatency/start"),performance.mark("keydown/start"),r.keydown=1,queueMicrotask(l)}function l(){1===r.keydown&&(performance.mark("keydown/end"),r.keydown=2)}function c(){performance.mark("input/start"),r.input=1,m()}function d(){0===r.input&&c(),queueMicrotask(u)}function u(){1===r.input&&(performance.mark("input/end"),r.input=2)}function h(){v()}function g(){v()}function p(){2===r.keydown&&2===r.input&&0===r.render&&(performance.mark("render/start"),r.render=1,queueMicrotask(f),m())}function f(){1===r.render&&(performance.mark("render/end"),r.render=2)}function m(){setTimeout(v)}function v(){2===r.keydown&&2===r.input&&2===r.render&&(performance.mark("inputlatency/end"),performance.measure("keydown","keydown/start","keydown/end"),performance.measure("input","input/start","input/end"),performance.measure("render","render/start","render/end"),performance.measure("inputlatency","inputlatency/start","inputlatency/end"),_("keydown",t),_("input",i),_("render",n),_("inputlatency",o),s++,b())}function _(e,t){const i=performance.getEntriesByName(e)[0].duration;t.total+=i,t.min=Math.min(t.min,i),t.max=Math.max(t.max,i)}function b(){performance.clearMarks("keydown/start"),performance.clearMarks("keydown/end"),performance.clearMarks("input/start"),performance.clearMarks("input/end"),performance.clearMarks("render/start"),performance.clearMarks("render/end"),performance.clearMarks("inputlatency/start"),performance.clearMarks("inputlatency/end"),performance.clearMeasures("keydown"),performance.clearMeasures("input"),performance.clearMeasures("render"),performance.clearMeasures("inputlatency"),r.keydown=0,r.input=0,r.render=0}function y(){if(0===s)return;const e={keydown:w(t),input:w(i),render:w(n),total:w(o),sampleCount:s};return x(t),x(i),x(n),x(o),s=0,e}function w(e){return{average:e.total/s,max:e.max,min:e.min}}function x(e){e.total=0,e.min=Number.MAX_VALUE,e.max=0}e.onKeyDown=a,e.onBeforeInput=c,e.onInput=d,e.onKeyUp=h,e.onSelectionChange=g,e.onRenderStart=p,e.getAndClearMeasurements=y}(n||(n={}))},1212:(e,t,i)=>{"use strict";i.d(t,{o:()=>h,t:()=>n});var n,o=i(2548),s=i(36606),r=i(21921),a=i(58718),l=i(11271),c=i(70959),d=i(33010),u=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"===typeof Reflect&&"function"===typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r};(function(e){e.Tap="-monaco-gesturetap",e.Change="-monaco-gesturechange",e.Start="-monaco-gesturestart",e.End="-monaco-gesturesend",e.Contextmenu="-monaco-gesturecontextmenu"})(n||(n={}));class h extends c.JT{constructor(){super(),this.dispatched=!1,this.targets=new d.S,this.ignoreTargets=new d.S,this.activeTouches={},this.handle=null,this._lastSetTapCountTime=0,this._register(l.ju.runAndSubscribe(o.Xo,(({window:e,disposables:t})=>{t.add(o.nm(e.document,"touchstart",(e=>this.onTouchStart(e)),{passive:!1})),t.add(o.nm(e.document,"touchend",(t=>this.onTouchEnd(e,t)))),t.add(o.nm(e.document,"touchmove",(e=>this.onTouchMove(e)),{passive:!1}))}),{window:s.Ex,disposables:this._store}))}static addTarget(e){if(!h.isTouchDevice())return c.JT.None;h.INSTANCE||(h.INSTANCE=(0,c.dk)(new h));const t=h.INSTANCE.targets.push(e);return(0,c.OF)(t)}static ignoreTarget(e){if(!h.isTouchDevice())return c.JT.None;h.INSTANCE||(h.INSTANCE=(0,c.dk)(new h));const t=h.INSTANCE.ignoreTargets.push(e);return(0,c.OF)(t)}static isTouchDevice(){return"ontouchstart"in s.Ex||navigator.maxTouchPoints>0}dispose(){this.handle&&(this.handle.dispose(),this.handle=null),super.dispose()}onTouchStart(e){const t=Date.now();this.handle&&(this.handle.dispose(),this.handle=null);for(let i=0,o=e.targetTouches.length;i=h.HOLD_DELAY&&Math.abs(l.initialPageX-r.Gb(l.rollingPageX))<30&&Math.abs(l.initialPageY-r.Gb(l.rollingPageY))<30){const e=this.newGestureEvent(n.Contextmenu,l.initialTarget);e.pageX=r.Gb(l.rollingPageX),e.pageY=r.Gb(l.rollingPageY),this.dispatchEvent(e)}else if(1===o){const t=r.Gb(l.rollingPageX),n=r.Gb(l.rollingPageY),o=r.Gb(l.rollingTimestamps)-l.rollingTimestamps[0],s=t-l.rollingPageX[0],a=n-l.rollingPageY[0],c=[...this.targets].filter((e=>l.initialTarget instanceof Node&&e.contains(l.initialTarget)));this.inertia(e,c,i,Math.abs(s)/o,s>0?1:-1,t,Math.abs(a)/o,a>0?1:-1,n)}this.dispatchEvent(this.newGestureEvent(n.End,l.initialTarget)),delete this.activeTouches[a.identifier]}this.dispatched&&(t.preventDefault(),t.stopPropagation(),this.dispatched=!1)}newGestureEvent(e,t){const i=document.createEvent("CustomEvent");return i.initEvent(e,!1,!0),i.initialTarget=t,i.tapCount=0,i}dispatchEvent(e){if(e.type===n.Tap){const t=(new Date).getTime();let i=0;i=t-this._lastSetTapCountTime>h.CLEAR_TAP_COUNT_TIME?1:2,this._lastSetTapCountTime=t,e.tapCount=i}else e.type!==n.Change&&e.type!==n.Contextmenu||(this._lastSetTapCountTime=0);if(e.initialTarget instanceof Node){for(const t of this.ignoreTargets)if(t.contains(e.initialTarget))return;for(const t of this.targets)t.contains(e.initialTarget)&&(t.dispatchEvent(e),this.dispatched=!0)}}inertia(e,t,i,s,r,a,l,c,d){this.handle=o.jL(e,(()=>{const o=Date.now(),u=o-i;let g=0,p=0,f=!0;s+=h.SCROLL_FRICTION*u,l+=h.SCROLL_FRICTION*u,s>0&&(f=!1,g=r*s*u),l>0&&(f=!1,p=c*l*u);const m=this.newGestureEvent(n.Change);m.translationX=g,m.translationY=p,t.forEach((e=>e.dispatchEvent(m))),f||this.inertia(e,t,o,s,r,a+g,l,c,d+p)}))}onTouchMove(e){const t=Date.now();for(let i=0,o=e.changedTouches.length;i3&&(s.rollingPageX.shift(),s.rollingPageY.shift(),s.rollingTimestamps.shift()),s.rollingPageX.push(o.pageX),s.rollingPageY.push(o.pageY),s.rollingTimestamps.push(t)}this.dispatched&&(e.preventDefault(),e.stopPropagation(),this.dispatched=!1)}}h.SCROLL_FRICTION=-.005,h.HOLD_DELAY=700,h.CLEAR_TAP_COUNT_TIME=400,u([a.H],h,"isTouchDevice",null)},82168:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});var n=i(36606),o=i(98642);function s(e,t){var i;const s=globalThis.MonacoEnvironment;if(null===s||void 0===s?void 0:s.createTrustedTypesPolicy)try{return s.createTrustedTypesPolicy(e,t)}catch(r){return void(0,o.dL)(r)}try{return null===(i=n.Ex.trustedTypes)||void 0===i?void 0:i.createPolicy(e,t)}catch(r){return void(0,o.dL)(r)}}},94873:(e,t,i)=>{"use strict";i.d(t,{gU:()=>N,YH:()=>E,Lc:()=>D});var n=i(90882),o=i(1483),s=i(2548),r=i(1212),a=i(6674),l=i(9172),c=i(45429),d=i(98162),u=i(51442),h=i(21921),g=i(11271),p=i(56082),f=i(70959),m=i(47606),v=i(25206);const _=s.$,b="selectOption.entry.template";class y{get templateId(){return b}renderTemplate(e){const t=Object.create(null);return t.root=e,t.text=s.R3(e,_(".option-text")),t.detail=s.R3(e,_(".option-detail")),t.decoratorRight=s.R3(e,_(".option-decorator-right")),t}renderElement(e,t,i){const n=i,o=e.text,s=e.detail,r=e.decoratorRight,a=e.isDisabled;n.text.textContent=o,n.detail.textContent=s||"",n.decoratorRight.innerText=r||"",a?n.root.classList.add("option-disabled"):n.root.classList.remove("option-disabled")}disposeTemplate(e){}}class w extends f.JT{constructor(e,t,i,n,o){super(),this.options=[],this._currentSelection=0,this._hasDetails=!1,this._skipLayout=!1,this._sticky=!1,this._isVisible=!1,this.styles=n,this.selectBoxOptions=o||Object.create(null),"number"!==typeof this.selectBoxOptions.minBottomMargin?this.selectBoxOptions.minBottomMargin=w.DEFAULT_DROPDOWN_MINIMUM_BOTTOM_MARGIN:this.selectBoxOptions.minBottomMargin<0&&(this.selectBoxOptions.minBottomMargin=0),this.selectElement=document.createElement("select"),this.selectElement.className="monaco-select-box monaco-select-box-dropdown-padding","string"===typeof this.selectBoxOptions.ariaLabel&&this.selectElement.setAttribute("aria-label",this.selectBoxOptions.ariaLabel),"string"===typeof this.selectBoxOptions.ariaDescription&&this.selectElement.setAttribute("aria-description",this.selectBoxOptions.ariaDescription),this._onDidSelect=new g.Q5,this._register(this._onDidSelect),this.registerListeners(),this.constructSelectDropDown(i),this.selected=t||0,e&&this.setOptions(e,t),this.initStyleSheet()}getHeight(){return 22}getTemplateId(){return b}constructSelectDropDown(e){this.contextViewProvider=e,this.selectDropDownContainer=s.$(".monaco-select-box-dropdown-container"),this.selectDropDownContainer.classList.add("monaco-select-box-dropdown-padding"),this.selectionDetailsPane=s.R3(this.selectDropDownContainer,_(".select-box-details-pane"));const t=s.R3(this.selectDropDownContainer,_(".select-box-dropdown-container-width-control")),i=s.R3(t,_(".width-control-div"));this.widthControlElement=document.createElement("span"),this.widthControlElement.className="option-text-width-control",s.R3(i,this.widthControlElement),this._dropDownPosition=0,this.styleElement=s.dS(this.selectDropDownContainer),this.selectDropDownContainer.setAttribute("draggable","true"),this._register(s.nm(this.selectDropDownContainer,s.tw.DRAG_START,(e=>{s.zB.stop(e,!0)})))}registerListeners(){let e;this._register(s.mu(this.selectElement,"change",(e=>{this.selected=e.target.selectedIndex,this._onDidSelect.fire({index:e.target.selectedIndex,selected:e.target.value}),this.options[this.selected]&&this.options[this.selected].text&&(this.selectElement.title=this.options[this.selected].text)}))),this._register(s.nm(this.selectElement,s.tw.CLICK,(e=>{s.zB.stop(e),this._isVisible?this.hideSelectDropDown(!0):this.showSelectDropDown()}))),this._register(s.nm(this.selectElement,s.tw.MOUSE_DOWN,(e=>{s.zB.stop(e)}))),this._register(s.nm(this.selectElement,"touchstart",(t=>{e=this._isVisible}))),this._register(s.nm(this.selectElement,"touchend",(t=>{s.zB.stop(t),e?this.hideSelectDropDown(!0):this.showSelectDropDown()}))),this._register(s.nm(this.selectElement,s.tw.KEY_DOWN,(e=>{const t=new c.y(e);let i=!1;m.dz?18!==t.keyCode&&16!==t.keyCode&&10!==t.keyCode&&3!==t.keyCode||(i=!0):(18===t.keyCode&&t.altKey||16===t.keyCode&&t.altKey||10===t.keyCode||3===t.keyCode)&&(i=!0),i&&(this.showSelectDropDown(),s.zB.stop(e,!0))})))}get onDidSelect(){return this._onDidSelect.event}setOptions(e,t){h.fS(this.options,e)||(this.options=e,this.selectElement.options.length=0,this._hasDetails=!1,this._cachedMaxDetailsHeight=void 0,this.options.forEach(((e,t)=>{this.selectElement.add(this.createOption(e.text,t,e.isDisabled)),"string"===typeof e.description&&(this._hasDetails=!0)}))),void 0!==t&&(this.select(t),this._currentSelection=this.selected)}setOptionsList(){var e;null===(e=this.selectList)||void 0===e||e.splice(0,this.selectList.length,this.options)}select(e){e>=0&&ethis.options.length-1?this.select(this.options.length-1):this.selected<0&&(this.selected=0),this.selectElement.selectedIndex=this.selected,this.options[this.selected]&&this.options[this.selected].text&&(this.selectElement.title=this.options[this.selected].text)}focus(){this.selectElement&&(this.selectElement.tabIndex=0,this.selectElement.focus())}blur(){this.selectElement&&(this.selectElement.tabIndex=-1,this.selectElement.blur())}setFocusable(e){this.selectElement.tabIndex=e?0:-1}render(e){this.container=e,e.classList.add("select-container"),e.appendChild(this.selectElement),this.styleSelectElement()}initStyleSheet(){const e=[];this.styles.listFocusBackground&&e.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { background-color: ${this.styles.listFocusBackground} !important; }`),this.styles.listFocusForeground&&e.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { color: ${this.styles.listFocusForeground} !important; }`),this.styles.decoratorRightForeground&&e.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.focused) .option-decorator-right { color: ${this.styles.decoratorRightForeground}; }`),this.styles.selectBackground&&this.styles.selectBorder&&this.styles.selectBorder!==this.styles.selectBackground?(e.push(`.monaco-select-box-dropdown-container { border: 1px solid ${this.styles.selectBorder} } `),e.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-top { border-top: 1px solid ${this.styles.selectBorder} } `),e.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-bottom { border-bottom: 1px solid ${this.styles.selectBorder} } `)):this.styles.selectListBorder&&(e.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-top { border-top: 1px solid ${this.styles.selectListBorder} } `),e.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-bottom { border-bottom: 1px solid ${this.styles.selectListBorder} } `)),this.styles.listHoverForeground&&e.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { color: ${this.styles.listHoverForeground} !important; }`),this.styles.listHoverBackground&&e.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { background-color: ${this.styles.listHoverBackground} !important; }`),this.styles.listFocusOutline&&e.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { outline: 1.6px dotted ${this.styles.listFocusOutline} !important; outline-offset: -1.6px !important; }`),this.styles.listHoverOutline&&e.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { outline: 1.6px dashed ${this.styles.listHoverOutline} !important; outline-offset: -1.6px !important; }`),e.push(".monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.option-disabled.focused { background-color: transparent !important; color: inherit !important; outline: none !important; }"),e.push(".monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.option-disabled:hover { background-color: transparent !important; color: inherit !important; outline: none !important; }"),this.styleElement.textContent=e.join("\n")}styleSelectElement(){var e,t,i;const n=null!==(e=this.styles.selectBackground)&&void 0!==e?e:"",o=null!==(t=this.styles.selectForeground)&&void 0!==t?t:"",s=null!==(i=this.styles.selectBorder)&&void 0!==i?i:"";this.selectElement.style.backgroundColor=n,this.selectElement.style.color=o,this.selectElement.style.borderColor=s}styleList(){var e,t;const i=null!==(e=this.styles.selectBackground)&&void 0!==e?e:"",n=s.XT(this.styles.selectListBackground,i);this.selectDropDownListContainer.style.backgroundColor=n,this.selectionDetailsPane.style.backgroundColor=n;const o=null!==(t=this.styles.focusBorder)&&void 0!==t?t:"";this.selectDropDownContainer.style.outlineColor=o,this.selectDropDownContainer.style.outlineOffset="-1px",this.selectList.style(this.styles)}createOption(e,t,i){const n=document.createElement("option");return n.value=e,n.text=e,n.disabled=!!i,n}showSelectDropDown(){this.selectionDetailsPane.innerText="",this.contextViewProvider&&!this._isVisible&&(this.createSelectList(this.selectDropDownContainer),this.setOptionsList(),this.contextViewProvider.showContextView({getAnchor:()=>this.selectElement,render:e=>this.renderSelectDropDown(e,!0),layout:()=>{this.layoutSelectDropDown()},onHide:()=>{this.selectDropDownContainer.classList.remove("visible"),this.selectElement.classList.remove("synthetic-focus")},anchorPosition:this._dropDownPosition},this.selectBoxOptions.optionsAsChildren?this.container:void 0),this._isVisible=!0,this.hideSelectDropDown(!1),this.contextViewProvider.showContextView({getAnchor:()=>this.selectElement,render:e=>this.renderSelectDropDown(e),layout:()=>this.layoutSelectDropDown(),onHide:()=>{this.selectDropDownContainer.classList.remove("visible"),this.selectElement.classList.remove("synthetic-focus")},anchorPosition:this._dropDownPosition},this.selectBoxOptions.optionsAsChildren?this.container:void 0),this._currentSelection=this.selected,this._isVisible=!0,this.selectElement.setAttribute("aria-expanded","true"))}hideSelectDropDown(e){this.contextViewProvider&&this._isVisible&&(this._isVisible=!1,this.selectElement.setAttribute("aria-expanded","false"),e&&this.selectElement.focus(),this.contextViewProvider.hideContextView())}renderSelectDropDown(e,t){return e.appendChild(this.selectDropDownContainer),this.layoutSelectDropDown(t),{dispose:()=>{try{e.removeChild(this.selectDropDownContainer)}catch(t){}}}}measureMaxDetailsHeight(){let e=0;return this.options.forEach(((t,i)=>{this.updateDetail(i),this.selectionDetailsPane.offsetHeight>e&&(e=this.selectionDetailsPane.offsetHeight)})),e}layoutSelectDropDown(e){if(this._skipLayout)return!1;if(this.selectList){this.selectDropDownContainer.classList.add("visible");const t=s.Jj(this.selectElement),i=s.i(this.selectElement),n=s.Jj(this.selectElement).getComputedStyle(this.selectElement),o=parseFloat(n.getPropertyValue("--dropdown-padding-top"))+parseFloat(n.getPropertyValue("--dropdown-padding-bottom")),r=t.innerHeight-i.top-i.height-(this.selectBoxOptions.minBottomMargin||0),a=i.top-w.DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN,l=this.selectElement.offsetWidth,c=this.setWidthControlElement(this.widthControlElement),d=Math.max(c,Math.round(l)).toString()+"px";this.selectDropDownContainer.style.width=d,this.selectList.getHTMLElement().style.height="",this.selectList.layout();let u=this.selectList.contentHeight;this._hasDetails&&void 0===this._cachedMaxDetailsHeight&&(this._cachedMaxDetailsHeight=this.measureMaxDetailsHeight());const h=this._hasDetails?this._cachedMaxDetailsHeight:0,g=u+o+h,p=Math.floor((r-o-h)/this.getHeight()),f=Math.floor((a-o-h)/this.getHeight());if(e)return!(i.top+i.height>t.innerHeight-22||i.topp&&this.options.length>p?(this._dropDownPosition=1,this.selectDropDownContainer.removeChild(this.selectDropDownListContainer),this.selectDropDownContainer.removeChild(this.selectionDetailsPane),this.selectDropDownContainer.appendChild(this.selectionDetailsPane),this.selectDropDownContainer.appendChild(this.selectDropDownListContainer),this.selectionDetailsPane.classList.remove("border-top"),this.selectionDetailsPane.classList.add("border-bottom")):(this._dropDownPosition=0,this.selectDropDownContainer.removeChild(this.selectDropDownListContainer),this.selectDropDownContainer.removeChild(this.selectionDetailsPane),this.selectDropDownContainer.appendChild(this.selectDropDownListContainer),this.selectDropDownContainer.appendChild(this.selectionDetailsPane),this.selectionDetailsPane.classList.remove("border-bottom"),this.selectionDetailsPane.classList.add("border-top")),!0);if(i.top+i.height>t.innerHeight-22||i.topr&&(u=p*this.getHeight())}else g>a&&(u=f*this.getHeight());return this.selectList.layout(u),this.selectList.domFocus(),this.selectList.length>0&&(this.selectList.setFocus([this.selected||0]),this.selectList.reveal(this.selectList.getFocus()[0]||0)),this._hasDetails?(this.selectList.getHTMLElement().style.height=u+o+"px",this.selectDropDownContainer.style.height=""):this.selectDropDownContainer.style.height=u+o+"px",this.updateDetail(this.selected),this.selectDropDownContainer.style.width=d,this.selectDropDownListContainer.setAttribute("tabindex","0"),this.selectElement.classList.add("synthetic-focus"),this.selectDropDownContainer.classList.add("synthetic-focus"),!0}return!1}setWidthControlElement(e){let t=0;if(e){let i=0,n=0;this.options.forEach(((e,t)=>{const o=e.detail?e.detail.length:0,s=e.decoratorRight?e.decoratorRight.length:0,r=e.text.length+o+s;r>n&&(i=t,n=r)})),e.textContent=this.options[i].text+(this.options[i].decoratorRight?this.options[i].decoratorRight+" ":""),t=s.w(e)}return t}createSelectList(e){if(this.selectList)return;this.selectDropDownListContainer=s.R3(e,_(".select-box-dropdown-list-container")),this.listRenderer=new y,this.selectList=new u.aV("SelectBoxCustom",this.selectDropDownListContainer,this,[this.listRenderer],{useShadows:!1,verticalScrollMode:3,keyboardSupport:!1,mouseSupport:!1,accessibilityProvider:{getAriaLabel:e=>{let t=e.text;return e.detail&&(t+=`. ${e.detail}`),e.decoratorRight&&(t+=`. ${e.decoratorRight}`),e.description&&(t+=`. ${e.description}`),t},getWidgetAriaLabel:()=>(0,v.NC)({key:"selectBox",comment:["Behave like native select dropdown element."]},"Select Box"),getRole:()=>m.dz?"":"option",getWidgetRole:()=>"listbox"}}),this.selectBoxOptions.ariaLabel&&(this.selectList.ariaLabel=this.selectBoxOptions.ariaLabel);const t=this._register(new l.Y(this.selectDropDownListContainer,"keydown")),i=g.ju.chain(t.event,(e=>e.filter((()=>this.selectList.length>0)).map((e=>new c.y(e)))));this._register(g.ju.chain(i,(e=>e.filter((e=>3===e.keyCode))))(this.onEnter,this)),this._register(g.ju.chain(i,(e=>e.filter((e=>2===e.keyCode))))(this.onEnter,this)),this._register(g.ju.chain(i,(e=>e.filter((e=>9===e.keyCode))))(this.onEscape,this)),this._register(g.ju.chain(i,(e=>e.filter((e=>16===e.keyCode))))(this.onUpArrow,this)),this._register(g.ju.chain(i,(e=>e.filter((e=>18===e.keyCode))))(this.onDownArrow,this)),this._register(g.ju.chain(i,(e=>e.filter((e=>12===e.keyCode))))(this.onPageDown,this)),this._register(g.ju.chain(i,(e=>e.filter((e=>11===e.keyCode))))(this.onPageUp,this)),this._register(g.ju.chain(i,(e=>e.filter((e=>14===e.keyCode))))(this.onHome,this)),this._register(g.ju.chain(i,(e=>e.filter((e=>13===e.keyCode))))(this.onEnd,this)),this._register(g.ju.chain(i,(e=>e.filter((e=>e.keyCode>=21&&e.keyCode<=56||e.keyCode>=85&&e.keyCode<=113))))(this.onCharacter,this)),this._register(s.nm(this.selectList.getHTMLElement(),s.tw.POINTER_UP,(e=>this.onPointerUp(e)))),this._register(this.selectList.onMouseOver((e=>"undefined"!==typeof e.index&&this.selectList.setFocus([e.index])))),this._register(this.selectList.onDidChangeFocus((e=>this.onListFocus(e)))),this._register(s.nm(this.selectDropDownContainer,s.tw.FOCUS_OUT,(e=>{this._isVisible&&!s.jg(e.relatedTarget,this.selectDropDownContainer)&&this.onListBlur()}))),this.selectList.getHTMLElement().setAttribute("aria-label",this.selectBoxOptions.ariaLabel||""),this.selectList.getHTMLElement().setAttribute("aria-expanded","true"),this.styleList()}onPointerUp(e){if(!this.selectList.length)return;s.zB.stop(e);const t=e.target;if(!t)return;if(t.classList.contains("slider"))return;const i=t.closest(".monaco-list-row");if(!i)return;const n=Number(i.getAttribute("data-index")),o=i.classList.contains("option-disabled");n>=0&&n{for(let t=0;tthis.selected+2)this.selected+=2;else{if(t)return;this.selected++}this.select(this.selected),this.selectList.setFocus([this.selected]),this.selectList.reveal(this.selectList.getFocus()[0])}}onUpArrow(e){if(this.selected>0){s.zB.stop(e,!0);const t=this.options[this.selected-1].isDisabled;t&&this.selected>1?this.selected-=2:this.selected--,this.select(this.selected),this.selectList.setFocus([this.selected]),this.selectList.reveal(this.selectList.getFocus()[0])}}onPageUp(e){s.zB.stop(e),this.selectList.focusPreviousPage(),setTimeout((()=>{this.selected=this.selectList.getFocus()[0],this.options[this.selected].isDisabled&&this.selected{this.selected=this.selectList.getFocus()[0],this.options[this.selected].isDisabled&&this.selected>0&&(this.selected--,this.selectList.setFocus([this.selected])),this.selectList.reveal(this.selected),this.select(this.selected)}),1)}onHome(e){s.zB.stop(e),this.options.length<2||(this.selected=0,this.options[this.selected].isDisabled&&this.selected>1&&this.selected++,this.selectList.setFocus([this.selected]),this.selectList.reveal(this.selected),this.select(this.selected))}onEnd(e){s.zB.stop(e),this.options.length<2||(this.selected=this.options.length-1,this.options[this.selected].isDisabled&&this.selected>1&&this.selected--,this.selectList.setFocus([this.selected]),this.selectList.reveal(this.selected),this.select(this.selected))}onCharacter(e){const t=p.kL.toString(e.keyCode);let i=-1;for(let n=0;n{this._register(s.nm(this.selectElement,e,(e=>{this.selectElement.focus()})))})),this._register(s.mu(this.selectElement,"click",(e=>{s.zB.stop(e,!0)}))),this._register(s.mu(this.selectElement,"change",(e=>{this.selectElement.title=e.target.value,this._onDidSelect.fire({index:e.target.selectedIndex,selected:e.target.value})}))),this._register(s.mu(this.selectElement,"keydown",(e=>{let t=!1;m.dz?18!==e.keyCode&&16!==e.keyCode&&10!==e.keyCode||(t=!0):(18===e.keyCode&&e.altKey||10===e.keyCode||3===e.keyCode)&&(t=!0),t&&e.stopPropagation()})))}get onDidSelect(){return this._onDidSelect.event}setOptions(e,t){this.options&&h.fS(this.options,e)||(this.options=e,this.selectElement.options.length=0,this.options.forEach(((e,t)=>{this.selectElement.add(this.createOption(e.text,t,e.isDisabled))}))),void 0!==t&&this.select(t)}select(e){0===this.options.length?this.selected=0:e>=0&&ethis.options.length-1?this.select(this.options.length-1):this.selected<0&&(this.selected=0),this.selectElement.selectedIndex=this.selected,this.selected{this.element&&this.handleActionChangeEvent(e)})))}handleActionChangeEvent(e){void 0!==e.enabled&&this.updateEnabled(),void 0!==e.checked&&this.updateChecked(),void 0!==e.class&&this.updateClass(),void 0!==e.label&&(this.updateLabel(),this.updateTooltip()),void 0!==e.tooltip&&this.updateTooltip()}get actionRunner(){return this._actionRunner||(this._actionRunner=this._register(new k.Wi)),this._actionRunner}set actionRunner(e){this._actionRunner=e}isEnabled(){return this._action.enabled}setActionContext(e){this._context=e}render(e){const t=this.element=e;this._register(r.o.addTarget(e));const i=this.options&&this.options.draggable;i&&(e.draggable=!0,n.vU&&this._register((0,s.nm)(e,s.tw.DRAG_START,(e=>{var t;return null===(t=e.dataTransfer)||void 0===t?void 0:t.setData(o.g.TEXT,this._action.label)})))),this._register((0,s.nm)(t,r.t.Tap,(e=>this.onClick(e,!0)))),this._register((0,s.nm)(t,s.tw.MOUSE_DOWN,(e=>{i||s.zB.stop(e,!0),this._action.enabled&&0===e.button&&t.classList.add("active")}))),m.dz&&this._register((0,s.nm)(t,s.tw.CONTEXT_MENU,(e=>{0===e.button&&!0===e.ctrlKey&&this.onClick(e)}))),this._register((0,s.nm)(t,s.tw.CLICK,(e=>{s.zB.stop(e,!0),this.options&&this.options.isMenu||this.onClick(e)}))),this._register((0,s.nm)(t,s.tw.DBLCLICK,(e=>{s.zB.stop(e,!0)}))),[s.tw.MOUSE_UP,s.tw.MOUSE_OUT].forEach((e=>{this._register((0,s.nm)(t,e,(e=>{s.zB.stop(e),t.classList.remove("active")})))}))}onClick(e,t=!1){var i;s.zB.stop(e,!0);const n=L.Jp(this._context)?(null===(i=this.options)||void 0===i?void 0:i.useEventAsContext)?e:{preserveFocus:t}:this._context;this.actionRunner.run(this._action,n)}focus(){this.element&&(this.element.tabIndex=0,this.element.focus(),this.element.classList.add("focused"))}blur(){this.element&&(this.element.blur(),this.element.tabIndex=-1,this.element.classList.remove("focused"))}setFocusable(e){this.element&&(this.element.tabIndex=e?0:-1)}get trapsArrowNavigation(){return!1}updateEnabled(){}updateLabel(){}getClass(){return this.action.class}getTooltip(){return this.action.tooltip}updateTooltip(){var e;if(!this.element)return;const t=null!==(e=this.getTooltip())&&void 0!==e?e:"";this.updateAriaLabel(),this.options.hoverDelegate?(this.element.title="",this.customHover?this.customHover.update(t):(this.customHover=(0,a.g)(this.options.hoverDelegate,this.element,t),this._store.add(this.customHover))):this.element.title=t}updateAriaLabel(){var e;if(this.element){const t=null!==(e=this.getTooltip())&&void 0!==e?e:"";this.element.setAttribute("aria-label",t)}}updateClass(){}updateChecked(){}dispose(){this.element&&(this.element.remove(),this.element=void 0),this._context=void 0,super.dispose()}}class N extends E{constructor(e,t,i){super(e,t,i),this.options=i,this.options.icon=void 0!==i.icon&&i.icon,this.options.label=void 0===i.label||i.label,this.cssClass=""}render(e){super.render(e),L.p_(this.element);const t=document.createElement("a");if(t.classList.add("action-label"),t.setAttribute("role",this.getDefaultAriaRole()),this.label=t,this.element.appendChild(t),this.options.label&&this.options.keybinding){const e=document.createElement("span");e.classList.add("keybinding"),e.textContent=this.options.keybinding,this.element.appendChild(e)}this.updateClass(),this.updateLabel(),this.updateTooltip(),this.updateEnabled(),this.updateChecked()}getDefaultAriaRole(){return this._action.id===k.Z0.ID?"presentation":this.options.isMenu?"menuitem":"button"}focus(){this.label&&(this.label.tabIndex=0,this.label.focus())}blur(){this.label&&(this.label.tabIndex=-1)}setFocusable(e){this.label&&(this.label.tabIndex=e?0:-1)}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this.action.label)}getTooltip(){let e=null;return this.action.tooltip?e=this.action.tooltip:!this.options.label&&this.action.label&&this.options.icon&&(e=this.action.label,this.options.keybinding&&(e=v.NC({key:"titleLabel",comment:["action title","action keybinding"]},"{0} ({1})",e,this.options.keybinding))),null!==e&&void 0!==e?e:void 0}updateClass(){var e;this.cssClass&&this.label&&this.label.classList.remove(...this.cssClass.split(" ")),this.options.icon?(this.cssClass=this.getClass(),this.label&&(this.label.classList.add("codicon"),this.cssClass&&this.label.classList.add(...this.cssClass.split(" "))),this.updateEnabled()):null===(e=this.label)||void 0===e||e.classList.remove("codicon")}updateEnabled(){var e,t;this.action.enabled?(this.label&&(this.label.removeAttribute("aria-disabled"),this.label.classList.remove("disabled")),null===(e=this.element)||void 0===e||e.classList.remove("disabled")):(this.label&&(this.label.setAttribute("aria-disabled","true"),this.label.classList.add("disabled")),null===(t=this.element)||void 0===t||t.classList.add("disabled"))}updateAriaLabel(){var e;if(this.label){const t=null!==(e=this.getTooltip())&&void 0!==e?e:"";this.label.setAttribute("aria-label",t)}}updateChecked(){this.label&&(void 0!==this.action.checked?(this.label.classList.toggle("checked",this.action.checked),this.label.setAttribute("aria-checked",this.action.checked?"true":"false"),this.label.setAttribute("role","checkbox")):(this.label.classList.remove("checked"),this.label.removeAttribute("aria-checked"),this.label.setAttribute("role",this.getDefaultAriaRole())))}}class D extends E{constructor(e,t,i,n,o,s,r){super(e,t),this.selectBox=new S(i,n,o,s,r),this.selectBox.setFocusable(!1),this._register(this.selectBox),this.registerListeners()}select(e){this.selectBox.select(e)}registerListeners(){this._register(this.selectBox.onDidSelect((e=>this.runAction(e.selected,e.index))))}runAction(e,t){this.actionRunner.run(this._action,this.getActionContext(e,t))}getActionContext(e,t){return e}setFocusable(e){this.selectBox.setFocusable(e)}focus(){var e;null===(e=this.selectBox)||void 0===e||e.focus()}blur(){var e;null===(e=this.selectBox)||void 0===e||e.blur()}render(e){this.selectBox.render(e)}}},78089:(e,t,i)=>{"use strict";i.d(t,{o:()=>d});var n=i(2548),o=i(45429),s=i(94873),r=i(10205),a=i(11271),l=i(70959),c=i(55455);class d extends l.JT{constructor(e,t={}){var i,c,d,u,h,g;let p,f;switch(super(),this._actionRunnerDisposables=this._register(new l.SL),this.viewItemDisposables=this._register(new l.b2),this.triggerKeyDown=!1,this.focusable=!0,this._onDidBlur=this._register(new a.Q5),this.onDidBlur=this._onDidBlur.event,this._onDidCancel=this._register(new a.Q5({onWillAddFirstListener:()=>this.cancelHasListener=!0})),this.onDidCancel=this._onDidCancel.event,this.cancelHasListener=!1,this._onDidRun=this._register(new a.Q5),this.onDidRun=this._onDidRun.event,this._onWillRun=this._register(new a.Q5),this.onWillRun=this._onWillRun.event,this.options=t,this._context=null!==(i=t.context)&&void 0!==i?i:null,this._orientation=null!==(c=this.options.orientation)&&void 0!==c?c:0,this._triggerKeys={keyDown:null!==(u=null===(d=this.options.triggerKeys)||void 0===d?void 0:d.keyDown)&&void 0!==u&&u,keys:null!==(g=null===(h=this.options.triggerKeys)||void 0===h?void 0:h.keys)&&void 0!==g?g:[3,10]},this.options.actionRunner?this._actionRunner=this.options.actionRunner:(this._actionRunner=new r.Wi,this._actionRunnerDisposables.add(this._actionRunner)),this._actionRunnerDisposables.add(this._actionRunner.onDidRun((e=>this._onDidRun.fire(e)))),this._actionRunnerDisposables.add(this._actionRunner.onWillRun((e=>this._onWillRun.fire(e)))),this.viewItems=[],this.focusedItem=void 0,this.domNode=document.createElement("div"),this.domNode.className="monaco-action-bar",!1!==t.animated&&this.domNode.classList.add("animated"),this._orientation){case 0:p=[15],f=[17];break;case 1:p=[16],f=[18],this.domNode.className+=" vertical";break}this._register(n.nm(this.domNode,n.tw.KEY_DOWN,(e=>{const t=new o.y(e);let i=!0;const n="number"===typeof this.focusedItem?this.viewItems[this.focusedItem]:void 0;p&&(t.equals(p[0])||t.equals(p[1]))?i=this.focusPrevious():f&&(t.equals(f[0])||t.equals(f[1]))?i=this.focusNext():t.equals(9)&&this.cancelHasListener?this._onDidCancel.fire():t.equals(14)?i=this.focusFirst():t.equals(13)?i=this.focusLast():t.equals(2)&&n instanceof s.YH&&n.trapsArrowNavigation?i=this.focusNext():this.isTriggerKeyEvent(t)?this._triggerKeys.keyDown?this.doTrigger(t):this.triggerKeyDown=!0:i=!1,i&&(t.preventDefault(),t.stopPropagation())}))),this._register(n.nm(this.domNode,n.tw.KEY_UP,(e=>{const t=new o.y(e);this.isTriggerKeyEvent(t)?(!this._triggerKeys.keyDown&&this.triggerKeyDown&&(this.triggerKeyDown=!1,this.doTrigger(t)),t.preventDefault(),t.stopPropagation()):(t.equals(2)||t.equals(1026)||t.equals(16)||t.equals(18)||t.equals(15)||t.equals(17))&&this.updateFocusedItem()}))),this.focusTracker=this._register(n.go(this.domNode)),this._register(this.focusTracker.onDidBlur((()=>{n.vY()!==this.domNode&&n.jg(n.vY(),this.domNode)||(this._onDidBlur.fire(),this.previouslyFocusedItem=this.focusedItem,this.focusedItem=void 0,this.triggerKeyDown=!1)}))),this._register(this.focusTracker.onDidFocus((()=>this.updateFocusedItem()))),this.actionsList=document.createElement("ul"),this.actionsList.className="actions-container",this.options.highlightToggledItems&&this.actionsList.classList.add("highlight-toggled"),this.actionsList.setAttribute("role",this.options.ariaRole||"toolbar"),this.options.ariaLabel&&this.actionsList.setAttribute("aria-label",this.options.ariaLabel),this.domNode.appendChild(this.actionsList),e.appendChild(this.domNode)}refreshRole(){this.length()>=1?this.actionsList.setAttribute("role",this.options.ariaRole||"toolbar"):this.actionsList.setAttribute("role","presentation")}setFocusable(e){if(this.focusable=e,this.focusable){const e=this.viewItems.find((e=>e instanceof s.YH&&e.isEnabled()));e instanceof s.YH&&e.setFocusable(!0)}else this.viewItems.forEach((e=>{e instanceof s.YH&&e.setFocusable(!1)}))}isTriggerKeyEvent(e){let t=!1;return this._triggerKeys.keys.forEach((i=>{t=t||e.equals(i)})),t}updateFocusedItem(){var e,t;for(let i=0;it.setActionContext(e)))}get actionRunner(){return this._actionRunner}set actionRunner(e){this._actionRunner=e,this._actionRunnerDisposables.clear(),this._actionRunnerDisposables.add(this._actionRunner.onDidRun((e=>this._onDidRun.fire(e)))),this._actionRunnerDisposables.add(this._actionRunner.onWillRun((e=>this._onWillRun.fire(e)))),this.viewItems.forEach((t=>t.actionRunner=e))}getContainer(){return this.domNode}getAction(e){var t;if("number"===typeof e)return null===(t=this.viewItems[e])||void 0===t?void 0:t.action;if(e instanceof HTMLElement){while(e.parentElement!==this.actionsList){if(!e.parentElement)return;e=e.parentElement}for(let t=0;t{const i=document.createElement("li");let r;i.className="action-item",i.setAttribute("role","presentation");const a={hoverDelegate:this.options.hoverDelegate,...t};this.options.actionViewItemProvider&&(r=this.options.actionViewItemProvider(e,a)),r||(r=new s.gU(this.context,e,a)),this.options.allowContextMenu||this.viewItemDisposables.set(r,n.nm(i,n.tw.CONTEXT_MENU,(e=>{n.zB.stop(e,!0)}))),r.actionRunner=this._actionRunner,r.setActionContext(this.context),r.render(i),this.focusable&&r instanceof s.YH&&0===this.viewItems.length&&r.setFocusable(!0),null===o||o<0||o>=this.actionsList.children.length?(this.actionsList.appendChild(i),this.viewItems.push(r)):(this.actionsList.insertBefore(i,this.actionsList.children[o]),this.viewItems.splice(o,0,r),o++)})),"number"===typeof this.focusedItem&&this.focus(this.focusedItem),this.refreshRole()}clear(){this.isEmpty()||(this.viewItems=(0,l.B9)(this.viewItems),this.viewItemDisposables.clearAndDisposeAll(),n.PO(this.actionsList),this.refreshRole())}length(){return this.viewItems.length}isEmpty(){return 0===this.viewItems.length}focus(e){let t,i=!1;if(void 0===e?i=!0:"number"===typeof e?t=e:"boolean"===typeof e&&(i=e),i&&"undefined"===typeof this.focusedItem){const e=this.viewItems.findIndex((e=>e.isEnabled()));this.focusedItem=-1===e?void 0:e,this.updateFocus(void 0,void 0,!0)}else void 0!==t&&(this.focusedItem=t),this.updateFocus(void 0,void 0,!0)}focusFirst(){return this.focusedItem=this.length()-1,this.focusNext(!0)}focusLast(){return this.focusedItem=0,this.focusPrevious(!0)}focusNext(e){if("undefined"===typeof this.focusedItem)this.focusedItem=this.viewItems.length-1;else if(this.viewItems.length<=1)return!1;const t=this.focusedItem;let i;do{if(!e&&this.options.preventLoopNavigation&&this.focusedItem+1>=this.viewItems.length)return this.focusedItem=t,!1;this.focusedItem=(this.focusedItem+1)%this.viewItems.length,i=this.viewItems[this.focusedItem]}while(this.focusedItem!==t&&(this.options.focusOnlyEnabledItems&&!i.isEnabled()||i.action.id===r.Z0.ID));return this.updateFocus(),!0}focusPrevious(e){if("undefined"===typeof this.focusedItem)this.focusedItem=0;else if(this.viewItems.length<=1)return!1;const t=this.focusedItem;let i;do{if(this.focusedItem=this.focusedItem-1,this.focusedItem<0){if(!e&&this.options.preventLoopNavigation)return this.focusedItem=t,!1;this.focusedItem=this.viewItems.length-1}i=this.viewItems[this.focusedItem]}while(this.focusedItem!==t&&(this.options.focusOnlyEnabledItems&&!i.isEnabled()||i.action.id===r.Z0.ID));return this.updateFocus(!0),!0}updateFocus(e,t,i=!1){var n,o;"undefined"===typeof this.focusedItem&&this.actionsList.focus({preventScroll:t}),void 0!==this.previouslyFocusedItem&&this.previouslyFocusedItem!==this.focusedItem&&(null===(n=this.viewItems[this.previouslyFocusedItem])||void 0===n||n.blur());const s=void 0!==this.focusedItem?this.viewItems[this.focusedItem]:void 0;if(s){let n=!0;c.mf(s.focus)||(n=!1),this.options.focusOnlyEnabledItems&&c.mf(s.isEnabled)&&!s.isEnabled()&&(n=!1),s.action.id===r.Z0.ID&&(n=!1),n&&(null===(o=s.showHover)||void 0===o||o.call(s)),n?(i||this.previouslyFocusedItem!==this.focusedItem)&&(s.focus(e),this.previouslyFocusedItem=this.focusedItem):(this.actionsList.focus({preventScroll:t}),this.previouslyFocusedItem=void 0)}}doTrigger(e){if("undefined"===typeof this.focusedItem)return;const t=this.viewItems[this.focusedItem];if(t instanceof s.YH){const i=null===t._context||void 0===t._context?e:t._context;this.run(t._action,i)}}async run(e,t){await this._actionRunner.run(e,t)}dispose(){this._context=void 0,this.viewItems=(0,l.B9)(this.viewItems),this.getContainer().remove(),super.dispose()}}},69332:(e,t,i)=>{"use strict";i.d(t,{Z9:()=>u,i7:()=>h,wW:()=>d});var n=i(2548);const o=2e4;let s,r,a,l,c;function d(e){s=document.createElement("div"),s.className="monaco-aria-container";const t=()=>{const e=document.createElement("div");return e.className="monaco-alert",e.setAttribute("role","alert"),e.setAttribute("aria-atomic","true"),s.appendChild(e),e};r=t(),a=t();const i=()=>{const e=document.createElement("div");return e.className="monaco-status",e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),s.appendChild(e),e};l=i(),c=i(),e.appendChild(s)}function u(e){s&&(r.textContent!==e?(n.PO(a),g(r,e)):(n.PO(r),g(a,e)))}function h(e){s&&(l.textContent!==e?(n.PO(c),g(l,e)):(n.PO(l),g(c,e)))}function g(e,t){n.PO(e),t.length>o&&(t=t.substr(0,o)),e.textContent=t,e.style.visibility="hidden",e.style.visibility="visible"}},24511:(e,t,i)=>{"use strict";i.d(t,{z:()=>p});var n=i(2548),o=i(29739),s=i(45429),r=i(98162),a=i(1212),l=i(66426),c=i(60204),d=i(11271),u=i(81478),h=i(70959),g=i(99588);c.Il.white.toString(),c.Il.white.toString();class p extends h.JT{get onDidClick(){return this._onDidClick.event}constructor(e,t){super(),this._label="",this._onDidClick=this._register(new d.Q5),this.options=t,this._element=document.createElement("a"),this._element.classList.add("monaco-button"),this._element.tabIndex=0,this._element.setAttribute("role","button"),this._element.classList.toggle("secondary",!!t.secondary);const i=t.secondary?t.buttonSecondaryBackground:t.buttonBackground,o=t.secondary?t.buttonSecondaryForeground:t.buttonForeground;this._element.style.color=o||"",this._element.style.backgroundColor=i||"",t.supportShortLabel&&(this._labelShortElement=document.createElement("div"),this._labelShortElement.classList.add("monaco-button-label-short"),this._element.appendChild(this._labelShortElement),this._labelElement=document.createElement("div"),this._labelElement.classList.add("monaco-button-label"),this._element.appendChild(this._labelElement),this._element.classList.add("monaco-text-button-with-short-label")),e.appendChild(this._element),this._register(a.o.addTarget(this._element)),[n.tw.CLICK,a.t.Tap].forEach((e=>{this._register((0,n.nm)(this._element,e,(e=>{this.enabled?this._onDidClick.fire(e):n.zB.stop(e)})))})),this._register((0,n.nm)(this._element,n.tw.KEY_DOWN,(e=>{const t=new s.y(e);let i=!1;this.enabled&&(t.equals(3)||t.equals(10))?(this._onDidClick.fire(e),i=!0):t.equals(9)&&(this._element.blur(),i=!0),i&&n.zB.stop(t,!0)}))),this._register((0,n.nm)(this._element,n.tw.MOUSE_OVER,(e=>{this._element.classList.contains("disabled")||this.updateBackground(!0)}))),this._register((0,n.nm)(this._element,n.tw.MOUSE_OUT,(e=>{this.updateBackground(!1)}))),this.focusTracker=this._register((0,n.go)(this._element)),this._register(this.focusTracker.onDidFocus((()=>{this.enabled&&this.updateBackground(!0)}))),this._register(this.focusTracker.onDidBlur((()=>{this.enabled&&this.updateBackground(!1)})))}dispose(){super.dispose(),this._element.remove()}getContentElements(e){const t=[];for(let i of(0,l.T)(e))if("string"===typeof i){if(i=i.trim(),""===i)continue;const e=document.createElement("span");e.textContent=i,t.push(e)}else t.push(i);return t}updateBackground(e){let t;t=this.options.secondary?e?this.options.buttonSecondaryHoverBackground:this.options.buttonSecondaryBackground:e?this.options.buttonHoverBackground:this.options.buttonBackground,t&&(this._element.style.backgroundColor=t)}get element(){return this._element}set label(e){var t;if(this._label===e)return;if((0,u.Fr)(this._label)&&(0,u.Fr)(e)&&(0,u.g_)(this._label,e))return;this._element.classList.add("monaco-text-button");const i=this.options.supportShortLabel?this._labelElement:this._element;if((0,u.Fr)(e)){const s=(0,r.ap)(e,{inline:!0});s.dispose();const a=null===(t=s.element.querySelector("p"))||void 0===t?void 0:t.innerHTML;if(a){const e=(0,o.Nw)(a,{ADD_TAGS:["b","i","u","code","span"],ALLOWED_ATTR:["class"],RETURN_TRUSTED_TYPE:!0});i.innerHTML=e}else(0,n.mc)(i)}else this.options.supportIcons?(0,n.mc)(i,...this.getContentElements(e)):i.textContent=e;"string"===typeof this.options.title?this._element.title=this.options.title:this.options.title&&(this._element.title=(0,r.et)(e)),this._label=e}get label(){return this._label}set icon(e){this._element.classList.add(...g.k.asClassNameArray(e))}set enabled(e){e?(this._element.classList.remove("disabled"),this._element.setAttribute("aria-disabled",String(!1)),this._element.tabIndex=0):(this._element.classList.add("disabled"),this._element.setAttribute("aria-disabled",String(!0)))}get enabled(){return!this._element.classList.contains("disabled")}}},86829:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});var n=i(2548),o=i(61720);class s{constructor(e,t,i){this.options=t,this.styles=i,this.count=0,this.element=(0,n.R3)(e,(0,n.$)(".monaco-count-badge")),this.countFormat=this.options.countFormat||"{0}",this.titleFormat=this.options.titleFormat||"",this.setCount(this.options.count||0)}setCount(e){this.count=e,this.render()}setTitleFormat(e){this.titleFormat=e,this.render()}render(){var e,t;this.element.textContent=(0,o.WU)(this.countFormat,this.count),this.element.title=(0,o.WU)(this.titleFormat,this.count),this.element.style.backgroundColor=null!==(e=this.styles.badgeBackground)&&void 0!==e?e:"",this.element.style.color=null!==(t=this.styles.badgeForeground)&&void 0!==t?t:"",this.styles.badgeBorder&&(this.element.style.border=`1px solid ${this.styles.badgeBorder}`)}}},29031:(e,t,i)=>{"use strict";i.d(t,{C:()=>u});var n=i(2548),o=i(94873),s=i(45429),r=i(1212),a=i(10205),l=i(11271);class c extends a.Wi{constructor(e,t){super(),this._onDidChangeVisibility=this._register(new l.Q5),this.onDidChangeVisibility=this._onDidChangeVisibility.event,this._element=(0,n.R3)(e,(0,n.$)(".monaco-dropdown")),this._label=(0,n.R3)(this._element,(0,n.$)(".dropdown-label"));let i=t.labelRenderer;i||(i=e=>(e.textContent=t.label||"",null));for(const s of[n.tw.CLICK,n.tw.MOUSE_DOWN,r.t.Tap])this._register((0,n.nm)(this.element,s,(e=>n.zB.stop(e,!0))));for(const s of[n.tw.MOUSE_DOWN,r.t.Tap])this._register((0,n.nm)(this._label,s,(e=>{(0,n.N5)(e)&&(e.detail>1||0!==e.button)||(this.visible?this.hide():this.show())})));this._register((0,n.nm)(this._label,n.tw.KEY_UP,(e=>{const t=new s.y(e);(t.equals(3)||t.equals(10))&&(n.zB.stop(e,!0),this.visible?this.hide():this.show())})));const o=i(this._label);o&&this._register(o),this._register(r.o.addTarget(this._label))}get element(){return this._element}show(){this.visible||(this.visible=!0,this._onDidChangeVisibility.fire(!0))}hide(){this.visible&&(this.visible=!1,this._onDidChangeVisibility.fire(!1))}dispose(){super.dispose(),this.hide(),this.boxContainer&&(this.boxContainer.remove(),this.boxContainer=void 0),this.contents&&(this.contents.remove(),this.contents=void 0),this._label&&(this._label.remove(),this._label=void 0)}}class d extends c{constructor(e,t){super(e,t),this._options=t,this._actions=[],this.actions=t.actions||[]}set menuOptions(e){this._menuOptions=e}get menuOptions(){return this._menuOptions}get actions(){return this._options.actionProvider?this._options.actionProvider.getActions():this._actions}set actions(e){this._actions=e}show(){super.show(),this.element.classList.add("active"),this._options.contextMenuProvider.showContextMenu({getAnchor:()=>this.element,getActions:()=>this.actions,getActionsContext:()=>this.menuOptions?this.menuOptions.context:null,getActionViewItem:(e,t)=>this.menuOptions&&this.menuOptions.actionViewItemProvider?this.menuOptions.actionViewItemProvider(e,t):void 0,getKeyBinding:e=>this.menuOptions&&this.menuOptions.getKeyBinding?this.menuOptions.getKeyBinding(e):void 0,getMenuClassName:()=>this._options.menuClassName||"",onHide:()=>this.onHide(),actionRunner:this.menuOptions?this.menuOptions.actionRunner:void 0,anchorAlignment:this.menuOptions?this.menuOptions.anchorAlignment:0,domForShadowRoot:this._options.menuAsChild?this.element:void 0,skipTelemetry:this._options.skipTelemetry})}hide(){super.hide()}onHide(){this.hide(),this.element.classList.remove("active")}}class u extends o.YH{constructor(e,t,i,n=Object.create(null)){super(null,e,n),this.actionItem=null,this._onDidChangeVisibility=this._register(new l.Q5),this.onDidChangeVisibility=this._onDidChangeVisibility.event,this.menuActionsOrProvider=t,this.contextMenuProvider=i,this.options=n,this.options.actionRunner&&(this.actionRunner=this.options.actionRunner)}render(e){this.actionItem=e;const t=e=>{this.element=(0,n.R3)(e,(0,n.$)("a.action-label"));let t=[];return"string"===typeof this.options.classNames?t=this.options.classNames.split(/\s+/g).filter((e=>!!e)):this.options.classNames&&(t=this.options.classNames),t.find((e=>"icon"===e))||t.push("codicon"),this.element.classList.add(...t),this.element.setAttribute("role","button"),this.element.setAttribute("aria-haspopup","true"),this.element.setAttribute("aria-expanded","false"),this.element.title=this._action.label||"",this.element.ariaLabel=this._action.label||"",null},i=Array.isArray(this.menuActionsOrProvider),o={contextMenuProvider:this.contextMenuProvider,labelRenderer:t,menuAsChild:this.options.menuAsChild,actions:i?this.menuActionsOrProvider:void 0,actionProvider:i?void 0:this.menuActionsOrProvider,skipTelemetry:this.options.skipTelemetry};if(this.dropdownMenu=this._register(new d(e,o)),this._register(this.dropdownMenu.onDidChangeVisibility((e=>{var t;null===(t=this.element)||void 0===t||t.setAttribute("aria-expanded",`${e}`),this._onDidChangeVisibility.fire(e)}))),this.dropdownMenu.menuOptions={actionViewItemProvider:this.options.actionViewItemProvider,actionRunner:this.actionRunner,getKeyBinding:this.options.keybindingProvider,context:this._context},this.options.anchorAlignmentProvider){const e=this;this.dropdownMenu.menuOptions={...this.dropdownMenu.menuOptions,get anchorAlignment(){return e.options.anchorAlignmentProvider()}}}this.updateTooltip(),this.updateEnabled()}getTooltip(){let e=null;return this.action.tooltip?e=this.action.tooltip:this.action.label&&(e=this.action.label),null!==e&&void 0!==e?e:void 0}setActionContext(e){super.setActionContext(e),this.dropdownMenu&&(this.dropdownMenu.menuOptions?this.dropdownMenu.menuOptions.context=e:this.dropdownMenu.menuOptions={context:e})}show(){var e;null===(e=this.dropdownMenu)||void 0===e||e.show()}updateEnabled(){var e,t;const i=!this.action.enabled;null===(e=this.actionItem)||void 0===e||e.classList.toggle("disabled",i),null===(t=this.element)||void 0===t||t.classList.toggle("disabled",i)}}},93575:(e,t,i)=>{"use strict";i.d(t,{V:()=>u});var n=i(2548),o=i(21691),s=i(60748),r=i(9194),a=i(11271),l=i(25206),c=i(70959);const d=l.NC("defaultLabel","input");class u extends r.${constructor(e,t,i){super(),this.fixFocusOnOptionClickEnabled=!0,this.imeSessionInProgress=!1,this.additionalTogglesDisposables=this._register(new c.XK),this.additionalToggles=[],this._onDidOptionChange=this._register(new a.Q5),this.onDidOptionChange=this._onDidOptionChange.event,this._onKeyDown=this._register(new a.Q5),this.onKeyDown=this._onKeyDown.event,this._onMouseDown=this._register(new a.Q5),this.onMouseDown=this._onMouseDown.event,this._onInput=this._register(new a.Q5),this._onKeyUp=this._register(new a.Q5),this._onCaseSensitiveKeyDown=this._register(new a.Q5),this.onCaseSensitiveKeyDown=this._onCaseSensitiveKeyDown.event,this._onRegexKeyDown=this._register(new a.Q5),this.onRegexKeyDown=this._onRegexKeyDown.event,this._lastHighlightFindOptions=0,this.placeholder=i.placeholder||"",this.validation=i.validation,this.label=i.label||d,this.showCommonFindToggles=!!i.showCommonFindToggles;const r=i.appendCaseSensitiveLabel||"",l=i.appendWholeWordsLabel||"",u=i.appendRegexLabel||"",h=i.history||[],g=!!i.flexibleHeight,p=!!i.flexibleWidth,f=i.flexibleMaxHeight;if(this.domNode=document.createElement("div"),this.domNode.classList.add("monaco-findInput"),this.inputBox=this._register(new s.pG(this.domNode,t,{placeholder:this.placeholder||"",ariaLabel:this.label||"",validationOptions:{validation:this.validation},history:h,showHistoryHint:i.showHistoryHint,flexibleHeight:g,flexibleWidth:p,flexibleMaxHeight:f,inputBoxStyles:i.inputBoxStyles})),this.showCommonFindToggles){this.regex=this._register(new o.eH({appendTitle:u,isChecked:!1,...i.toggleStyles})),this._register(this.regex.onChange((e=>{this._onDidOptionChange.fire(e),!e&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()}))),this._register(this.regex.onKeyDown((e=>{this._onRegexKeyDown.fire(e)}))),this.wholeWords=this._register(new o.Qx({appendTitle:l,isChecked:!1,...i.toggleStyles})),this._register(this.wholeWords.onChange((e=>{this._onDidOptionChange.fire(e),!e&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()}))),this.caseSensitive=this._register(new o.rk({appendTitle:r,isChecked:!1,...i.toggleStyles})),this._register(this.caseSensitive.onChange((e=>{this._onDidOptionChange.fire(e),!e&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()}))),this._register(this.caseSensitive.onKeyDown((e=>{this._onCaseSensitiveKeyDown.fire(e)})));const e=[this.caseSensitive.domNode,this.wholeWords.domNode,this.regex.domNode];this.onkeydown(this.domNode,(t=>{if(t.equals(15)||t.equals(17)||t.equals(9)){const i=e.indexOf(this.domNode.ownerDocument.activeElement);if(i>=0){let o=-1;t.equals(17)?o=(i+1)%e.length:t.equals(15)&&(o=0===i?e.length-1:i-1),t.equals(9)?(e[i].blur(),this.inputBox.focus()):o>=0&&e[o].focus(),n.zB.stop(t,!0)}}}))}this.controls=document.createElement("div"),this.controls.className="controls",this.controls.style.display=this.showCommonFindToggles?"":"none",this.caseSensitive&&this.controls.append(this.caseSensitive.domNode),this.wholeWords&&this.controls.appendChild(this.wholeWords.domNode),this.regex&&this.controls.appendChild(this.regex.domNode),this.setAdditionalToggles(null===i||void 0===i?void 0:i.additionalToggles),this.controls&&this.domNode.appendChild(this.controls),null===e||void 0===e||e.appendChild(this.domNode),this._register(n.nm(this.inputBox.inputElement,"compositionstart",(e=>{this.imeSessionInProgress=!0}))),this._register(n.nm(this.inputBox.inputElement,"compositionend",(e=>{this.imeSessionInProgress=!1,this._onInput.fire()}))),this.onkeydown(this.inputBox.inputElement,(e=>this._onKeyDown.fire(e))),this.onkeyup(this.inputBox.inputElement,(e=>this._onKeyUp.fire(e))),this.oninput(this.inputBox.inputElement,(e=>this._onInput.fire())),this.onmousedown(this.inputBox.inputElement,(e=>this._onMouseDown.fire(e)))}get onDidChange(){return this.inputBox.onDidChange}layout(e){this.inputBox.layout(),this.updateInputBoxPadding(e.collapsedFindWidget)}enable(){var e,t,i;this.domNode.classList.remove("disabled"),this.inputBox.enable(),null===(e=this.regex)||void 0===e||e.enable(),null===(t=this.wholeWords)||void 0===t||t.enable(),null===(i=this.caseSensitive)||void 0===i||i.enable();for(const n of this.additionalToggles)n.enable()}disable(){var e,t,i;this.domNode.classList.add("disabled"),this.inputBox.disable(),null===(e=this.regex)||void 0===e||e.disable(),null===(t=this.wholeWords)||void 0===t||t.disable(),null===(i=this.caseSensitive)||void 0===i||i.disable();for(const n of this.additionalToggles)n.disable()}setFocusInputOnOptionClick(e){this.fixFocusOnOptionClickEnabled=e}setEnabled(e){e?this.enable():this.disable()}setAdditionalToggles(e){for(const t of this.additionalToggles)t.domNode.remove();this.additionalToggles=[],this.additionalTogglesDisposables.value=new c.SL;for(const t of null!==e&&void 0!==e?e:[])this.additionalTogglesDisposables.value.add(t),this.controls.appendChild(t.domNode),this.additionalTogglesDisposables.value.add(t.onChange((e=>{this._onDidOptionChange.fire(e),!e&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus()}))),this.additionalToggles.push(t);this.additionalToggles.length>0&&(this.controls.style.display=""),this.updateInputBoxPadding()}updateInputBoxPadding(e=!1){var t,i,n,o,s,r;this.inputBox.paddingRight=e?0:(null!==(i=null===(t=this.caseSensitive)||void 0===t?void 0:t.width())&&void 0!==i?i:0)+(null!==(o=null===(n=this.wholeWords)||void 0===n?void 0:n.width())&&void 0!==o?o:0)+(null!==(r=null===(s=this.regex)||void 0===s?void 0:s.width())&&void 0!==r?r:0)+this.additionalToggles.reduce(((e,t)=>e+t.width()),0)}getValue(){return this.inputBox.value}setValue(e){this.inputBox.value!==e&&(this.inputBox.value=e)}select(){this.inputBox.select()}focus(){this.inputBox.focus()}getCaseSensitive(){var e,t;return null!==(t=null===(e=this.caseSensitive)||void 0===e?void 0:e.checked)&&void 0!==t&&t}setCaseSensitive(e){this.caseSensitive&&(this.caseSensitive.checked=e)}getWholeWords(){var e,t;return null!==(t=null===(e=this.wholeWords)||void 0===e?void 0:e.checked)&&void 0!==t&&t}setWholeWords(e){this.wholeWords&&(this.wholeWords.checked=e)}getRegex(){var e,t;return null!==(t=null===(e=this.regex)||void 0===e?void 0:e.checked)&&void 0!==t&&t}setRegex(e){this.regex&&(this.regex.checked=e,this.validate())}focusOnCaseSensitive(){var e;null===(e=this.caseSensitive)||void 0===e||e.focus()}highlightFindOptions(){this.domNode.classList.remove("highlight-"+this._lastHighlightFindOptions),this._lastHighlightFindOptions=1-this._lastHighlightFindOptions,this.domNode.classList.add("highlight-"+this._lastHighlightFindOptions)}validate(){this.inputBox.validate()}showMessage(e){this.inputBox.showMessage(e)}clearMessage(){this.inputBox.hideMessage()}}},21691:(e,t,i)=>{"use strict";i.d(t,{Qx:()=>d,eH:()=>u,rk:()=>c});var n=i(5506),o=i(8419),s=i(25206);const r=s.NC("caseDescription","Match Case"),a=s.NC("wordsDescription","Match Whole Word"),l=s.NC("regexDescription","Use Regular Expression");class c extends n.Z{constructor(e){super({icon:o.l.caseSensitive,title:r+e.appendTitle,isChecked:e.isChecked,inputActiveOptionBorder:e.inputActiveOptionBorder,inputActiveOptionForeground:e.inputActiveOptionForeground,inputActiveOptionBackground:e.inputActiveOptionBackground})}}class d extends n.Z{constructor(e){super({icon:o.l.wholeWord,title:a+e.appendTitle,isChecked:e.isChecked,inputActiveOptionBorder:e.inputActiveOptionBorder,inputActiveOptionForeground:e.inputActiveOptionForeground,inputActiveOptionBackground:e.inputActiveOptionBackground})}}class u extends n.Z{constructor(e){super({icon:o.l.regex,title:l+e.appendTitle,isChecked:e.isChecked,inputActiveOptionBorder:e.inputActiveOptionBorder,inputActiveOptionForeground:e.inputActiveOptionForeground,inputActiveOptionBackground:e.inputActiveOptionBackground})}}},32907:(e,t,i)=>{"use strict";i.d(t,{q:()=>r});var n=i(2548),o=i(66426),s=i(2179);class r{constructor(e,t){var i;this.text="",this.title="",this.highlights=[],this.didEverRender=!1,this.supportIcons=null!==(i=null===t||void 0===t?void 0:t.supportIcons)&&void 0!==i&&i,this.domNode=n.R3(e,n.$("span.monaco-highlighted-label"))}get element(){return this.domNode}set(e,t=[],i="",n){e||(e=""),n&&(e=r.escapeNewLines(e,t)),this.didEverRender&&this.text===e&&this.title===i&&s.fS(this.highlights,t)||(this.text=e,this.title=i,this.highlights=t,this.render())}render(){const e=[];let t=0;for(const i of this.highlights){if(i.end===i.start)continue;if(t{n="\r\n"===e?-1:0,o+=i;for(const i of t)i.end<=o||(i.start>=o&&(i.start+=n),i.end>=o&&(i.end+=n));return i+=n,"⏎"}))}}},10791:(e,t,i)=>{"use strict";i.d(t,{g:()=>d});var n=i(2548),o=i(32907),s=i(6674),r=i(70959),a=i(2179),l=i(68801);class c{constructor(e){this._element=e}get element(){return this._element}set textContent(e){this.disposed||e===this._textContent||(this._textContent=e,this._element.textContent=e)}set className(e){this.disposed||e===this._className||(this._className=e,this._element.className=e)}set empty(e){this.disposed||e===this._empty||(this._empty=e,this._element.style.marginLeft=e?"0":"")}dispose(){this.disposed=!0}}class d extends r.JT{constructor(e,t){super(),this.customHovers=new Map,this.creationOptions=t,this.domNode=this._register(new c(n.R3(e,n.$(".monaco-icon-label")))),this.labelContainer=n.R3(this.domNode.element,n.$(".monaco-icon-label-container")),this.nameContainer=n.R3(this.labelContainer,n.$("span.monaco-icon-name-container")),(null===t||void 0===t?void 0:t.supportHighlights)||(null===t||void 0===t?void 0:t.supportIcons)?this.nameNode=new g(this.nameContainer,!!t.supportIcons):this.nameNode=new u(this.nameContainer),this.hoverDelegate=null===t||void 0===t?void 0:t.hoverDelegate}get element(){return this.domNode.element}setLabel(e,t,i){var n;const s=["monaco-icon-label"],r=["monaco-icon-label-container"];let a="";if(i&&(i.extraClasses&&s.push(...i.extraClasses),i.italic&&s.push("italic"),i.strikethrough&&s.push("strikethrough"),i.disabledCommand&&r.push("disabled"),i.title&&("string"===typeof i.title?a+=i.title:a+=e)),this.domNode.className=s.join(" "),this.domNode.element.setAttribute("aria-label",a),this.labelContainer.className=r.join(" "),this.setupHover((null===i||void 0===i?void 0:i.descriptionTitle)?this.labelContainer:this.element,null===i||void 0===i?void 0:i.title),this.nameNode.setLabel(e,i),t||this.descriptionNode){const e=this.getOrCreateDescriptionNode();e instanceof o.q?(e.set(t||"",i?i.descriptionMatches:void 0,void 0,null===i||void 0===i?void 0:i.labelEscapeNewLines),this.setupHover(e.element,null===i||void 0===i?void 0:i.descriptionTitle)):(e.textContent=t&&(null===i||void 0===i?void 0:i.labelEscapeNewLines)?o.q.escapeNewLines(t,[]):t||"",this.setupHover(e.element,(null===i||void 0===i?void 0:i.descriptionTitle)||""),e.empty=!t)}if((null===i||void 0===i?void 0:i.suffix)||this.suffixNode){const e=this.getOrCreateSuffixNode();e.textContent=null!==(n=null===i||void 0===i?void 0:i.suffix)&&void 0!==n?n:""}}setupHover(e,t){const i=this.customHovers.get(e);if(i&&(i.dispose(),this.customHovers.delete(e)),t)if(this.hoverDelegate){const i=(0,s.g)(this.hoverDelegate,e,t);i&&this.customHovers.set(e,i)}else(0,s.O)(e,t);else e.removeAttribute("title")}dispose(){super.dispose();for(const e of this.customHovers.values())e.dispose();this.customHovers.clear()}getOrCreateSuffixNode(){if(!this.suffixNode){const e=this._register(new c(n.e4(this.nameContainer,n.$("span.monaco-icon-suffix-container"))));this.suffixNode=this._register(new c(n.R3(e.element,n.$("span.label-suffix"))))}return this.suffixNode}getOrCreateDescriptionNode(){var e;if(!this.descriptionNode){const t=this._register(new c(n.R3(this.labelContainer,n.$("span.monaco-icon-description-container"))));(null===(e=this.creationOptions)||void 0===e?void 0:e.supportDescriptionHighlights)?this.descriptionNode=new o.q(n.R3(t.element,n.$("span.label-description")),{supportIcons:!!this.creationOptions.supportIcons}):this.descriptionNode=this._register(new c(n.R3(t.element,n.$("span.label-description"))))}return this.descriptionNode}}class u{constructor(e){this.container=e,this.label=void 0,this.singleLabel=void 0}setLabel(e,t){if(this.label!==e||!(0,a.fS)(this.options,t))if(this.label=e,this.options=t,"string"===typeof e)this.singleLabel||(this.container.innerText="",this.container.classList.remove("multiple"),this.singleLabel=n.R3(this.container,n.$("a.label-name",{id:null===t||void 0===t?void 0:t.domId}))),this.singleLabel.textContent=e;else{this.container.innerText="",this.container.classList.add("multiple"),this.singleLabel=void 0;for(let i=0;i{const o={start:n,end:n+e.length},s=i.map((e=>l.e.intersect(o,e))).filter((e=>!l.e.isEmpty(e))).map((({start:e,end:t})=>({start:e-n,end:t-n})));return n=o.end+t.length,s}))}class g{constructor(e,t){this.container=e,this.supportIcons=t,this.label=void 0,this.singleLabel=void 0}setLabel(e,t){if(this.label!==e||!(0,a.fS)(this.options,t))if(this.label=e,this.options=t,"string"===typeof e)this.singleLabel||(this.container.innerText="",this.container.classList.remove("multiple"),this.singleLabel=new o.q(n.R3(this.container,n.$("a.label-name",{id:null===t||void 0===t?void 0:t.domId})),{supportIcons:this.supportIcons})),this.singleLabel.set(e,null===t||void 0===t?void 0:t.matches,void 0,null===t||void 0===t?void 0:t.labelEscapeNewLines);else{this.container.innerText="",this.container.classList.add("multiple"),this.singleLabel=void 0;const i=(null===t||void 0===t?void 0:t.separator)||"/",s=h(e,i,null===t||void 0===t?void 0:t.matches);for(let r=0;r{"use strict";i.d(t,{O:()=>u,g:()=>g});var n=i(2548),o=i(85398),s=i(55191),r=i(81478),a=i(96559),l=i(70959),c=i(55455),d=i(25206);function u(e,t){(0,c.HD)(t)?e.title=(0,a.x$)(t):(null===t||void 0===t?void 0:t.markdownNotSupportedFallback)?e.title=t.markdownNotSupportedFallback:e.removeAttribute("title")}class h{constructor(e,t,i){this.hoverDelegate=e,this.target=t,this.fadeInAnimation=i}async update(e,t,i){var n;if(this._cancellationTokenSource&&(this._cancellationTokenSource.dispose(!0),this._cancellationTokenSource=void 0),this.isDisposed)return;let o;if(void 0===e||(0,c.HD)(e)||e instanceof HTMLElement)o=e;else if((0,c.mf)(e.markdown)){this._hoverWidget||this.show((0,d.NC)("iconLabel.loading","Loading..."),t),this._cancellationTokenSource=new s.A;const i=this._cancellationTokenSource.token;if(o=await e.markdown(i),void 0===o&&(o=e.markdownNotSupportedFallback),this.isDisposed||i.isCancellationRequested)return}else o=null!==(n=e.markdown)&&void 0!==n?n:e.markdownNotSupportedFallback;this.show(o,t,i)}show(e,t,i){const n=this._hoverWidget;if(this.hasContent(e)){const o={content:e,target:this.target,appearance:{showPointer:"element"===this.hoverDelegate.placement,skipFadeInAnimation:!this.fadeInAnimation||!!n},position:{hoverPosition:2},...i};this._hoverWidget=this.hoverDelegate.showHover(o,t)}null===n||void 0===n||n.dispose()}hasContent(e){return!!e&&(!(0,r.Fr)(e)||!!e.value)}get isDisposed(){var e;return null===(e=this._hoverWidget)||void 0===e?void 0:e.isDisposed}dispose(){var e,t;null===(e=this._hoverWidget)||void 0===e||e.dispose(),null===(t=this._cancellationTokenSource)||void 0===t||t.dispose(!0),this._cancellationTokenSource=void 0}}function g(e,t,i,s){let r,a;const c=(t,i)=>{var n;const o=void 0!==a;t&&(null===a||void 0===a||a.dispose(),a=void 0),i&&(null===r||void 0===r||r.dispose(),r=void 0),o&&(null===(n=e.onDidHideHover)||void 0===n||n.call(e))},d=(n,r,l)=>new o._F((async()=>{a&&!a.isDisposed||(a=new h(e,l||t,n>0),await a.update(i,r,s))}),n),u=()=>{if(r)return;const i=new l.SL,o=e=>c(!1,e.fromElement===t);i.add(n.nm(t,n.tw.MOUSE_LEAVE,o,!0));const s=()=>c(!0,!0);i.add(n.nm(t,n.tw.MOUSE_DOWN,s,!0));const a={targetElements:[t],dispose:()=>{}};if(void 0===e.placement||"mouse"===e.placement){const e=e=>{a.x=e.x+10,e.target instanceof HTMLElement&&e.target.classList.contains("action-label")&&c(!0,!0)};i.add(n.nm(t,n.tw.MOUSE_MOVE,e,!0))}i.add(d(e.delay,!1,a)),r=i},g=n.nm(t,n.tw.MOUSE_OVER,u,!0),p=()=>{if(r)return;const i={targetElements:[t],dispose:()=>{}},o=new l.SL,s=()=>c(!0,!0);o.add(n.nm(t,n.tw.BLUR,s,!0)),o.add(d(e.delay,!1,i)),r=o},f=n.nm(t,n.tw.FOCUS,p,!0),m={show:e=>{c(!1,!0),d(0,e)},hide:()=>{c(!0,!0)},update:async(e,t)=>{i=e,await(null===a||void 0===a?void 0:a.update(i,void 0,t))},dispose:()=>{g.dispose(),f.dispose(),c(!0,!0)}};return m}},66426:(e,t,i)=>{"use strict";i.d(t,{T:()=>r,h:()=>a});var n=i(2548),o=i(99588);const s=new RegExp(`(\\\\)?\\$\\((${o.k.iconNameExpression}(?:${o.k.iconModifierExpression})?)\\)`,"g");function r(e){const t=new Array;let i,n=0,o=0;while(null!==(i=s.exec(e))){o=i.index||0,n{"use strict";i.d(t,{pG:()=>_,g4:()=>m});var n=i(2548),o=i(9172),s=i(73228),r=i(78089),a=i(69332),l=i(60841),c=i(9194),d=i(11271);class u{constructor(e,t=0,i=e.length,n=t-1){this.items=e,this.start=t,this.end=i,this.index=n}current(){return this.index===this.start-1||this.index===this.end?null:this.items[this.index]}next(){return this.index=Math.min(this.index+1,this.end),this.current()}previous(){return this.index=Math.max(this.index-1,this.start-1),this.current()}first(){return this.index=this.start,this.current()}last(){return this.index=this.end-1,this.current()}}class h{constructor(e=[],t=10){this._initialize(e),this._limit=t,this._onChange()}getHistory(){return this._elements}add(e){this._history.delete(e),this._history.add(e),this._onChange()}next(){return this._navigator.next()}previous(){return 0!==this._currentPosition()?this._navigator.previous():null}current(){return this._navigator.current()}first(){return this._navigator.first()}last(){return this._navigator.last()}isLast(){return this._currentPosition()>=this._elements.length-1}isNowhere(){return null===this._navigator.current()}has(e){return this._history.has(e)}_onChange(){this._reduceToLimit();const e=this._elements;this._navigator=new u(e,0,e.length,e.length)}_reduceToLimit(){const e=this._elements;e.length>this._limit&&this._initialize(e.slice(e.length-this._limit))}_currentPosition(){const e=this._navigator.current();return e?this._elements.indexOf(e):-1}_initialize(e){this._history=new Set;for(const t of e)this._history.add(t)}get _elements(){const e=[];return this._history.forEach((t=>e.push(t))),e}}var g=i(2179),p=i(25206);const f=n.$,m={inputBackground:"#3C3C3C",inputForeground:"#CCCCCC",inputValidationInfoBorder:"#55AAFF",inputValidationInfoBackground:"#063B49",inputValidationWarningBorder:"#B89500",inputValidationWarningBackground:"#352A05",inputValidationErrorBorder:"#BE1100",inputValidationErrorBackground:"#5A1D1D",inputBorder:void 0,inputValidationErrorForeground:void 0,inputValidationInfoForeground:void 0,inputValidationWarningForeground:void 0};class v extends c.${constructor(e,t,i){var s;super(),this.state="idle",this.maxHeight=Number.POSITIVE_INFINITY,this._onDidChange=this._register(new d.Q5),this.onDidChange=this._onDidChange.event,this._onDidHeightChange=this._register(new d.Q5),this.onDidHeightChange=this._onDidHeightChange.event,this.contextViewProvider=t,this.options=i,this.message=null,this.placeholder=this.options.placeholder||"",this.tooltip=null!==(s=this.options.tooltip)&&void 0!==s?s:this.placeholder||"",this.ariaLabel=this.options.ariaLabel||"",this.options.validationOptions&&(this.validation=this.options.validationOptions.validation),this.element=n.R3(e,f(".monaco-inputbox.idle"));const a=this.options.flexibleHeight?"textarea":"input",c=n.R3(this.element,f(".ibwrapper"));if(this.input=n.R3(c,f(a+".input.empty")),this.input.setAttribute("autocorrect","off"),this.input.setAttribute("autocapitalize","off"),this.input.setAttribute("spellcheck","false"),this.onfocus(this.input,(()=>this.element.classList.add("synthetic-focus"))),this.onblur(this.input,(()=>this.element.classList.remove("synthetic-focus"))),this.options.flexibleHeight){this.maxHeight="number"===typeof this.options.flexibleMaxHeight?this.options.flexibleMaxHeight:Number.POSITIVE_INFINITY,this.mirror=n.R3(c,f("div.mirror")),this.mirror.innerText=" ",this.scrollableElement=new l.NB(this.element,{vertical:1}),this.options.flexibleWidth&&(this.input.setAttribute("wrap","off"),this.mirror.style.whiteSpace="pre",this.mirror.style.wordWrap="initial"),n.R3(e,this.scrollableElement.getDomNode()),this._register(this.scrollableElement),this._register(this.scrollableElement.onScroll((e=>this.input.scrollTop=e.scrollTop)));const t=this._register(new o.Y(e.ownerDocument,"selectionchange")),i=d.ju.filter(t.event,(()=>{const t=e.ownerDocument.getSelection();return(null===t||void 0===t?void 0:t.anchorNode)===c}));this._register(i(this.updateScrollDimensions,this)),this._register(this.onDidHeightChange(this.updateScrollDimensions,this))}else this.input.type=this.options.type||"text",this.input.setAttribute("wrap","off");this.ariaLabel&&this.input.setAttribute("aria-label",this.ariaLabel),this.placeholder&&!this.options.showPlaceholderOnFocus&&this.setPlaceHolder(this.placeholder),this.tooltip&&this.setTooltip(this.tooltip),this.oninput(this.input,(()=>this.onValueChange())),this.onblur(this.input,(()=>this.onBlur())),this.onfocus(this.input,(()=>this.onFocus())),this._register(this.ignoreGesture(this.input)),setTimeout((()=>this.updateMirror()),0),this.options.actions&&(this.actionbar=this._register(new r.o(this.element)),this.actionbar.push(this.options.actions,{icon:!0,label:!1})),this.applyStyles()}onBlur(){this._hideMessage(),this.options.showPlaceholderOnFocus&&this.input.setAttribute("placeholder","")}onFocus(){this._showMessage(),this.options.showPlaceholderOnFocus&&this.input.setAttribute("placeholder",this.placeholder||"")}setPlaceHolder(e){this.placeholder=e,this.input.setAttribute("placeholder",e)}setTooltip(e){this.tooltip=e,this.input.title=e}get inputElement(){return this.input}get value(){return this.input.value}set value(e){this.input.value!==e&&(this.input.value=e,this.onValueChange())}get height(){return"number"===typeof this.cachedHeight?this.cachedHeight:n.wn(this.element)}focus(){this.input.focus()}blur(){this.input.blur()}hasFocus(){return n.H9(this.input)}select(e=null){this.input.select(),e&&(this.input.setSelectionRange(e.start,e.end),e.end===this.input.value.length&&(this.input.scrollLeft=this.input.scrollWidth))}isSelectionAtEnd(){return this.input.selectionEnd===this.input.value.length&&this.input.selectionStart===this.input.selectionEnd}enable(){this.input.removeAttribute("disabled")}disable(){this.blur(),this.input.disabled=!0,this._hideMessage()}set paddingRight(e){this.input.style.width=`calc(100% - ${e}px)`,this.mirror&&(this.mirror.style.paddingRight=e+"px")}updateScrollDimensions(){if("number"!==typeof this.cachedContentHeight||"number"!==typeof this.cachedHeight||!this.scrollableElement)return;const e=this.cachedContentHeight,t=this.cachedHeight,i=this.input.scrollTop;this.scrollableElement.setScrollDimensions({scrollHeight:e,height:t}),this.scrollableElement.setScrollPosition({scrollTop:i})}showMessage(e,t){if("open"===this.state&&(0,g.fS)(this.message,e))return;this.message=e,this.element.classList.remove("idle"),this.element.classList.remove("info"),this.element.classList.remove("warning"),this.element.classList.remove("error"),this.element.classList.add(this.classForType(e.type));const i=this.stylesForType(this.message.type);this.element.style.border=`1px solid ${n.XT(i.border,"transparent")}`,this.message.content&&(this.hasFocus()||t)&&this._showMessage()}hideMessage(){this.message=null,this.element.classList.remove("info"),this.element.classList.remove("warning"),this.element.classList.remove("error"),this.element.classList.add("idle"),this._hideMessage(),this.applyStyles()}validate(){let e=null;return this.validation&&(e=this.validation(this.value),e?(this.inputElement.setAttribute("aria-invalid","true"),this.showMessage(e)):this.inputElement.hasAttribute("aria-invalid")&&(this.inputElement.removeAttribute("aria-invalid"),this.hideMessage())),null===e||void 0===e?void 0:e.type}stylesForType(e){const t=this.options.inputBoxStyles;switch(e){case 1:return{border:t.inputValidationInfoBorder,background:t.inputValidationInfoBackground,foreground:t.inputValidationInfoForeground};case 2:return{border:t.inputValidationWarningBorder,background:t.inputValidationWarningBackground,foreground:t.inputValidationWarningForeground};default:return{border:t.inputValidationErrorBorder,background:t.inputValidationErrorBackground,foreground:t.inputValidationErrorForeground}}}classForType(e){switch(e){case 1:return"info";case 2:return"warning";default:return"error"}}_showMessage(){if(!this.contextViewProvider||!this.message)return;let e;const t=()=>e.style.width=n.w(this.element)+"px";let i;this.contextViewProvider.showContextView({getAnchor:()=>this.element,anchorAlignment:1,render:i=>{var o,r;if(!this.message)return null;e=n.R3(i,f(".monaco-inputbox-container")),t();const a={inline:!0,className:"monaco-inputbox-message"},l=this.message.formatContent?(0,s.BO)(this.message.content,a):(0,s.IY)(this.message.content,a);l.classList.add(this.classForType(this.message.type));const c=this.stylesForType(this.message.type);return l.style.backgroundColor=null!==(o=c.background)&&void 0!==o?o:"",l.style.color=null!==(r=c.foreground)&&void 0!==r?r:"",l.style.border=c.border?`1px solid ${c.border}`:"",n.R3(e,l),null},onHide:()=>{this.state="closed"},layout:t}),i=3===this.message.type?p.NC("alertErrorMessage","Error: {0}",this.message.content):2===this.message.type?p.NC("alertWarningMessage","Warning: {0}",this.message.content):p.NC("alertInfoMessage","Info: {0}",this.message.content),a.Z9(i),this.state="open"}_hideMessage(){this.contextViewProvider&&("open"===this.state&&this.contextViewProvider.hideContextView(),this.state="idle")}onValueChange(){this._onDidChange.fire(this.value),this.validate(),this.updateMirror(),this.input.classList.toggle("empty",!this.value),"open"===this.state&&this.contextViewProvider&&this.contextViewProvider.layout()}updateMirror(){if(!this.mirror)return;const e=this.value,t=e.charCodeAt(e.length-1),i=10===t?" ":"",n=(e+i).replace(/\u000c/g,"");n?this.mirror.textContent=e+i:this.mirror.innerText=" ",this.layout()}applyStyles(){var e,t,i;const o=this.options.inputBoxStyles,s=null!==(e=o.inputBackground)&&void 0!==e?e:"",r=null!==(t=o.inputForeground)&&void 0!==t?t:"",a=null!==(i=o.inputBorder)&&void 0!==i?i:"";this.element.style.backgroundColor=s,this.element.style.color=r,this.input.style.backgroundColor="inherit",this.input.style.color=r,this.element.style.border=`1px solid ${n.XT(a,"transparent")}`}layout(){if(!this.mirror)return;const e=this.cachedContentHeight;this.cachedContentHeight=n.wn(this.mirror),e!==this.cachedContentHeight&&(this.cachedHeight=Math.min(this.cachedContentHeight,this.maxHeight),this.input.style.height=this.cachedHeight+"px",this._onDidHeightChange.fire(this.cachedContentHeight))}insertAtCursor(e){const t=this.inputElement,i=t.selectionStart,n=t.selectionEnd,o=t.value;null!==i&&null!==n&&(this.value=o.substr(0,i)+e+o.substr(n),t.setSelectionRange(i+1,i+1),this.layout())}dispose(){var e;this._hideMessage(),this.message=null,null===(e=this.actionbar)||void 0===e||e.dispose(),super.dispose()}}class _ extends v{constructor(e,t,i){const o=p.NC({key:"history.inputbox.hint.suffix.noparens",comment:['Text is the suffix of an input field placeholder coming after the action the input field performs, this will be used when the input field ends in a closing parenthesis ")", for example "Filter (e.g. text, !exclude)". The character inserted into the final string is ⇅ to represent the up and down arrow keys.']}," or {0} for history","⇅"),s=p.NC({key:"history.inputbox.hint.suffix.inparens",comment:['Text is the suffix of an input field placeholder coming after the action the input field performs, this will be used when the input field does NOT end in a closing parenthesis (eg. "Find"). The character inserted into the final string is ⇅ to represent the up and down arrow keys.']}," ({0} for history)","⇅");super(e,t,i),this._onDidFocus=this._register(new d.Q5),this.onDidFocus=this._onDidFocus.event,this._onDidBlur=this._register(new d.Q5),this.onDidBlur=this._onDidBlur.event,this.history=new h(i.history,100);const r=()=>{if(i.showHistoryHint&&i.showHistoryHint()&&!this.placeholder.endsWith(o)&&!this.placeholder.endsWith(s)&&this.history.getHistory().length){const e=this.placeholder.endsWith(")")?o:s,t=this.placeholder+e;i.showPlaceholderOnFocus&&!n.H9(this.input)?this.placeholder=t:this.setPlaceHolder(t)}};this.observer=new MutationObserver(((e,t)=>{e.forEach((e=>{e.target.textContent||r()}))})),this.observer.observe(this.input,{attributeFilter:["class"]}),this.onfocus(this.input,(()=>r())),this.onblur(this.input,(()=>{const e=e=>{if(this.placeholder.endsWith(e)){const t=this.placeholder.slice(0,this.placeholder.length-e.length);return i.showPlaceholderOnFocus?this.placeholder=t:this.setPlaceHolder(t),!0}return!1};e(s)||e(o)}))}dispose(){super.dispose(),this.observer&&(this.observer.disconnect(),this.observer=void 0)}addToHistory(e){this.value&&(e||this.value!==this.getCurrentValue())&&this.history.add(this.value)}isAtLastInHistory(){return this.history.isLast()}isNowhereInHistory(){return this.history.isNowhere()}showNextValue(){this.history.has(this.value)||this.addToHistory();let e=this.getNextValue();e&&(e=e===this.value?this.getNextValue():e),this.value=null!==e&&void 0!==e?e:"",a.i7(this.value?this.value:p.NC("clearedInput","Cleared Input"))}showPreviousValue(){this.history.has(this.value)||this.addToHistory();let e=this.getPreviousValue();e&&(e=e===this.value?this.getPreviousValue():e),e&&(this.value=e,a.i7(this.value))}setPlaceHolder(e){super.setPlaceHolder(e),this.setTooltip(e)}onBlur(){super.onBlur(),this._onDidBlur.fire()}onFocus(){super.onFocus(),this._onDidFocus.fire()}getCurrentValue(){let e=this.history.current();return e||(e=this.history.last(),this.history.next()),e}getPreviousValue(){return this.history.previous()||this.history.first()}getNextValue(){return this.history.next()}}},64347:(e,t,i)=>{"use strict";i.d(t,{F:()=>l,e:()=>c});var n=i(2548),o=i(9501),s=i(2179),r=i(25206);const a=n.$,l={keybindingLabelBackground:void 0,keybindingLabelForeground:void 0,keybindingLabelBorder:void 0,keybindingLabelBottomBorder:void 0,keybindingLabelShadow:void 0};class c{constructor(e,t,i){this.os=t,this.keyElements=new Set,this.options=i||Object.create(null);const o=this.options.keybindingLabelForeground;this.domNode=n.R3(e,a(".monaco-keybinding")),o&&(this.domNode.style.color=o),this.didEverRender=!1,e.appendChild(this.domNode)}get element(){return this.domNode}set(e,t){this.didEverRender&&this.keybinding===e&&c.areSame(this.matches,t)||(this.keybinding=e,this.matches=t,this.render())}render(){var e;if(this.clear(),this.keybinding){const t=this.keybinding.getChords();t[0]&&this.renderChord(this.domNode,t[0],this.matches?this.matches.firstPart:null);for(let e=1;e{"use strict";i.d(t,{kX:()=>L,Bv:()=>A});var n=i(1483),o=i(2548),s=i(9172),r=i(1212),a=i(60841),l=i(21921),c=i(85398),d=i(58718),u=i(11271),h=i(70959),g=i(68801),p=i(4225);function f(e,t){const i=[];for(const n of t){if(e.start>=n.range.end)continue;if(e.ende.concat(t)),[]))}class b{get paddingTop(){return this._paddingTop}set paddingTop(e){this._size=this._size+e-this._paddingTop,this._paddingTop=e}constructor(e){this.groups=[],this._size=0,this._paddingTop=0,this._paddingTop=null!==e&&void 0!==e?e:0,this._size=this._paddingTop}splice(e,t,i=[]){const n=i.length-t,o=f({start:0,end:e},this.groups),s=f({start:e+t,end:Number.POSITIVE_INFINITY},this.groups).map((e=>({range:m(e.range,n),size:e.size}))),r=i.map(((t,i)=>({range:{start:e+i,end:e+i+1},size:t.size})));this.groups=_(o,r,s),this._size=this._paddingTop+this.groups.reduce(((e,t)=>e+t.size*(t.range.end-t.range.start)),0)}get count(){const e=this.groups.length;return e?this.groups[e-1].range.end:0}get size(){return this._size}indexAt(e){if(e<0)return-1;if(e{for(const i of e){const e=this.getRenderer(t);e.disposeTemplate(i.templateData),i.templateData=null}})),this.cache.clear(),this.transactionNodesPendingRemoval.clear()}getRenderer(e){const t=this.renderers.get(e);if(!t)throw new Error(`No renderer found for ${e}`);return t}}var x=i(98642),C=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"===typeof Reflect&&"function"===typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r};const S={CurrentDragAndDropData:void 0},k={useShadows:!0,verticalScrollMode:1,setRowLineHeight:!0,setRowHeight:!0,supportDynamicHeights:!1,dnd:{getDragElements(e){return[e]},getDragURI(){return null},onDragStart(){},onDragOver(){return!1},drop(){},dispose(){}},horizontalScrolling:!1,transformOptimization:!0,alwaysConsumeMouseWheel:!0};class L{constructor(e){this.elements=e}update(){}getData(){return this.elements}}class E{constructor(e){this.elements=e}update(){}getData(){return this.elements}}class N{constructor(){this.types=[],this.files=[]}update(e){if(e.types&&this.types.splice(0,this.types.length,...e.types),e.files){this.files.splice(0,this.files.length);for(let t=0;ti,(null===e||void 0===e?void 0:e.getPosInSet)?this.getPosInSet=e.getPosInSet.bind(e):this.getPosInSet=(e,t)=>t+1,(null===e||void 0===e?void 0:e.getRole)?this.getRole=e.getRole.bind(e):this.getRole=e=>"listitem",(null===e||void 0===e?void 0:e.isChecked)?this.isChecked=e.isChecked.bind(e):this.isChecked=e=>{}}}class A{get contentHeight(){return this.rangeMap.size}get onDidScroll(){return this.scrollableElement.onScroll}get scrollableElementDomNode(){return this.scrollableElement.getDomNode()}get horizontalScrolling(){return this._horizontalScrolling}set horizontalScrolling(e){if(e!==this._horizontalScrolling){if(e&&this.supportDynamicHeights)throw new Error("Horizontal scrolling and dynamic heights not supported simultaneously");if(this._horizontalScrolling=e,this.domNode.classList.toggle("horizontal-scrolling",this._horizontalScrolling),this._horizontalScrolling){for(const e of this.items)this.measureItemWidth(e);this.updateScrollWidth(),this.scrollableElement.setScrollDimensions({width:(0,o.FK)(this.domNode)}),this.rowsContainer.style.width=`${Math.max(this.scrollWidth||0,this.renderWidth)}px`}else this.scrollableElementWidthDelayer.cancel(),this.scrollableElement.setScrollDimensions({width:this.renderWidth,scrollWidth:this.renderWidth}),this.rowsContainer.style.width=""}}constructor(e,t,i,n=k){var s,l,d,g,f,m,v,_,y,x,C,S,L;if(this.virtualDelegate=t,this.domId="list_id_"+ ++A.InstanceCount,this.renderers=new Map,this.renderWidth=0,this._scrollHeight=0,this.scrollableElementUpdateDisposable=null,this.scrollableElementWidthDelayer=new c.vp(50),this.splicing=!1,this.dragOverAnimationStopDisposable=h.JT.None,this.dragOverMouseY=0,this.canDrop=!1,this.currentDragFeedbackDisposable=h.JT.None,this.onDragLeaveTimeout=h.JT.None,this.disposables=new h.SL,this._onDidChangeContentHeight=new u.Q5,this._onDidChangeContentWidth=new u.Q5,this.onDidChangeContentHeight=u.ju.latch(this._onDidChangeContentHeight.event,void 0,this.disposables),this._horizontalScrolling=!1,n.horizontalScrolling&&n.supportDynamicHeights)throw new Error("Horizontal scrolling and dynamic heights not supported simultaneously");this.items=[],this.itemId=0,this.rangeMap=new b(null!==(s=n.paddingTop)&&void 0!==s?s:0);for(const o of i)this.renderers.set(o.templateId,o);this.cache=this.disposables.add(new w(this.renderers)),this.lastRenderTop=0,this.lastRenderHeight=0,this.domNode=document.createElement("div"),this.domNode.className="monaco-list",this.domNode.classList.add(this.domId),this.domNode.tabIndex=0,this.domNode.classList.toggle("mouse-support","boolean"!==typeof n.mouseSupport||n.mouseSupport),this._horizontalScrolling=null!==(l=n.horizontalScrolling)&&void 0!==l?l:k.horizontalScrolling,this.domNode.classList.toggle("horizontal-scrolling",this._horizontalScrolling),this.paddingBottom="undefined"===typeof n.paddingBottom?0:n.paddingBottom,this.accessibilityProvider=new T(n.accessibilityProvider),this.rowsContainer=document.createElement("div"),this.rowsContainer.className="monaco-list-rows";const E=null!==(d=n.transformOptimization)&&void 0!==d?d:k.transformOptimization;E&&(this.rowsContainer.style.transform="translate3d(0px, 0px, 0px)",this.rowsContainer.style.overflow="hidden",this.rowsContainer.style.contain="strict"),this.disposables.add(r.o.addTarget(this.rowsContainer)),this.scrollable=this.disposables.add(new p.Rm({forceIntegerValues:!0,smoothScrollDuration:null!==(g=n.smoothScrolling)&&void 0!==g&&g?125:0,scheduleAtNextAnimationFrame:e=>(0,o.jL)((0,o.Jj)(this.domNode),e)})),this.scrollableElement=this.disposables.add(new a.$Z(this.rowsContainer,{alwaysConsumeMouseWheel:null!==(f=n.alwaysConsumeMouseWheel)&&void 0!==f?f:k.alwaysConsumeMouseWheel,horizontal:1,vertical:null!==(m=n.verticalScrollMode)&&void 0!==m?m:k.verticalScrollMode,useShadows:null!==(v=n.useShadows)&&void 0!==v?v:k.useShadows,mouseWheelScrollSensitivity:n.mouseWheelScrollSensitivity,fastScrollSensitivity:n.fastScrollSensitivity,scrollByPage:n.scrollByPage},this.scrollable)),this.domNode.appendChild(this.scrollableElement.getDomNode()),e.appendChild(this.domNode),this.scrollableElement.onScroll(this.onScroll,this,this.disposables),this.disposables.add((0,o.nm)(this.rowsContainer,r.t.Change,(e=>this.onTouchChange(e)))),this.disposables.add((0,o.nm)(this.scrollableElement.getDomNode(),"scroll",(e=>e.target.scrollTop=0))),this.disposables.add((0,o.nm)(this.domNode,"dragover",(e=>this.onDragOver(this.toDragEvent(e))))),this.disposables.add((0,o.nm)(this.domNode,"drop",(e=>this.onDrop(this.toDragEvent(e))))),this.disposables.add((0,o.nm)(this.domNode,"dragleave",(e=>this.onDragLeave(this.toDragEvent(e))))),this.disposables.add((0,o.nm)(this.domNode,"dragend",(e=>this.onDragEnd(e)))),this.setRowLineHeight=null!==(_=n.setRowLineHeight)&&void 0!==_?_:k.setRowLineHeight,this.setRowHeight=null!==(y=n.setRowHeight)&&void 0!==y?y:k.setRowHeight,this.supportDynamicHeights=null!==(x=n.supportDynamicHeights)&&void 0!==x?x:k.supportDynamicHeights,this.dnd=null!==(C=n.dnd)&&void 0!==C?C:this.disposables.add(k.dnd),this.layout(null===(S=n.initialSize)||void 0===S?void 0:S.height,null===(L=n.initialSize)||void 0===L?void 0:L.width)}updateOptions(e){let t;if(void 0!==e.paddingBottom&&(this.paddingBottom=e.paddingBottom,this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight})),void 0!==e.smoothScrolling&&this.scrollable.setSmoothScrollDuration(e.smoothScrolling?125:0),void 0!==e.horizontalScrolling&&(this.horizontalScrolling=e.horizontalScrolling),void 0!==e.scrollByPage&&(t={...null!==t&&void 0!==t?t:{},scrollByPage:e.scrollByPage}),void 0!==e.mouseWheelScrollSensitivity&&(t={...null!==t&&void 0!==t?t:{},mouseWheelScrollSensitivity:e.mouseWheelScrollSensitivity}),void 0!==e.fastScrollSensitivity&&(t={...null!==t&&void 0!==t?t:{},fastScrollSensitivity:e.fastScrollSensitivity}),t&&this.scrollableElement.updateOptions(t),void 0!==e.paddingTop&&e.paddingTop!==this.rangeMap.paddingTop){const t=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),i=e.paddingTop-this.rangeMap.paddingTop;this.rangeMap.paddingTop=e.paddingTop,this.render(t,Math.max(0,this.lastRenderTop+i),this.lastRenderHeight,void 0,void 0,!0),this.setScrollTop(this.lastRenderTop),this.eventuallyUpdateScrollDimensions(),this.supportDynamicHeights&&this._rerender(this.lastRenderTop,this.lastRenderHeight)}}splice(e,t,i=[]){if(this.splicing)throw new Error("Can't run recursive splices.");this.splicing=!0;try{return this._splice(e,t,i)}finally{this.splicing=!1,this._onDidChangeContentHeight.fire(this.contentHeight)}}_splice(e,t,i=[]){const n=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),o={start:e,end:e+t},s=g.e.intersect(n,o),r=new Map;for(let h=s.end-1;h>=s.start;h--){const e=this.items[h];if(e.dragStartDisposable.dispose(),e.checkedDisposable.dispose(),e.row){let t=r.get(e.templateId);t||(t=[],r.set(e.templateId,t));const i=this.renderers.get(e.templateId);i&&i.disposeElement&&i.disposeElement(e.element,h,e.row.templateData,e.size),t.push(e.row)}e.row=null}const a={start:e+t,end:this.items.length},l=g.e.intersect(a,n),c=g.e.relativeComplement(a,n),d=i.map((e=>({id:String(this.itemId++),element:e,templateId:this.virtualDelegate.getTemplateId(e),size:this.virtualDelegate.getHeight(e),width:void 0,hasDynamicHeight:!!this.virtualDelegate.hasDynamicHeight&&this.virtualDelegate.hasDynamicHeight(e),lastDynamicHeightWidth:void 0,row:null,uri:void 0,dropTarget:!1,dragStartDisposable:h.JT.None,checkedDisposable:h.JT.None})));let u;0===e&&t>=this.items.length?(this.rangeMap=new b(this.rangeMap.paddingTop),this.rangeMap.splice(0,0,d),u=this.items,this.items=d):(this.rangeMap.splice(e,t,d),u=this.items.splice(e,t,...d));const p=i.length-t,f=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),v=m(l,p),_=g.e.intersect(f,v);for(let h=_.start;h<_.end;h++)this.updateItemInDOM(this.items[h],h);const y=g.e.relativeComplement(v,f);for(const h of y)for(let e=h.start;em(e,p))),x={start:e,end:e+i.length},C=[x,...w].map((e=>g.e.intersect(f,e))),S=this.getNextToLastElement(C);for(const h of C)for(let e=h.start;ee.element))}eventuallyUpdateScrollDimensions(){this._scrollHeight=this.contentHeight,this.rowsContainer.style.height=`${this._scrollHeight}px`,this.scrollableElementUpdateDisposable||(this.scrollableElementUpdateDisposable=(0,o.jL)((0,o.Jj)(this.domNode),(()=>{this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight}),this.updateScrollWidth(),this.scrollableElementUpdateDisposable=null})))}eventuallyUpdateScrollWidth(){this.horizontalScrolling?this.scrollableElementWidthDelayer.trigger((()=>this.updateScrollWidth())):this.scrollableElementWidthDelayer.cancel()}updateScrollWidth(){if(!this.horizontalScrolling)return;let e=0;for(const t of this.items)"undefined"!==typeof t.width&&(e=Math.max(e,t.width));this.scrollWidth=e,this.scrollableElement.setScrollDimensions({scrollWidth:0===e?0:e+10}),this._onDidChangeContentWidth.fire(this.scrollWidth)}rerender(){if(this.supportDynamicHeights){for(const e of this.items)e.lastDynamicHeightWidth=void 0;this._rerender(this.lastRenderTop,this.lastRenderHeight)}}get length(){return this.items.length}get renderHeight(){const e=this.scrollableElement.getScrollDimensions();return e.height}get firstVisibleIndex(){const e=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight);return e.start}element(e){return this.items[e].element}indexOf(e){return this.items.findIndex((t=>t.element===e))}domElement(e){const t=this.items[e].row;return t&&t.domNode}elementHeight(e){return this.items[e].size}elementTop(e){return this.rangeMap.positionAt(e)}indexAt(e){return this.rangeMap.indexAt(e)}indexAfter(e){return this.rangeMap.indexAfter(e)}layout(e,t){const i={height:"number"===typeof e?e:(0,o.If)(this.domNode)};this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,i.scrollHeight=this.scrollHeight),this.scrollableElement.setScrollDimensions(i),"undefined"!==typeof t&&(this.renderWidth=t,this.supportDynamicHeights&&this._rerender(this.scrollTop,this.renderHeight)),this.horizontalScrolling&&this.scrollableElement.setScrollDimensions({width:"number"===typeof t?t:(0,o.FK)(this.domNode)})}render(e,t,i,n,o,s=!1){const r=this.getRenderRange(t,i),a=g.e.relativeComplement(r,e),l=g.e.relativeComplement(e,r),c=this.getNextToLastElement(a);if(s){const t=g.e.intersect(e,r);for(let e=t.start;e{for(const e of l)for(let t=e.start;tn.row.domNode.setAttribute("aria-checked",String(!!e));e(a.value),n.checkedDisposable=a.onDidChange(e)}!s&&n.row.domNode.parentElement||(t?this.rowsContainer.insertBefore(n.row.domNode,t):this.rowsContainer.appendChild(n.row.domNode)),this.updateItemInDOM(n,e);const l=this.renderers.get(n.templateId);if(!l)throw new Error(`No renderer found for template id ${n.templateId}`);null===l||void 0===l||l.renderElement(n.element,e,n.row.templateData,n.size);const c=this.dnd.getDragURI(n.element);n.dragStartDisposable.dispose(),n.row.domNode.draggable=!!c,c&&(n.dragStartDisposable=(0,o.nm)(n.row.domNode,"dragstart",(e=>this.onDragStart(n.element,c,e)))),this.horizontalScrolling&&(this.measureItemWidth(n),this.eventuallyUpdateScrollWidth())}measureItemWidth(e){if(!e.row||!e.row.domNode)return;e.row.domNode.style.width="fit-content",e.width=(0,o.FK)(e.row.domNode);const t=(0,o.Jj)(e.row.domNode).getComputedStyle(e.row.domNode);t.paddingLeft&&(e.width+=parseFloat(t.paddingLeft)),t.paddingRight&&(e.width+=parseFloat(t.paddingRight)),e.row.domNode.style.width=""}updateItemInDOM(e,t){e.row.domNode.style.top=`${this.elementTop(t)}px`,this.setRowHeight&&(e.row.domNode.style.height=`${e.size}px`),this.setRowLineHeight&&(e.row.domNode.style.lineHeight=`${e.size}px`),e.row.domNode.setAttribute("data-index",`${t}`),e.row.domNode.setAttribute("data-last-element",t===this.length-1?"true":"false"),e.row.domNode.setAttribute("data-parity",t%2===0?"even":"odd"),e.row.domNode.setAttribute("aria-setsize",String(this.accessibilityProvider.getSetSize(e.element,t,this.length))),e.row.domNode.setAttribute("aria-posinset",String(this.accessibilityProvider.getPosInSet(e.element,t))),e.row.domNode.setAttribute("id",this.getElementDomId(t)),e.row.domNode.classList.toggle("drop-target",e.dropTarget)}removeItemFromDOM(e){const t=this.items[e];if(t.dragStartDisposable.dispose(),t.checkedDisposable.dispose(),t.row){const i=this.renderers.get(t.templateId);i&&i.disposeElement&&i.disposeElement(t.element,e,t.row.templateData,t.size),this.cache.release(t.row),t.row=null}this.horizontalScrolling&&this.eventuallyUpdateScrollWidth()}getScrollTop(){const e=this.scrollableElement.getScrollPosition();return e.scrollTop}setScrollTop(e,t){this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight})),this.scrollableElement.setScrollPosition({scrollTop:e,reuseAnimation:t})}get scrollTop(){return this.getScrollTop()}set scrollTop(e){this.setScrollTop(e)}get scrollHeight(){return this._scrollHeight+(this.horizontalScrolling?10:0)+this.paddingBottom}get onMouseClick(){return u.ju.map(this.disposables.add(new s.Y(this.domNode,"click")).event,(e=>this.toMouseEvent(e)),this.disposables)}get onMouseDblClick(){return u.ju.map(this.disposables.add(new s.Y(this.domNode,"dblclick")).event,(e=>this.toMouseEvent(e)),this.disposables)}get onMouseMiddleClick(){return u.ju.filter(u.ju.map(this.disposables.add(new s.Y(this.domNode,"auxclick")).event,(e=>this.toMouseEvent(e)),this.disposables),(e=>1===e.browserEvent.button),this.disposables)}get onMouseDown(){return u.ju.map(this.disposables.add(new s.Y(this.domNode,"mousedown")).event,(e=>this.toMouseEvent(e)),this.disposables)}get onMouseOver(){return u.ju.map(this.disposables.add(new s.Y(this.domNode,"mouseover")).event,(e=>this.toMouseEvent(e)),this.disposables)}get onMouseOut(){return u.ju.map(this.disposables.add(new s.Y(this.domNode,"mouseout")).event,(e=>this.toMouseEvent(e)),this.disposables)}get onContextMenu(){return u.ju.any(u.ju.map(this.disposables.add(new s.Y(this.domNode,"contextmenu")).event,(e=>this.toMouseEvent(e)),this.disposables),u.ju.map(this.disposables.add(new s.Y(this.domNode,r.t.Contextmenu)).event,(e=>this.toGestureEvent(e)),this.disposables))}get onTouchStart(){return u.ju.map(this.disposables.add(new s.Y(this.domNode,"touchstart")).event,(e=>this.toTouchEvent(e)),this.disposables)}get onTap(){return u.ju.map(this.disposables.add(new s.Y(this.rowsContainer,r.t.Tap)).event,(e=>this.toGestureEvent(e)),this.disposables)}toMouseEvent(e){const t=this.getItemIndexFromEventTarget(e.target||null),i="undefined"===typeof t?void 0:this.items[t],n=i&&i.element;return{browserEvent:e,index:t,element:n}}toTouchEvent(e){const t=this.getItemIndexFromEventTarget(e.target||null),i="undefined"===typeof t?void 0:this.items[t],n=i&&i.element;return{browserEvent:e,index:t,element:n}}toGestureEvent(e){const t=this.getItemIndexFromEventTarget(e.initialTarget||null),i="undefined"===typeof t?void 0:this.items[t],n=i&&i.element;return{browserEvent:e,index:t,element:n}}toDragEvent(e){const t=this.getItemIndexFromEventTarget(e.target||null),i="undefined"===typeof t?void 0:this.items[t],n=i&&i.element;return{browserEvent:e,index:t,element:n}}onScroll(e){try{const t=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight);this.render(t,e.scrollTop,e.height,e.scrollLeft,e.scrollWidth),this.supportDynamicHeights&&this._rerender(e.scrollTop,e.height,e.inSmoothScrolling)}catch(t){throw console.error("Got bad scroll event:",e),t}}onTouchChange(e){e.preventDefault(),e.stopPropagation(),this.scrollTop-=e.translationY}onDragStart(e,t,i){var s,r;if(!i.dataTransfer)return;const a=this.dnd.getDragElements(e);if(i.dataTransfer.effectAllowed="copyMove",i.dataTransfer.setData(n.g.TEXT,t),i.dataTransfer.setDragImage){let e;this.dnd.getDragLabel&&(e=this.dnd.getDragLabel(a,i)),"undefined"===typeof e&&(e=String(a.length));const t=(0,o.$)(".monaco-drag-image");t.textContent=e;const n=e=>{while(e&&!e.classList.contains("monaco-workbench"))e=e.parentElement;return e||this.domNode.ownerDocument},s=n(this.domNode);s.appendChild(t),i.dataTransfer.setDragImage(t,-10,-10),setTimeout((()=>s.removeChild(t)),0)}this.domNode.classList.add("dragging"),this.currentDragData=new L(a),S.CurrentDragAndDropData=new E(a),null===(r=(s=this.dnd).onDragStart)||void 0===r||r.call(s,this.currentDragData,i)}onDragOver(e){var t;if(e.browserEvent.preventDefault(),this.onDragLeaveTimeout.dispose(),S.CurrentDragAndDropData&&"vscode-ui"===S.CurrentDragAndDropData.getData())return!1;if(this.setupDragAndDropScrollTopAnimation(e.browserEvent),!e.browserEvent.dataTransfer)return!1;if(!this.currentDragData)if(S.CurrentDragAndDropData)this.currentDragData=S.CurrentDragAndDropData;else{if(!e.browserEvent.dataTransfer.types)return!1;this.currentDragData=new N}const i=this.dnd.onDragOver(this.currentDragData,e.element,e.index,e.browserEvent);if(this.canDrop="boolean"===typeof i?i:i.accept,!this.canDrop)return this.currentDragFeedback=void 0,this.currentDragFeedbackDisposable.dispose(),!1;let n;if(e.browserEvent.dataTransfer.dropEffect="boolean"!==typeof i&&0===i.effect?"copy":"move",n="boolean"!==typeof i&&i.feedback?i.feedback:"undefined"===typeof e.index?[-1]:[e.index],n=(0,l.EB)(n).filter((e=>e>=-1&&ee-t)),n=-1===n[0]?[-1]:n,D(this.currentDragFeedback,n))return!0;if(this.currentDragFeedback=n,this.currentDragFeedbackDisposable.dispose(),-1===n[0])this.domNode.classList.add("drop-target"),this.rowsContainer.classList.add("drop-target"),this.currentDragFeedbackDisposable=(0,h.OF)((()=>{this.domNode.classList.remove("drop-target"),this.rowsContainer.classList.remove("drop-target")}));else{for(const e of n){const i=this.items[e];i.dropTarget=!0,null===(t=i.row)||void 0===t||t.domNode.classList.add("drop-target")}this.currentDragFeedbackDisposable=(0,h.OF)((()=>{var e;for(const t of n){const i=this.items[t];i.dropTarget=!1,null===(e=i.row)||void 0===e||e.domNode.classList.remove("drop-target")}}))}return!0}onDragLeave(e){var t,i;this.onDragLeaveTimeout.dispose(),this.onDragLeaveTimeout=(0,c.Vg)((()=>this.clearDragOverFeedback()),100,this.disposables),this.currentDragData&&(null===(i=(t=this.dnd).onDragLeave)||void 0===i||i.call(t,this.currentDragData,e.element,e.index,e.browserEvent))}onDrop(e){if(!this.canDrop)return;const t=this.currentDragData;this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.domNode.classList.remove("dragging"),this.currentDragData=void 0,S.CurrentDragAndDropData=void 0,t&&e.browserEvent.dataTransfer&&(e.browserEvent.preventDefault(),t.update(e.browserEvent.dataTransfer),this.dnd.drop(t,e.element,e.index,e.browserEvent))}onDragEnd(e){var t,i;this.canDrop=!1,this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.domNode.classList.remove("dragging"),this.currentDragData=void 0,S.CurrentDragAndDropData=void 0,null===(i=(t=this.dnd).onDragEnd)||void 0===i||i.call(t,e)}clearDragOverFeedback(){this.currentDragFeedback=void 0,this.currentDragFeedbackDisposable.dispose(),this.currentDragFeedbackDisposable=h.JT.None}setupDragAndDropScrollTopAnimation(e){if(!this.dragOverAnimationDisposable){const e=(0,o.xQ)(this.domNode).top;this.dragOverAnimationDisposable=(0,o.jt)((0,o.Jj)(this.domNode),this.animateDragAndDropScrollTop.bind(this,e))}this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationStopDisposable=(0,c.Vg)((()=>{this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)}),1e3,this.disposables),this.dragOverMouseY=e.pageY}animateDragAndDropScrollTop(e){if(void 0===this.dragOverMouseY)return;const t=this.dragOverMouseY-e,i=this.renderHeight-35;t<35?this.scrollTop+=Math.max(-14,Math.floor(.3*(t-35))):t>i&&(this.scrollTop+=Math.min(14,Math.floor(.3*(t-i))))}teardownDragAndDropScrollTopAnimation(){this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)}getItemIndexFromEventTarget(e){const t=this.scrollableElement.getDomNode();let i=e;while(i instanceof HTMLElement&&i!==this.rowsContainer&&t.contains(i)){const e=i.getAttribute("data-index");if(e){const t=Number(e);if(!isNaN(t))return t}i=i.parentElement}}getRenderRange(e,t){return{start:this.rangeMap.indexAt(e),end:this.rangeMap.indexAfter(e+t-1)}}_rerender(e,t,i){const n=this.getRenderRange(e,t);let o,s;e===this.elementTop(n.start)?(o=n.start,s=0):n.end-n.start>1&&(o=n.start+1,s=this.elementTop(o)-e);let r=0;while(1){const a=this.getRenderRange(e,t);let l=!1;for(let e=a.start;e{"use strict";i.d(t,{wD:()=>$,aV:()=>te,sx:()=>q,AA:()=>y,dk:()=>R,iK:()=>P,cK:()=>D,$B:()=>I,hD:()=>A,wn:()=>V,Zo:()=>W,Et:()=>M,uZ:()=>j});var n=i(2548),o=i(9172),s=i(45429),r=i(1212),a=i(69332);class l{constructor(e){this.spliceables=e}splice(e,t,i){this.spliceables.forEach((n=>n.splice(e,t,i)))}}var c=i(21921),d=i(85398),u=i(60204),h=i(58718),g=i(11271),p=i(90774),f=i(70959),m=i(46304),v=i(47606),_=i(55455);class b extends Error{constructor(e,t){super(`ListError [${e}] ${t}`)}}var y,w,x=i(75461),C=i(75467),S=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"===typeof Reflect&&"function"===typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r};class k{constructor(e){this.trait=e,this.renderedElements=[]}get templateId(){return`template:${this.trait.name}`}renderTemplate(e){return e}renderElement(e,t,i){const n=this.renderedElements.findIndex((e=>e.templateData===i));if(n>=0){const e=this.renderedElements[n];this.trait.unrender(i),e.index=t}else{const e={index:t,templateData:i};this.renderedElements.push(e)}this.trait.renderIndex(t,i)}splice(e,t,i){const n=[];for(const o of this.renderedElements)o.index=e+t&&n.push({index:o.index+i-t,templateData:o.templateData});this.renderedElements=n}renderIndexes(e){for(const{index:t,templateData:i}of this.renderedElements)e.indexOf(t)>-1&&this.trait.renderIndex(t,i)}disposeTemplate(e){const t=this.renderedElements.findIndex((t=>t.templateData===e));t<0||this.renderedElements.splice(t,1)}}class L{get name(){return this._trait}get renderer(){return new k(this)}constructor(e){this._trait=e,this.length=0,this.indexes=[],this.sortedIndexes=[],this._onChange=new g.Q5,this.onChange=this._onChange.event}splice(e,t,i){var n;t=Math.max(0,Math.min(t,this.length-e));const o=i.length-t,s=e+t,r=[];let a=0;while(a=s)r.push(this.sortedIndexes[a++]+o);const l=this.length+o;if(this.sortedIndexes.length>0&&0===r.length&&l>0){const t=null!==(n=this.sortedIndexes.find((t=>t>=e)))&&void 0!==n?n:l-1;r.push(Math.min(t,l-1))}this.renderer.splice(e,t,i.length),this._set(r,r),this.length=l}renderIndex(e,t){t.classList.toggle(this._trait,this.contains(e))}unrender(e){e.classList.remove(this._trait)}set(e,t){return this._set(e,[...e].sort(Z),t)}_set(e,t,i){const n=this.indexes,o=this.sortedIndexes;this.indexes=e,this.sortedIndexes=t;const s=Y(o,e);return this.renderer.renderIndexes(s),this._onChange.fire({indexes:e,browserEvent:i}),n}get(){return this.indexes}contains(e){return(0,c.ry)(this.sortedIndexes,e,Z)>=0}dispose(){(0,f.B9)(this._onChange)}}S([h.H],L.prototype,"renderer",null);class E extends L{constructor(e){super("selected"),this.setAriaSelected=e}renderIndex(e,t){super.renderIndex(e,t),this.setAriaSelected&&(this.contains(e)?t.setAttribute("aria-selected","true"):t.setAttribute("aria-selected","false"))}}class N{constructor(e,t,i){this.trait=e,this.view=t,this.identityProvider=i}splice(e,t,i){if(!this.identityProvider)return this.trait.splice(e,t,new Array(i.length).fill(!1));const n=this.trait.get().map((e=>this.identityProvider.getId(this.view.element(e)).toString()));if(0===n.length)return this.trait.splice(e,t,new Array(i.length).fill(!1));const o=new Set(n),s=i.map((e=>o.has(this.identityProvider.getId(e).toString())));this.trait.splice(e,t,s)}}function D(e){return"INPUT"===e.tagName||"TEXTAREA"===e.tagName}function T(e,t){return!!e.classList.contains(t)||!e.classList.contains("monaco-list")&&(!!e.parentElement&&T(e.parentElement,t))}function A(e){return T(e,"monaco-editor")}function I(e){return T(e,"monaco-custom-toggle")}function R(e){return T(e,"action-item")}function M(e){return T(e,"monaco-tree-sticky-row")}function P(e){return!!("A"===e.tagName&&e.classList.contains("monaco-button")||"DIV"===e.tagName&&e.classList.contains("monaco-button-dropdown"))||!e.classList.contains("monaco-list")&&(!!e.parentElement&&P(e.parentElement))}class O{get onKeyDown(){return g.ju.chain(this.disposables.add(new o.Y(this.view.domNode,"keydown")).event,(e=>e.filter((e=>!D(e.target))).map((e=>new s.y(e)))))}constructor(e,t,i){this.list=e,this.view=t,this.disposables=new f.SL,this.multipleSelectionDisposables=new f.SL,this.multipleSelectionSupport=i.multipleSelectionSupport,this.disposables.add(this.onKeyDown((e=>{switch(e.keyCode){case 3:return this.onEnter(e);case 16:return this.onUpArrow(e);case 18:return this.onDownArrow(e);case 11:return this.onPageUpArrow(e);case 12:return this.onPageDownArrow(e);case 9:return this.onEscape(e);case 31:this.multipleSelectionSupport&&(v.dz?e.metaKey:e.ctrlKey)&&this.onCtrlA(e)}})))}updateOptions(e){void 0!==e.multipleSelectionSupport&&(this.multipleSelectionSupport=e.multipleSelectionSupport)}onEnter(e){e.preventDefault(),e.stopPropagation(),this.list.setSelection(this.list.getFocus(),e.browserEvent)}onUpArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusPrevious(1,!1,e.browserEvent);const t=this.list.getFocus()[0];this.list.setAnchor(t),this.list.reveal(t),this.view.domNode.focus()}onDownArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusNext(1,!1,e.browserEvent);const t=this.list.getFocus()[0];this.list.setAnchor(t),this.list.reveal(t),this.view.domNode.focus()}onPageUpArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusPreviousPage(e.browserEvent);const t=this.list.getFocus()[0];this.list.setAnchor(t),this.list.reveal(t),this.view.domNode.focus()}onPageDownArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusNextPage(e.browserEvent);const t=this.list.getFocus()[0];this.list.setAnchor(t),this.list.reveal(t),this.view.domNode.focus()}onCtrlA(e){e.preventDefault(),e.stopPropagation(),this.list.setSelection((0,c.w6)(this.list.length),e.browserEvent),this.list.setAnchor(void 0),this.view.domNode.focus()}onEscape(e){this.list.getSelection().length&&(e.preventDefault(),e.stopPropagation(),this.list.setSelection([],e.browserEvent),this.list.setAnchor(void 0),this.view.domNode.focus())}dispose(){this.disposables.dispose(),this.multipleSelectionDisposables.dispose()}}S([h.H],O.prototype,"onKeyDown",null),function(e){e[e["Automatic"]=0]="Automatic",e[e["Trigger"]=1]="Trigger"}(y||(y={})),function(e){e[e["Idle"]=0]="Idle",e[e["Typing"]=1]="Typing"}(w||(w={}));const F=new class{mightProducePrintableCharacter(e){return!(e.ctrlKey||e.metaKey||e.altKey)&&(e.keyCode>=31&&e.keyCode<=56||e.keyCode>=21&&e.keyCode<=30||e.keyCode>=98&&e.keyCode<=107||e.keyCode>=85&&e.keyCode<=95)}};class B{constructor(e,t,i,n,o){this.list=e,this.view=t,this.keyboardNavigationLabelProvider=i,this.keyboardNavigationEventFilter=n,this.delegate=o,this.enabled=!1,this.state=w.Idle,this.mode=y.Automatic,this.triggered=!1,this.previouslyFocused=-1,this.enabledDisposables=new f.SL,this.disposables=new f.SL,this.updateOptions(e.options)}updateOptions(e){var t,i;null===(t=e.typeNavigationEnabled)||void 0===t||t?this.enable():this.disable(),this.mode=null!==(i=e.typeNavigationMode)&&void 0!==i?i:y.Automatic}enable(){if(this.enabled)return;let e=!1;const t=g.ju.chain(this.enabledDisposables.add(new o.Y(this.view.domNode,"keydown")).event,(t=>t.filter((e=>!D(e.target))).filter((()=>this.mode===y.Automatic||this.triggered)).map((e=>new s.y(e))).filter((t=>e||this.keyboardNavigationEventFilter(t))).filter((e=>this.delegate.mightProducePrintableCharacter(e))).forEach((e=>n.zB.stop(e,!0))).map((e=>e.browserEvent.key)))),i=g.ju.debounce(t,(()=>null),800,void 0,void 0,void 0,this.enabledDisposables),r=g.ju.reduce(g.ju.any(t,i),((e,t)=>null===t?null:(e||"")+t),void 0,this.enabledDisposables);r(this.onInput,this,this.enabledDisposables),i(this.onClear,this,this.enabledDisposables),t((()=>e=!0),void 0,this.enabledDisposables),i((()=>e=!1),void 0,this.enabledDisposables),this.enabled=!0,this.triggered=!1}disable(){this.enabled&&(this.enabledDisposables.clear(),this.enabled=!1,this.triggered=!1)}onClear(){var e;const t=this.list.getFocus();if(t.length>0&&t[0]===this.previouslyFocused){const i=null===(e=this.list.options.accessibilityProvider)||void 0===e?void 0:e.getAriaLabel(this.list.element(t[0]));i&&(0,a.Z9)(i)}this.previouslyFocused=-1}onInput(e){if(!e)return this.state=w.Idle,void(this.triggered=!1);const t=this.list.getFocus(),i=t.length>0?t[0]:0,n=this.state===w.Idle?1:0;this.state=w.Typing;for(let o=0;o1&&1===n.length)return this.previouslyFocused=i,this.list.setFocus([t]),void this.list.reveal(t)}}}else if("undefined"===typeof r||(0,p.Ji)(e,r))return this.previouslyFocused=i,this.list.setFocus([t]),void this.list.reveal(t)}}dispose(){this.disable(),this.enabledDisposables.dispose(),this.disposables.dispose()}}class H{constructor(e,t){this.list=e,this.view=t,this.disposables=new f.SL;const i=g.ju.chain(this.disposables.add(new o.Y(t.domNode,"keydown")).event,(e=>e.filter((e=>!D(e.target))).map((e=>new s.y(e))))),n=g.ju.chain(i,(e=>e.filter((e=>2===e.keyCode&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey&&!e.altKey))));n(this.onTab,this,this.disposables)}onTab(e){if(e.target!==this.view.domNode)return;const t=this.list.getFocus();if(0===t.length)return;const i=this.view.domElement(t[0]);if(!i)return;const o=i.querySelector("[tabIndex]");if(!o||!(o instanceof HTMLElement)||-1===o.tabIndex)return;const s=(0,n.Jj)(o).getComputedStyle(o);"hidden"!==s.visibility&&"none"!==s.display&&(e.preventDefault(),e.stopPropagation(),o.focus())}dispose(){this.disposables.dispose()}}function W(e){return v.dz?e.browserEvent.metaKey:e.browserEvent.ctrlKey}function V(e){return e.browserEvent.shiftKey}function z(e){return(0,n.N5)(e)&&2===e.button}const U={isSelectionSingleChangeEvent:W,isSelectionRangeChangeEvent:V};class q{constructor(e){this.list=e,this.disposables=new f.SL,this._onPointer=new g.Q5,this.onPointer=this._onPointer.event,!1!==e.options.multipleSelectionSupport&&(this.multipleSelectionController=this.list.options.multipleSelectionController||U),this.mouseSupport="undefined"===typeof e.options.mouseSupport||!!e.options.mouseSupport,this.mouseSupport&&(e.onMouseDown(this.onMouseDown,this,this.disposables),e.onContextMenu(this.onContextMenu,this,this.disposables),e.onMouseDblClick(this.onDoubleClick,this,this.disposables),e.onTouchStart(this.onMouseDown,this,this.disposables),this.disposables.add(r.o.addTarget(e.getHTMLElement()))),g.ju.any(e.onMouseClick,e.onMouseMiddleClick,e.onTap)(this.onViewPointer,this,this.disposables)}updateOptions(e){void 0!==e.multipleSelectionSupport&&(this.multipleSelectionController=void 0,e.multipleSelectionSupport&&(this.multipleSelectionController=this.list.options.multipleSelectionController||U))}isSelectionSingleChangeEvent(e){return!!this.multipleSelectionController&&this.multipleSelectionController.isSelectionSingleChangeEvent(e)}isSelectionRangeChangeEvent(e){return!!this.multipleSelectionController&&this.multipleSelectionController.isSelectionRangeChangeEvent(e)}isSelectionChangeEvent(e){return this.isSelectionSingleChangeEvent(e)||this.isSelectionRangeChangeEvent(e)}onMouseDown(e){A(e.browserEvent.target)||(0,n.vY)()!==e.browserEvent.target&&this.list.domFocus()}onContextMenu(e){if(D(e.browserEvent.target)||A(e.browserEvent.target))return;const t="undefined"===typeof e.index?[]:[e.index];this.list.setFocus(t,e.browserEvent)}onViewPointer(e){if(!this.mouseSupport)return;if(D(e.browserEvent.target)||A(e.browserEvent.target))return;if(e.browserEvent.isHandledByList)return;e.browserEvent.isHandledByList=!0;const t=e.index;return"undefined"===typeof t?(this.list.setFocus([],e.browserEvent),this.list.setSelection([],e.browserEvent),void this.list.setAnchor(void 0)):this.isSelectionChangeEvent(e)?this.changeSelection(e):(this.list.setFocus([t],e.browserEvent),this.list.setAnchor(t),z(e.browserEvent)||this.list.setSelection([t],e.browserEvent),void this._onPointer.fire(e))}onDoubleClick(e){if(D(e.browserEvent.target)||A(e.browserEvent.target))return;if(this.isSelectionChangeEvent(e))return;if(e.browserEvent.isHandledByList)return;e.browserEvent.isHandledByList=!0;const t=this.list.getFocus();this.list.setSelection(t,e.browserEvent)}changeSelection(e){const t=e.index;let i=this.list.getAnchor();if(this.isSelectionRangeChangeEvent(e)){if("undefined"===typeof i){const e=this.list.getFocus()[0];i=null!==e&&void 0!==e?e:t,this.list.setAnchor(i)}const n=Math.min(i,t),o=Math.max(i,t),s=(0,c.w6)(n,o+1),r=this.list.getSelection(),a=G(Y(r,[i]),i);if(0===a.length)return;const l=Y(s,X(r,a));this.list.setSelection(l,e.browserEvent),this.list.setFocus([t],e.browserEvent)}else if(this.isSelectionSingleChangeEvent(e)){const i=this.list.getSelection(),n=i.filter((e=>e!==t));this.list.setFocus([t]),this.list.setAnchor(t),i.length===n.length?this.list.setSelection([...n,t],e.browserEvent):this.list.setSelection(n,e.browserEvent)}}dispose(){this.disposables.dispose()}}class ${constructor(e,t){this.styleElement=e,this.selectorSuffix=t}style(e){var t,i;const o=this.selectorSuffix&&`.${this.selectorSuffix}`,s=[];e.listBackground&&s.push(`.monaco-list${o} .monaco-list-rows { background: ${e.listBackground}; }`),e.listFocusBackground&&(s.push(`.monaco-list${o}:focus .monaco-list-row.focused { background-color: ${e.listFocusBackground}; }`),s.push(`.monaco-list${o}:focus .monaco-list-row.focused:hover { background-color: ${e.listFocusBackground}; }`)),e.listFocusForeground&&s.push(`.monaco-list${o}:focus .monaco-list-row.focused { color: ${e.listFocusForeground}; }`),e.listActiveSelectionBackground&&(s.push(`.monaco-list${o}:focus .monaco-list-row.selected { background-color: ${e.listActiveSelectionBackground}; }`),s.push(`.monaco-list${o}:focus .monaco-list-row.selected:hover { background-color: ${e.listActiveSelectionBackground}; }`)),e.listActiveSelectionForeground&&s.push(`.monaco-list${o}:focus .monaco-list-row.selected { color: ${e.listActiveSelectionForeground}; }`),e.listActiveSelectionIconForeground&&s.push(`.monaco-list${o}:focus .monaco-list-row.selected .codicon { color: ${e.listActiveSelectionIconForeground}; }`),e.listFocusAndSelectionBackground&&s.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${o}:focus .monaco-list-row.selected.focused { background-color: ${e.listFocusAndSelectionBackground}; }\n\t\t\t`),e.listFocusAndSelectionForeground&&s.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${o}:focus .monaco-list-row.selected.focused { color: ${e.listFocusAndSelectionForeground}; }\n\t\t\t`),e.listInactiveFocusForeground&&(s.push(`.monaco-list${o} .monaco-list-row.focused { color: ${e.listInactiveFocusForeground}; }`),s.push(`.monaco-list${o} .monaco-list-row.focused:hover { color: ${e.listInactiveFocusForeground}; }`)),e.listInactiveSelectionIconForeground&&s.push(`.monaco-list${o} .monaco-list-row.focused .codicon { color: ${e.listInactiveSelectionIconForeground}; }`),e.listInactiveFocusBackground&&(s.push(`.monaco-list${o} .monaco-list-row.focused { background-color: ${e.listInactiveFocusBackground}; }`),s.push(`.monaco-list${o} .monaco-list-row.focused:hover { background-color: ${e.listInactiveFocusBackground}; }`)),e.listInactiveSelectionBackground&&(s.push(`.monaco-list${o} .monaco-list-row.selected { background-color: ${e.listInactiveSelectionBackground}; }`),s.push(`.monaco-list${o} .monaco-list-row.selected:hover { background-color: ${e.listInactiveSelectionBackground}; }`)),e.listInactiveSelectionForeground&&s.push(`.monaco-list${o} .monaco-list-row.selected { color: ${e.listInactiveSelectionForeground}; }`),e.listHoverBackground&&s.push(`.monaco-list${o}:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused) { background-color: ${e.listHoverBackground}; }`),e.listHoverForeground&&s.push(`.monaco-list${o}:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused) { color: ${e.listHoverForeground}; }`);const r=(0,n.XT)(e.listFocusAndSelectionOutline,(0,n.XT)(e.listSelectionOutline,null!==(t=e.listFocusOutline)&&void 0!==t?t:""));r&&s.push(`.monaco-list${o}:focus .monaco-list-row.focused.selected { outline: 1px solid ${r}; outline-offset: -1px;}`),e.listFocusOutline&&s.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${o}:focus .monaco-list-row.focused { outline: 1px solid ${e.listFocusOutline}; outline-offset: -1px; }\n\t\t\t\t.monaco-workbench.context-menu-visible .monaco-list${o}.last-focused .monaco-list-row.focused { outline: 1px solid ${e.listFocusOutline}; outline-offset: -1px; }\n\t\t\t`);const a=(0,n.XT)(e.listSelectionOutline,null!==(i=e.listInactiveFocusOutline)&&void 0!==i?i:"");a&&s.push(`.monaco-list${o} .monaco-list-row.focused.selected { outline: 1px dotted ${a}; outline-offset: -1px; }`),e.listSelectionOutline&&s.push(`.monaco-list${o} .monaco-list-row.selected { outline: 1px dotted ${e.listSelectionOutline}; outline-offset: -1px; }`),e.listInactiveFocusOutline&&s.push(`.monaco-list${o} .monaco-list-row.focused { outline: 1px dotted ${e.listInactiveFocusOutline}; outline-offset: -1px; }`),e.listHoverOutline&&s.push(`.monaco-list${o} .monaco-list-row:hover { outline: 1px dashed ${e.listHoverOutline}; outline-offset: -1px; }`),e.listDropBackground&&s.push(`\n\t\t\t\t.monaco-list${o}.drop-target,\n\t\t\t\t.monaco-list${o} .monaco-list-rows.drop-target,\n\t\t\t\t.monaco-list${o} .monaco-list-row.drop-target { background-color: ${e.listDropBackground} !important; color: inherit !important; }\n\t\t\t`),e.tableColumnsBorder&&s.push(`\n\t\t\t\t.monaco-table > .monaco-split-view2,\n\t\t\t\t.monaco-table > .monaco-split-view2 .monaco-sash.vertical::before,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table:hover > .monaco-split-view2,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table:hover > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: ${e.tableColumnsBorder};\n\t\t\t\t}\n\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t}\n\t\t\t`),e.tableOddRowsBackgroundColor&&s.push(`\n\t\t\t\t.monaco-table .monaco-list-row[data-parity=odd]:not(.focused):not(.selected):not(:hover) .monaco-table-tr,\n\t\t\t\t.monaco-table .monaco-list:not(:focus) .monaco-list-row[data-parity=odd].focused:not(.selected):not(:hover) .monaco-table-tr,\n\t\t\t\t.monaco-table .monaco-list:not(.focused) .monaco-list-row[data-parity=odd].focused:not(.selected):not(:hover) .monaco-table-tr {\n\t\t\t\t\tbackground-color: ${e.tableOddRowsBackgroundColor};\n\t\t\t\t}\n\t\t\t`),this.styleElement.textContent=s.join("\n")}}const j={listFocusBackground:"#7FB0D0",listActiveSelectionBackground:"#0E639C",listActiveSelectionForeground:"#FFFFFF",listActiveSelectionIconForeground:"#FFFFFF",listFocusAndSelectionOutline:"#90C2F9",listFocusAndSelectionBackground:"#094771",listFocusAndSelectionForeground:"#FFFFFF",listInactiveSelectionBackground:"#3F3F46",listInactiveSelectionIconForeground:"#FFFFFF",listHoverBackground:"#2A2D2E",listDropBackground:"#383B3D",treeIndentGuidesStroke:"#a9a9a9",treeInactiveIndentGuidesStroke:u.Il.fromHex("#a9a9a9").transparent(.4).toString(),tableColumnsBorder:u.Il.fromHex("#cccccc").transparent(.2).toString(),tableOddRowsBackgroundColor:u.Il.fromHex("#cccccc").transparent(.04).toString(),listBackground:void 0,listFocusForeground:void 0,listInactiveSelectionForeground:void 0,listInactiveFocusForeground:void 0,listInactiveFocusBackground:void 0,listHoverForeground:void 0,listFocusOutline:void 0,listInactiveFocusOutline:void 0,listSelectionOutline:void 0,listHoverOutline:void 0},K={keyboardSupport:!0,mouseSupport:!0,multipleSelectionSupport:!0,dnd:{getDragURI(){return null},onDragStart(){},onDragOver(){return!1},drop(){},dispose(){}}};function G(e,t){const i=e.indexOf(t);if(-1===i)return[];const n=[];let o=i-1;while(o>=0&&e[o]===t-(i-o))n.push(e[o--]);n.reverse(),o=i;while(o=e.length)i.push(t[o++]);else if(o>=t.length)i.push(e[n++]);else{if(e[n]===t[o]){i.push(e[n]),n++,o++;continue}e[n]=e.length)i.push(t[o++]);else if(o>=t.length)i.push(e[n++]);else{if(e[n]===t[o]){n++,o++;continue}e[n]e-t;class Q{constructor(e,t){this._templateId=e,this.renderers=t}get templateId(){return this._templateId}renderTemplate(e){return this.renderers.map((t=>t.renderTemplate(e)))}renderElement(e,t,i,n){let o=0;for(const s of this.renderers)s.renderElement(e,t,i[o++],n)}disposeElement(e,t,i,n){var o;let s=0;for(const r of this.renderers)null===(o=r.disposeElement)||void 0===o||o.call(r,e,t,i[s],n),s+=1}disposeTemplate(e){let t=0;for(const i of this.renderers)i.disposeTemplate(e[t++])}}class J{constructor(e){this.accessibilityProvider=e,this.templateId="a18n"}renderTemplate(e){return e}renderElement(e,t,i){const n=this.accessibilityProvider.getAriaLabel(e);n?i.setAttribute("aria-label",n):i.removeAttribute("aria-label");const o=this.accessibilityProvider.getAriaLevel&&this.accessibilityProvider.getAriaLevel(e);"number"===typeof o?i.setAttribute("aria-level",`${o}`):i.removeAttribute("aria-level")}disposeTemplate(e){}}class ee{constructor(e,t){this.list=e,this.dnd=t}getDragElements(e){const t=this.list.getSelectedElements(),i=t.indexOf(e)>-1?t:[e];return i}getDragURI(e){return this.dnd.getDragURI(e)}getDragLabel(e,t){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(e,t)}onDragStart(e,t){var i,n;null===(n=(i=this.dnd).onDragStart)||void 0===n||n.call(i,e,t)}onDragOver(e,t,i,n){return this.dnd.onDragOver(e,t,i,n)}onDragLeave(e,t,i,n){var o,s;null===(s=(o=this.dnd).onDragLeave)||void 0===s||s.call(o,e,t,i,n)}onDragEnd(e){var t,i;null===(i=(t=this.dnd).onDragEnd)||void 0===i||i.call(t,e)}drop(e,t,i,n){this.dnd.drop(e,t,i,n)}dispose(){this.dnd.dispose()}}class te{get onDidChangeFocus(){return g.ju.map(this.eventBufferer.wrapEvent(this.focus.onChange),(e=>this.toListEvent(e)),this.disposables)}get onDidChangeSelection(){return g.ju.map(this.eventBufferer.wrapEvent(this.selection.onChange),(e=>this.toListEvent(e)),this.disposables)}get domId(){return this.view.domId}get onDidScroll(){return this.view.onDidScroll}get onMouseClick(){return this.view.onMouseClick}get onMouseDblClick(){return this.view.onMouseDblClick}get onMouseMiddleClick(){return this.view.onMouseMiddleClick}get onPointer(){return this.mouseController.onPointer}get onMouseDown(){return this.view.onMouseDown}get onMouseOver(){return this.view.onMouseOver}get onMouseOut(){return this.view.onMouseOut}get onTouchStart(){return this.view.onTouchStart}get onTap(){return this.view.onTap}get onContextMenu(){let e=!1;const t=g.ju.chain(this.disposables.add(new o.Y(this.view.domNode,"keydown")).event,(t=>t.map((e=>new s.y(e))).filter((t=>e=58===t.keyCode||t.shiftKey&&68===t.keyCode)).map((e=>n.zB.stop(e,!0))).filter((()=>!1)))),i=g.ju.chain(this.disposables.add(new o.Y(this.view.domNode,"keyup")).event,(t=>t.forEach((()=>e=!1)).map((e=>new s.y(e))).filter((e=>58===e.keyCode||e.shiftKey&&68===e.keyCode)).map((e=>n.zB.stop(e,!0))).map((({browserEvent:e})=>{const t=this.getFocus(),i=t.length?t[0]:void 0,n="undefined"!==typeof i?this.view.element(i):void 0,o="undefined"!==typeof i?this.view.domElement(i):this.view.domNode;return{index:i,element:n,anchor:o,browserEvent:e}})))),r=g.ju.chain(this.view.onContextMenu,(t=>t.filter((t=>!e)).map((({element:e,index:t,browserEvent:i})=>({element:e,index:t,anchor:new C.n((0,n.Jj)(this.view.domNode),i),browserEvent:i})))));return g.ju.any(t,i,r)}get onKeyDown(){return this.disposables.add(new o.Y(this.view.domNode,"keydown")).event}get onDidFocus(){return g.ju.signal(this.disposables.add(new o.Y(this.view.domNode,"focus",!0)).event)}constructor(e,t,i,o,s=K){var r,a,c,d;this.user=e,this._options=s,this.focus=new L("focused"),this.anchor=new L("anchor"),this.eventBufferer=new g.E7,this._ariaLabel="",this.disposables=new f.SL,this._onDidDispose=new g.Q5,this.onDidDispose=this._onDidDispose.event;const u=this._options.accessibilityProvider&&this._options.accessibilityProvider.getWidgetRole?null===(r=this._options.accessibilityProvider)||void 0===r?void 0:r.getWidgetRole():"list";this.selection=new E("listbox"!==u);const h=[this.focus.renderer,this.selection.renderer];this.accessibilityProvider=s.accessibilityProvider,this.accessibilityProvider&&(h.push(new J(this.accessibilityProvider)),null===(c=(a=this.accessibilityProvider).onDidChangeActiveDescendant)||void 0===c||c.call(a,this.onDidChangeActiveDescendant,this,this.disposables)),o=o.map((e=>new Q(e.templateId,[...h,e])));const p={...s,dnd:s.dnd&&new ee(this,s.dnd)};if(this.view=this.createListView(t,i,o,p),this.view.domNode.setAttribute("role",u),s.styleController)this.styleController=s.styleController(this.view.domId);else{const e=(0,n.dS)(this.view.domNode);this.styleController=new $(e,this.view.domId)}if(this.spliceable=new l([new N(this.focus,this.view,s.identityProvider),new N(this.selection,this.view,s.identityProvider),new N(this.anchor,this.view,s.identityProvider),this.view]),this.disposables.add(this.focus),this.disposables.add(this.selection),this.disposables.add(this.anchor),this.disposables.add(this.view),this.disposables.add(this._onDidDispose),this.disposables.add(new H(this,this.view)),("boolean"!==typeof s.keyboardSupport||s.keyboardSupport)&&(this.keyboardController=new O(this,this.view,s),this.disposables.add(this.keyboardController)),s.keyboardNavigationLabelProvider){const e=s.keyboardNavigationDelegate||F;this.typeNavigationController=new B(this,this.view,s.keyboardNavigationLabelProvider,null!==(d=s.keyboardNavigationEventFilter)&&void 0!==d?d:()=>!0,e),this.disposables.add(this.typeNavigationController)}this.mouseController=this.createMouseController(s),this.disposables.add(this.mouseController),this.onDidChangeFocus(this._onFocusChange,this,this.disposables),this.onDidChangeSelection(this._onSelectionChange,this,this.disposables),this.accessibilityProvider&&(this.ariaLabel=this.accessibilityProvider.getWidgetAriaLabel()),!1!==this._options.multipleSelectionSupport&&this.view.domNode.setAttribute("aria-multiselectable","true")}createListView(e,t,i,n){return new x.Bv(e,t,i,n)}createMouseController(e){return new q(this)}updateOptions(e={}){var t,i;this._options={...this._options,...e},null===(t=this.typeNavigationController)||void 0===t||t.updateOptions(this._options),void 0!==this._options.multipleSelectionController&&(this._options.multipleSelectionSupport?this.view.domNode.setAttribute("aria-multiselectable","true"):this.view.domNode.removeAttribute("aria-multiselectable")),this.mouseController.updateOptions(e),null===(i=this.keyboardController)||void 0===i||i.updateOptions(e),this.view.updateOptions(e)}get options(){return this._options}splice(e,t,i=[]){if(e<0||e>this.view.length)throw new b(this.user,`Invalid start index: ${e}`);if(t<0)throw new b(this.user,`Invalid delete count: ${t}`);0===t&&0===i.length||this.eventBufferer.bufferEvents((()=>this.spliceable.splice(e,t,i)))}rerender(){this.view.rerender()}element(e){return this.view.element(e)}indexOf(e){return this.view.indexOf(e)}get length(){return this.view.length}get contentHeight(){return this.view.contentHeight}get onDidChangeContentHeight(){return this.view.onDidChangeContentHeight}get scrollTop(){return this.view.getScrollTop()}set scrollTop(e){this.view.setScrollTop(e)}get scrollHeight(){return this.view.scrollHeight}get renderHeight(){return this.view.renderHeight}get firstVisibleIndex(){return this.view.firstVisibleIndex}get ariaLabel(){return this._ariaLabel}set ariaLabel(e){this._ariaLabel=e,this.view.domNode.setAttribute("aria-label",e)}domFocus(){this.view.domNode.focus({preventScroll:!0})}layout(e,t){this.view.layout(e,t)}setSelection(e,t){for(const i of e)if(i<0||i>=this.length)throw new b(this.user,`Invalid index ${i}`);this.selection.set(e,t)}getSelection(){return this.selection.get()}getSelectedElements(){return this.getSelection().map((e=>this.view.element(e)))}setAnchor(e){if("undefined"!==typeof e){if(e<0||e>=this.length)throw new b(this.user,`Invalid index ${e}`);this.anchor.set([e])}else this.anchor.set([])}getAnchor(){return(0,c.Xh)(this.anchor.get(),void 0)}getAnchorElement(){const e=this.getAnchor();return"undefined"===typeof e?void 0:this.element(e)}setFocus(e,t){for(const i of e)if(i<0||i>=this.length)throw new b(this.user,`Invalid index ${i}`);this.focus.set(e,t)}focusNext(e=1,t=!1,i,n){if(0===this.length)return;const o=this.focus.get(),s=this.findNextIndex(o.length>0?o[0]+e:0,t,n);s>-1&&this.setFocus([s],i)}focusPrevious(e=1,t=!1,i,n){if(0===this.length)return;const o=this.focus.get(),s=this.findPreviousIndex(o.length>0?o[0]-e:0,t,n);s>-1&&this.setFocus([s],i)}async focusNextPage(e,t){let i=this.view.indexAt(this.view.getScrollTop()+this.view.renderHeight);i=0===i?0:i-1;const n=this.getFocus()[0];if(n!==i&&(void 0===n||i>n)){const o=this.findPreviousIndex(i,!1,t);o>-1&&n!==o?this.setFocus([o],e):this.setFocus([i],e)}else{const o=this.view.getScrollTop();let s=o+this.view.renderHeight;i>n&&(s-=this.view.elementHeight(i)),this.view.setScrollTop(s),this.view.getScrollTop()!==o&&(this.setFocus([]),await(0,d.Vs)(0),await this.focusNextPage(e,t))}}async focusPreviousPage(e,t){let i;const n=this.view.getScrollTop();i=0===n?this.view.indexAt(n):this.view.indexAfter(n-1);const o=this.getFocus()[0];if(o!==i&&(void 0===o||o>=i)){const n=this.findNextIndex(i,!1,t);n>-1&&o!==n?this.setFocus([n],e):this.setFocus([i],e)}else{const i=n;this.view.setScrollTop(n-this.view.renderHeight),this.view.getScrollTop()!==i&&(this.setFocus([]),await(0,d.Vs)(0),await this.focusPreviousPage(e,t))}}focusLast(e,t){if(0===this.length)return;const i=this.findPreviousIndex(this.length-1,!1,t);i>-1&&this.setFocus([i],e)}focusFirst(e,t){this.focusNth(0,e,t)}focusNth(e,t,i){if(0===this.length)return;const n=this.findNextIndex(e,!1,i);n>-1&&this.setFocus([n],t)}findNextIndex(e,t=!1,i){for(let n=0;n=this.length&&!t)return-1;if(e%=this.length,!i||i(this.element(e)))return e;e++}return-1}findPreviousIndex(e,t=!1,i){for(let n=0;nthis.view.element(e)))}reveal(e,t,i=0){if(e<0||e>=this.length)throw new b(this.user,`Invalid index ${e}`);const n=this.view.getScrollTop(),o=this.view.elementTop(e),s=this.view.elementHeight(e);if((0,_.hj)(t)){const e=s-this.view.renderHeight+i;this.view.setScrollTop(e*(0,m.uZ)(t,0,1)+o-i)}else{const e=o+s,t=n+this.view.renderHeight;o=t||(o=t&&s>=this.view.renderHeight?this.view.setScrollTop(o-i):e>=t&&this.view.setScrollTop(e-this.view.renderHeight))}}getRelativeTop(e,t=0){if(e<0||e>=this.length)throw new b(this.user,`Invalid index ${e}`);const i=this.view.getScrollTop(),n=this.view.elementTop(e),o=this.view.elementHeight(e);if(ni+this.view.renderHeight)return null;const s=o-this.view.renderHeight+t;return Math.abs((i+t-n)/s)}getHTMLElement(){return this.view.domNode}getScrollableElement(){return this.view.scrollableElementDomNode}getElementID(e){return this.view.getElementDomId(e)}getElementTop(e){return this.view.elementTop(e)}style(e){this.styleController.style(e)}toListEvent({indexes:e,browserEvent:t}){return{indexes:e,elements:e.map((e=>this.view.element(e))),browserEvent:t}}_onFocusChange(){const e=this.focus.get();this.view.domNode.classList.toggle("element-focused",e.length>0),this.onDidChangeActiveDescendant()}onDidChangeActiveDescendant(){var e;const t=this.focus.get();if(t.length>0){let i;(null===(e=this.accessibilityProvider)||void 0===e?void 0:e.getActiveDescendantId)&&(i=this.accessibilityProvider.getActiveDescendantId(this.view.element(t[0]))),this.view.domNode.setAttribute("aria-activedescendant",i||this.view.getElementDomId(t[0]))}else this.view.domNode.removeAttribute("aria-activedescendant")}_onSelectionChange(){const e=this.selection.get();this.view.domNode.classList.toggle("selection-none",0===e.length),this.view.domNode.classList.toggle("selection-single",1===e.length),this.view.domNode.classList.toggle("selection-multiple",e.length>1)}dispose(){this._onDidDispose.fire(),this.disposables.dispose(),this._onDidDispose.dispose()}}S([h.H],te.prototype,"onDidChangeFocus",null),S([h.H],te.prototype,"onDidChangeSelection",null),S([h.H],te.prototype,"onContextMenu",null),S([h.H],te.prototype,"onKeyDown",null),S([h.H],te.prototype,"onDidFocus",null)},18612:(e,t,i)=>{"use strict";i.d(t,{g:()=>x,l:()=>g});var n=i(2548),o=i(9172),s=i(1212),r=i(85398),a=i(58718),l=i(11271),c=i(70959),d=i(47606),u=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"===typeof Reflect&&"function"===typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r};const h=!1;var g;(function(e){e["North"]="north",e["South"]="south",e["East"]="east",e["West"]="west"})(g||(g={}));let p=4;const f=new l.Q5;let m=300;const v=new l.Q5;class _{constructor(e){this.el=e,this.disposables=new c.SL}get onPointerMove(){return this.disposables.add(new o.Y((0,n.Jj)(this.el),"mousemove")).event}get onPointerUp(){return this.disposables.add(new o.Y((0,n.Jj)(this.el),"mouseup")).event}dispose(){this.disposables.dispose()}}u([a.H],_.prototype,"onPointerMove",null),u([a.H],_.prototype,"onPointerUp",null);class b{get onPointerMove(){return this.disposables.add(new o.Y(this.el,s.t.Change)).event}get onPointerUp(){return this.disposables.add(new o.Y(this.el,s.t.End)).event}constructor(e){this.el=e,this.disposables=new c.SL}dispose(){this.disposables.dispose()}}u([a.H],b.prototype,"onPointerMove",null),u([a.H],b.prototype,"onPointerUp",null);class y{get onPointerMove(){return this.factory.onPointerMove}get onPointerUp(){return this.factory.onPointerUp}constructor(e){this.factory=e}dispose(){}}u([a.H],y.prototype,"onPointerMove",null),u([a.H],y.prototype,"onPointerUp",null);const w="pointer-events-disabled";class x extends c.JT{get state(){return this._state}get orthogonalStartSash(){return this._orthogonalStartSash}get orthogonalEndSash(){return this._orthogonalEndSash}set state(e){this._state!==e&&(this.el.classList.toggle("disabled",0===e),this.el.classList.toggle("minimum",1===e),this.el.classList.toggle("maximum",2===e),this._state=e,this.onDidEnablementChange.fire(e))}set orthogonalStartSash(e){if(this._orthogonalStartSash!==e){if(this.orthogonalStartDragHandleDisposables.clear(),this.orthogonalStartSashDisposables.clear(),e){const t=t=>{this.orthogonalStartDragHandleDisposables.clear(),0!==t&&(this._orthogonalStartDragHandle=(0,n.R3)(this.el,(0,n.$)(".orthogonal-drag-handle.start")),this.orthogonalStartDragHandleDisposables.add((0,c.OF)((()=>this._orthogonalStartDragHandle.remove()))),this.orthogonalStartDragHandleDisposables.add(new o.Y(this._orthogonalStartDragHandle,"mouseenter")).event((()=>x.onMouseEnter(e)),void 0,this.orthogonalStartDragHandleDisposables),this.orthogonalStartDragHandleDisposables.add(new o.Y(this._orthogonalStartDragHandle,"mouseleave")).event((()=>x.onMouseLeave(e)),void 0,this.orthogonalStartDragHandleDisposables))};this.orthogonalStartSashDisposables.add(e.onDidEnablementChange.event(t,this)),t(e.state)}this._orthogonalStartSash=e}}set orthogonalEndSash(e){if(this._orthogonalEndSash!==e){if(this.orthogonalEndDragHandleDisposables.clear(),this.orthogonalEndSashDisposables.clear(),e){const t=t=>{this.orthogonalEndDragHandleDisposables.clear(),0!==t&&(this._orthogonalEndDragHandle=(0,n.R3)(this.el,(0,n.$)(".orthogonal-drag-handle.end")),this.orthogonalEndDragHandleDisposables.add((0,c.OF)((()=>this._orthogonalEndDragHandle.remove()))),this.orthogonalEndDragHandleDisposables.add(new o.Y(this._orthogonalEndDragHandle,"mouseenter")).event((()=>x.onMouseEnter(e)),void 0,this.orthogonalEndDragHandleDisposables),this.orthogonalEndDragHandleDisposables.add(new o.Y(this._orthogonalEndDragHandle,"mouseleave")).event((()=>x.onMouseLeave(e)),void 0,this.orthogonalEndDragHandleDisposables))};this.orthogonalEndSashDisposables.add(e.onDidEnablementChange.event(t,this)),t(e.state)}this._orthogonalEndSash=e}}constructor(e,t,i){super(),this.hoverDelay=m,this.hoverDelayer=this._register(new r.vp(this.hoverDelay)),this._state=3,this.onDidEnablementChange=this._register(new l.Q5),this._onDidStart=this._register(new l.Q5),this._onDidChange=this._register(new l.Q5),this._onDidReset=this._register(new l.Q5),this._onDidEnd=this._register(new l.Q5),this.orthogonalStartSashDisposables=this._register(new c.SL),this.orthogonalStartDragHandleDisposables=this._register(new c.SL),this.orthogonalEndSashDisposables=this._register(new c.SL),this.orthogonalEndDragHandleDisposables=this._register(new c.SL),this.onDidStart=this._onDidStart.event,this.onDidChange=this._onDidChange.event,this.onDidReset=this._onDidReset.event,this.onDidEnd=this._onDidEnd.event,this.linkedSash=void 0,this.el=(0,n.R3)(e,(0,n.$)(".monaco-sash")),i.orthogonalEdge&&this.el.classList.add(`orthogonal-edge-${i.orthogonalEdge}`),d.dz&&this.el.classList.add("mac");const a=this._register(new o.Y(this.el,"mousedown")).event;this._register(a((t=>this.onPointerStart(t,new _(e))),this));const u=this._register(new o.Y(this.el,"dblclick")).event;this._register(u(this.onPointerDoublePress,this));const g=this._register(new o.Y(this.el,"mouseenter")).event;this._register(g((()=>x.onMouseEnter(this))));const y=this._register(new o.Y(this.el,"mouseleave")).event;this._register(y((()=>x.onMouseLeave(this)))),this._register(s.o.addTarget(this.el));const w=this._register(new o.Y(this.el,s.t.Start)).event;this._register(w((e=>this.onPointerStart(e,new b(this.el))),this));const C=this._register(new o.Y(this.el,s.t.Tap)).event;let S;this._register(C((e=>{if(S)return clearTimeout(S),S=void 0,void this.onPointerDoublePress(e);clearTimeout(S),S=setTimeout((()=>S=void 0),250)}),this)),"number"===typeof i.size?(this.size=i.size,0===i.orientation?this.el.style.width=`${this.size}px`:this.el.style.height=`${this.size}px`):(this.size=p,this._register(f.event((e=>{this.size=e,this.layout()})))),this._register(v.event((e=>this.hoverDelay=e))),this.layoutProvider=t,this.orthogonalStartSash=i.orthogonalStartSash,this.orthogonalEndSash=i.orthogonalEndSash,this.orientation=i.orientation||0,1===this.orientation?(this.el.classList.add("horizontal"),this.el.classList.remove("vertical")):(this.el.classList.remove("horizontal"),this.el.classList.add("vertical")),this.el.classList.toggle("debug",h),this.layout()}onPointerStart(e,t){n.zB.stop(e);let i=!1;if(!e.__orthogonalSashEvent){const n=this.getOrthogonalSash(e);n&&(i=!0,e.__orthogonalSashEvent=!0,n.onPointerStart(e,new y(t)))}if(this.linkedSash&&!e.__linkedSashEvent&&(e.__linkedSashEvent=!0,this.linkedSash.onPointerStart(e,new y(t))),!this.state)return;const o=this.el.ownerDocument.getElementsByTagName("iframe");for(const n of o)n.classList.add(w);const s=e.pageX,r=e.pageY,a=e.altKey,l={startX:s,currentX:s,startY:r,currentY:r,altKey:a};this.el.classList.add("active"),this._onDidStart.fire(l);const u=(0,n.dS)(this.el),h=()=>{let e="";e=i?"all-scroll":1===this.orientation?1===this.state?"s-resize":2===this.state?"n-resize":d.dz?"row-resize":"ns-resize":1===this.state?"e-resize":2===this.state?"w-resize":d.dz?"col-resize":"ew-resize",u.textContent=`* { cursor: ${e} !important; }`},g=new c.SL;h(),i||this.onDidEnablementChange.event(h,null,g);const p=e=>{n.zB.stop(e,!1);const t={startX:s,currentX:e.pageX,startY:r,currentY:e.pageY,altKey:a};this._onDidChange.fire(t)},f=e=>{n.zB.stop(e,!1),this.el.removeChild(u),this.el.classList.remove("active"),this._onDidEnd.fire(),g.dispose();for(const t of o)t.classList.remove(w)};t.onPointerMove(p,null,g),t.onPointerUp(f,null,g),g.add(t)}onPointerDoublePress(e){const t=this.getOrthogonalSash(e);t&&t._onDidReset.fire(),this.linkedSash&&this.linkedSash._onDidReset.fire(),this._onDidReset.fire()}static onMouseEnter(e,t=!1){e.el.classList.contains("active")?(e.hoverDelayer.cancel(),e.el.classList.add("hover")):e.hoverDelayer.trigger((()=>e.el.classList.add("hover")),e.hoverDelay).then(void 0,(()=>{})),!t&&e.linkedSash&&x.onMouseEnter(e.linkedSash,!0)}static onMouseLeave(e,t=!1){e.hoverDelayer.cancel(),e.el.classList.remove("hover"),!t&&e.linkedSash&&x.onMouseLeave(e.linkedSash,!0)}clearSashHoverState(){x.onMouseLeave(this)}layout(){if(0===this.orientation){const e=this.layoutProvider;this.el.style.left=e.getVerticalSashLeft(this)-this.size/2+"px",e.getVerticalSashTop&&(this.el.style.top=e.getVerticalSashTop(this)+"px"),e.getVerticalSashHeight&&(this.el.style.height=e.getVerticalSashHeight(this)+"px")}else{const e=this.layoutProvider;this.el.style.top=e.getHorizontalSashTop(this)-this.size/2+"px",e.getHorizontalSashLeft&&(this.el.style.left=e.getHorizontalSashLeft(this)+"px"),e.getHorizontalSashWidth&&(this.el.style.width=e.getHorizontalSashWidth(this)+"px")}}getOrthogonalSash(e){var t;const i=null!==(t=e.initialTarget)&&void 0!==t?t:e.target;if(i&&i instanceof HTMLElement)return i.classList.contains("orthogonal-drag-handle")?i.classList.contains("start")?this.orthogonalStartSash:this.orthogonalEndSash:void 0}dispose(){super.dispose(),this.el.remove()}}},60841:(e,t,i)=>{"use strict";i.d(t,{s$:()=>I,Io:()=>N,NB:()=>T,$Z:()=>A});var n=i(90882),o=i(2548),s=i(26090),r=i(75467),a=i(75853),l=i(9194),c=i(85398),d=i(99588);const u=11;class h extends l.${constructor(e){super(),this._onActivate=e.onActivate,this.bgDomNode=document.createElement("div"),this.bgDomNode.className="arrow-background",this.bgDomNode.style.position="absolute",this.bgDomNode.style.width=e.bgWidth+"px",this.bgDomNode.style.height=e.bgHeight+"px","undefined"!==typeof e.top&&(this.bgDomNode.style.top="0px"),"undefined"!==typeof e.left&&(this.bgDomNode.style.left="0px"),"undefined"!==typeof e.bottom&&(this.bgDomNode.style.bottom="0px"),"undefined"!==typeof e.right&&(this.bgDomNode.style.right="0px"),this.domNode=document.createElement("div"),this.domNode.className=e.className,this.domNode.classList.add(...d.k.asClassNameArray(e.icon)),this.domNode.style.position="absolute",this.domNode.style.width=u+"px",this.domNode.style.height=u+"px","undefined"!==typeof e.top&&(this.domNode.style.top=e.top+"px"),"undefined"!==typeof e.left&&(this.domNode.style.left=e.left+"px"),"undefined"!==typeof e.bottom&&(this.domNode.style.bottom=e.bottom+"px"),"undefined"!==typeof e.right&&(this.domNode.style.right=e.right+"px"),this._pointerMoveMonitor=this._register(new a.C),this._register(o.mu(this.bgDomNode,o.tw.POINTER_DOWN,(e=>this._arrowPointerDown(e)))),this._register(o.mu(this.domNode,o.tw.POINTER_DOWN,(e=>this._arrowPointerDown(e)))),this._pointerdownRepeatTimer=this._register(new o.ne),this._pointerdownScheduleRepeatTimer=this._register(new c._F)}_arrowPointerDown(e){if(!e.target||!(e.target instanceof Element))return;const t=()=>{this._pointerdownRepeatTimer.cancelAndSet((()=>this._onActivate()),1e3/24,o.Jj(e))};this._onActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(t,200),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,(e=>{}),(()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()})),e.preventDefault()}}var g=i(70959);class p extends g.JT{constructor(e,t,i){super(),this._visibility=e,this._visibleClassName=t,this._invisibleClassName=i,this._domNode=null,this._isVisible=!1,this._isNeeded=!1,this._rawShouldBeVisible=!1,this._shouldBeVisible=!1,this._revealTimer=this._register(new c._F)}setVisibility(e){this._visibility!==e&&(this._visibility=e,this._updateShouldBeVisible())}setShouldBeVisible(e){this._rawShouldBeVisible=e,this._updateShouldBeVisible()}_applyVisibilitySetting(){return 2!==this._visibility&&(3===this._visibility||this._rawShouldBeVisible)}_updateShouldBeVisible(){const e=this._applyVisibilitySetting();this._shouldBeVisible!==e&&(this._shouldBeVisible=e,this.ensureVisibility())}setIsNeeded(e){this._isNeeded!==e&&(this._isNeeded=e,this.ensureVisibility())}setDomNode(e){this._domNode=e,this._domNode.setClassName(this._invisibleClassName),this.setShouldBeVisible(!1)}ensureVisibility(){this._isNeeded?this._shouldBeVisible?this._reveal():this._hide(!0):this._hide(!1)}_reveal(){this._isVisible||(this._isVisible=!0,this._revealTimer.setIfNotSet((()=>{var e;null===(e=this._domNode)||void 0===e||e.setClassName(this._visibleClassName)}),0))}_hide(e){var t;this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,null===(t=this._domNode)||void 0===t||t.setClassName(this._invisibleClassName+(e?" fade":"")))}}var f=i(47606);const m=140;class v extends l.${constructor(e){super(),this._lazyRender=e.lazyRender,this._host=e.host,this._scrollable=e.scrollable,this._scrollByPage=e.scrollByPage,this._scrollbarState=e.scrollbarState,this._visibilityController=this._register(new p(e.visibility,"visible scrollbar "+e.extraScrollbarClassName,"invisible scrollbar "+e.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._pointerMoveMonitor=this._register(new a.C),this._shouldRender=!0,this.domNode=(0,s.X)(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition("absolute"),this._register(o.nm(this.domNode.domNode,o.tw.POINTER_DOWN,(e=>this._domNodePointerDown(e))))}_createArrow(e){const t=this._register(new h(e));this.domNode.domNode.appendChild(t.bgDomNode),this.domNode.domNode.appendChild(t.domNode)}_createSlider(e,t,i,n){this.slider=(0,s.X)(document.createElement("div")),this.slider.setClassName("slider"),this.slider.setPosition("absolute"),this.slider.setTop(e),this.slider.setLeft(t),"number"===typeof i&&this.slider.setWidth(i),"number"===typeof n&&this.slider.setHeight(n),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(o.nm(this.slider.domNode,o.tw.POINTER_DOWN,(e=>{0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))}))),this.onclick(this.slider.domNode,(e=>{e.leftButton&&e.stopPropagation()}))}_onElementSize(e){return this._scrollbarState.setVisibleSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollSize(e){return this._scrollbarState.setScrollSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollPosition(e){return this._scrollbarState.setScrollPosition(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(e){e.target===this.domNode.domNode&&this._onPointerDown(e)}delegatePointerDown(e){const t=this.domNode.domNode.getClientRects()[0].top,i=t+this._scrollbarState.getSliderPosition(),n=t+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),o=this._sliderPointerPosition(e);i<=o&&o<=n?0===e.button&&(e.preventDefault(),this._sliderPointerDown(e)):this._onPointerDown(e)}_onPointerDown(e){let t,i;if(e.target===this.domNode.domNode&&"number"===typeof e.offsetX&&"number"===typeof e.offsetY)t=e.offsetX,i=e.offsetY;else{const n=o.i(this.domNode.domNode);t=e.pageX-n.left,i=e.pageY-n.top}const n=this._pointerDownRelativePosition(t,i);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(n):this._scrollbarState.getDesiredScrollPositionFromOffset(n)),0===e.button&&(e.preventDefault(),this._sliderPointerDown(e))}_sliderPointerDown(e){if(!e.target||!(e.target instanceof Element))return;const t=this._sliderPointerPosition(e),i=this._sliderOrthogonalPointerPosition(e),n=this._scrollbarState.clone();this.slider.toggleClassName("active",!0),this._pointerMoveMonitor.startMonitoring(e.target,e.pointerId,e.buttons,(e=>{const o=this._sliderOrthogonalPointerPosition(e),s=Math.abs(o-i);if(f.ED&&s>m)return void this._setDesiredScrollPositionNow(n.getScrollPosition());const r=this._sliderPointerPosition(e),a=r-t;this._setDesiredScrollPositionNow(n.getDesiredScrollPositionFromDelta(a))}),(()=>{this.slider.toggleClassName("active",!1),this._host.onDragEnd()})),this._host.onDragStart()}_setDesiredScrollPositionNow(e){const t={};this.writeScrollPosition(t,e),this._scrollable.setScrollPositionNow(t)}updateScrollbarSize(e){this._updateScrollbarSize(e),this._scrollbarState.setScrollbarSize(e),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}}var _=i(69758),b=i(8419);class y extends v{constructor(e,t,i){const n=e.getScrollDimensions(),o=e.getCurrentScrollPosition();if(super({lazyRender:t.lazyRender,host:i,scrollbarState:new _.M(t.horizontalHasArrows?t.arrowSize:0,2===t.horizontal?0:t.horizontalScrollbarSize,2===t.vertical?0:t.verticalScrollbarSize,n.width,n.scrollWidth,o.scrollLeft),visibility:t.horizontal,extraScrollbarClassName:"horizontal",scrollable:e,scrollByPage:t.scrollByPage}),t.horizontalHasArrows){const e=(t.arrowSize-u)/2,i=(t.horizontalScrollbarSize-u)/2;this._createArrow({className:"scra",icon:b.l.scrollbarButtonLeft,top:i,left:e,bottom:void 0,right:void 0,bgWidth:t.arrowSize,bgHeight:t.horizontalScrollbarSize,onActivate:()=>this._host.onMouseWheel(new r.q(null,1,0))}),this._createArrow({className:"scra",icon:b.l.scrollbarButtonRight,top:i,left:void 0,bottom:void 0,right:e,bgWidth:t.arrowSize,bgHeight:t.horizontalScrollbarSize,onActivate:()=>this._host.onMouseWheel(new r.q(null,-1,0))})}this._createSlider(Math.floor((t.horizontalScrollbarSize-t.horizontalSliderSize)/2),0,void 0,t.horizontalSliderSize)}_updateSlider(e,t){this.slider.setWidth(e),this.slider.setLeft(t)}_renderDomNode(e,t){this.domNode.setWidth(e),this.domNode.setHeight(t),this.domNode.setLeft(0),this.domNode.setBottom(0)}onDidScroll(e){return this._shouldRender=this._onElementScrollSize(e.scrollWidth)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(e.scrollLeft)||this._shouldRender,this._shouldRender=this._onElementSize(e.width)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return e}_sliderPointerPosition(e){return e.pageX}_sliderOrthogonalPointerPosition(e){return e.pageY}_updateScrollbarSize(e){this.slider.setHeight(e)}writeScrollPosition(e,t){e.scrollLeft=t}updateOptions(e){this.updateScrollbarSize(2===e.horizontal?0:e.horizontalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._visibilityController.setVisibility(e.horizontal),this._scrollByPage=e.scrollByPage}}class w extends v{constructor(e,t,i){const n=e.getScrollDimensions(),o=e.getCurrentScrollPosition();if(super({lazyRender:t.lazyRender,host:i,scrollbarState:new _.M(t.verticalHasArrows?t.arrowSize:0,2===t.vertical?0:t.verticalScrollbarSize,0,n.height,n.scrollHeight,o.scrollTop),visibility:t.vertical,extraScrollbarClassName:"vertical",scrollable:e,scrollByPage:t.scrollByPage}),t.verticalHasArrows){const e=(t.arrowSize-u)/2,i=(t.verticalScrollbarSize-u)/2;this._createArrow({className:"scra",icon:b.l.scrollbarButtonUp,top:e,left:i,bottom:void 0,right:void 0,bgWidth:t.verticalScrollbarSize,bgHeight:t.arrowSize,onActivate:()=>this._host.onMouseWheel(new r.q(null,0,1))}),this._createArrow({className:"scra",icon:b.l.scrollbarButtonDown,top:void 0,left:i,bottom:e,right:void 0,bgWidth:t.verticalScrollbarSize,bgHeight:t.arrowSize,onActivate:()=>this._host.onMouseWheel(new r.q(null,0,-1))})}this._createSlider(0,Math.floor((t.verticalScrollbarSize-t.verticalSliderSize)/2),t.verticalSliderSize,void 0)}_updateSlider(e,t){this.slider.setHeight(e),this.slider.setTop(t)}_renderDomNode(e,t){this.domNode.setWidth(t),this.domNode.setHeight(e),this.domNode.setRight(0),this.domNode.setTop(0)}onDidScroll(e){return this._shouldRender=this._onElementScrollSize(e.scrollHeight)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(e.scrollTop)||this._shouldRender,this._shouldRender=this._onElementSize(e.height)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(e,t){return t}_sliderPointerPosition(e){return e.pageY}_sliderOrthogonalPointerPosition(e){return e.pageX}_updateScrollbarSize(e){this.slider.setWidth(e)}writeScrollPosition(e,t){e.scrollTop=t}updateOptions(e){this.updateScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}}var x=i(11271),C=i(4225);const S=500,k=50,L=!0;class E{constructor(e,t,i){this.timestamp=e,this.deltaX=t,this.deltaY=i,this.score=0}}class N{constructor(){this._capacity=5,this._memory=[],this._front=-1,this._rear=-1}isPhysicalMouseWheel(){if(-1===this._front&&-1===this._rear)return!1;let e=1,t=0,i=1,n=this._rear;do{const o=n===this._front?e:Math.pow(2,-i);if(e-=o,t+=this._memory[n].score*o,n===this._front)break;n=(this._capacity+n-1)%this._capacity,i++}while(1);return t<=.5}acceptStandardWheelEvent(e){const t=o.Jj(e.browserEvent).devicePixelRatio/(0,n.ie)();f.ED||f.IJ?this.accept(Date.now(),e.deltaX/t,e.deltaY/t):this.accept(Date.now(),e.deltaX,e.deltaY)}accept(e,t,i){const n=new E(e,t,i);n.score=this._computeScore(n),-1===this._front&&-1===this._rear?(this._memory[0]=n,this._front=0,this._rear=0):(this._rear=(this._rear+1)%this._capacity,this._rear===this._front&&(this._front=(this._front+1)%this._capacity),this._memory[this._rear]=n)}_computeScore(e){if(Math.abs(e.deltaX)>0&&Math.abs(e.deltaY)>0)return 1;let t=.5;-1===this._front&&-1===this._rear||this._memory[this._rear];return this._isAlmostInt(e.deltaX)&&this._isAlmostInt(e.deltaY)||(t+=.25),Math.min(Math.max(t,0),1)}_isAlmostInt(e){const t=Math.abs(Math.round(e)-e);return t<.01}}N.INSTANCE=new N;class D extends l.${get options(){return this._options}constructor(e,t,i){super(),this._onScroll=this._register(new x.Q5),this.onScroll=this._onScroll.event,this._onWillScroll=this._register(new x.Q5),e.style.overflow="hidden",this._options=R(t),this._scrollable=i,this._register(this._scrollable.onScroll((e=>{this._onWillScroll.fire(e),this._onDidScroll(e),this._onScroll.fire(e)})));const n={onMouseWheel:e=>this._onMouseWheel(e),onDragStart:()=>this._onDragStart(),onDragEnd:()=>this._onDragEnd()};this._verticalScrollbar=this._register(new w(this._scrollable,this._options,n)),this._horizontalScrollbar=this._register(new y(this._scrollable,this._options,n)),this._domNode=document.createElement("div"),this._domNode.className="monaco-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.style.overflow="hidden",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=(0,s.X)(document.createElement("div")),this._leftShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=(0,s.X)(document.createElement("div")),this._topShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=(0,s.X)(document.createElement("div")),this._topLeftShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode||this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this.onmouseover(this._listenOnDomNode,(e=>this._onMouseOver(e))),this.onmouseleave(this._listenOnDomNode,(e=>this._onMouseLeave(e))),this._hideTimeout=this._register(new c._F),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}dispose(){this._mouseWheelToDispose=(0,g.B9)(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getOverviewRulerLayoutInfo(){return{parent:this._domNode,insertBefore:this._verticalScrollbar.domNode.domNode}}delegateVerticalScrollbarPointerDown(e){this._verticalScrollbar.delegatePointerDown(e)}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}updateClassName(e){this._options.className=e,f.dz&&(this._options.className+=" mac"),this._domNode.className="monaco-scrollable-element "+this._options.className}updateOptions(e){"undefined"!==typeof e.handleMouseWheel&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),"undefined"!==typeof e.mouseWheelScrollSensitivity&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),"undefined"!==typeof e.fastScrollSensitivity&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),"undefined"!==typeof e.scrollPredominantAxis&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),"undefined"!==typeof e.horizontal&&(this._options.horizontal=e.horizontal),"undefined"!==typeof e.vertical&&(this._options.vertical=e.vertical),"undefined"!==typeof e.horizontalScrollbarSize&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),"undefined"!==typeof e.verticalScrollbarSize&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),"undefined"!==typeof e.scrollByPage&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(e){this._onMouseWheel(new r.q(e))}_setListeningToMouseWheel(e){const t=this._mouseWheelToDispose.length>0;if(t!==e&&(this._mouseWheelToDispose=(0,g.B9)(this._mouseWheelToDispose),e)){const e=e=>{this._onMouseWheel(new r.q(e))};this._mouseWheelToDispose.push(o.nm(this._listenOnDomNode,o.tw.MOUSE_WHEEL,e,{passive:!1}))}}_onMouseWheel(e){var t;if(null===(t=e.browserEvent)||void 0===t?void 0:t.defaultPrevented)return;const i=N.INSTANCE;L&&i.acceptStandardWheelEvent(e);let n=!1;if(e.deltaY||e.deltaX){let t=e.deltaY*this._options.mouseWheelScrollSensitivity,o=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&o+t===0?o=t=0:Math.abs(t)>=Math.abs(o)?o=0:t=0),this._options.flipAxes&&([t,o]=[o,t]);const s=!f.dz&&e.browserEvent&&e.browserEvent.shiftKey;!this._options.scrollYToX&&!s||o||(o=t,t=0),e.browserEvent&&e.browserEvent.altKey&&(o*=this._options.fastScrollSensitivity,t*=this._options.fastScrollSensitivity);const r=this._scrollable.getFutureScrollPosition();let a={};if(t){const e=k*t,i=r.scrollTop-(e<0?Math.floor(e):Math.ceil(e));this._verticalScrollbar.writeScrollPosition(a,i)}if(o){const e=k*o,t=r.scrollLeft-(e<0?Math.floor(e):Math.ceil(e));this._horizontalScrollbar.writeScrollPosition(a,t)}if(a=this._scrollable.validateScrollPosition(a),r.scrollLeft!==a.scrollLeft||r.scrollTop!==a.scrollTop){const e=L&&this._options.mouseWheelSmoothScroll&&i.isPhysicalMouseWheel();e?this._scrollable.setScrollPositionSmooth(a):this._scrollable.setScrollPositionNow(a),n=!0}}let o=n;!o&&this._options.alwaysConsumeMouseWheel&&(o=!0),!o&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(o=!0),o&&(e.preventDefault(),e.stopPropagation())}_onDidScroll(e){this._shouldRender=this._horizontalScrollbar.onDidScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.onDidScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){const e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,i=e.scrollLeft>0,n=i?" left":"",o=t?" top":"",s=i||t?" top-left-corner":"";this._leftShadowDomNode.setClassName(`shadow${n}`),this._topShadowDomNode.setClassName(`shadow${o}`),this._topLeftShadowDomNode.setClassName(`shadow${s}${o}${n}`)}}_onDragStart(){this._isDragging=!0,this._reveal()}_onDragEnd(){this._isDragging=!1,this._hide()}_onMouseLeave(e){this._mouseIsOver=!1,this._hide()}_onMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){this._mouseIsOver||this._isDragging||(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){this._mouseIsOver||this._isDragging||this._hideTimeout.cancelAndSet((()=>this._hide()),S)}}class T extends D{constructor(e,t){t=t||{},t.mouseWheelSmoothScroll=!1;const i=new C.Rm({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:t=>o.jL(o.Jj(e),t)});super(e,t,i),this._register(i)}setScrollPosition(e){this._scrollable.setScrollPositionNow(e)}}class A extends D{constructor(e,t,i){super(e,t,i)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}}class I extends D{constructor(e,t){t=t||{},t.mouseWheelSmoothScroll=!1;const i=new C.Rm({forceIntegerValues:!1,smoothScrollDuration:0,scheduleAtNextAnimationFrame:t=>o.jL(o.Jj(e),t)});super(e,t,i),this._register(i),this._element=e,this._register(this.onScroll((e=>{e.scrollTopChanged&&(this._element.scrollTop=e.scrollTop),e.scrollLeftChanged&&(this._element.scrollLeft=e.scrollLeft)}))),this.scanDomNode()}setScrollPosition(e){this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}scanDomNode(){this.setScrollDimensions({width:this._element.clientWidth,scrollWidth:this._element.scrollWidth,height:this._element.clientHeight,scrollHeight:this._element.scrollHeight}),this.setScrollPosition({scrollLeft:this._element.scrollLeft,scrollTop:this._element.scrollTop})}}function R(e){const t={lazyRender:"undefined"!==typeof e.lazyRender&&e.lazyRender,className:"undefined"!==typeof e.className?e.className:"",useShadows:"undefined"===typeof e.useShadows||e.useShadows,handleMouseWheel:"undefined"===typeof e.handleMouseWheel||e.handleMouseWheel,flipAxes:"undefined"!==typeof e.flipAxes&&e.flipAxes,consumeMouseWheelIfScrollbarIsNeeded:"undefined"!==typeof e.consumeMouseWheelIfScrollbarIsNeeded&&e.consumeMouseWheelIfScrollbarIsNeeded,alwaysConsumeMouseWheel:"undefined"!==typeof e.alwaysConsumeMouseWheel&&e.alwaysConsumeMouseWheel,scrollYToX:"undefined"!==typeof e.scrollYToX&&e.scrollYToX,mouseWheelScrollSensitivity:"undefined"!==typeof e.mouseWheelScrollSensitivity?e.mouseWheelScrollSensitivity:1,fastScrollSensitivity:"undefined"!==typeof e.fastScrollSensitivity?e.fastScrollSensitivity:5,scrollPredominantAxis:"undefined"===typeof e.scrollPredominantAxis||e.scrollPredominantAxis,mouseWheelSmoothScroll:"undefined"===typeof e.mouseWheelSmoothScroll||e.mouseWheelSmoothScroll,arrowSize:"undefined"!==typeof e.arrowSize?e.arrowSize:11,listenOnDomNode:"undefined"!==typeof e.listenOnDomNode?e.listenOnDomNode:null,horizontal:"undefined"!==typeof e.horizontal?e.horizontal:1,horizontalScrollbarSize:"undefined"!==typeof e.horizontalScrollbarSize?e.horizontalScrollbarSize:10,horizontalSliderSize:"undefined"!==typeof e.horizontalSliderSize?e.horizontalSliderSize:0,horizontalHasArrows:"undefined"!==typeof e.horizontalHasArrows&&e.horizontalHasArrows,vertical:"undefined"!==typeof e.vertical?e.vertical:1,verticalScrollbarSize:"undefined"!==typeof e.verticalScrollbarSize?e.verticalScrollbarSize:10,verticalHasArrows:"undefined"!==typeof e.verticalHasArrows&&e.verticalHasArrows,verticalSliderSize:"undefined"!==typeof e.verticalSliderSize?e.verticalSliderSize:0,scrollByPage:"undefined"!==typeof e.scrollByPage&&e.scrollByPage};return t.horizontalSliderSize="undefined"!==typeof e.horizontalSliderSize?e.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize="undefined"!==typeof e.verticalSliderSize?e.verticalSliderSize:t.verticalScrollbarSize,f.dz&&(t.className+=" mac"),t}},69758:(e,t,i)=>{"use strict";i.d(t,{M:()=>o});const n=20;class o{constructor(e,t,i,n,o,s){this._scrollbarSize=Math.round(t),this._oppositeScrollbarSize=Math.round(i),this._arrowSize=Math.round(e),this._visibleSize=n,this._scrollSize=o,this._scrollPosition=s,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new o(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(e){const t=Math.round(e);return this._visibleSize!==t&&(this._visibleSize=t,this._refreshComputedValues(),!0)}setScrollSize(e){const t=Math.round(e);return this._scrollSize!==t&&(this._scrollSize=t,this._refreshComputedValues(),!0)}setScrollPosition(e){const t=Math.round(e);return this._scrollPosition!==t&&(this._scrollPosition=t,this._refreshComputedValues(),!0)}setScrollbarSize(e){this._scrollbarSize=Math.round(e)}setOppositeScrollbarSize(e){this._oppositeScrollbarSize=Math.round(e)}static _computeValues(e,t,i,o,s){const r=Math.max(0,i-e),a=Math.max(0,r-2*t),l=o>0&&o>i;if(!l)return{computedAvailableSize:Math.round(r),computedIsNeeded:l,computedSliderSize:Math.round(a),computedSliderRatio:0,computedSliderPosition:0};const c=Math.round(Math.max(n,Math.floor(i*a/o))),d=(a-c)/(o-i),u=s*d;return{computedAvailableSize:Math.round(r),computedIsNeeded:l,computedSliderSize:Math.round(c),computedSliderRatio:d,computedSliderPosition:Math.round(u)}}_refreshComputedValues(){const e=o._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=e.computedAvailableSize,this._computedIsNeeded=e.computedIsNeeded,this._computedSliderSize=e.computedSliderSize,this._computedSliderRatio=e.computedSliderRatio,this._computedSliderPosition=e.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize-this._computedSliderSize/2;return Math.round(t/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize;let i=this._scrollPosition;return t{"use strict";i.d(t,{M:()=>b,z:()=>y});var n=i(2548),o=i(9172),s=i(18612),r=i(60841),a=i(21921),l=i(60204),c=i(11271),d=i(70959),u=i(46304),h=i(4225),g=i(55455);const p={separatorBorder:l.Il.transparent};class f{set size(e){this._size=e}get size(){return this._size}get visible(){return"undefined"===typeof this._cachedVisibleSize}setVisible(e,t){var i,n;if(e!==this.visible){e?(this.size=(0,u.uZ)(this._cachedVisibleSize,this.viewMinimumSize,this.viewMaximumSize),this._cachedVisibleSize=void 0):(this._cachedVisibleSize="number"===typeof t?t:this.size,this.size=0),this.container.classList.toggle("visible",e);try{null===(n=(i=this.view).setVisible)||void 0===n||n.call(i,e)}catch(o){console.error("Splitview: Failed to set visible view"),console.error(o)}}}get minimumSize(){return this.visible?this.view.minimumSize:0}get viewMinimumSize(){return this.view.minimumSize}get maximumSize(){return this.visible?this.view.maximumSize:0}get viewMaximumSize(){return this.view.maximumSize}get priority(){return this.view.priority}get proportionalLayout(){var e;return null===(e=this.view.proportionalLayout)||void 0===e||e}get snap(){return!!this.view.snap}set enabled(e){this.container.style.pointerEvents=e?"":"none"}constructor(e,t,i,n){this.container=e,this.view=t,this.disposable=n,this._cachedVisibleSize=void 0,"number"===typeof i?(this._size=i,this._cachedVisibleSize=void 0,e.classList.add("visible")):(this._size=0,this._cachedVisibleSize=i.cachedVisibleSize)}layout(e,t){this.layoutContainer(e);try{this.view.layout(this.size,e,t)}catch(i){console.error("Splitview: Failed to layout view"),console.error(i)}}dispose(){this.disposable.dispose()}}class m extends f{layoutContainer(e){this.container.style.top=`${e}px`,this.container.style.height=`${this.size}px`}}class v extends f{layoutContainer(e){this.container.style.left=`${e}px`,this.container.style.width=`${this.size}px`}}var _,b;(function(e){e[e["Idle"]=0]="Idle",e[e["Busy"]=1]="Busy"})(_||(_={})),function(e){function t(e){return{type:"split",index:e}}function i(e){return{type:"auto",index:e}}function n(e){return{type:"invisible",cachedVisibleSize:e}}e.Distribute={type:"distribute"},e.Split=t,e.Auto=i,e.Invisible=n}(b||(b={}));class y extends d.JT{get orthogonalStartSash(){return this._orthogonalStartSash}get orthogonalEndSash(){return this._orthogonalEndSash}get startSnappingEnabled(){return this._startSnappingEnabled}get endSnappingEnabled(){return this._endSnappingEnabled}set orthogonalStartSash(e){for(const t of this.sashItems)t.sash.orthogonalStartSash=e;this._orthogonalStartSash=e}set orthogonalEndSash(e){for(const t of this.sashItems)t.sash.orthogonalEndSash=e;this._orthogonalEndSash=e}set startSnappingEnabled(e){this._startSnappingEnabled!==e&&(this._startSnappingEnabled=e,this.updateSashEnablement())}set endSnappingEnabled(e){this._endSnappingEnabled!==e&&(this._endSnappingEnabled=e,this.updateSashEnablement())}constructor(e,t={}){var i,s,a,l,d;super(),this.size=0,this._contentSize=0,this.proportions=void 0,this.viewItems=[],this.sashItems=[],this.state=_.Idle,this._onDidSashChange=this._register(new c.Q5),this._onDidSashReset=this._register(new c.Q5),this._startSnappingEnabled=!0,this._endSnappingEnabled=!0,this.onDidSashChange=this._onDidSashChange.event,this.onDidSashReset=this._onDidSashReset.event,this.orientation=null!==(i=t.orientation)&&void 0!==i?i:0,this.inverseAltBehavior=null!==(s=t.inverseAltBehavior)&&void 0!==s&&s,this.proportionalLayout=null===(a=t.proportionalLayout)||void 0===a||a,this.getSashOrthogonalSize=t.getSashOrthogonalSize,this.el=document.createElement("div"),this.el.classList.add("monaco-split-view2"),this.el.classList.add(0===this.orientation?"vertical":"horizontal"),e.appendChild(this.el),this.sashContainer=(0,n.R3)(this.el,(0,n.$)(".sash-container")),this.viewContainer=(0,n.$)(".split-view-container"),this.scrollable=this._register(new h.Rm({forceIntegerValues:!0,smoothScrollDuration:125,scheduleAtNextAnimationFrame:e=>(0,n.jL)((0,n.Jj)(this.el),e)})),this.scrollableElement=this._register(new r.$Z(this.viewContainer,{vertical:0===this.orientation?null!==(l=t.scrollbarVisibility)&&void 0!==l?l:1:2,horizontal:1===this.orientation?null!==(d=t.scrollbarVisibility)&&void 0!==d?d:1:2},this.scrollable));const u=this._register(new o.Y(this.viewContainer,"scroll")).event;this._register(u((e=>{const t=this.scrollableElement.getScrollPosition(),i=Math.abs(this.viewContainer.scrollLeft-t.scrollLeft)<=1?void 0:this.viewContainer.scrollLeft,n=Math.abs(this.viewContainer.scrollTop-t.scrollTop)<=1?void 0:this.viewContainer.scrollTop;void 0===i&&void 0===n||this.scrollableElement.setScrollPosition({scrollLeft:i,scrollTop:n})}))),this.onDidScroll=this.scrollableElement.onScroll,this._register(this.onDidScroll((e=>{e.scrollTopChanged&&(this.viewContainer.scrollTop=e.scrollTop),e.scrollLeftChanged&&(this.viewContainer.scrollLeft=e.scrollLeft)}))),(0,n.R3)(this.el,this.scrollableElement.getDomNode()),this.style(t.styles||p),t.descriptor&&(this.size=t.descriptor.size,t.descriptor.views.forEach(((e,t)=>{const i=g.o8(e.visible)||e.visible?e.size:{type:"invisible",cachedVisibleSize:e.size},n=e.view;this.doAddView(n,i,t,!0)})),this._contentSize=this.viewItems.reduce(((e,t)=>e+t.size),0),this.saveProportions())}style(e){e.separatorBorder.isTransparent()?(this.el.classList.remove("separator-border"),this.el.style.removeProperty("--separator-border")):(this.el.classList.add("separator-border"),this.el.style.setProperty("--separator-border",e.separatorBorder.toString()))}addView(e,t,i=this.viewItems.length,n){this.doAddView(e,t,i,n)}layout(e,t){const i=Math.max(this.size,this._contentSize);if(this.size=e,this.layoutContext=t,this.proportions){let t=0;for(let i=0;i0&&(n.size=(0,u.uZ)(Math.round(o*e/t),n.minimumSize,n.maximumSize))}}else{const t=(0,a.w6)(this.viewItems.length),n=t.filter((e=>1===this.viewItems[e].priority)),o=t.filter((e=>2===this.viewItems[e].priority));this.resize(this.viewItems.length-1,e-i,void 0,n,o)}this.distributeEmptySpace(),this.layoutViews()}saveProportions(){this.proportionalLayout&&this._contentSize>0&&(this.proportions=this.viewItems.map((e=>e.proportionalLayout&&e.visible?e.size/this._contentSize:void 0)))}onSashStart({sash:e,start:t,alt:i}){for(const n of this.viewItems)n.enabled=!1;const o=this.sashItems.findIndex((t=>t.sash===e)),s=(0,d.F8)((0,n.nm)(this.el.ownerDocument.body,"keydown",(e=>r(this.sashDragState.current,e.altKey))),(0,n.nm)(this.el.ownerDocument.body,"keyup",(()=>r(this.sashDragState.current,!1)))),r=(e,t)=>{const i=this.viewItems.map((e=>e.size));let n,r,l=Number.NEGATIVE_INFINITY,c=Number.POSITIVE_INFINITY;if(this.inverseAltBehavior&&(t=!t),t){const e=o===this.sashItems.length-1;if(e){const e=this.viewItems[o];l=(e.minimumSize-e.size)/2,c=(e.maximumSize-e.size)/2}else{const e=this.viewItems[o+1];l=(e.size-e.maximumSize)/2,c=(e.size-e.minimumSize)/2}}if(!t){const e=(0,a.w6)(o,-1),t=(0,a.w6)(o+1,this.viewItems.length),s=e.reduce(((e,t)=>e+(this.viewItems[t].minimumSize-i[t])),0),l=e.reduce(((e,t)=>e+(this.viewItems[t].viewMaximumSize-i[t])),0),c=0===t.length?Number.POSITIVE_INFINITY:t.reduce(((e,t)=>e+(i[t]-this.viewItems[t].minimumSize)),0),d=0===t.length?Number.NEGATIVE_INFINITY:t.reduce(((e,t)=>e+(i[t]-this.viewItems[t].viewMaximumSize)),0),u=Math.max(s,d),h=Math.min(c,l),g=this.findFirstSnapIndex(e),p=this.findFirstSnapIndex(t);if("number"===typeof g){const e=this.viewItems[g],t=Math.floor(e.viewMinimumSize/2);n={index:g,limitDelta:e.visible?u-t:u+t,size:e.size}}if("number"===typeof p){const e=this.viewItems[p],t=Math.floor(e.viewMinimumSize/2);r={index:p,limitDelta:e.visible?h+t:h-t,size:e.size}}}this.sashDragState={start:e,current:e,index:o,sizes:i,minDelta:l,maxDelta:c,alt:t,snapBefore:n,snapAfter:r,disposable:s}};r(t,i)}onSashChange({current:e}){const{index:t,start:i,sizes:n,alt:o,minDelta:s,maxDelta:r,snapBefore:a,snapAfter:l}=this.sashDragState;this.sashDragState.current=e;const c=e-i,d=this.resize(t,c,n,void 0,void 0,s,r,a,l);if(o){const e=t===this.sashItems.length-1,i=this.viewItems.map((e=>e.size)),n=e?t:t+1,o=this.viewItems[n],s=o.size-o.maximumSize,r=o.size-o.minimumSize,a=e?t-1:t+1;this.resize(a,-d,i,void 0,void 0,s,r)}this.distributeEmptySpace(),this.layoutViews()}onSashEnd(e){this._onDidSashChange.fire(e),this.sashDragState.disposable.dispose(),this.saveProportions();for(const t of this.viewItems)t.enabled=!0}onViewChange(e,t){const i=this.viewItems.indexOf(e);i<0||i>=this.viewItems.length||(t="number"===typeof t?t:e.size,t=(0,u.uZ)(t,e.minimumSize,e.maximumSize),this.inverseAltBehavior&&i>0?(this.resize(i-1,Math.floor((e.size-t)/2)),this.distributeEmptySpace(),this.layoutViews()):(e.size=t,this.relayout([i],void 0)))}resizeView(e,t){if(!(e<0||e>=this.viewItems.length)){if(this.state!==_.Idle)throw new Error("Cant modify splitview");this.state=_.Busy;try{const i=(0,a.w6)(this.viewItems.length).filter((t=>t!==e)),n=[...i.filter((e=>1===this.viewItems[e].priority)),e],o=i.filter((e=>2===this.viewItems[e].priority)),s=this.viewItems[e];t=Math.round(t),t=(0,u.uZ)(t,s.minimumSize,Math.min(s.maximumSize,this.size)),s.size=t,this.relayout(n,o)}finally{this.state=_.Idle}}}distributeViewSizes(){const e=[];let t=0;for(const r of this.viewItems)r.maximumSize-r.minimumSize>0&&(e.push(r),t+=r.size);const i=Math.floor(t/e.length);for(const r of e)r.size=(0,u.uZ)(i,r.minimumSize,r.maximumSize);const n=(0,a.w6)(this.viewItems.length),o=n.filter((e=>1===this.viewItems[e].priority)),s=n.filter((e=>2===this.viewItems[e].priority));this.relayout(o,s)}getViewSize(e){return e<0||e>=this.viewItems.length?-1:this.viewItems[e].size}doAddView(e,t,i=this.viewItems.length,o){if(this.state!==_.Idle)throw new Error("Cant modify splitview");this.state=_.Busy;try{const r=(0,n.$)(".split-view-view");i===this.viewItems.length?this.viewContainer.appendChild(r):this.viewContainer.insertBefore(r,this.viewContainer.children.item(i));const l=e.onDidChange((e=>this.onViewChange(p,e))),u=(0,d.OF)((()=>this.viewContainer.removeChild(r))),h=(0,d.F8)(l,u);let g;"number"===typeof t?g=t:("auto"===t.type&&(t=this.areViewsDistributed()?{type:"distribute"}:{type:"split",index:t.index}),g="split"===t.type?this.getViewSize(t.index)/2:"invisible"===t.type?{cachedVisibleSize:t.cachedVisibleSize}:e.minimumSize);const p=0===this.orientation?new m(r,e,g,h):new v(r,e,g,h);if(this.viewItems.splice(i,0,p),this.viewItems.length>1){const e={orthogonalStartSash:this.orthogonalStartSash,orthogonalEndSash:this.orthogonalEndSash},t=0===this.orientation?new s.g(this.sashContainer,{getHorizontalSashTop:e=>this.getSashPosition(e),getHorizontalSashWidth:this.getSashOrthogonalSize},{...e,orientation:1}):new s.g(this.sashContainer,{getVerticalSashLeft:e=>this.getSashPosition(e),getVerticalSashHeight:this.getSashOrthogonalSize},{...e,orientation:0}),n=0===this.orientation?e=>({sash:t,start:e.startY,current:e.currentY,alt:e.altKey}):e=>({sash:t,start:e.startX,current:e.currentX,alt:e.altKey}),o=c.ju.map(t.onDidStart,n),r=o(this.onSashStart,this),l=c.ju.map(t.onDidChange,n),u=l(this.onSashChange,this),h=c.ju.map(t.onDidEnd,(()=>this.sashItems.findIndex((e=>e.sash===t)))),g=h(this.onSashEnd,this),p=t.onDidReset((()=>{const e=this.sashItems.findIndex((e=>e.sash===t)),i=(0,a.w6)(e,-1),n=(0,a.w6)(e+1,this.viewItems.length),o=this.findFirstSnapIndex(i),s=this.findFirstSnapIndex(n);("number"!==typeof o||this.viewItems[o].visible)&&("number"!==typeof s||this.viewItems[s].visible)&&this._onDidSashReset.fire(e)})),f=(0,d.F8)(r,u,g,p,t),m={sash:t,disposable:f};this.sashItems.splice(i-1,0,m)}let f;r.appendChild(e.element),"number"!==typeof t&&"split"===t.type&&(f=[t.index]),o||this.relayout([i],f),o||"number"===typeof t||"distribute"!==t.type||this.distributeViewSizes()}finally{this.state=_.Idle}}relayout(e,t){const i=this.viewItems.reduce(((e,t)=>e+t.size),0);this.resize(this.viewItems.length-1,this.size-i,void 0,e,t),this.distributeEmptySpace(),this.layoutViews(),this.saveProportions()}resize(e,t,i=this.viewItems.map((e=>e.size)),n,o,s=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY,l,c){if(e<0||e>=this.viewItems.length)return 0;const d=(0,a.w6)(e,-1),h=(0,a.w6)(e+1,this.viewItems.length);if(o)for(const u of o)(0,a.zI)(d,u),(0,a.zI)(h,u);if(n)for(const u of n)(0,a.al)(d,u),(0,a.al)(h,u);const g=d.map((e=>this.viewItems[e])),p=d.map((e=>i[e])),f=h.map((e=>this.viewItems[e])),m=h.map((e=>i[e])),v=d.reduce(((e,t)=>e+(this.viewItems[t].minimumSize-i[t])),0),_=d.reduce(((e,t)=>e+(this.viewItems[t].maximumSize-i[t])),0),b=0===h.length?Number.POSITIVE_INFINITY:h.reduce(((e,t)=>e+(i[t]-this.viewItems[t].minimumSize)),0),y=0===h.length?Number.NEGATIVE_INFINITY:h.reduce(((e,t)=>e+(i[t]-this.viewItems[t].maximumSize)),0),w=Math.max(v,y,s),x=Math.min(b,_,r);let C=!1;if(l){const e=this.viewItems[l.index],i=t>=l.limitDelta;C=i!==e.visible,e.setVisible(i,l.size)}if(!C&&c){const e=this.viewItems[c.index],i=te+t.size),0);let i=this.size-t;const n=(0,a.w6)(this.viewItems.length-1,-1),o=n.filter((e=>1===this.viewItems[e].priority)),s=n.filter((e=>2===this.viewItems[e].priority));for(const r of s)(0,a.zI)(n,r);for(const r of o)(0,a.al)(n,r);"number"===typeof e&&(0,a.al)(n,e);for(let r=0;0!==i&&re+t.size),0);let e=0;for(const t of this.viewItems)t.layout(e,this.layoutContext),e+=t.size;this.sashItems.forEach((e=>e.sash.layout())),this.updateSashEnablement(),this.updateScrollableElement()}updateScrollableElement(){0===this.orientation?this.scrollableElement.setScrollDimensions({height:this.size,scrollHeight:this._contentSize}):this.scrollableElement.setScrollDimensions({width:this.size,scrollWidth:this._contentSize})}updateSashEnablement(){let e=!1;const t=this.viewItems.map((t=>e=t.size-t.minimumSize>0||e));e=!1;const i=this.viewItems.map((t=>e=t.maximumSize-t.size>0||e)),n=[...this.viewItems].reverse();e=!1;const o=n.map((t=>e=t.size-t.minimumSize>0||e)).reverse();e=!1;const s=n.map((t=>e=t.maximumSize-t.size>0||e)).reverse();let r=0;for(let l=0;l0||this.startSnappingEnabled)?e.state=1:u&&t[l]&&(r0)return;if(!e.visible&&e.snap)return t}}areViewsDistributed(){let e,t;for(const i of this.viewItems)if(e=void 0===e?i.size:Math.min(e,i.size),t=void 0===t?i.size:Math.max(t,i.size),t-e>2)return!1;return!0}dispose(){var e;null===(e=this.sashDragState)||void 0===e||e.disposable.dispose(),(0,d.B9)(this.viewItems),this.viewItems=[],this.sashItems.forEach((e=>e.disposable.dispose())),this.sashItems=[],super.dispose()}}},5506:(e,t,i)=>{"use strict";i.d(t,{D:()=>r,Z:()=>a});var n=i(9194),o=i(99588),s=i(11271);const r={inputActiveOptionBorder:"#007ACC00",inputActiveOptionForeground:"#FFFFFF",inputActiveOptionBackground:"#0E639C50"};class a extends n.${constructor(e){super(),this._onChange=this._register(new s.Q5),this.onChange=this._onChange.event,this._onKeyDown=this._register(new s.Q5),this.onKeyDown=this._onKeyDown.event,this._opts=e,this._checked=this._opts.isChecked;const t=["monaco-custom-toggle"];this._opts.icon&&(this._icon=this._opts.icon,t.push(...o.k.asClassNameArray(this._icon))),this._opts.actionClassName&&t.push(...this._opts.actionClassName.split(" ")),this._checked&&t.push("checked"),this.domNode=document.createElement("div"),this.domNode.title=this._opts.title,this.domNode.classList.add(...t),this._opts.notFocusable||(this.domNode.tabIndex=0),this.domNode.setAttribute("role","checkbox"),this.domNode.setAttribute("aria-checked",String(this._checked)),this.domNode.setAttribute("aria-label",this._opts.title),this.applyStyles(),this.onclick(this.domNode,(e=>{this.enabled&&(this.checked=!this._checked,this._onChange.fire(!1),e.preventDefault())})),this._register(this.ignoreGesture(this.domNode)),this.onkeydown(this.domNode,(e=>{if(10===e.keyCode||3===e.keyCode)return this.checked=!this._checked,this._onChange.fire(!0),e.preventDefault(),void e.stopPropagation();this._onKeyDown.fire(e)}))}get enabled(){return"true"!==this.domNode.getAttribute("aria-disabled")}focus(){this.domNode.focus()}get checked(){return this._checked}set checked(e){this._checked=e,this.domNode.setAttribute("aria-checked",String(this._checked)),this.domNode.classList.toggle("checked",this._checked),this.applyStyles()}width(){return 22}applyStyles(){this.domNode&&(this.domNode.style.borderColor=this._checked&&this._opts.inputActiveOptionBorder||"",this.domNode.style.color=this._checked&&this._opts.inputActiveOptionForeground||"inherit",this.domNode.style.backgroundColor=this._checked&&this._opts.inputActiveOptionBackground||"")}enable(){this.domNode.setAttribute("aria-disabled",String(!1))}disable(){this.domNode.setAttribute("aria-disabled",String(!0))}}},9194:(e,t,i)=>{"use strict";i.d(t,{$:()=>l});var n=i(2548),o=i(45429),s=i(75467),r=i(1212),a=i(70959);class l extends a.JT{onclick(e,t){this._register(n.nm(e,n.tw.CLICK,(i=>t(new s.n(n.Jj(e),i)))))}onmousedown(e,t){this._register(n.nm(e,n.tw.MOUSE_DOWN,(i=>t(new s.n(n.Jj(e),i)))))}onmouseover(e,t){this._register(n.nm(e,n.tw.MOUSE_OVER,(i=>t(new s.n(n.Jj(e),i)))))}onmouseleave(e,t){this._register(n.nm(e,n.tw.MOUSE_LEAVE,(i=>t(new s.n(n.Jj(e),i)))))}onkeydown(e,t){this._register(n.nm(e,n.tw.KEY_DOWN,(e=>t(new o.y(e)))))}onkeyup(e,t){this._register(n.nm(e,n.tw.KEY_UP,(e=>t(new o.y(e)))))}oninput(e,t){this._register(n.nm(e,n.tw.INPUT,t))}onblur(e,t){this._register(n.nm(e,n.tw.BLUR,t))}onfocus(e,t){this._register(n.nm(e,n.tw.FOCUS,t))}ignoreGesture(e){return r.o.ignoreTarget(e)}}},36606:(e,t,i)=>{"use strict";function n(e,t){const i=e;"number"!==typeof i.vscodeWindowId&&Object.defineProperty(i,"vscodeWindowId",{get:()=>t})}i.d(t,{Ex:()=>o,HA:()=>n,vO:()=>s});const o=window,s=o},10205:(e,t,i)=>{"use strict";i.d(t,{Wi:()=>a,Z0:()=>l,aU:()=>r,eZ:()=>d,wY:()=>c,xw:()=>u});var n=i(11271),o=i(70959),s=i(25206);class r extends o.JT{constructor(e,t="",i="",o=!0,s){super(),this._onDidChange=this._register(new n.Q5),this.onDidChange=this._onDidChange.event,this._enabled=!0,this._id=e,this._label=t,this._cssClass=i,this._enabled=o,this._actionCallback=s}get id(){return this._id}get label(){return this._label}set label(e){this._setLabel(e)}_setLabel(e){this._label!==e&&(this._label=e,this._onDidChange.fire({label:e}))}get tooltip(){return this._tooltip||""}set tooltip(e){this._setTooltip(e)}_setTooltip(e){this._tooltip!==e&&(this._tooltip=e,this._onDidChange.fire({tooltip:e}))}get class(){return this._cssClass}set class(e){this._setClass(e)}_setClass(e){this._cssClass!==e&&(this._cssClass=e,this._onDidChange.fire({class:e}))}get enabled(){return this._enabled}set enabled(e){this._setEnabled(e)}_setEnabled(e){this._enabled!==e&&(this._enabled=e,this._onDidChange.fire({enabled:e}))}get checked(){return this._checked}set checked(e){this._setChecked(e)}_setChecked(e){this._checked!==e&&(this._checked=e,this._onDidChange.fire({checked:e}))}async run(e,t){this._actionCallback&&await this._actionCallback(e)}}class a extends o.JT{constructor(){super(...arguments),this._onWillRun=this._register(new n.Q5),this.onWillRun=this._onWillRun.event,this._onDidRun=this._register(new n.Q5),this.onDidRun=this._onDidRun.event}async run(e,t){if(!e.enabled)return;let i;this._onWillRun.fire({action:e});try{await this.runAction(e,t)}catch(n){i=n}this._onDidRun.fire({action:e,error:i})}async runAction(e,t){await e.run(t)}}class l{constructor(){this.id=l.ID,this.label="",this.tooltip="",this.class="separator",this.enabled=!1,this.checked=!1}static join(...e){let t=[];for(const i of e)i.length&&(t=t.length?[...t,new l,...i]:i);return t}async run(){}}l.ID="vs.actions.separator";class c{get actions(){return this._actions}constructor(e,t,i,n){this.tooltip="",this.enabled=!0,this.checked=void 0,this.id=e,this.label=t,this.class=n,this._actions=i}async run(){}}class d extends r{constructor(){super(d.ID,s.NC("submenu.empty","(empty)"),void 0,!1)}}function u(e){var t,i;return{id:e.id,label:e.label,class:e.class,enabled:null===(t=e.enabled)||void 0===t||t,checked:null!==(i=e.checked)&&void 0!==i&&i,run:async(...t)=>e.run(...t),tooltip:e.label}}d.ID="vs.actions.empty"},21921:(e,t,i)=>{"use strict";function n(e,t=0){return e[e.length-(1+t)]}function o(e){if(0===e.length)throw new Error("Invalid tail call");return[e.slice(0,e.length-1),e[e.length-1]]}function s(e,t,i=((e,t)=>e===t)){if(e===t)return!0;if(!e||!t)return!1;if(e.length!==t.length)return!1;for(let n=0,o=e.length;ni(e[n],t)))}function l(e,t){let i=0,n=e-1;while(i<=n){const e=(i+n)/2|0,o=t(e);if(o<0)i=e+1;else{if(!(o>0))return e;n=e-1}}return-(i+1)}function c(e,t,i){if(e|=0,e>=t.length)throw new TypeError("invalid index");const n=t[Math.floor(t.length*Math.random())],o=[],s=[],r=[];for(const a of t){const e=i(a,n);e<0?o.push(a):e>0?s.push(a):r.push(a)}return e!!e))}function f(e){let t=0;for(let i=0;i0}function _(e,t=(e=>e)){const i=new Set;return e.filter((e=>{const n=t(e);return!i.has(n)&&(i.add(n),!0)}))}function b(e,t){return e.length>0?e[0]:t}function y(e,t){let i="number"===typeof t?e:0;"number"===typeof t?i=e:(i=0,t=e);const n=[];if(i<=t)for(let o=i;ot;o--)n.push(o);return n}function w(e,t,i){const n=e.slice(0,t),o=e.slice(t);return n.concat(i,o)}function x(e,t){const i=e.indexOf(t);i>-1&&(e.splice(i,1),e.unshift(t))}function C(e,t){const i=e.indexOf(t);i>-1&&(e.splice(i,1),e.push(t))}function S(e,t){for(const i of t)e.push(i)}function k(e){return Array.isArray(e)?e:[e]}function L(e,t,i){const n=N(e,t),o=e.length,s=i.length;e.length=o+s;for(let r=o-1;r>=n;r--)e[r+s]=e[r];for(let r=0;rt(e(i),e(n))}function A(...e){return(t,i)=>{for(const n of e){const e=n(t,i);if(!D.isNeitherLessOrGreaterThan(e))return e}return D.neitherLessOrGreaterThan}}i.d(t,{BV:()=>M,EB:()=>_,Gb:()=>n,H9:()=>P,HW:()=>c,JH:()=>o,KO:()=>g,LS:()=>r,Of:()=>v,Rs:()=>f,W$:()=>O,XY:()=>m,Xh:()=>b,Zv:()=>w,_2:()=>k,al:()=>C,db:()=>E,fS:()=>s,f_:()=>A,fv:()=>I,kX:()=>p,mw:()=>u,nW:()=>R,ry:()=>a,tT:()=>T,vA:()=>S,vM:()=>d,w6:()=>y,zI:()=>x,zy:()=>h}),function(e){function t(e){return e<0}function i(e){return e<=0}function n(e){return e>0}function o(e){return 0===e}e.isLessThan=t,e.isLessThanOrEqual=i,e.isGreaterThan=n,e.isNeitherLessOrGreaterThan=o,e.greaterThan=1,e.lessThan=-1,e.neitherLessOrGreaterThan=0}(D||(D={}));const I=(e,t)=>e-t,R=(e,t)=>I(e?1:0,t?1:0);function M(e){return(t,i)=>-e(t,i)}class P{constructor(e){this.items=e,this.firstIdx=0,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(e){let t=this.firstIdx;while(t=0&&e(this.items[t]))t--;const i=t===this.lastIdx?null:this.items.slice(t+1,this.lastIdx+1);return this.lastIdx=t,i}peek(){if(0!==this.length)return this.items[this.firstIdx]}dequeue(){const e=this.items[this.firstIdx];return this.firstIdx++,e}takeCount(e){const t=this.items.slice(this.firstIdx,this.firstIdx+e);return this.firstIdx+=e,t}}class O{constructor(e){this.iterate=e}toArray(){const e=[];return this.iterate((t=>(e.push(t),!0))),e}filter(e){return new O((t=>this.iterate((i=>!e(i)||t(i)))))}map(e){return new O((t=>this.iterate((i=>t(e(i))))))}findLast(e){let t;return this.iterate((i=>(e(i)&&(t=i),!0))),t}findLastMaxBy(e){let t,i=!0;return this.iterate((n=>((i||D.isGreaterThan(e(n,t)))&&(i=!1,t=n),!0))),t}}O.empty=new O((e=>{}))},75912:(e,t,i)=>{"use strict";function n(e,t,i){const n=o(e,t);if(-1!==n)return e[n]}function o(e,t,i=e.length-1){for(let n=i;n>=0;n--){const i=e[n];if(t(i))return n}return-1}function s(e,t){const i=r(e,t);return-1===i?void 0:e[i]}function r(e,t,i=0,n=e.length){let o=i,s=n;while(op,J_:()=>l,Jw:()=>r,Ph:()=>h,b1:()=>c,cn:()=>a,dF:()=>n,dI:()=>d,jV:()=>u,tQ:()=>g,ti:()=>s});class c{constructor(e){this._array=e,this._findLastMonotonousLastIdx=0}findLastMonotonous(e){if(c.assertInvariants){if(this._prevFindLastPredicate)for(const t of this._array)if(this._prevFindLastPredicate(t)&&!e(t))throw new Error("MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.");this._prevFindLastPredicate=e}const t=r(this._array,e,this._findLastMonotonousLastIdx);return this._findLastMonotonousLastIdx=t+1,-1===t?void 0:this._array[t]}}function d(e,t){if(0===e.length)return;let i=e[0];for(let n=1;n0&&(i=o)}return i}function u(e,t){if(0===e.length)return;let i=e[0];for(let n=1;n=0&&(i=o)}return i}function h(e,t){return d(e,((e,i)=>-t(e,i)))}function g(e,t){if(0===e.length)return-1;let i=0;for(let n=1;n0&&(i=n)}return i}function p(e,t){for(const i of e){const e=t(i);if(void 0!==e)return e}}c.assertInvariants=!1},65662:(e,t,i)=>{"use strict";i.d(t,{DM:()=>a,eZ:()=>r,ok:()=>o,vE:()=>s});var n=i(98642);function o(e,t){if(!e)throw new Error(t?`Assertion failed (${t})`:"Assertion Failed")}function s(e,t="Unreachable"){throw new Error(t)}function r(e){e()||(e(),(0,n.dL)(new n.he("Assertion Failed")))}function a(e,t){let i=0;while(i{"use strict";i.d(t,{Aq:()=>D,CR:()=>E,J8:()=>c,PG:()=>d,Ps:()=>b,R5:()=>L,Vg:()=>_,Vs:()=>v,_F:()=>y,eP:()=>u,hF:()=>k,jT:()=>N,jg:()=>C,pY:()=>x,rH:()=>m,vp:()=>f,y5:()=>S,zS:()=>A,zh:()=>w});var n=i(55191),o=i(98642),s=i(11271),r=i(70959),a=i(47606),l=i(65338);function c(e){return!!e&&"function"===typeof e.then}function d(e){const t=new n.A,i=e(t.token),s=new Promise(((e,n)=>{const s=t.token.onCancellationRequested((()=>{s.dispose(),t.dispose(),n(new o.FU)}));Promise.resolve(i).then((i=>{s.dispose(),t.dispose(),e(i)}),(e=>{s.dispose(),t.dispose(),n(e)}))}));return new class{cancel(){t.cancel()}then(e,t){return s.then(e,t)}catch(e){return this.then(void 0,e)}finally(e){return s.finally(e)}}}function u(e,t,i){return new Promise(((n,o)=>{const s=t.onCancellationRequested((()=>{s.dispose(),n(i)}));e.then(n,o).finally((()=>s.dispose()))}))}class h{constructor(){this.isDisposed=!1,this.activePromise=null,this.queuedPromise=null,this.queuedPromiseFactory=null}queue(e){if(this.isDisposed)return Promise.reject(new Error("Throttler is disposed"));if(this.activePromise){if(this.queuedPromiseFactory=e,!this.queuedPromise){const e=()=>{if(this.queuedPromise=null,this.isDisposed)return;const e=this.queue(this.queuedPromiseFactory);return this.queuedPromiseFactory=null,e};this.queuedPromise=new Promise((t=>{this.activePromise.then(e,e).then(t)}))}return new Promise(((e,t)=>{this.queuedPromise.then(e,t)}))}return this.activePromise=e(),new Promise(((e,t)=>{this.activePromise.then((t=>{this.activePromise=null,e(t)}),(e=>{this.activePromise=null,t(e)}))}))}dispose(){this.isDisposed=!0}}const g=(e,t)=>{let i=!0;const n=setTimeout((()=>{i=!1,t()}),e);return{isTriggered:()=>i,dispose:()=>{clearTimeout(n),i=!1}}},p=e=>{let t=!0;return queueMicrotask((()=>{t&&(t=!1,e())})),{isTriggered:()=>t,dispose:()=>{t=!1}}};class f{constructor(e){this.defaultDelay=e,this.deferred=null,this.completionPromise=null,this.doResolve=null,this.doReject=null,this.task=null}trigger(e,t=this.defaultDelay){this.task=e,this.cancelTimeout(),this.completionPromise||(this.completionPromise=new Promise(((e,t)=>{this.doResolve=e,this.doReject=t})).then((()=>{if(this.completionPromise=null,this.doResolve=null,this.task){const e=this.task;return this.task=null,e()}})));const i=()=>{var e;this.deferred=null,null===(e=this.doResolve)||void 0===e||e.call(this,null)};return this.deferred=t===l.n?p(i):g(t,i),this.completionPromise}isTriggered(){var e;return!!(null===(e=this.deferred)||void 0===e?void 0:e.isTriggered())}cancel(){var e;this.cancelTimeout(),this.completionPromise&&(null===(e=this.doReject)||void 0===e||e.call(this,new o.FU),this.completionPromise=null)}cancelTimeout(){var e;null===(e=this.deferred)||void 0===e||e.dispose(),this.deferred=null}dispose(){this.cancel()}}class m{constructor(e){this.delayer=new f(e),this.throttler=new h}trigger(e,t){return this.delayer.trigger((()=>this.throttler.queue(e)),t)}cancel(){this.delayer.cancel()}dispose(){this.delayer.dispose(),this.throttler.dispose()}}function v(e,t){return t?new Promise(((i,n)=>{const s=setTimeout((()=>{r.dispose(),i()}),e),r=t.onCancellationRequested((()=>{clearTimeout(s),r.dispose(),n(new o.FU)}))})):d((t=>v(e,t)))}function _(e,t=0,i){const n=setTimeout((()=>{e(),i&&o.dispose()}),t),o=(0,r.OF)((()=>{clearTimeout(n),null===i||void 0===i||i.deleteAndLeak(o)}));return null===i||void 0===i||i.add(o),o}function b(e,t=(e=>!!e),i=null){let n=0;const o=e.length,s=()=>{if(n>=o)return Promise.resolve(i);const r=e[n++],a=Promise.resolve(r());return a.then((e=>t(e)?Promise.resolve(e):s()))};return s()}class y{constructor(e,t){this._token=-1,"function"===typeof e&&"number"===typeof t&&this.setIfNotSet(e,t)}dispose(){this.cancel()}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(e,t){this.cancel(),this._token=setTimeout((()=>{this._token=-1,e()}),t)}setIfNotSet(e,t){-1===this._token&&(this._token=setTimeout((()=>{this._token=-1,e()}),t))}}class w{constructor(){this.disposable=void 0}cancel(){var e;null===(e=this.disposable)||void 0===e||e.dispose(),this.disposable=void 0}cancelAndSet(e,t,i=globalThis){this.cancel();const n=i.setInterval((()=>{e()}),t);this.disposable=(0,r.OF)((()=>{i.clearInterval(n),this.disposable=void 0}))}dispose(){this.cancel()}}class x{constructor(e,t){this.timeoutToken=-1,this.runner=e,this.timeout=t,this.timeoutHandler=this.onTimeout.bind(this)}dispose(){this.cancel(),this.runner=null}cancel(){this.isScheduled()&&(clearTimeout(this.timeoutToken),this.timeoutToken=-1)}schedule(e=this.timeout){this.cancel(),this.timeoutToken=setTimeout(this.timeoutHandler,e)}get delay(){return this.timeout}set delay(e){this.timeout=e}isScheduled(){return-1!==this.timeoutToken}onTimeout(){this.timeoutToken=-1,this.runner&&this.doRun()}doRun(){var e;null===(e=this.runner)||void 0===e||e.call(this)}}let C,S;(function(){S="function"!==typeof globalThis.requestIdleCallback||"function"!==typeof globalThis.cancelIdleCallback?(e,t)=>{(0,a.fn)((()=>{if(i)return;const e=Date.now()+15,n={didTimeout:!0,timeRemaining(){return Math.max(0,e-Date.now())}};t(Object.freeze(n))}));let i=!1;return{dispose(){i||(i=!0)}}}:(e,t,i)=>{const n=e.requestIdleCallback(t,"number"===typeof i?{timeout:i}:void 0);let o=!1;return{dispose(){o||(o=!0,e.cancelIdleCallback(n))}}},C=e=>S(globalThis,e)})();class k{constructor(e,t){this._didRun=!1,this._executor=()=>{try{this._value=t()}catch(e){this._error=e}finally{this._didRun=!0}},this._handle=S(e,(()=>this._executor()))}dispose(){this._handle.dispose()}get value(){if(this._didRun||(this._handle.dispose(),this._executor()),this._error)throw this._error;return this._value}get isInitialized(){return this._didRun}}class L extends k{constructor(e){super(globalThis,e)}}class E{get isRejected(){var e;return 1===(null===(e=this.outcome)||void 0===e?void 0:e.outcome)}get isSettled(){return!!this.outcome}constructor(){this.p=new Promise(((e,t)=>{this.completeCallback=e,this.errorCallback=t}))}complete(e){return new Promise((t=>{this.completeCallback(e),this.outcome={outcome:0,value:e},t()}))}error(e){return new Promise((t=>{this.errorCallback(e),this.outcome={outcome:1,value:e},t()}))}cancel(){return this.error(new o.FU)}}var N;(function(e){async function t(e){let t;const i=await Promise.all(e.map((e=>e.then((e=>e),(e=>{t||(t=e)})))));if("undefined"!==typeof t)throw t;return i}function i(e){return new Promise((async(t,i)=>{try{await e(t,i)}catch(n){i(n)}}))}e.settled=t,e.withAsyncBody=i})(N||(N={}));class D{static fromArray(e){return new D((t=>{t.emitMany(e)}))}static fromPromise(e){return new D((async t=>{t.emitMany(await e)}))}static fromPromises(e){return new D((async t=>{await Promise.all(e.map((async e=>t.emitOne(await e))))}))}static merge(e){return new D((async t=>{await Promise.all(e.map((async e=>{for await(const i of e)t.emitOne(i)})))}))}constructor(e){this._state=0,this._results=[],this._error=null,this._onStateChanged=new s.Q5,queueMicrotask((async()=>{const t={emitOne:e=>this.emitOne(e),emitMany:e=>this.emitMany(e),reject:e=>this.reject(e)};try{await Promise.resolve(e(t)),this.resolve()}catch(i){this.reject(i)}finally{t.emitOne=void 0,t.emitMany=void 0,t.reject=void 0}}))}[Symbol.asyncIterator](){let e=0;return{next:async()=>{do{if(2===this._state)throw this._error;if(e{for await(const n of e)i.emitOne(t(n))}))}map(e){return D.map(this,e)}static filter(e,t){return new D((async i=>{for await(const n of e)t(n)&&i.emitOne(n)}))}filter(e){return D.filter(this,e)}static coalesce(e){return D.filter(e,(e=>!!e))}coalesce(){return D.coalesce(this)}static async toPromise(e){const t=[];for await(const i of e)t.push(i);return t}toPromise(){return D.toPromise(this)}emitOne(e){0===this._state&&(this._results.push(e),this._onStateChanged.fire())}emitMany(e){0===this._state&&(this._results=this._results.concat(e),this._onStateChanged.fire())}resolve(){0===this._state&&(this._state=1,this._onStateChanged.fire())}reject(e){0===this._state&&(this._state=2,this._error=e,this._onStateChanged.fire())}}D.EMPTY=D.fromArray([]);class T extends D{constructor(e,t){super(t),this._source=e}cancel(){this._source.cancel()}}function A(e){const t=new n.A,i=e(t.token);return new T(t,(async e=>{const n=t.token.onCancellationRequested((()=>{n.dispose(),t.dispose(),e.reject(new o.FU)}));try{for await(const n of i){if(t.token.isCancellationRequested)return;e.emitOne(n)}n.dispose(),t.dispose()}catch(s){n.dispose(),t.dispose(),e.reject(s)}}))}},80356:(e,t,i)=>{"use strict";i.d(t,{Ag:()=>c,Cg:()=>h,KN:()=>r,Q$:()=>u,T4:()=>d,mP:()=>a,oq:()=>l});var n=i(21815);const o="undefined"!==typeof Buffer;new n.o((()=>new Uint8Array(256)));let s;class r{static wrap(e){return o&&!Buffer.isBuffer(e)&&(e=Buffer.from(e.buffer,e.byteOffset,e.byteLength)),new r(e)}constructor(e){this.buffer=e,this.byteLength=this.buffer.byteLength}toString(){return o?this.buffer.toString():(s||(s=new TextDecoder),s.decode(this.buffer))}}function a(e,t){return e[t+0]<<0>>>0|e[t+1]<<8>>>0}function l(e,t,i){e[i+0]=255&t,t>>>=8,e[i+1]=255&t}function c(e,t){return e[t]*2**24+65536*e[t+1]+256*e[t+2]+e[t+3]}function d(e,t,i){e[i+3]=t,t>>>=8,e[i+2]=t,t>>>=8,e[i+1]=t,t>>>=8,e[i]=t}function u(e,t){return e[t]}function h(e,t,i){e[i]=t}},60857:(e,t,i)=>{"use strict";i.d(t,{b:()=>o,t:()=>n});class n{constructor(e){this.fn=e,this.lastCache=void 0,this.lastArgKey=void 0}get(e){const t=JSON.stringify(e);return this.lastArgKey!==t&&(this.lastArgKey=t,this.lastCache=this.fn(e)),this.lastCache}}class o{get cachedValues(){return this._map}constructor(e){this.fn=e,this._map=new Map}get(e){if(this._map.has(e))return this._map.get(e);const t=this.fn(e);return this._map.set(e,t),t}}},55191:(e,t,i)=>{"use strict";i.d(t,{A:()=>a,T:()=>s});var n=i(11271);const o=Object.freeze((function(e,t){const i=setTimeout(e.bind(t),0);return{dispose(){clearTimeout(i)}}}));var s;(function(e){function t(t){return t===e.None||t===e.Cancelled||(t instanceof r||!(!t||"object"!==typeof t)&&("boolean"===typeof t.isCancellationRequested&&"function"===typeof t.onCancellationRequested))}e.isCancellationToken=t,e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:n.ju.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:o})})(s||(s={}));class r{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?o:(this._emitter||(this._emitter=new n.Q5),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}}class a{constructor(e){this._token=void 0,this._parentListener=void 0,this._parentListener=e&&e.onCancellationRequested(this.cancel,this)}get token(){return this._token||(this._token=new r),this._token}cancel(){this._token?this._token instanceof r&&this._token.cancel():this._token=s.Cancelled}dispose(e=!1){var t;e&&this.cancel(),null===(t=this._parentListener)||void 0===t||t.dispose(),this._token?this._token instanceof r&&this._token.dispose():this._token=s.None}}},8419:(e,t,i)=>{"use strict";i.d(t,{l:()=>a,u:()=>r});var n=i(55455);const o=Object.create(null);function s(e,t){if((0,n.HD)(t)){const i=o[t];if(void 0===i)throw new Error(`${e} references an unknown codicon: ${t}`);t=i}return o[e]=t,{id:e}}function r(){return o}const a={add:s("add",6e4),plus:s("plus",6e4),gistNew:s("gist-new",6e4),repoCreate:s("repo-create",6e4),lightbulb:s("lightbulb",60001),lightBulb:s("light-bulb",60001),repo:s("repo",60002),repoDelete:s("repo-delete",60002),gistFork:s("gist-fork",60003),repoForked:s("repo-forked",60003),gitPullRequest:s("git-pull-request",60004),gitPullRequestAbandoned:s("git-pull-request-abandoned",60004),recordKeys:s("record-keys",60005),keyboard:s("keyboard",60005),tag:s("tag",60006),tagAdd:s("tag-add",60006),tagRemove:s("tag-remove",60006),gitPullRequestLabel:s("git-pull-request-label",60006),person:s("person",60007),personFollow:s("person-follow",60007),personOutline:s("person-outline",60007),personFilled:s("person-filled",60007),gitBranch:s("git-branch",60008),gitBranchCreate:s("git-branch-create",60008),gitBranchDelete:s("git-branch-delete",60008),sourceControl:s("source-control",60008),mirror:s("mirror",60009),mirrorPublic:s("mirror-public",60009),star:s("star",60010),starAdd:s("star-add",60010),starDelete:s("star-delete",60010),starEmpty:s("star-empty",60010),comment:s("comment",60011),commentAdd:s("comment-add",60011),alert:s("alert",60012),warning:s("warning",60012),search:s("search",60013),searchSave:s("search-save",60013),logOut:s("log-out",60014),signOut:s("sign-out",60014),logIn:s("log-in",60015),signIn:s("sign-in",60015),eye:s("eye",60016),eyeUnwatch:s("eye-unwatch",60016),eyeWatch:s("eye-watch",60016),circleFilled:s("circle-filled",60017),primitiveDot:s("primitive-dot",60017),closeDirty:s("close-dirty",60017),debugBreakpoint:s("debug-breakpoint",60017),debugBreakpointDisabled:s("debug-breakpoint-disabled",60017),debugHint:s("debug-hint",60017),primitiveSquare:s("primitive-square",60018),edit:s("edit",60019),pencil:s("pencil",60019),info:s("info",60020),issueOpened:s("issue-opened",60020),gistPrivate:s("gist-private",60021),gitForkPrivate:s("git-fork-private",60021),lock:s("lock",60021),mirrorPrivate:s("mirror-private",60021),close:s("close",60022),removeClose:s("remove-close",60022),x:s("x",60022),repoSync:s("repo-sync",60023),sync:s("sync",60023),clone:s("clone",60024),desktopDownload:s("desktop-download",60024),beaker:s("beaker",60025),microscope:s("microscope",60025),vm:s("vm",60026),deviceDesktop:s("device-desktop",60026),file:s("file",60027),fileText:s("file-text",60027),more:s("more",60028),ellipsis:s("ellipsis",60028),kebabHorizontal:s("kebab-horizontal",60028),mailReply:s("mail-reply",60029),reply:s("reply",60029),organization:s("organization",60030),organizationFilled:s("organization-filled",60030),organizationOutline:s("organization-outline",60030),newFile:s("new-file",60031),fileAdd:s("file-add",60031),newFolder:s("new-folder",60032),fileDirectoryCreate:s("file-directory-create",60032),trash:s("trash",60033),trashcan:s("trashcan",60033),history:s("history",60034),clock:s("clock",60034),folder:s("folder",60035),fileDirectory:s("file-directory",60035),symbolFolder:s("symbol-folder",60035),logoGithub:s("logo-github",60036),markGithub:s("mark-github",60036),github:s("github",60036),terminal:s("terminal",60037),console:s("console",60037),repl:s("repl",60037),zap:s("zap",60038),symbolEvent:s("symbol-event",60038),error:s("error",60039),stop:s("stop",60039),variable:s("variable",60040),symbolVariable:s("symbol-variable",60040),array:s("array",60042),symbolArray:s("symbol-array",60042),symbolModule:s("symbol-module",60043),symbolPackage:s("symbol-package",60043),symbolNamespace:s("symbol-namespace",60043),symbolObject:s("symbol-object",60043),symbolMethod:s("symbol-method",60044),symbolFunction:s("symbol-function",60044),symbolConstructor:s("symbol-constructor",60044),symbolBoolean:s("symbol-boolean",60047),symbolNull:s("symbol-null",60047),symbolNumeric:s("symbol-numeric",60048),symbolNumber:s("symbol-number",60048),symbolStructure:s("symbol-structure",60049),symbolStruct:s("symbol-struct",60049),symbolParameter:s("symbol-parameter",60050),symbolTypeParameter:s("symbol-type-parameter",60050),symbolKey:s("symbol-key",60051),symbolText:s("symbol-text",60051),symbolReference:s("symbol-reference",60052),goToFile:s("go-to-file",60052),symbolEnum:s("symbol-enum",60053),symbolValue:s("symbol-value",60053),symbolRuler:s("symbol-ruler",60054),symbolUnit:s("symbol-unit",60054),activateBreakpoints:s("activate-breakpoints",60055),archive:s("archive",60056),arrowBoth:s("arrow-both",60057),arrowDown:s("arrow-down",60058),arrowLeft:s("arrow-left",60059),arrowRight:s("arrow-right",60060),arrowSmallDown:s("arrow-small-down",60061),arrowSmallLeft:s("arrow-small-left",60062),arrowSmallRight:s("arrow-small-right",60063),arrowSmallUp:s("arrow-small-up",60064),arrowUp:s("arrow-up",60065),bell:s("bell",60066),bold:s("bold",60067),book:s("book",60068),bookmark:s("bookmark",60069),debugBreakpointConditionalUnverified:s("debug-breakpoint-conditional-unverified",60070),debugBreakpointConditional:s("debug-breakpoint-conditional",60071),debugBreakpointConditionalDisabled:s("debug-breakpoint-conditional-disabled",60071),debugBreakpointDataUnverified:s("debug-breakpoint-data-unverified",60072),debugBreakpointData:s("debug-breakpoint-data",60073),debugBreakpointDataDisabled:s("debug-breakpoint-data-disabled",60073),debugBreakpointLogUnverified:s("debug-breakpoint-log-unverified",60074),debugBreakpointLog:s("debug-breakpoint-log",60075),debugBreakpointLogDisabled:s("debug-breakpoint-log-disabled",60075),briefcase:s("briefcase",60076),broadcast:s("broadcast",60077),browser:s("browser",60078),bug:s("bug",60079),calendar:s("calendar",60080),caseSensitive:s("case-sensitive",60081),check:s("check",60082),checklist:s("checklist",60083),chevronDown:s("chevron-down",60084),dropDownButton:s("drop-down-button",60084),chevronLeft:s("chevron-left",60085),chevronRight:s("chevron-right",60086),chevronUp:s("chevron-up",60087),chromeClose:s("chrome-close",60088),chromeMaximize:s("chrome-maximize",60089),chromeMinimize:s("chrome-minimize",60090),chromeRestore:s("chrome-restore",60091),circle:s("circle",60092),circleOutline:s("circle-outline",60092),debugBreakpointUnverified:s("debug-breakpoint-unverified",60092),circleSlash:s("circle-slash",60093),circuitBoard:s("circuit-board",60094),clearAll:s("clear-all",60095),clippy:s("clippy",60096),closeAll:s("close-all",60097),cloudDownload:s("cloud-download",60098),cloudUpload:s("cloud-upload",60099),code:s("code",60100),collapseAll:s("collapse-all",60101),colorMode:s("color-mode",60102),commentDiscussion:s("comment-discussion",60103),compareChanges:s("compare-changes",60157),creditCard:s("credit-card",60105),dash:s("dash",60108),dashboard:s("dashboard",60109),database:s("database",60110),debugContinue:s("debug-continue",60111),debugDisconnect:s("debug-disconnect",60112),debugPause:s("debug-pause",60113),debugRestart:s("debug-restart",60114),debugStart:s("debug-start",60115),debugStepInto:s("debug-step-into",60116),debugStepOut:s("debug-step-out",60117),debugStepOver:s("debug-step-over",60118),debugStop:s("debug-stop",60119),debug:s("debug",60120),deviceCameraVideo:s("device-camera-video",60121),deviceCamera:s("device-camera",60122),deviceMobile:s("device-mobile",60123),diffAdded:s("diff-added",60124),diffIgnored:s("diff-ignored",60125),diffModified:s("diff-modified",60126),diffRemoved:s("diff-removed",60127),diffRenamed:s("diff-renamed",60128),diff:s("diff",60129),discard:s("discard",60130),editorLayout:s("editor-layout",60131),emptyWindow:s("empty-window",60132),exclude:s("exclude",60133),extensions:s("extensions",60134),eyeClosed:s("eye-closed",60135),fileBinary:s("file-binary",60136),fileCode:s("file-code",60137),fileMedia:s("file-media",60138),filePdf:s("file-pdf",60139),fileSubmodule:s("file-submodule",60140),fileSymlinkDirectory:s("file-symlink-directory",60141),fileSymlinkFile:s("file-symlink-file",60142),fileZip:s("file-zip",60143),files:s("files",60144),filter:s("filter",60145),flame:s("flame",60146),foldDown:s("fold-down",60147),foldUp:s("fold-up",60148),fold:s("fold",60149),folderActive:s("folder-active",60150),folderOpened:s("folder-opened",60151),gear:s("gear",60152),gift:s("gift",60153),gistSecret:s("gist-secret",60154),gist:s("gist",60155),gitCommit:s("git-commit",60156),gitCompare:s("git-compare",60157),gitMerge:s("git-merge",60158),githubAction:s("github-action",60159),githubAlt:s("github-alt",60160),globe:s("globe",60161),grabber:s("grabber",60162),graph:s("graph",60163),gripper:s("gripper",60164),heart:s("heart",60165),home:s("home",60166),horizontalRule:s("horizontal-rule",60167),hubot:s("hubot",60168),inbox:s("inbox",60169),issueClosed:s("issue-closed",60324),issueReopened:s("issue-reopened",60171),issues:s("issues",60172),italic:s("italic",60173),jersey:s("jersey",60174),json:s("json",60175),bracket:s("bracket",60175),kebabVertical:s("kebab-vertical",60176),key:s("key",60177),law:s("law",60178),lightbulbAutofix:s("lightbulb-autofix",60179),linkExternal:s("link-external",60180),link:s("link",60181),listOrdered:s("list-ordered",60182),listUnordered:s("list-unordered",60183),liveShare:s("live-share",60184),loading:s("loading",60185),location:s("location",60186),mailRead:s("mail-read",60187),mail:s("mail",60188),markdown:s("markdown",60189),megaphone:s("megaphone",60190),mention:s("mention",60191),milestone:s("milestone",60192),gitPullRequestMilestone:s("git-pull-request-milestone",60192),mortarBoard:s("mortar-board",60193),move:s("move",60194),multipleWindows:s("multiple-windows",60195),mute:s("mute",60196),noNewline:s("no-newline",60197),note:s("note",60198),octoface:s("octoface",60199),openPreview:s("open-preview",60200),package:s("package",60201),paintcan:s("paintcan",60202),pin:s("pin",60203),play:s("play",60204),run:s("run",60204),plug:s("plug",60205),preserveCase:s("preserve-case",60206),preview:s("preview",60207),project:s("project",60208),pulse:s("pulse",60209),question:s("question",60210),quote:s("quote",60211),radioTower:s("radio-tower",60212),reactions:s("reactions",60213),references:s("references",60214),refresh:s("refresh",60215),regex:s("regex",60216),remoteExplorer:s("remote-explorer",60217),remote:s("remote",60218),remove:s("remove",60219),replaceAll:s("replace-all",60220),replace:s("replace",60221),repoClone:s("repo-clone",60222),repoForcePush:s("repo-force-push",60223),repoPull:s("repo-pull",60224),repoPush:s("repo-push",60225),report:s("report",60226),requestChanges:s("request-changes",60227),rocket:s("rocket",60228),rootFolderOpened:s("root-folder-opened",60229),rootFolder:s("root-folder",60230),rss:s("rss",60231),ruby:s("ruby",60232),saveAll:s("save-all",60233),saveAs:s("save-as",60234),save:s("save",60235),screenFull:s("screen-full",60236),screenNormal:s("screen-normal",60237),searchStop:s("search-stop",60238),server:s("server",60240),settingsGear:s("settings-gear",60241),settings:s("settings",60242),shield:s("shield",60243),smiley:s("smiley",60244),sortPrecedence:s("sort-precedence",60245),splitHorizontal:s("split-horizontal",60246),splitVertical:s("split-vertical",60247),squirrel:s("squirrel",60248),starFull:s("star-full",60249),starHalf:s("star-half",60250),symbolClass:s("symbol-class",60251),symbolColor:s("symbol-color",60252),symbolCustomColor:s("symbol-customcolor",60252),symbolConstant:s("symbol-constant",60253),symbolEnumMember:s("symbol-enum-member",60254),symbolField:s("symbol-field",60255),symbolFile:s("symbol-file",60256),symbolInterface:s("symbol-interface",60257),symbolKeyword:s("symbol-keyword",60258),symbolMisc:s("symbol-misc",60259),symbolOperator:s("symbol-operator",60260),symbolProperty:s("symbol-property",60261),wrench:s("wrench",60261),wrenchSubaction:s("wrench-subaction",60261),symbolSnippet:s("symbol-snippet",60262),tasklist:s("tasklist",60263),telescope:s("telescope",60264),textSize:s("text-size",60265),threeBars:s("three-bars",60266),thumbsdown:s("thumbsdown",60267),thumbsup:s("thumbsup",60268),tools:s("tools",60269),triangleDown:s("triangle-down",60270),triangleLeft:s("triangle-left",60271),triangleRight:s("triangle-right",60272),triangleUp:s("triangle-up",60273),twitter:s("twitter",60274),unfold:s("unfold",60275),unlock:s("unlock",60276),unmute:s("unmute",60277),unverified:s("unverified",60278),verified:s("verified",60279),versions:s("versions",60280),vmActive:s("vm-active",60281),vmOutline:s("vm-outline",60282),vmRunning:s("vm-running",60283),watch:s("watch",60284),whitespace:s("whitespace",60285),wholeWord:s("whole-word",60286),window:s("window",60287),wordWrap:s("word-wrap",60288),zoomIn:s("zoom-in",60289),zoomOut:s("zoom-out",60290),listFilter:s("list-filter",60291),listFlat:s("list-flat",60292),listSelection:s("list-selection",60293),selection:s("selection",60293),listTree:s("list-tree",60294),debugBreakpointFunctionUnverified:s("debug-breakpoint-function-unverified",60295),debugBreakpointFunction:s("debug-breakpoint-function",60296),debugBreakpointFunctionDisabled:s("debug-breakpoint-function-disabled",60296),debugStackframeActive:s("debug-stackframe-active",60297),circleSmallFilled:s("circle-small-filled",60298),debugStackframeDot:s("debug-stackframe-dot",60298),debugStackframe:s("debug-stackframe",60299),debugStackframeFocused:s("debug-stackframe-focused",60299),debugBreakpointUnsupported:s("debug-breakpoint-unsupported",60300),symbolString:s("symbol-string",60301),debugReverseContinue:s("debug-reverse-continue",60302),debugStepBack:s("debug-step-back",60303),debugRestartFrame:s("debug-restart-frame",60304),callIncoming:s("call-incoming",60306),callOutgoing:s("call-outgoing",60307),menu:s("menu",60308),expandAll:s("expand-all",60309),feedback:s("feedback",60310),gitPullRequestReviewer:s("git-pull-request-reviewer",60310),groupByRefType:s("group-by-ref-type",60311),ungroupByRefType:s("ungroup-by-ref-type",60312),account:s("account",60313),gitPullRequestAssignee:s("git-pull-request-assignee",60313),bellDot:s("bell-dot",60314),debugConsole:s("debug-console",60315),library:s("library",60316),output:s("output",60317),runAll:s("run-all",60318),syncIgnored:s("sync-ignored",60319),pinned:s("pinned",60320),githubInverted:s("github-inverted",60321),debugAlt:s("debug-alt",60305),serverProcess:s("server-process",60322),serverEnvironment:s("server-environment",60323),pass:s("pass",60324),stopCircle:s("stop-circle",60325),playCircle:s("play-circle",60326),record:s("record",60327),debugAltSmall:s("debug-alt-small",60328),vmConnect:s("vm-connect",60329),cloud:s("cloud",60330),merge:s("merge",60331),exportIcon:s("export",60332),graphLeft:s("graph-left",60333),magnet:s("magnet",60334),notebook:s("notebook",60335),redo:s("redo",60336),checkAll:s("check-all",60337),pinnedDirty:s("pinned-dirty",60338),passFilled:s("pass-filled",60339),circleLargeFilled:s("circle-large-filled",60340),circleLarge:s("circle-large",60341),circleLargeOutline:s("circle-large-outline",60341),combine:s("combine",60342),gather:s("gather",60342),table:s("table",60343),variableGroup:s("variable-group",60344),typeHierarchy:s("type-hierarchy",60345),typeHierarchySub:s("type-hierarchy-sub",60346),typeHierarchySuper:s("type-hierarchy-super",60347),gitPullRequestCreate:s("git-pull-request-create",60348),runAbove:s("run-above",60349),runBelow:s("run-below",60350),notebookTemplate:s("notebook-template",60351),debugRerun:s("debug-rerun",60352),workspaceTrusted:s("workspace-trusted",60353),workspaceUntrusted:s("workspace-untrusted",60354),workspaceUnspecified:s("workspace-unspecified",60355),terminalCmd:s("terminal-cmd",60356),terminalDebian:s("terminal-debian",60357),terminalLinux:s("terminal-linux",60358),terminalPowershell:s("terminal-powershell",60359),terminalTmux:s("terminal-tmux",60360),terminalUbuntu:s("terminal-ubuntu",60361),terminalBash:s("terminal-bash",60362),arrowSwap:s("arrow-swap",60363),copy:s("copy",60364),personAdd:s("person-add",60365),filterFilled:s("filter-filled",60366),wand:s("wand",60367),debugLineByLine:s("debug-line-by-line",60368),inspect:s("inspect",60369),layers:s("layers",60370),layersDot:s("layers-dot",60371),layersActive:s("layers-active",60372),compass:s("compass",60373),compassDot:s("compass-dot",60374),compassActive:s("compass-active",60375),azure:s("azure",60376),issueDraft:s("issue-draft",60377),gitPullRequestClosed:s("git-pull-request-closed",60378),gitPullRequestDraft:s("git-pull-request-draft",60379),debugAll:s("debug-all",60380),debugCoverage:s("debug-coverage",60381),runErrors:s("run-errors",60382),folderLibrary:s("folder-library",60383),debugContinueSmall:s("debug-continue-small",60384),beakerStop:s("beaker-stop",60385),graphLine:s("graph-line",60386),graphScatter:s("graph-scatter",60387),pieChart:s("pie-chart",60388),bracketDot:s("bracket-dot",60389),bracketError:s("bracket-error",60390),lockSmall:s("lock-small",60391),azureDevops:s("azure-devops",60392),verifiedFilled:s("verified-filled",60393),newLine:s("newline",60394),layout:s("layout",60395),layoutActivitybarLeft:s("layout-activitybar-left",60396),layoutActivitybarRight:s("layout-activitybar-right",60397),layoutPanelLeft:s("layout-panel-left",60398),layoutPanelCenter:s("layout-panel-center",60399),layoutPanelJustify:s("layout-panel-justify",60400),layoutPanelRight:s("layout-panel-right",60401),layoutPanel:s("layout-panel",60402),layoutSidebarLeft:s("layout-sidebar-left",60403),layoutSidebarRight:s("layout-sidebar-right",60404),layoutStatusbar:s("layout-statusbar",60405),layoutMenubar:s("layout-menubar",60406),layoutCentered:s("layout-centered",60407),layoutSidebarRightOff:s("layout-sidebar-right-off",60416),layoutPanelOff:s("layout-panel-off",60417),layoutSidebarLeftOff:s("layout-sidebar-left-off",60418),target:s("target",60408),indent:s("indent",60409),recordSmall:s("record-small",60410),errorSmall:s("error-small",60411),arrowCircleDown:s("arrow-circle-down",60412),arrowCircleLeft:s("arrow-circle-left",60413),arrowCircleRight:s("arrow-circle-right",60414),arrowCircleUp:s("arrow-circle-up",60415),heartFilled:s("heart-filled",60420),map:s("map",60421),mapFilled:s("map-filled",60422),circleSmall:s("circle-small",60423),bellSlash:s("bell-slash",60424),bellSlashDot:s("bell-slash-dot",60425),commentUnresolved:s("comment-unresolved",60426),gitPullRequestGoToChanges:s("git-pull-request-go-to-changes",60427),gitPullRequestNewChanges:s("git-pull-request-new-changes",60428),searchFuzzy:s("search-fuzzy",60429),commentDraft:s("comment-draft",60430),send:s("send",60431),sparkle:s("sparkle",60432),insert:s("insert",60433),mic:s("mic",60434),thumbsDownFilled:s("thumbsdown-filled",60435),thumbsUpFilled:s("thumbsup-filled",60436),coffee:s("coffee",60437),snake:s("snake",60438),game:s("game",60439),vr:s("vr",60440),chip:s("chip",60441),piano:s("piano",60442),music:s("music",60443),micFilled:s("mic-filled",60444),gitFetch:s("git-fetch",60445),copilot:s("copilot",60446),lightbulbSparkle:s("lightbulb-sparkle",60447),lightbulbSparkleAutofix:s("lightbulb-sparkle-autofix",60447),robot:s("robot",60448),sparkleFilled:s("sparkle-filled",60449),diffSingle:s("diff-single",60450),diffMultiple:s("diff-multiple",60451),dialogError:s("dialog-error","error"),dialogWarning:s("dialog-warning","warning"),dialogInfo:s("dialog-info","info"),dialogClose:s("dialog-close","close"),treeItemExpanded:s("tree-item-expanded","chevron-down"),treeFilterOnTypeOn:s("tree-filter-on-type-on","list-filter"),treeFilterOnTypeOff:s("tree-filter-on-type-off","list-selection"),treeFilterClear:s("tree-filter-clear","close"),treeItemLoading:s("tree-item-loading","loading"),menuSelection:s("menu-selection","check"),menuSubmenu:s("menu-submenu","chevron-right"),menuBarMore:s("menubar-more","more"),scrollbarButtonLeft:s("scrollbar-button-left","triangle-left"),scrollbarButtonRight:s("scrollbar-button-right","triangle-right"),scrollbarButtonUp:s("scrollbar-button-up","triangle-up"),scrollbarButtonDown:s("scrollbar-button-down","triangle-down"),toolBarMore:s("toolbar-more","more"),quickInputBack:s("quick-input-back","arrow-left")}},22237:(e,t,i)=>{"use strict";function n(e,t){const i=[],n=[];for(const o of e)t.has(o)||i.push(o);for(const o of t)e.has(o)||n.push(o);return{removed:i,added:n}}function o(e,t){const i=new Set;for(const n of t)e.has(n)&&i.add(n);return i}i.d(t,{j:()=>o,q:()=>n})},60204:(e,t,i)=>{"use strict";function n(e,t){const i=Math.pow(10,t);return Math.round(e*i)/i}i.d(t,{Il:()=>a,Oz:()=>s,VS:()=>o,tx:()=>r});class o{constructor(e,t,i,o=1){this._rgbaBrand=void 0,this.r=0|Math.min(255,Math.max(0,e)),this.g=0|Math.min(255,Math.max(0,t)),this.b=0|Math.min(255,Math.max(0,i)),this.a=n(Math.max(Math.min(1,o),0),3)}static equals(e,t){return e.r===t.r&&e.g===t.g&&e.b===t.b&&e.a===t.a}}class s{constructor(e,t,i,o){this._hslaBrand=void 0,this.h=0|Math.max(Math.min(360,e),0),this.s=n(Math.max(Math.min(1,t),0),3),this.l=n(Math.max(Math.min(1,i),0),3),this.a=n(Math.max(Math.min(1,o),0),3)}static equals(e,t){return e.h===t.h&&e.s===t.s&&e.l===t.l&&e.a===t.a}static fromRGBA(e){const t=e.r/255,i=e.g/255,n=e.b/255,o=e.a,r=Math.max(t,i,n),a=Math.min(t,i,n);let l=0,c=0;const d=(a+r)/2,u=r-a;if(u>0){switch(c=Math.min(d<=.5?u/(2*d):u/(2-2*d),1),r){case t:l=(i-n)/u+(i1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}static toRGBA(e){const t=e.h/360,{s:i,l:n,a:r}=e;let a,l,c;if(0===i)a=l=c=n;else{const e=n<.5?n*(1+i):n+i-n*i,o=2*n-e;a=s._hue2rgb(o,e,t+1/3),l=s._hue2rgb(o,e,t),c=s._hue2rgb(o,e,t-1/3)}return new o(Math.round(255*a),Math.round(255*l),Math.round(255*c),r)}}class r{constructor(e,t,i,o){this._hsvaBrand=void 0,this.h=0|Math.max(Math.min(360,e),0),this.s=n(Math.max(Math.min(1,t),0),3),this.v=n(Math.max(Math.min(1,i),0),3),this.a=n(Math.max(Math.min(1,o),0),3)}static equals(e,t){return e.h===t.h&&e.s===t.s&&e.v===t.v&&e.a===t.a}static fromRGBA(e){const t=e.r/255,i=e.g/255,n=e.b/255,o=Math.max(t,i,n),s=Math.min(t,i,n),a=o-s,l=0===o?0:a/o;let c;return c=0===a?0:o===t?((i-n)/a%6+6)%6:o===i?(n-t)/a+2:(t-i)/a+4,new r(Math.round(60*c),l,o,e.a)}static toRGBA(e){const{h:t,s:i,v:n,a:s}=e,r=n*i,a=r*(1-Math.abs(t/60%2-1)),l=n-r;let[c,d,u]=[0,0,0];return t<60?(c=r,d=a):t<120?(c=a,d=r):t<180?(d=r,u=a):t<240?(d=a,u=r):t<300?(c=a,u=r):t<=360&&(c=r,u=a),c=Math.round(255*(c+l)),d=Math.round(255*(d+l)),u=Math.round(255*(u+l)),new o(c,d,u,s)}}class a{static fromHex(e){return a.Format.CSS.parseHex(e)||a.red}static equals(e,t){return!e&&!t||!(!e||!t)&&e.equals(t)}get hsla(){return this._hsla?this._hsla:s.fromRGBA(this.rgba)}get hsva(){return this._hsva?this._hsva:r.fromRGBA(this.rgba)}constructor(e){if(!e)throw new Error("Color needs a value");if(e instanceof o)this.rgba=e;else if(e instanceof s)this._hsla=e,this.rgba=s.toRGBA(e);else{if(!(e instanceof r))throw new Error("Invalid color ctor argument");this._hsva=e,this.rgba=r.toRGBA(e)}}equals(e){return!!e&&o.equals(this.rgba,e.rgba)&&s.equals(this.hsla,e.hsla)&&r.equals(this.hsva,e.hsva)}getRelativeLuminance(){const e=a._relativeLuminanceForComponent(this.rgba.r),t=a._relativeLuminanceForComponent(this.rgba.g),i=a._relativeLuminanceForComponent(this.rgba.b),o=.2126*e+.7152*t+.0722*i;return n(o,4)}static _relativeLuminanceForComponent(e){const t=e/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}isLighter(){const e=(299*this.rgba.r+587*this.rgba.g+114*this.rgba.b)/1e3;return e>=128}isLighterThan(e){const t=this.getRelativeLuminance(),i=e.getRelativeLuminance();return t>i}isDarkerThan(e){const t=this.getRelativeLuminance(),i=e.getRelativeLuminance();return t{"use strict";function n(e,t,i){let n=null,o=null;if("function"===typeof i.value?(n="value",o=i.value,0!==o.length&&console.warn("Memoize should only be used in functions with zero parameters")):"function"===typeof i.get&&(n="get",o=i.get),!o)throw new Error("not supported");const s=`$memoize$${t}`;i[n]=function(...e){return this.hasOwnProperty(s)||Object.defineProperty(this,s,{configurable:!1,enumerable:!1,writable:!1,value:o.apply(this,e)}),this[s]}}i.d(t,{H:()=>n})},88994:(e,t,i)=>{"use strict";i.d(t,{Hs:()=>d,a$:()=>r});class n{constructor(e,t,i,n){this.originalStart=e,this.originalLength=t,this.modifiedStart=i,this.modifiedLength=n}getOriginalEnd(){return this.originalStart+this.originalLength}getModifiedEnd(){return this.modifiedStart+this.modifiedLength}}var o=i(63381);class s{constructor(e){this.source=e}getElements(){const e=this.source,t=new Int32Array(e.length);for(let i=0,n=e.length;i0||this.m_modifiedCount>0)&&this.m_changes.push(new n(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_originalCount++}AddModifiedElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class d{constructor(e,t,i=null){this.ContinueProcessingPredicate=i,this._originalSequence=e,this._modifiedSequence=t;const[n,o,s]=d._getElements(e),[r,a,l]=d._getElements(t);this._hasStrings=s&&l,this._originalStringElements=n,this._originalElementsOrHash=o,this._modifiedStringElements=r,this._modifiedElementsOrHash=a,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(e){return e.length>0&&"string"===typeof e[0]}static _getElements(e){const t=e.getElements();if(d._isStringArray(t)){const e=new Int32Array(t.length);for(let i=0,n=t.length;i=e&&o>=i&&this.ElementsAreEqual(t,o))t--,o--;if(e>t||i>o){let s;return i<=o?(a.Assert(e===t+1,"originalStart should only be one more than originalEnd"),s=[new n(e,0,i,o-i+1)]):e<=t?(a.Assert(i===o+1,"modifiedStart should only be one more than modifiedEnd"),s=[new n(e,t-e+1,i,0)]):(a.Assert(e===t+1,"originalStart should only be one more than originalEnd"),a.Assert(i===o+1,"modifiedStart should only be one more than modifiedEnd"),s=[]),s}const r=[0],l=[0],c=this.ComputeRecursionPoint(e,t,i,o,r,l,s),d=r[0],u=l[0];if(null!==c)return c;if(!s[0]){const r=this.ComputeDiffRecursive(e,d,i,u,s);let a=[];return a=s[0]?[new n(d+1,t-(d+1)+1,u+1,o-(u+1)+1)]:this.ComputeDiffRecursive(d+1,t,u+1,o,s),this.ConcatenateChanges(r,a)}return[new n(e,t-e+1,i,o-i+1)]}WALKTRACE(e,t,i,o,s,r,a,l,d,u,h,g,p,f,m,v,_,b){let y=null,w=null,x=new c,C=t,S=i,k=p[0]-v[0]-o,L=-1073741824,E=this.m_forwardHistory.length-1;do{const t=k+e;t===C||t=0&&(d=this.m_forwardHistory[E],e=d[0],C=1,S=d.length-1)}while(--E>=-1);if(y=x.getReverseChanges(),b[0]){let e=p[0]+1,t=v[0]+1;if(null!==y&&y.length>0){const i=y[y.length-1];e=Math.max(e,i.getOriginalEnd()),t=Math.max(t,i.getModifiedEnd())}w=[new n(e,g-e+1,t,m-t+1)]}else{x=new c,C=r,S=a,k=p[0]-v[0]-l,L=1073741824,E=_?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const e=k+s;e===C||e=u[e+1]?(h=u[e+1]-1,f=h-k-l,h>L&&x.MarkNextChange(),L=h+1,x.AddOriginalElement(h+1,f+1),k=e+1-s):(h=u[e-1],f=h-k-l,h>L&&x.MarkNextChange(),L=h,x.AddModifiedElement(h+1,f+1),k=e-1-s),E>=0&&(u=this.m_reverseHistory[E],s=u[0],C=1,S=u.length-1)}while(--E>=-1);w=x.getChanges()}return this.ConcatenateChanges(y,w)}ComputeRecursionPoint(e,t,i,o,s,r,a){let c=0,d=0,u=0,h=0,g=0,p=0;e--,i--,s[0]=0,r[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const f=t-e+(o-i),m=f+1,v=new Int32Array(m),_=new Int32Array(m),b=o-i,y=t-e,w=e-i,x=t-o,C=y-b,S=C%2===0;v[b]=e,_[y]=t,a[0]=!1;for(let k=1;k<=f/2+1;k++){let f=0,C=0;u=this.ClipDiagonalBound(b-k,k,b,m),h=this.ClipDiagonalBound(b+k,k,b,m);for(let e=u;e<=h;e+=2){c=e===u||ef+C&&(f=c,C=d),!S&&Math.abs(e-y)<=k-1&&c>=_[e])return s[0]=c,r[0]=d,i<=_[e]&&k<=1448?this.WALKTRACE(b,u,h,w,y,g,p,x,v,_,c,t,s,d,o,r,S,a):null}const L=(f-e+(C-i)-k)/2;if(null!==this.ContinueProcessingPredicate&&!this.ContinueProcessingPredicate(f,L))return a[0]=!0,s[0]=f,r[0]=C,L>0&&k<=1448?this.WALKTRACE(b,u,h,w,y,g,p,x,v,_,c,t,s,d,o,r,S,a):(e++,i++,[new n(e,t-e+1,i,o-i+1)]);g=this.ClipDiagonalBound(y-k,k,y,m),p=this.ClipDiagonalBound(y+k,k,y,m);for(let n=g;n<=p;n+=2){c=n===g||n=_[n+1]?_[n+1]-1:_[n-1],d=c-(n-y)-x;const l=c;while(c>e&&d>i&&this.ElementsAreEqual(c,d))c--,d--;if(_[n]=c,S&&Math.abs(n-b)<=k&&c<=v[n])return s[0]=c,r[0]=d,l>=v[n]&&k<=1448?this.WALKTRACE(b,u,h,w,y,g,p,x,v,_,c,t,s,d,o,r,S,a):null}if(k<=1447){let e=new Int32Array(h-u+2);e[0]=b-u+1,l.Copy2(v,u,e,1,h-u+1),this.m_forwardHistory.push(e),e=new Int32Array(p-g+2),e[0]=y-g+1,l.Copy2(_,g,e,1,p-g+1),this.m_reverseHistory.push(e)}}return this.WALKTRACE(b,u,h,w,y,g,p,x,v,_,c,t,s,d,o,r,S,a)}PrettifyChanges(e){for(let t=0;t0,r=i.modifiedLength>0;while(i.originalStart+i.originalLength=0;t--){const i=e[t];let n=0,o=0;if(t>0){const i=e[t-1];n=i.originalStart+i.originalLength,o=i.modifiedStart+i.modifiedLength}const s=i.originalLength>0,r=i.modifiedLength>0;let a=0,l=this._boundaryScore(i.originalStart,i.originalLength,i.modifiedStart,i.modifiedLength);for(let e=1;;e++){const t=i.originalStart-e,c=i.modifiedStart-e;if(tl&&(l=u,a=e)}i.originalStart-=a,i.modifiedStart-=a;const c=[null];t>0&&this.ChangesOverlap(e[t-1],e[t],c)&&(e[t-1]=c[0],e.splice(t,1),t++)}if(this._hasStrings)for(let t=1,i=e.length;t0&&t>a&&(a=t,l=d,c=e)}return a>0?[l,c]:null}_contiguousSequenceScore(e,t,i){let n=0;for(let o=0;o=this._originalElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._originalStringElements[e])}_OriginalRegionIsBoundary(e,t){if(this._OriginalIsBoundary(e)||this._OriginalIsBoundary(e-1))return!0;if(t>0){const i=e+t;if(this._OriginalIsBoundary(i-1)||this._OriginalIsBoundary(i))return!0}return!1}_ModifiedIsBoundary(e){return e<=0||e>=this._modifiedElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._modifiedStringElements[e])}_ModifiedRegionIsBoundary(e,t){if(this._ModifiedIsBoundary(e)||this._ModifiedIsBoundary(e-1))return!0;if(t>0){const i=e+t;if(this._ModifiedIsBoundary(i-1)||this._ModifiedIsBoundary(i))return!0}return!1}_boundaryScore(e,t,i,n){const o=this._OriginalRegionIsBoundary(e,t)?1:0,s=this._ModifiedRegionIsBoundary(i,n)?1:0;return o+s}ConcatenateChanges(e,t){const i=[];if(0===e.length||0===t.length)return t.length>0?t:e;if(this.ChangesOverlap(e[e.length-1],t[0],i)){const n=new Array(e.length+t.length-1);return l.Copy(e,0,n,0,e.length-1),n[e.length-1]=i[0],l.Copy(t,1,n,e.length,t.length-1),n}{const i=new Array(e.length+t.length);return l.Copy(e,0,i,0,e.length),l.Copy(t,0,i,e.length,t.length),i}}ChangesOverlap(e,t,i){if(a.Assert(e.originalStart<=t.originalStart,"Left change is not less than or equal to right change"),a.Assert(e.modifiedStart<=t.modifiedStart,"Left change is not less than or equal to right change"),e.originalStart+e.originalLength>=t.originalStart||e.modifiedStart+e.modifiedLength>=t.modifiedStart){const o=e.originalStart;let s=e.originalLength;const r=e.modifiedStart;let a=e.modifiedLength;return e.originalStart+e.originalLength>=t.originalStart&&(s=t.originalStart+t.originalLength-e.originalStart),e.modifiedStart+e.modifiedLength>=t.modifiedStart&&(a=t.modifiedStart+t.modifiedLength-e.modifiedStart),i[0]=new n(o,s,r,a),!0}return i[0]=null,!1}ClipDiagonalBound(e,t,i,n){if(e>=0&&e{"use strict";i.d(t,{B8:()=>p,Cp:()=>r,F0:()=>u,FU:()=>d,L6:()=>g,b1:()=>h,dL:()=>s,he:()=>m,n2:()=>c,ri:()=>a});class n{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout((()=>{if(e.stack){if(f.isErrorNoTelemetry(e))throw new f(e.message+"\n\n"+e.stack);throw new Error(e.message+"\n\n"+e.stack)}throw e}),0)}}emit(e){this.listeners.forEach((t=>{t(e)}))}onUnexpectedError(e){this.unexpectedErrorHandler(e),this.emit(e)}onUnexpectedExternalError(e){this.unexpectedErrorHandler(e)}}const o=new n;function s(e){c(e)||o.onUnexpectedError(e)}function r(e){c(e)||o.onUnexpectedExternalError(e)}function a(e){if(e instanceof Error){const{name:t,message:i}=e,n=e.stacktrace||e.stack;return{$isError:!0,name:t,message:i,stack:n,noTelemetry:f.isErrorNoTelemetry(e)}}return e}const l="Canceled";function c(e){return e instanceof d||e instanceof Error&&e.name===l&&e.message===l}class d extends Error{constructor(){super(l),this.name=this.message}}function u(){const e=new Error(l);return e.name=e.message,e}function h(e){return e?new Error(`Illegal argument: ${e}`):new Error("Illegal argument")}function g(e){return e?new Error(`Illegal state: ${e}`):new Error("Illegal state")}class p extends Error{constructor(e){super("NotSupported"),e&&(this.message=e)}}class f extends Error{constructor(e){super(e),this.name="CodeExpectedError"}static fromError(e){if(e instanceof f)return e;const t=new f;return t.message=e.message,t.stack=e.stack,t}static isErrorNoTelemetry(e){return"CodeExpectedError"===e.name}}class m extends Error{constructor(e){super(e||"An unexpected bug occurred."),Object.setPrototypeOf(this,m.prototype)}}},11271:(e,t,i)=>{"use strict";i.d(t,{D0:()=>x,E7:()=>k,K3:()=>w,Q5:()=>_,SZ:()=>C,Sp:()=>b,ZD:()=>L,ju:()=>d,z5:()=>S});var n=i(98642),o=i(81332),s=i(70959),r=i(33010),a=i(96729);const l=!1,c=!1;var d;(function(e){function t(e){if(c){const{onDidAddListener:t}=e,i=p.create();let n=0;e.onDidAddListener=()=>{2===++n&&(console.warn("snapshotted emitter LIKELY used public and SHOULD HAVE BEEN created with DisposableStore. snapshotted here"),i.print()),null===t||void 0===t||t()}}}function i(e,t){return f(e,(()=>{}),0,void 0,!0,void 0,t)}function n(e){return(t,i=null,n)=>{let o,s=!1;return o=e((e=>{if(!s)return o?o.dispose():s=!0,t.call(i,e)}),null,n),s&&o.dispose(),o}}function o(e,t,i){return h(((i,n=null,o)=>e((e=>i.call(n,t(e))),null,o)),i)}function r(e,t,i){return h(((i,n=null,o)=>e((e=>{t(e),i.call(n,e)}),null,o)),i)}function a(e,t,i){return h(((i,n=null,o)=>e((e=>t(e)&&i.call(n,e)),null,o)),i)}function l(e){return e}function d(...e){return(t,i=null,n)=>{const o=(0,s.F8)(...e.map((e=>e((e=>t.call(i,e))))));return g(o,n)}}function u(e,t,i,n){let s=i;return o(e,(e=>(s=t(s,e),s)),n)}function h(e,i){let n;const o={onWillAddFirstListener(){n=e(s.fire,s)},onDidRemoveLastListener(){null===n||void 0===n||n.dispose()}};i||t(o);const s=new _(o);return null===i||void 0===i||i.add(s),s.event}function g(e,t){return t instanceof Array?t.push(e):t&&t.add(e),e}function f(e,i,n=100,o=!1,s=!1,r,a){let l,c,d,u,h=0;const g={leakWarningThreshold:r,onWillAddFirstListener(){l=e((e=>{h++,c=i(c,e),o&&!d&&(p.fire(c),c=void 0),u=()=>{const e=c;c=void 0,d=void 0,(!o||h>1)&&p.fire(e),h=0},"number"===typeof n?(clearTimeout(d),d=setTimeout(u,n)):void 0===d&&(d=0,queueMicrotask(u))}))},onWillRemoveListener(){s&&h>0&&(null===u||void 0===u||u())},onDidRemoveLastListener(){u=void 0,l.dispose()}};a||t(g);const p=new _(g);return null===a||void 0===a||a.add(p),p.event}function m(t,i=0,n){return e.debounce(t,((e,t)=>e?(e.push(t),e):[t]),i,void 0,!0,void 0,n)}function v(e,t=((e,t)=>e===t),i){let n,o=!0;return a(e,(e=>{const i=o||!t(e,n);return o=!1,n=e,i}),i)}function b(t,i,n){return[e.filter(t,i,n),e.filter(t,(e=>!i(e)),n)]}function y(e,t=!1,i=[],n){let o=i.slice(),s=e((e=>{o?o.push(e):a.fire(e)}));n&&n.add(s);const r=()=>{null===o||void 0===o||o.forEach((e=>a.fire(e))),o=null},a=new _({onWillAddFirstListener(){s||(s=e((e=>a.fire(e))),n&&n.add(s))},onDidAddFirstListener(){o&&(t?setTimeout(r):r())},onDidRemoveLastListener(){s&&s.dispose(),s=null}});return n&&n.add(a),a.event}function w(e,t){const i=(i,n,o)=>{const s=t(new C);return e((function(e){const t=s.evaluate(e);t!==x&&i.call(n,t)}),void 0,o)};return i}e.None=()=>s.JT.None,e.defer=i,e.once=n,e.map=o,e.forEach=r,e.filter=a,e.signal=l,e.any=d,e.reduce=u,e.debounce=f,e.accumulate=m,e.latch=v,e.split=b,e.buffer=y,e.chain=w;const x=Symbol("HaltChainable");class C{constructor(){this.steps=[]}map(e){return this.steps.push(e),this}forEach(e){return this.steps.push((t=>(e(t),t))),this}filter(e){return this.steps.push((t=>e(t)?t:x)),this}reduce(e,t){let i=t;return this.steps.push((t=>(i=e(i,t),i))),this}latch(e=((e,t)=>e===t)){let t,i=!0;return this.steps.push((n=>{const o=i||!e(n,t);return i=!1,t=n,o?n:x})),this}evaluate(e){for(const t of this.steps)if(e=t(e),e===x)break;return e}}function S(e,t,i=(e=>e)){const n=(...e)=>r.fire(i(...e)),o=()=>e.on(t,n),s=()=>e.removeListener(t,n),r=new _({onWillAddFirstListener:o,onDidRemoveLastListener:s});return r.event}function k(e,t,i=(e=>e)){const n=(...e)=>r.fire(i(...e)),o=()=>e.addEventListener(t,n),s=()=>e.removeEventListener(t,n),r=new _({onWillAddFirstListener:o,onDidRemoveLastListener:s});return r.event}function L(e){return new Promise((t=>n(e)(t)))}function E(e){const t=new _;return e.then((e=>{t.fire(e)}),(()=>{t.fire(void 0)})).finally((()=>{t.dispose()})),t.event}function N(e,t,i){return t(i),e((e=>t(e)))}function D(e,t){let i=null;function n(e){null===i||void 0===i||i.dispose(),i=new s.SL,t(e,i)}n(void 0);const o=e((e=>n(e)));return(0,s.OF)((()=>{o.dispose(),null===i||void 0===i||i.dispose()}))}e.fromNodeEventEmitter=S,e.fromDOMEventEmitter=k,e.toPromise=L,e.fromPromise=E,e.runAndSubscribe=N,e.runAndSubscribeWithStore=D;class T{constructor(e,i){this._observable=e,this._counter=0,this._hasChanged=!1;const n={onWillAddFirstListener:()=>{e.addObserver(this)},onDidRemoveLastListener:()=>{e.removeObserver(this)}};i||t(n),this.emitter=new _(n),i&&i.add(this.emitter)}beginUpdate(e){this._counter++}handlePossibleChange(e){}handleChange(e,t){this._hasChanged=!0}endUpdate(e){this._counter--,0===this._counter&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}function A(e,t){const i=new T(e,t);return i.emitter.event}function I(e){return(t,i,n)=>{let o=0,r=!1;const a={beginUpdate(){o++},endUpdate(){o--,0===o&&(e.reportChanges(),r&&(r=!1,t.call(i)))},handlePossibleChange(){},handleChange(){r=!0}};e.addObserver(a),e.reportChanges();const l={dispose(){e.removeObserver(a)}};return n instanceof s.SL?n.add(l):Array.isArray(n)&&n.push(l),l}}e.fromObservable=A,e.fromObservableLight=I})(d||(d={}));class u{constructor(e){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${e}_${u._idPool++}`,u.all.add(this)}start(e){this._stopWatch=new a.G,this.listenerCount=e}stop(){if(this._stopWatch){const e=this._stopWatch.elapsed();this.durations.push(e),this.elapsedOverall+=e,this.invocationCount+=1,this._stopWatch=void 0}}}u.all=new Set,u._idPool=0;let h=-1;class g{constructor(e,t=Math.random().toString(18).slice(2,5)){this.threshold=e,this.name=t,this._warnCountdown=0}dispose(){var e;null===(e=this._stacks)||void 0===e||e.clear()}check(e,t){const i=this.threshold;if(i<=0||t{const t=this._stacks.get(e.value)||0;this._stacks.set(e.value,t-1)}}}class p{static create(){var e;return new p(null!==(e=(new Error).stack)&&void 0!==e?e:"")}constructor(e){this.value=e}print(){console.warn(this.value.split("\n").slice(2).join("\n"))}}class f{constructor(e){this.value=e}}const m=2,v=(e,t)=>{if(e instanceof f)t(e);else for(let i=0;i0||(null===(t=this._options)||void 0===t?void 0:t.leakWarningThreshold)?new g(null!==(n=null===(i=this._options)||void 0===i?void 0:i.leakWarningThreshold)&&void 0!==n?n:h):void 0,this._perfMon=(null===(o=this._options)||void 0===o?void 0:o._profName)?new u(this._options._profName):void 0,this._deliveryQueue=null===(s=this._options)||void 0===s?void 0:s.deliveryQueue}dispose(){var e,t,i,n;if(!this._disposed){if(this._disposed=!0,(null===(e=this._deliveryQueue)||void 0===e?void 0:e.current)===this&&this._deliveryQueue.reset(),this._listeners){if(l){const e=this._listeners;queueMicrotask((()=>{v(e,(e=>{var t;return null===(t=e.stack)||void 0===t?void 0:t.print()}))}))}this._listeners=void 0,this._size=0}null===(i=null===(t=this._options)||void 0===t?void 0:t.onDidRemoveLastListener)||void 0===i||i.call(t),null===(n=this._leakageMon)||void 0===n||n.dispose()}}get event(){var e;return null!==(e=this._event)&&void 0!==e||(this._event=(e,t,i)=>{var n,o,r,a,c;if(this._leakageMon&&this._size>3*this._leakageMon.threshold)return console.warn(`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far`),s.JT.None;if(this._disposed)return s.JT.None;t&&(e=e.bind(t));const d=new f(e);let u,h;this._leakageMon&&this._size>=Math.ceil(.2*this._leakageMon.threshold)&&(d.stack=p.create(),u=this._leakageMon.check(d.stack,this._size+1)),l&&(d.stack=null!==h&&void 0!==h?h:p.create()),this._listeners?this._listeners instanceof f?(null!==(c=this._deliveryQueue)&&void 0!==c||(this._deliveryQueue=new y),this._listeners=[this._listeners,d]):this._listeners.push(d):(null===(o=null===(n=this._options)||void 0===n?void 0:n.onWillAddFirstListener)||void 0===o||o.call(n,this),this._listeners=d,null===(a=null===(r=this._options)||void 0===r?void 0:r.onDidAddFirstListener)||void 0===a||a.call(r,this)),this._size++;const g=(0,s.OF)((()=>{null===u||void 0===u||u(),this._removeListener(d)}));return i instanceof s.SL?i.add(g):Array.isArray(i)&&i.push(g),g}),this._event}_removeListener(e){var t,i,n,o;if(null===(i=null===(t=this._options)||void 0===t?void 0:t.onWillRemoveListener)||void 0===i||i.call(t,this),!this._listeners)return;if(1===this._size)return this._listeners=void 0,null===(o=null===(n=this._options)||void 0===n?void 0:n.onDidRemoveLastListener)||void 0===o||o.call(n,this),void(this._size=0);const s=this._listeners,r=s.indexOf(e);if(-1===r)throw console.log("disposed?",this._disposed),console.log("size?",this._size),console.log("arr?",JSON.stringify(this._listeners)),new Error("Attempted to dispose unknown listener");this._size--,s[r]=void 0;const a=this._deliveryQueue.current===this;if(this._size*m<=s.length){let e=0;for(let t=0;t0}}const b=()=>new y;class y{constructor(){this.i=-1,this.end=0}enqueue(e,t,i){this.i=0,this.end=i,this.current=e,this.value=t}reset(){this.i=this.end,this.current=void 0,this.value=void 0}}class w extends _{constructor(e){super(e),this._isPaused=0,this._eventQueue=new r.S,this._mergeFn=null===e||void 0===e?void 0:e.merge}pause(){this._isPaused++}resume(){if(0!==this._isPaused&&0===--this._isPaused)if(this._mergeFn){if(this._eventQueue.size>0){const e=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(e))}}else while(!this._isPaused&&0!==this._eventQueue.size)super.fire(this._eventQueue.shift())}fire(e){this._size&&(0!==this._isPaused?this._eventQueue.push(e):super.fire(e))}}class x extends w{constructor(e){var t;super(e),this._delay=null!==(t=e.delay)&&void 0!==t?t:100}fire(e){this._handle||(this.pause(),this._handle=setTimeout((()=>{this._handle=void 0,this.resume()}),this._delay)),super.fire(e)}}class C extends _{constructor(e){super(e),this._queuedEvents=[],this._mergeFn=null===e||void 0===e?void 0:e.merge}fire(e){this.hasListeners()&&(this._queuedEvents.push(e),1===this._queuedEvents.length&&queueMicrotask((()=>{this._mergeFn?super.fire(this._mergeFn(this._queuedEvents)):this._queuedEvents.forEach((e=>super.fire(e))),this._queuedEvents=[]})))}}class S{constructor(){this.hasListeners=!1,this.events=[],this.emitter=new _({onWillAddFirstListener:()=>this.onFirstListenerAdd(),onDidRemoveLastListener:()=>this.onLastListenerRemove()})}get event(){return this.emitter.event}add(e){const t={event:e,listener:null};this.events.push(t),this.hasListeners&&this.hook(t);const i=()=>{this.hasListeners&&this.unhook(t);const e=this.events.indexOf(t);this.events.splice(e,1)};return(0,s.OF)((0,o.M)(i))}onFirstListenerAdd(){this.hasListeners=!0,this.events.forEach((e=>this.hook(e)))}onLastListenerRemove(){this.hasListeners=!1,this.events.forEach((e=>this.unhook(e)))}hook(e){e.listener=e.event((e=>this.emitter.fire(e)))}unhook(e){e.listener&&e.listener.dispose(),e.listener=null}dispose(){this.emitter.dispose()}}class k{constructor(){this.buffers=[]}wrapEvent(e){return(t,i,n)=>e((e=>{const n=this.buffers[this.buffers.length-1];n?n.push((()=>t.call(i,e))):t.call(i,e)}),void 0,n)}bufferEvents(e){const t=[];this.buffers.push(t);const i=e();return this.buffers.pop(),t.forEach((e=>e())),i}}class L{constructor(){this.listening=!1,this.inputEvent=d.None,this.inputEventListener=s.JT.None,this.emitter=new _({onDidAddFirstListener:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onDidRemoveLastListener:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(e){this.inputEvent=e,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=e(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}}},1535:(e,t,i)=>{"use strict";i.d(t,{KM:()=>d,ej:()=>a,fn:()=>l,oP:()=>h,yj:()=>c});var n=i(19912),o=i(47606),s=i(61720);function r(e){return 47===e||92===e}function a(e){return e.replace(/[\\/]/g,n.KR.sep)}function l(e){return-1===e.indexOf("/")&&(e=a(e)),/^[a-zA-Z]:(\/|$)/.test(e)&&(e="/"+e),e}function c(e,t=n.KR.sep){if(!e)return"";const i=e.length,o=e.charCodeAt(0);if(r(o)){if(r(e.charCodeAt(1))&&!r(e.charCodeAt(2))){let n=3;const o=n;for(;ne.length)return!1;if(i){const i=(0,s.ok)(e,t);if(!i)return!1;if(t.length===e.length)return!0;let n=t.length;return t.charAt(t.length-1)===o&&n--,e.charAt(n)===o}return t.charAt(t.length-1)!==o&&(t+=o),0===e.indexOf(t)}function u(e){return e>=65&&e<=90||e>=97&&e<=122}function h(e,t=o.ED){return!!t&&(u(e.charCodeAt(0))&&58===e.charCodeAt(1))}},90774:(e,t,i)=>{"use strict";i.d(t,{CL:()=>de,mX:()=>ue,jB:()=>K,mB:()=>G,EW:()=>he,l7:()=>fe,ir:()=>_,Oh:()=>$,XU:()=>j,Ji:()=>m,Sy:()=>b,KZ:()=>H,or:()=>f});var n=i(71400);function o(e){const t=a(e);if(t&&t.length>0)return new Uint32Array(t)}let s=0;const r=new Uint32Array(10);function a(e){if(s=0,l(e,d,4352),s>0)return r.subarray(0,s);if(l(e,u,4449),s>0)return r.subarray(0,s);if(l(e,h,4520),s>0)return r.subarray(0,s);if(l(e,g,12593),s)return r.subarray(0,s);if(e>=44032&&e<=55203){const t=e-44032,i=t%588,n=Math.floor(t/588),o=Math.floor(i/28),a=i%28-1;if(n=0&&(a0)return r.subarray(0,s)}}function l(e,t,i){e>=i&&e>8&&(r[s++]=e>>8&255),e>>16&&(r[s++]=e>>16&255))}const d=new Uint8Array([114,82,115,101,69,102,97,113,81,116,84,100,119,87,99,122,120,118,103]),u=new Uint16Array([107,111,105,79,106,112,117,80,104,27496,28520,27752,121,110,27246,28782,27758,98,109,27757,108]),h=new Uint16Array([114,82,29810,115,30579,26483,101,102,29286,24934,29030,29798,30822,30310,26470,97,113,29809,116,84,100,119,99,122,120,118,103]),g=new Uint16Array([114,82,29810,115,30579,26483,101,69,102,29286,24934,29030,29798,30822,30310,26470,97,113,81,29809,116,84,100,119,87,99,122,120,118,103,107,111,105,79,106,112,117,80,104,27496,28520,27752,121,110,27246,28782,27758,98,109,27757,108]);var p=i(61720);function f(...e){return function(t,i){for(let n=0,o=e.length;n0?[{start:0,end:t.length}]:[]:null}function _(e,t){const i=t.toLowerCase().indexOf(e.toLowerCase());return-1===i?null:[{start:i,end:i+e.length}]}function b(e,t){return y(e.toLowerCase(),t.toLowerCase(),0,0)}function y(e,t,i,n){if(i===e.length)return[];if(n===t.length)return null;if(e[i]===t[n]){let o=null;return(o=y(e,t,i+1,n+1))?A({start:n,end:n+1},o):null}return y(e,t,i,n+1)}function w(e){return 97<=e&&e<=122}function x(e){return 65<=e&&e<=90}function C(e){return 48<=e&&e<=57}function S(e){return 32===e||9===e||10===e||13===e}const k=new Set;function L(e){return S(e)||k.has(e)}function E(e,t){return e===t||L(e)&&L(t)}"()[]{}<>`'\"-/;:,.?!".split("").forEach((e=>k.add(e.charCodeAt(0))));const N=new Map;function D(e){if(N.has(e))return N.get(e);let t;const i=o(e);return i&&(t=i),N.set(e,t),t}function T(e){return w(e)||x(e)||C(e)}function A(e,t){return 0===t.length?t=[e]:e.end===t[0].start?t[0].start=e.start:t.unshift(e),t}function I(e,t){for(let i=t;i0&&!T(e.charCodeAt(i-1)))return i}return e.length}function R(e,t,i,n){if(i===e.length)return[];if(n===t.length)return null;if(e[i]!==t[n].toLowerCase())return null;{let o=null,s=n+1;o=R(e,t,i+1,n+1);while(!o&&(s=I(t,s)).6}function O(e){const{upperPercent:t,lowerPercent:i,alphaPercent:n,numericPercent:o}=e;return i>.2&&t<.8&&n>.6&&o<.2}function F(e){let t=0,i=0,n=0,o=0;for(let s=0;s60)return null;const i=M(t);if(!O(i)){if(!P(i))return null;t=t.toLowerCase()}let n=null,o=0;e=e.toLowerCase();while(o0&&L(e.charCodeAt(i-1)))return i;return e.length}const z=f(m,B,_),U=f(m,B,b),q=new n.z6(1e4);function $(e,t,i=!1){if("string"!==typeof e||"string"!==typeof t)return null;let n=q.get(e);n||(n=new RegExp(p.un(e),"i"),q.set(e,n));const o=n.exec(t);return o?[{start:o.index,end:o.index+o[0].length}]:i?U(e,t):z(e,t)}function j(e,t){const i=he(e,e.toLowerCase(),0,t,t.toLowerCase(),0,{firstMatchCanBeWeak:!0,boostFullMatch:!0});return i?G(i):null}function K(e,t,i,n,o,s){const r=Math.min(13,e.length);for(;i1;n--){const o=e[n]+i,s=t[t.length-1];s&&s.end===o?s.end=o+1:t.push({start:o,end:o+1})}return t}const Y=128;function X(){const e=[],t=[];for(let i=0;i<=Y;i++)t[i]=0;for(let i=0;i<=Y;i++)e.push(t.slice(0));return e}function Z(e){const t=[];for(let i=0;i<=e;i++)t[i]=0;return t}const Q=Z(2*Y),J=Z(2*Y),ee=X(),te=X(),ie=X(),ne=!1;function oe(e,t,i,n,o){function s(e,t,i=" "){while(e.lengths(e,3))).join("|")}\n`;for(let a=0;a<=i;a++)r+=0===a?" |":`${t[a-1]}|`,r+=e[a].slice(0,o+1).map((e=>s(e.toString(),3))).join("|")+"\n";return r}function se(e,t,i,n){e=e.substr(t),i=i.substr(n),console.log(oe(te,e,e.length,i,i.length)),console.log(oe(ie,e,e.length,i,i.length)),console.log(oe(ee,e,e.length,i,i.length))}function re(e,t){if(t<0||t>=e.length)return!1;const i=e.codePointAt(t);switch(i){case 95:case 45:case 46:case 32:case 47:case 92:case 39:case 34:case 58:case 36:case 60:case 62:case 40:case 41:case 91:case 93:case 123:case 125:return!0;case void 0:return!1;default:return!!p.C8(i)}}function ae(e,t){if(t<0||t>=e.length)return!1;const i=e.charCodeAt(t);switch(i){case 32:case 9:return!0;default:return!1}}function le(e,t,i){return t[e]!==i[e]}function ce(e,t,i,n,o,s,r=!1){while(tY?Y:e.length,l=n.length>Y?Y:n.length;if(i>=a||s>=l||a-i>l-s)return;if(!ce(t,i,a,o,s,l,!0))return;ge(a,l,i,s,t,o);let c=1,d=1,u=i,h=s;const g=[!1];for(c=1,u=i;ur,_=v?te[c][d-1]+(ee[c][d-1]>0?-5:0):0,b=h>r+1&&ee[c][d-1]>0,y=b?te[c][d-2]+(ee[c][d-2]>0?-5:0):0;if(b&&(!v||y>=_)&&(!f||y>=m))te[c][d]=y,ie[c][d]=3,ee[c][d]=0;else if(v&&(!f||_>=m))te[c][d]=_,ie[c][d]=2,ee[c][d]=0;else{if(!f)throw new Error("not possible");te[c][d]=m,ie[c][d]=1,ee[c][d]=ee[c-1][d-1]+1}}}if(ne&&se(e,i,n,s),!g[0]&&!r.firstMatchCanBeWeak)return;c--,d--;const p=[te[c][d],s];let f=0,m=0;while(c>=1){let e=d;do{const t=ie[c][e];if(3===t)e-=2;else{if(2!==t)break;e-=1}}while(e>=1);f>1&&t[i+c-1]===o[s+d-1]&&!le(e+s-1,n,o)&&f+1>ee[c][e]&&(e=d),e===d?f++:f=1,m||(m=e),c--,d=e-1,p.push(d)}l===a&&r.boostFullMatch&&(p[0]+=2);const v=m-a;return p[0]-=v,p}function ge(e,t,i,n,o,s){let r=e-1,a=t-1;while(r>=i&&a>=n)o[r]===s[a]&&(J[r]=a,r--),a--}function pe(e,t,i,n,o,s,r,a,l,c,d){if(t[i]!==s[r])return Number.MIN_SAFE_INTEGER;let u=1,h=!1;return r===i-n?u=e[i]===o[r]?7:5:!le(r,o,s)||0!==r&&le(r-1,o,s)?!re(s,r)||0!==r&&re(s,r-1)?(re(s,r-1)||ae(s,r-1))&&(u=5,h=!0):u=5:(u=e[i]===o[r]?7:5,h=!0),u>1&&i===n&&(d[0]=!0),h||(h=le(r,o,s)||re(s,r-1)||ae(s,r-1)),i===n?r>l&&(u-=h?3:5):u+=c?h?2:0:h?0:1,r+1===a&&(u-=h?3:5),u}function fe(e,t,i,n,o,s,r){return me(e,t,i,n,o,s,!0,r)}function me(e,t,i,n,o,s,r,a){let l=he(e,t,i,n,o,s,a);if(l&&!r)return l;if(e.length>=3){const t=Math.min(7,e.length-1);for(let r=i+1;rl[0])&&(l=e))}}}return l}function ve(e,t){if(t+1>=e.length)return;const i=e[t],n=e[t+1];return i!==n?e.slice(0,t)+n+i+e.slice(t+2):void 0}ue.default={boostFullMatch:!0,firstMatchCanBeWeak:!1}},81332:(e,t,i)=>{"use strict";function n(e,t){const i=this;let n,o=!1;return function(){if(o)return n;if(o=!0,t)try{n=e.apply(i,arguments)}finally{t()}else n=e.apply(i,arguments);return n}}i.d(t,{M:()=>n})},48079:(e,t,i)=>{"use strict";i.d(t,{EQ:()=>M,Qc:()=>P});var n=i(85398),o=i(1535),s=i(71400),r=i(19912),a=i(47606),l=i(61720);const c="**",d="/",u="[/\\\\]",h="[^/\\\\]",g=/\//g;function p(e,t){switch(e){case 0:return"";case 1:return`${h}*?`;default:return`(?:${u}|${h}+${u}${t?`|${u}${h}+`:""})*?`}}function f(e,t){if(!e)return[];const i=[];let n=!1,o=!1,s="";for(const r of e){switch(r){case t:if(!n&&!o){i.push(s),s="";continue}break;case"{":n=!0;break;case"}":n=!1;break;case"[":o=!0;break;case"]":o=!1;break}s+=r}return s&&i.push(s),i}function m(e){if(!e)return"";let t="";const i=f(e,d);if(i.every((e=>e===c)))t=".*";else{let e=!1;i.forEach(((n,o)=>{if(n===c){if(e)return;t+=p(2,o===i.length-1)}else{let e=!1,s="",r=!1,a="";for(const i of n)if("}"!==i&&e)s+=i;else if(!r||"]"===i&&a)switch(i){case"{":e=!0;continue;case"[":r=!0;continue;case"}":{const i=f(s,","),n=`(?:${i.map((e=>m(e))).join("|")})`;t+=n,e=!1,s="";break}case"]":t+="["+a+"]",r=!1,a="";break;case"?":t+=h;continue;case"*":t+=p(1);continue;default:t+=(0,l.ec)(i)}else{let e;e="-"===i?i:"^"!==i&&"!"!==i||a?i===d?"":(0,l.ec)(i):"^",a+=e}oL(e,t))).filter((e=>e!==k)),e),n=i.length;if(!n)return k;if(1===n)return i[0];const o=function(t,n){for(let o=0,s=i.length;o!!e.allBasenames));s&&(o.allBasenames=s.allBasenames);const r=i.reduce(((e,t)=>t.allPaths?e.concat(t.allPaths):e),[]);return r.length&&(o.allPaths=r),o}function I(e,t,i){const n=r.ir===r.KR.sep,o=n?e:e.replace(g,r.ir),s=r.ir+o,a=r.KR.sep+e;let l;return l=i?function(i,r){return"string"!==typeof i||i!==o&&!i.endsWith(s)&&(n||i!==e&&!i.endsWith(a))?null:t}:function(i,s){return"string"!==typeof i||i!==o&&(n||i!==e)?null:t},l.allPaths=[(i?"*/":"./")+e],l}function R(e){try{const t=new RegExp(`^${m(e)}$`);return function(i){return t.lastIndex=0,"string"===typeof i&&t.test(i)?e:null}}catch(t){return k}}function M(e,t,i){return!(!e||"string"!==typeof t)&&P(e)(t,void 0,i)}function P(e,t={}){if(!e)return S;if("string"===typeof e||O(e)){const i=L(e,t);if(i===k)return S;const n=function(e,t){return!!i(e,t)};return i.allBasenames&&(n.allBasenames=i.allBasenames),i.allPaths&&(n.allPaths=i.allPaths),n}return F(e,t)}function O(e){const t=e;return!!t&&("string"===typeof t.base&&"string"===typeof t.pattern)}function F(e,t){const i=H(Object.getOwnPropertyNames(e).map((i=>B(i,e[i],t))).filter((e=>e!==k))),o=i.length;if(!o)return k;if(!i.some((e=>!!e.requiresSiblings))){if(1===o)return i[0];const e=function(e,t){let o;for(let s=0,r=i.length;s{for(const e of o){const t=await e;if("string"===typeof t)return t}return null})():null},t=i.find((e=>!!e.allBasenames));t&&(e.allBasenames=t.allBasenames);const s=i.reduce(((e,t)=>t.allPaths?e.concat(t.allPaths):e),[]);return s.length&&(e.allPaths=s),e}const s=function(e,t,o){let s,a;for(let l=0,c=i.length;l{for(const e of a){const t=await e;if("string"===typeof t)return t}return null})():null},a=i.find((e=>!!e.allBasenames));a&&(s.allBasenames=a.allBasenames);const l=i.reduce(((e,t)=>t.allPaths?e.concat(t.allPaths):e),[]);return l.length&&(s.allPaths=l),s}function B(e,t,i){if(!1===t)return k;const o=L(e,i);if(o===k)return k;if("boolean"===typeof t)return o;if(t){const i=t.when;if("string"===typeof i){const t=(t,s,r,a)=>{if(!a||!o(t,s))return null;const l=i.replace("$(basename)",(()=>r)),c=a(l);return(0,n.J8)(c)?c.then((t=>t?e:null)):c?e:null};return t.requiresSiblings=!0,t}}return o}function H(e,t){const i=e.filter((e=>!!e.basenames));if(i.length<2)return e;const n=i.reduce(((e,t)=>{const i=t.basenames;return i?e.concat(i):e}),[]);let o;if(t){o=[];for(let e=0,i=n.length;e{const i=t.patterns;return i?e.concat(i):e}),[]);const s=function(e,t){if("string"!==typeof e)return null;if(!t){let i;for(i=e.length;i>0;i--){const t=e.charCodeAt(i-1);if(47===t||92===t)break}t=e.substr(i)}const i=n.indexOf(t);return-1!==i?o[i]:null};s.basenames=n,s.patterns=o,s.allBasenames=n;const r=e.filter((e=>!e.basenames));return r.push(s),r}},63381:(e,t,i)=>{"use strict";i.d(t,{Cv:()=>l,SP:()=>s,vp:()=>o,yP:()=>f});var n=i(61720);function o(e){return s(e,0)}function s(e,t){switch(typeof e){case"object":return null===e?r(349,t):Array.isArray(e)?c(e,t):d(e,t);case"string":return l(e,t);case"boolean":return a(e,t);case"number":return r(e,t);case"undefined":return r(937,t);default:return r(617,t)}}function r(e,t){return(t<<5)-t+e|0}function a(e,t){return r(e?433:863,t)}function l(e,t){t=r(149417,t);for(let i=0,n=e.length;is(t,e)),t)}function d(e,t){return t=r(181387,t),Object.keys(e).sort().reduce(((t,i)=>(t=l(i,t),s(e[i],t))),t)}function u(e,t,i=32){const n=i-t,o=~((1<>>n)>>>0}function h(e,t=0,i=e.byteLength,n=0){for(let o=0;oe.toString(16).padStart(2,"0"))).join(""):g((e>>>0).toString(16),t/4)}class f{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(67),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(e){const t=e.length;if(0===t)return;const i=this._buff;let o,s,r=this._buffLen,a=this._leftoverHighSurrogate;0!==a?(o=a,s=-1,a=0):(o=e.charCodeAt(0),s=0);while(1){let l=o;if(n.ZG(o)){if(!(s+1>>6,e[t++]=128|(63&i)>>>0):i<65536?(e[t++]=224|(61440&i)>>>12,e[t++]=128|(4032&i)>>>6,e[t++]=128|(63&i)>>>0):(e[t++]=240|(1835008&i)>>>18,e[t++]=128|(258048&i)>>>12,e[t++]=128|(4032&i)>>>6,e[t++]=128|(63&i)>>>0),t>=64&&(this._step(),t-=64,this._totalLen+=64,e[0]=e[64],e[1]=e[65],e[2]=e[66]),t}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),p(this._h0)+p(this._h1)+p(this._h2)+p(this._h3)+p(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,h(this._buff,this._buffLen),this._buffLen>56&&(this._step(),h(this._buff));const e=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(e/4294967296),!1),this._buffDV.setUint32(60,e%4294967296,!1),this._step()}_step(){const e=f._bigBlock32,t=this._buffDV;for(let d=0;d<64;d+=4)e.setUint32(d,t.getUint32(d,!1),!1);for(let d=64;d<320;d+=4)e.setUint32(d,u(e.getUint32(d-12,!1)^e.getUint32(d-32,!1)^e.getUint32(d-56,!1)^e.getUint32(d-64,!1),1),!1);let i,n,o,s=this._h0,r=this._h1,a=this._h2,l=this._h3,c=this._h4;for(let d=0;d<80;d++)d<20?(i=r&a|~r&l,n=1518500249):d<40?(i=r^a^l,n=1859775393):d<60?(i=r&a|r&l|a&l,n=2400959708):(i=r^a^l,n=3395469782),o=u(s,5)+i+c+n+e.getUint32(4*d,!1)&4294967295,c=l,l=a,a=u(r,30),r=s,s=o;this._h0=this._h0+s&4294967295,this._h1=this._h1+r&4294967295,this._h2=this._h2+a&4294967295,this._h3=this._h3+l&4294967295,this._h4=this._h4+c&4294967295}}f._bigBlock32=new DataView(new ArrayBuffer(320))},81478:(e,t,i)=>{"use strict";i.d(t,{CP:()=>c,Fr:()=>d,W5:()=>l,d9:()=>g,g_:()=>u,oR:()=>p,v1:()=>f});var n=i(98642),o=i(96559),s=i(21230),r=i(61720),a=i(95896);class l{constructor(e="",t=!1){var i,o,s;if(this.value=e,"string"!==typeof this.value)throw(0,n.b1)("value");"boolean"===typeof t?(this.isTrusted=t,this.supportThemeIcons=!1,this.supportHtml=!1):(this.isTrusted=null!==(i=t.isTrusted)&&void 0!==i?i:void 0,this.supportThemeIcons=null!==(o=t.supportThemeIcons)&&void 0!==o&&o,this.supportHtml=null!==(s=t.supportHtml)&&void 0!==s&&s)}appendText(e,t=0){return this.value+=h(this.supportThemeIcons?(0,o.Qo)(e):e).replace(/([ \t]+)/g,((e,t)=>" ".repeat(t.length))).replace(/\>/gm,"\\>").replace(/\n/g,1===t?"\\\n":"\n\n"),this}appendMarkdown(e){return this.value+=e,this}appendCodeblock(e,t){return this.value+="\n```",this.value+=e,this.value+="\n",this.value+=t,this.value+="\n```\n",this}appendLink(e,t,i){return this.value+="[",this.value+=this._escape(t,"]"),this.value+="](",this.value+=this._escape(String(e),")"),i&&(this.value+=` "${this._escape(this._escape(i,'"'),")")}"`),this.value+=")",this}_escape(e,t){const i=new RegExp((0,r.ec)(t),"g");return e.replace(i,((t,i)=>"\\"!==e.charAt(i-1)?`\\${t}`:t))}}function c(e){return d(e)?!e.value:!Array.isArray(e)||e.every(c)}function d(e){return e instanceof l||!(!e||"object"!==typeof e)&&("string"===typeof e.value&&("boolean"===typeof e.isTrusted||"object"===typeof e.isTrusted||void 0===e.isTrusted)&&("boolean"===typeof e.supportThemeIcons||void 0===e.supportThemeIcons))}function u(e,t){return e===t||!(!e||!t)&&(e.value===t.value&&e.isTrusted===t.isTrusted&&e.supportThemeIcons===t.supportThemeIcons&&e.supportHtml===t.supportHtml&&(e.baseUri===t.baseUri||!!e.baseUri&&!!t.baseUri&&(0,s.Xy)(a.o.from(e.baseUri),a.o.from(t.baseUri))))}function h(e){return e.replace(/[\\`*_{}[\]()#+\-!~]/g,"\\$&")}function g(e){return e.replace(/"/g,""")}function p(e){return e?e.replace(/\\([\\`*_{}[\]()#+\-.!~])/g,"$1"):e}function f(e){const t=[],i=e.split("|").map((e=>e.trim()));e=i[0];const n=i[1];if(n){const e=/height=(\d+)/.exec(n),i=/width=(\d+)/.exec(n),o=e?e[1]:"",s=i?i[1]:"",r=isFinite(parseInt(s)),a=isFinite(parseInt(o));r&&t.push(`width="${s}"`),a&&t.push(`height="${o}"`)}return{href:e,dimensions:t}}},96559:(e,t,i)=>{"use strict";i.d(t,{Gt:()=>v,Ho:()=>m,JL:()=>p,Qo:()=>c,f$:()=>u,x$:()=>g});var n=i(90774),o=i(61720),s=i(99588);const r="$(",a=new RegExp(`\\$\\(${s.k.iconNameExpression}(?:${s.k.iconModifierExpression})?\\)`,"g"),l=new RegExp(`(\\\\)?${a.source}`,"g");function c(e){return e.replace(l,((e,t)=>t?e:`\\${e}`))}const d=new RegExp(`\\\\${a.source}`,"g");function u(e){return e.replace(d,(e=>`\\${e}`))}const h=new RegExp(`(\\s)?(\\\\)?${a.source}(\\s)?`,"g");function g(e){return-1===e.indexOf(r)?e:e.replace(h,((e,t,i,n)=>i?e:t||n||""))}function p(e){return e?e.replace(/\$\((.*?)\)/g,((e,t)=>` ${t} `)).trim():""}const f=new RegExp(`\\$\\(${s.k.iconNameCharacter}+\\)`,"g");function m(e){f.lastIndex=0;let t="";const i=[];let n=0;while(1){const o=f.lastIndex,s=f.exec(e),r=e.substring(o,null===s||void 0===s?void 0:s.index);if(r.length>0){t+=r;for(let e=0;e{"use strict";i.d(t,{R:()=>n,a:()=>o});class n{constructor(e){this._prefix=e,this._lastId=0}nextId(){return this._prefix+ ++this._lastId}}const o=new n("id#")},73218:(e,t,i)=>{"use strict";i.d(t,{F:()=>s});var n=i(11271);class o{constructor(){this._onDidChange=new n.Q5,this.onDidChange=this._onDidChange.event,this._enabled=!0}get enabled(){return this._enabled}enable(){this._enabled=!0,this._onDidChange.fire()}disable(){this._enabled=!1,this._onDidChange.fire()}}const s=new o},39595:(e,t,i)=>{"use strict";var n;i.d(t,{$:()=>n}),function(e){function t(e){return e&&"object"===typeof e&&"function"===typeof e[Symbol.iterator]}e.is=t;const i=Object.freeze([]);function n(){return i}function*o(e){yield e}function s(e){return t(e)?e:o(e)}function r(e){return e||i}function*a(e){for(let t=e.length-1;t>=0;t--)yield e[t]}function l(e){return!e||!0===e[Symbol.iterator]().next().done}function c(e){return e[Symbol.iterator]().next().value}function d(e,t){for(const i of e)if(t(i))return!0;return!1}function u(e,t){for(const i of e)if(t(i))return i}function*h(e,t){for(const i of e)t(i)&&(yield i)}function*g(e,t){let i=0;for(const n of e)yield t(n,i++)}function*p(...e){for(const t of e)yield*t}function f(e,t,i){let n=i;for(const o of e)n=t(n,o);return n}function*m(e,t,i=e.length){for(t<0&&(t+=e.length),i<0?i+=e.length:i>e.length&&(i=e.length);t{"use strict";i.d(t,{H_:()=>a,Vd:()=>h,gx:()=>f,kL:()=>p});class n{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(e,t){this._keyCodeToStr[e]=t,this._strToKeyCode[t.toLowerCase()]=e}keyCodeToStr(e){return this._keyCodeToStr[e]}strToKeyCode(e){return this._strToKeyCode[e.toLowerCase()]||0}}const o=new n,s=new n,r=new n,a=new Array(230),l={},c=[],d=Object.create(null),u=Object.create(null),h=[],g=[];for(let m=0;m<=193;m++)h[m]=-1;for(let m=0;m<=132;m++)g[m]=-1;var p;function f(e,t){const i=(65535&t)<<16>>>0;return(e|i)>>>0}(function(){const e="",t=[[1,0,"None",0,"unknown",0,"VK_UNKNOWN",e,e],[1,1,"Hyper",0,e,0,e,e,e],[1,2,"Super",0,e,0,e,e,e],[1,3,"Fn",0,e,0,e,e,e],[1,4,"FnLock",0,e,0,e,e,e],[1,5,"Suspend",0,e,0,e,e,e],[1,6,"Resume",0,e,0,e,e,e],[1,7,"Turbo",0,e,0,e,e,e],[1,8,"Sleep",0,e,0,"VK_SLEEP",e,e],[1,9,"WakeUp",0,e,0,e,e,e],[0,10,"KeyA",31,"A",65,"VK_A",e,e],[0,11,"KeyB",32,"B",66,"VK_B",e,e],[0,12,"KeyC",33,"C",67,"VK_C",e,e],[0,13,"KeyD",34,"D",68,"VK_D",e,e],[0,14,"KeyE",35,"E",69,"VK_E",e,e],[0,15,"KeyF",36,"F",70,"VK_F",e,e],[0,16,"KeyG",37,"G",71,"VK_G",e,e],[0,17,"KeyH",38,"H",72,"VK_H",e,e],[0,18,"KeyI",39,"I",73,"VK_I",e,e],[0,19,"KeyJ",40,"J",74,"VK_J",e,e],[0,20,"KeyK",41,"K",75,"VK_K",e,e],[0,21,"KeyL",42,"L",76,"VK_L",e,e],[0,22,"KeyM",43,"M",77,"VK_M",e,e],[0,23,"KeyN",44,"N",78,"VK_N",e,e],[0,24,"KeyO",45,"O",79,"VK_O",e,e],[0,25,"KeyP",46,"P",80,"VK_P",e,e],[0,26,"KeyQ",47,"Q",81,"VK_Q",e,e],[0,27,"KeyR",48,"R",82,"VK_R",e,e],[0,28,"KeyS",49,"S",83,"VK_S",e,e],[0,29,"KeyT",50,"T",84,"VK_T",e,e],[0,30,"KeyU",51,"U",85,"VK_U",e,e],[0,31,"KeyV",52,"V",86,"VK_V",e,e],[0,32,"KeyW",53,"W",87,"VK_W",e,e],[0,33,"KeyX",54,"X",88,"VK_X",e,e],[0,34,"KeyY",55,"Y",89,"VK_Y",e,e],[0,35,"KeyZ",56,"Z",90,"VK_Z",e,e],[0,36,"Digit1",22,"1",49,"VK_1",e,e],[0,37,"Digit2",23,"2",50,"VK_2",e,e],[0,38,"Digit3",24,"3",51,"VK_3",e,e],[0,39,"Digit4",25,"4",52,"VK_4",e,e],[0,40,"Digit5",26,"5",53,"VK_5",e,e],[0,41,"Digit6",27,"6",54,"VK_6",e,e],[0,42,"Digit7",28,"7",55,"VK_7",e,e],[0,43,"Digit8",29,"8",56,"VK_8",e,e],[0,44,"Digit9",30,"9",57,"VK_9",e,e],[0,45,"Digit0",21,"0",48,"VK_0",e,e],[1,46,"Enter",3,"Enter",13,"VK_RETURN",e,e],[1,47,"Escape",9,"Escape",27,"VK_ESCAPE",e,e],[1,48,"Backspace",1,"Backspace",8,"VK_BACK",e,e],[1,49,"Tab",2,"Tab",9,"VK_TAB",e,e],[1,50,"Space",10,"Space",32,"VK_SPACE",e,e],[0,51,"Minus",88,"-",189,"VK_OEM_MINUS","-","OEM_MINUS"],[0,52,"Equal",86,"=",187,"VK_OEM_PLUS","=","OEM_PLUS"],[0,53,"BracketLeft",92,"[",219,"VK_OEM_4","[","OEM_4"],[0,54,"BracketRight",94,"]",221,"VK_OEM_6","]","OEM_6"],[0,55,"Backslash",93,"\\",220,"VK_OEM_5","\\","OEM_5"],[0,56,"IntlHash",0,e,0,e,e,e],[0,57,"Semicolon",85,";",186,"VK_OEM_1",";","OEM_1"],[0,58,"Quote",95,"'",222,"VK_OEM_7","'","OEM_7"],[0,59,"Backquote",91,"`",192,"VK_OEM_3","`","OEM_3"],[0,60,"Comma",87,",",188,"VK_OEM_COMMA",",","OEM_COMMA"],[0,61,"Period",89,".",190,"VK_OEM_PERIOD",".","OEM_PERIOD"],[0,62,"Slash",90,"/",191,"VK_OEM_2","/","OEM_2"],[1,63,"CapsLock",8,"CapsLock",20,"VK_CAPITAL",e,e],[1,64,"F1",59,"F1",112,"VK_F1",e,e],[1,65,"F2",60,"F2",113,"VK_F2",e,e],[1,66,"F3",61,"F3",114,"VK_F3",e,e],[1,67,"F4",62,"F4",115,"VK_F4",e,e],[1,68,"F5",63,"F5",116,"VK_F5",e,e],[1,69,"F6",64,"F6",117,"VK_F6",e,e],[1,70,"F7",65,"F7",118,"VK_F7",e,e],[1,71,"F8",66,"F8",119,"VK_F8",e,e],[1,72,"F9",67,"F9",120,"VK_F9",e,e],[1,73,"F10",68,"F10",121,"VK_F10",e,e],[1,74,"F11",69,"F11",122,"VK_F11",e,e],[1,75,"F12",70,"F12",123,"VK_F12",e,e],[1,76,"PrintScreen",0,e,0,e,e,e],[1,77,"ScrollLock",84,"ScrollLock",145,"VK_SCROLL",e,e],[1,78,"Pause",7,"PauseBreak",19,"VK_PAUSE",e,e],[1,79,"Insert",19,"Insert",45,"VK_INSERT",e,e],[1,80,"Home",14,"Home",36,"VK_HOME",e,e],[1,81,"PageUp",11,"PageUp",33,"VK_PRIOR",e,e],[1,82,"Delete",20,"Delete",46,"VK_DELETE",e,e],[1,83,"End",13,"End",35,"VK_END",e,e],[1,84,"PageDown",12,"PageDown",34,"VK_NEXT",e,e],[1,85,"ArrowRight",17,"RightArrow",39,"VK_RIGHT","Right",e],[1,86,"ArrowLeft",15,"LeftArrow",37,"VK_LEFT","Left",e],[1,87,"ArrowDown",18,"DownArrow",40,"VK_DOWN","Down",e],[1,88,"ArrowUp",16,"UpArrow",38,"VK_UP","Up",e],[1,89,"NumLock",83,"NumLock",144,"VK_NUMLOCK",e,e],[1,90,"NumpadDivide",113,"NumPad_Divide",111,"VK_DIVIDE",e,e],[1,91,"NumpadMultiply",108,"NumPad_Multiply",106,"VK_MULTIPLY",e,e],[1,92,"NumpadSubtract",111,"NumPad_Subtract",109,"VK_SUBTRACT",e,e],[1,93,"NumpadAdd",109,"NumPad_Add",107,"VK_ADD",e,e],[1,94,"NumpadEnter",3,e,0,e,e,e],[1,95,"Numpad1",99,"NumPad1",97,"VK_NUMPAD1",e,e],[1,96,"Numpad2",100,"NumPad2",98,"VK_NUMPAD2",e,e],[1,97,"Numpad3",101,"NumPad3",99,"VK_NUMPAD3",e,e],[1,98,"Numpad4",102,"NumPad4",100,"VK_NUMPAD4",e,e],[1,99,"Numpad5",103,"NumPad5",101,"VK_NUMPAD5",e,e],[1,100,"Numpad6",104,"NumPad6",102,"VK_NUMPAD6",e,e],[1,101,"Numpad7",105,"NumPad7",103,"VK_NUMPAD7",e,e],[1,102,"Numpad8",106,"NumPad8",104,"VK_NUMPAD8",e,e],[1,103,"Numpad9",107,"NumPad9",105,"VK_NUMPAD9",e,e],[1,104,"Numpad0",98,"NumPad0",96,"VK_NUMPAD0",e,e],[1,105,"NumpadDecimal",112,"NumPad_Decimal",110,"VK_DECIMAL",e,e],[0,106,"IntlBackslash",97,"OEM_102",226,"VK_OEM_102",e,e],[1,107,"ContextMenu",58,"ContextMenu",93,e,e,e],[1,108,"Power",0,e,0,e,e,e],[1,109,"NumpadEqual",0,e,0,e,e,e],[1,110,"F13",71,"F13",124,"VK_F13",e,e],[1,111,"F14",72,"F14",125,"VK_F14",e,e],[1,112,"F15",73,"F15",126,"VK_F15",e,e],[1,113,"F16",74,"F16",127,"VK_F16",e,e],[1,114,"F17",75,"F17",128,"VK_F17",e,e],[1,115,"F18",76,"F18",129,"VK_F18",e,e],[1,116,"F19",77,"F19",130,"VK_F19",e,e],[1,117,"F20",78,"F20",131,"VK_F20",e,e],[1,118,"F21",79,"F21",132,"VK_F21",e,e],[1,119,"F22",80,"F22",133,"VK_F22",e,e],[1,120,"F23",81,"F23",134,"VK_F23",e,e],[1,121,"F24",82,"F24",135,"VK_F24",e,e],[1,122,"Open",0,e,0,e,e,e],[1,123,"Help",0,e,0,e,e,e],[1,124,"Select",0,e,0,e,e,e],[1,125,"Again",0,e,0,e,e,e],[1,126,"Undo",0,e,0,e,e,e],[1,127,"Cut",0,e,0,e,e,e],[1,128,"Copy",0,e,0,e,e,e],[1,129,"Paste",0,e,0,e,e,e],[1,130,"Find",0,e,0,e,e,e],[1,131,"AudioVolumeMute",117,"AudioVolumeMute",173,"VK_VOLUME_MUTE",e,e],[1,132,"AudioVolumeUp",118,"AudioVolumeUp",175,"VK_VOLUME_UP",e,e],[1,133,"AudioVolumeDown",119,"AudioVolumeDown",174,"VK_VOLUME_DOWN",e,e],[1,134,"NumpadComma",110,"NumPad_Separator",108,"VK_SEPARATOR",e,e],[0,135,"IntlRo",115,"ABNT_C1",193,"VK_ABNT_C1",e,e],[1,136,"KanaMode",0,e,0,e,e,e],[0,137,"IntlYen",0,e,0,e,e,e],[1,138,"Convert",0,e,0,e,e,e],[1,139,"NonConvert",0,e,0,e,e,e],[1,140,"Lang1",0,e,0,e,e,e],[1,141,"Lang2",0,e,0,e,e,e],[1,142,"Lang3",0,e,0,e,e,e],[1,143,"Lang4",0,e,0,e,e,e],[1,144,"Lang5",0,e,0,e,e,e],[1,145,"Abort",0,e,0,e,e,e],[1,146,"Props",0,e,0,e,e,e],[1,147,"NumpadParenLeft",0,e,0,e,e,e],[1,148,"NumpadParenRight",0,e,0,e,e,e],[1,149,"NumpadBackspace",0,e,0,e,e,e],[1,150,"NumpadMemoryStore",0,e,0,e,e,e],[1,151,"NumpadMemoryRecall",0,e,0,e,e,e],[1,152,"NumpadMemoryClear",0,e,0,e,e,e],[1,153,"NumpadMemoryAdd",0,e,0,e,e,e],[1,154,"NumpadMemorySubtract",0,e,0,e,e,e],[1,155,"NumpadClear",131,"Clear",12,"VK_CLEAR",e,e],[1,156,"NumpadClearEntry",0,e,0,e,e,e],[1,0,e,5,"Ctrl",17,"VK_CONTROL",e,e],[1,0,e,4,"Shift",16,"VK_SHIFT",e,e],[1,0,e,6,"Alt",18,"VK_MENU",e,e],[1,0,e,57,"Meta",91,"VK_COMMAND",e,e],[1,157,"ControlLeft",5,e,0,"VK_LCONTROL",e,e],[1,158,"ShiftLeft",4,e,0,"VK_LSHIFT",e,e],[1,159,"AltLeft",6,e,0,"VK_LMENU",e,e],[1,160,"MetaLeft",57,e,0,"VK_LWIN",e,e],[1,161,"ControlRight",5,e,0,"VK_RCONTROL",e,e],[1,162,"ShiftRight",4,e,0,"VK_RSHIFT",e,e],[1,163,"AltRight",6,e,0,"VK_RMENU",e,e],[1,164,"MetaRight",57,e,0,"VK_RWIN",e,e],[1,165,"BrightnessUp",0,e,0,e,e,e],[1,166,"BrightnessDown",0,e,0,e,e,e],[1,167,"MediaPlay",0,e,0,e,e,e],[1,168,"MediaRecord",0,e,0,e,e,e],[1,169,"MediaFastForward",0,e,0,e,e,e],[1,170,"MediaRewind",0,e,0,e,e,e],[1,171,"MediaTrackNext",124,"MediaTrackNext",176,"VK_MEDIA_NEXT_TRACK",e,e],[1,172,"MediaTrackPrevious",125,"MediaTrackPrevious",177,"VK_MEDIA_PREV_TRACK",e,e],[1,173,"MediaStop",126,"MediaStop",178,"VK_MEDIA_STOP",e,e],[1,174,"Eject",0,e,0,e,e,e],[1,175,"MediaPlayPause",127,"MediaPlayPause",179,"VK_MEDIA_PLAY_PAUSE",e,e],[1,176,"MediaSelect",128,"LaunchMediaPlayer",181,"VK_MEDIA_LAUNCH_MEDIA_SELECT",e,e],[1,177,"LaunchMail",129,"LaunchMail",180,"VK_MEDIA_LAUNCH_MAIL",e,e],[1,178,"LaunchApp2",130,"LaunchApp2",183,"VK_MEDIA_LAUNCH_APP2",e,e],[1,179,"LaunchApp1",0,e,0,"VK_MEDIA_LAUNCH_APP1",e,e],[1,180,"SelectTask",0,e,0,e,e,e],[1,181,"LaunchScreenSaver",0,e,0,e,e,e],[1,182,"BrowserSearch",120,"BrowserSearch",170,"VK_BROWSER_SEARCH",e,e],[1,183,"BrowserHome",121,"BrowserHome",172,"VK_BROWSER_HOME",e,e],[1,184,"BrowserBack",122,"BrowserBack",166,"VK_BROWSER_BACK",e,e],[1,185,"BrowserForward",123,"BrowserForward",167,"VK_BROWSER_FORWARD",e,e],[1,186,"BrowserStop",0,e,0,"VK_BROWSER_STOP",e,e],[1,187,"BrowserRefresh",0,e,0,"VK_BROWSER_REFRESH",e,e],[1,188,"BrowserFavorites",0,e,0,"VK_BROWSER_FAVORITES",e,e],[1,189,"ZoomToggle",0,e,0,e,e,e],[1,190,"MailReply",0,e,0,e,e,e],[1,191,"MailForward",0,e,0,e,e,e],[1,192,"MailSend",0,e,0,e,e,e],[1,0,e,114,"KeyInComposition",229,e,e,e],[1,0,e,116,"ABNT_C2",194,"VK_ABNT_C2",e,e],[1,0,e,96,"OEM_8",223,"VK_OEM_8",e,e],[1,0,e,0,e,0,"VK_KANA",e,e],[1,0,e,0,e,0,"VK_HANGUL",e,e],[1,0,e,0,e,0,"VK_JUNJA",e,e],[1,0,e,0,e,0,"VK_FINAL",e,e],[1,0,e,0,e,0,"VK_HANJA",e,e],[1,0,e,0,e,0,"VK_KANJI",e,e],[1,0,e,0,e,0,"VK_CONVERT",e,e],[1,0,e,0,e,0,"VK_NONCONVERT",e,e],[1,0,e,0,e,0,"VK_ACCEPT",e,e],[1,0,e,0,e,0,"VK_MODECHANGE",e,e],[1,0,e,0,e,0,"VK_SELECT",e,e],[1,0,e,0,e,0,"VK_PRINT",e,e],[1,0,e,0,e,0,"VK_EXECUTE",e,e],[1,0,e,0,e,0,"VK_SNAPSHOT",e,e],[1,0,e,0,e,0,"VK_HELP",e,e],[1,0,e,0,e,0,"VK_APPS",e,e],[1,0,e,0,e,0,"VK_PROCESSKEY",e,e],[1,0,e,0,e,0,"VK_PACKET",e,e],[1,0,e,0,e,0,"VK_DBE_SBCSCHAR",e,e],[1,0,e,0,e,0,"VK_DBE_DBCSCHAR",e,e],[1,0,e,0,e,0,"VK_ATTN",e,e],[1,0,e,0,e,0,"VK_CRSEL",e,e],[1,0,e,0,e,0,"VK_EXSEL",e,e],[1,0,e,0,e,0,"VK_EREOF",e,e],[1,0,e,0,e,0,"VK_PLAY",e,e],[1,0,e,0,e,0,"VK_ZOOM",e,e],[1,0,e,0,e,0,"VK_NONAME",e,e],[1,0,e,0,e,0,"VK_PA1",e,e],[1,0,e,0,e,0,"VK_OEM_CLEAR",e,e]],i=[],n=[];for(const p of t){const[e,t,f,m,v,_,b,y,w]=p;if(n[t]||(n[t]=!0,c[t]=f,d[f]=t,u[f.toLowerCase()]=t,e&&(h[t]=m,0!==m&&3!==m&&5!==m&&4!==m&&6!==m&&57!==m&&(g[m]=t))),!i[m]){if(i[m]=!0,!v)throw new Error(`String representation missing for key code ${m} around scan code ${f}`);o.define(m,v),s.define(m,y||v),r.define(m,w||y||v)}_&&(a[_]=m),b&&(l[b]=m)}g[3]=46})(),function(e){function t(e){return o.keyCodeToStr(e)}function i(e){return o.strToKeyCode(e)}function n(e){return s.keyCodeToStr(e)}function a(e){return r.keyCodeToStr(e)}function l(e){return s.strToKeyCode(e)||r.strToKeyCode(e)}function c(e){if(e>=98&&e<=113)return null;switch(e){case 16:return"Up";case 18:return"Down";case 15:return"Left";case 17:return"Right"}return o.keyCodeToStr(e)}e.toString=t,e.fromString=i,e.toUserSettingsUS=n,e.toUserSettingsGeneral=a,e.fromUserSettings=l,e.toElectronAccelerator=c}(p||(p={}))},9501:(e,t,i)=>{"use strict";i.d(t,{X4:()=>r,jC:()=>a,r6:()=>l,xo:()=>s});var n=i(25206);class o{constructor(e,t,i=t){this.modifierLabels=[null],this.modifierLabels[2]=e,this.modifierLabels[1]=t,this.modifierLabels[3]=i}toLabel(e,t,i){if(0===t.length)return null;const n=[];for(let o=0,s=t.length;o{"use strict";i.d(t,{$M:()=>r,Z9:()=>o,aZ:()=>l,f1:()=>c});var n=i(98642);function o(e,t){if("number"===typeof e){if(0===e)return null;const i=(65535&e)>>>0,n=(4294901760&e)>>>16;return new a(0!==n?[s(i,t),s(n,t)]:[s(i,t)])}{const i=[];for(let n=0;n{"use strict";i.d(t,{o:()=>n});class n{constructor(e){this.executor=e,this._didRun=!1}get value(){if(!this._didRun)try{this._value=this.executor()}catch(e){this._error=e}finally{this._didRun=!0}if(this._error)throw this._error;return this._value}get rawValue(){return this._value}}},70959:(e,t,i)=>{"use strict";i.d(t,{B9:()=>p,F8:()=>f,JT:()=>_,Jz:()=>w,L6:()=>y,Nq:()=>c,OF:()=>m,SL:()=>v,Wf:()=>g,XK:()=>b,b2:()=>x,dk:()=>h,wi:()=>l});var n=i(81332),o=i(39595);const s=!1;let r=null;function a(e){r=e}if(s){const e="__is_disposable_tracked__";a(new class{trackDisposable(t){const i=new Error("Potentially leaked disposable").stack;setTimeout((()=>{t[e]||console.log(i)}),3e3)}setParent(t,i){if(t&&t!==_.None)try{t[e]=!0}catch(n){}}markAsDisposed(t){if(t&&t!==_.None)try{t[e]=!0}catch(i){}}markAsSingleton(e){}})}function l(e){return null===r||void 0===r||r.trackDisposable(e),e}function c(e){null===r||void 0===r||r.markAsDisposed(e)}function d(e,t){null===r||void 0===r||r.setParent(e,t)}function u(e,t){if(r)for(const i of e)r.setParent(i,t)}function h(e){return null===r||void 0===r||r.markAsSingleton(e),e}function g(e){return"function"===typeof e.dispose&&0===e.dispose.length}function p(e){if(o.$.is(e)){const i=[];for(const n of e)if(n)try{n.dispose()}catch(t){i.push(t)}if(1===i.length)throw i[0];if(i.length>1)throw new AggregateError(i,"Encountered errors while disposing of store");return Array.isArray(e)?[]:e}if(e)return e.dispose(),e}function f(...e){const t=m((()=>p(e)));return u(e,t),t}function m(e){const t=l({dispose:(0,n.M)((()=>{c(t),e()}))});return t}class v{constructor(){this._toDispose=new Set,this._isDisposed=!1,l(this)}dispose(){this._isDisposed||(c(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(0!==this._toDispose.size)try{p(this._toDispose)}finally{this._toDispose.clear()}}add(e){if(!e)return e;if(e===this)throw new Error("Cannot register a disposable on itself!");return d(e,this),this._isDisposed?v.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(e),e}deleteAndLeak(e){e&&this._toDispose.has(e)&&(this._toDispose.delete(e),d(e,null))}}v.DISABLE_DISPOSED_WARNING=!1;class _{constructor(){this._store=new v,l(this),d(this._store,this)}dispose(){c(this),this._store.dispose()}_register(e){if(e===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(e)}}_.None=Object.freeze({dispose(){}});class b{constructor(){this._isDisposed=!1,l(this)}get value(){return this._isDisposed?void 0:this._value}set value(e){var t;this._isDisposed||e===this._value||(null===(t=this._value)||void 0===t||t.dispose(),e&&d(e,this),this._value=e)}clear(){this.value=void 0}dispose(){var e;this._isDisposed=!0,c(this),null===(e=this._value)||void 0===e||e.dispose(),this._value=void 0}}class y{constructor(e){this._disposable=e,this._counter=1}acquire(){return this._counter++,this}release(){return 0===--this._counter&&this._disposable.dispose(),this}}class w{constructor(e){this.object=e}dispose(){}}class x{constructor(){this._store=new Map,this._isDisposed=!1,l(this)}dispose(){c(this),this._isDisposed=!0,this.clearAndDisposeAll()}clearAndDisposeAll(){if(this._store.size)try{p(this._store.values())}finally{this._store.clear()}}get(e){return this._store.get(e)}set(e,t,i=!1){var n;this._isDisposed&&console.warn(new Error("Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!").stack),i||null===(n=this._store.get(e))||void 0===n||n.dispose(),this._store.set(e,t)}deleteAndDispose(e){var t;null===(t=this._store.get(e))||void 0===t||t.dispose(),this._store.delete(e)}[Symbol.iterator](){return this._store[Symbol.iterator]()}}},33010:(e,t,i)=>{"use strict";i.d(t,{S:()=>o});class n{constructor(e){this.element=e,this.next=n.Undefined,this.prev=n.Undefined}}n.Undefined=new n(void 0);class o{constructor(){this._first=n.Undefined,this._last=n.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===n.Undefined}clear(){let e=this._first;while(e!==n.Undefined){const t=e.next;e.prev=n.Undefined,e.next=n.Undefined,e=t}this._first=n.Undefined,this._last=n.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){const i=new n(e);if(this._first===n.Undefined)this._first=i,this._last=i;else if(t){const e=this._last;this._last=i,i.prev=e,e.next=i}else{const e=this._first;this._first=i,i.next=e,e.prev=i}this._size+=1;let o=!1;return()=>{o||(o=!0,this._remove(i))}}shift(){if(this._first!==n.Undefined){const e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==n.Undefined){const e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==n.Undefined&&e.next!==n.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===n.Undefined&&e.next===n.Undefined?(this._first=n.Undefined,this._last=n.Undefined):e.next===n.Undefined?(this._last=this._last.prev,this._last.next=n.Undefined):e.prev===n.Undefined&&(this._first=this._first.next,this._first.prev=n.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;while(e!==n.Undefined)yield e.element,e=e.next}}},71400:(e,t,i)=>{"use strict";var n,o;i.d(t,{Y9:()=>a,YQ:()=>d,ri:()=>u,z6:()=>c});class s{constructor(e,t){this.uri=e,this.value=t}}function r(e){return Array.isArray(e)}class a{constructor(e,t){if(this[n]="ResourceMap",e instanceof a)this.map=new Map(e.map),this.toKey=null!==t&&void 0!==t?t:a.defaultToKey;else if(r(e)){this.map=new Map,this.toKey=null!==t&&void 0!==t?t:a.defaultToKey;for(const[t,i]of e)this.set(t,i)}else this.map=new Map,this.toKey=null!==e&&void 0!==e?e:a.defaultToKey}set(e,t){return this.map.set(this.toKey(e),new s(e,t)),this}get(e){var t;return null===(t=this.map.get(this.toKey(e)))||void 0===t?void 0:t.value}has(e){return this.map.has(this.toKey(e))}get size(){return this.map.size}clear(){this.map.clear()}delete(e){return this.map.delete(this.toKey(e))}forEach(e,t){"undefined"!==typeof t&&(e=e.bind(t));for(const[i,n]of this.map)e(n.value,n.uri,this)}*values(){for(const e of this.map.values())yield e.value}*keys(){for(const e of this.map.values())yield e.uri}*entries(){for(const e of this.map.values())yield[e.uri,e.value]}*[(n=Symbol.toStringTag,Symbol.iterator)](){for(const[,e]of this.map)yield[e.uri,e.value]}}a.defaultToKey=e=>e.toString();class l{constructor(){this[o]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){var e;return null===(e=this._head)||void 0===e?void 0:e.value}get last(){var e;return null===(e=this._tail)||void 0===e?void 0:e.value}has(e){return this._map.has(e)}get(e,t=0){const i=this._map.get(e);if(i)return 0!==t&&this.touch(i,t),i.value}set(e,t,i=0){let n=this._map.get(e);if(n)n.value=t,0!==i&&this.touch(n,i);else{switch(n={key:e,value:t,next:void 0,previous:void 0},i){case 0:this.addItemLast(n);break;case 1:this.addItemFirst(n);break;case 2:this.addItemLast(n);break;default:this.addItemLast(n);break}this._map.set(e,n),this._size++}return this}delete(e){return!!this.remove(e)}remove(e){const t=this._map.get(e);if(t)return this._map.delete(e),this.removeItem(t),this._size--,t.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");const e=this._head;return this._map.delete(e.key),this.removeItem(e),this._size--,e.value}forEach(e,t){const i=this._state;let n=this._head;while(n){if(t?e.bind(t)(n.value,n.key,this):e(n.value,n.key,this),this._state!==i)throw new Error("LinkedMap got modified during iteration.");n=n.next}}keys(){const e=this,t=this._state;let i=this._head;const n={[Symbol.iterator](){return n},next(){if(e._state!==t)throw new Error("LinkedMap got modified during iteration.");if(i){const e={value:i.key,done:!1};return i=i.next,e}return{value:void 0,done:!0}}};return n}values(){const e=this,t=this._state;let i=this._head;const n={[Symbol.iterator](){return n},next(){if(e._state!==t)throw new Error("LinkedMap got modified during iteration.");if(i){const e={value:i.value,done:!1};return i=i.next,e}return{value:void 0,done:!0}}};return n}entries(){const e=this,t=this._state;let i=this._head;const n={[Symbol.iterator](){return n},next(){if(e._state!==t)throw new Error("LinkedMap got modified during iteration.");if(i){const e={value:[i.key,i.value],done:!1};return i=i.next,e}return{value:void 0,done:!0}}};return n}[(o=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(e){if(e>=this.size)return;if(0===e)return void this.clear();let t=this._head,i=this.size;while(t&&i>e)this._map.delete(t.key),t=t.next,i--;this._head=t,this._size=i,t&&(t.previous=void 0),this._state++}addItemFirst(e){if(this._head||this._tail){if(!this._head)throw new Error("Invalid list");e.next=this._head,this._head.previous=e}else this._tail=e;this._head=e,this._state++}addItemLast(e){if(this._head||this._tail){if(!this._tail)throw new Error("Invalid list");e.previous=this._tail,this._tail.next=e}else this._head=e;this._tail=e,this._state++}removeItem(e){if(e===this._head&&e===this._tail)this._head=void 0,this._tail=void 0;else if(e===this._head){if(!e.next)throw new Error("Invalid list");e.next.previous=void 0,this._head=e.next}else if(e===this._tail){if(!e.previous)throw new Error("Invalid list");e.previous.next=void 0,this._tail=e.previous}else{const t=e.next,i=e.previous;if(!t||!i)throw new Error("Invalid list");t.previous=i,i.next=t}e.next=void 0,e.previous=void 0,this._state++}touch(e,t){if(!this._head||!this._tail)throw new Error("Invalid list");if(1===t||2===t)if(1===t){if(e===this._head)return;const t=e.next,i=e.previous;e===this._tail?(i.next=void 0,this._tail=i):(t.previous=i,i.next=t),e.previous=void 0,e.next=this._head,this._head.previous=e,this._head=e,this._state++}else if(2===t){if(e===this._tail)return;const t=e.next,i=e.previous;e===this._head?(t.previous=void 0,this._head=t):(t.previous=i,i.next=t),e.next=void 0,e.previous=this._tail,this._tail.next=e,this._tail=e,this._state++}}toJSON(){const e=[];return this.forEach(((t,i)=>{e.push([i,t])})),e}fromJSON(e){this.clear();for(const[t,i]of e)this.set(t,i)}}class c extends l{constructor(e,t=1){super(),this._limit=e,this._ratio=Math.min(Math.max(0,t),1)}get limit(){return this._limit}set limit(e){this._limit=e,this.checkTrim()}get(e,t=2){return super.get(e,t)}peek(e){return super.get(e,0)}set(e,t){return super.set(e,t,2),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}}class d{constructor(e){if(this._m1=new Map,this._m2=new Map,e)for(const[t,i]of e)this.set(t,i)}clear(){this._m1.clear(),this._m2.clear()}set(e,t){this._m1.set(e,t),this._m2.set(t,e)}get(e){return this._m1.get(e)}getKey(e){return this._m2.get(e)}delete(e){const t=this._m1.get(e);return void 0!==t&&(this._m1.delete(e),this._m2.delete(t),!0)}keys(){return this._m1.keys()}values(){return this._m1.values()}}class u{constructor(){this.map=new Map}add(e,t){let i=this.map.get(e);i||(i=new Set,this.map.set(e,i)),i.add(t)}delete(e,t){const i=this.map.get(e);i&&(i.delete(t),0===i.size&&this.map.delete(e))}forEach(e,t){const i=this.map.get(e);i&&i.forEach(t)}get(e){const t=this.map.get(e);return t||new Set}}},79247:(e,t,i)=>{"use strict";i.d(t,{Pz:()=>s,Qc:()=>r});var n=i(80356),o=i(95896);function s(e){return JSON.stringify(e,a)}function r(e){let t=JSON.parse(e);return t=l(t),t}function a(e,t){return t instanceof RegExp?{$mid:2,source:t.source,flags:t.flags}:t}function l(e,t=0){if(!e||t>200)return e;if("object"===typeof e){switch(e.$mid){case 1:return o.o.revive(e);case 2:return new RegExp(e.source,e.flags);case 17:return new Date(e.source)}if(e instanceof n.KN||e instanceof Uint8Array)return e;if(Array.isArray(e))for(let i=0;i{"use strict";i.d(t,{v:()=>n});const n=Object.freeze({text:"text/plain",binary:"application/octet-stream",unknown:"application/unknown",markdown:"text/markdown",latex:"text/latex",uriList:"text/uri-list"})},50200:(e,t,i)=>{"use strict";i.d(t,{Gi:()=>f,Gs:()=>c,WX:()=>h,lg:()=>n,xn:()=>l});var n,o=i(98642),s=i(47606),r=i(61720),a=i(95896);function l(e,t){return a.o.isUri(e)?(0,r.qq)(e.scheme,t):(0,r.ok)(e,t+":")}function c(e,...t){return t.some((t=>l(e,t)))}(function(e){e.inMemory="inmemory",e.vscode="vscode",e.internal="private",e.walkThrough="walkThrough",e.walkThroughSnippet="walkThroughSnippet",e.http="http",e.https="https",e.file="file",e.mailto="mailto",e.untitled="untitled",e.data="data",e.command="command",e.vscodeRemote="vscode-remote",e.vscodeRemoteResource="vscode-remote-resource",e.vscodeManagedRemoteResource="vscode-managed-remote-resource",e.vscodeUserData="vscode-userdata",e.vscodeCustomEditor="vscode-custom-editor",e.vscodeNotebookCell="vscode-notebook-cell",e.vscodeNotebookCellMetadata="vscode-notebook-cell-metadata",e.vscodeNotebookCellOutput="vscode-notebook-cell-output",e.vscodeInteractiveInput="vscode-interactive-input",e.vscodeSettings="vscode-settings",e.vscodeWorkspaceTrust="vscode-workspace-trust",e.vscodeTerminal="vscode-terminal",e.vscodeChatSesssion="vscode-chat-editor",e.webviewPanel="webview-panel",e.vscodeWebview="vscode-webview",e.extension="extension",e.vscodeFileResource="vscode-file",e.tmp="tmp",e.vsls="vsls",e.vscodeSourceControl="vscode-scm"})(n||(n={}));const d="tkn";class u{constructor(){this._hosts=Object.create(null),this._ports=Object.create(null),this._connectionTokens=Object.create(null),this._preferredWebSchema="http",this._delegate=null,this._remoteResourcesPath=`/${n.vscodeRemoteResource}`}setPreferredWebSchema(e){this._preferredWebSchema=e}rewrite(e){if(this._delegate)try{return this._delegate(e)}catch(u){return o.dL(u),e}const t=e.authority;let i=this._hosts[t];i&&-1!==i.indexOf(":")&&-1===i.indexOf("[")&&(i=`[${i}]`);const r=this._ports[t],l=this._connectionTokens[t];let c=`path=${encodeURIComponent(e.path)}`;return"string"===typeof l&&(c+=`&${d}=${encodeURIComponent(l)}`),a.o.from({scheme:s.$L?this._preferredWebSchema:n.vscodeRemoteResource,authority:`${i}:${r}`,path:this._remoteResourcesPath,query:c})}}const h=new u,g="vscode-app";class p{uriToBrowserUri(e){return e.scheme===n.vscodeRemote?h.rewrite(e):e.scheme!==n.file||!s.tY&&s.qB!==`${n.vscodeFileResource}://${p.FALLBACK_AUTHORITY}`?e:e.with({scheme:n.vscodeFileResource,authority:e.authority||p.FALLBACK_AUTHORITY,query:null,fragment:null})}}p.FALLBACK_AUTHORITY=g;const f=new p;var m;(function(e){const t=new Map([["1",{"Cross-Origin-Opener-Policy":"same-origin"}],["2",{"Cross-Origin-Embedder-Policy":"require-corp"}],["3",{"Cross-Origin-Opener-Policy":"same-origin","Cross-Origin-Embedder-Policy":"require-corp"}]]);e.CoopAndCoep=Object.freeze(t.get("3"));const i="vscode-coi";function n(e){let n;"string"===typeof e?n=new URL(e).searchParams:e instanceof URL?n=e.searchParams:a.o.isUri(e)&&(n=new URL(e.toString(!0)).searchParams);const o=null===n||void 0===n?void 0:n.get(i);if(o)return t.get(o)}function o(e,t,n){if(!globalThis.crossOriginIsolated)return;const o=t&&n?"3":n?"2":"1";e instanceof URLSearchParams?e.set(i,o):e[i]=o}e.getHeadersFromQuery=n,e.addSearchParam=o})(m||(m={}))},46304:(e,t,i)=>{"use strict";function n(e,t,i){return Math.min(Math.max(e,t),i)}i.d(t,{N:()=>s,nM:()=>o,uZ:()=>n});class o{constructor(){this._n=1,this._val=0}update(e){return this._val=this._val+(e-this._val)/this._n,this._n+=1,this._val}get value(){return this._val}}class s{constructor(e){this._n=0,this._val=0,this._values=[],this._index=0,this._sum=0,this._values=new Array(e),this._values.fill(0,0,e)}update(e){const t=this._values[this._index];return this._values[this._index]=e,this._index=(this._index+1)%this._values.length,this._sum-=t,this._sum+=e,this._n{"use strict";i.d(t,{$E:()=>h,I8:()=>o,IU:()=>g,_A:()=>s,fS:()=>d,jB:()=>c,rs:()=>a});var n=i(55455);function o(e){if(!e||"object"!==typeof e)return e;if(e instanceof RegExp)return e;const t=Array.isArray(e)?[]:{};return Object.entries(e).forEach((([e,i])=>{t[e]=i&&"object"===typeof i?o(i):i})),t}function s(e){if(!e||"object"!==typeof e)return e;const t=[e];while(t.length>0){const e=t.shift();Object.freeze(e);for(const i in e)if(r.call(e,i)){const o=e[i];"object"!==typeof o||Object.isFrozen(o)||(0,n.fU)(o)||t.push(o)}}return e}const r=Object.prototype.hasOwnProperty;function a(e,t){return l(e,t,new Set)}function l(e,t,i){if((0,n.Jp)(e))return e;const o=t(e);if("undefined"!==typeof o)return o;if(Array.isArray(e)){const n=[];for(const o of e)n.push(l(o,t,i));return n}if((0,n.Kn)(e)){if(i.has(e))throw new Error("Cannot clone recursive data-structure");i.add(e);const n={};for(const o in e)r.call(e,o)&&(n[o]=l(e[o],t,i));return i.delete(e),n}return e}function c(e,t,i=!0){return(0,n.Kn)(e)?((0,n.Kn)(t)&&Object.keys(t).forEach((o=>{o in e?i&&((0,n.Kn)(e[o])&&(0,n.Kn)(t[o])?c(e[o],t[o],i):e[o]=t[o]):e[o]=t[o]})),e):t}function d(e,t){if(e===t)return!0;if(null===e||void 0===e||null===t||void 0===t)return!1;if(typeof e!==typeof t)return!1;if("object"!==typeof e)return!1;if(Array.isArray(e)!==Array.isArray(t))return!1;let i,n;if(Array.isArray(e)){if(e.length!==t.length)return!1;for(i=0;ifunction(){const i=Array.prototype.slice.call(arguments,0);return t(e,i)},n={};for(const o of e)n[o]=i(o);return n}},94669:(e,t,i)=>{"use strict";i.d(t,{EH:()=>l,nJ:()=>d,UV:()=>c,gp:()=>u,Dz:()=>g,nK:()=>o.nK,aK:()=>o.aK,bx:()=>S,bk:()=>o.bk,Be:()=>o.Be,DN:()=>n.DN,rD:()=>m,GN:()=>y,aq:()=>_,uh:()=>n.uh,jx:()=>x,c8:()=>n.c8,PS:()=>n.PS,F_:()=>f});var n=i(2133),o=i(82064),s=i(65662),r=i(70959),a=i(61678);function l(e){return new h(void 0,e,void 0,void 0)}function c(e,t){return new h(e.debugName,t,void 0,void 0)}function d(e,t){return new h(e.debugName,t,e.createEmptyChangeSummary,e.handleChange)}function u(e){const t=new r.SL,i=c({debugName:()=>(0,n.$P)(e)||"(anonymous)"},(i=>{t.clear(),e(i,t)}));return(0,r.OF)((()=>{i.dispose(),t.dispose()}))}class h{get debugName(){if("string"===typeof this._debugName)return this._debugName;if("function"===typeof this._debugName){const e=this._debugName();if(void 0!==e)return e}const e=(0,n.$P)(this._runFn);return void 0!==e?e:"(anonymous)"}constructor(e,t,i,n){var o,s;this._debugName=e,this._runFn=t,this.createChangeSummary=i,this._handleChange=n,this.state=2,this.updateCount=0,this.disposed=!1,this.dependencies=new Set,this.dependenciesToBeRemoved=new Set,this.changeSummary=null===(o=this.createChangeSummary)||void 0===o?void 0:o.call(this),null===(s=(0,a.jl)())||void 0===s||s.handleAutorunCreated(this),this._runIfNeeded(),(0,r.wi)(this)}dispose(){this.disposed=!0;for(const e of this.dependencies)e.removeObserver(this);this.dependencies.clear(),(0,r.Nq)(this)}_runIfNeeded(){var e,t,i;if(3===this.state)return;const n=this.dependenciesToBeRemoved;this.dependenciesToBeRemoved=this.dependencies,this.dependencies=n,this.state=3;const o=this.disposed;try{if(!o){null===(e=(0,a.jl)())||void 0===e||e.handleAutorunTriggered(this);const i=this.changeSummary;this.changeSummary=null===(t=this.createChangeSummary)||void 0===t?void 0:t.call(this),this._runFn(this,i)}}finally{o||null===(i=(0,a.jl)())||void 0===i||i.handleAutorunFinished(this);for(const e of this.dependenciesToBeRemoved)e.removeObserver(this);this.dependenciesToBeRemoved.clear()}}toString(){return`Autorun<${this.debugName}>`}beginUpdate(){3===this.state&&(this.state=1),this.updateCount++}endUpdate(){if(1===this.updateCount)do{if(1===this.state){this.state=3;for(const e of this.dependencies)if(e.reportChanges(),2===this.state)break}this._runIfNeeded()}while(3!==this.state);this.updateCount--,(0,s.eZ)((()=>this.updateCount>=0))}handlePossibleChange(e){3===this.state&&this.dependencies.has(e)&&!this.dependenciesToBeRemoved.has(e)&&(this.state=1)}handleChange(e,t){if(this.dependencies.has(e)&&!this.dependenciesToBeRemoved.has(e)){const i=!this._handleChange||this._handleChange({changedObservable:e,change:t,didChange:t=>t===e},this.changeSummary);i&&(this.state=2)}}readObservable(e){if(this.disposed)return e.get();e.addObserver(this);const t=e.get();return this.dependencies.add(e),this.dependenciesToBeRemoved.delete(e),t}}function g(e){return new p(e)}(function(e){e.Observer=h})(l||(l={}));class p extends n.Nc{constructor(e){super(),this.value=e}get debugName(){return this.toString()}get(){return this.value}addObserver(e){}removeObserver(e){}toString(){return`Const: ${this.value}`}}function f(e,t){return new Promise((i=>{let n=!1,o=!1;const s=e.map((e=>({isFinished:t(e),state:e}))),r=l((e=>{const{isFinished:t,state:a}=s.read(e);t&&(n?r.dispose():o=!0,i(a))}));n=!0,o&&r.dispose()}))}function m(e,t){return new v(e,t)}class v extends n.hm{constructor(e,t){super(),this.event=e,this._getValue=t,this.hasValue=!1,this.handleEvent=e=>{var t;const i=this._getValue(e),o=this.value,s=!this.hasValue||o!==i;let r=!1;s&&(this.value=i,this.hasValue&&(r=!0,(0,n.c8)(v.globalTransaction,(e=>{var t;null===(t=(0,a.jl)())||void 0===t||t.handleFromEventObservableTriggered(this,{oldValue:o,newValue:i,change:void 0,didChange:s,hadValue:this.hasValue});for(const i of this.observers)e.updateObserver(i,this),i.handleChange(this,void 0)}),(()=>{const e=this.getDebugName();return"Event fired"+(e?`: ${e}`:"")}))),this.hasValue=!0),r||null===(t=(0,a.jl)())||void 0===t||t.handleFromEventObservableTriggered(this,{oldValue:o,newValue:i,change:void 0,didChange:s,hadValue:this.hasValue})}}getDebugName(){return(0,n.$P)(this._getValue)}get debugName(){const e=this.getDebugName();return"From Event"+(e?`: ${e}`:"")}onFirstObserverAdded(){this.subscription=this.event(this.handleEvent)}onLastObserverRemoved(){this.subscription.dispose(),this.subscription=void 0,this.hasValue=!1,this.value=void 0}get(){return this.subscription?(this.hasValue||this.handleEvent(void 0),this.value):this._getValue(void 0)}}function _(e,t){return new b(e,t)}(function(e){function t(e,t){let i=!1;void 0===v.globalTransaction&&(v.globalTransaction=e,i=!0);try{t()}finally{i&&(v.globalTransaction=void 0)}}e.Observer=v,e.batchEventsGlobally=t})(m||(m={}));class b extends n.hm{constructor(e,t){super(),this.debugName=e,this.event=t,this.handleEvent=()=>{(0,n.PS)((e=>{for(const t of this.observers)e.updateObserver(t,this),t.handleChange(this,void 0)}),(()=>this.debugName))}}onFirstObserverAdded(){this.subscription=this.event(this.handleEvent)}onLastObserverRemoved(){this.subscription.dispose(),this.subscription=void 0}get(){}}function y(e){return"string"===typeof e?new w(e):new w(void 0,e)}class w extends n.hm{get debugName(){var e;return null!==(e=(0,n.fE)(this,this._debugName,void 0,this._owner,this))&&void 0!==e?e:"Observable Signal"}constructor(e,t){super(),this._debugName=e,this._owner=t}trigger(e,t){if(e)for(const i of this.observers)e.updateObserver(i,this),i.handleChange(this,t);else(0,n.PS)((e=>{this.trigger(e,t)}),(()=>`Trigger signal ${this.debugName}`))}get(){}}function x(e,t){const i=new C(!0,t);return e.addObserver(i),t?t(e.get()):e.reportChanges(),(0,r.OF)((()=>{e.removeObserver(i)}))}(0,n.MK)(x);class C{constructor(e,t){this._forceRecompute=e,this._handleValue=t,this._counter=0}beginUpdate(e){this._counter++}endUpdate(e){this._counter--,0===this._counter&&this._forceRecompute&&(this._handleValue?this._handleValue(e.get()):e.reportChanges())}handlePossibleChange(e){}handleChange(e,t){}}function S(e){let t;const i=(0,o.nK)((i=>(t=e(i,t),t)));return i}const k=!1;k&&(0,a.EK)(new a.Qy)},2133:(e,t,i)=>{"use strict";i.d(t,{$P:()=>S,Bl:()=>h,DN:()=>E,Hr:()=>g,MK:()=>a,Nc:()=>c,PS:()=>u,c8:()=>p,fE:()=>_,hm:()=>d,mT:()=>l,uh:()=>k});var n=i(61678);let o,s,r;function a(e){o=e}function l(e){s=e}class c{get TChange(){return null}reportChanges(){this.get()}read(e){return e?e.readObservable(this):this.get()}map(e,t){const i=void 0===t?void 0:e,n=void 0===t?e:t;return s({owner:i,debugName:()=>{const e=S(n);if(void 0!==e)return e;const t=/^\s*\(?\s*([a-zA-Z_$][a-zA-Z_$0-9]*)\s*\)?\s*=>\s*\1(?:\??)\.([a-zA-Z_$][a-zA-Z_$0-9]*)\s*$/,o=t.exec(n.toString());return o?`${this.debugName}.${o[2]}`:i?void 0:`${this.debugName} (mapped)`}},(e=>n(this.read(e),e)))}recomputeInitiallyAndOnChange(e,t){return e.add(o(this,t)),this}}class d extends c{constructor(){super(...arguments),this.observers=new Set}addObserver(e){const t=this.observers.size;this.observers.add(e),0===t&&this.onFirstObserverAdded()}removeObserver(e){const t=this.observers.delete(e);t&&0===this.observers.size&&this.onLastObserverRemoved()}onFirstObserverAdded(){}onLastObserverRemoved(){}}function u(e,t){const i=new f(e,t);try{e(i)}finally{i.finish()}}function h(e){if(r)e(r);else{const t=new f(e,void 0);r=t;try{e(t)}finally{t.finish(),r=void 0}}}async function g(e,t){const i=new f(e,t);try{await e(i)}finally{i.finish()}}function p(e,t,i){e?t(e):u(t,i)}class f{constructor(e,t){var i;this._fn=e,this._getDebugName=t,this.updatingObservers=[],null===(i=(0,n.jl)())||void 0===i||i.handleBeginTransaction(this)}getDebugName(){return this._getDebugName?this._getDebugName():S(this._fn)}updateObserver(e,t){this.updatingObservers.push({observer:e,observable:t}),e.beginUpdate(t)}finish(){var e;const t=this.updatingObservers;for(let i=0;i{}),(()=>`Setting ${this.debugName}`)));try{const s=this._value;this._setValue(e),null===(o=(0,n.jl)())||void 0===o||o.handleObservableChanged(this,{oldValue:s,newValue:e,change:i,didChange:!0,hadValue:!0});for(const e of this.observers)t.updateObserver(e,this),e.handleChange(this,i)}finally{s&&s.finish()}}toString(){return`${this.debugName}: ${this._value}`}_setValue(e){this._value=e}}function E(e,t){return"string"===typeof e?new N(void 0,e,t):new N(e,void 0,t)}class N extends L{_setValue(e){this._value!==e&&(this._value&&this._value.dispose(),this._value=e)}dispose(){var e;null===(e=this._value)||void 0===e||e.dispose()}}},82064:(e,t,i)=>{"use strict";i.d(t,{Be:()=>u,aK:()=>d,bk:()=>c,kA:()=>h,nK:()=>l});var n=i(98642),o=i(70959),s=i(2133),r=i(61678);const a=(e,t)=>e===t;function l(e,t){return void 0!==t?new g(e,void 0,t,void 0,void 0,void 0,a):new g(void 0,void 0,e,void 0,void 0,void 0,a)}function c(e,t){var i;return new g(e.owner,e.debugName,t,void 0,void 0,void 0,null!==(i=e.equalityComparer)&&void 0!==i?i:a)}function d(e,t){var i;return new g(e.owner,e.debugName,t,e.createEmptyChangeSummary,e.handleChange,void 0,null!==(i=e.equalityComparer)&&void 0!==i?i:a)}function u(e,t){let i,n;void 0===t?(i=e,n=void 0):(n=e,i=t);const r=new o.SL;return new g(n,(()=>{var e;return null!==(e=(0,s.$P)(i))&&void 0!==e?e:"(anonymous)"}),(e=>(r.clear(),i(e,r))),void 0,void 0,(()=>r.dispose()),a)}function h(e,t){let i,n;void 0===t?(i=e,n=void 0):(n=e,i=t);const r=new o.SL;return new g(n,(()=>{var e;return null!==(e=(0,s.$P)(i))&&void 0!==e?e:"(anonymous)"}),(e=>{r.clear();const t=i(e);return t&&r.add(t),t}),void 0,void 0,(()=>r.dispose()),a)}(0,s.mT)(c);class g extends s.hm{get debugName(){var e;return null!==(e=(0,s.fE)(this,this._debugName,this._computeFn,this._owner,this))&&void 0!==e?e:"(anonymous)"}constructor(e,t,i,n,o,s=void 0,a){var l,c;super(),this._owner=e,this._debugName=t,this._computeFn=i,this.createChangeSummary=n,this._handleChange=o,this._handleLastObserverRemoved=s,this._equalityComparator=a,this.state=0,this.value=void 0,this.updateCount=0,this.dependencies=new Set,this.dependenciesToBeRemoved=new Set,this.changeSummary=void 0,this.changeSummary=null===(l=this.createChangeSummary)||void 0===l?void 0:l.call(this),null===(c=(0,r.jl)())||void 0===c||c.handleDerivedCreated(this)}onLastObserverRemoved(){var e;this.state=0,this.value=void 0;for(const t of this.dependencies)t.removeObserver(this);this.dependencies.clear(),null===(e=this._handleLastObserverRemoved)||void 0===e||e.call(this)}get(){var e;if(0===this.observers.size){const t=this._computeFn(this,null===(e=this.createChangeSummary)||void 0===e?void 0:e.call(this));return this.onLastObserverRemoved(),t}do{if(1===this.state)for(const e of this.dependencies)if(e.reportChanges(),2===this.state)break;1===this.state&&(this.state=3),this._recomputeIfNeeded()}while(3!==this.state);return this.value}_recomputeIfNeeded(){var e,t;if(3===this.state)return;const i=this.dependenciesToBeRemoved;this.dependenciesToBeRemoved=this.dependencies,this.dependencies=i;const n=0!==this.state,o=this.value;this.state=3;const s=this.changeSummary;this.changeSummary=null===(e=this.createChangeSummary)||void 0===e?void 0:e.call(this);try{this.value=this._computeFn(this,s)}finally{for(const e of this.dependenciesToBeRemoved)e.removeObserver(this);this.dependenciesToBeRemoved.clear()}const a=n&&!this._equalityComparator(o,this.value);if(null===(t=(0,r.jl)())||void 0===t||t.handleDerivedRecomputed(this,{oldValue:o,newValue:this.value,change:void 0,didChange:a,hadValue:n}),a)for(const r of this.observers)r.handleChange(this,void 0)}toString(){return`LazyDerived<${this.debugName}>`}beginUpdate(e){this.updateCount++;const t=1===this.updateCount;if(3===this.state&&(this.state=1,!t))for(const i of this.observers)i.handlePossibleChange(this);if(t)for(const i of this.observers)i.beginUpdate(this)}endUpdate(e){if(this.updateCount--,0===this.updateCount){const e=[...this.observers];for(const t of e)t.endUpdate(this)}if(this.updateCount<0)throw new n.he}handlePossibleChange(e){if(3===this.state&&this.dependencies.has(e)&&!this.dependenciesToBeRemoved.has(e)){this.state=1;for(const e of this.observers)e.handlePossibleChange(this)}}handleChange(e,t){if(this.dependencies.has(e)&&!this.dependenciesToBeRemoved.has(e)){const i=!this._handleChange||this._handleChange({changedObservable:e,change:t,didChange:t=>t===e},this.changeSummary),n=3===this.state;if(i&&(1===this.state||n)&&(this.state=2,n))for(const e of this.observers)e.handlePossibleChange(this)}}readObservable(e){e.addObserver(this);const t=e.get();return this.dependencies.add(e),this.dependenciesToBeRemoved.delete(e),t}addObserver(e){const t=!this.observers.has(e)&&this.updateCount>0;super.addObserver(e),t&&e.beginUpdate(this)}removeObserver(e){const t=this.observers.has(e)&&this.updateCount>0;super.removeObserver(e),t&&e.endUpdate(this)}}},61678:(e,t,i)=>{"use strict";let n;function o(e){n=e}function s(){return n}i.d(t,{EK:()=>o,Qy:()=>r,jl:()=>s});class r{constructor(){this.indentation=0,this.changedObservablesSets=new WeakMap}textToConsoleArgs(e){return a([l(p("| ",this.indentation)),e])}formatInfo(e){return e.hadValue?e.didChange?[l(" "),d(u(e.oldValue,70),{color:"red",strikeThrough:!0}),l(" "),d(u(e.newValue,60),{color:"green"})]:[l(" (unchanged)")]:[l(" "),d(u(e.newValue,60),{color:"green"}),l(" (initial)")]}handleObservableChanged(e,t){console.log(...this.textToConsoleArgs([c("observable value changed"),d(e.debugName,{color:"BlueViolet"}),...this.formatInfo(t)]))}formatChanges(e){if(0!==e.size)return d(" (changed deps: "+[...e].map((e=>e.debugName)).join(", ")+")",{color:"gray"})}handleDerivedCreated(e){const t=e.handleChange;this.changedObservablesSets.set(e,new Set),e.handleChange=(i,n)=>(this.changedObservablesSets.get(e).add(i),t.apply(e,[i,n]))}handleDerivedRecomputed(e,t){const i=this.changedObservablesSets.get(e);console.log(...this.textToConsoleArgs([c("derived recomputed"),d(e.debugName,{color:"BlueViolet"}),...this.formatInfo(t),this.formatChanges(i),{data:[{fn:e._computeFn}]}])),i.clear()}handleFromEventObservableTriggered(e,t){console.log(...this.textToConsoleArgs([c("observable from event triggered"),d(e.debugName,{color:"BlueViolet"}),...this.formatInfo(t),{data:[{fn:e._getValue}]}]))}handleAutorunCreated(e){const t=e.handleChange;this.changedObservablesSets.set(e,new Set),e.handleChange=(i,n)=>(this.changedObservablesSets.get(e).add(i),t.apply(e,[i,n]))}handleAutorunTriggered(e){const t=this.changedObservablesSets.get(e);console.log(...this.textToConsoleArgs([c("autorun"),d(e.debugName,{color:"BlueViolet"}),this.formatChanges(t),{data:[{fn:e._runFn}]}])),t.clear(),this.indentation++}handleAutorunFinished(e){this.indentation--}handleBeginTransaction(e){let t=e.getDebugName();void 0===t&&(t=""),console.log(...this.textToConsoleArgs([c("transaction"),d(t,{color:"BlueViolet"}),{data:[{fn:e._fn}]}])),this.indentation++}handleEndTransaction(){this.indentation--}}function a(e){const t=new Array,i=[];let n="";function o(e){if("length"in e)for(const t of e)t&&o(t);else"text"in e?(n+=`%c${e.text}`,t.push(e.style),e.data&&i.push(...e.data)):"data"in e&&i.push(...e.data)}o(e);const s=[n,...t];return s.push(...i),s}function l(e){return d(e,{color:"black"})}function c(e){return d(f(`${e}: `,10),{color:"black",bold:!0})}function d(e,t={color:"black"}){function i(e){return Object.entries(e).reduce(((e,[t,i])=>`${e}${t}:${i};`),"")}const n={color:t.color};return t.strikeThrough&&(n["text-decoration"]="line-through"),t.bold&&(n["font-weight"]="bold"),{text:e,style:i(n)}}function u(e,t){switch(typeof e){case"number":return""+e;case"string":return e.length+2<=t?`"${e}"`:`"${e.substr(0,t-7)}"+...`;case"boolean":return e?"true":"false";case"undefined":return"undefined";case"object":return null===e?"null":Array.isArray(e)?h(e,t):g(e,t);case"symbol":return e.toString();case"function":return`[[Function${e.name?" "+e.name:""}]]`;default:return""+e}}function h(e,t){let i="[ ",n=!0;for(const o of e){if(n||(i+=", "),i.length-5>t){i+="...";break}n=!1,i+=`${u(o,t-i.length)}`}return i+=" ]",i}function g(e,t){let i="{ ",n=!0;for(const[o,s]of Object.entries(e)){if(n||(i+=", "),i.length-5>t){i+="...";break}n=!1,i+=`${o}: ${u(s,t-i.length)}`}return i+=" }",i}function p(e,t){let i="";for(let n=1;n<=t;n++)i+=e;return i}function f(e,t){while(e.length{"use strict";i.d(t,{DB:()=>L,DZ:()=>T,EZ:()=>D,Fv:()=>k,Gf:()=>E,KR:()=>S,Ku:()=>x,XX:()=>N,ir:()=>A});var n=i(93962);const o=65,s=97,r=90,a=122,l=46,c=47,d=92,u=58,h=63;class g extends Error{constructor(e,t,i){let n;"string"===typeof t&&0===t.indexOf("not ")?(n="must not be",t=t.replace(/^not /,"")):n="must be";const o=-1!==e.indexOf(".")?"property":"argument";let s=`The "${e}" ${o} ${n} of type ${t}`;s+=". Received type "+typeof i,super(s),this.code="ERR_INVALID_ARG_TYPE"}}function p(e,t){if(null===e||"object"!==typeof e)throw new g(t,"Object",e)}function f(e,t){if("string"!==typeof e)throw new g(t,"string",e)}const m="win32"===n.Jv;function v(e){return e===c||e===d}function _(e){return e===c}function b(e){return e>=o&&e<=r||e>=s&&e<=a}function y(e,t,i,n){let o="",s=0,r=-1,a=0,d=0;for(let u=0;u<=e.length;++u){if(u2){const e=o.lastIndexOf(i);-1===e?(o="",s=0):(o=o.slice(0,e),s=o.length-1-o.lastIndexOf(i)),r=u,a=0;continue}if(0!==o.length){o="",s=0,r=u,a=0;continue}}t&&(o+=o.length>0?`${i}..`:"..",s=2)}else o.length>0?o+=`${i}${e.slice(r+1,u)}`:o=e.slice(r+1,u),s=u-r-1;r=u,a=0}else d===l&&-1!==a?++a:a=-1}return o}function w(e,t){p(t,"pathObject");const i=t.dir||t.root,n=t.base||`${t.name||""}${t.ext||""}`;return i?i===t.root?`${i}${n}`:`${i}${e}${n}`:n}const x={resolve(...e){let t="",i="",o=!1;for(let s=e.length-1;s>=-1;s--){let r;if(s>=0){if(r=e[s],f(r,"path"),0===r.length)continue}else 0===t.length?r=n.Vj():(r=n.OB[`=${t}`]||n.Vj(),(void 0===r||r.slice(0,2).toLowerCase()!==t.toLowerCase()&&r.charCodeAt(2)===d)&&(r=`${t}\\`));const a=r.length;let l=0,c="",h=!1;const g=r.charCodeAt(0);if(1===a)v(g)&&(l=1,h=!0);else if(v(g))if(h=!0,v(r.charCodeAt(1))){let e=2,t=e;while(e2&&v(r.charCodeAt(2))&&(h=!0,l=3));if(c.length>0)if(t.length>0){if(c.toLowerCase()!==t.toLowerCase())continue}else t=c;if(o){if(t.length>0)break}else if(i=`${r.slice(l)}\\${i}`,o=h,h&&t.length>0)break}return i=y(i,!o,"\\",v),o?`${t}\\${i}`:`${t}${i}`||"."},normalize(e){f(e,"path");const t=e.length;if(0===t)return".";let i,n=0,o=!1;const s=e.charCodeAt(0);if(1===t)return _(s)?"\\":e;if(v(s))if(o=!0,v(e.charCodeAt(1))){let o=2,s=o;while(o2&&v(e.charCodeAt(2))&&(o=!0,n=3));let r=n0&&v(e.charCodeAt(t-1))&&(r+="\\"),void 0===i?o?`\\${r}`:r:o?`${i}\\${r}`:`${i}${r}`},isAbsolute(e){f(e,"path");const t=e.length;if(0===t)return!1;const i=e.charCodeAt(0);return v(i)||t>2&&b(i)&&e.charCodeAt(1)===u&&v(e.charCodeAt(2))},join(...e){if(0===e.length)return".";let t,i;for(let s=0;s0&&(void 0===t?t=i=n:t+=`\\${n}`)}if(void 0===t)return".";let n=!0,o=0;if("string"===typeof i&&v(i.charCodeAt(0))){++o;const e=i.length;e>1&&v(i.charCodeAt(1))&&(++o,e>2&&(v(i.charCodeAt(2))?++o:n=!1))}if(n){while(o=2&&(t=`\\${t.slice(o)}`)}return x.normalize(t)},relative(e,t){if(f(e,"from"),f(t,"to"),e===t)return"";const i=x.resolve(e),n=x.resolve(t);if(i===n)return"";if(e=i.toLowerCase(),t=n.toLowerCase(),e===t)return"";let o=0;while(oo&&e.charCodeAt(s-1)===d)s--;const r=s-o;let a=0;while(aa&&t.charCodeAt(l-1)===d)l--;const c=l-a,u=ru){if(t.charCodeAt(a+g)===d)return n.slice(a+g+1);if(2===g)return n.slice(a+g)}r>u&&(e.charCodeAt(o+g)===d?h=g:2===g&&(h=3)),-1===h&&(h=0)}let p="";for(g=o+h+1;g<=s;++g)g!==s&&e.charCodeAt(g)!==d||(p+=0===p.length?"..":"\\..");return a+=h,p.length>0?`${p}${n.slice(a,l)}`:(n.charCodeAt(a)===d&&++a,n.slice(a,l))},toNamespacedPath(e){if("string"!==typeof e||0===e.length)return e;const t=x.resolve(e);if(t.length<=2)return e;if(t.charCodeAt(0)===d){if(t.charCodeAt(1)===d){const e=t.charCodeAt(2);if(e!==h&&e!==l)return`\\\\?\\UNC\\${t.slice(2)}`}}else if(b(t.charCodeAt(0))&&t.charCodeAt(1)===u&&t.charCodeAt(2)===d)return`\\\\?\\${t}`;return e},dirname(e){f(e,"path");const t=e.length;if(0===t)return".";let i=-1,n=0;const o=e.charCodeAt(0);if(1===t)return v(o)?e:".";if(v(o)){if(i=n=1,v(e.charCodeAt(1))){let o=2,s=o;while(o2&&v(e.charCodeAt(2))?3:2,n=i);let s=-1,r=!0;for(let a=t-1;a>=n;--a)if(v(e.charCodeAt(a))){if(!r){s=a;break}}else r=!1;if(-1===s){if(-1===i)return".";s=i}return e.slice(0,s)},basename(e,t){void 0!==t&&f(t,"ext"),f(e,"path");let i,n=0,o=-1,s=!0;if(e.length>=2&&b(e.charCodeAt(0))&&e.charCodeAt(1)===u&&(n=2),void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let r=t.length-1,a=-1;for(i=e.length-1;i>=n;--i){const l=e.charCodeAt(i);if(v(l)){if(!s){n=i+1;break}}else-1===a&&(s=!1,a=i+1),r>=0&&(l===t.charCodeAt(r)?-1===--r&&(o=i):(r=-1,o=a))}return n===o?o=a:-1===o&&(o=e.length),e.slice(n,o)}for(i=e.length-1;i>=n;--i)if(v(e.charCodeAt(i))){if(!s){n=i+1;break}}else-1===o&&(s=!1,o=i+1);return-1===o?"":e.slice(n,o)},extname(e){f(e,"path");let t=0,i=-1,n=0,o=-1,s=!0,r=0;e.length>=2&&e.charCodeAt(1)===u&&b(e.charCodeAt(0))&&(t=n=2);for(let a=e.length-1;a>=t;--a){const t=e.charCodeAt(a);if(v(t)){if(!s){n=a+1;break}}else-1===o&&(s=!1,o=a+1),t===l?-1===i?i=a:1!==r&&(r=1):-1!==i&&(r=-1)}return-1===i||-1===o||0===r||1===r&&i===o-1&&i===n+1?"":e.slice(i,o)},format:w.bind(null,"\\"),parse(e){f(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const i=e.length;let n=0,o=e.charCodeAt(0);if(1===i)return v(o)?(t.root=t.dir=e,t):(t.base=t.name=e,t);if(v(o)){if(n=1,v(e.charCodeAt(1))){let t=2,o=t;while(t0&&(t.root=e.slice(0,n));let s=-1,r=n,a=-1,c=!0,d=e.length-1,h=0;for(;d>=n;--d)if(o=e.charCodeAt(d),v(o)){if(!c){r=d+1;break}}else-1===a&&(c=!1,a=d+1),o===l?-1===s?s=d:1!==h&&(h=1):-1!==s&&(h=-1);return-1!==a&&(-1===s||0===h||1===h&&s===a-1&&s===r+1?t.base=t.name=e.slice(r,a):(t.name=e.slice(r,s),t.base=e.slice(r,a),t.ext=e.slice(s,a))),t.dir=r>0&&r!==n?e.slice(0,r-1):t.root,t},sep:"\\",delimiter:";",win32:null,posix:null},C=(()=>{if(m){const e=/\\/g;return()=>{const t=n.Vj().replace(e,"/");return t.slice(t.indexOf("/"))}}return()=>n.Vj()})(),S={resolve(...e){let t="",i=!1;for(let n=e.length-1;n>=-1&&!i;n--){const o=n>=0?e[n]:C();f(o,"path"),0!==o.length&&(t=`${o}/${t}`,i=o.charCodeAt(0)===c)}return t=y(t,!i,"/",_),i?`/${t}`:t.length>0?t:"."},normalize(e){if(f(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===c,i=e.charCodeAt(e.length-1)===c;return e=y(e,!t,"/",_),0===e.length?t?"/":i?"./":".":(i&&(e+="/"),t?`/${e}`:e)},isAbsolute(e){return f(e,"path"),e.length>0&&e.charCodeAt(0)===c},join(...e){if(0===e.length)return".";let t;for(let i=0;i0&&(void 0===t?t=n:t+=`/${n}`)}return void 0===t?".":S.normalize(t)},relative(e,t){if(f(e,"from"),f(t,"to"),e===t)return"";if(e=S.resolve(e),t=S.resolve(t),e===t)return"";const i=1,n=e.length,o=n-i,s=1,r=t.length-s,a=oa){if(t.charCodeAt(s+d)===c)return t.slice(s+d+1);if(0===d)return t.slice(s+d)}else o>a&&(e.charCodeAt(i+d)===c?l=d:0===d&&(l=0));let u="";for(d=i+l+1;d<=n;++d)d!==n&&e.charCodeAt(d)!==c||(u+=0===u.length?"..":"/..");return`${u}${t.slice(s+l)}`},toNamespacedPath(e){return e},dirname(e){if(f(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===c;let i=-1,n=!0;for(let o=e.length-1;o>=1;--o)if(e.charCodeAt(o)===c){if(!n){i=o;break}}else n=!1;return-1===i?t?"/":".":t&&1===i?"//":e.slice(0,i)},basename(e,t){void 0!==t&&f(t,"ext"),f(e,"path");let i,n=0,o=-1,s=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let r=t.length-1,a=-1;for(i=e.length-1;i>=0;--i){const l=e.charCodeAt(i);if(l===c){if(!s){n=i+1;break}}else-1===a&&(s=!1,a=i+1),r>=0&&(l===t.charCodeAt(r)?-1===--r&&(o=i):(r=-1,o=a))}return n===o?o=a:-1===o&&(o=e.length),e.slice(n,o)}for(i=e.length-1;i>=0;--i)if(e.charCodeAt(i)===c){if(!s){n=i+1;break}}else-1===o&&(s=!1,o=i+1);return-1===o?"":e.slice(n,o)},extname(e){f(e,"path");let t=-1,i=0,n=-1,o=!0,s=0;for(let r=e.length-1;r>=0;--r){const a=e.charCodeAt(r);if(a!==c)-1===n&&(o=!1,n=r+1),a===l?-1===t?t=r:1!==s&&(s=1):-1!==t&&(s=-1);else if(!o){i=r+1;break}}return-1===t||-1===n||0===s||1===s&&t===n-1&&t===i+1?"":e.slice(t,n)},format:w.bind(null,"/"),parse(e){f(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const i=e.charCodeAt(0)===c;let n;i?(t.root="/",n=1):n=0;let o=-1,s=0,r=-1,a=!0,d=e.length-1,u=0;for(;d>=n;--d){const t=e.charCodeAt(d);if(t!==c)-1===r&&(a=!1,r=d+1),t===l?-1===o?o=d:1!==u&&(u=1):-1!==o&&(u=-1);else if(!a){s=d+1;break}}if(-1!==r){const n=0===s&&i?1:s;-1===o||0===u||1===u&&o===r-1&&o===s+1?t.base=t.name=e.slice(n,r):(t.name=e.slice(n,o),t.base=e.slice(n,r),t.ext=e.slice(o,r))}return s>0?t.dir=e.slice(0,s-1):i&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};S.win32=x.win32=x,S.posix=x.posix=S;const k=m?x.normalize:S.normalize,L=m?x.resolve:S.resolve,E=m?x.relative:S.relative,N=m?x.dirname:S.dirname,D=m?x.basename:S.basename,T=m?x.extname:S.extname,A=m?x.sep:S.sep},47606:(e,t,i)=>{"use strict";i.d(t,{$L:()=>T,ED:()=>L,G6:()=>$,IJ:()=>N,OS:()=>H,dK:()=>O,dz:()=>E,fn:()=>B,gn:()=>R,i7:()=>U,qB:()=>I,r:()=>z,tY:()=>D,tq:()=>M,un:()=>j,vU:()=>q});var n,o=i(25206);const s="en";let r,a,l=!1,c=!1,d=!1,u=!1,h=!1,g=!1,p=!1,f=!1,m=!1,v=!1,_=s,b=null,y=null;const w=globalThis;let x;"undefined"!==typeof w.vscode&&"undefined"!==typeof w.vscode.process?x=w.vscode.process:"undefined"!==typeof process&&(x=process);const C="string"===typeof(null===(n=null===x||void 0===x?void 0:x.versions)||void 0===n?void 0:n.electron),S=C&&"renderer"===(null===x||void 0===x?void 0:x.type);if("object"!==typeof navigator||S)if("object"===typeof x){l="win32"===x.platform,c="darwin"===x.platform,d="linux"===x.platform,u=d&&!!x.env["SNAP"]&&!!x.env["SNAP_REVISION"],p=C,m=!!x.env["CI"]||!!x.env["BUILD_ARTIFACTSTAGINGDIRECTORY"],r=s,_=s;const e=x.env["VSCODE_NLS_CONFIG"];if(e)try{const t=JSON.parse(e),i=t.availableLanguages["*"];r=t.locale,b=t.osLocale,_=i||s,y=t._translationsConfigFile}catch(K){}h=!0}else console.error("Unable to resolve platform.");else{a=navigator.userAgent,l=a.indexOf("Windows")>=0,c=a.indexOf("Macintosh")>=0,f=(a.indexOf("Macintosh")>=0||a.indexOf("iPad")>=0||a.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,d=a.indexOf("Linux")>=0,v=(null===a||void 0===a?void 0:a.indexOf("Mobi"))>=0,g=!0;const e=o.aj(o.NC({key:"ensureLoaderPluginIsLoaded",comment:["{Locked}"]},"_"));r=e||s,_=r,b=navigator.language}let k=0;c?k=1:l?k=3:d&&(k=2);const L=l,E=c,N=d,D=h,T=g,A=g&&"function"===typeof w.importScripts,I=A?w.origin:void 0,R=f,M=v,P=a,O=_,F="function"===typeof w.postMessage&&!w.importScripts,B=(()=>{if(F){const e=[];w.addEventListener("message",(t=>{if(t.data&&t.data.vscodeScheduleAsyncWork)for(let i=0,n=e.length;i{const n=++t;e.push({id:n,callback:i}),w.postMessage({vscodeScheduleAsyncWork:n},"*")}}return e=>setTimeout(e)})(),H=c||f?2:l?1:3;let W=!0,V=!1;function z(){if(!V){V=!0;const e=new Uint8Array(2);e[0]=1,e[1]=2;const t=new Uint16Array(e.buffer);W=513===t[0]}return W}const U=!!(P&&P.indexOf("Chrome")>=0),q=!!(P&&P.indexOf("Firefox")>=0),$=!!(!U&&P&&P.indexOf("Safari")>=0),j=!!(P&&P.indexOf("Edg/")>=0);P&&P.indexOf("Android")},93962:(e,t,i)=>{"use strict";i.d(t,{Jv:()=>l,OB:()=>a,Vj:()=>r});var n=i(47606);let o;const s=globalThis.vscode;if("undefined"!==typeof s&&"undefined"!==typeof s.process){const e=s.process;o={get platform(){return e.platform},get arch(){return e.arch},get env(){return e.env},cwd(){return e.cwd()}}}else o="undefined"!==typeof process?{get platform(){return process.platform},get arch(){return process.arch},get env(){return process.env},cwd(){return process.env["VSCODE_CWD"]||process.cwd()}}:{get platform(){return n.ED?"win32":n.dz?"darwin":"linux"},get arch(){},get env(){return{}},cwd(){return"/"}};const r=o.cwd,a=o.env,l=o.platform},68801:(e,t,i)=>{"use strict";var n;i.d(t,{e:()=>n}),function(e){function t(e,t){if(e.start>=t.end||t.start>=e.end)return{start:0,end:0};const i=Math.max(e.start,t.start),n=Math.min(e.end,t.end);return n-i<=0?{start:0,end:0}:{start:i,end:n}}function i(e){return e.end-e.start<=0}function n(e,n){return!i(t(e,n))}function o(e,t){const n=[],o={start:e.start,end:Math.min(t.start,e.end)},s={start:Math.max(t.end,e.start),end:e.end};return i(o)||n.push(o),i(s)||n.push(s),n}e.intersect=t,e.isEmpty=i,e.intersects=n,e.relativeComplement=o}(n||(n={}))},21230:(e,t,i)=>{"use strict";i.d(t,{AH:()=>_,DZ:()=>f,EZ:()=>p,Hx:()=>g,SF:()=>u,Vb:()=>C,Vo:()=>v,XX:()=>m,Xy:()=>h,i3:()=>y,lX:()=>b,z_:()=>c});var n=i(1535),o=i(50200),s=i(19912),r=i(47606),a=i(61720),l=i(95896);function c(e){return(0,l.q)(e,!0)}class d{constructor(e){this._ignorePathCasing=e}compare(e,t,i=!1){return e===t?0:(0,a.qu)(this.getComparisonKey(e,i),this.getComparisonKey(t,i))}isEqual(e,t,i=!1){return e===t||!(!e||!t)&&this.getComparisonKey(e,i)===this.getComparisonKey(t,i)}getComparisonKey(e,t=!1){return e.with({path:this._ignorePathCasing(e)?e.path.toLowerCase():void 0,fragment:t?null:void 0}).toString()}isEqualOrParent(e,t,i=!1){if(e.scheme===t.scheme){if(e.scheme===o.lg.file)return n.KM(c(e),c(t),this._ignorePathCasing(e))&&e.query===t.query&&(i||e.fragment===t.fragment);if(w(e.authority,t.authority))return n.KM(e.path,t.path,this._ignorePathCasing(e),"/")&&e.query===t.query&&(i||e.fragment===t.fragment)}return!1}joinPath(e,...t){return l.o.joinPath(e,...t)}basenameOrAuthority(e){return p(e)||e.authority}basename(e){return s.KR.basename(e.path)}extname(e){return s.KR.extname(e.path)}dirname(e){if(0===e.path.length)return e;let t;return e.scheme===o.lg.file?t=l.o.file(s.XX(c(e))).path:(t=s.KR.dirname(e.path),e.authority&&t.length&&47!==t.charCodeAt(0)&&(console.error(`dirname("${e.toString})) resulted in a relative path`),t="/")),e.with({path:t})}normalizePath(e){if(!e.path.length)return e;let t;return t=e.scheme===o.lg.file?l.o.file(s.Fv(c(e))).path:s.KR.normalize(e.path),e.with({path:t})}relativePath(e,t){if(e.scheme!==t.scheme||!w(e.authority,t.authority))return;if(e.scheme===o.lg.file){const i=s.Gf(c(e),c(t));return r.ED?n.ej(i):i}let i=e.path||"/";const a=t.path||"/";if(this._ignorePathCasing(e)){let e=0;for(const t=Math.min(i.length,a.length);en.yj(i).length&&i[i.length-1]===t}{const t=e.path;return t.length>1&&47===t.charCodeAt(t.length-1)&&!/^[a-zA-Z]:(\/$|\\$)/.test(e.fsPath)}}removeTrailingPathSeparator(e,t=s.ir){return x(e,t)?e.with({path:e.path.substr(0,e.path.length-1)}):e}addTrailingPathSeparator(e,t=s.ir){let i=!1;if(e.scheme===o.lg.file){const o=c(e);i=void 0!==o&&o.length===n.yj(o).length&&o[o.length-1]===t}else{t="/";const n=e.path;i=1===n.length&&47===n.charCodeAt(n.length-1)}return i||x(e,t)?e:e.with({path:e.path+"/"})}}const u=new d((()=>!1)),h=(new d((e=>e.scheme!==o.lg.file||!r.IJ)),new d((e=>!0)),u.isEqual.bind(u)),g=(u.isEqualOrParent.bind(u),u.getComparisonKey.bind(u),u.basenameOrAuthority.bind(u)),p=u.basename.bind(u),f=u.extname.bind(u),m=u.dirname.bind(u),v=u.joinPath.bind(u),_=u.normalizePath.bind(u),b=u.relativePath.bind(u),y=u.resolvePath.bind(u),w=(u.isAbsolutePath.bind(u),u.isEqualAuthority.bind(u)),x=u.hasTrailingPathSeparator.bind(u);u.removeTrailingPathSeparator.bind(u),u.addTrailingPathSeparator.bind(u);var C;(function(e){function t(t){const i=new Map,n=t.path.substring(t.path.indexOf(";")+1,t.path.lastIndexOf(";"));n.split(";").forEach((e=>{const[t,n]=e.split(":");t&&n&&i.set(t,n)}));const o=t.path.substring(0,t.path.indexOf(";"));return o&&i.set(e.META_DATA_MIME,o),i}e.META_DATA_LABEL="label",e.META_DATA_DESCRIPTION="description",e.META_DATA_SIZE="size",e.META_DATA_MIME="mime",e.parseMetaData=t})(C||(C={}))},4225:(e,t,i)=>{"use strict";i.d(t,{Rm:()=>r});var n=i(11271),o=i(70959);class s{constructor(e,t,i,n,o,s,r){this._forceIntegerValues=e,this._scrollStateBrand=void 0,this._forceIntegerValues&&(t|=0,i|=0,n|=0,o|=0,s|=0,r|=0),this.rawScrollLeft=n,this.rawScrollTop=r,t<0&&(t=0),n+t>i&&(n=i-t),n<0&&(n=0),o<0&&(o=0),r+o>s&&(r=s-o),r<0&&(r=0),this.width=t,this.scrollWidth=i,this.scrollLeft=n,this.height=o,this.scrollHeight=s,this.scrollTop=r}equals(e){return this.rawScrollLeft===e.rawScrollLeft&&this.rawScrollTop===e.rawScrollTop&&this.width===e.width&&this.scrollWidth===e.scrollWidth&&this.scrollLeft===e.scrollLeft&&this.height===e.height&&this.scrollHeight===e.scrollHeight&&this.scrollTop===e.scrollTop}withScrollDimensions(e,t){return new s(this._forceIntegerValues,"undefined"!==typeof e.width?e.width:this.width,"undefined"!==typeof e.scrollWidth?e.scrollWidth:this.scrollWidth,t?this.rawScrollLeft:this.scrollLeft,"undefined"!==typeof e.height?e.height:this.height,"undefined"!==typeof e.scrollHeight?e.scrollHeight:this.scrollHeight,t?this.rawScrollTop:this.scrollTop)}withScrollPosition(e){return new s(this._forceIntegerValues,this.width,this.scrollWidth,"undefined"!==typeof e.scrollLeft?e.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,"undefined"!==typeof e.scrollTop?e.scrollTop:this.rawScrollTop)}createScrollEvent(e,t){const i=this.width!==e.width,n=this.scrollWidth!==e.scrollWidth,o=this.scrollLeft!==e.scrollLeft,s=this.height!==e.height,r=this.scrollHeight!==e.scrollHeight,a=this.scrollTop!==e.scrollTop;return{inSmoothScrolling:t,oldWidth:e.width,oldScrollWidth:e.scrollWidth,oldScrollLeft:e.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:e.height,oldScrollHeight:e.scrollHeight,oldScrollTop:e.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:i,scrollWidthChanged:n,scrollLeftChanged:o,heightChanged:s,scrollHeightChanged:r,scrollTopChanged:a}}}class r extends o.JT{constructor(e){super(),this._scrollableBrand=void 0,this._onScroll=this._register(new n.Q5),this.onScroll=this._onScroll.event,this._smoothScrollDuration=e.smoothScrollDuration,this._scheduleAtNextAnimationFrame=e.scheduleAtNextAnimationFrame,this._state=new s(e.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){var i;const n=this._state.withScrollDimensions(e,t);this._setState(n,Boolean(this._smoothScrolling)),null===(i=this._smoothScrolling)||void 0===i||i.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){const t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(0===this._smoothScrollDuration)return this.setScrollPositionNow(e);if(this._smoothScrolling){e={scrollLeft:"undefined"===typeof e.scrollLeft?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:"undefined"===typeof e.scrollTop?this._smoothScrolling.to.scrollTop:e.scrollTop};const i=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===i.scrollLeft&&this._smoothScrolling.to.scrollTop===i.scrollTop)return;let n;n=t?new d(this._smoothScrolling.from,i,this._smoothScrolling.startTime,this._smoothScrolling.duration):this._smoothScrolling.combine(this._state,i,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=n}else{const t=this._state.withScrollPosition(e);this._smoothScrolling=d.start(this._state,t,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame((()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())}))}hasPendingScrollAnimation(){return Boolean(this._smoothScrolling)}_performSmoothScrolling(){if(!this._smoothScrolling)return;const e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);return this._setState(t,!0),this._smoothScrolling?e.isDone?(this._smoothScrolling.dispose(),void(this._smoothScrolling=null)):void(this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame((()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())}))):void 0}_setState(e,t){const i=this._state;i.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(i,t)))}}class a{constructor(e,t,i){this.scrollLeft=e,this.scrollTop=t,this.isDone=i}}function l(e,t){const i=t-e;return function(t){return e+i*h(t)}}function c(e,t,i){return function(n){return n2.5*i){let n,o;return e{"use strict";i.d(t,{Z:()=>s});var n,o=i(61720);(function(e){e[e["Ignore"]=0]="Ignore",e[e["Info"]=1]="Info",e[e["Warning"]=2]="Warning",e[e["Error"]=3]="Error"})(n||(n={})),function(e){const t="error",i="warning",n="warn",s="info",r="ignore";function a(r){return r?o.qq(t,r)?e.Error:o.qq(i,r)||o.qq(n,r)?e.Warning:o.qq(s,r)?e.Info:e.Ignore:e.Ignore}function l(n){switch(n){case e.Error:return t;case e.Warning:return i;case e.Info:return s;default:return r}}e.fromValue=a,e.toString=l}(n||(n={}));const s=n},96729:(e,t,i)=>{"use strict";i.d(t,{G:()=>o});const n=globalThis.performance&&"function"===typeof globalThis.performance.now;class o{static create(e){return new o(e)}constructor(e){this._now=n&&!1===e?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}elapsed(){return-1!==this._stopTime?this._stopTime-this._startTime:this._now()-this._startTime}}},61720:(e,t,i)=>{"use strict";i.d(t,{$i:()=>K,B4:()=>le,C8:()=>Z,GF:()=>m,HO:()=>V,IO:()=>v,J_:()=>z,K7:()=>X,Kw:()=>ee,LC:()=>b,Mh:()=>A,P1:()=>I,PJ:()=>te,Qe:()=>G,R1:()=>f,T5:()=>L,TT:()=>C,Ut:()=>$,V8:()=>y,W1:()=>H,WU:()=>l,YK:()=>M,YU:()=>c,ZG:()=>R,ZH:()=>O,ZK:()=>ce,ab:()=>Y,c1:()=>Q,df:()=>N,ec:()=>d,fy:()=>u,j3:()=>h,j_:()=>k,m5:()=>r,mK:()=>E,oH:()=>se,oL:()=>g,ok:()=>T,ow:()=>w,qq:()=>D,qu:()=>x,rL:()=>P,uS:()=>J,un:()=>p,uq:()=>_,vH:()=>W,vU:()=>de,zY:()=>S});var n,o=i(60857),s=i(21815);function r(e){return!e||"string"!==typeof e||0===e.trim().length}const a=/{(\d+)}/g;function l(e,...t){return 0===t.length?e:e.replace(a,(function(e,i){const n=parseInt(i,10);return isNaN(n)||n<0||n>=t.length?e:t[n]}))}function c(e){return e.replace(/[<>&]/g,(function(e){switch(e){case"<":return"<";case">":return">";case"&":return"&";default:return e}}))}function d(e){return e.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g,"\\$&")}function u(e,t=" "){const i=h(e,t);return g(i,t)}function h(e,t){if(!e||!t)return e;const i=t.length;if(0===i||0===e.length)return e;let n=0;while(e.indexOf(t,n)===n)n+=i;return e.substring(n)}function g(e,t){if(!e||!t)return e;const i=t.length,n=e.length;if(0===i||0===n)return e;let o=n,s=-1;while(1){if(s=e.lastIndexOf(t,o-1),-1===s||s+i!==o)break;if(0===s)return"";o=s}return e.substring(0,o)}function p(e){return e.replace(/[\-\\\{\}\+\?\|\^\$\.\,\[\]\(\)\#\s]/g,"\\$&").replace(/[\*]/g,".*")}function f(e){return e.replace(/\*/g,"")}function m(e,t,i={}){if(!e)throw new Error("Cannot create regex from empty string");t||(e=d(e)),i.wholeWord&&(/\B/.test(e.charAt(0))||(e="\\b"+e),/\B/.test(e.charAt(e.length-1))||(e+="\\b"));let n="";return i.global&&(n+="g"),i.matchCase||(n+="i"),i.multiline&&(n+="m"),i.unicode&&(n+="u"),new RegExp(e,n)}function v(e){if("^"===e.source||"^$"===e.source||"$"===e.source||"^\\s*$"===e.source)return!1;const t=e.exec("");return!(!t||0!==e.lastIndex)}function _(e){return e.split(/\r\n|\r|\n/)}function b(e){for(let t=0,i=e.length;t=0;i--){const t=e.charCodeAt(i);if(32!==t&&9!==t)return i}return-1}function x(e,t){return et?1:0}function C(e,t,i=0,n=e.length,o=0,s=t.length){for(;is)return 1}const r=n-i,a=s-o;return ra?1:0}function S(e,t){return k(e,t,0,e.length,0,t.length)}function k(e,t,i=0,n=e.length,o=0,s=t.length){for(;i=128||a>=128)return C(e.toLowerCase(),t.toLowerCase(),i,n,o,s);E(r)&&(r-=32),E(a)&&(a-=32);const l=r-a;if(0!==l)return l}const r=n-i,a=s-o;return ra?1:0}function L(e){return e>=48&&e<=57}function E(e){return e>=97&&e<=122}function N(e){return e>=65&&e<=90}function D(e,t){return e.length===t.length&&0===k(e,t)}function T(e,t){const i=t.length;return!(t.length>e.length)&&0===k(e,t,0,i)}function A(e,t){const i=Math.min(e.length,t.length);let n;for(n=0;n1){const n=e.charCodeAt(t-2);if(R(n))return P(n,i)}return i}class B{get offset(){return this._offset}constructor(e,t=0){this._str=e,this._len=e.length,this._offset=t}setOffset(e){this._offset=e}prevCodePoint(){const e=F(this._str,this._offset);return this._offset-=e>=65536?2:1,e}nextCodePoint(){const e=O(this._str,this._len,this._offset);return this._offset+=e>=65536?2:1,e}eol(){return this._offset>=this._len}}class H{get offset(){return this._iterator.offset}constructor(e,t=0){this._iterator=new B(e,t)}nextGraphemeLength(){const e=ne.getInstance(),t=this._iterator,i=t.offset;let n=e.getGraphemeBreakType(t.nextCodePoint());while(!t.eol()){const i=t.offset,o=e.getGraphemeBreakType(t.nextCodePoint());if(ie(n,o)){t.setOffset(i);break}n=o}return t.offset-i}prevGraphemeLength(){const e=ne.getInstance(),t=this._iterator,i=t.offset;let n=e.getGraphemeBreakType(t.prevCodePoint());while(t.offset>0){const i=t.offset,o=e.getGraphemeBreakType(t.prevCodePoint());if(ie(o,n)){t.setOffset(i);break}n=o}return i-t.offset}eol(){return this._iterator.eol()}}function W(e,t){const i=new H(e,t);return i.nextGraphemeLength()}function V(e,t){const i=new H(e,t);return i.prevGraphemeLength()}function z(e,t){t>0&&M(e.charCodeAt(t))&&t--;const i=t+W(e,t),n=i-V(e,i);return[n,i]}let U;function q(){return/(?:[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05F4\u0608\u060B\u060D\u061B-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u0710\u0712-\u072F\u074D-\u07A5\u07B1-\u07EA\u07F4\u07F5\u07FA\u07FE-\u0815\u081A\u0824\u0828\u0830-\u0858\u085E-\u088E\u08A0-\u08C9\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFD3D\uFD50-\uFDC7\uFDF0-\uFDFC\uFE70-\uFEFC]|\uD802[\uDC00-\uDD1B\uDD20-\uDE00\uDE10-\uDE35\uDE40-\uDEE4\uDEEB-\uDF35\uDF40-\uDFFF]|\uD803[\uDC00-\uDD23\uDE80-\uDEA9\uDEAD-\uDF45\uDF51-\uDF81\uDF86-\uDFF6]|\uD83A[\uDC00-\uDCCF\uDD00-\uDD43\uDD4B-\uDFFF]|\uD83B[\uDC00-\uDEBB])/}function $(e){return U||(U=q()),U.test(e)}const j=/^[\t\n\r\x20-\x7E]*$/;function K(e){return j.test(e)}const G=/[\u2028\u2029]/;function Y(e){return G.test(e)}function X(e){return e>=11904&&e<=55215||e>=63744&&e<=64255||e>=65281&&e<=65374}function Z(e){return e>=127462&&e<=127487||8986===e||8987===e||9200===e||9203===e||e>=9728&&e<=10175||11088===e||11093===e||e>=127744&&e<=128591||e>=128640&&e<=128764||e>=128992&&e<=129008||e>=129280&&e<=129535||e>=129648&&e<=129782}const Q=String.fromCharCode(65279);function J(e){return!!(e&&e.length>0&&65279===e.charCodeAt(0))}function ee(e,t=!1){return!!e&&(t&&(e=e.replace(/\\./g,"")),e.toLowerCase()!==e)}function te(e){const t=26;return e%=2*t,et[3*n+1]))return t[3*n+2];n=2*n+1}return 0}}function oe(){return JSON.parse("[0,0,0,51229,51255,12,44061,44087,12,127462,127487,6,7083,7085,5,47645,47671,12,54813,54839,12,128678,128678,14,3270,3270,5,9919,9923,14,45853,45879,12,49437,49463,12,53021,53047,12,71216,71218,7,128398,128399,14,129360,129374,14,2519,2519,5,4448,4519,9,9742,9742,14,12336,12336,14,44957,44983,12,46749,46775,12,48541,48567,12,50333,50359,12,52125,52151,12,53917,53943,12,69888,69890,5,73018,73018,5,127990,127990,14,128558,128559,14,128759,128760,14,129653,129655,14,2027,2035,5,2891,2892,7,3761,3761,5,6683,6683,5,8293,8293,4,9825,9826,14,9999,9999,14,43452,43453,5,44509,44535,12,45405,45431,12,46301,46327,12,47197,47223,12,48093,48119,12,48989,49015,12,49885,49911,12,50781,50807,12,51677,51703,12,52573,52599,12,53469,53495,12,54365,54391,12,65279,65279,4,70471,70472,7,72145,72147,7,119173,119179,5,127799,127818,14,128240,128244,14,128512,128512,14,128652,128652,14,128721,128722,14,129292,129292,14,129445,129450,14,129734,129743,14,1476,1477,5,2366,2368,7,2750,2752,7,3076,3076,5,3415,3415,5,4141,4144,5,6109,6109,5,6964,6964,5,7394,7400,5,9197,9198,14,9770,9770,14,9877,9877,14,9968,9969,14,10084,10084,14,43052,43052,5,43713,43713,5,44285,44311,12,44733,44759,12,45181,45207,12,45629,45655,12,46077,46103,12,46525,46551,12,46973,46999,12,47421,47447,12,47869,47895,12,48317,48343,12,48765,48791,12,49213,49239,12,49661,49687,12,50109,50135,12,50557,50583,12,51005,51031,12,51453,51479,12,51901,51927,12,52349,52375,12,52797,52823,12,53245,53271,12,53693,53719,12,54141,54167,12,54589,54615,12,55037,55063,12,69506,69509,5,70191,70193,5,70841,70841,7,71463,71467,5,72330,72342,5,94031,94031,5,123628,123631,5,127763,127765,14,127941,127941,14,128043,128062,14,128302,128317,14,128465,128467,14,128539,128539,14,128640,128640,14,128662,128662,14,128703,128703,14,128745,128745,14,129004,129007,14,129329,129330,14,129402,129402,14,129483,129483,14,129686,129704,14,130048,131069,14,173,173,4,1757,1757,1,2200,2207,5,2434,2435,7,2631,2632,5,2817,2817,5,3008,3008,5,3201,3201,5,3387,3388,5,3542,3542,5,3902,3903,7,4190,4192,5,6002,6003,5,6439,6440,5,6765,6770,7,7019,7027,5,7154,7155,7,8205,8205,13,8505,8505,14,9654,9654,14,9757,9757,14,9792,9792,14,9852,9853,14,9890,9894,14,9937,9937,14,9981,9981,14,10035,10036,14,11035,11036,14,42654,42655,5,43346,43347,7,43587,43587,5,44006,44007,7,44173,44199,12,44397,44423,12,44621,44647,12,44845,44871,12,45069,45095,12,45293,45319,12,45517,45543,12,45741,45767,12,45965,45991,12,46189,46215,12,46413,46439,12,46637,46663,12,46861,46887,12,47085,47111,12,47309,47335,12,47533,47559,12,47757,47783,12,47981,48007,12,48205,48231,12,48429,48455,12,48653,48679,12,48877,48903,12,49101,49127,12,49325,49351,12,49549,49575,12,49773,49799,12,49997,50023,12,50221,50247,12,50445,50471,12,50669,50695,12,50893,50919,12,51117,51143,12,51341,51367,12,51565,51591,12,51789,51815,12,52013,52039,12,52237,52263,12,52461,52487,12,52685,52711,12,52909,52935,12,53133,53159,12,53357,53383,12,53581,53607,12,53805,53831,12,54029,54055,12,54253,54279,12,54477,54503,12,54701,54727,12,54925,54951,12,55149,55175,12,68101,68102,5,69762,69762,7,70067,70069,7,70371,70378,5,70720,70721,7,71087,71087,5,71341,71341,5,71995,71996,5,72249,72249,7,72850,72871,5,73109,73109,5,118576,118598,5,121505,121519,5,127245,127247,14,127568,127569,14,127777,127777,14,127872,127891,14,127956,127967,14,128015,128016,14,128110,128172,14,128259,128259,14,128367,128368,14,128424,128424,14,128488,128488,14,128530,128532,14,128550,128551,14,128566,128566,14,128647,128647,14,128656,128656,14,128667,128673,14,128691,128693,14,128715,128715,14,128728,128732,14,128752,128752,14,128765,128767,14,129096,129103,14,129311,129311,14,129344,129349,14,129394,129394,14,129413,129425,14,129466,129471,14,129511,129535,14,129664,129666,14,129719,129722,14,129760,129767,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2307,2307,7,2382,2383,7,2497,2500,5,2563,2563,7,2677,2677,5,2763,2764,7,2879,2879,5,2914,2915,5,3021,3021,5,3142,3144,5,3263,3263,5,3285,3286,5,3398,3400,7,3530,3530,5,3633,3633,5,3864,3865,5,3974,3975,5,4155,4156,7,4229,4230,5,5909,5909,7,6078,6085,7,6277,6278,5,6451,6456,7,6744,6750,5,6846,6846,5,6972,6972,5,7074,7077,5,7146,7148,7,7222,7223,5,7416,7417,5,8234,8238,4,8417,8417,5,9000,9000,14,9203,9203,14,9730,9731,14,9748,9749,14,9762,9763,14,9776,9783,14,9800,9811,14,9831,9831,14,9872,9873,14,9882,9882,14,9900,9903,14,9929,9933,14,9941,9960,14,9974,9974,14,9989,9989,14,10006,10006,14,10062,10062,14,10160,10160,14,11647,11647,5,12953,12953,14,43019,43019,5,43232,43249,5,43443,43443,5,43567,43568,7,43696,43696,5,43765,43765,7,44013,44013,5,44117,44143,12,44229,44255,12,44341,44367,12,44453,44479,12,44565,44591,12,44677,44703,12,44789,44815,12,44901,44927,12,45013,45039,12,45125,45151,12,45237,45263,12,45349,45375,12,45461,45487,12,45573,45599,12,45685,45711,12,45797,45823,12,45909,45935,12,46021,46047,12,46133,46159,12,46245,46271,12,46357,46383,12,46469,46495,12,46581,46607,12,46693,46719,12,46805,46831,12,46917,46943,12,47029,47055,12,47141,47167,12,47253,47279,12,47365,47391,12,47477,47503,12,47589,47615,12,47701,47727,12,47813,47839,12,47925,47951,12,48037,48063,12,48149,48175,12,48261,48287,12,48373,48399,12,48485,48511,12,48597,48623,12,48709,48735,12,48821,48847,12,48933,48959,12,49045,49071,12,49157,49183,12,49269,49295,12,49381,49407,12,49493,49519,12,49605,49631,12,49717,49743,12,49829,49855,12,49941,49967,12,50053,50079,12,50165,50191,12,50277,50303,12,50389,50415,12,50501,50527,12,50613,50639,12,50725,50751,12,50837,50863,12,50949,50975,12,51061,51087,12,51173,51199,12,51285,51311,12,51397,51423,12,51509,51535,12,51621,51647,12,51733,51759,12,51845,51871,12,51957,51983,12,52069,52095,12,52181,52207,12,52293,52319,12,52405,52431,12,52517,52543,12,52629,52655,12,52741,52767,12,52853,52879,12,52965,52991,12,53077,53103,12,53189,53215,12,53301,53327,12,53413,53439,12,53525,53551,12,53637,53663,12,53749,53775,12,53861,53887,12,53973,53999,12,54085,54111,12,54197,54223,12,54309,54335,12,54421,54447,12,54533,54559,12,54645,54671,12,54757,54783,12,54869,54895,12,54981,55007,12,55093,55119,12,55243,55291,10,66045,66045,5,68325,68326,5,69688,69702,5,69817,69818,5,69957,69958,7,70089,70092,5,70198,70199,5,70462,70462,5,70502,70508,5,70750,70750,5,70846,70846,7,71100,71101,5,71230,71230,7,71351,71351,5,71737,71738,5,72000,72000,7,72160,72160,5,72273,72278,5,72752,72758,5,72882,72883,5,73031,73031,5,73461,73462,7,94192,94193,7,119149,119149,7,121403,121452,5,122915,122916,5,126980,126980,14,127358,127359,14,127535,127535,14,127759,127759,14,127771,127771,14,127792,127793,14,127825,127867,14,127897,127899,14,127945,127945,14,127985,127986,14,128000,128007,14,128021,128021,14,128066,128100,14,128184,128235,14,128249,128252,14,128266,128276,14,128335,128335,14,128379,128390,14,128407,128419,14,128444,128444,14,128481,128481,14,128499,128499,14,128526,128526,14,128536,128536,14,128543,128543,14,128556,128556,14,128564,128564,14,128577,128580,14,128643,128645,14,128649,128649,14,128654,128654,14,128660,128660,14,128664,128664,14,128675,128675,14,128686,128689,14,128695,128696,14,128705,128709,14,128717,128719,14,128725,128725,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129009,129023,14,129160,129167,14,129296,129304,14,129320,129327,14,129340,129342,14,129356,129356,14,129388,129392,14,129399,129400,14,129404,129407,14,129432,129442,14,129454,129455,14,129473,129474,14,129485,129487,14,129648,129651,14,129659,129660,14,129671,129679,14,129709,129711,14,129728,129730,14,129751,129753,14,129776,129782,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2274,2274,1,2363,2363,7,2377,2380,7,2402,2403,5,2494,2494,5,2507,2508,7,2558,2558,5,2622,2624,7,2641,2641,5,2691,2691,7,2759,2760,5,2786,2787,5,2876,2876,5,2881,2884,5,2901,2902,5,3006,3006,5,3014,3016,7,3072,3072,5,3134,3136,5,3157,3158,5,3260,3260,5,3266,3266,5,3274,3275,7,3328,3329,5,3391,3392,7,3405,3405,5,3457,3457,5,3536,3537,7,3551,3551,5,3636,3642,5,3764,3772,5,3895,3895,5,3967,3967,7,3993,4028,5,4146,4151,5,4182,4183,7,4226,4226,5,4253,4253,5,4957,4959,5,5940,5940,7,6070,6070,7,6087,6088,7,6158,6158,4,6432,6434,5,6448,6449,7,6679,6680,5,6742,6742,5,6754,6754,5,6783,6783,5,6912,6915,5,6966,6970,5,6978,6978,5,7042,7042,7,7080,7081,5,7143,7143,7,7150,7150,7,7212,7219,5,7380,7392,5,7412,7412,5,8203,8203,4,8232,8232,4,8265,8265,14,8400,8412,5,8421,8432,5,8617,8618,14,9167,9167,14,9200,9200,14,9410,9410,14,9723,9726,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9774,14,9786,9786,14,9794,9794,14,9823,9823,14,9828,9828,14,9833,9850,14,9855,9855,14,9875,9875,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9935,9935,14,9939,9939,14,9962,9962,14,9972,9972,14,9978,9978,14,9986,9986,14,9997,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10133,10135,14,10548,10549,14,11093,11093,14,12330,12333,5,12441,12442,5,42608,42610,5,43010,43010,5,43045,43046,5,43188,43203,7,43302,43309,5,43392,43394,5,43446,43449,5,43493,43493,5,43571,43572,7,43597,43597,7,43703,43704,5,43756,43757,5,44003,44004,7,44009,44010,7,44033,44059,12,44089,44115,12,44145,44171,12,44201,44227,12,44257,44283,12,44313,44339,12,44369,44395,12,44425,44451,12,44481,44507,12,44537,44563,12,44593,44619,12,44649,44675,12,44705,44731,12,44761,44787,12,44817,44843,12,44873,44899,12,44929,44955,12,44985,45011,12,45041,45067,12,45097,45123,12,45153,45179,12,45209,45235,12,45265,45291,12,45321,45347,12,45377,45403,12,45433,45459,12,45489,45515,12,45545,45571,12,45601,45627,12,45657,45683,12,45713,45739,12,45769,45795,12,45825,45851,12,45881,45907,12,45937,45963,12,45993,46019,12,46049,46075,12,46105,46131,12,46161,46187,12,46217,46243,12,46273,46299,12,46329,46355,12,46385,46411,12,46441,46467,12,46497,46523,12,46553,46579,12,46609,46635,12,46665,46691,12,46721,46747,12,46777,46803,12,46833,46859,12,46889,46915,12,46945,46971,12,47001,47027,12,47057,47083,12,47113,47139,12,47169,47195,12,47225,47251,12,47281,47307,12,47337,47363,12,47393,47419,12,47449,47475,12,47505,47531,12,47561,47587,12,47617,47643,12,47673,47699,12,47729,47755,12,47785,47811,12,47841,47867,12,47897,47923,12,47953,47979,12,48009,48035,12,48065,48091,12,48121,48147,12,48177,48203,12,48233,48259,12,48289,48315,12,48345,48371,12,48401,48427,12,48457,48483,12,48513,48539,12,48569,48595,12,48625,48651,12,48681,48707,12,48737,48763,12,48793,48819,12,48849,48875,12,48905,48931,12,48961,48987,12,49017,49043,12,49073,49099,12,49129,49155,12,49185,49211,12,49241,49267,12,49297,49323,12,49353,49379,12,49409,49435,12,49465,49491,12,49521,49547,12,49577,49603,12,49633,49659,12,49689,49715,12,49745,49771,12,49801,49827,12,49857,49883,12,49913,49939,12,49969,49995,12,50025,50051,12,50081,50107,12,50137,50163,12,50193,50219,12,50249,50275,12,50305,50331,12,50361,50387,12,50417,50443,12,50473,50499,12,50529,50555,12,50585,50611,12,50641,50667,12,50697,50723,12,50753,50779,12,50809,50835,12,50865,50891,12,50921,50947,12,50977,51003,12,51033,51059,12,51089,51115,12,51145,51171,12,51201,51227,12,51257,51283,12,51313,51339,12,51369,51395,12,51425,51451,12,51481,51507,12,51537,51563,12,51593,51619,12,51649,51675,12,51705,51731,12,51761,51787,12,51817,51843,12,51873,51899,12,51929,51955,12,51985,52011,12,52041,52067,12,52097,52123,12,52153,52179,12,52209,52235,12,52265,52291,12,52321,52347,12,52377,52403,12,52433,52459,12,52489,52515,12,52545,52571,12,52601,52627,12,52657,52683,12,52713,52739,12,52769,52795,12,52825,52851,12,52881,52907,12,52937,52963,12,52993,53019,12,53049,53075,12,53105,53131,12,53161,53187,12,53217,53243,12,53273,53299,12,53329,53355,12,53385,53411,12,53441,53467,12,53497,53523,12,53553,53579,12,53609,53635,12,53665,53691,12,53721,53747,12,53777,53803,12,53833,53859,12,53889,53915,12,53945,53971,12,54001,54027,12,54057,54083,12,54113,54139,12,54169,54195,12,54225,54251,12,54281,54307,12,54337,54363,12,54393,54419,12,54449,54475,12,54505,54531,12,54561,54587,12,54617,54643,12,54673,54699,12,54729,54755,12,54785,54811,12,54841,54867,12,54897,54923,12,54953,54979,12,55009,55035,12,55065,55091,12,55121,55147,12,55177,55203,12,65024,65039,5,65520,65528,4,66422,66426,5,68152,68154,5,69291,69292,5,69633,69633,5,69747,69748,5,69811,69814,5,69826,69826,5,69932,69932,7,70016,70017,5,70079,70080,7,70095,70095,5,70196,70196,5,70367,70367,5,70402,70403,7,70464,70464,5,70487,70487,5,70709,70711,7,70725,70725,7,70833,70834,7,70843,70844,7,70849,70849,7,71090,71093,5,71103,71104,5,71227,71228,7,71339,71339,5,71344,71349,5,71458,71461,5,71727,71735,5,71985,71989,7,71998,71998,5,72002,72002,7,72154,72155,5,72193,72202,5,72251,72254,5,72281,72283,5,72344,72345,5,72766,72766,7,72874,72880,5,72885,72886,5,73023,73029,5,73104,73105,5,73111,73111,5,92912,92916,5,94095,94098,5,113824,113827,4,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,125252,125258,5,127183,127183,14,127340,127343,14,127377,127386,14,127491,127503,14,127548,127551,14,127744,127756,14,127761,127761,14,127769,127769,14,127773,127774,14,127780,127788,14,127796,127797,14,127820,127823,14,127869,127869,14,127894,127895,14,127902,127903,14,127943,127943,14,127947,127950,14,127972,127972,14,127988,127988,14,127992,127994,14,128009,128011,14,128019,128019,14,128023,128041,14,128064,128064,14,128102,128107,14,128174,128181,14,128238,128238,14,128246,128247,14,128254,128254,14,128264,128264,14,128278,128299,14,128329,128330,14,128348,128359,14,128371,128377,14,128392,128393,14,128401,128404,14,128421,128421,14,128433,128434,14,128450,128452,14,128476,128478,14,128483,128483,14,128495,128495,14,128506,128506,14,128519,128520,14,128528,128528,14,128534,128534,14,128538,128538,14,128540,128542,14,128544,128549,14,128552,128555,14,128557,128557,14,128560,128563,14,128565,128565,14,128567,128576,14,128581,128591,14,128641,128642,14,128646,128646,14,128648,128648,14,128650,128651,14,128653,128653,14,128655,128655,14,128657,128659,14,128661,128661,14,128663,128663,14,128665,128666,14,128674,128674,14,128676,128677,14,128679,128685,14,128690,128690,14,128694,128694,14,128697,128702,14,128704,128704,14,128710,128714,14,128716,128716,14,128720,128720,14,128723,128724,14,128726,128727,14,128733,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129008,129008,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129661,129663,14,129667,129670,14,129680,129685,14,129705,129708,14,129712,129718,14,129723,129727,14,129731,129733,14,129744,129750,14,129754,129759,14,129768,129775,14,129783,129791,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2192,2193,1,2250,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3132,3132,5,3137,3140,7,3146,3149,5,3170,3171,5,3202,3203,7,3262,3262,7,3264,3265,7,3267,3268,7,3271,3272,7,3276,3277,5,3298,3299,5,3330,3331,7,3390,3390,5,3393,3396,5,3402,3404,7,3406,3406,1,3426,3427,5,3458,3459,7,3535,3535,5,3538,3540,5,3544,3550,7,3570,3571,7,3635,3635,7,3655,3662,5,3763,3763,7,3784,3789,5,3893,3893,5,3897,3897,5,3953,3966,5,3968,3972,5,3981,3991,5,4038,4038,5,4145,4145,7,4153,4154,5,4157,4158,5,4184,4185,5,4209,4212,5,4228,4228,7,4237,4237,5,4352,4447,8,4520,4607,10,5906,5908,5,5938,5939,5,5970,5971,5,6068,6069,5,6071,6077,5,6086,6086,5,6089,6099,5,6155,6157,5,6159,6159,5,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6862,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7679,5,8204,8204,5,8206,8207,4,8233,8233,4,8252,8252,14,8288,8292,4,8294,8303,4,8413,8416,5,8418,8420,5,8482,8482,14,8596,8601,14,8986,8987,14,9096,9096,14,9193,9196,14,9199,9199,14,9201,9202,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9729,14,9732,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9775,9775,14,9784,9785,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9874,14,9876,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9934,14,9936,9936,14,9938,9938,14,9940,9940,14,9961,9961,14,9963,9967,14,9970,9971,14,9973,9973,14,9975,9977,14,9979,9980,14,9982,9985,14,9987,9988,14,9992,9996,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10083,14,10085,10087,14,10145,10145,14,10175,10175,14,11013,11015,14,11088,11088,14,11503,11505,5,11744,11775,5,12334,12335,5,12349,12349,14,12951,12951,14,42607,42607,5,42612,42621,5,42736,42737,5,43014,43014,5,43043,43044,7,43047,43047,7,43136,43137,7,43204,43205,5,43263,43263,5,43335,43345,5,43360,43388,8,43395,43395,7,43444,43445,7,43450,43451,7,43454,43456,7,43561,43566,5,43569,43570,5,43573,43574,5,43596,43596,5,43644,43644,5,43698,43700,5,43710,43711,5,43755,43755,7,43758,43759,7,43766,43766,5,44005,44005,5,44008,44008,5,44012,44012,7,44032,44032,11,44060,44060,11,44088,44088,11,44116,44116,11,44144,44144,11,44172,44172,11,44200,44200,11,44228,44228,11,44256,44256,11,44284,44284,11,44312,44312,11,44340,44340,11,44368,44368,11,44396,44396,11,44424,44424,11,44452,44452,11,44480,44480,11,44508,44508,11,44536,44536,11,44564,44564,11,44592,44592,11,44620,44620,11,44648,44648,11,44676,44676,11,44704,44704,11,44732,44732,11,44760,44760,11,44788,44788,11,44816,44816,11,44844,44844,11,44872,44872,11,44900,44900,11,44928,44928,11,44956,44956,11,44984,44984,11,45012,45012,11,45040,45040,11,45068,45068,11,45096,45096,11,45124,45124,11,45152,45152,11,45180,45180,11,45208,45208,11,45236,45236,11,45264,45264,11,45292,45292,11,45320,45320,11,45348,45348,11,45376,45376,11,45404,45404,11,45432,45432,11,45460,45460,11,45488,45488,11,45516,45516,11,45544,45544,11,45572,45572,11,45600,45600,11,45628,45628,11,45656,45656,11,45684,45684,11,45712,45712,11,45740,45740,11,45768,45768,11,45796,45796,11,45824,45824,11,45852,45852,11,45880,45880,11,45908,45908,11,45936,45936,11,45964,45964,11,45992,45992,11,46020,46020,11,46048,46048,11,46076,46076,11,46104,46104,11,46132,46132,11,46160,46160,11,46188,46188,11,46216,46216,11,46244,46244,11,46272,46272,11,46300,46300,11,46328,46328,11,46356,46356,11,46384,46384,11,46412,46412,11,46440,46440,11,46468,46468,11,46496,46496,11,46524,46524,11,46552,46552,11,46580,46580,11,46608,46608,11,46636,46636,11,46664,46664,11,46692,46692,11,46720,46720,11,46748,46748,11,46776,46776,11,46804,46804,11,46832,46832,11,46860,46860,11,46888,46888,11,46916,46916,11,46944,46944,11,46972,46972,11,47000,47000,11,47028,47028,11,47056,47056,11,47084,47084,11,47112,47112,11,47140,47140,11,47168,47168,11,47196,47196,11,47224,47224,11,47252,47252,11,47280,47280,11,47308,47308,11,47336,47336,11,47364,47364,11,47392,47392,11,47420,47420,11,47448,47448,11,47476,47476,11,47504,47504,11,47532,47532,11,47560,47560,11,47588,47588,11,47616,47616,11,47644,47644,11,47672,47672,11,47700,47700,11,47728,47728,11,47756,47756,11,47784,47784,11,47812,47812,11,47840,47840,11,47868,47868,11,47896,47896,11,47924,47924,11,47952,47952,11,47980,47980,11,48008,48008,11,48036,48036,11,48064,48064,11,48092,48092,11,48120,48120,11,48148,48148,11,48176,48176,11,48204,48204,11,48232,48232,11,48260,48260,11,48288,48288,11,48316,48316,11,48344,48344,11,48372,48372,11,48400,48400,11,48428,48428,11,48456,48456,11,48484,48484,11,48512,48512,11,48540,48540,11,48568,48568,11,48596,48596,11,48624,48624,11,48652,48652,11,48680,48680,11,48708,48708,11,48736,48736,11,48764,48764,11,48792,48792,11,48820,48820,11,48848,48848,11,48876,48876,11,48904,48904,11,48932,48932,11,48960,48960,11,48988,48988,11,49016,49016,11,49044,49044,11,49072,49072,11,49100,49100,11,49128,49128,11,49156,49156,11,49184,49184,11,49212,49212,11,49240,49240,11,49268,49268,11,49296,49296,11,49324,49324,11,49352,49352,11,49380,49380,11,49408,49408,11,49436,49436,11,49464,49464,11,49492,49492,11,49520,49520,11,49548,49548,11,49576,49576,11,49604,49604,11,49632,49632,11,49660,49660,11,49688,49688,11,49716,49716,11,49744,49744,11,49772,49772,11,49800,49800,11,49828,49828,11,49856,49856,11,49884,49884,11,49912,49912,11,49940,49940,11,49968,49968,11,49996,49996,11,50024,50024,11,50052,50052,11,50080,50080,11,50108,50108,11,50136,50136,11,50164,50164,11,50192,50192,11,50220,50220,11,50248,50248,11,50276,50276,11,50304,50304,11,50332,50332,11,50360,50360,11,50388,50388,11,50416,50416,11,50444,50444,11,50472,50472,11,50500,50500,11,50528,50528,11,50556,50556,11,50584,50584,11,50612,50612,11,50640,50640,11,50668,50668,11,50696,50696,11,50724,50724,11,50752,50752,11,50780,50780,11,50808,50808,11,50836,50836,11,50864,50864,11,50892,50892,11,50920,50920,11,50948,50948,11,50976,50976,11,51004,51004,11,51032,51032,11,51060,51060,11,51088,51088,11,51116,51116,11,51144,51144,11,51172,51172,11,51200,51200,11,51228,51228,11,51256,51256,11,51284,51284,11,51312,51312,11,51340,51340,11,51368,51368,11,51396,51396,11,51424,51424,11,51452,51452,11,51480,51480,11,51508,51508,11,51536,51536,11,51564,51564,11,51592,51592,11,51620,51620,11,51648,51648,11,51676,51676,11,51704,51704,11,51732,51732,11,51760,51760,11,51788,51788,11,51816,51816,11,51844,51844,11,51872,51872,11,51900,51900,11,51928,51928,11,51956,51956,11,51984,51984,11,52012,52012,11,52040,52040,11,52068,52068,11,52096,52096,11,52124,52124,11,52152,52152,11,52180,52180,11,52208,52208,11,52236,52236,11,52264,52264,11,52292,52292,11,52320,52320,11,52348,52348,11,52376,52376,11,52404,52404,11,52432,52432,11,52460,52460,11,52488,52488,11,52516,52516,11,52544,52544,11,52572,52572,11,52600,52600,11,52628,52628,11,52656,52656,11,52684,52684,11,52712,52712,11,52740,52740,11,52768,52768,11,52796,52796,11,52824,52824,11,52852,52852,11,52880,52880,11,52908,52908,11,52936,52936,11,52964,52964,11,52992,52992,11,53020,53020,11,53048,53048,11,53076,53076,11,53104,53104,11,53132,53132,11,53160,53160,11,53188,53188,11,53216,53216,11,53244,53244,11,53272,53272,11,53300,53300,11,53328,53328,11,53356,53356,11,53384,53384,11,53412,53412,11,53440,53440,11,53468,53468,11,53496,53496,11,53524,53524,11,53552,53552,11,53580,53580,11,53608,53608,11,53636,53636,11,53664,53664,11,53692,53692,11,53720,53720,11,53748,53748,11,53776,53776,11,53804,53804,11,53832,53832,11,53860,53860,11,53888,53888,11,53916,53916,11,53944,53944,11,53972,53972,11,54000,54000,11,54028,54028,11,54056,54056,11,54084,54084,11,54112,54112,11,54140,54140,11,54168,54168,11,54196,54196,11,54224,54224,11,54252,54252,11,54280,54280,11,54308,54308,11,54336,54336,11,54364,54364,11,54392,54392,11,54420,54420,11,54448,54448,11,54476,54476,11,54504,54504,11,54532,54532,11,54560,54560,11,54588,54588,11,54616,54616,11,54644,54644,11,54672,54672,11,54700,54700,11,54728,54728,11,54756,54756,11,54784,54784,11,54812,54812,11,54840,54840,11,54868,54868,11,54896,54896,11,54924,54924,11,54952,54952,11,54980,54980,11,55008,55008,11,55036,55036,11,55064,55064,11,55092,55092,11,55120,55120,11,55148,55148,11,55176,55176,11,55216,55238,9,64286,64286,5,65056,65071,5,65438,65439,5,65529,65531,4,66272,66272,5,68097,68099,5,68108,68111,5,68159,68159,5,68900,68903,5,69446,69456,5,69632,69632,7,69634,69634,7,69744,69744,5,69759,69761,5,69808,69810,7,69815,69816,7,69821,69821,1,69837,69837,1,69927,69931,5,69933,69940,5,70003,70003,5,70018,70018,7,70070,70078,5,70082,70083,1,70094,70094,7,70188,70190,7,70194,70195,7,70197,70197,7,70206,70206,5,70368,70370,7,70400,70401,5,70459,70460,5,70463,70463,7,70465,70468,7,70475,70477,7,70498,70499,7,70512,70516,5,70712,70719,5,70722,70724,5,70726,70726,5,70832,70832,5,70835,70840,5,70842,70842,5,70845,70845,5,70847,70848,5,70850,70851,5,71088,71089,7,71096,71099,7,71102,71102,7,71132,71133,5,71219,71226,5,71229,71229,5,71231,71232,5,71340,71340,7,71342,71343,7,71350,71350,7,71453,71455,5,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,118528,118573,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123566,123566,5,125136,125142,5,126976,126979,14,126981,127182,14,127184,127231,14,127279,127279,14,127344,127345,14,127374,127374,14,127405,127461,14,127489,127490,14,127514,127514,14,127538,127546,14,127561,127567,14,127570,127743,14,127757,127758,14,127760,127760,14,127762,127762,14,127766,127768,14,127770,127770,14,127772,127772,14,127775,127776,14,127778,127779,14,127789,127791,14,127794,127795,14,127798,127798,14,127819,127819,14,127824,127824,14,127868,127868,14,127870,127871,14,127892,127893,14,127896,127896,14,127900,127901,14,127904,127940,14,127942,127942,14,127944,127944,14,127946,127946,14,127951,127955,14,127968,127971,14,127973,127984,14,127987,127987,14,127989,127989,14,127991,127991,14,127995,127999,5,128008,128008,14,128012,128014,14,128017,128018,14,128020,128020,14,128022,128022,14,128042,128042,14,128063,128063,14,128065,128065,14,128101,128101,14,128108,128109,14,128173,128173,14,128182,128183,14,128236,128237,14,128239,128239,14,128245,128245,14,128248,128248,14,128253,128253,14,128255,128258,14,128260,128263,14,128265,128265,14,128277,128277,14,128300,128301,14,128326,128328,14,128331,128334,14,128336,128347,14,128360,128366,14,128369,128370,14,128378,128378,14,128391,128391,14,128394,128397,14,128400,128400,14,128405,128406,14,128420,128420,14,128422,128423,14,128425,128432,14,128435,128443,14,128445,128449,14,128453,128464,14,128468,128475,14,128479,128480,14,128482,128482,14,128484,128487,14,128489,128494,14,128496,128498,14,128500,128505,14,128507,128511,14,128513,128518,14,128521,128525,14,128527,128527,14,128529,128529,14,128533,128533,14,128535,128535,14,128537,128537,14]")}function se(e,t){if(0===e)return 0;const i=re(e,t);if(void 0!==i)return i;const n=new B(t,e);return n.prevCodePoint(),n.offset}function re(e,t){const i=new B(t,e);let n=i.prevCodePoint();while(ae(n)||65039===n||8419===n){if(0===i.offset)return;n=i.prevCodePoint()}if(!Z(n))return;let o=i.offset;if(o>0){const e=i.prevCodePoint();8205===e&&(o=i.offset)}return o}function ae(e){return 127995<=e&&e<=127999}ne._INSTANCE=null;const le=" ";class ce{static getInstance(e){return n.cache.get(Array.from(e))}static getLocales(){return n._locales.value}constructor(e){this.confusableDictionary=e}isAmbiguous(e){return this.confusableDictionary.has(e)}getPrimaryConfusable(e){return this.confusableDictionary.get(e)}getConfusableCodePoints(){return new Set(this.confusableDictionary.keys())}}n=ce,ce.ambiguousCharacterData=new s.o((()=>JSON.parse('{"_common":[8232,32,8233,32,5760,32,8192,32,8193,32,8194,32,8195,32,8196,32,8197,32,8198,32,8200,32,8201,32,8202,32,8287,32,8199,32,8239,32,2042,95,65101,95,65102,95,65103,95,8208,45,8209,45,8210,45,65112,45,1748,45,8259,45,727,45,8722,45,10134,45,11450,45,1549,44,1643,44,8218,44,184,44,42233,44,894,59,2307,58,2691,58,1417,58,1795,58,1796,58,5868,58,65072,58,6147,58,6153,58,8282,58,1475,58,760,58,42889,58,8758,58,720,58,42237,58,451,33,11601,33,660,63,577,63,2429,63,5038,63,42731,63,119149,46,8228,46,1793,46,1794,46,42510,46,68176,46,1632,46,1776,46,42232,46,1373,96,65287,96,8219,96,8242,96,1370,96,1523,96,8175,96,65344,96,900,96,8189,96,8125,96,8127,96,8190,96,697,96,884,96,712,96,714,96,715,96,756,96,699,96,701,96,700,96,702,96,42892,96,1497,96,2036,96,2037,96,5194,96,5836,96,94033,96,94034,96,65339,91,10088,40,10098,40,12308,40,64830,40,65341,93,10089,41,10099,41,12309,41,64831,41,10100,123,119060,123,10101,125,65342,94,8270,42,1645,42,8727,42,66335,42,5941,47,8257,47,8725,47,8260,47,9585,47,10187,47,10744,47,119354,47,12755,47,12339,47,11462,47,20031,47,12035,47,65340,92,65128,92,8726,92,10189,92,10741,92,10745,92,119311,92,119355,92,12756,92,20022,92,12034,92,42872,38,708,94,710,94,5869,43,10133,43,66203,43,8249,60,10094,60,706,60,119350,60,5176,60,5810,60,5120,61,11840,61,12448,61,42239,61,8250,62,10095,62,707,62,119351,62,5171,62,94015,62,8275,126,732,126,8128,126,8764,126,65372,124,65293,45,120784,50,120794,50,120804,50,120814,50,120824,50,130034,50,42842,50,423,50,1000,50,42564,50,5311,50,42735,50,119302,51,120785,51,120795,51,120805,51,120815,51,120825,51,130035,51,42923,51,540,51,439,51,42858,51,11468,51,1248,51,94011,51,71882,51,120786,52,120796,52,120806,52,120816,52,120826,52,130036,52,5070,52,71855,52,120787,53,120797,53,120807,53,120817,53,120827,53,130037,53,444,53,71867,53,120788,54,120798,54,120808,54,120818,54,120828,54,130038,54,11474,54,5102,54,71893,54,119314,55,120789,55,120799,55,120809,55,120819,55,120829,55,130039,55,66770,55,71878,55,2819,56,2538,56,2666,56,125131,56,120790,56,120800,56,120810,56,120820,56,120830,56,130040,56,547,56,546,56,66330,56,2663,57,2920,57,2541,57,3437,57,120791,57,120801,57,120811,57,120821,57,120831,57,130041,57,42862,57,11466,57,71884,57,71852,57,71894,57,9082,97,65345,97,119834,97,119886,97,119938,97,119990,97,120042,97,120094,97,120146,97,120198,97,120250,97,120302,97,120354,97,120406,97,120458,97,593,97,945,97,120514,97,120572,97,120630,97,120688,97,120746,97,65313,65,119808,65,119860,65,119912,65,119964,65,120016,65,120068,65,120120,65,120172,65,120224,65,120276,65,120328,65,120380,65,120432,65,913,65,120488,65,120546,65,120604,65,120662,65,120720,65,5034,65,5573,65,42222,65,94016,65,66208,65,119835,98,119887,98,119939,98,119991,98,120043,98,120095,98,120147,98,120199,98,120251,98,120303,98,120355,98,120407,98,120459,98,388,98,5071,98,5234,98,5551,98,65314,66,8492,66,119809,66,119861,66,119913,66,120017,66,120069,66,120121,66,120173,66,120225,66,120277,66,120329,66,120381,66,120433,66,42932,66,914,66,120489,66,120547,66,120605,66,120663,66,120721,66,5108,66,5623,66,42192,66,66178,66,66209,66,66305,66,65347,99,8573,99,119836,99,119888,99,119940,99,119992,99,120044,99,120096,99,120148,99,120200,99,120252,99,120304,99,120356,99,120408,99,120460,99,7428,99,1010,99,11429,99,43951,99,66621,99,128844,67,71922,67,71913,67,65315,67,8557,67,8450,67,8493,67,119810,67,119862,67,119914,67,119966,67,120018,67,120174,67,120226,67,120278,67,120330,67,120382,67,120434,67,1017,67,11428,67,5087,67,42202,67,66210,67,66306,67,66581,67,66844,67,8574,100,8518,100,119837,100,119889,100,119941,100,119993,100,120045,100,120097,100,120149,100,120201,100,120253,100,120305,100,120357,100,120409,100,120461,100,1281,100,5095,100,5231,100,42194,100,8558,68,8517,68,119811,68,119863,68,119915,68,119967,68,120019,68,120071,68,120123,68,120175,68,120227,68,120279,68,120331,68,120383,68,120435,68,5024,68,5598,68,5610,68,42195,68,8494,101,65349,101,8495,101,8519,101,119838,101,119890,101,119942,101,120046,101,120098,101,120150,101,120202,101,120254,101,120306,101,120358,101,120410,101,120462,101,43826,101,1213,101,8959,69,65317,69,8496,69,119812,69,119864,69,119916,69,120020,69,120072,69,120124,69,120176,69,120228,69,120280,69,120332,69,120384,69,120436,69,917,69,120492,69,120550,69,120608,69,120666,69,120724,69,11577,69,5036,69,42224,69,71846,69,71854,69,66182,69,119839,102,119891,102,119943,102,119995,102,120047,102,120099,102,120151,102,120203,102,120255,102,120307,102,120359,102,120411,102,120463,102,43829,102,42905,102,383,102,7837,102,1412,102,119315,70,8497,70,119813,70,119865,70,119917,70,120021,70,120073,70,120125,70,120177,70,120229,70,120281,70,120333,70,120385,70,120437,70,42904,70,988,70,120778,70,5556,70,42205,70,71874,70,71842,70,66183,70,66213,70,66853,70,65351,103,8458,103,119840,103,119892,103,119944,103,120048,103,120100,103,120152,103,120204,103,120256,103,120308,103,120360,103,120412,103,120464,103,609,103,7555,103,397,103,1409,103,119814,71,119866,71,119918,71,119970,71,120022,71,120074,71,120126,71,120178,71,120230,71,120282,71,120334,71,120386,71,120438,71,1292,71,5056,71,5107,71,42198,71,65352,104,8462,104,119841,104,119945,104,119997,104,120049,104,120101,104,120153,104,120205,104,120257,104,120309,104,120361,104,120413,104,120465,104,1211,104,1392,104,5058,104,65320,72,8459,72,8460,72,8461,72,119815,72,119867,72,119919,72,120023,72,120179,72,120231,72,120283,72,120335,72,120387,72,120439,72,919,72,120494,72,120552,72,120610,72,120668,72,120726,72,11406,72,5051,72,5500,72,42215,72,66255,72,731,105,9075,105,65353,105,8560,105,8505,105,8520,105,119842,105,119894,105,119946,105,119998,105,120050,105,120102,105,120154,105,120206,105,120258,105,120310,105,120362,105,120414,105,120466,105,120484,105,618,105,617,105,953,105,8126,105,890,105,120522,105,120580,105,120638,105,120696,105,120754,105,1110,105,42567,105,1231,105,43893,105,5029,105,71875,105,65354,106,8521,106,119843,106,119895,106,119947,106,119999,106,120051,106,120103,106,120155,106,120207,106,120259,106,120311,106,120363,106,120415,106,120467,106,1011,106,1112,106,65322,74,119817,74,119869,74,119921,74,119973,74,120025,74,120077,74,120129,74,120181,74,120233,74,120285,74,120337,74,120389,74,120441,74,42930,74,895,74,1032,74,5035,74,5261,74,42201,74,119844,107,119896,107,119948,107,120000,107,120052,107,120104,107,120156,107,120208,107,120260,107,120312,107,120364,107,120416,107,120468,107,8490,75,65323,75,119818,75,119870,75,119922,75,119974,75,120026,75,120078,75,120130,75,120182,75,120234,75,120286,75,120338,75,120390,75,120442,75,922,75,120497,75,120555,75,120613,75,120671,75,120729,75,11412,75,5094,75,5845,75,42199,75,66840,75,1472,108,8739,73,9213,73,65512,73,1633,108,1777,73,66336,108,125127,108,120783,73,120793,73,120803,73,120813,73,120823,73,130033,73,65321,73,8544,73,8464,73,8465,73,119816,73,119868,73,119920,73,120024,73,120128,73,120180,73,120232,73,120284,73,120336,73,120388,73,120440,73,65356,108,8572,73,8467,108,119845,108,119897,108,119949,108,120001,108,120053,108,120105,73,120157,73,120209,73,120261,73,120313,73,120365,73,120417,73,120469,73,448,73,120496,73,120554,73,120612,73,120670,73,120728,73,11410,73,1030,73,1216,73,1493,108,1503,108,1575,108,126464,108,126592,108,65166,108,65165,108,1994,108,11599,73,5825,73,42226,73,93992,73,66186,124,66313,124,119338,76,8556,76,8466,76,119819,76,119871,76,119923,76,120027,76,120079,76,120131,76,120183,76,120235,76,120287,76,120339,76,120391,76,120443,76,11472,76,5086,76,5290,76,42209,76,93974,76,71843,76,71858,76,66587,76,66854,76,65325,77,8559,77,8499,77,119820,77,119872,77,119924,77,120028,77,120080,77,120132,77,120184,77,120236,77,120288,77,120340,77,120392,77,120444,77,924,77,120499,77,120557,77,120615,77,120673,77,120731,77,1018,77,11416,77,5047,77,5616,77,5846,77,42207,77,66224,77,66321,77,119847,110,119899,110,119951,110,120003,110,120055,110,120107,110,120159,110,120211,110,120263,110,120315,110,120367,110,120419,110,120471,110,1400,110,1404,110,65326,78,8469,78,119821,78,119873,78,119925,78,119977,78,120029,78,120081,78,120185,78,120237,78,120289,78,120341,78,120393,78,120445,78,925,78,120500,78,120558,78,120616,78,120674,78,120732,78,11418,78,42208,78,66835,78,3074,111,3202,111,3330,111,3458,111,2406,111,2662,111,2790,111,3046,111,3174,111,3302,111,3430,111,3664,111,3792,111,4160,111,1637,111,1781,111,65359,111,8500,111,119848,111,119900,111,119952,111,120056,111,120108,111,120160,111,120212,111,120264,111,120316,111,120368,111,120420,111,120472,111,7439,111,7441,111,43837,111,959,111,120528,111,120586,111,120644,111,120702,111,120760,111,963,111,120532,111,120590,111,120648,111,120706,111,120764,111,11423,111,4351,111,1413,111,1505,111,1607,111,126500,111,126564,111,126596,111,65259,111,65260,111,65258,111,65257,111,1726,111,64428,111,64429,111,64427,111,64426,111,1729,111,64424,111,64425,111,64423,111,64422,111,1749,111,3360,111,4125,111,66794,111,71880,111,71895,111,66604,111,1984,79,2534,79,2918,79,12295,79,70864,79,71904,79,120782,79,120792,79,120802,79,120812,79,120822,79,130032,79,65327,79,119822,79,119874,79,119926,79,119978,79,120030,79,120082,79,120134,79,120186,79,120238,79,120290,79,120342,79,120394,79,120446,79,927,79,120502,79,120560,79,120618,79,120676,79,120734,79,11422,79,1365,79,11604,79,4816,79,2848,79,66754,79,42227,79,71861,79,66194,79,66219,79,66564,79,66838,79,9076,112,65360,112,119849,112,119901,112,119953,112,120005,112,120057,112,120109,112,120161,112,120213,112,120265,112,120317,112,120369,112,120421,112,120473,112,961,112,120530,112,120544,112,120588,112,120602,112,120646,112,120660,112,120704,112,120718,112,120762,112,120776,112,11427,112,65328,80,8473,80,119823,80,119875,80,119927,80,119979,80,120031,80,120083,80,120187,80,120239,80,120291,80,120343,80,120395,80,120447,80,929,80,120504,80,120562,80,120620,80,120678,80,120736,80,11426,80,5090,80,5229,80,42193,80,66197,80,119850,113,119902,113,119954,113,120006,113,120058,113,120110,113,120162,113,120214,113,120266,113,120318,113,120370,113,120422,113,120474,113,1307,113,1379,113,1382,113,8474,81,119824,81,119876,81,119928,81,119980,81,120032,81,120084,81,120188,81,120240,81,120292,81,120344,81,120396,81,120448,81,11605,81,119851,114,119903,114,119955,114,120007,114,120059,114,120111,114,120163,114,120215,114,120267,114,120319,114,120371,114,120423,114,120475,114,43847,114,43848,114,7462,114,11397,114,43905,114,119318,82,8475,82,8476,82,8477,82,119825,82,119877,82,119929,82,120033,82,120189,82,120241,82,120293,82,120345,82,120397,82,120449,82,422,82,5025,82,5074,82,66740,82,5511,82,42211,82,94005,82,65363,115,119852,115,119904,115,119956,115,120008,115,120060,115,120112,115,120164,115,120216,115,120268,115,120320,115,120372,115,120424,115,120476,115,42801,115,445,115,1109,115,43946,115,71873,115,66632,115,65331,83,119826,83,119878,83,119930,83,119982,83,120034,83,120086,83,120138,83,120190,83,120242,83,120294,83,120346,83,120398,83,120450,83,1029,83,1359,83,5077,83,5082,83,42210,83,94010,83,66198,83,66592,83,119853,116,119905,116,119957,116,120009,116,120061,116,120113,116,120165,116,120217,116,120269,116,120321,116,120373,116,120425,116,120477,116,8868,84,10201,84,128872,84,65332,84,119827,84,119879,84,119931,84,119983,84,120035,84,120087,84,120139,84,120191,84,120243,84,120295,84,120347,84,120399,84,120451,84,932,84,120507,84,120565,84,120623,84,120681,84,120739,84,11430,84,5026,84,42196,84,93962,84,71868,84,66199,84,66225,84,66325,84,119854,117,119906,117,119958,117,120010,117,120062,117,120114,117,120166,117,120218,117,120270,117,120322,117,120374,117,120426,117,120478,117,42911,117,7452,117,43854,117,43858,117,651,117,965,117,120534,117,120592,117,120650,117,120708,117,120766,117,1405,117,66806,117,71896,117,8746,85,8899,85,119828,85,119880,85,119932,85,119984,85,120036,85,120088,85,120140,85,120192,85,120244,85,120296,85,120348,85,120400,85,120452,85,1357,85,4608,85,66766,85,5196,85,42228,85,94018,85,71864,85,8744,118,8897,118,65366,118,8564,118,119855,118,119907,118,119959,118,120011,118,120063,118,120115,118,120167,118,120219,118,120271,118,120323,118,120375,118,120427,118,120479,118,7456,118,957,118,120526,118,120584,118,120642,118,120700,118,120758,118,1141,118,1496,118,71430,118,43945,118,71872,118,119309,86,1639,86,1783,86,8548,86,119829,86,119881,86,119933,86,119985,86,120037,86,120089,86,120141,86,120193,86,120245,86,120297,86,120349,86,120401,86,120453,86,1140,86,11576,86,5081,86,5167,86,42719,86,42214,86,93960,86,71840,86,66845,86,623,119,119856,119,119908,119,119960,119,120012,119,120064,119,120116,119,120168,119,120220,119,120272,119,120324,119,120376,119,120428,119,120480,119,7457,119,1121,119,1309,119,1377,119,71434,119,71438,119,71439,119,43907,119,71919,87,71910,87,119830,87,119882,87,119934,87,119986,87,120038,87,120090,87,120142,87,120194,87,120246,87,120298,87,120350,87,120402,87,120454,87,1308,87,5043,87,5076,87,42218,87,5742,120,10539,120,10540,120,10799,120,65368,120,8569,120,119857,120,119909,120,119961,120,120013,120,120065,120,120117,120,120169,120,120221,120,120273,120,120325,120,120377,120,120429,120,120481,120,5441,120,5501,120,5741,88,9587,88,66338,88,71916,88,65336,88,8553,88,119831,88,119883,88,119935,88,119987,88,120039,88,120091,88,120143,88,120195,88,120247,88,120299,88,120351,88,120403,88,120455,88,42931,88,935,88,120510,88,120568,88,120626,88,120684,88,120742,88,11436,88,11613,88,5815,88,42219,88,66192,88,66228,88,66327,88,66855,88,611,121,7564,121,65369,121,119858,121,119910,121,119962,121,120014,121,120066,121,120118,121,120170,121,120222,121,120274,121,120326,121,120378,121,120430,121,120482,121,655,121,7935,121,43866,121,947,121,8509,121,120516,121,120574,121,120632,121,120690,121,120748,121,1199,121,4327,121,71900,121,65337,89,119832,89,119884,89,119936,89,119988,89,120040,89,120092,89,120144,89,120196,89,120248,89,120300,89,120352,89,120404,89,120456,89,933,89,978,89,120508,89,120566,89,120624,89,120682,89,120740,89,11432,89,1198,89,5033,89,5053,89,42220,89,94019,89,71844,89,66226,89,119859,122,119911,122,119963,122,120015,122,120067,122,120119,122,120171,122,120223,122,120275,122,120327,122,120379,122,120431,122,120483,122,7458,122,43923,122,71876,122,66293,90,71909,90,65338,90,8484,90,8488,90,119833,90,119885,90,119937,90,119989,90,120041,90,120197,90,120249,90,120301,90,120353,90,120405,90,120457,90,918,90,120493,90,120551,90,120609,90,120667,90,120725,90,5059,90,42204,90,71849,90,65282,34,65284,36,65285,37,65286,38,65290,42,65291,43,65294,46,65295,47,65296,48,65297,49,65298,50,65299,51,65300,52,65301,53,65302,54,65303,55,65304,56,65305,57,65308,60,65309,61,65310,62,65312,64,65316,68,65318,70,65319,71,65324,76,65329,81,65330,82,65333,85,65334,86,65335,87,65343,95,65346,98,65348,100,65350,102,65355,107,65357,109,65358,110,65361,113,65362,114,65364,116,65365,117,65367,119,65370,122,65371,123,65373,125,119846,109],"_default":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"cs":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"de":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"es":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"fr":[65374,126,65306,58,65281,33,8216,96,8245,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"it":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"ja":[8211,45,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65292,44,65307,59],"ko":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"pl":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"pt-BR":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"qps-ploc":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"ru":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,305,105,921,73,1009,112,215,120,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"tr":[160,32,8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],"zh-hans":[65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41],"zh-hant":[8211,45,65374,126,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65307,59]}'))),ce.cache=new o.t((e=>{function t(e){const t=new Map;for(let i=0;i!e.startsWith("_")&&e in s));0===a.length&&(a=["_default"]);for(const n of a){const e=t(s[n]);r=o(r,e)}const l=t(s["_common"]),c=i(l,r);return new n(c)})),ce._locales=new s.o((()=>Object.keys(n.ambiguousCharacterData.value).filter((e=>!e.startsWith("_")))));class de{static getRawData(){return JSON.parse("[9,10,11,12,13,32,127,160,173,847,1564,4447,4448,6068,6069,6155,6156,6157,6158,7355,7356,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8234,8235,8236,8237,8238,8239,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,10240,12288,12644,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65279,65440,65520,65521,65522,65523,65524,65525,65526,65527,65528,65532,78844,119155,119156,119157,119158,119159,119160,119161,119162,917504,917505,917506,917507,917508,917509,917510,917511,917512,917513,917514,917515,917516,917517,917518,917519,917520,917521,917522,917523,917524,917525,917526,917527,917528,917529,917530,917531,917532,917533,917534,917535,917536,917537,917538,917539,917540,917541,917542,917543,917544,917545,917546,917547,917548,917549,917550,917551,917552,917553,917554,917555,917556,917557,917558,917559,917560,917561,917562,917563,917564,917565,917566,917567,917568,917569,917570,917571,917572,917573,917574,917575,917576,917577,917578,917579,917580,917581,917582,917583,917584,917585,917586,917587,917588,917589,917590,917591,917592,917593,917594,917595,917596,917597,917598,917599,917600,917601,917602,917603,917604,917605,917606,917607,917608,917609,917610,917611,917612,917613,917614,917615,917616,917617,917618,917619,917620,917621,917622,917623,917624,917625,917626,917627,917628,917629,917630,917631,917760,917761,917762,917763,917764,917765,917766,917767,917768,917769,917770,917771,917772,917773,917774,917775,917776,917777,917778,917779,917780,917781,917782,917783,917784,917785,917786,917787,917788,917789,917790,917791,917792,917793,917794,917795,917796,917797,917798,917799,917800,917801,917802,917803,917804,917805,917806,917807,917808,917809,917810,917811,917812,917813,917814,917815,917816,917817,917818,917819,917820,917821,917822,917823,917824,917825,917826,917827,917828,917829,917830,917831,917832,917833,917834,917835,917836,917837,917838,917839,917840,917841,917842,917843,917844,917845,917846,917847,917848,917849,917850,917851,917852,917853,917854,917855,917856,917857,917858,917859,917860,917861,917862,917863,917864,917865,917866,917867,917868,917869,917870,917871,917872,917873,917874,917875,917876,917877,917878,917879,917880,917881,917882,917883,917884,917885,917886,917887,917888,917889,917890,917891,917892,917893,917894,917895,917896,917897,917898,917899,917900,917901,917902,917903,917904,917905,917906,917907,917908,917909,917910,917911,917912,917913,917914,917915,917916,917917,917918,917919,917920,917921,917922,917923,917924,917925,917926,917927,917928,917929,917930,917931,917932,917933,917934,917935,917936,917937,917938,917939,917940,917941,917942,917943,917944,917945,917946,917947,917948,917949,917950,917951,917952,917953,917954,917955,917956,917957,917958,917959,917960,917961,917962,917963,917964,917965,917966,917967,917968,917969,917970,917971,917972,917973,917974,917975,917976,917977,917978,917979,917980,917981,917982,917983,917984,917985,917986,917987,917988,917989,917990,917991,917992,917993,917994,917995,917996,917997,917998,917999]")}static getData(){return this._data||(this._data=new Set(de.getRawData())),this._data}static isInvisibleCharacter(e){return de.getData().has(e)}static get codePoints(){return de.getData()}}de._data=void 0},65338:(e,t,i)=>{"use strict";i.d(t,{n:()=>n});const n=Symbol("MicrotaskDelay")},17141:(e,t,i)=>{"use strict";i.d(t,{Id:()=>c});var n=i(61720);class o{constructor(){this._value="",this._pos=0}reset(e){return this._value=e,this._pos=0,this}next(){return this._pos+=1,this}hasNext(){return this._pos=0;t--,this._valueLen--){const e=this._value.charCodeAt(t);if(!(47===e||this._splitOnBackslash&&92===e))break}return this.next()}hasNext(){return this._to!1),t=(()=>!1)){return new c(new a(e,t))}static forStrings(){return new c(new o)}static forConfigKeys(){return new c(new s)}constructor(e){this._iter=e}clear(){this._root=void 0}set(e,t){const i=this._iter.reset(e);let n;this._root||(this._root=new l,this._root.segment=i.value());const o=[];n=this._root;while(1){const e=i.cmp(n.segment);if(e>0)n.left||(n.left=new l,n.left.segment=i.value()),o.push([-1,n]),n=n.left;else if(e<0)n.right||(n.right=new l,n.right.segment=i.value()),o.push([1,n]),n=n.right;else{if(!i.hasNext())break;i.next(),n.mid||(n.mid=new l,n.mid.segment=i.value()),o.push([0,n]),n=n.mid}}const s=n.value;n.value=t,n.key=e;for(let r=o.length-1;r>=0;r--){const e=o[r][1];e.updateHeight();const t=e.balanceFactor();if(t<-1||t>1){const t=o[r][0],i=o[r+1][0];if(1===t&&1===i)o[r][1]=e.rotateLeft();else if(-1===t&&-1===i)o[r][1]=e.rotateRight();else if(1===t&&-1===i)e.right=o[r+1][1]=o[r+1][1].rotateRight(),o[r][1]=e.rotateLeft();else{if(-1!==t||1!==i)throw new Error;e.left=o[r+1][1]=o[r+1][1].rotateLeft(),o[r][1]=e.rotateRight()}if(r>0)switch(o[r-1][0]){case-1:o[r-1][1].left=o[r][1];break;case 1:o[r-1][1].right=o[r][1];break;case 0:o[r-1][1].mid=o[r][1];break}else this._root=o[0][1]}}return s}get(e){var t;return null===(t=this._getNode(e))||void 0===t?void 0:t.value}_getNode(e){const t=this._iter.reset(e);let i=this._root;while(i){const e=t.cmp(i.segment);if(e>0)i=i.left;else if(e<0)i=i.right;else{if(!t.hasNext())break;t.next(),i=i.mid}}return i}has(e){const t=this._getNode(e);return!(void 0===(null===t||void 0===t?void 0:t.value)&&void 0===(null===t||void 0===t?void 0:t.mid))}delete(e){return this._delete(e,!1)}deleteSuperstr(e){return this._delete(e,!0)}_delete(e,t){var i;const n=this._iter.reset(e),o=[];let s=this._root;while(s){const e=n.cmp(s.segment);if(e>0)o.push([-1,s]),s=s.left;else if(e<0)o.push([1,s]),s=s.right;else{if(!n.hasNext())break;n.next(),o.push([0,s]),s=s.mid}}if(s){if(t?(s.left=void 0,s.mid=void 0,s.right=void 0,s.height=1):(s.key=void 0,s.value=void 0),!s.mid&&!s.value)if(s.left&&s.right){const e=this._min(s.right);if(e.key){const{key:t,value:i,segment:n}=e;this._delete(e.key,!1),s.key=t,s.value=i,s.segment=n}}else{const e=null!==(i=s.left)&&void 0!==i?i:s.right;if(o.length>0){const[t,i]=o[o.length-1];switch(t){case-1:i.left=e;break;case 0:i.mid=e;break;case 1:i.right=e;break}}else this._root=e}for(let e=o.length-1;e>=0;e--){const t=o[e][1];t.updateHeight();const i=t.balanceFactor();if(i>1?(t.right.balanceFactor()>=0||(t.right=t.right.rotateRight()),o[e][1]=t.rotateLeft()):i<-1&&(t.left.balanceFactor()<=0||(t.left=t.left.rotateLeft()),o[e][1]=t.rotateRight()),e>0)switch(o[e-1][0]){case-1:o[e-1][1].left=o[e][1];break;case 1:o[e-1][1].right=o[e][1];break;case 0:o[e-1][1].mid=o[e][1];break}else this._root=o[0][1]}}}_min(e){while(e.left)e=e.left;return e}findSubstr(e){const t=this._iter.reset(e);let i,n=this._root;while(n){const e=t.cmp(n.segment);if(e>0)n=n.left;else if(e<0)n=n.right;else{if(!t.hasNext())break;t.next(),i=n.value||i,n=n.mid}}return n&&n.value||i}findSuperstr(e){return this._findSuperstrOrElement(e,!1)}_findSuperstrOrElement(e,t){const i=this._iter.reset(e);let n=this._root;while(n){const e=i.cmp(n.segment);if(e>0)n=n.left;else if(e<0)n=n.right;else{if(!i.hasNext())return n.mid?this._entries(n.mid):t?n.value:void 0;i.next(),n=n.mid}}}forEach(e){for(const[t,i]of this)e(i,t)}*[Symbol.iterator](){yield*this._entries(this._root)}_entries(e){const t=[];return this._dfsEntries(e,t),t[Symbol.iterator]()}_dfsEntries(e,t){e&&(e.left&&this._dfsEntries(e.left,t),e.value&&t.push([e.key,e.value]),e.mid&&this._dfsEntries(e.mid,t),e.right&&this._dfsEntries(e.right,t))}}},99588:(e,t,i)=>{"use strict";i.d(t,{k:()=>o});var n,o,s=i(8419);(function(e){function t(e){return e&&"object"===typeof e&&"string"===typeof e.id}e.isThemeColor=t})(n||(n={})),function(e){e.iconNameSegment="[A-Za-z0-9]+",e.iconNameExpression="[A-Za-z0-9-]+",e.iconModifierExpression="~[A-Za-z]+",e.iconNameCharacter="[A-Za-z0-9~-]";const t=new RegExp(`^(${e.iconNameExpression})(${e.iconModifierExpression})?$`);function i(e){const n=t.exec(e.id);if(!n)return i(s.l.error);const[,o,r]=n,a=["codicon","codicon-"+o];return r&&a.push("codicon-modifier-"+r.substring(1)),a}function o(e){return i(e).join(" ")}function r(e){return"."+i(e).join(".")}function a(e){return e&&"object"===typeof e&&"string"===typeof e.id&&("undefined"===typeof e.color||n.isThemeColor(e.color))}e.asClassNameArray=i,e.asClassName=o,e.asCSSSelector=r,e.isThemeIcon=a;const l=new RegExp(`^\\$\\((${e.iconNameExpression}(?:${e.iconModifierExpression})?)\\)$`);function c(e){const t=l.exec(e);if(!t)return;const[,i]=t;return{id:i}}function d(e){return{id:e}}function u(e,t){let i=e.id;const n=i.lastIndexOf("~");return-1!==n&&(i=i.substring(0,n)),t&&(i=`${i}~${t}`),{id:i}}function h(e){const t=e.id.lastIndexOf("~");if(-1!==t)return e.id.substring(t+1)}function g(e,t){var i,n;return e.id===t.id&&(null===(i=e.color)||void 0===i?void 0:i.id)===(null===(n=t.color)||void 0===n?void 0:n.id)}e.fromString=c,e.fromId=d,e.modify=u,e.getModifier=h,e.isEqual=g}(o||(o={}))},55455:(e,t,i)=>{"use strict";function n(e){return"string"===typeof e}function o(e){return"object"===typeof e&&null!==e&&!Array.isArray(e)&&!(e instanceof RegExp)&&!(e instanceof Date)}function s(e){const t=Object.getPrototypeOf(Uint8Array);return"object"===typeof e&&e instanceof t}function r(e){return"number"===typeof e&&!isNaN(e)}function a(e){return!!e&&"function"===typeof e[Symbol.iterator]}function l(e){return!0===e||!1===e}function c(e){return"undefined"===typeof e}function d(e){return!u(e)}function u(e){return c(e)||null===e}function h(e,t){if(!e)throw new Error(t?`Unexpected type, expected '${t}'`:"Unexpected type")}function g(e){if(u(e))throw new Error("Assertion Failed: argument is undefined or null");return e}function p(e){return"function"===typeof e}function f(e,t){const i=Math.min(e.length,t.length);for(let n=0;nd,D8:()=>f,HD:()=>n,Jp:()=>u,Kn:()=>o,TW:()=>a,cW:()=>g,fU:()=>s,hj:()=>r,jn:()=>l,mf:()=>p,o8:()=>c,p_:()=>h})},47396:(e,t,i)=>{"use strict";function n(e){return e<0?0:e>255?255:0|e}function o(e){return e<0?0:e>4294967295?4294967295:0|e}i.d(t,{A:()=>o,K:()=>n})},95896:(e,t,i)=>{"use strict";i.d(t,{o:()=>p,q:()=>y});var n=i(19912),o=i(47606);const s=/^\w[\w\d+.-]*$/,r=/^\//,a=/^\/\//;function l(e,t){if(!e.scheme&&t)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${e.authority}", path: "${e.path}", query: "${e.query}", fragment: "${e.fragment}"}`);if(e.scheme&&!s.test(e.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(e.path)if(e.authority){if(!r.test(e.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(a.test(e.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}function c(e,t){return e||t?e:"file"}function d(e,t){switch(e){case"https":case"http":case"file":t?t[0]!==h&&(t=h+t):t=h;break}return t}const u="",h="/",g=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static isUri(e){return e instanceof p||!!e&&("string"===typeof e.authority&&"string"===typeof e.fragment&&"string"===typeof e.path&&"string"===typeof e.query&&"string"===typeof e.scheme&&"string"===typeof e.fsPath&&"function"===typeof e.with&&"function"===typeof e.toString)}constructor(e,t,i,n,o,s=!1){"object"===typeof e?(this.scheme=e.scheme||u,this.authority=e.authority||u,this.path=e.path||u,this.query=e.query||u,this.fragment=e.fragment||u):(this.scheme=c(e,s),this.authority=t||u,this.path=d(this.scheme,i||u),this.query=n||u,this.fragment=o||u,l(this,s))}get fsPath(){return y(this,!1)}with(e){if(!e)return this;let{scheme:t,authority:i,path:n,query:o,fragment:s}=e;return void 0===t?t=this.scheme:null===t&&(t=u),void 0===i?i=this.authority:null===i&&(i=u),void 0===n?n=this.path:null===n&&(n=u),void 0===o?o=this.query:null===o&&(o=u),void 0===s?s=this.fragment:null===s&&(s=u),t===this.scheme&&i===this.authority&&n===this.path&&o===this.query&&s===this.fragment?this:new m(t,i,n,o,s)}static parse(e,t=!1){const i=g.exec(e);return i?new m(i[2]||u,S(i[4]||u),S(i[5]||u),S(i[7]||u),S(i[9]||u),t):new m(u,u,u,u,u)}static file(e){let t=u;if(o.ED&&(e=e.replace(/\\/g,h)),e[0]===h&&e[1]===h){const i=e.indexOf(h,2);-1===i?(t=e.substring(2),e=h):(t=e.substring(2,i),e=e.substring(i)||h)}return new m("file",t,e,u,u)}static from(e,t){const i=new m(e.scheme,e.authority,e.path,e.query,e.fragment,t);return i}static joinPath(e,...t){if(!e.path)throw new Error("[UriError]: cannot call joinPath on URI without path");let i;return i=o.ED&&"file"===e.scheme?p.file(n.Ku.join(y(e,!0),...t)).path:n.KR.join(e.path,...t),e.with({path:i})}toString(e=!1){return w(this,e)}toJSON(){return this}static revive(e){var t,i;if(e){if(e instanceof p)return e;{const n=new m(e);return n._formatted=null!==(t=e.external)&&void 0!==t?t:null,n._fsPath=e._sep===f&&null!==(i=e.fsPath)&&void 0!==i?i:null,n}}return e}}const f=o.ED?1:void 0;class m extends p{constructor(){super(...arguments),this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=y(this,!1)),this._fsPath}toString(e=!1){return e?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){const e={$mid:1};return this._fsPath&&(e.fsPath=this._fsPath,e._sep=f),this._formatted&&(e.external=this._formatted),this.path&&(e.path=this.path),this.scheme&&(e.scheme=this.scheme),this.authority&&(e.authority=this.authority),this.query&&(e.query=this.query),this.fragment&&(e.fragment=this.fragment),e}}const v={[58]:"%3A",[47]:"%2F",[63]:"%3F",[35]:"%23",[91]:"%5B",[93]:"%5D",[64]:"%40",[33]:"%21",[36]:"%24",[38]:"%26",[39]:"%27",[40]:"%28",[41]:"%29",[42]:"%2A",[43]:"%2B",[44]:"%2C",[59]:"%3B",[61]:"%3D",[32]:"%20"};function _(e,t,i){let n,o=-1;for(let s=0;s=97&&r<=122||r>=65&&r<=90||r>=48&&r<=57||45===r||46===r||95===r||126===r||t&&47===r||i&&91===r||i&&93===r||i&&58===r)-1!==o&&(n+=encodeURIComponent(e.substring(o,s)),o=-1),void 0!==n&&(n+=e.charAt(s));else{void 0===n&&(n=e.substr(0,s));const t=v[r];void 0!==t?(-1!==o&&(n+=encodeURIComponent(e.substring(o,s)),o=-1),n+=t):-1===o&&(o=s)}}return-1!==o&&(n+=encodeURIComponent(e.substring(o))),void 0!==n?n:e}function b(e){let t;for(let i=0;i1&&"file"===e.scheme?`//${e.authority}${e.path}`:47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?t?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,o.ED&&(i=i.replace(/\//g,"\\")),i}function w(e,t){const i=t?b:_;let n="",{scheme:o,authority:s,path:r,query:a,fragment:l}=e;if(o&&(n+=o,n+=":"),(s||"file"===o)&&(n+=h,n+=h),s){let e=s.indexOf("@");if(-1!==e){const t=s.substr(0,e);s=s.substr(e+1),e=t.lastIndexOf(":"),-1===e?n+=i(t,!1,!1):(n+=i(t.substr(0,e),!1,!1),n+=":",n+=i(t.substr(e+1),!1,!0)),n+="@"}s=s.toLowerCase(),e=s.lastIndexOf(":"),-1===e?n+=i(s,!1,!0):(n+=i(s.substr(0,e),!1,!0),n+=s.substr(e))}if(r){if(r.length>=3&&47===r.charCodeAt(0)&&58===r.charCodeAt(2)){const e=r.charCodeAt(1);e>=65&&e<=90&&(r=`/${String.fromCharCode(e+32)}:${r.substr(3)}`)}else if(r.length>=2&&58===r.charCodeAt(1)){const e=r.charCodeAt(0);e>=65&&e<=90&&(r=`${String.fromCharCode(e+32)}:${r.substr(2)}`)}n+=i(r,!0,!1)}return a&&(n+="?",n+=i(a,!1,!1)),l&&(n+="#",n+=t?l:_(l,!1,!1)),n}function x(e){try{return decodeURIComponent(e)}catch(t){return e.length>3?e.substr(0,3)+x(e.substr(3)):e}}const C=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function S(e){return e.match(C)?e.replace(C,(e=>x(e))):e}},89967:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"*"},brackets:[["[","]"],["(",")"]]},o={defaultToken:"invalid",ignoreCase:!0,tokenPostfix:".abap",keywords:["abap-source","abbreviated","abstract","accept","accepting","according","activation","actual","add","add-corresponding","adjacent","after","alias","aliases","align","all","allocate","alpha","analysis","analyzer","and","append","appendage","appending","application","archive","area","arithmetic","as","ascending","aspect","assert","assign","assigned","assigning","association","asynchronous","at","attributes","authority","authority-check","avg","back","background","backup","backward","badi","base","before","begin","between","big","binary","bintohex","bit","black","blank","blanks","blob","block","blocks","blue","bound","boundaries","bounds","boxed","break-point","buffer","by","bypassing","byte","byte-order","call","calling","case","cast","casting","catch","center","centered","chain","chain-input","chain-request","change","changing","channels","character","char-to-hex","check","checkbox","ci_","circular","class","class-coding","class-data","class-events","class-methods","class-pool","cleanup","clear","client","clob","clock","close","coalesce","code","coding","col_background","col_group","col_heading","col_key","col_negative","col_normal","col_positive","col_total","collect","color","column","columns","comment","comments","commit","common","communication","comparing","component","components","compression","compute","concat","concat_with_space","concatenate","cond","condense","condition","connect","connection","constants","context","contexts","continue","control","controls","conv","conversion","convert","copies","copy","corresponding","country","cover","cpi","create","creating","critical","currency","currency_conversion","current","cursor","cursor-selection","customer","customer-function","dangerous","data","database","datainfo","dataset","date","dats_add_days","dats_add_months","dats_days_between","dats_is_valid","daylight","dd/mm/yy","dd/mm/yyyy","ddmmyy","deallocate","decimal_shift","decimals","declarations","deep","default","deferred","define","defining","definition","delete","deleting","demand","department","descending","describe","destination","detail","dialog","directory","disconnect","display","display-mode","distinct","divide","divide-corresponding","division","do","dummy","duplicate","duplicates","duration","during","dynamic","dynpro","edit","editor-call","else","elseif","empty","enabled","enabling","encoding","end","endat","endcase","endcatch","endchain","endclass","enddo","endenhancement","end-enhancement-section","endexec","endform","endfunction","endian","endif","ending","endinterface","end-lines","endloop","endmethod","endmodule","end-of-definition","end-of-editing","end-of-file","end-of-page","end-of-selection","endon","endprovide","endselect","end-test-injection","end-test-seam","endtry","endwhile","endwith","engineering","enhancement","enhancement-point","enhancements","enhancement-section","entries","entry","enum","environment","equiv","errormessage","errors","escaping","event","events","exact","except","exception","exceptions","exception-table","exclude","excluding","exec","execute","exists","exit","exit-command","expand","expanding","expiration","explicit","exponent","export","exporting","extend","extended","extension","extract","fail","fetch","field","field-groups","fields","field-symbol","field-symbols","file","filter","filters","filter-table","final","find","first","first-line","fixed-point","fkeq","fkge","flush","font","for","form","format","forward","found","frame","frames","free","friends","from","function","functionality","function-pool","further","gaps","generate","get","giving","gkeq","gkge","global","grant","green","group","groups","handle","handler","harmless","hashed","having","hdb","header","headers","heading","head-lines","help-id","help-request","hextobin","hide","high","hint","hold","hotspot","icon","id","identification","identifier","ids","if","ignore","ignoring","immediately","implementation","implementations","implemented","implicit","import","importing","in","inactive","incl","include","includes","including","increment","index","index-line","infotypes","inheriting","init","initial","initialization","inner","inout","input","insert","instance","instances","instr","intensified","interface","interface-pool","interfaces","internal","intervals","into","inverse","inverted-date","is","iso","job","join","keep","keeping","kernel","key","keys","keywords","kind","language","last","late","layout","leading","leave","left","left-justified","leftplus","leftspace","legacy","length","let","level","levels","like","line","lines","line-count","linefeed","line-selection","line-size","list","listbox","list-processing","little","llang","load","load-of-program","lob","local","locale","locator","logfile","logical","log-point","long","loop","low","lower","lpad","lpi","ltrim","mail","main","major-id","mapping","margin","mark","mask","match","matchcode","max","maximum","medium","members","memory","mesh","message","message-id","messages","messaging","method","methods","min","minimum","minor-id","mm/dd/yy","mm/dd/yyyy","mmddyy","mode","modif","modifier","modify","module","move","move-corresponding","multiply","multiply-corresponding","name","nametab","native","nested","nesting","new","new-line","new-page","new-section","next","no","no-display","no-extension","no-gap","no-gaps","no-grouping","no-heading","no-scrolling","no-sign","no-title","no-topofpage","no-zero","node","nodes","non-unicode","non-unique","not","null","number","object","objects","obligatory","occurrence","occurrences","occurs","of","off","offset","ole","on","only","open","option","optional","options","or","order","other","others","out","outer","output","output-length","overflow","overlay","pack","package","pad","padding","page","pages","parameter","parameters","parameter-table","part","partially","pattern","percentage","perform","performing","person","pf1","pf10","pf11","pf12","pf13","pf14","pf15","pf2","pf3","pf4","pf5","pf6","pf7","pf8","pf9","pf-status","pink","places","pool","pos_high","pos_low","position","pragmas","precompiled","preferred","preserving","primary","print","print-control","priority","private","procedure","process","program","property","protected","provide","public","push","pushbutton","put","queue-only","quickinfo","radiobutton","raise","raising","range","ranges","read","reader","read-only","receive","received","receiver","receiving","red","redefinition","reduce","reduced","ref","reference","refresh","regex","reject","remote","renaming","replace","replacement","replacing","report","request","requested","reserve","reset","resolution","respecting","responsible","result","results","resumable","resume","retry","return","returncode","returning","returns","right","right-justified","rightplus","rightspace","risk","rmc_communication_failure","rmc_invalid_status","rmc_system_failure","role","rollback","rows","rpad","rtrim","run","sap","sap-spool","saving","scale_preserving","scale_preserving_scientific","scan","scientific","scientific_with_leading_zero","scroll","scroll-boundary","scrolling","search","secondary","seconds","section","select","selection","selections","selection-screen","selection-set","selection-sets","selection-table","select-options","send","separate","separated","set","shared","shift","short","shortdump-id","sign_as_postfix","single","size","skip","skipping","smart","some","sort","sortable","sorted","source","specified","split","spool","spots","sql","sqlscript","stable","stamp","standard","starting","start-of-editing","start-of-selection","state","statement","statements","static","statics","statusinfo","step-loop","stop","structure","structures","style","subkey","submatches","submit","subroutine","subscreen","subtract","subtract-corresponding","suffix","sum","summary","summing","supplied","supply","suppress","switch","switchstates","symbol","syncpoints","syntax","syntax-check","syntax-trace","system-call","system-exceptions","system-exit","tab","tabbed","table","tables","tableview","tabstrip","target","task","tasks","test","testing","test-injection","test-seam","text","textpool","then","throw","time","times","timestamp","timezone","tims_is_valid","title","titlebar","title-lines","to","tokenization","tokens","top-lines","top-of-page","trace-file","trace-table","trailing","transaction","transfer","transformation","translate","transporting","trmac","truncate","truncation","try","tstmp_add_seconds","tstmp_current_utctimestamp","tstmp_is_valid","tstmp_seconds_between","type","type-pool","type-pools","types","uline","unassign","under","unicode","union","unique","unit_conversion","unix","unpack","until","unwind","up","update","upper","user","user-command","using","utf-8","valid","value","value-request","values","vary","varying","verification-message","version","via","view","visible","wait","warning","when","whenever","where","while","width","window","windows","with","with-heading","without","with-title","word","work","write","writer","xml","xsd","yellow","yes","yymmdd","zero","zone","abap_system_timezone","abap_user_timezone","access","action","adabas","adjust_numbers","allow_precision_loss","allowed","amdp","applicationuser","as_geo_json","as400","associations","balance","behavior","breakup","bulk","cds","cds_client","check_before_save","child","clients","corr","corr_spearman","cross","cycles","datn_add_days","datn_add_months","datn_days_between","dats_from_datn","dats_tims_to_tstmp","dats_to_datn","db2","db6","ddl","dense_rank","depth","deterministic","discarding","entities","entity","error","failed","finalize","first_value","fltp_to_dec","following","fractional","full","graph","grouping","hierarchy","hierarchy_ancestors","hierarchy_ancestors_aggregate","hierarchy_descendants","hierarchy_descendants_aggregate","hierarchy_siblings","incremental","indicators","lag","last_value","lead","leaves","like_regexpr","link","locale_sap","lock","locks","many","mapped","matched","measures","median","mssqlnt","multiple","nodetype","ntile","nulls","occurrences_regexpr","one","operations","oracle","orphans","over","parent","parents","partition","pcre","period","pfcg_mapping","preceding","privileged","product","projection","rank","redirected","replace_regexpr","reported","response","responses","root","row","row_number","sap_system_date","save","schema","session","sets","shortdump","siblings","spantree","start","stddev","string_agg","subtotal","sybase","tims_from_timn","tims_to_timn","to_blob","to_clob","total","trace-entry","tstmp_to_dats","tstmp_to_dst","tstmp_to_tims","tstmpl_from_utcl","tstmpl_to_utcl","unbounded","utcl_add_seconds","utcl_current","utcl_seconds_between","uuid","var","verbatim"],builtinFunctions:["abs","acos","asin","atan","bit-set","boolc","boolx","ceil","char_off","charlen","cmax","cmin","concat_lines_of","contains","contains_any_not_of","contains_any_of","cos","cosh","count","count_any_not_of","count_any_of","dbmaxlen","distance","escape","exp","find_any_not_of","find_any_of","find_end","floor","frac","from_mixed","ipow","line_exists","line_index","log","log10","matches","nmax","nmin","numofchar","repeat","rescale","reverse","round","segment","shift_left","shift_right","sign","sin","sinh","sqrt","strlen","substring","substring_after","substring_before","substring_from","substring_to","tan","tanh","to_lower","to_mixed","to_upper","trunc","utclong_add","utclong_current","utclong_diff","xsdbool","xstrlen"],typeKeywords:["b","c","d","decfloat16","decfloat34","f","i","int8","n","p","s","string","t","utclong","x","xstring","any","clike","csequence","decfloat","numeric","simple","xsequence","accp","char","clnt","cuky","curr","datn","dats","d16d","d16n","d16r","d34d","d34n","d34r","dec","df16_dec","df16_raw","df34_dec","df34_raw","fltp","geom_ewkb","int1","int2","int4","lang","lchr","lraw","numc","quan","raw","rawstring","sstring","timn","tims","unit","utcl","df16_scl","df34_scl","prec","varc","abap_bool","abap_false","abap_true","abap_undefined","me","screen","space","super","sy","syst","table_line","*sys*"],builtinMethods:["class_constructor","constructor"],derivedTypes:["%CID","%CID_REF","%CONTROL","%DATA","%ELEMENT","%FAIL","%KEY","%MSG","%PARAM","%PID","%PID_ASSOC","%PID_PARENT","%_HINTS"],cdsLanguage:["@AbapAnnotation","@AbapCatalog","@AccessControl","@API","@ClientDependent","@ClientHandling","@CompatibilityContract","@DataAging","@EndUserText","@Environment","@LanguageDependency","@MappingRole","@Metadata","@MetadataExtension","@ObjectModel","@Scope","@Semantics","$EXTENSION","$SELF"],selectors:["->","->*","=>","~","~*"],operators:[" +"," -","/","*","**","div","mod","=","#","@","+=","-=","*=","/=","**=","&&=","?=","&","&&","bit-and","bit-not","bit-or","bit-xor","m","o","z","<"," >","<=",">=","<>","><","=<","=>","bt","byte-ca","byte-cn","byte-co","byte-cs","byte-na","byte-ns","ca","cn","co","cp","cs","eq","ge","gt","le","lt","na","nb","ne","np","ns","*/","*:","--","/*","//"],symbols:/[=>))*/,{cases:{"@typeKeywords":"type","@keywords":"keyword","@cdsLanguage":"annotation","@derivedTypes":"type","@builtinFunctions":"type","@builtinMethods":"type","@operators":"key","@default":"identifier"}}],[/<[\w]+>/,"identifier"],[/##[\w|_]+/,"comment"],{include:"@whitespace"},[/[:,.]/,"delimiter"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@selectors":"tag","@operators":"key","@default":""}}],[/'/,{token:"string",bracket:"@open",next:"@stringquote"}],[/`/,{token:"string",bracket:"@open",next:"@stringping"}],[/\|/,{token:"string",bracket:"@open",next:"@stringtemplate"}],[/\d+/,"number"]],stringtemplate:[[/[^\\\|]+/,"string"],[/\\\|/,"string"],[/\|/,{token:"string",bracket:"@close",next:"@pop"}]],stringping:[[/[^\\`]+/,"string"],[/`/,{token:"string",bracket:"@close",next:"@pop"}]],stringquote:[[/[^\\']+/,"string"],[/'/,{token:"string",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/^\*.*$/,"comment"],[/\".*$/,"comment"]]}}},10802:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>a}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},o=["abstract","activate","and","any","array","as","asc","assert","autonomous","begin","bigdecimal","blob","boolean","break","bulk","by","case","cast","catch","char","class","collect","commit","const","continue","convertcurrency","decimal","default","delete","desc","do","double","else","end","enum","exception","exit","export","extends","false","final","finally","float","for","from","future","get","global","goto","group","having","hint","if","implements","import","in","inner","insert","instanceof","int","interface","into","join","last_90_days","last_month","last_n_days","last_week","like","limit","list","long","loop","map","merge","native","new","next_90_days","next_month","next_n_days","next_week","not","null","nulls","number","object","of","on","or","outer","override","package","parallel","pragma","private","protected","public","retrieve","return","returning","rollback","savepoint","search","select","set","short","sort","stat","static","strictfp","super","switch","synchronized","system","testmethod","then","this","this_month","this_week","throw","throws","today","tolabel","tomorrow","transaction","transient","trigger","true","try","type","undelete","update","upsert","using","virtual","void","volatile","webservice","when","where","while","yesterday"],s=e=>e.charAt(0).toUpperCase()+e.substr(1),r=[];o.forEach((e=>{r.push(e),r.push(e.toUpperCase()),r.push(s(e))}));var a={defaultToken:"",tokenPostfix:".apex",keywords:r,operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@apexdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],apexdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}}},19006:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"#"}},o={defaultToken:"keyword",ignoreCase:!0,tokenPostfix:".azcli",str:/[^#\s]/,tokenizer:{root:[{include:"@comment"},[/\s-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}],[/^-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}]],type:[{include:"@comment"},[/-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":"key.identifier"}}],[/@str+\s*/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}]],comment:[[/#.*$/,{cases:{"@eos":{token:"comment",next:"@popall"}}}]]}}},38858:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"REM"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|REM\\s+)#region"),end:new RegExp("^\\s*(::\\s*|REM\\s+)#endregion")}}},o={defaultToken:"",ignoreCase:!0,tokenPostfix:".bat",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=>{"use strict";i.r(t),i.d(t,{conf:()=>u,language:()=>h}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n=e=>`\\b${e}\\b`,o="[_a-zA-Z]",s="[_a-zA-Z0-9]",r=n(`${o}${s}*`),a=["targetScope","resource","module","param","var","output","for","in","if","existing"],l=["true","false","null"],c="[ \\t\\r\\n]",d="[0-9]+",u={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'"},{open:"'''",close:"'''"}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:"'''",close:"'''",notIn:["string","comment"]}],autoCloseBefore:":.,=}])' \n\t",indentationRules:{increaseIndentPattern:new RegExp("^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$"),decreaseIndentPattern:new RegExp("^((?!.*?\\/\\*).*\\*/)?\\s*[\\}\\]].*$")}},h={defaultToken:"",tokenPostfix:".bicep",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],symbols:/[=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'},{open:"(*",close:"*)"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'},{open:"(*",close:"*)"}]},o={defaultToken:"",tokenPostfix:".cameligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["abs","assert","block","Bytes","case","Crypto","Current","else","failwith","false","for","fun","if","in","let","let%entry","let%init","List","list","Map","map","match","match%nat","mod","not","operation","Operation","of","record","Set","set","sender","skip","source","String","then","to","true","type","with"],typeKeywords:["int","unit","string","tz","nat","bool"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%","->","<-","&&","||"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}},3234:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:";;"},brackets:[["[","]"],["(",")"],["{","}"]],autoClosingPairs:[{open:"[",close:"]"},{open:'"',close:'"'},{open:"(",close:")"},{open:"{",close:"}"}],surroundingPairs:[{open:"[",close:"]"},{open:'"',close:'"'},{open:"(",close:")"},{open:"{",close:"}"}]},o={defaultToken:"",ignoreCase:!0,tokenPostfix:".clj",brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"}],constants:["true","false","nil"],numbers:/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,characters:/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,escapes:/^\\(?:["'\\bfnrt]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,qualifiedSymbols:/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/,specialForms:[".","catch","def","do","if","monitor-enter","monitor-exit","new","quote","recur","set!","throw","try","var"],coreSymbols:["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Inst","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","any?","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case","cast","cat","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"],tokenizer:{root:[{include:"@whitespace"},[/@numbers/,"number"],[/@characters/,"string"],{include:"@string"},[/[()\[\]{}]/,"@brackets"],[/\/#"(?:\.|(?:")|[^"\n])*"\/g/,"regexp"],[/[#'@^`~]/,"meta"],[/@qualifiedSymbols/,{cases:{"^:.+$":"constant","@specialForms":"keyword","@coreSymbols":"keyword","@constants":"constant","@default":"identifier"}}]],whitespace:[[/[\s,]+/,"white"],[/;.*$/,"comment"],[/\(comment\b/,"comment","@comment"]],comment:[[/\(/,"comment","@push"],[/\)/,"comment","@pop"],[/[^()]/,"comment"]],string:[[/"/,"string","@multiLineString"]],multiLineString:[[/"/,"string","@popall"],[/@escapes/,"string.escape"],[/./,"string"]]}}},82183:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{blockComment:["###","###"],lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},o={defaultToken:"",ignoreCase:!0,tokenPostfix:".coffee",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],regEx:/\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,keywords:["and","or","is","isnt","not","on","yes","@","no","off","true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","do","try","catch","finally","class","extends","super","undefined","then","unless","until","loop","of","by","when"],symbols:/[=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#pragma\\s+region\\b"),end:new RegExp("^\\s*#pragma\\s+endregion\\b")}}},o={defaultToken:"",tokenPostfix:".cpp",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["abstract","amp","array","auto","bool","break","case","catch","char","class","const","constexpr","const_cast","continue","cpu","decltype","default","delegate","delete","do","double","dynamic_cast","each","else","enum","event","explicit","export","extern","false","final","finally","float","for","friend","gcnew","generic","goto","if","in","initonly","inline","int","interface","interior_ptr","internal","literal","long","mutable","namespace","new","noexcept","nullptr","__nullptr","operator","override","partial","pascal","pin_ptr","private","property","protected","public","ref","register","reinterpret_cast","restrict","return","safe_cast","sealed","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","tile_static","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","where","while","_asm","_based","_cdecl","_declspec","_fastcall","_if_exists","_if_not_exists","_inline","_multiple_inheritance","_pascal","_single_inheritance","_stdcall","_virtual_inheritance","_w64","__abstract","__alignof","__asm","__assume","__based","__box","__builtin_alignof","__cdecl","__clrcall","__declspec","__delegate","__event","__except","__fastcall","__finally","__forceinline","__gc","__hook","__identifier","__if_exists","__if_not_exists","__inline","__int128","__int16","__int32","__int64","__int8","__interface","__leave","__m128","__m128d","__m128i","__m256","__m256d","__m256i","__m512","__m512d","__m512i","__m64","__multiple_inheritance","__newslot","__nogc","__noop","__nounwind","__novtordisp","__pascal","__pin","__pragma","__property","__ptr32","__ptr64","__raise","__restrict","__resume","__sealed","__single_inheritance","__stdcall","__super","__thiscall","__try","__try_cast","__typeof","__unaligned","__unhook","__uuidof","__value","__virtual_inheritance","__w64","__wchar_t"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*\\$/,"comment","@linecomment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],linecomment:[[/.*[^\\]$/,"comment","@pop"],[/[^]+/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],raw:[[/(.*)(\))(?:([^ ()\\\t"]*))(\")/,{cases:{"$3==$S2":["string.raw","string.raw.end","string.raw.end",{token:"string.raw.end",next:"@pop"}],"@default":["string.raw","string.raw","string.raw","string.raw"]}}],[/.*/,"string.raw"]],annotation:[{include:"@whitespace"},[/using|alignas/,"keyword"],[/[a-zA-Z0-9_]+/,"annotation"],[/[,:]/,"delimiter"],[/[()]/,"@brackets"],[/\]\s*\]/,{token:"annotation",next:"@pop"}]],include:[[/(\s*)(<)([^<>]*)(>)/,["","keyword.directive.include.begin","string.include.identifier",{token:"keyword.directive.include.end",next:"@pop"}]],[/(\s*)(")([^"]*)(")/,["","keyword.directive.include.begin","string.include.identifier",{token:"keyword.directive.include.end",next:"@pop"}]]]}}},8184:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\$\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},o={defaultToken:"",tokenPostfix:".cs",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["extern","alias","using","bool","decimal","sbyte","byte","short","ushort","int","uint","long","ulong","char","float","double","object","dynamic","string","assembly","is","as","ref","out","this","base","new","typeof","void","checked","unchecked","default","delegate","var","const","if","else","switch","case","while","do","for","foreach","in","break","continue","goto","return","throw","try","catch","finally","lock","yield","from","let","where","join","on","equals","into","orderby","ascending","descending","select","group","by","namespace","partial","class","field","event","method","param","public","protected","internal","private","abstract","sealed","static","struct","readonly","volatile","virtual","override","params","get","set","add","remove","operator","true","false","implicit","explicit","interface","enum","null","async","await","fixed","sizeof","stackalloc","unsafe","nameof","when"],namespaceFollows:["namespace","using"],parenFollows:["if","for","while","switch","foreach","using","catch","when"],operators:["=","??","||","&&","|","^","&","==","!=","<=",">=","<<","+","-","*","/","%","!","~","++","--","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>","=>"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?[fFdD]?/,"number.float"],[/0[xX][0-9a-fA-F_]+/,"number.hex"],[/0[bB][01_]+/,"number.hex"],[/[0-9_]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",next:"@string"}],[/\$\@"/,{token:"string.quote",next:"@litinterpstring"}],[/\@"/,{token:"string.quote",next:"@litstring"}],[/\$"/,{token:"string.quote",next:"@interpolatedstring"}],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],qualified:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/\./,"delimiter"],["","","@pop"]],namespace:[{include:"@whitespace"},[/[A-Z]\w*/,"namespace"],[/[\.=]/,"delimiter"],["","","@pop"]],comment:[[/[^\/*]+/,"comment"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",next:"@pop"}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]],litinterpstring:[[/[^"{]+/,"string"],[/""/,"string.escape"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.litinterpstring"}],[/"/,{token:"string.quote",next:"@pop"}]],interpolatedstring:[[/[^\\"{]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.interpolatedstring"}],[/"/,{token:"string.quote",next:"@pop"}]],whitespace:[[/^[ \t\v\f]*#((r)|(load))(?=\s)/,"directive.csx"],[/^[ \t\v\f]*#\w.*$/,"namespace.cpp"],[/[ \t\v\f\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}},91952:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={brackets:[],autoClosingPairs:[],surroundingPairs:[]},o={keywords:[],typeKeywords:[],tokenPostfix:".csp",operators:[],symbols:/[=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(#?-?\d*\.\d\w*%?)|((::|[@#.!:])?[\w-?]+%?)|::|[@#.!:]/g,comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},o={defaultToken:"",tokenPostfix:".css",ws:"[ \t\n\r\f]*",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.bracket"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@strings"},["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@selectorname"},["[\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.bracket",next:"@selectorbody"}]],selectorbody:[{include:"@comments"},["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],["}",{token:"delimiter.bracket",next:"@pop"}]],selectorname:[["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@functioninvocation"},{include:"@numbers"},{include:"@name"},{include:"@strings"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","delimiter"],[",","delimiter"]],rulevalue:[{include:"@comments"},{include:"@strings"},{include:"@term"},["!important","keyword"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[/[^*/]+/,"comment"],[/./,"comment"]],name:[["@identifier","attribute.value"]],numbers:[["-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],keyframedeclaration:[["@identifier","attribute.value"],["{",{token:"delimiter.bracket",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.bracket",next:"@selectorbody"}],["}",{token:"delimiter.bracket",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"attribute.value",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"attribute.value",next:"@pop"}]],strings:[['~?"',{token:"string",next:"@stringenddoublequote"}],["~?'",{token:"string",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string",next:"@pop"}],[/[^\\"]+/,"string"],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string",next:"@pop"}],[/[^\\']+/,"string"],[".","string"]]}}},53700:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}]},o={defaultToken:"",tokenPostfix:".cypher",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:["ALL","AND","AS","ASC","ASCENDING","BY","CALL","CASE","CONTAINS","CREATE","DELETE","DESC","DESCENDING","DETACH","DISTINCT","ELSE","END","ENDS","EXISTS","IN","IS","LIMIT","MANDATORY","MATCH","MERGE","NOT","ON","ON","OPTIONAL","OR","ORDER","REMOVE","RETURN","SET","SKIP","STARTS","THEN","UNION","UNWIND","WHEN","WHERE","WITH","XOR","YIELD"],builtinLiterals:["true","TRUE","false","FALSE","null","NULL"],builtinFunctions:["abs","acos","asin","atan","atan2","avg","ceil","coalesce","collect","cos","cot","count","degrees","e","endNode","exists","exp","floor","head","id","keys","labels","last","left","length","log","log10","lTrim","max","min","nodes","percentileCont","percentileDisc","pi","properties","radians","rand","range","relationships","replace","reverse","right","round","rTrim","sign","sin","size","split","sqrt","startNode","stDev","stDevP","substring","sum","tail","tan","timestamp","toBoolean","toFloat","toInteger","toLower","toString","toUpper","trim","type"],operators:["+","-","*","/","%","^","=","<>","<",">","<=",">=","->","<-","--\x3e","<--"],escapes:/\\(?:[tbnrf\\"'`]|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+/,octaldigits:/[0-7]+/,hexdigits:/[0-9a-fA-F]+/,tokenizer:{root:[[/[{}[\]()]/,"@brackets"],{include:"common"}],common:[{include:"@whitespace"},{include:"@numbers"},{include:"@strings"},[/:[a-zA-Z_][\w]*/,"type.identifier"],[/[a-zA-Z_][\w]*(?=\()/,{cases:{"@builtinFunctions":"predefined.function"}}],[/[a-zA-Z_$][\w$]*/,{cases:{"@keywords":"keyword","@builtinLiterals":"predefined.literal","@default":"identifier"}}],[/`/,"identifier.escape","@identifierBacktick"],[/[;,.:|]/,"delimiter"],[/[<>=%+\-*/^]+/,{cases:{"@operators":"delimiter","@default":""}}]],numbers:[[/-?(@digits)[eE](-?(@digits))?/,"number.float"],[/-?(@digits)?\.(@digits)([eE]-?(@digits))?/,"number.float"],[/-?0x(@hexdigits)/,"number.hex"],[/-?0(@octaldigits)/,"number.octal"],[/-?(@digits)/,"number"]],strings:[[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@stringDouble"],[/'/,"string","@stringSingle"]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/\/\/.*/,"comment"],[/[^/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[/*]/,"comment"]],stringDouble:[[/[^\\"]+/,"string"],[/@escapes/,"string"],[/\\./,"string.invalid"],[/"/,"string","@pop"]],stringSingle:[[/[^\\']+/,"string"],[/@escapes/,"string"],[/\\./,"string.invalid"],[/'/,"string","@pop"]],identifierBacktick:[[/[^\\`]+/,"identifier.escape"],[/@escapes/,"identifier.escape"],[/\\./,"identifier.escape.invalid"],[/`/,"identifier.escape","@pop"]]}}},98962:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]},{open:"`",close:"`",notIn:["string","comment"]},{open:"/**",close:" */",notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:"(",close:")"},{open:'"',close:'"'},{open:"`",close:"`"}],folding:{markers:{start:/^\s*\s*#?region\b/,end:/^\s*\s*#?endregion\b/}}},o={defaultToken:"invalid",tokenPostfix:".dart",keywords:["abstract","dynamic","implements","show","as","else","import","static","assert","enum","in","super","async","export","interface","switch","await","extends","is","sync","break","external","library","this","case","factory","mixin","throw","catch","false","new","true","class","final","null","try","const","finally","on","typedef","continue","for","operator","var","covariant","Function","part","void","default","get","rethrow","while","deferred","hide","return","with","do","if","set","yield"],typeKeywords:["int","double","String","bool"],operators:["+","-","*","/","~/","%","++","--","==","!=",">","<",">=","<=","=","-=","/=","%=",">>=","^=","+=","*=","~/=","<<=","&=","!=","||","&&","&","|","^","~","<<",">>","!",">>>","??","?",":","|="],symbols:/[=>](?!@symbols)/,"@brackets"],[/!(?=([^=]|$))/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,"number.float"],[/0[xX](@hexdigits)n?/,"number.hex"],[/0[oO]?(@octaldigits)n?/,"number.octal"],[/0[bB](@binarydigits)n?/,"number.binary"],[/(@digits)n?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@jsdoc"],[/\/\*/,"comment","@comment"],[/\/\/\/.*$/,"comment.doc"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],jsdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/,["regexp.escape.control","regexp.escape.control"]],[/[()]/,"regexp.escape.control"],[/@regexpctl/,"regexp.escape.control"],[/[^\\\/]/,"regexp"],[/@regexpesc/,"regexp.escape"],[/\\\./,"regexp.invalid"],[/(\/)([gimsuy]*)/,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/,"regexp.escape.control"],[/\^/,"regexp.invalid"],[/@regexpesc/,"regexp.escape"],[/[^\]]/,"regexp"],[/\]/,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"\$]+/,"string"],[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"],[/\$\w+/,"identifier"]],string_single:[[/[^\\'\$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"],[/\$\w+/,"identifier"]]}}},37273:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={defaultToken:"",tokenPostfix:".dockerfile",variable:/\${?[\w]+}?/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/(ONBUILD)(\s+)/,["keyword",""]],[/(ENV)(\s+)([\w]+)/,["keyword","",{token:"variable",next:"@arguments"}]],[/(FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|ARG|VOLUME|LABEL|USER|WORKDIR|COPY|CMD|STOPSIGNAL|SHELL|HEALTHCHECK|ENTRYPOINT)/,{token:"keyword",next:"@arguments"}]],arguments:[{include:"@whitespace"},{include:"@strings"},[/(@variable)/,{cases:{"@eos":{token:"variable",next:"@popall"},"@default":"variable"}}],[/\\/,{cases:{"@eos":"","@default":""}}],[/./,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],whitespace:[[/\s+/,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],comment:[[/(^#.*$)/,"comment","@popall"]],strings:[[/\\'$/,"","@popall"],[/\\'/,""],[/'$/,"string","@popall"],[/'/,"string","@stringBody"],[/"$/,"string","@popall"],[/"/,"string","@dblStringBody"]],stringBody:[[/[^\\\$']/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/'$/,"string","@popall"],[/'/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]],dblStringBody:[[/[^\\\$"]/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/"$/,"string","@popall"],[/"/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]]}}},13413:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}]},o={defaultToken:"",tokenPostfix:".ecl",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],pounds:["append","break","declare","demangle","end","for","getdatatype","if","inmodule","loop","mangle","onwarning","option","set","stored","uniquename"].join("|"),keywords:["__compressed__","after","all","and","any","as","atmost","before","beginc","best","between","case","cluster","compressed","compression","const","counter","csv","default","descend","embed","encoding","encrypt","end","endc","endembed","endmacro","enum","escape","except","exclusive","expire","export","extend","fail","few","fileposition","first","flat","forward","from","full","function","functionmacro","group","grouped","heading","hole","ifblock","import","in","inner","interface","internal","joined","keep","keyed","last","left","limit","linkcounted","literal","little_endian","load","local","locale","lookup","lzw","macro","many","maxcount","maxlength","min skew","module","mofn","multiple","named","namespace","nocase","noroot","noscan","nosort","not","noxpath","of","onfail","only","opt","or","outer","overwrite","packed","partition","penalty","physicallength","pipe","prefetch","quote","record","repeat","retry","return","right","right1","right2","rows","rowset","scan","scope","self","separator","service","shared","skew","skip","smart","soapaction","sql","stable","store","terminator","thor","threshold","timelimit","timeout","token","transform","trim","type","unicodeorder","unordered","unsorted","unstable","update","use","validate","virtual","whole","width","wild","within","wnotrim","xml","xpath"],functions:["abs","acos","aggregate","allnodes","apply","ascii","asin","assert","asstring","atan","atan2","ave","build","buildindex","case","catch","choose","choosen","choosesets","clustersize","combine","correlation","cos","cosh","count","covariance","cron","dataset","dedup","define","denormalize","dictionary","distribute","distributed","distribution","ebcdic","enth","error","evaluate","event","eventextra","eventname","exists","exp","fail","failcode","failmessage","fetch","fromunicode","fromxml","getenv","getisvalid","global","graph","group","hash","hash32","hash64","hashcrc","hashmd5","having","httpcall","httpheader","if","iff","index","intformat","isvalid","iterate","join","keydiff","keypatch","keyunicode","length","library","limit","ln","loadxml","local","log","loop","map","matched","matchlength","matchposition","matchtext","matchunicode","max","merge","mergejoin","min","nofold","nolocal","nonempty","normalize","nothor","notify","output","parallel","parse","pipe","power","preload","process","project","pull","random","range","rank","ranked","realformat","recordof","regexfind","regexreplace","regroup","rejected","rollup","round","roundup","row","rowdiff","sample","sequential","set","sin","sinh","sizeof","soapcall","sort","sorted","sqrt","stepped","stored","sum","table","tan","tanh","thisnode","topn","tounicode","toxml","transfer","transform","trim","truncate","typeof","ungroup","unicodeorder","variance","wait","which","workunit","xmldecode","xmlencode","xmltext","xmlunicode"],typesint:["integer","unsigned"].join("|"),typesnum:["data","qstring","string","unicode","utf8","varstring","varunicode"],typesone:["ascii","big_endian","boolean","data","decimal","ebcdic","grouped","integer","linkcounted","pattern","qstring","real","record","rule","set of","streamed","string","token","udecimal","unicode","unsigned","utf8","varstring","varunicode"].join("|"),operators:["+","-","/",":=","<","<>","=",">","\\","and","in","not","or"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F_]+/,"number.hex"],[/0[bB][01]+/,"number.hex"],[/[0-9_]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\v\f\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]]}}},73299:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'"},{open:'"',close:'"'}],autoClosingPairs:[{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["comment"]},{open:'"""',close:'"""'},{open:"`",close:"`",notIn:["string","comment"]},{open:"(",close:")"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"<<",close:">>"}],indentationRules:{increaseIndentPattern:/^\s*(after|else|catch|rescue|fn|[^#]*(do|<\-|\->|\{|\[|\=))\s*$/,decreaseIndentPattern:/^\s*((\}|\])\s*$|(after|else|catch|rescue|end)\b)/}},o={defaultToken:"source",tokenPostfix:".elixir",brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"<<",close:">>",token:"delimiter.angle.special"}],declarationKeywords:["def","defp","defn","defnp","defguard","defguardp","defmacro","defmacrop","defdelegate","defcallback","defmacrocallback","defmodule","defprotocol","defexception","defimpl","defstruct"],operatorKeywords:["and","in","not","or","when"],namespaceKeywords:["alias","import","require","use"],otherKeywords:["after","case","catch","cond","do","else","end","fn","for","if","quote","raise","receive","rescue","super","throw","try","unless","unquote_splicing","unquote","with"],constants:["true","false","nil"],nameBuiltin:["__MODULE__","__DIR__","__ENV__","__CALLER__","__STACKTRACE__"],operator:/-[->]?|!={0,2}|\*{1,2}|\/|\\\\|&{1,3}|\.\.?|\^(?:\^\^)?|\+\+?|<(?:-|<<|=|>|\|>|~>?)?|=~|={1,3}|>(?:=|>>)?|\|~>|\|>|\|{1,3}|~>>?|~~~|::/,variableName:/[a-z_][a-zA-Z0-9_]*[?!]?/,atomName:/[a-zA-Z_][a-zA-Z0-9_@]*[?!]?|@specialAtomName|@operator/,specialAtomName:/\.\.\.|<<>>|%\{\}|%|\{\}/,aliasPart:/[A-Z][a-zA-Z0-9_]*/,moduleName:/@aliasPart(?:\.@aliasPart)*/,sigilSymmetricDelimiter:/"""|'''|"|'|\/|\|/,sigilStartDelimiter:/@sigilSymmetricDelimiter|<|\{|\[|\(/,sigilEndDelimiter:/@sigilSymmetricDelimiter|>|\}|\]|\)/,sigilModifiers:/[a-zA-Z0-9]*/,decimal:/\d(?:_?\d)*/,hex:/[0-9a-fA-F](_?[0-9a-fA-F])*/,octal:/[0-7](_?[0-7])*/,binary:/[01](_?[01])*/,escape:/\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2}|\\./,tokenizer:{root:[{include:"@whitespace"},{include:"@comments"},{include:"@keywordsShorthand"},{include:"@numbers"},{include:"@identifiers"},{include:"@strings"},{include:"@atoms"},{include:"@sigils"},{include:"@attributes"},{include:"@symbols"}],whitespace:[[/\s+/,"white"]],comments:[[/(#)(.*)/,["comment.punctuation","comment"]]],keywordsShorthand:[[/(@atomName)(:)(\s+)/,["constant","constant.punctuation","white"]],[/"(?=([^"]|#\{.*?\}|\\")*":)/,{token:"constant.delimiter",next:"@doubleQuotedStringKeyword"}],[/'(?=([^']|#\{.*?\}|\\')*':)/,{token:"constant.delimiter",next:"@singleQuotedStringKeyword"}]],doubleQuotedStringKeyword:[[/":/,{token:"constant.delimiter",next:"@pop"}],{include:"@stringConstantContentInterpol"}],singleQuotedStringKeyword:[[/':/,{token:"constant.delimiter",next:"@pop"}],{include:"@stringConstantContentInterpol"}],numbers:[[/0b@binary/,"number.binary"],[/0o@octal/,"number.octal"],[/0x@hex/,"number.hex"],[/@decimal\.@decimal([eE]-?@decimal)?/,"number.float"],[/@decimal/,"number"]],identifiers:[[/\b(defp?|defnp?|defmacrop?|defguardp?|defdelegate)(\s+)(@variableName)(?!\s+@operator)/,["keyword.declaration","white",{cases:{unquote:"keyword","@default":"function"}}]],[/(@variableName)(?=\s*\.?\s*\()/,{cases:{"@declarationKeywords":"keyword.declaration","@namespaceKeywords":"keyword","@otherKeywords":"keyword","@default":"function.call"}}],[/(@moduleName)(\s*)(\.)(\s*)(@variableName)/,["type.identifier","white","operator","white","function.call"]],[/(:)(@atomName)(\s*)(\.)(\s*)(@variableName)/,["constant.punctuation","constant","white","operator","white","function.call"]],[/(\|>)(\s*)(@variableName)/,["operator","white",{cases:{"@otherKeywords":"keyword","@default":"function.call"}}]],[/(&)(\s*)(@variableName)/,["operator","white","function.call"]],[/@variableName/,{cases:{"@declarationKeywords":"keyword.declaration","@operatorKeywords":"keyword.operator","@namespaceKeywords":"keyword","@otherKeywords":"keyword","@constants":"constant.language","@nameBuiltin":"variable.language","_.*":"comment.unused","@default":"identifier"}}],[/@moduleName/,"type.identifier"]],strings:[[/"""/,{token:"string.delimiter",next:"@doubleQuotedHeredoc"}],[/'''/,{token:"string.delimiter",next:"@singleQuotedHeredoc"}],[/"/,{token:"string.delimiter",next:"@doubleQuotedString"}],[/'/,{token:"string.delimiter",next:"@singleQuotedString"}]],doubleQuotedHeredoc:[[/"""/,{token:"string.delimiter",next:"@pop"}],{include:"@stringContentInterpol"}],singleQuotedHeredoc:[[/'''/,{token:"string.delimiter",next:"@pop"}],{include:"@stringContentInterpol"}],doubleQuotedString:[[/"/,{token:"string.delimiter",next:"@pop"}],{include:"@stringContentInterpol"}],singleQuotedString:[[/'/,{token:"string.delimiter",next:"@pop"}],{include:"@stringContentInterpol"}],atoms:[[/(:)(@atomName)/,["constant.punctuation","constant"]],[/:"/,{token:"constant.delimiter",next:"@doubleQuotedStringAtom"}],[/:'/,{token:"constant.delimiter",next:"@singleQuotedStringAtom"}]],doubleQuotedStringAtom:[[/"/,{token:"constant.delimiter",next:"@pop"}],{include:"@stringConstantContentInterpol"}],singleQuotedStringAtom:[[/'/,{token:"constant.delimiter",next:"@pop"}],{include:"@stringConstantContentInterpol"}],sigils:[[/~[a-z]@sigilStartDelimiter/,{token:"@rematch",next:"@sigil.interpol"}],[/~([A-Z]+)@sigilStartDelimiter/,{token:"@rematch",next:"@sigil.noInterpol"}]],sigil:[[/~([a-z]|[A-Z]+)\{/,{token:"@rematch",switchTo:"@sigilStart.$S2.$1.{.}"}],[/~([a-z]|[A-Z]+)\[/,{token:"@rematch",switchTo:"@sigilStart.$S2.$1.[.]"}],[/~([a-z]|[A-Z]+)\(/,{token:"@rematch",switchTo:"@sigilStart.$S2.$1.(.)"}],[/~([a-z]|[A-Z]+)\"}],[/~([a-z]|[A-Z]+)(@sigilSymmetricDelimiter)/,{token:"@rematch",switchTo:"@sigilStart.$S2.$1.$2.$2"}]],"sigilStart.interpol.s":[[/~s@sigilStartDelimiter/,{token:"string.delimiter",switchTo:"@sigilContinue.$S2.$S3.$S4.$S5"}]],"sigilContinue.interpol.s":[[/(@sigilEndDelimiter)@sigilModifiers/,{cases:{"$1==$S5":{token:"string.delimiter",next:"@pop"},"@default":"string"}}],{include:"@stringContentInterpol"}],"sigilStart.noInterpol.S":[[/~S@sigilStartDelimiter/,{token:"string.delimiter",switchTo:"@sigilContinue.$S2.$S3.$S4.$S5"}]],"sigilContinue.noInterpol.S":[[/(^|[^\\])\\@sigilEndDelimiter/,"string"],[/(@sigilEndDelimiter)@sigilModifiers/,{cases:{"$1==$S5":{token:"string.delimiter",next:"@pop"},"@default":"string"}}],{include:"@stringContent"}],"sigilStart.interpol.r":[[/~r@sigilStartDelimiter/,{token:"regexp.delimiter",switchTo:"@sigilContinue.$S2.$S3.$S4.$S5"}]],"sigilContinue.interpol.r":[[/(@sigilEndDelimiter)@sigilModifiers/,{cases:{"$1==$S5":{token:"regexp.delimiter",next:"@pop"},"@default":"regexp"}}],{include:"@regexpContentInterpol"}],"sigilStart.noInterpol.R":[[/~R@sigilStartDelimiter/,{token:"regexp.delimiter",switchTo:"@sigilContinue.$S2.$S3.$S4.$S5"}]],"sigilContinue.noInterpol.R":[[/(^|[^\\])\\@sigilEndDelimiter/,"regexp"],[/(@sigilEndDelimiter)@sigilModifiers/,{cases:{"$1==$S5":{token:"regexp.delimiter",next:"@pop"},"@default":"regexp"}}],{include:"@regexpContent"}],"sigilStart.interpol":[[/~([a-z]|[A-Z]+)@sigilStartDelimiter/,{token:"sigil.delimiter",switchTo:"@sigilContinue.$S2.$S3.$S4.$S5"}]],"sigilContinue.interpol":[[/(@sigilEndDelimiter)@sigilModifiers/,{cases:{"$1==$S5":{token:"sigil.delimiter",next:"@pop"},"@default":"sigil"}}],{include:"@sigilContentInterpol"}],"sigilStart.noInterpol":[[/~([a-z]|[A-Z]+)@sigilStartDelimiter/,{token:"sigil.delimiter",switchTo:"@sigilContinue.$S2.$S3.$S4.$S5"}]],"sigilContinue.noInterpol":[[/(^|[^\\])\\@sigilEndDelimiter/,"sigil"],[/(@sigilEndDelimiter)@sigilModifiers/,{cases:{"$1==$S5":{token:"sigil.delimiter",next:"@pop"},"@default":"sigil"}}],{include:"@sigilContent"}],attributes:[[/\@(module|type)?doc (~[sS])?"""/,{token:"comment.block.documentation",next:"@doubleQuotedHeredocDocstring"}],[/\@(module|type)?doc (~[sS])?'''/,{token:"comment.block.documentation",next:"@singleQuotedHeredocDocstring"}],[/\@(module|type)?doc (~[sS])?"/,{token:"comment.block.documentation",next:"@doubleQuotedStringDocstring"}],[/\@(module|type)?doc (~[sS])?'/,{token:"comment.block.documentation",next:"@singleQuotedStringDocstring"}],[/\@(module|type)?doc false/,"comment.block.documentation"],[/\@(@variableName)/,"variable"]],doubleQuotedHeredocDocstring:[[/"""/,{token:"comment.block.documentation",next:"@pop"}],{include:"@docstringContent"}],singleQuotedHeredocDocstring:[[/'''/,{token:"comment.block.documentation",next:"@pop"}],{include:"@docstringContent"}],doubleQuotedStringDocstring:[[/"/,{token:"comment.block.documentation",next:"@pop"}],{include:"@docstringContent"}],singleQuotedStringDocstring:[[/'/,{token:"comment.block.documentation",next:"@pop"}],{include:"@docstringContent"}],symbols:[[/\?(\\.|[^\\\s])/,"number.constant"],[/&\d+/,"operator"],[/<<<|>>>/,"operator"],[/[()\[\]\{\}]|<<|>>/,"@brackets"],[/\.\.\./,"identifier"],[/=>/,"punctuation"],[/@operator/,"operator"],[/[:;,.%]/,"punctuation"]],stringContentInterpol:[{include:"@interpolation"},{include:"@escapeChar"},{include:"@stringContent"}],stringContent:[[/./,"string"]],stringConstantContentInterpol:[{include:"@interpolation"},{include:"@escapeChar"},{include:"@stringConstantContent"}],stringConstantContent:[[/./,"constant"]],regexpContentInterpol:[{include:"@interpolation"},{include:"@escapeChar"},{include:"@regexpContent"}],regexpContent:[[/(\s)(#)(\s.*)$/,["white","comment.punctuation","comment"]],[/./,"regexp"]],sigilContentInterpol:[{include:"@interpolation"},{include:"@escapeChar"},{include:"@sigilContent"}],sigilContent:[[/./,"sigil"]],docstringContent:[[/./,"comment.block.documentation"]],escapeChar:[[/@escape/,"constant.character.escape"]],interpolation:[[/#{/,{token:"delimiter.bracket.embed",next:"@interpolationContinue"}]],interpolationContinue:[[/}/,{token:"delimiter.bracket.embed",next:"@pop"}],{include:"@root"}]}}},23828:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{blockComment:["/*","*/"],lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string"]},{open:"[",close:"]",notIn:["string"]},{open:"(",close:")",notIn:["string"]},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}]},o={defaultToken:"",tokenPostfix:".flow",keywords:["import","require","export","forbid","native","if","else","cast","unsafe","switch","default"],types:["io","mutable","bool","int","double","string","flow","void","ref","true","false","with"],operators:["=",">","<","<=",">=","==","!","!=",":=","::=","&&","||","+","-","*","/","@","&","%",":","->","\\","$","??","^"],symbols:/[@$=>](?!@symbols)/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]]}}},2415:(e,t,i)=>{"use strict";i.r(t),i.d(t,{TagAngleInterpolationBracket:()=>S,TagAngleInterpolationDollar:()=>x,TagAutoInterpolationBracket:()=>E,TagAutoInterpolationDollar:()=>L,TagBracketInterpolationBracket:()=>k,TagBracketInterpolationDollar:()=>C});var n=i(78270),o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,l=(e,t,i,n)=>{if(t&&"object"===typeof t||"function"===typeof t)for(let l of r(t))a.call(e,l)||l===i||o(e,l,{get:()=>t[l],enumerable:!(n=s(t,l))||n.enumerable});return e},c=(e,t,i)=>(l(e,t,"default"),i&&l(i,t,"default")),d={}; -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/c(d,n);var u=["assign","flush","ftl","return","global","import","include","break","continue","local","nested","nt","setting","stop","t","lt","rt","fallback"],h=["attempt","autoesc","autoEsc","compress","comment","escape","noescape","function","if","list","items","sep","macro","noparse","noParse","noautoesc","noAutoEsc","outputformat","switch","visit","recurse"],g={close:">",id:"angle",open:"<"},p={close:"\\]",id:"bracket",open:"\\["},f={close:"[>\\]]",id:"auto",open:"[<\\[]"},m={close:"\\}",id:"dollar",open1:"\\$",open2:"\\{"},v={close:"\\]",id:"bracket",open1:"\\[",open2:"="};function _(e){return{brackets:[["<",">"],["[","]"],["(",")"],["{","}"]],comments:{blockComment:[`${e.open}--`,`--${e.close}`]},autoCloseBefore:"\n\r\t }]),.:;=",autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string"]}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],folding:{markers:{start:new RegExp(`${e.open}#(?:${h.join("|")})([^/${e.close}]*(?!/)${e.close})[^${e.open}]*$`),end:new RegExp(`${e.open}/#(?:${h.join("|")})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:new RegExp(`${e.open}#(?!(?:${u.join("|")}))([a-zA-Z_]+)([^/${e.close}]*(?!/)${e.close})[^${e.open}]*$`),afterText:new RegExp(`^${e.open}/#([a-zA-Z_]+)[\\r\\n\\t ]*${e.close}$`),action:{indentAction:d.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp(`${e.open}#(?!(?:${u.join("|")}))([a-zA-Z_]+)([^/${e.close}]*(?!/)${e.close})[^${e.open}]*$`),action:{indentAction:d.languages.IndentAction.Indent}}]}}function b(){return{brackets:[["<",">"],["[","]"],["(",")"],["{","}"]],autoCloseBefore:"\n\r\t }]),.:;=",autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string"]}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],folding:{markers:{start:new RegExp(`[<\\[]#(?:${h.join("|")})([^/>\\]]*(?!/)[>\\]])[^<\\[]*$`),end:new RegExp(`[<\\[]/#(?:${h.join("|")})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:new RegExp(`[<\\[]#(?!(?:${u.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),afterText:new RegExp("^[<\\[]/#([a-zA-Z_]+)[\\r\\n\\t ]*[>\\]]$"),action:{indentAction:d.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp(`[<\\[]#(?!(?:${u.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),action:{indentAction:d.languages.IndentAction.Indent}}]}}function y(e,t){const i=`_${e.id}_${t.id}`,n=e=>e.replace(/__id__/g,i),o=e=>{const t=e.source.replace(/__id__/g,i);return new RegExp(t,e.flags)};return{unicode:!0,includeLF:!1,start:n("default__id__"),ignoreCase:!1,defaultToken:"invalid",tokenPostfix:".freemarker2",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],[n("open__id__")]:new RegExp(e.open),[n("close__id__")]:new RegExp(e.close),[n("iOpen1__id__")]:new RegExp(t.open1),[n("iOpen2__id__")]:new RegExp(t.open2),[n("iClose__id__")]:new RegExp(t.close),[n("startTag__id__")]:o(/(@open__id__)(#)/),[n("endTag__id__")]:o(/(@open__id__)(\/#)/),[n("startOrEndTag__id__")]:o(/(@open__id__)(\/?#)/),[n("closeTag1__id__")]:o(/((?:@blank)*)(@close__id__)/),[n("closeTag2__id__")]:o(/((?:@blank)*\/?)(@close__id__)/),blank:/[ \t\n\r]/,keywords:["false","true","in","as","using"],directiveStartCloseTag1:/attempt|recover|sep|auto[eE]sc|no(?:autoe|AutoE)sc|compress|default|no[eE]scape|comment|no[pP]arse/,directiveStartCloseTag2:/else|break|continue|return|stop|flush|t|lt|rt|nt|nested|recurse|fallback|ftl/,directiveStartBlank:/if|else[iI]f|list|for[eE]ach|switch|case|assign|global|local|include|import|function|macro|transform|visit|stop|return|call|setting|output[fF]ormat|nested|recurse|escape|ftl|items/,directiveEndCloseTag1:/if|list|items|sep|recover|attempt|for[eE]ach|local|global|assign|function|macro|output[fF]ormat|auto[eE]sc|no(?:autoe|AutoE)sc|compress|transform|switch|escape|no[eE]scape/,escapedChar:/\\(?:[ntrfbgla\\'"\{=]|(?:x[0-9A-Fa-f]{1,4}))/,asciiDigit:/[0-9]/,integer:/[0-9]+/,nonEscapedIdStartChar:/[\$@-Z_a-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u1FFF\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183-\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3006\u3031-\u3035\u303B-\u303C\u3040-\u318F\u31A0-\u31BA\u31F0-\u31FF\u3300-\u337F\u3400-\u4DB5\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,escapedIdChar:/\\[\-\.:#]/,idStartChar:/(?:@nonEscapedIdStartChar)|(?:@escapedIdChar)/,id:/(?:@idStartChar)(?:(?:@idStartChar)|(?:@asciiDigit))*/,specialHashKeys:/\*\*|\*|false|true|in|as|using/,namedSymbols:/<=|>=|\\lte|\\lt|<|\\gte|\\gt|>|&&|\\and|->|->|==|!=|\+=|-=|\*=|\/=|%=|\+\+|--|<=|&&|\|\||:|\.\.\.|\.\.\*|\.\.<|\.\.!|\?\?|=|<|\+|-|\*|\/|%|\||\.\.|\?|!|&|\.|,|;/,arrows:["->","->"],delimiters:[";",":",",","."],stringOperators:["lte","lt","gte","gt"],noParseTags:["noparse","noParse","comment"],tokenizer:{[n("default__id__")]:[{include:n("@directive_token__id__")},{include:n("@interpolation_and_text_token__id__")}],[n("fmExpression__id__.directive")]:[{include:n("@blank_and_expression_comment_token__id__")},{include:n("@directive_end_token__id__")},{include:n("@expression_token__id__")}],[n("fmExpression__id__.interpolation")]:[{include:n("@blank_and_expression_comment_token__id__")},{include:n("@expression_token__id__")},{include:n("@greater_operators_token__id__")}],[n("inParen__id__.plain")]:[{include:n("@blank_and_expression_comment_token__id__")},{include:n("@directive_end_token__id__")},{include:n("@expression_token__id__")}],[n("inParen__id__.gt")]:[{include:n("@blank_and_expression_comment_token__id__")},{include:n("@expression_token__id__")},{include:n("@greater_operators_token__id__")}],[n("noSpaceExpression__id__")]:[{include:n("@no_space_expression_end_token__id__")},{include:n("@directive_end_token__id__")},{include:n("@expression_token__id__")}],[n("unifiedCall__id__")]:[{include:n("@unified_call_token__id__")}],[n("singleString__id__")]:[{include:n("@string_single_token__id__")}],[n("doubleString__id__")]:[{include:n("@string_double_token__id__")}],[n("rawSingleString__id__")]:[{include:n("@string_single_raw_token__id__")}],[n("rawDoubleString__id__")]:[{include:n("@string_double_raw_token__id__")}],[n("expressionComment__id__")]:[{include:n("@expression_comment_token__id__")}],[n("noParse__id__")]:[{include:n("@no_parse_token__id__")}],[n("terseComment__id__")]:[{include:n("@terse_comment_token__id__")}],[n("directive_token__id__")]:[[o(/(?:@startTag__id__)(@directiveStartCloseTag1)(?:@closeTag1__id__)/),"auto"===e.id?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${t.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${t.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{cases:{"@noParseTags":{token:"tag",next:n("@noParse__id__.$3")},"@default":{token:"tag"}}},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(?:@startTag__id__)(@directiveStartCloseTag2)(?:@closeTag2__id__)/),"auto"===e.id?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${t.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${t.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(?:@startTag__id__)(@directiveStartBlank)(@blank)/),"auto"===e.id?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${t.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${t.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"",next:n("@fmExpression__id__.directive")}]],[o(/(?:@endTag__id__)(@directiveEndCloseTag1)(?:@closeTag1__id__)/),"auto"===e.id?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${t.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${t.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(@open__id__)(@)/),"auto"===e.id?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${t.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${t.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive",next:n("@unifiedCall__id__")}]],[o(/(@open__id__)(\/@)((?:(?:@id)(?:\.(?:@id))*)?)(?:@closeTag1__id__)/),[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(@open__id__)#--/),"auto"===e.id?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${t.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${t.id}`}}}:{token:"comment",next:n("@terseComment__id__")}],[o(/(?:@startOrEndTag__id__)([a-zA-Z_]+)/),"auto"===e.id?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${t.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${t.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag.invalid",next:n("@fmExpression__id__.directive")}]]],[n("interpolation_and_text_token__id__")]:[[o(/(@iOpen1__id__)(@iOpen2__id__)/),[{token:"bracket"===t.id?"@brackets.interpolation":"delimiter.interpolation"},{token:"bracket"===t.id?"delimiter.interpolation":"@brackets.interpolation",next:n("@fmExpression__id__.interpolation")}]],[/[\$#<\[\{]|(?:@blank)+|[^\$<#\[\{\n\r\t ]+/,{token:"source"}]],[n("string_single_token__id__")]:[[/[^'\\]/,{token:"string"}],[/@escapedChar/,{token:"string.escape"}],[/'/,{token:"string",next:"@pop"}]],[n("string_double_token__id__")]:[[/[^"\\]/,{token:"string"}],[/@escapedChar/,{token:"string.escape"}],[/"/,{token:"string",next:"@pop"}]],[n("string_single_raw_token__id__")]:[[/[^']+/,{token:"string.raw"}],[/'/,{token:"string.raw",next:"@pop"}]],[n("string_double_raw_token__id__")]:[[/[^"]+/,{token:"string.raw"}],[/"/,{token:"string.raw",next:"@pop"}]],[n("expression_token__id__")]:[[/(r?)(['"])/,{cases:{"r'":[{token:"keyword"},{token:"string.raw",next:n("@rawSingleString__id__")}],'r"':[{token:"keyword"},{token:"string.raw",next:n("@rawDoubleString__id__")}],"'":[{token:"source"},{token:"string",next:n("@singleString__id__")}],'"':[{token:"source"},{token:"string",next:n("@doubleString__id__")}]}}],[/(?:@integer)(?:\.(?:@integer))?/,{cases:{"(?:@integer)":{token:"number"},"@default":{token:"number.float"}}}],[/(\.)(@blank*)(@specialHashKeys)/,[{token:"delimiter"},{token:""},{token:"identifier"}]],[/(?:@namedSymbols)/,{cases:{"@arrows":{token:"meta.arrow"},"@delimiters":{token:"delimiter"},"@default":{token:"operators"}}}],[/@id/,{cases:{"@keywords":{token:"keyword.$0"},"@stringOperators":{token:"operators"},"@default":{token:"identifier"}}}],[/[\[\]\(\)\{\}]/,{cases:{"\\[":{cases:{"$S2==gt":{token:"@brackets",next:n("@inParen__id__.gt")},"@default":{token:"@brackets",next:n("@inParen__id__.plain")}}},"\\]":{cases:{..."bracket"===t.id?{"$S2==interpolation":{token:"@brackets.interpolation",next:"@popall"}}:{},..."bracket"===e.id?{"$S2==directive":{token:"@brackets.directive",next:"@popall"}}:{},[n("$S1==inParen__id__")]:{token:"@brackets",next:"@pop"},"@default":{token:"@brackets"}}},"\\(":{token:"@brackets",next:n("@inParen__id__.gt")},"\\)":{cases:{[n("$S1==inParen__id__")]:{token:"@brackets",next:"@pop"},"@default":{token:"@brackets"}}},"\\{":{cases:{"$S2==gt":{token:"@brackets",next:n("@inParen__id__.gt")},"@default":{token:"@brackets",next:n("@inParen__id__.plain")}}},"\\}":{cases:{..."bracket"===t.id?{}:{"$S2==interpolation":{token:"@brackets.interpolation",next:"@popall"}},[n("$S1==inParen__id__")]:{token:"@brackets",next:"@pop"},"@default":{token:"@brackets"}}}}}],[/\$\{/,{token:"delimiter.invalid"}]],[n("blank_and_expression_comment_token__id__")]:[[/(?:@blank)+/,{token:""}],[/[<\[][#!]--/,{token:"comment",next:n("@expressionComment__id__")}]],[n("directive_end_token__id__")]:[[/>/,"bracket"===e.id?{token:"operators"}:{token:"@brackets.directive",next:"@popall"}],[o(/(\/)(@close__id__)/),[{token:"delimiter.directive"},{token:"@brackets.directive",next:"@popall"}]]],[n("greater_operators_token__id__")]:[[/>/,{token:"operators"}],[/>=/,{token:"operators"}]],[n("no_space_expression_end_token__id__")]:[[/(?:@blank)+/,{token:"",switchTo:n("@fmExpression__id__.directive")}]],[n("unified_call_token__id__")]:[[/(@id)((?:@blank)+)/,[{token:"tag"},{token:"",next:n("@fmExpression__id__.directive")}]],[o(/(@id)(\/?)(@close__id__)/),[{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive",next:"@popall"}]],[/./,{token:"@rematch",next:n("@noSpaceExpression__id__")}]],[n("no_parse_token__id__")]:[[o(/(@open__id__)(\/#?)([a-zA-Z]+)((?:@blank)*)(@close__id__)/),{cases:{"$S2==$3":[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:""},{token:"@brackets.directive",next:"@popall"}],"$S2==comment":[{token:"comment"},{token:"comment"},{token:"comment"},{token:"comment"},{token:"comment"}],"@default":[{token:"source"},{token:"source"},{token:"source"},{token:"source"},{token:"source"}]}}],[/[^<\[\-]+|[<\[\-]/,{cases:{"$S2==comment":{token:"comment"},"@default":{token:"source"}}}]],[n("expression_comment_token__id__")]:[[/--[>\]]/,{token:"comment",next:"@pop"}],[/[^\->\]]+|[>\]\-]/,{token:"comment"}]],[n("terse_comment_token__id__")]:[[o(/--(?:@close__id__)/),{token:"comment",next:"@popall"}],[/[^<\[\-]+|[<\[\-]/,{token:"comment"}]]}}}function w(e){const t=y(g,e),i=y(p,e),n=y(f,e);return{...t,...i,...n,unicode:!0,includeLF:!1,start:`default_auto_${e.id}`,ignoreCase:!1,defaultToken:"invalid",tokenPostfix:".freemarker2",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{...t.tokenizer,...i.tokenizer,...n.tokenizer}}}var x={conf:_(g),language:y(g,m)},C={conf:_(p),language:y(p,m)},S={conf:_(g),language:y(g,v)},k={conf:_(p),language:y(p,v)},L={conf:b(),language:w(m)},E={conf:b(),language:w(v)}},59593:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*//\\s*#region\\b|^\\s*\\(\\*\\s*#region(.*)\\*\\)"),end:new RegExp("^\\s*//\\s*#endregion\\b|^\\s*\\(\\*\\s*#endregion\\s*\\*\\)")}}},o={defaultToken:"",tokenPostfix:".fs",keywords:["abstract","and","atomic","as","assert","asr","base","begin","break","checked","component","const","constraint","constructor","continue","class","default","delegate","do","done","downcast","downto","elif","else","end","exception","eager","event","external","extern","false","finally","for","fun","function","fixed","functor","global","if","in","include","inherit","inline","interface","internal","land","lor","lsl","lsr","lxor","lazy","let","match","member","mod","module","mutable","namespace","method","mixin","new","not","null","of","open","or","object","override","private","parallel","process","protected","pure","public","rec","return","static","sealed","struct","sig","then","to","true","tailcall","trait","try","type","upcast","use","val","void","virtual","volatile","when","while","with","yield"],symbols:/[=>\]/,"annotation"],[/^#(if|else|endif)/,"keyword"],[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0x[0-9a-fA-F]+LF/,"number.float"],[/0x[0-9a-fA-F]+(@integersuffix)/,"number.hex"],[/0b[0-1]+(@integersuffix)/,"number.bin"],[/\d+(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"""/,"string",'@string."""'],[/"/,"string",'@string."'],[/\@"/,{token:"string.quote",next:"@litstring"}],[/'[^\\']'B?/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\(\*(?!\))/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^*(]+/,"comment"],[/\*\)/,"comment","@pop"],[/\*/,"comment"],[/\(\*\)/,"comment"],[/\(/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/("""|"B?)/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]]}}},59868:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`",notIn:["string"]},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={defaultToken:"",tokenPostfix:".go",keywords:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var","bool","true","false","uint8","uint16","uint32","uint64","int8","int16","int32","int64","float32","float64","complex64","complex128","byte","rune","uint","int","uintptr","string","nil"],operators:["+","-","*","/","%","&","|","^","<<",">>","&^","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=","&^=","&&","||","<-","++","--","==","<",">","=","!","!=","<=",">=",":=","...","(",")","","]","{","}",",",";",".",":"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/,"number.hex"],[/0[0-7']*[0-7]/,"number.octal"],[/0[bB][0-1']*[0-1]/,"number.binary"],[/\d[\d']*/,"number"],[/\d/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/`/,"string","@rawstring"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],rawstring:[[/[^\`]/,"string"],[/`/,"string","@pop"]]}}},83732:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"""',close:'"""',notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"""',close:'"""'},{open:'"',close:'"'}],folding:{offSide:!0}},o={defaultToken:"invalid",tokenPostfix:".gql",keywords:["null","true","false","query","mutation","subscription","extend","schema","directive","scalar","type","interface","union","enum","input","implements","fragment","on"],typeKeywords:["Int","Float","String","Boolean","ID"],directiveLocations:["SCHEMA","SCALAR","OBJECT","FIELD_DEFINITION","ARGUMENT_DEFINITION","INTERFACE","UNION","ENUM","ENUM_VALUE","INPUT_OBJECT","INPUT_FIELD_DEFINITION","QUERY","MUTATION","SUBSCRIPTION","FIELD","FRAGMENT_DEFINITION","FRAGMENT_SPREAD","INLINE_FRAGMENT","VARIABLE_DEFINITION"],operators:["=","!","?",":","&","|"],symbols:/[=!?:&|]+/,escapes:/\\(?:["\\\/bfnrt]|u[0-9A-Fa-f]{4})/,tokenizer:{root:[[/[a-z_][\w$]*/,{cases:{"@keywords":"keyword","@default":"key.identifier"}}],[/[$][\w$]*/,{cases:{"@keywords":"keyword","@default":"argument.identifier"}}],[/[A-Z][\w\$]*/,{cases:{"@typeKeywords":"keyword","@default":"type.identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,{token:"annotation",log:"annotation token: $0"}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/"""/,{token:"string",next:"@mlstring",nextEmbedded:"markdown"}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",bracket:"@open",next:"@string"}]],mlstring:[[/[^"]+/,"string"],['"""',{token:"string",next:"@pop",nextEmbedded:"@pop"}]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/#.*$/,"comment"]]}}},7507:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>h,language:()=>g});var n=i(78270),o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,l=(e,t,i,n)=>{if(t&&"object"===typeof t||"function"===typeof t)for(let l of r(t))a.call(e,l)||l===i||o(e,l,{get:()=>t[l],enumerable:!(n=s(t,l))||n.enumerable});return e},c=(e,t,i)=>(l(e,t,"default"),i&&l(i,t,"default")),d={}; -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/c(d,n);var u=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],h={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["{{!--","--}}"]},brackets:[["\x3c!--","--\x3e"],["<",">"],["{{","}}"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${u.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:d.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${u.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:d.languages.IndentAction.Indent}}]},g={defaultToken:"",tokenPostfix:"",tokenizer:{root:[[/\{\{!--/,"comment.block.start.handlebars","@commentBlock"],[/\{\{!/,"comment.start.handlebars","@comment"],[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.root"}],[/)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)(script)/,["delimiter.html",{token:"tag.html",next:"@script"}]],[/(<)(style)/,["delimiter.html",{token:"tag.html",next:"@style"}]],[/(<)([:\w]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)(\w+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/]+/,"metatag.content.html"],[/>/,"metatag.html","@pop"]],comment:[[/\}\}/,"comment.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentBlock:[[/--\}\}/,"comment.block.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentHtml:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.comment"}],[/-->/,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],handlebarsInSimpleState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3"}],{include:"handlebarsRoot"}],handlebarsInEmbeddedState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],{include:"handlebarsRoot"}],handlebarsRoot:[[/"[^"]*"/,"string.handlebars"],[/[#/][^\s}]+/,"keyword.helper.handlebars"],[/else\b/,"keyword.helper.handlebars"],[/[\s]+/],[/[^}]/,"variable.parameter.handlebars"]]}}},71180:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"#",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}]},o={defaultToken:"",tokenPostfix:".hcl",keywords:["var","local","path","for_each","any","string","number","bool","true","false","null","if ","else ","endif ","for ","in","endfor"],operators:["=",">=","<=","==","!=","+","-","*","/","%","&&","||","!","<",">","?","...",":"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\d[\d']*/,"number"],[/\d/,"number"],[/[;,.]/,"delimiter"],[/"/,"string","@string"],[/'/,"invalid"]],heredoc:[[/<<[-]*\s*["]?([\w\-]+)["]?/,{token:"string.heredoc.delimiter",next:"@heredocBody.$1"}]],heredocBody:[[/([\w\-]+)$/,{cases:{"$1==$S2":[{token:"string.heredoc.delimiter",next:"@popall"}],"@default":"string.heredoc"}}],[/./,"string.heredoc"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"],[/#.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],string:[[/\$\{/,{token:"delimiter",next:"@stringExpression"}],[/[^\\"\$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@popall"]],stringInsideExpression:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],stringExpression:[[/\}/,{token:"delimiter",next:"@pop"}],[/"/,"string","@stringInsideExpression"],{include:"@terraform"}]}}},91138:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>h,language:()=>g});var n=i(78270),o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,l=(e,t,i,n)=>{if(t&&"object"===typeof t||"function"===typeof t)for(let l of r(t))a.call(e,l)||l===i||o(e,l,{get:()=>t[l],enumerable:!(n=s(t,l))||n.enumerable});return e},c=(e,t,i)=>(l(e,t,"default"),i&&l(i,t,"default")),d={}; -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/c(d,n);var u=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],h={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["\x3c!--","--\x3e"],["<",">"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${u.join("|")}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:d.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${u.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:d.languages.IndentAction.Indent}}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#endregion\\b.*--\x3e")}}},g={defaultToken:"",tokenPostfix:".html",ignoreCase:!0,tokenizer:{root:[[/)/,["delimiter","tag","","delimiter"]],[/(<)(script)/,["delimiter",{token:"tag",next:"@script"}]],[/(<)(style)/,["delimiter",{token:"tag",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/]+/,"metatag.content"],[/>/,"metatag","@pop"]],comment:[[/-->/,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"module"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/'module'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}}},22090:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={defaultToken:"",tokenPostfix:".ini",escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^\[[^\]]*\]/,"metatag"],[/(^\w+)(\s*)(\=)/,["key","","delimiter"]],{include:"@whitespace"},[/\d+/,"number"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],whitespace:[[/[ \t\r\n]+/,""],[/^\s*[#;].*$/,"comment"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}}},23994:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},o={defaultToken:"",tokenPostfix:".java",keywords:["abstract","continue","for","new","switch","assert","default","goto","package","synchronized","boolean","do","if","private","this","break","double","implements","protected","throw","byte","else","import","public","throws","case","enum","instanceof","return","transient","catch","extends","int","short","try","char","final","interface","static","void","class","finally","long","strictfp","volatile","const","float","native","super","while","true","false","yield","record","sealed","non-sealed","permits"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/0[xX](@hexdigits)[Ll]?/,"number.hex"],[/0(@octaldigits)[Ll]?/,"number.octal"],[/0[bB](@binarydigits)[Ll]?/,"number.binary"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"""/,"string","@multistring"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@javadoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],javadoc:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],multistring:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"""/,"string","@pop"],[/./,"string"]]}}},10690:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>o,language:()=>s});var n=i(66387),o=n.conf,s={defaultToken:"invalid",tokenPostfix:".js",keywords:["break","case","catch","class","continue","const","constructor","debugger","default","delete","do","else","export","extends","false","finally","for","from","function","get","if","import","in","instanceof","let","new","null","return","set","static","super","switch","symbol","this","throw","true","try","typeof","undefined","var","void","while","with","yield","async","await","of"],typeKeywords:[],operators:n.language.operators,symbols:n.language.symbols,escapes:n.language.escapes,digits:n.language.digits,octaldigits:n.language.octaldigits,binarydigits:n.language.binarydigits,hexdigits:n.language.hexdigits,regexpctl:n.language.regexpctl,regexpesc:n.language.regexpesc,tokenizer:n.language.tokenizer}; -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/},55477:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={tokenPostfix:".julia",keywords:["begin","while","if","for","try","return","break","continue","function","macro","quote","let","local","global","const","do","struct","module","baremodule","using","import","export","end","else","elseif","catch","finally","mutable","primitive","abstract","type","in","isa","where","new"],types:["LinRange","LineNumberNode","LinearIndices","LoadError","MIME","Matrix","Method","MethodError","Missing","MissingException","Module","NTuple","NamedTuple","Nothing","Number","OrdinalRange","OutOfMemoryError","OverflowError","Pair","PartialQuickSort","PermutedDimsArray","Pipe","Ptr","QuoteNode","Rational","RawFD","ReadOnlyMemoryError","Real","ReentrantLock","Ref","Regex","RegexMatch","RoundingMode","SegmentationFault","Set","Signed","Some","StackOverflowError","StepRange","StepRangeLen","StridedArray","StridedMatrix","StridedVecOrMat","StridedVector","String","StringIndexError","SubArray","SubString","SubstitutionString","Symbol","SystemError","Task","Text","TextDisplay","Timer","Tuple","Type","TypeError","TypeVar","UInt","UInt128","UInt16","UInt32","UInt64","UInt8","UndefInitializer","AbstractArray","UndefKeywordError","AbstractChannel","UndefRefError","AbstractChar","UndefVarError","AbstractDict","Union","AbstractDisplay","UnionAll","AbstractFloat","UnitRange","AbstractIrrational","Unsigned","AbstractMatrix","AbstractRange","Val","AbstractSet","Vararg","AbstractString","VecElement","AbstractUnitRange","VecOrMat","AbstractVecOrMat","Vector","AbstractVector","VersionNumber","Any","WeakKeyDict","ArgumentError","WeakRef","Array","AssertionError","BigFloat","BigInt","BitArray","BitMatrix","BitSet","BitVector","Bool","BoundsError","CapturedException","CartesianIndex","CartesianIndices","Cchar","Cdouble","Cfloat","Channel","Char","Cint","Cintmax_t","Clong","Clonglong","Cmd","Colon","Complex","ComplexF16","ComplexF32","ComplexF64","CompositeException","Condition","Cptrdiff_t","Cshort","Csize_t","Cssize_t","Cstring","Cuchar","Cuint","Cuintmax_t","Culong","Culonglong","Cushort","Cvoid","Cwchar_t","Cwstring","DataType","DenseArray","DenseMatrix","DenseVecOrMat","DenseVector","Dict","DimensionMismatch","Dims","DivideError","DomainError","EOFError","Enum","ErrorException","Exception","ExponentialBackOff","Expr","Float16","Float32","Float64","Function","GlobalRef","HTML","IO","IOBuffer","IOContext","IOStream","IdDict","IndexCartesian","IndexLinear","IndexStyle","InexactError","InitError","Int","Int128","Int16","Int32","Int64","Int8","Integer","InterruptException","InvalidStateException","Irrational","KeyError"],keywordops:["<:",">:",":","=>","...",".","->","?"],allops:/[^\w\d\s()\[\]{}"'#]+/,constants:["true","false","nothing","missing","undef","Inf","pi","NaN","π","ℯ","ans","PROGRAM_FILE","ARGS","C_NULL","VERSION","DEPOT_PATH","LOAD_PATH"],operators:["!","!=","!==","%","&","*","+","-","/","//","<","<<","<=","==","===","=>",">",">=",">>",">>>","\\","^","|","|>","~","÷","∈","∉","∋","∌","∘","√","∛","∩","∪","≈","≉","≠","≡","≢","≤","≥","⊆","⊇","⊈","⊉","⊊","⊋","⊻"],brackets:[{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"}],ident:/π|ℯ|\b(?!\d)\w+\b/,escape:/(?:[abefnrstv\\"'\n\r]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4})/,escapes:/\\(?:C\-(@escape|.)|c(@escape|.)|@escape)/,tokenizer:{root:[[/(::)\s*|\b(isa)\s+/,"keyword","@typeanno"],[/\b(isa)(\s*\(@ident\s*,\s*)/,["keyword",{token:"",next:"@typeanno"}]],[/\b(type|struct)[ \t]+/,"keyword","@typeanno"],[/^\s*:@ident[!?]?/,"metatag"],[/(return)(\s*:@ident[!?]?)/,["keyword","metatag"]],[/(\(|\[|\{|@allops)(\s*:@ident[!?]?)/,["","metatag"]],[/:\(/,"metatag","@quote"],[/r"""/,"regexp.delim","@tregexp"],[/r"/,"regexp.delim","@sregexp"],[/raw"""/,"string.delim","@rtstring"],[/[bv]?"""/,"string.delim","@dtstring"],[/raw"/,"string.delim","@rsstring"],[/[bv]?"/,"string.delim","@dsstring"],[/(@ident)\{/,{cases:{"$1@types":{token:"type",next:"@gen"},"@default":{token:"type",next:"@gen"}}}],[/@ident[!?'']?(?=\.?\()/,{cases:{"@types":"type","@keywords":"keyword","@constants":"variable","@default":"keyword.flow"}}],[/@ident[!?']?/,{cases:{"@types":"type","@keywords":"keyword","@constants":"variable","@default":"identifier"}}],[/\$\w+/,"key"],[/\$\(/,"key","@paste"],[/@@@ident/,"annotation"],{include:"@whitespace"},[/'(?:@escapes|.)'/,"string.character"],[/[()\[\]{}]/,"@brackets"],[/@allops/,{cases:{"@keywordops":"keyword","@operators":"operator"}}],[/[;,]/,"delimiter"],[/0[xX][0-9a-fA-F](_?[0-9a-fA-F])*/,"number.hex"],[/0[_oO][0-7](_?[0-7])*/,"number.octal"],[/0[bB][01](_?[01])*/,"number.binary"],[/[+\-]?\d+(\.\d+)?(im?|[eE][+\-]?\d+(\.\d+)?)?/,"number"]],typeanno:[[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*\{/,"type","@gen"],[/([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)(\s*<:\s*)/,["type","keyword"]],[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*/,"type","@pop"],["","","@pop"]],gen:[[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*\{/,"type","@push"],[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*/,"type"],[/<:/,"keyword"],[/(\})(\s*<:\s*)/,["type",{token:"keyword",next:"@pop"}]],[/\}/,"type","@pop"],{include:"@root"}],quote:[[/\$\(/,"key","@paste"],[/\(/,"@brackets","@paren"],[/\)/,"metatag","@pop"],{include:"@root"}],paste:[[/:\(/,"metatag","@quote"],[/\(/,"@brackets","@paren"],[/\)/,"key","@pop"],{include:"@root"}],paren:[[/\$\(/,"key","@paste"],[/:\(/,"metatag","@quote"],[/\(/,"@brackets","@push"],[/\)/,"@brackets","@pop"],{include:"@root"}],sregexp:[[/^.*/,"invalid"],[/[^\\"()\[\]{}]/,"regexp"],[/[()\[\]{}]/,"@brackets"],[/\\./,"operator.scss"],[/"[imsx]*/,"regexp.delim","@pop"]],tregexp:[[/[^\\"()\[\]{}]/,"regexp"],[/[()\[\]{}]/,"@brackets"],[/\\./,"operator.scss"],[/"(?!"")/,"string"],[/"""[imsx]*/,"regexp.delim","@pop"]],rsstring:[[/^.*/,"invalid"],[/[^\\"]/,"string"],[/\\./,"string.escape"],[/"/,"string.delim","@pop"]],rtstring:[[/[^\\"]/,"string"],[/\\./,"string.escape"],[/"(?!"")/,"string"],[/"""/,"string.delim","@pop"]],dsstring:[[/^.*/,"invalid"],[/[^\\"\$]/,"string"],[/\$/,"","@interpolated"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string.delim","@pop"]],dtstring:[[/[^\\"\$]/,"string"],[/\$/,"","@interpolated"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"(?!"")/,"string"],[/"""/,"string.delim","@pop"]],interpolated:[[/\(/,{token:"",switchTo:"@interpolated_compound"}],[/[a-zA-Z_]\w*/,"identifier"],["","","@pop"]],interpolated_compound:[[/\)/,"","@pop"],{include:"@root"}],whitespace:[[/[ \t\r\n]+/,""],[/#=/,"comment","@multi_comment"],[/#.*$/,"comment"]],multi_comment:[[/#=/,"comment","@push"],[/=#/,"comment","@pop"],[/=(?!#)|#(?!=)/,"comment"],[/[^#=]+/,"comment"]]}}},24696:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},o={defaultToken:"",tokenPostfix:".kt",keywords:["as","as?","break","class","continue","do","else","false","for","fun","if","in","!in","interface","is","!is","null","object","package","return","super","this","throw","true","try","typealias","val","var","when","while","by","catch","constructor","delegate","dynamic","field","file","finally","get","import","init","param","property","receiver","set","setparam","where","actual","abstract","annotation","companion","const","crossinline","data","enum","expect","external","final","infix","inline","inner","internal","lateinit","noinline","open","operator","out","override","private","protected","public","reified","sealed","suspend","tailrec","vararg","field","it"],operators:["+","-","*","/","%","=","+=","-=","*=","/=","%=","++","--","&&","||","!","==","!=","===","!==",">","<","<=",">=","[","]","!!","?.","?:","::","..",":","?","->","@",";","$","_"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/0[xX](@hexdigits)[Ll]?/,"number.hex"],[/0(@octaldigits)[Ll]?/,"number.octal"],[/0[bB](@binarydigits)[Ll]?/,"number.binary"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"""/,"string","@multistring"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@javadoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],javadoc:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc","@push"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],multistring:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"""/,"string","@pop"],[/./,"string"]]}}},52028:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(#?-?\d*\.\d\w*%?)|([@#!.:]?[\w-?]+%?)|[@#!.]/g,comments:{blockComment:["/*","*/"],lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},o={defaultToken:"",tokenPostfix:".less",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",identifierPlus:"-?-?([a-zA-Z:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@nestedJSBegin"},["[ \\t\\r\\n]+",""],{include:"@comments"},{include:"@keyword"},{include:"@strings"},{include:"@numbers"},["[*_]?[a-zA-Z\\-\\s]+(?=:.*(;|(\\\\$)))","attribute.name","@attribute"],["url(\\-prefix)?\\(",{token:"tag",next:"@urldeclaration"}],["[{}()\\[\\]]","@brackets"],["[,:;]","delimiter"],["#@identifierPlus","tag.id"],["&","tag"],["\\.@identifierPlus(?=\\()","tag.class","@attribute"],["\\.@identifierPlus","tag.class"],["@identifierPlus","tag"],{include:"@operators"},["@(@identifier(?=[:,\\)]))","variable","@attribute"],["@(@identifier)","variable"],["@","key","@atRules"]],nestedJSBegin:[["``","delimiter.backtick"],["`",{token:"delimiter.backtick",next:"@nestedJSEnd",nextEmbedded:"text/javascript"}]],nestedJSEnd:[["`",{token:"delimiter.backtick",next:"@pop",nextEmbedded:"@pop"}]],operators:[["[<>=\\+\\-\\*\\/\\^\\|\\~]","operator"]],keyword:[["(@[\\s]*import|![\\s]*important|true|false|when|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem|hue|saturation|lightness|alpha|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|round|ceil|floor|percentage)\\b","keyword"]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"tag",next:"@pop"}]],attribute:[{include:"@nestedJSBegin"},{include:"@comments"},{include:"@strings"},{include:"@numbers"},{include:"@keyword"},["[a-zA-Z\\-]+(?=\\()","attribute.value","@attribute"],[">","operator","@pop"],["@identifier","attribute.value"],{include:"@operators"},["@(@identifier)","variable"],["[)\\}]","@brackets","@pop"],["[{}()\\[\\]>]","@brackets"],["[;]","delimiter","@pop"],["[,=:]","delimiter"],["\\s",""],[".","attribute.value"]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],numbers:[["(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],strings:[['~?"',{token:"string.delimiter",next:"@stringsEndDoubleQuote"}],["~?'",{token:"string.delimiter",next:"@stringsEndQuote"}]],stringsEndDoubleQuote:[['\\\\"',"string"],['"',{token:"string.delimiter",next:"@popall"}],[".","string"]],stringsEndQuote:[["\\\\'","string"],["'",{token:"string.delimiter",next:"@popall"}],[".","string"]],atRules:[{include:"@comments"},{include:"@strings"},["[()]","delimiter"],["[\\{;]","delimiter","@pop"],[".","key"]]}}},45892:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"COMMENT"},brackets:[["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:":",close:"."}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`"},{open:'"',close:'"'},{open:"'",close:"'"},{open:":",close:"."}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|COMMENT\\s+)#region"),end:new RegExp("^\\s*(::\\s*|COMMENT\\s+)#endregion")}}},o={tokenPostfix:".lexon",ignoreCase:!0,keywords:["lexon","lex","clause","terms","contracts","may","pay","pays","appoints","into","to"],typeKeywords:["amount","person","key","time","date","asset","text"],operators:["less","greater","equal","le","gt","or","and","add","added","subtract","subtracted","multiply","multiplied","times","divide","divided","is","be","certified"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\.\d*\.\d*/,"number.semver"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"]],quoted_identifier:[[/[^\\"]+/,"identifier"],[/"/,{token:"identifier.quote",bracket:"@close",next:"@pop"}]],space_identifier_until_period:[[":","delimiter"],[" ",{token:"white",next:"@identifier_rest"}]],identifier_until_period:[{include:"@whitespace"},[":",{token:"delimiter",next:"@identifier_rest"}],[/[^\\.]+/,"identifier"],[/\./,{token:"delimiter",bracket:"@close",next:"@pop"}]],identifier_rest:[[/[^\\.]+/,"identifier"],[/\./,{token:"delimiter",bracket:"@close",next:"@pop"}]],semver:[{include:"@whitespace"},[":","delimiter"],[/\d*\.\d*\.\d*/,{token:"number.semver",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"]]}}},46137:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>h,language:()=>g});var n=i(78270),o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,l=(e,t,i,n)=>{if(t&&"object"===typeof t||"function"===typeof t)for(let l of r(t))a.call(e,l)||l===i||o(e,l,{get:()=>t[l],enumerable:!(n=s(t,l))||n.enumerable});return e},c=(e,t,i)=>(l(e,t,"default"),i&&l(i,t,"default")),d={}; -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/c(d,n);var u=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],h={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,brackets:[["\x3c!--","--\x3e"],["<",">"],["{{","}}"],["{%","%}"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"%",close:"%"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${u.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:d.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${u.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:d.languages.IndentAction.Indent}}]},g={defaultToken:"",tokenPostfix:"",builtinTags:["if","else","elseif","endif","render","assign","capture","endcapture","case","endcase","comment","endcomment","cycle","decrement","for","endfor","include","increment","layout","raw","endraw","render","tablerow","endtablerow","unless","endunless"],builtinFilters:["abs","append","at_least","at_most","capitalize","ceil","compact","date","default","divided_by","downcase","escape","escape_once","first","floor","join","json","last","lstrip","map","minus","modulo","newline_to_br","plus","prepend","remove","remove_first","replace","replace_first","reverse","round","rstrip","size","slice","sort","sort_natural","split","strip","strip_html","strip_newlines","times","truncate","truncatewords","uniq","upcase","url_decode","url_encode","where"],constants:["true","false"],operators:["==","!=",">","<",">=","<="],symbol:/[=>)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)([:\w]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)([\w\-]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[//,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],liquidState:[[/\{\{/,"delimiter.output.liquid"],[/\}\}/,{token:"delimiter.output.liquid",switchTo:"@$S2.$S3"}],[/\{\%/,"delimiter.tag.liquid"],[/raw\s*\%\}/,"delimiter.tag.liquid","@liquidRaw"],[/\%\}/,{token:"delimiter.tag.liquid",switchTo:"@$S2.$S3"}],{include:"liquidRoot"}],liquidRaw:[[/^(?!\{\%\s*endraw\s*\%\}).+/],[/\{\%/,"delimiter.tag.liquid"],[/@identifier/],[/\%\}/,{token:"delimiter.tag.liquid",next:"@root"}]],liquidRoot:[[/\d+(\.\d+)?/,"number.liquid"],[/"[^"]*"/,"string.liquid"],[/'[^']*'/,"string.liquid"],[/\s+/],[/@symbol/,{cases:{"@operators":"operator.liquid","@default":""}}],[/\./],[/@identifier/,{cases:{"@constants":"keyword.liquid","@builtinFilters":"predefined.liquid","@builtinTags":"predefined.liquid","@default":"variable.liquid"}}],[/[^}|%]/,"variable.liquid"]]}}},45399:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"--",blockComment:["--[[","]]"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={defaultToken:"",tokenPostfix:".lua",keywords:["and","break","do","else","elseif","end","false","for","function","goto","if","in","local","nil","not","or","repeat","return","then","true","until","while"],brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],operators:["+","-","*","/","%","^","#","==","~=","<=",">=","<",">","=",";",":",",",".","..","..."],symbols:/[=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"(*",close:"*)"},{open:"<*",close:"*>"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}]},o={defaultToken:"",tokenPostfix:".m3",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["AND","ANY","ARRAY","AS","BEGIN","BITS","BRANDED","BY","CASE","CONST","DIV","DO","ELSE","ELSIF","END","EVAL","EXCEPT","EXCEPTION","EXIT","EXPORTS","FINALLY","FOR","FROM","GENERIC","IF","IMPORT","IN","INTERFACE","LOCK","LOOP","METHODS","MOD","MODULE","NOT","OBJECT","OF","OR","OVERRIDES","PROCEDURE","RAISE","RAISES","READONLY","RECORD","REF","REPEAT","RETURN","REVEAL","SET","THEN","TO","TRY","TYPE","TYPECASE","UNSAFE","UNTIL","UNTRACED","VALUE","VAR","WHILE","WITH"],reservedConstNames:["ABS","ADR","ADRSIZE","BITSIZE","BYTESIZE","CEILING","DEC","DISPOSE","FALSE","FIRST","FLOAT","FLOOR","INC","ISTYPE","LAST","LOOPHOLE","MAX","MIN","NARROW","NEW","NIL","NUMBER","ORD","ROUND","SUBARRAY","TRUE","TRUNC","TYPECODE","VAL"],reservedTypeNames:["ADDRESS","ANY","BOOLEAN","CARDINAL","CHAR","EXTENDED","INTEGER","LONGCARD","LONGINT","LONGREAL","MUTEX","NULL","REAL","REFANY","ROOT","TEXT"],operators:["+","-","*","/","&","^","."],relations:["=","#","<","<=",">",">=","<:",":"],delimiters:["|","..","=>",",",";",":="],symbols:/[>=<#.,:;+\-*/&^]+/,escapes:/\\(?:[\\fnrt"']|[0-7]{3})/,tokenizer:{root:[[/_\w*/,"invalid"],[/[a-zA-Z][a-zA-Z0-9_]*/,{cases:{"@keywords":{token:"keyword.$0"},"@reservedConstNames":{token:"constant.reserved.$0"},"@reservedTypeNames":{token:"type.reserved.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[0-9]+\.[0-9]+(?:[DdEeXx][\+\-]?[0-9]+)?/,"number.float"],[/[0-9]+(?:\_[0-9a-fA-F]+)?L?/,"number"],[/@symbols/,{cases:{"@operators":"operators","@relations":"operators","@delimiters":"delimiter","@default":"invalid"}}],[/'[^\\']'/,"string.char"],[/(')(@escapes)(')/,["string.char","string.escape","string.char"]],[/'/,"invalid"],[/"([^"\\]|\\.)*$/,"invalid"],[/"/,"string.text","@text"]],text:[[/[^\\"]+/,"string.text"],[/@escapes/,"string.escape"],[/\\./,"invalid"],[/"/,"string.text","@pop"]],comment:[[/\(\*/,"comment","@push"],[/\*\)/,"comment","@pop"],[/./,"comment"]],pragma:[[/<\*/,"keyword.pragma","@push"],[/\*>/,"keyword.pragma","@pop"],[/./,"keyword.pragma"]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/<\*/,"keyword.pragma","@pragma"]]}}},4937:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">",notIn:["string"]}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"`",close:"`"}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#?region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#?endregion\\b.*--\x3e")}}},o={defaultToken:"",tokenPostfix:".md",control:/[\\`*_\[\]{}()#+\-\.!]/,noncontrol:/[^\\`*_\[\]{}()#+\-\.!]/,escapes:/\\(?:@control)/,jsescapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,empty:["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param"],tokenizer:{root:[[/^\s*\|/,"@rematch","@table_header"],[/^(\s{0,3})(#+)((?:[^\\#]|@escapes)+)((?:#+)?)/,["white","keyword","keyword","keyword"]],[/^\s*(=+|\-+)\s*$/,"keyword"],[/^\s*((\*[ ]?)+)\s*$/,"meta.separator"],[/^\s*>+/,"comment"],[/^\s*([\*\-+:]|\d+\.)\s/,"keyword"],[/^(\t|[ ]{4})[^ ].*$/,"string"],[/^\s*~~~\s*((?:\w|[\/\-#])+)?\s*$/,{token:"string",next:"@codeblock"}],[/^\s*```\s*((?:\w|[\/\-#])+).*$/,{token:"string",next:"@codeblockgh",nextEmbedded:"$1"}],[/^\s*```\s*$/,{token:"string",next:"@codeblock"}],{include:"@linecontent"}],table_header:[{include:"@table_common"},[/[^\|]+/,"keyword.table.header"]],table_body:[{include:"@table_common"},{include:"@linecontent"}],table_common:[[/\s*[\-:]+\s*/,{token:"keyword",switchTo:"table_body"}],[/^\s*\|/,"keyword.table.left"],[/^\s*[^\|]/,"@rematch","@pop"],[/^\s*$/,"@rematch","@pop"],[/\|/,{cases:{"@eos":"keyword.table.right","@default":"keyword.table.middle"}}]],codeblock:[[/^\s*~~~\s*$/,{token:"string",next:"@pop"}],[/^\s*```\s*$/,{token:"string",next:"@pop"}],[/.*$/,"variable.source"]],codeblockgh:[[/```\s*$/,{token:"string",next:"@pop",nextEmbedded:"@pop"}],[/[^`]+/,"variable.source"]],linecontent:[[/&\w+;/,"string.escape"],[/@escapes/,"escape"],[/\b__([^\\_]|@escapes|_(?!_))+__\b/,"strong"],[/\*\*([^\\*]|@escapes|\*(?!\*))+\*\*/,"strong"],[/\b_[^_]+_\b/,"emphasis"],[/\*([^\\*]|@escapes)+\*/,"emphasis"],[/`([^\\`]|@escapes)+`/,"variable"],[/\{+[^}]+\}+/,"string.target"],[/(!?\[)((?:[^\]\\]|@escapes)*)(\]\([^\)]+\))/,["string.link","","string.link"]],[/(!?\[)((?:[^\]\\]|@escapes)*)(\])/,"string.link"],{include:"html"}],html:[[/<(\w+)\/>/,"tag"],[/<(\w+)(\-|\w)*/,{cases:{"@empty":{token:"tag",next:"@tag.$1"},"@default":{token:"tag",next:"@tag.$1"}}}],[/<\/(\w+)(\-|\w)*\s*>/,{token:"tag"}],[//,"comment","@pop"],[//,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\?((php)|=)?/,{token:"@rematch",switchTo:"@phpInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],phpInSimpleState:[[/<\?((php)|=)?/,"metatag.php"],[/\?>/,{token:"metatag.php",switchTo:"@$S2.$S3"}],{include:"phpRoot"}],phpInEmbeddedState:[[/<\?((php)|=)?/,"metatag.php"],[/\?>/,{token:"metatag.php",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],{include:"phpRoot"}],phpRoot:[[/[a-zA-Z_]\w*/,{cases:{"@phpKeywords":{token:"keyword.php"},"@phpCompileTimeConstants":{token:"constant.php"},"@default":"identifier.php"}}],[/[$a-zA-Z_]\w*/,{cases:{"@phpPreDefinedVariables":{token:"variable.predefined.php"},"@default":"variable.php"}}],[/[{}]/,"delimiter.bracket.php"],[/[\[\]]/,"delimiter.array.php"],[/[()]/,"delimiter.parenthesis.php"],[/[ \t\r\n]+/],[/(#|\/\/)$/,"comment.php"],[/(#|\/\/)/,"comment.php","@phpLineComment"],[/\/\*/,"comment.php","@phpComment"],[/"/,"string.php","@phpDoubleQuoteString"],[/'/,"string.php","@phpSingleQuoteString"],[/[\+\-\*\%\&\|\^\~\!\=\<\>\/\?\;\:\.\,\@]/,"delimiter.php"],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float.php"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float.php"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/,"number.hex.php"],[/0[0-7']*[0-7]/,"number.octal.php"],[/0[bB][0-1']*[0-1]/,"number.binary.php"],[/\d[\d']*/,"number.php"],[/\d/,"number.php"]],phpComment:[[/\*\//,"comment.php","@pop"],[/[^*]+/,"comment.php"],[/./,"comment.php"]],phpLineComment:[[/\?>/,{token:"@rematch",next:"@pop"}],[/.$/,"comment.php","@pop"],[/[^?]+$/,"comment.php","@pop"],[/[^?]+/,"comment.php"],[/./,"comment.php"]],phpDoubleQuoteString:[[/[^\\"]+/,"string.php"],[/@escapes/,"string.escape.php"],[/\\./,"string.escape.invalid.php"],[/"/,"string.php","@pop"]],phpSingleQuoteString:[[/[^\\']+/,"string.php"],[/@escapes/,"string.escape.php"],[/\\./,"string.escape.invalid.php"],[/'/,"string.php","@pop"]]},phpKeywords:["abstract","and","array","as","break","callable","case","catch","cfunction","class","clone","const","continue","declare","default","do","else","elseif","enddeclare","endfor","endforeach","endif","endswitch","endwhile","extends","false","final","for","foreach","function","global","goto","if","implements","interface","instanceof","insteadof","namespace","new","null","object","old_function","or","private","protected","public","resource","static","switch","throw","trait","try","true","use","var","while","xor","die","echo","empty","exit","eval","include","include_once","isset","list","require","require_once","return","print","unset","yield","__construct"],phpCompileTimeConstants:["__CLASS__","__DIR__","__FILE__","__LINE__","__NAMESPACE__","__METHOD__","__FUNCTION__","__TRAIT__"],phpPreDefinedVariables:["$GLOBALS","$_SERVER","$_GET","$_POST","$_FILES","$_REQUEST","$_SESSION","$_ENV","$_COOKIE","$php_errormsg","$HTTP_RAW_POST_DATA","$http_response_header","$argc","$argv"],escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/}},69249:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"#"},brackets:[["[","]"],["<",">"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"<",close:">"},{open:"(",close:")"}],surroundingPairs:[{open:"[",close:"]"},{open:"<",close:">"},{open:"(",close:")"}]},o={defaultToken:"",tokenPostfix:".pla",brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"<",close:">",token:"delimiter.angle"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:[".i",".o",".mv",".ilb",".ob",".label",".type",".phase",".pair",".symbolic",".symbolic-output",".kiss",".p",".e",".end"],comment:/#.*$/,identifier:/[a-zA-Z]+[a-zA-Z0-9_\-]*/,plaContent:/[01\-~\|]+/,tokenizer:{root:[{include:"@whitespace"},[/@comment/,"comment"],[/\.([a-zA-Z_\-]+)/,{cases:{"@eos":{token:"keyword.$1"},"@keywords":{cases:{".type":{token:"keyword.$1",next:"@type"},"@default":{token:"keyword.$1",next:"@keywordArg"}}},"@default":{token:"keyword.$1"}}}],[/@identifier/,"identifier"],[/@plaContent/,"string"]],whitespace:[[/[ \t\r\n]+/,""]],type:[{include:"@whitespace"},[/\w+/,{token:"type",next:"@pop"}]],keywordArg:[[/[ \t\r\n]+/,{cases:{"@eos":{token:"",next:"@pop"},"@default":""}}],[/@comment/,"comment","@pop"],[/[<>()\[\]]/,{cases:{"@eos":{token:"@brackets",next:"@pop"},"@default":"@brackets"}}],[/\-?\d+/,{cases:{"@eos":{token:"number",next:"@pop"},"@default":"number"}}],[/@identifier/,{cases:{"@eos":{token:"identifier",next:"@pop"},"@default":"identifier"}}],[/[;=]/,{cases:{"@eos":{token:"delimiter",next:"@pop"},"@default":"delimiter"}}]]}}},86650:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}]},o={tokenPostfix:".pats",defaultToken:"invalid",keywords:["abstype","abst0ype","absprop","absview","absvtype","absviewtype","absvt0ype","absviewt0ype","as","and","assume","begin","classdec","datasort","datatype","dataprop","dataview","datavtype","dataviewtype","do","end","extern","extype","extvar","exception","fn","fnx","fun","prfn","prfun","praxi","castfn","if","then","else","ifcase","in","infix","infixl","infixr","prefix","postfix","implmnt","implement","primplmnt","primplement","import","let","local","macdef","macrodef","nonfix","symelim","symintr","overload","of","op","rec","sif","scase","sortdef","sta","stacst","stadef","static","staload","dynload","try","tkindef","typedef","propdef","viewdef","vtypedef","viewtypedef","prval","var","prvar","when","where","with","withtype","withprop","withview","withvtype","withviewtype"],keywords_dlr:["$delay","$ldelay","$arrpsz","$arrptrsize","$d2ctype","$effmask","$effmask_ntm","$effmask_exn","$effmask_ref","$effmask_wrt","$effmask_all","$extern","$extkind","$extype","$extype_struct","$extval","$extfcall","$extmcall","$literal","$myfilename","$mylocation","$myfunction","$lst","$lst_t","$lst_vt","$list","$list_t","$list_vt","$rec","$rec_t","$rec_vt","$record","$record_t","$record_vt","$tup","$tup_t","$tup_vt","$tuple","$tuple_t","$tuple_vt","$break","$continue","$raise","$showtype","$vcopyenv_v","$vcopyenv_vt","$tempenver","$solver_assert","$solver_verify"],keywords_srp:["#if","#ifdef","#ifndef","#then","#elif","#elifdef","#elifndef","#else","#endif","#error","#prerr","#print","#assert","#undef","#define","#include","#require","#pragma","#codegen2","#codegen3"],irregular_keyword_list:["val+","val-","val","case+","case-","case","addr@","addr","fold@","free@","fix@","fix","lam@","lam","llam@","llam","viewt@ype+","viewt@ype-","viewt@ype","viewtype+","viewtype-","viewtype","view+","view-","view@","view","type+","type-","type","vtype+","vtype-","vtype","vt@ype+","vt@ype-","vt@ype","viewt@ype+","viewt@ype-","viewt@ype","viewtype+","viewtype-","viewtype","prop+","prop-","prop","type+","type-","type","t@ype","t@ype+","t@ype-","abst@ype","abstype","absviewt@ype","absvt@ype","for*","for","while*","while"],keywords_types:["bool","double","byte","int","short","char","void","unit","long","float","string","strptr"],keywords_effects:["0","fun","clo","prf","funclo","cloptr","cloref","ref","ntm","1"],operators:["@","!","|","`",":","$",".","=","#","~","..","...","=>","=<>","=/=>","=>>","=/=>>","<",">","><",".<",">.",".<>.","->","-<>"],brackets:[{open:",(",close:")",token:"delimiter.parenthesis"},{open:"`(",close:")",token:"delimiter.parenthesis"},{open:"%(",close:")",token:"delimiter.parenthesis"},{open:"'(",close:")",token:"delimiter.parenthesis"},{open:"'{",close:"}",token:"delimiter.parenthesis"},{open:"@(",close:")",token:"delimiter.parenthesis"},{open:"@{",close:"}",token:"delimiter.brace"},{open:"@[",close:"]",token:"delimiter.square"},{open:"#[",close:"]",token:"delimiter.square"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],symbols:/[=>]/,digit:/[0-9]/,digitseq0:/@digit*/,xdigit:/[0-9A-Za-z]/,xdigitseq0:/@xdigit*/,INTSP:/[lLuU]/,FLOATSP:/[fFlL]/,fexponent:/[eE][+-]?[0-9]+/,fexponent_bin:/[pP][+-]?[0-9]+/,deciexp:/\.[0-9]*@fexponent?/,hexiexp:/\.[0-9a-zA-Z]*@fexponent_bin?/,irregular_keywords:/val[+-]?|case[+-]?|addr\@?|fold\@|free\@|fix\@?|lam\@?|llam\@?|prop[+-]?|type[+-]?|view[+-@]?|viewt@?ype[+-]?|t@?ype[+-]?|v(iew)?t@?ype[+-]?|abst@?ype|absv(iew)?t@?ype|for\*?|while\*?/,ESCHAR:/[ntvbrfa\\\?'"\(\[\{]/,start:"root",tokenizer:{root:[{regex:/[ \t\r\n]+/,action:{token:""}},{regex:/\(\*\)/,action:{token:"invalid"}},{regex:/\(\*/,action:{token:"comment",next:"lexing_COMMENT_block_ml"}},{regex:/\(/,action:"@brackets"},{regex:/\)/,action:"@brackets"},{regex:/\[/,action:"@brackets"},{regex:/\]/,action:"@brackets"},{regex:/\{/,action:"@brackets"},{regex:/\}/,action:"@brackets"},{regex:/,\(/,action:"@brackets"},{regex:/,/,action:{token:"delimiter.comma"}},{regex:/;/,action:{token:"delimiter.semicolon"}},{regex:/@\(/,action:"@brackets"},{regex:/@\[/,action:"@brackets"},{regex:/@\{/,action:"@brackets"},{regex:/:/,action:{token:"@rematch",next:"@pop"}}],lexing_EXTCODE:[{regex:/^%}/,action:{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}},{regex:/[^%]+/,action:""}],lexing_DQUOTE:[{regex:/"/,action:{token:"string.quote",next:"@pop"}},{regex:/(\{\$)(@IDENTFST@IDENTRST*)(\})/,action:[{token:"string.escape"},{token:"identifier"},{token:"string.escape"}]},{regex:/\\$/,action:{token:"string.escape"}},{regex:/\\(@ESCHAR|[xX]@xdigit+|@digit+)/,action:{token:"string.escape"}},{regex:/[^\\"]+/,action:{token:"string"}}]}}},31867:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["[","]"],["(",")"],["{","}"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment","identifier"]},{open:"[",close:"]",notIn:["string","comment","identifier"]},{open:"(",close:")",notIn:["string","comment","identifier"]},{open:"{",close:"}",notIn:["string","comment","identifier"]}]},o={defaultToken:"",tokenPostfix:".pq",ignoreCase:!1,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"{",close:"}",token:"delimiter.brackets"},{open:"(",close:")",token:"delimiter.parenthesis"}],operatorKeywords:["and","not","or"],keywords:["as","each","else","error","false","if","in","is","let","meta","otherwise","section","shared","then","true","try","type"],constructors:["#binary","#date","#datetime","#datetimezone","#duration","#table","#time"],constants:["#infinity","#nan","#sections","#shared"],typeKeywords:["action","any","anynonnull","none","null","logical","number","time","date","datetime","datetimezone","duration","text","binary","list","record","table","function"],builtinFunctions:["Access.Database","Action.Return","Action.Sequence","Action.Try","ActiveDirectory.Domains","AdoDotNet.DataSource","AdoDotNet.Query","AdobeAnalytics.Cubes","AnalysisServices.Database","AnalysisServices.Databases","AzureStorage.BlobContents","AzureStorage.Blobs","AzureStorage.Tables","Binary.Buffer","Binary.Combine","Binary.Compress","Binary.Decompress","Binary.End","Binary.From","Binary.FromList","Binary.FromText","Binary.InferContentType","Binary.Length","Binary.ToList","Binary.ToText","BinaryFormat.7BitEncodedSignedInteger","BinaryFormat.7BitEncodedUnsignedInteger","BinaryFormat.Binary","BinaryFormat.Byte","BinaryFormat.ByteOrder","BinaryFormat.Choice","BinaryFormat.Decimal","BinaryFormat.Double","BinaryFormat.Group","BinaryFormat.Length","BinaryFormat.List","BinaryFormat.Null","BinaryFormat.Record","BinaryFormat.SignedInteger16","BinaryFormat.SignedInteger32","BinaryFormat.SignedInteger64","BinaryFormat.Single","BinaryFormat.Text","BinaryFormat.Transform","BinaryFormat.UnsignedInteger16","BinaryFormat.UnsignedInteger32","BinaryFormat.UnsignedInteger64","Byte.From","Character.FromNumber","Character.ToNumber","Combiner.CombineTextByDelimiter","Combiner.CombineTextByEachDelimiter","Combiner.CombineTextByLengths","Combiner.CombineTextByPositions","Combiner.CombineTextByRanges","Comparer.Equals","Comparer.FromCulture","Comparer.Ordinal","Comparer.OrdinalIgnoreCase","Csv.Document","Cube.AddAndExpandDimensionColumn","Cube.AddMeasureColumn","Cube.ApplyParameter","Cube.AttributeMemberId","Cube.AttributeMemberProperty","Cube.CollapseAndRemoveColumns","Cube.Dimensions","Cube.DisplayFolders","Cube.Measures","Cube.Parameters","Cube.Properties","Cube.PropertyKey","Cube.ReplaceDimensions","Cube.Transform","Currency.From","DB2.Database","Date.AddDays","Date.AddMonths","Date.AddQuarters","Date.AddWeeks","Date.AddYears","Date.Day","Date.DayOfWeek","Date.DayOfWeekName","Date.DayOfYear","Date.DaysInMonth","Date.EndOfDay","Date.EndOfMonth","Date.EndOfQuarter","Date.EndOfWeek","Date.EndOfYear","Date.From","Date.FromText","Date.IsInCurrentDay","Date.IsInCurrentMonth","Date.IsInCurrentQuarter","Date.IsInCurrentWeek","Date.IsInCurrentYear","Date.IsInNextDay","Date.IsInNextMonth","Date.IsInNextNDays","Date.IsInNextNMonths","Date.IsInNextNQuarters","Date.IsInNextNWeeks","Date.IsInNextNYears","Date.IsInNextQuarter","Date.IsInNextWeek","Date.IsInNextYear","Date.IsInPreviousDay","Date.IsInPreviousMonth","Date.IsInPreviousNDays","Date.IsInPreviousNMonths","Date.IsInPreviousNQuarters","Date.IsInPreviousNWeeks","Date.IsInPreviousNYears","Date.IsInPreviousQuarter","Date.IsInPreviousWeek","Date.IsInPreviousYear","Date.IsInYearToDate","Date.IsLeapYear","Date.Month","Date.MonthName","Date.QuarterOfYear","Date.StartOfDay","Date.StartOfMonth","Date.StartOfQuarter","Date.StartOfWeek","Date.StartOfYear","Date.ToRecord","Date.ToText","Date.WeekOfMonth","Date.WeekOfYear","Date.Year","DateTime.AddZone","DateTime.Date","DateTime.FixedLocalNow","DateTime.From","DateTime.FromFileTime","DateTime.FromText","DateTime.IsInCurrentHour","DateTime.IsInCurrentMinute","DateTime.IsInCurrentSecond","DateTime.IsInNextHour","DateTime.IsInNextMinute","DateTime.IsInNextNHours","DateTime.IsInNextNMinutes","DateTime.IsInNextNSeconds","DateTime.IsInNextSecond","DateTime.IsInPreviousHour","DateTime.IsInPreviousMinute","DateTime.IsInPreviousNHours","DateTime.IsInPreviousNMinutes","DateTime.IsInPreviousNSeconds","DateTime.IsInPreviousSecond","DateTime.LocalNow","DateTime.Time","DateTime.ToRecord","DateTime.ToText","DateTimeZone.FixedLocalNow","DateTimeZone.FixedUtcNow","DateTimeZone.From","DateTimeZone.FromFileTime","DateTimeZone.FromText","DateTimeZone.LocalNow","DateTimeZone.RemoveZone","DateTimeZone.SwitchZone","DateTimeZone.ToLocal","DateTimeZone.ToRecord","DateTimeZone.ToText","DateTimeZone.ToUtc","DateTimeZone.UtcNow","DateTimeZone.ZoneHours","DateTimeZone.ZoneMinutes","Decimal.From","Diagnostics.ActivityId","Diagnostics.Trace","DirectQueryCapabilities.From","Double.From","Duration.Days","Duration.From","Duration.FromText","Duration.Hours","Duration.Minutes","Duration.Seconds","Duration.ToRecord","Duration.ToText","Duration.TotalDays","Duration.TotalHours","Duration.TotalMinutes","Duration.TotalSeconds","Embedded.Value","Error.Record","Excel.CurrentWorkbook","Excel.Workbook","Exchange.Contents","Expression.Constant","Expression.Evaluate","Expression.Identifier","Facebook.Graph","File.Contents","Folder.Contents","Folder.Files","Function.From","Function.Invoke","Function.InvokeAfter","Function.IsDataSource","GoogleAnalytics.Accounts","Guid.From","HdInsight.Containers","HdInsight.Contents","HdInsight.Files","Hdfs.Contents","Hdfs.Files","Informix.Database","Int16.From","Int32.From","Int64.From","Int8.From","ItemExpression.From","Json.Document","Json.FromValue","Lines.FromBinary","Lines.FromText","Lines.ToBinary","Lines.ToText","List.Accumulate","List.AllTrue","List.Alternate","List.AnyTrue","List.Average","List.Buffer","List.Combine","List.Contains","List.ContainsAll","List.ContainsAny","List.Count","List.Covariance","List.DateTimeZones","List.DateTimes","List.Dates","List.Difference","List.Distinct","List.Durations","List.FindText","List.First","List.FirstN","List.Generate","List.InsertRange","List.Intersect","List.IsDistinct","List.IsEmpty","List.Last","List.LastN","List.MatchesAll","List.MatchesAny","List.Max","List.MaxN","List.Median","List.Min","List.MinN","List.Mode","List.Modes","List.NonNullCount","List.Numbers","List.PositionOf","List.PositionOfAny","List.Positions","List.Product","List.Random","List.Range","List.RemoveFirstN","List.RemoveItems","List.RemoveLastN","List.RemoveMatchingItems","List.RemoveNulls","List.RemoveRange","List.Repeat","List.ReplaceMatchingItems","List.ReplaceRange","List.ReplaceValue","List.Reverse","List.Select","List.Single","List.SingleOrDefault","List.Skip","List.Sort","List.StandardDeviation","List.Sum","List.Times","List.Transform","List.TransformMany","List.Union","List.Zip","Logical.From","Logical.FromText","Logical.ToText","MQ.Queue","MySQL.Database","Number.Abs","Number.Acos","Number.Asin","Number.Atan","Number.Atan2","Number.BitwiseAnd","Number.BitwiseNot","Number.BitwiseOr","Number.BitwiseShiftLeft","Number.BitwiseShiftRight","Number.BitwiseXor","Number.Combinations","Number.Cos","Number.Cosh","Number.Exp","Number.Factorial","Number.From","Number.FromText","Number.IntegerDivide","Number.IsEven","Number.IsNaN","Number.IsOdd","Number.Ln","Number.Log","Number.Log10","Number.Mod","Number.Permutations","Number.Power","Number.Random","Number.RandomBetween","Number.Round","Number.RoundAwayFromZero","Number.RoundDown","Number.RoundTowardZero","Number.RoundUp","Number.Sign","Number.Sin","Number.Sinh","Number.Sqrt","Number.Tan","Number.Tanh","Number.ToText","OData.Feed","Odbc.DataSource","Odbc.Query","OleDb.DataSource","OleDb.Query","Oracle.Database","Percentage.From","PostgreSQL.Database","RData.FromBinary","Record.AddField","Record.Combine","Record.Field","Record.FieldCount","Record.FieldNames","Record.FieldOrDefault","Record.FieldValues","Record.FromList","Record.FromTable","Record.HasFields","Record.RemoveFields","Record.RenameFields","Record.ReorderFields","Record.SelectFields","Record.ToList","Record.ToTable","Record.TransformFields","Replacer.ReplaceText","Replacer.ReplaceValue","RowExpression.Column","RowExpression.From","Salesforce.Data","Salesforce.Reports","SapBusinessWarehouse.Cubes","SapHana.Database","SharePoint.Contents","SharePoint.Files","SharePoint.Tables","Single.From","Soda.Feed","Splitter.SplitByNothing","Splitter.SplitTextByAnyDelimiter","Splitter.SplitTextByDelimiter","Splitter.SplitTextByEachDelimiter","Splitter.SplitTextByLengths","Splitter.SplitTextByPositions","Splitter.SplitTextByRanges","Splitter.SplitTextByRepeatedLengths","Splitter.SplitTextByWhitespace","Sql.Database","Sql.Databases","SqlExpression.SchemaFrom","SqlExpression.ToExpression","Sybase.Database","Table.AddColumn","Table.AddIndexColumn","Table.AddJoinColumn","Table.AddKey","Table.AggregateTableColumn","Table.AlternateRows","Table.Buffer","Table.Column","Table.ColumnCount","Table.ColumnNames","Table.ColumnsOfType","Table.Combine","Table.CombineColumns","Table.Contains","Table.ContainsAll","Table.ContainsAny","Table.DemoteHeaders","Table.Distinct","Table.DuplicateColumn","Table.ExpandListColumn","Table.ExpandRecordColumn","Table.ExpandTableColumn","Table.FillDown","Table.FillUp","Table.FilterWithDataTable","Table.FindText","Table.First","Table.FirstN","Table.FirstValue","Table.FromColumns","Table.FromList","Table.FromPartitions","Table.FromRecords","Table.FromRows","Table.FromValue","Table.Group","Table.HasColumns","Table.InsertRows","Table.IsDistinct","Table.IsEmpty","Table.Join","Table.Keys","Table.Last","Table.LastN","Table.MatchesAllRows","Table.MatchesAnyRows","Table.Max","Table.MaxN","Table.Min","Table.MinN","Table.NestedJoin","Table.Partition","Table.PartitionValues","Table.Pivot","Table.PositionOf","Table.PositionOfAny","Table.PrefixColumns","Table.Profile","Table.PromoteHeaders","Table.Range","Table.RemoveColumns","Table.RemoveFirstN","Table.RemoveLastN","Table.RemoveMatchingRows","Table.RemoveRows","Table.RemoveRowsWithErrors","Table.RenameColumns","Table.ReorderColumns","Table.Repeat","Table.ReplaceErrorValues","Table.ReplaceKeys","Table.ReplaceMatchingRows","Table.ReplaceRelationshipIdentity","Table.ReplaceRows","Table.ReplaceValue","Table.ReverseRows","Table.RowCount","Table.Schema","Table.SelectColumns","Table.SelectRows","Table.SelectRowsWithErrors","Table.SingleRow","Table.Skip","Table.Sort","Table.SplitColumn","Table.ToColumns","Table.ToList","Table.ToRecords","Table.ToRows","Table.TransformColumnNames","Table.TransformColumnTypes","Table.TransformColumns","Table.TransformRows","Table.Transpose","Table.Unpivot","Table.UnpivotOtherColumns","Table.View","Table.ViewFunction","TableAction.DeleteRows","TableAction.InsertRows","TableAction.UpdateRows","Tables.GetRelationships","Teradata.Database","Text.AfterDelimiter","Text.At","Text.BeforeDelimiter","Text.BetweenDelimiters","Text.Clean","Text.Combine","Text.Contains","Text.End","Text.EndsWith","Text.Format","Text.From","Text.FromBinary","Text.Insert","Text.Length","Text.Lower","Text.Middle","Text.NewGuid","Text.PadEnd","Text.PadStart","Text.PositionOf","Text.PositionOfAny","Text.Proper","Text.Range","Text.Remove","Text.RemoveRange","Text.Repeat","Text.Replace","Text.ReplaceRange","Text.Select","Text.Split","Text.SplitAny","Text.Start","Text.StartsWith","Text.ToBinary","Text.ToList","Text.Trim","Text.TrimEnd","Text.TrimStart","Text.Upper","Time.EndOfHour","Time.From","Time.FromText","Time.Hour","Time.Minute","Time.Second","Time.StartOfHour","Time.ToRecord","Time.ToText","Type.AddTableKey","Type.ClosedRecord","Type.Facets","Type.ForFunction","Type.ForRecord","Type.FunctionParameters","Type.FunctionRequiredParameters","Type.FunctionReturn","Type.Is","Type.IsNullable","Type.IsOpenRecord","Type.ListItem","Type.NonNullable","Type.OpenRecord","Type.RecordFields","Type.ReplaceFacets","Type.ReplaceTableKeys","Type.TableColumn","Type.TableKeys","Type.TableRow","Type.TableSchema","Type.Union","Uri.BuildQueryString","Uri.Combine","Uri.EscapeDataString","Uri.Parts","Value.Add","Value.As","Value.Compare","Value.Divide","Value.Equals","Value.Firewall","Value.FromText","Value.Is","Value.Metadata","Value.Multiply","Value.NativeQuery","Value.NullableEquals","Value.RemoveMetadata","Value.ReplaceMetadata","Value.ReplaceType","Value.Subtract","Value.Type","ValueAction.NativeStatement","ValueAction.Replace","Variable.Value","Web.Contents","Web.Page","WebAction.Request","Xml.Document","Xml.Tables"],builtinConstants:["BinaryEncoding.Base64","BinaryEncoding.Hex","BinaryOccurrence.Optional","BinaryOccurrence.Repeating","BinaryOccurrence.Required","ByteOrder.BigEndian","ByteOrder.LittleEndian","Compression.Deflate","Compression.GZip","CsvStyle.QuoteAfterDelimiter","CsvStyle.QuoteAlways","Culture.Current","Day.Friday","Day.Monday","Day.Saturday","Day.Sunday","Day.Thursday","Day.Tuesday","Day.Wednesday","ExtraValues.Error","ExtraValues.Ignore","ExtraValues.List","GroupKind.Global","GroupKind.Local","JoinAlgorithm.Dynamic","JoinAlgorithm.LeftHash","JoinAlgorithm.LeftIndex","JoinAlgorithm.PairwiseHash","JoinAlgorithm.RightHash","JoinAlgorithm.RightIndex","JoinAlgorithm.SortMerge","JoinKind.FullOuter","JoinKind.Inner","JoinKind.LeftAnti","JoinKind.LeftOuter","JoinKind.RightAnti","JoinKind.RightOuter","JoinSide.Left","JoinSide.Right","MissingField.Error","MissingField.Ignore","MissingField.UseNull","Number.E","Number.Epsilon","Number.NaN","Number.NegativeInfinity","Number.PI","Number.PositiveInfinity","Occurrence.All","Occurrence.First","Occurrence.Last","Occurrence.Optional","Occurrence.Repeating","Occurrence.Required","Order.Ascending","Order.Descending","Precision.Decimal","Precision.Double","QuoteStyle.Csv","QuoteStyle.None","RelativePosition.FromEnd","RelativePosition.FromStart","RoundingMode.AwayFromZero","RoundingMode.Down","RoundingMode.ToEven","RoundingMode.TowardZero","RoundingMode.Up","SapHanaDistribution.All","SapHanaDistribution.Connection","SapHanaDistribution.Off","SapHanaDistribution.Statement","SapHanaRangeOperator.Equals","SapHanaRangeOperator.GreaterThan","SapHanaRangeOperator.GreaterThanOrEquals","SapHanaRangeOperator.LessThan","SapHanaRangeOperator.LessThanOrEquals","SapHanaRangeOperator.NotEquals","TextEncoding.Ascii","TextEncoding.BigEndianUnicode","TextEncoding.Unicode","TextEncoding.Utf16","TextEncoding.Utf8","TextEncoding.Windows","TraceLevel.Critical","TraceLevel.Error","TraceLevel.Information","TraceLevel.Verbose","TraceLevel.Warning","WebMethod.Delete","WebMethod.Get","WebMethod.Head","WebMethod.Patch","WebMethod.Post","WebMethod.Put"],builtinTypes:["Action.Type","Any.Type","Binary.Type","BinaryEncoding.Type","BinaryOccurrence.Type","Byte.Type","ByteOrder.Type","Character.Type","Compression.Type","CsvStyle.Type","Currency.Type","Date.Type","DateTime.Type","DateTimeZone.Type","Day.Type","Decimal.Type","Double.Type","Duration.Type","ExtraValues.Type","Function.Type","GroupKind.Type","Guid.Type","Int16.Type","Int32.Type","Int64.Type","Int8.Type","JoinAlgorithm.Type","JoinKind.Type","JoinSide.Type","List.Type","Logical.Type","MissingField.Type","None.Type","Null.Type","Number.Type","Occurrence.Type","Order.Type","Password.Type","Percentage.Type","Precision.Type","QuoteStyle.Type","Record.Type","RelativePosition.Type","RoundingMode.Type","SapHanaDistribution.Type","SapHanaRangeOperator.Type","Single.Type","Table.Type","Text.Type","TextEncoding.Type","Time.Type","TraceLevel.Type","Type.Type","Uri.Type","WebMethod.Type"],tokenizer:{root:[[/#"[\w \.]+"/,"identifier.quote"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/\d+([eE][\-+]?\d+)?/,"number"],[/(#?[a-z]+)\b/,{cases:{"@typeKeywords":"type","@keywords":"keyword","@constants":"constant","@constructors":"constructor","@operatorKeywords":"operators","@default":"identifier"}}],[/\b([A-Z][a-zA-Z0-9]+\.Type)\b/,{cases:{"@builtinTypes":"type","@default":"identifier"}}],[/\b([A-Z][a-zA-Z0-9]+\.[A-Z][a-zA-Z0-9]+)\b/,{cases:{"@builtinFunctions":"keyword.function","@builtinConstants":"constant","@default":"identifier"}}],[/\b([a-zA-Z_][\w\.]*)\b/,"identifier"],{include:"@whitespace"},{include:"@comments"},{include:"@strings"},[/[{}()\[\]]/,"@brackets"],[/([=\+<>\-\*&@\?\/!])|([<>]=)|(<>)|(=>)|(\.\.\.)|(\.\.)/,"operators"],[/[,;]/,"delimiter"]],whitespace:[[/\s+/,"white"]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],strings:[['"',"string","@string"]],string:[['""',"string.escape"],['"',"string","@pop"],[".","string"]]}}},28287:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"#",blockComment:["<#","#>"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},o={defaultToken:"",ignoreCase:!0,tokenPostfix:".ps1",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],keywords:["begin","break","catch","class","continue","data","define","do","dynamicparam","else","elseif","end","exit","filter","finally","for","foreach","from","function","if","in","param","process","return","switch","throw","trap","try","until","using","var","while","workflow","parallel","sequence","inlinescript","configuration"],helpKeywords:/SYNOPSIS|DESCRIPTION|PARAMETER|EXAMPLE|INPUTS|OUTPUTS|NOTES|LINK|COMPONENT|ROLE|FUNCTIONALITY|FORWARDHELPTARGETNAME|FORWARDHELPCATEGORY|REMOTEHELPRUNSPACE|EXTERNALHELP/,symbols:/[=>/,"comment","@pop"],[/(\.)(@helpKeywords)(?!\w)/,{token:"comment.keyword.$2"}],[/[\.#]/,"comment"]]}}},21786:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>o,language:()=>s}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n=["true","false"],o={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string"]}],autoCloseBefore:".,=}])>' \n\t",indentationRules:{increaseIndentPattern:new RegExp("^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$"),decreaseIndentPattern:new RegExp("^((?!.*?\\/\\*).*\\*/)?\\s*[\\}\\]].*$")}},s={defaultToken:"",tokenPostfix:".proto",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],symbols:/[=>/,{token:"@brackets",bracket:"@close",switchTo:"identifier"}]],field:[{include:"@whitespace"},["group",{cases:{"$S2==proto2":{token:"keyword",switchTo:"@groupDecl.$S2"}}}],[/(@identifier)(\s*)(=)/,["identifier","white",{token:"delimiter",next:"@pop"}]],[/@fullIdentifier|\./,{cases:{"@builtinTypes":"keyword","@default":"type.identifier"}}]],groupDecl:[{include:"@whitespace"},[/@identifier/,"identifier"],["=","operator"],[/{/,{token:"@brackets",bracket:"@open",switchTo:"@messageBody.$S2"}],{include:"@constant"}],type:[{include:"@whitespace"},[/@identifier/,"type.identifier","@pop"],[/./,"delimiter"]],identifier:[{include:"@whitespace"},[/@identifier/,"identifier","@pop"]],serviceDecl:[{include:"@whitespace"},[/@identifier/,"identifier"],[/{/,{token:"@brackets",bracket:"@open",switchTo:"@serviceBody.$S2"}]],serviceBody:[{include:"@whitespace"},{include:"@constant"},[/;/,"delimiter"],[/option\b/,"keyword","@option.$S2"],[/rpc\b/,"keyword","@rpc.$S2"],[/\[/,{token:"@brackets",bracket:"@open",next:"@options.$S2"}],[/}/,{token:"@brackets",bracket:"@close",next:"@pop"}]],rpc:[{include:"@whitespace"},[/@identifier/,"identifier"],[/\(/,{token:"@brackets",bracket:"@open",switchTo:"@request.$S2"}],[/{/,{token:"@brackets",bracket:"@open",next:"@methodOptions.$S2"}],[/;/,"delimiter","@pop"]],request:[{include:"@whitespace"},[/@messageType/,{cases:{stream:{token:"keyword",next:"@type.$S2"},"@default":"type.identifier"}}],[/\)/,{token:"@brackets",bracket:"@close",switchTo:"@returns.$S2"}]],returns:[{include:"@whitespace"},[/returns\b/,"keyword"],[/\(/,{token:"@brackets",bracket:"@open",switchTo:"@response.$S2"}]],response:[{include:"@whitespace"},[/@messageType/,{cases:{stream:{token:"keyword",next:"@type.$S2"},"@default":"type.identifier"}}],[/\)/,{token:"@brackets",bracket:"@close",switchTo:"@rpc.$S2"}]],methodOptions:[{include:"@whitespace"},{include:"@constant"},[/;/,"delimiter"],["option","keyword"],[/@optionName/,"annotation"],[/[()]/,"annotation.brackets"],[/=/,"operator"],[/}/,{token:"@brackets",bracket:"@close",next:"@pop"}]],comment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@push"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",next:"@pop"}]],stringSingle:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],constant:[["@boolLit","keyword.constant"],["@hexLit","number.hex"],["@octalLit","number.octal"],["@decimalLit","number"],["@floatLit","number.float"],[/("([^"\\]|\\.)*|'([^'\\]|\\.)*)$/,"string.invalid"],[/"/,{token:"string.quote",bracket:"@open",next:"@string"}],[/'/,{token:"string.quote",bracket:"@open",next:"@stringSingle"}],[/{/,{token:"@brackets",bracket:"@open",next:"@prototext"}],[/identifier/,"identifier"]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],prototext:[{include:"@whitespace"},{include:"@constant"},[/@identifier/,"identifier"],[/[:;]/,"delimiter"],[/}/,{token:"@brackets",bracket:"@close",next:"@pop"}]]}}},46690:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}],folding:{offSide:!0}},o={defaultToken:"",tokenPostfix:".pug",ignoreCase:!0,brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],keywords:["append","block","case","default","doctype","each","else","extends","for","if","in","include","mixin","typeof","unless","var","when"],tags:["a","abbr","acronym","address","area","article","aside","audio","b","base","basefont","bdi","bdo","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","command","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","font","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","keygen","kbd","label","li","link","map","mark","menu","meta","meter","nav","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strike","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","tracks","tt","u","ul","video","wbr"],symbols:/[\+\-\*\%\&\|\!\=\/\.\,\:]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^(\s*)([a-zA-Z_-][\w-]*)/,{cases:{"$2@tags":{cases:{"@eos":["","tag"],"@default":["",{token:"tag",next:"@tag.$1"}]}},"$2@keywords":["",{token:"keyword.$2"}],"@default":["",""]}}],[/^(\s*)(#[a-zA-Z_-][\w-]*)/,{cases:{"@eos":["","tag.id"],"@default":["",{token:"tag.id",next:"@tag.$1"}]}}],[/^(\s*)(\.[a-zA-Z_-][\w-]*)/,{cases:{"@eos":["","tag.class"],"@default":["",{token:"tag.class",next:"@tag.$1"}]}}],[/^(\s*)(\|.*)$/,""],{include:"@whitespace"},[/[a-zA-Z_$][\w$]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":""}}],[/[{}()\[\]]/,"@brackets"],[/@symbols/,"delimiter"],[/\d+\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\d+/,"number"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],tag:[[/(\.)(\s*$)/,[{token:"delimiter",next:"@blockText.$S2."},""]],[/\s+/,{token:"",next:"@simpleText"}],[/#[a-zA-Z_-][\w-]*/,{cases:{"@eos":{token:"tag.id",next:"@pop"},"@default":"tag.id"}}],[/\.[a-zA-Z_-][\w-]*/,{cases:{"@eos":{token:"tag.class",next:"@pop"},"@default":"tag.class"}}],[/\(/,{token:"delimiter.parenthesis",next:"@attributeList"}]],simpleText:[[/[^#]+$/,{token:"",next:"@popall"}],[/[^#]+/,{token:""}],[/(#{)([^}]*)(})/,{cases:{"@eos":["interpolation.delimiter","interpolation",{token:"interpolation.delimiter",next:"@popall"}],"@default":["interpolation.delimiter","interpolation","interpolation.delimiter"]}}],[/#$/,{token:"",next:"@popall"}],[/#/,""]],attributeList:[[/\s+/,""],[/(\w+)(\s*=\s*)("|')/,["attribute.name","delimiter",{token:"attribute.value",next:"@value.$3"}]],[/\w+/,"attribute.name"],[/,/,{cases:{"@eos":{token:"attribute.delimiter",next:"@popall"},"@default":"attribute.delimiter"}}],[/\)$/,{token:"delimiter.parenthesis",next:"@popall"}],[/\)/,{token:"delimiter.parenthesis",next:"@pop"}]],whitespace:[[/^(\s*)(\/\/.*)$/,{token:"comment",next:"@blockText.$1.comment"}],[/[ \t\r\n]+/,""],[//,{token:"comment",next:"@pop"}],[//,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/@[^@]/,{token:"@rematch",switchTo:"@razorInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],razorInSimpleState:[[/@\*/,"comment.cs","@razorBlockCommentTopLevel"],[/@[{(]/,"metatag.cs","@razorRootTopLevel"],[/(@)(\s*[\w]+)/,["metatag.cs",{token:"identifier.cs",switchTo:"@$S2.$S3"}]],[/[})]/,{token:"metatag.cs",switchTo:"@$S2.$S3"}],[/\*@/,{token:"comment.cs",switchTo:"@$S2.$S3"}]],razorInEmbeddedState:[[/@\*/,"comment.cs","@razorBlockCommentTopLevel"],[/@[{(]/,"metatag.cs","@razorRootTopLevel"],[/(@)(\s*[\w]+)/,["metatag.cs",{token:"identifier.cs",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}]],[/[})]/,{token:"metatag.cs",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],[/\*@/,{token:"comment.cs",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}]],razorBlockCommentTopLevel:[[/\*@/,"@rematch","@pop"],[/[^*]+/,"comment.cs"],[/./,"comment.cs"]],razorBlockComment:[[/\*@/,"comment.cs","@pop"],[/[^*]+/,"comment.cs"],[/./,"comment.cs"]],razorRootTopLevel:[[/\{/,"delimiter.bracket.cs","@razorRoot"],[/\(/,"delimiter.parenthesis.cs","@razorRoot"],[/[})]/,"@rematch","@pop"],{include:"razorCommon"}],razorRoot:[[/\{/,"delimiter.bracket.cs","@razorRoot"],[/\(/,"delimiter.parenthesis.cs","@razorRoot"],[/\}/,"delimiter.bracket.cs","@pop"],[/\)/,"delimiter.parenthesis.cs","@pop"],{include:"razorCommon"}],razorCommon:[[/[a-zA-Z_]\w*/,{cases:{"@razorKeywords":{token:"keyword.cs"},"@default":"identifier.cs"}}],[/[\[\]]/,"delimiter.array.cs"],[/[ \t\r\n]+/],[/\/\/.*$/,"comment.cs"],[/@\*/,"comment.cs","@razorBlockComment"],[/"([^"]*)"/,"string.cs"],[/'([^']*)'/,"string.cs"],[/(<)([\w\-]+)(\/>)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)([\w\-]+)(>)/,["delimiter.html","tag.html","delimiter.html"]],[/(<\/)([\w\-]+)(>)/,["delimiter.html","tag.html","delimiter.html"]],[/[\+\-\*\%\&\|\^\~\!\=\<\>\/\?\;\:\.\,]/,"delimiter.cs"],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float.cs"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float.cs"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/,"number.hex.cs"],[/0[0-7']*[0-7]/,"number.octal.cs"],[/0[bB][0-1']*[0-1]/,"number.binary.cs"],[/\d[\d']*/,"number.cs"],[/\d/,"number.cs"]]},razorKeywords:["abstract","as","async","await","base","bool","break","by","byte","case","catch","char","checked","class","const","continue","decimal","default","delegate","do","double","descending","explicit","event","extern","else","enum","false","finally","fixed","float","for","foreach","from","goto","group","if","implicit","in","int","interface","internal","into","is","lock","long","nameof","new","null","namespace","object","operator","out","override","orderby","params","private","protected","public","readonly","ref","return","switch","struct","sbyte","sealed","short","sizeof","stackalloc","static","string","select","this","throw","true","try","typeof","uint","ulong","unchecked","unsafe","ushort","using","var","virtual","volatile","void","when","while","where","yield","model","inject"],escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/}},48130:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={defaultToken:"",tokenPostfix:".redis",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:["APPEND","AUTH","BGREWRITEAOF","BGSAVE","BITCOUNT","BITFIELD","BITOP","BITPOS","BLPOP","BRPOP","BRPOPLPUSH","CLIENT","KILL","LIST","GETNAME","PAUSE","REPLY","SETNAME","CLUSTER","ADDSLOTS","COUNT-FAILURE-REPORTS","COUNTKEYSINSLOT","DELSLOTS","FAILOVER","FORGET","GETKEYSINSLOT","INFO","KEYSLOT","MEET","NODES","REPLICATE","RESET","SAVECONFIG","SET-CONFIG-EPOCH","SETSLOT","SLAVES","SLOTS","COMMAND","COUNT","GETKEYS","CONFIG","GET","REWRITE","SET","RESETSTAT","DBSIZE","DEBUG","OBJECT","SEGFAULT","DECR","DECRBY","DEL","DISCARD","DUMP","ECHO","EVAL","EVALSHA","EXEC","EXISTS","EXPIRE","EXPIREAT","FLUSHALL","FLUSHDB","GEOADD","GEOHASH","GEOPOS","GEODIST","GEORADIUS","GEORADIUSBYMEMBER","GETBIT","GETRANGE","GETSET","HDEL","HEXISTS","HGET","HGETALL","HINCRBY","HINCRBYFLOAT","HKEYS","HLEN","HMGET","HMSET","HSET","HSETNX","HSTRLEN","HVALS","INCR","INCRBY","INCRBYFLOAT","KEYS","LASTSAVE","LINDEX","LINSERT","LLEN","LPOP","LPUSH","LPUSHX","LRANGE","LREM","LSET","LTRIM","MGET","MIGRATE","MONITOR","MOVE","MSET","MSETNX","MULTI","PERSIST","PEXPIRE","PEXPIREAT","PFADD","PFCOUNT","PFMERGE","PING","PSETEX","PSUBSCRIBE","PUBSUB","PTTL","PUBLISH","PUNSUBSCRIBE","QUIT","RANDOMKEY","READONLY","READWRITE","RENAME","RENAMENX","RESTORE","ROLE","RPOP","RPOPLPUSH","RPUSH","RPUSHX","SADD","SAVE","SCARD","SCRIPT","FLUSH","LOAD","SDIFF","SDIFFSTORE","SELECT","SETBIT","SETEX","SETNX","SETRANGE","SHUTDOWN","SINTER","SINTERSTORE","SISMEMBER","SLAVEOF","SLOWLOG","SMEMBERS","SMOVE","SORT","SPOP","SRANDMEMBER","SREM","STRLEN","SUBSCRIBE","SUNION","SUNIONSTORE","SWAPDB","SYNC","TIME","TOUCH","TTL","TYPE","UNSUBSCRIBE","UNLINK","UNWATCH","WAIT","WATCH","ZADD","ZCARD","ZCOUNT","ZINCRBY","ZINTERSTORE","ZLEXCOUNT","ZRANGE","ZRANGEBYLEX","ZREVRANGEBYLEX","ZRANGEBYSCORE","ZRANK","ZREM","ZREMRANGEBYLEX","ZREMRANGEBYRANK","ZREMRANGEBYSCORE","ZREVRANGE","ZREVRANGEBYSCORE","ZREVRANK","ZSCORE","ZUNIONSTORE","SCAN","SSCAN","HSCAN","ZSCAN"],operators:[],builtinFunctions:[],builtinVariables:[],pseudoColumns:[],tokenizer:{root:[{include:"@whitespace"},{include:"@pseudoColumns"},{include:"@numbers"},{include:"@strings"},{include:"@scopes"},[/[;,.]/,"delimiter"],[/[()]/,"@brackets"],[/[\w@#$]+/,{cases:{"@keywords":"keyword","@operators":"operator","@builtinVariables":"predefined","@builtinFunctions":"predefined","@default":"identifier"}}],[/[<>=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],pseudoColumns:[[/[$][A-Za-z_][\w@#$]*/,{cases:{"@pseudoColumns":"predefined","@default":"identifier"}}]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/'/,{token:"string",next:"@string"}],[/"/,{token:"string.double",next:"@stringDouble"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],stringDouble:[[/[^"]+/,"string.double"],[/""/,"string.double"],[/"/,{token:"string.double",next:"@pop"}]],scopes:[]}}},94950:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"--",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={defaultToken:"",tokenPostfix:".sql",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:["AES128","AES256","ALL","ALLOWOVERWRITE","ANALYSE","ANALYZE","AND","ANY","ARRAY","AS","ASC","AUTHORIZATION","AZ64","BACKUP","BETWEEN","BINARY","BLANKSASNULL","BOTH","BYTEDICT","BZIP2","CASE","CAST","CHECK","COLLATE","COLUMN","CONSTRAINT","CREATE","CREDENTIALS","CROSS","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURRENT_USER_ID","DEFAULT","DEFERRABLE","DEFLATE","DEFRAG","DELTA","DELTA32K","DESC","DISABLE","DISTINCT","DO","ELSE","EMPTYASNULL","ENABLE","ENCODE","ENCRYPT","ENCRYPTION","END","EXCEPT","EXPLICIT","FALSE","FOR","FOREIGN","FREEZE","FROM","FULL","GLOBALDICT256","GLOBALDICT64K","GRANT","GROUP","GZIP","HAVING","IDENTITY","IGNORE","ILIKE","IN","INITIALLY","INNER","INTERSECT","INTO","IS","ISNULL","JOIN","LANGUAGE","LEADING","LEFT","LIKE","LIMIT","LOCALTIME","LOCALTIMESTAMP","LUN","LUNS","LZO","LZOP","MINUS","MOSTLY16","MOSTLY32","MOSTLY8","NATURAL","NEW","NOT","NOTNULL","NULL","NULLS","OFF","OFFLINE","OFFSET","OID","OLD","ON","ONLY","OPEN","OR","ORDER","OUTER","OVERLAPS","PARALLEL","PARTITION","PERCENT","PERMISSIONS","PLACING","PRIMARY","RAW","READRATIO","RECOVER","REFERENCES","RESPECT","REJECTLOG","RESORT","RESTORE","RIGHT","SELECT","SESSION_USER","SIMILAR","SNAPSHOT","SOME","SYSDATE","SYSTEM","TABLE","TAG","TDES","TEXT255","TEXT32K","THEN","TIMESTAMP","TO","TOP","TRAILING","TRUE","TRUNCATECOLUMNS","UNION","UNIQUE","USER","USING","VERBOSE","WALLET","WHEN","WHERE","WITH","WITHOUT"],operators:["AND","BETWEEN","IN","LIKE","NOT","OR","IS","NULL","INTERSECT","UNION","INNER","JOIN","LEFT","OUTER","RIGHT"],builtinFunctions:["current_schema","current_schemas","has_database_privilege","has_schema_privilege","has_table_privilege","age","current_time","current_timestamp","localtime","isfinite","now","ascii","get_bit","get_byte","set_bit","set_byte","to_ascii","approximate percentile_disc","avg","count","listagg","max","median","min","percentile_cont","stddev_samp","stddev_pop","sum","var_samp","var_pop","bit_and","bit_or","bool_and","bool_or","cume_dist","first_value","lag","last_value","lead","nth_value","ratio_to_report","dense_rank","ntile","percent_rank","rank","row_number","case","coalesce","decode","greatest","least","nvl","nvl2","nullif","add_months","at time zone","convert_timezone","current_date","date_cmp","date_cmp_timestamp","date_cmp_timestamptz","date_part_year","dateadd","datediff","date_part","date_trunc","extract","getdate","interval_cmp","last_day","months_between","next_day","sysdate","timeofday","timestamp_cmp","timestamp_cmp_date","timestamp_cmp_timestamptz","timestamptz_cmp","timestamptz_cmp_date","timestamptz_cmp_timestamp","timezone","to_timestamp","trunc","abs","acos","asin","atan","atan2","cbrt","ceil","ceiling","checksum","cos","cot","degrees","dexp","dlog1","dlog10","exp","floor","ln","log","mod","pi","power","radians","random","round","sin","sign","sqrt","tan","to_hex","bpcharcmp","btrim","bttext_pattern_cmp","char_length","character_length","charindex","chr","concat","crc32","func_sha1","initcap","left and rights","len","length","lower","lpad and rpads","ltrim","md5","octet_length","position","quote_ident","quote_literal","regexp_count","regexp_instr","regexp_replace","regexp_substr","repeat","replace","replicate","reverse","rtrim","split_part","strpos","strtol","substring","textlen","translate","trim","upper","cast","convert","to_char","to_date","to_number","json_array_length","json_extract_array_element_text","json_extract_path_text","current_setting","pg_cancel_backend","pg_terminate_backend","set_config","current_database","current_user","current_user_id","pg_backend_pid","pg_last_copy_count","pg_last_copy_id","pg_last_query_id","pg_last_unload_count","session_user","slice_num","user","version","abbrev","acosd","any","area","array_agg","array_append","array_cat","array_dims","array_fill","array_length","array_lower","array_ndims","array_position","array_positions","array_prepend","array_remove","array_replace","array_to_json","array_to_string","array_to_tsvector","array_upper","asind","atan2d","atand","bit","bit_length","bound_box","box","brin_summarize_new_values","broadcast","cardinality","center","circle","clock_timestamp","col_description","concat_ws","convert_from","convert_to","corr","cosd","cotd","covar_pop","covar_samp","current_catalog","current_query","current_role","currval","cursor_to_xml","diameter","div","encode","enum_first","enum_last","enum_range","every","family","format","format_type","generate_series","generate_subscripts","get_current_ts_config","gin_clean_pending_list","grouping","has_any_column_privilege","has_column_privilege","has_foreign_data_wrapper_privilege","has_function_privilege","has_language_privilege","has_sequence_privilege","has_server_privilege","has_tablespace_privilege","has_type_privilege","height","host","hostmask","inet_client_addr","inet_client_port","inet_merge","inet_same_family","inet_server_addr","inet_server_port","isclosed","isempty","isopen","json_agg","json_object","json_object_agg","json_populate_record","json_populate_recordset","json_to_record","json_to_recordset","jsonb_agg","jsonb_object_agg","justify_days","justify_hours","justify_interval","lastval","left","line","localtimestamp","lower_inc","lower_inf","lpad","lseg","make_date","make_interval","make_time","make_timestamp","make_timestamptz","masklen","mode","netmask","network","nextval","npoints","num_nonnulls","num_nulls","numnode","obj_description","overlay","parse_ident","path","pclose","percentile_disc","pg_advisory_lock","pg_advisory_lock_shared","pg_advisory_unlock","pg_advisory_unlock_all","pg_advisory_unlock_shared","pg_advisory_xact_lock","pg_advisory_xact_lock_shared","pg_backup_start_time","pg_blocking_pids","pg_client_encoding","pg_collation_is_visible","pg_column_size","pg_conf_load_time","pg_control_checkpoint","pg_control_init","pg_control_recovery","pg_control_system","pg_conversion_is_visible","pg_create_logical_replication_slot","pg_create_physical_replication_slot","pg_create_restore_point","pg_current_xlog_flush_location","pg_current_xlog_insert_location","pg_current_xlog_location","pg_database_size","pg_describe_object","pg_drop_replication_slot","pg_export_snapshot","pg_filenode_relation","pg_function_is_visible","pg_get_constraintdef","pg_get_expr","pg_get_function_arguments","pg_get_function_identity_arguments","pg_get_function_result","pg_get_functiondef","pg_get_indexdef","pg_get_keywords","pg_get_object_address","pg_get_owned_sequence","pg_get_ruledef","pg_get_serial_sequence","pg_get_triggerdef","pg_get_userbyid","pg_get_viewdef","pg_has_role","pg_identify_object","pg_identify_object_as_address","pg_index_column_has_property","pg_index_has_property","pg_indexam_has_property","pg_indexes_size","pg_is_in_backup","pg_is_in_recovery","pg_is_other_temp_schema","pg_is_xlog_replay_paused","pg_last_committed_xact","pg_last_xact_replay_timestamp","pg_last_xlog_receive_location","pg_last_xlog_replay_location","pg_listening_channels","pg_logical_emit_message","pg_logical_slot_get_binary_changes","pg_logical_slot_get_changes","pg_logical_slot_peek_binary_changes","pg_logical_slot_peek_changes","pg_ls_dir","pg_my_temp_schema","pg_notification_queue_usage","pg_opclass_is_visible","pg_operator_is_visible","pg_opfamily_is_visible","pg_options_to_table","pg_postmaster_start_time","pg_read_binary_file","pg_read_file","pg_relation_filenode","pg_relation_filepath","pg_relation_size","pg_reload_conf","pg_replication_origin_create","pg_replication_origin_drop","pg_replication_origin_oid","pg_replication_origin_progress","pg_replication_origin_session_is_setup","pg_replication_origin_session_progress","pg_replication_origin_session_reset","pg_replication_origin_session_setup","pg_replication_origin_xact_reset","pg_replication_origin_xact_setup","pg_rotate_logfile","pg_size_bytes","pg_size_pretty","pg_sleep","pg_sleep_for","pg_sleep_until","pg_start_backup","pg_stat_file","pg_stop_backup","pg_switch_xlog","pg_table_is_visible","pg_table_size","pg_tablespace_databases","pg_tablespace_location","pg_tablespace_size","pg_total_relation_size","pg_trigger_depth","pg_try_advisory_lock","pg_try_advisory_lock_shared","pg_try_advisory_xact_lock","pg_try_advisory_xact_lock_shared","pg_ts_config_is_visible","pg_ts_dict_is_visible","pg_ts_parser_is_visible","pg_ts_template_is_visible","pg_type_is_visible","pg_typeof","pg_xact_commit_timestamp","pg_xlog_location_diff","pg_xlog_replay_pause","pg_xlog_replay_resume","pg_xlogfile_name","pg_xlogfile_name_offset","phraseto_tsquery","plainto_tsquery","point","polygon","popen","pqserverversion","query_to_xml","querytree","quote_nullable","radius","range_merge","regexp_matches","regexp_split_to_array","regexp_split_to_table","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","right","row_security_active","row_to_json","rpad","scale","set_masklen","setseed","setval","setweight","shobj_description","sind","sprintf","statement_timestamp","stddev","string_agg","string_to_array","strip","substr","table_to_xml","table_to_xml_and_xmlschema","tand","text","to_json","to_regclass","to_regnamespace","to_regoper","to_regoperator","to_regproc","to_regprocedure","to_regrole","to_regtype","to_tsquery","to_tsvector","transaction_timestamp","ts_debug","ts_delete","ts_filter","ts_headline","ts_lexize","ts_parse","ts_rank","ts_rank_cd","ts_rewrite","ts_stat","ts_token_type","tsquery_phrase","tsvector_to_array","tsvector_update_trigger","tsvector_update_trigger_column","txid_current","txid_current_snapshot","txid_snapshot_xip","txid_snapshot_xmax","txid_snapshot_xmin","txid_visible_in_snapshot","unnest","upper_inc","upper_inf","variance","width","width_bucket","xml_is_well_formed","xml_is_well_formed_content","xml_is_well_formed_document","xmlagg","xmlcomment","xmlconcat","xmlelement","xmlexists","xmlforest","xmlparse","xmlpi","xmlroot","xmlserialize","xpath","xpath_exists"],builtinVariables:[],pseudoColumns:[],tokenizer:{root:[{include:"@comments"},{include:"@whitespace"},{include:"@pseudoColumns"},{include:"@numbers"},{include:"@strings"},{include:"@complexIdentifiers"},{include:"@scopes"},[/[;,.]/,"delimiter"],[/[()]/,"@brackets"],[/[\w@#$]+/,{cases:{"@keywords":"keyword","@operators":"operator","@builtinVariables":"predefined","@builtinFunctions":"predefined","@default":"identifier"}}],[/[<>=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],comments:[[/--+.*/,"comment"],[/\/\*/,{token:"comment.quote",next:"@comment"}]],comment:[[/[^*/]+/,"comment"],[/\*\//,{token:"comment.quote",next:"@pop"}],[/./,"comment"]],pseudoColumns:[[/[$][A-Za-z_][\w@#$]*/,{cases:{"@pseudoColumns":"predefined","@default":"identifier"}}]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/'/,{token:"string",next:"@string"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],complexIdentifiers:[[/"/,{token:"identifier.quote",next:"@quotedIdentifier"}]],quotedIdentifier:[[/[^"]+/,"identifier"],[/""/,"identifier"],[/"/,{token:"identifier.quote",next:"@pop"}]],scopes:[]}}},11865:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">",notIn:["string"]}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"`",close:"`"}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#?region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#?endregion\\b.*--\x3e")}}},o={defaultToken:"",tokenPostfix:".rst",control:/[\\`*_\[\]{}()#+\-\.!]/,escapes:/\\(?:@control)/,empty:["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param"],alphanumerics:/[A-Za-z0-9]/,simpleRefNameWithoutBq:/(?:@alphanumerics[-_+:.]*@alphanumerics)+|(?:@alphanumerics+)/,simpleRefName:/(?:`@phrase`|@simpleRefNameWithoutBq)/,phrase:/@simpleRefNameWithoutBq(?:\s@simpleRefNameWithoutBq)*/,citationName:/[A-Za-z][A-Za-z0-9-_.]*/,blockLiteralStart:/(?:[!"#$%&'()*+,-./:;<=>?@\[\]^_`{|}~]|[\s])/,precedingChars:/(?:[ -:/'"<([{])/,followingChars:/(?:[ -.,:;!?/'")\]}>]|$)/,punctuation:/(=|-|~|`|#|"|\^|\+|\*|:|\.|'|_|\+)/,tokenizer:{root:[[/^(@punctuation{3,}$){1,1}?/,"keyword"],[/^\s*([\*\-+‣•]|[a-zA-Z0-9]+\.|\([a-zA-Z0-9]+\)|[a-zA-Z0-9]+\))\s/,"keyword"],[/([ ]::)\s*$/,"keyword","@blankLineOfLiteralBlocks"],[/(::)\s*$/,"keyword","@blankLineOfLiteralBlocks"],{include:"@tables"},{include:"@explicitMarkupBlocks"},{include:"@inlineMarkup"}],explicitMarkupBlocks:[{include:"@citations"},{include:"@footnotes"},[/^(\.\.\s)(@simpleRefName)(::\s)(.*)$/,[{token:"",next:"subsequentLines"},"keyword","",""]],[/^(\.\.)(\s+)(_)(@simpleRefName)(:)(\s+)(.*)/,[{token:"",next:"hyperlinks"},"","","string.link","","","string.link"]],[/^((?:(?:\.\.)(?:\s+))?)(__)(:)(\s+)(.*)/,[{token:"",next:"subsequentLines"},"","","","string.link"]],[/^(__\s+)(.+)/,["","string.link"]],[/^(\.\.)( \|)([^| ]+[^|]*[^| ]*)(\| )(@simpleRefName)(:: .*)/,[{token:"",next:"subsequentLines"},"","string.link","","keyword",""],"@rawBlocks"],[/(\|)([^| ]+[^|]*[^| ]*)(\|_{0,2})/,["","string.link",""]],[/^(\.\.)([ ].*)$/,[{token:"",next:"@comments"},"comment"]]],inlineMarkup:[{include:"@citationsReference"},{include:"@footnotesReference"},[/(@simpleRefName)(_{1,2})/,["string.link",""]],[/(`)([^<`]+\s+)(<)(.*)(>)(`)(_)/,["","string.link","","string.link","","",""]],[/\*\*([^\\*]|\*(?!\*))+\*\*/,"strong"],[/\*[^*]+\*/,"emphasis"],[/(``)((?:[^`]|\`(?!`))+)(``)/,["","keyword",""]],[/(__\s+)(.+)/,["","keyword"]],[/(:)((?:@simpleRefNameWithoutBq)?)(:`)([^`]+)(`)/,["","keyword","","",""]],[/(`)([^`]+)(`:)((?:@simpleRefNameWithoutBq)?)(:)/,["","","","keyword",""]],[/(`)([^`]+)(`)/,""],[/(_`)(@phrase)(`)/,["","string.link",""]]],citations:[[/^(\.\.\s+\[)((?:@citationName))(\]\s+)(.*)/,[{token:"",next:"@subsequentLines"},"string.link","",""]]],citationsReference:[[/(\[)(@citationName)(\]_)/,["","string.link",""]]],footnotes:[[/^(\.\.\s+\[)((?:[0-9]+))(\]\s+.*)/,[{token:"",next:"@subsequentLines"},"string.link",""]],[/^(\.\.\s+\[)((?:#@simpleRefName?))(\]\s+)(.*)/,[{token:"",next:"@subsequentLines"},"string.link","",""]],[/^(\.\.\s+\[)((?:\*))(\]\s+)(.*)/,[{token:"",next:"@subsequentLines"},"string.link","",""]]],footnotesReference:[[/(\[)([0-9]+)(\])(_)/,["","string.link","",""]],[/(\[)(#@simpleRefName?)(\])(_)/,["","string.link","",""]],[/(\[)(\*)(\])(_)/,["","string.link","",""]]],blankLineOfLiteralBlocks:[[/^$/,"","@subsequentLinesOfLiteralBlocks"],[/^.*$/,"","@pop"]],subsequentLinesOfLiteralBlocks:[[/(@blockLiteralStart+)(.*)/,["keyword",""]],[/^(?!blockLiteralStart)/,"","@popall"]],subsequentLines:[[/^[\s]+.*/,""],[/^(?!\s)/,"","@pop"]],hyperlinks:[[/^[\s]+.*/,"string.link"],[/^(?!\s)/,"","@pop"]],comments:[[/^[\s]+.*/,"comment"],[/^(?!\s)/,"","@pop"]],tables:[[/\+-[+-]+/,"keyword"],[/\+=[+=]+/,"keyword"]]}}},12619:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"#",blockComment:["=begin","=end"]},brackets:[["(",")"],["{","}"],["[","]"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],indentationRules:{increaseIndentPattern:new RegExp("^\\s*((begin|class|(private|protected)\\s+def|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|while|case)|([^#]*\\sdo\\b)|([^#]*=\\s*(case|if|unless)))\\b([^#\\{;]|(\"|'|/).*\\4)*(#.*)?$"),decreaseIndentPattern:new RegExp("^\\s*([}\\]]([,)]?\\s*(#|$)|\\.[a-zA-Z_]\\w*\\b)|(end|rescue|ensure|else|elsif|when)\\b)")}},o={tokenPostfix:".ruby",keywords:["__LINE__","__ENCODING__","__FILE__","BEGIN","END","alias","and","begin","break","case","class","def","defined?","do","else","elsif","end","ensure","for","false","if","in","module","next","nil","not","or","redo","rescue","retry","return","self","super","then","true","undef","unless","until","when","while","yield"],keywordops:["::","..","...","?",":","=>"],builtins:["require","public","private","include","extend","attr_reader","protected","private_class_method","protected_class_method","new"],declarations:["module","class","def","case","do","begin","for","if","while","until","unless"],linedecls:["def","case","do","begin","for","if","while","until","unless"],operators:["^","&","|","<=>","==","===","!~","=~",">",">=","<","<=","<<",">>","+","-","*","/","%","**","~","+@","-@","[]","[]=","`","+=","-=","*=","**=","/=","^=","%=","<<=",">>=","&=","&&=","||=","|="],brackets:[{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"}],symbols:/[=>"}],[/%([qws])(@delim)/,{token:"string.$1.delim",switchTo:"@qstring.$1.$2.$2"}],[/%r\(/,{token:"regexp.delim",switchTo:"@pregexp.(.)"}],[/%r\[/,{token:"regexp.delim",switchTo:"@pregexp.[.]"}],[/%r\{/,{token:"regexp.delim",switchTo:"@pregexp.{.}"}],[/%r"}],[/%r(@delim)/,{token:"regexp.delim",switchTo:"@pregexp.$1.$1"}],[/%(x|W|Q?)\(/,{token:"string.$1.delim",switchTo:"@qqstring.$1.(.)"}],[/%(x|W|Q?)\[/,{token:"string.$1.delim",switchTo:"@qqstring.$1.[.]"}],[/%(x|W|Q?)\{/,{token:"string.$1.delim",switchTo:"@qqstring.$1.{.}"}],[/%(x|W|Q?)"}],[/%(x|W|Q?)(@delim)/,{token:"string.$1.delim",switchTo:"@qqstring.$1.$2.$2"}],[/%([rqwsxW]|Q?)./,{token:"invalid",next:"@pop"}],[/./,{token:"invalid",next:"@pop"}]],qstring:[[/\\$/,"string.$S2.escape"],[/\\./,"string.$S2.escape"],[/./,{cases:{"$#==$S4":{token:"string.$S2.delim",next:"@pop"},"$#==$S3":{token:"string.$S2.delim",next:"@push"},"@default":"string.$S2"}}]],qqstring:[[/#/,"string.$S2.escape","@interpolated"],{include:"@qstring"}],whitespace:[[/[ \t\r\n]+/,""],[/^\s*=begin\b/,"comment","@comment"],[/#.*$/,"comment"]],comment:[[/[^=]+/,"comment"],[/^\s*=begin\b/,"comment.invalid"],[/^\s*=end\b.*/,"comment","@pop"],[/[=]/,"comment"]]}}},93533:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#pragma\\s+region\\b"),end:new RegExp("^\\s*#pragma\\s+endregion\\b")}}},o={tokenPostfix:".rust",defaultToken:"invalid",keywords:["as","async","await","box","break","const","continue","crate","dyn","else","enum","extern","false","fn","for","if","impl","in","let","loop","match","mod","move","mut","pub","ref","return","self","static","struct","super","trait","true","try","type","unsafe","use","where","while","catch","default","union","static","abstract","alignof","become","do","final","macro","offsetof","override","priv","proc","pure","sizeof","typeof","unsized","virtual","yield"],typeKeywords:["Self","m32","m64","m128","f80","f16","f128","int","uint","float","char","bool","u8","u16","u32","u64","f32","f64","i8","i16","i32","i64","str","Option","Either","c_float","c_double","c_void","FILE","fpos_t","DIR","dirent","c_char","c_schar","c_uchar","c_short","c_ushort","c_int","c_uint","c_long","c_ulong","size_t","ptrdiff_t","clock_t","time_t","c_longlong","c_ulonglong","intptr_t","uintptr_t","off_t","dev_t","ino_t","pid_t","mode_t","ssize_t"],constants:["true","false","Some","None","Left","Right","Ok","Err"],supportConstants:["EXIT_FAILURE","EXIT_SUCCESS","RAND_MAX","EOF","SEEK_SET","SEEK_CUR","SEEK_END","_IOFBF","_IONBF","_IOLBF","BUFSIZ","FOPEN_MAX","FILENAME_MAX","L_tmpnam","TMP_MAX","O_RDONLY","O_WRONLY","O_RDWR","O_APPEND","O_CREAT","O_EXCL","O_TRUNC","S_IFIFO","S_IFCHR","S_IFBLK","S_IFDIR","S_IFREG","S_IFMT","S_IEXEC","S_IWRITE","S_IREAD","S_IRWXU","S_IXUSR","S_IWUSR","S_IRUSR","F_OK","R_OK","W_OK","X_OK","STDIN_FILENO","STDOUT_FILENO","STDERR_FILENO"],supportMacros:["format!","print!","println!","panic!","format_args!","unreachable!","write!","writeln!"],operators:["!","!=","%","%=","&","&=","&&","*","*=","+","+=","-","-=","->",".","..","...","/","/=",":",";","<<","<<=","<","<=","=","==","=>",">",">=",">>",">>=","@","^","^=","|","|=","||","_","?","#"],escapes:/\\([nrt0\"''\\]|x\h{2}|u\{\h{1,6}\})/,delimiters:/[,]/,symbols:/[\#\!\%\&\*\+\-\.\/\:\;\<\=\>\@\^\|_\?]+/,intSuffixes:/[iu](8|16|32|64|128|size)/,floatSuffixes:/f(32|64)/,tokenizer:{root:[[/r(#*)"/,{token:"string.quote",bracket:"@open",next:"@stringraw.$1"}],[/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/,{cases:{"@typeKeywords":"keyword.type","@keywords":"keyword","@supportConstants":"keyword","@supportMacros":"keyword","@constants":"keyword","@default":"identifier"}}],[/\$/,"identifier"],[/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/,"identifier"],[/'(\S|@escapes)'/,"string.byteliteral"],[/"/,{token:"string.quote",bracket:"@open",next:"@string"}],{include:"@numbers"},{include:"@whitespace"},[/@delimiters/,{cases:{"@keywords":"keyword","@default":"delimiter"}}],[/[{}()\[\]<>]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@push"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",next:"@pop"}]],stringraw:[[/[^"#]+/,{token:"string"}],[/"(#*)/,{cases:{"$1==$S2":{token:"string.quote",bracket:"@close",next:"@pop"},"@default":{token:"string"}}}],[/["#]/,{token:"string"}]],numbers:[[/(0o[0-7_]+)(@intSuffixes)?/,{token:"number"}],[/(0b[0-1_]+)(@intSuffixes)?/,{token:"number"}],[/[\d][\d_]*(\.[\d][\d_]*)?[eE][+-][\d_]+(@floatSuffixes)?/,{token:"number"}],[/\b(\d\.?[\d_]*)(@floatSuffixes)?\b/,{token:"number"}],[/(0x[\da-fA-F]+)_?(@intSuffixes)?/,{token:"number"}],[/[\d][\d_]*(@intSuffixes?)?/,{token:"number"}]]}}},59328:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"'"},brackets:[["(",")"],["[","]"],["If","EndIf"],["While","EndWhile"],["For","EndFor"],["Sub","EndSub"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]}]},o={defaultToken:"",tokenPostfix:".sb",ignoreCase:!0,brackets:[{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"keyword.tag-if",open:"If",close:"EndIf"},{token:"keyword.tag-while",open:"While",close:"EndWhile"},{token:"keyword.tag-for",open:"For",close:"EndFor"},{token:"keyword.tag-sub",open:"Sub",close:"EndSub"}],keywords:["Else","ElseIf","EndFor","EndIf","EndSub","EndWhile","For","Goto","If","Step","Sub","Then","To","While"],tagwords:["If","Sub","While","For"],operators:[">","<","<>","<=",">=","And","Or","+","-","*","/","="],identifier:/[a-zA-Z_][\w]*/,symbols:/[=><:+\-*\/%\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[{include:"@whitespace"},[/(@identifier)(?=[.])/,"type"],[/@identifier/,{cases:{"@keywords":{token:"keyword.$0"},"@operators":"operator","@default":"variable.name"}}],[/([.])(@identifier)/,{cases:{$2:["delimiter","type.member"],"@default":""}}],[/\d*\.\d+/,"number.float"],[/\d+/,"number"],[/[()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":"delimiter"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],whitespace:[[/[ \t\r\n]+/,""],[/(\').*$/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"C?/,"string","@pop"]]}}},96769:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(unary_[@~!#%^&*()\-=+\\|:<>\/?]+)|([a-zA-Z_$][\w$]*?_=)|(`[^`]+`)|([a-zA-Z_$][\w$]*)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},o={tokenPostfix:".scala",keywords:["asInstanceOf","catch","class","classOf","def","do","else","extends","finally","for","foreach","forSome","if","import","isInstanceOf","macro","match","new","object","package","return","throw","trait","try","type","until","val","var","while","with","yield","given","enum","then"],softKeywords:["as","export","extension","end","derives","on"],constants:["true","false","null","this","super"],modifiers:["abstract","final","implicit","lazy","override","private","protected","sealed"],softModifiers:["inline","opaque","open","transparent","using"],name:/(?:[a-z_$][\w$]*|`[^`]+`)/,type:/(?:[A-Z][\w$]*)/,symbols:/[=>))/,["@brackets","white","variable"]],[/@name/,{cases:{"@keywords":"keyword","@softKeywords":"keyword","@modifiers":"keyword.modifier","@softModifiers":"keyword.modifier","@constants":{token:"constant",next:"@allowMethod"},"@default":{token:"identifier",next:"@allowMethod"}}}],[/@type/,"type","@allowMethod"],{include:"@whitespace"},[/@[a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*)*/,"annotation"],[/[{(]/,"@brackets"],[/[})]/,"@brackets","@allowMethod"],[/\[/,"operator.square"],[/](?!\s*(?:va[rl]|def|type)\b)/,"operator.square","@allowMethod"],[/]/,"operator.square"],[/([=-]>|<-|>:|<:|:>|<%)(?=[\s\w()[\]{},\."'`])/,"keyword"],[/@symbols/,"operator"],[/[;,\.]/,"delimiter"],[/'[a-zA-Z$][\w$]*(?!')/,"attribute.name"],[/'[^\\']'/,"string","@allowMethod"],[/(')(@escapes)(')/,["string","string.escape",{token:"string",next:"@allowMethod"}]],[/'/,"string.invalid"]],import:[[/;/,"delimiter","@pop"],[/^|$/,"","@pop"],[/[ \t]+/,"white"],[/[\n\r]+/,"white","@pop"],[/\/\*/,"comment","@comment"],[/@name|@type/,"type"],[/[(){}]/,"@brackets"],[/[[\]]/,"operator.square"],[/[\.,]/,"delimiter"]],allowMethod:[[/^|$/,"","@pop"],[/[ \t]+/,"white"],[/[\n\r]+/,"white","@pop"],[/\/\*/,"comment","@comment"],[/(?==>[\s\w([{])/,"keyword","@pop"],[/(@name|@symbols)(?=[ \t]*[[({"'`]|[ \t]+(?:[+-]?\.?\d|\w))/,{cases:{"@keywords":{token:"keyword",next:"@pop"},"->|<-|>:|<:|<%":{token:"keyword",next:"@pop"},"@default":{token:"@rematch",next:"@pop"}}}],["","","@pop"]],comment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@push"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],case:[[/\b_\*/,"key"],[/\b(_|true|false|null|this|super)\b/,"keyword","@allowMethod"],[/\bif\b|=>/,"keyword","@pop"],[/`[^`]+`/,"identifier","@allowMethod"],[/@name/,"variable","@allowMethod"],[/:::?|\||@(?![a-z_$])/,"keyword"],{include:"@root"}],vardef:[[/\b_\*/,"key"],[/\b(_|true|false|null|this|super)\b/,"keyword"],[/@name/,"variable"],[/:::?|\||@(?![a-z_$])/,"keyword"],[/=|:(?!:)/,"operator","@pop"],[/$/,"white","@pop"],{include:"@root"}],string:[[/[^\\"\n\r]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}]],stringt:[[/[^\\"\n\r]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"(?=""")/,"string"],[/"""/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/"/,"string"]],fstring:[[/@escapes/,"string.escape"],[/"/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/\$\$/,"string"],[/(\$)([a-z_]\w*)/,["operator","identifier"]],[/\$\{/,"operator","@interp"],[/%%/,"string"],[/(%)([\-#+ 0,(])(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,["metatag","keyword.modifier","number","metatag"]],[/(%)(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,["metatag","number","metatag"]],[/(%)([\-#+ 0,(])(@fstring_conv)/,["metatag","keyword.modifier","metatag"]],[/(%)(@fstring_conv)/,["metatag","metatag"]],[/./,"string"]],fstringt:[[/@escapes/,"string.escape"],[/"(?=""")/,"string"],[/"""/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/\$\$/,"string"],[/(\$)([a-z_]\w*)/,["operator","identifier"]],[/\$\{/,"operator","@interp"],[/%%/,"string"],[/(%)([\-#+ 0,(])(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,["metatag","keyword.modifier","number","metatag"]],[/(%)(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,["metatag","number","metatag"]],[/(%)([\-#+ 0,(])(@fstring_conv)/,["metatag","keyword.modifier","metatag"]],[/(%)(@fstring_conv)/,["metatag","metatag"]],[/./,"string"]],sstring:[[/@escapes/,"string.escape"],[/"/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/\$\$/,"string"],[/(\$)([a-z_]\w*)/,["operator","identifier"]],[/\$\{/,"operator","@interp"],[/./,"string"]],sstringt:[[/@escapes/,"string.escape"],[/"(?=""")/,"string"],[/"""/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/\$\$/,"string"],[/(\$)([a-z_]\w*)/,["operator","identifier"]],[/\$\{/,"operator","@interp"],[/./,"string"]],interp:[[/{/,"operator","@push"],[/}/,"operator","@pop"],{include:"@root"}],rawstring:[[/[^"]/,"string"],[/"/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}]],rawstringt:[[/[^"]/,"string"],[/"(?=""")/,"string"],[/"""/,{token:"string.quote",bracket:"@close",switchTo:"@allowMethod"}],[/"/,"string"]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}},79156:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:";",blockComment:["#|","|#"]},brackets:[["(",")"],["{","}"],["[","]"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}]},o={defaultToken:"",ignoreCase:!0,tokenPostfix:".scheme",brackets:[{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"}],keywords:["case","do","let","loop","if","else","when","cons","car","cdr","cond","lambda","lambda*","syntax-rules","format","set!","quote","eval","append","list","list?","member?","load"],constants:["#t","#f"],operators:["eq?","eqv?","equal?","and","or","not","null?"],tokenizer:{root:[[/#[xXoObB][0-9a-fA-F]+/,"number.hex"],[/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?/,"number.float"],[/(?:\b(?:(define|define-syntax|define-macro))\b)(\s+)((?:\w|\-|\!|\?)*)/,["keyword","white","variable"]],{include:"@whitespace"},{include:"@strings"},[/[a-zA-Z_#][a-zA-Z0-9_\-\?\!\*]*/,{cases:{"@keywords":"keyword","@constants":"constant","@operators":"operators","@default":"identifier"}}]],comment:[[/[^\|#]+/,"comment"],[/#\|/,"comment","@push"],[/\|#/,"comment","@pop"],[/[\|#]/,"comment"]],whitespace:[[/[ \t\r\n]+/,"white"],[/#\|/,"comment","@comment"],[/;.*$/,"comment"]],strings:[[/"$/,"string","@popall"],[/"(?=.)/,"string","@multiLineString"]],multiLineString:[[/[^\\"]+$/,"string","@popall"],[/[^\\"]+/,"string"],[/\\./,"string.escape"],[/"/,"string","@popall"],[/\\$/,"string"]]}}},52847:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(#?-?\d*\.\d\w*%?)|([@$#!.:]?[\w-?]+%?)|[@#!.]/g,comments:{blockComment:["/*","*/"],lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},o={defaultToken:"",tokenPostfix:".scss",ws:"[ \t\n\r\f]*",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@variabledeclaration"},{include:"@warndebug"},["[@](include)",{token:"keyword",next:"@includedeclaration"}],["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["[@](function)",{token:"keyword",next:"@functiondeclaration"}],["[@](mixin)",{token:"keyword",next:"@mixindeclaration"}],["url(\\-prefix)?\\(",{token:"meta",next:"@urldeclaration"}],{include:"@controlstatement"},{include:"@selectorname"},["[&\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.curly",next:"@selectorbody"}]],selectorbody:[["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],{include:"@selector"},["[@](extend)",{token:"keyword",next:"@extendbody"}],["[@](return)",{token:"keyword",next:"@declarationbody"}],["}",{token:"delimiter.curly",next:"@pop"}]],selectorname:[["#{",{token:"meta",next:"@variableinterpolation"}],["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["url(\\-prefix)?\\(",{token:"meta",next:"@urldeclaration"}],{include:"@functioninvocation"},{include:"@numbers"},{include:"@strings"},{include:"@variablereference"},["(and\\b|or\\b|not\\b)","operator"],{include:"@name"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","operator"],[",","delimiter"],["!default","literal"],["\\(",{token:"delimiter.parenthesis",next:"@parenthizedterm"}]],rulevalue:[{include:"@term"},["!important","literal"],[";","delimiter","@pop"],["{",{token:"delimiter.curly",switchTo:"@nestedproperty"}],["(?=})",{token:"",next:"@pop"}]],nestedproperty:[["[*_]?@identifier@ws:","attribute.name","@rulevalue"],{include:"@comments"},["}",{token:"delimiter.curly",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],variabledeclaration:[["\\$@identifier@ws:","variable.decl","@declarationbody"]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"meta",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],extendbody:[{include:"@selectorname"},["!optional","literal"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],variablereference:[["\\$@identifier","variable.ref"],["\\.\\.\\.","operator"],["#{",{token:"meta",next:"@variableinterpolation"}]],variableinterpolation:[{include:"@variablereference"},["}",{token:"meta",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],name:[["@identifier","attribute.value"]],numbers:[["(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","number.hex"]],units:[["(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","number","@pop"]],functiondeclaration:[["@identifier@ws\\(",{token:"meta",next:"@parameterdeclaration"}],["{",{token:"delimiter.curly",switchTo:"@functionbody"}]],mixindeclaration:[["@identifier@ws\\(",{token:"meta",next:"@parameterdeclaration"}],["@identifier","meta"],["{",{token:"delimiter.curly",switchTo:"@selectorbody"}]],parameterdeclaration:[["\\$@identifier@ws:","variable.decl"],["\\.\\.\\.","operator"],[",","delimiter"],{include:"@term"},["\\)",{token:"meta",next:"@pop"}]],includedeclaration:[{include:"@functioninvocation"},["@identifier","meta"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}],["{",{token:"delimiter.curly",switchTo:"@selectorbody"}]],keyframedeclaration:[["@identifier","meta"],["{",{token:"delimiter.curly",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.curly",next:"@selectorbody"}],["}",{token:"delimiter.curly",next:"@pop"}]],controlstatement:[["[@](if|else|for|while|each|media)",{token:"keyword.flow",next:"@controlstatementdeclaration"}]],controlstatementdeclaration:[["(in|from|through|if|to)\\b",{token:"keyword.flow"}],{include:"@term"},["{",{token:"delimiter.curly",switchTo:"@selectorbody"}]],functionbody:[["[@](return)",{token:"keyword"}],{include:"@variabledeclaration"},{include:"@term"},{include:"@controlstatement"},[";","delimiter"],["}",{token:"delimiter.curly",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"meta",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"meta",next:"@pop"}]],strings:[['~?"',{token:"string.delimiter",next:"@stringenddoublequote"}],["~?'",{token:"string.delimiter",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string.delimiter",next:"@pop"}],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string.delimiter",next:"@pop"}],[".","string"]]}}},8270:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}]},o={defaultToken:"",ignoreCase:!0,tokenPostfix:".shell",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["if","then","do","else","elif","while","until","for","in","esac","fi","fin","fil","done","exit","set","unset","export","function"],builtins:["ab","awk","bash","beep","cat","cc","cd","chown","chmod","chroot","clear","cp","curl","cut","diff","echo","find","gawk","gcc","get","git","grep","hg","kill","killall","ln","ls","make","mkdir","openssl","mv","nc","node","npm","ping","ps","restart","rm","rmdir","sed","service","sh","shopt","shred","source","sort","sleep","ssh","start","stop","su","sudo","svn","tee","telnet","top","touch","vi","vim","wall","wc","wget","who","write","yes","zsh"],startingWithDash:/\-+\w+/,identifiersWithDashes:/[a-zA-Z]\w+(?:@startingWithDash)+/,symbols:/[=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}]},o={defaultToken:"",tokenPostfix:".sol",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["pragma","solidity","contract","library","using","struct","function","modifier","constructor","address","string","bool","Int","Uint","Byte","Fixed","Ufixed","int","int8","int16","int24","int32","int40","int48","int56","int64","int72","int80","int88","int96","int104","int112","int120","int128","int136","int144","int152","int160","int168","int176","int184","int192","int200","int208","int216","int224","int232","int240","int248","int256","uint","uint8","uint16","uint24","uint32","uint40","uint48","uint56","uint64","uint72","uint80","uint88","uint96","uint104","uint112","uint120","uint128","uint136","uint144","uint152","uint160","uint168","uint176","uint184","uint192","uint200","uint208","uint216","uint224","uint232","uint240","uint248","uint256","byte","bytes","bytes1","bytes2","bytes3","bytes4","bytes5","bytes6","bytes7","bytes8","bytes9","bytes10","bytes11","bytes12","bytes13","bytes14","bytes15","bytes16","bytes17","bytes18","bytes19","bytes20","bytes21","bytes22","bytes23","bytes24","bytes25","bytes26","bytes27","bytes28","bytes29","bytes30","bytes31","bytes32","fixed","fixed0x8","fixed0x16","fixed0x24","fixed0x32","fixed0x40","fixed0x48","fixed0x56","fixed0x64","fixed0x72","fixed0x80","fixed0x88","fixed0x96","fixed0x104","fixed0x112","fixed0x120","fixed0x128","fixed0x136","fixed0x144","fixed0x152","fixed0x160","fixed0x168","fixed0x176","fixed0x184","fixed0x192","fixed0x200","fixed0x208","fixed0x216","fixed0x224","fixed0x232","fixed0x240","fixed0x248","fixed0x256","fixed8x8","fixed8x16","fixed8x24","fixed8x32","fixed8x40","fixed8x48","fixed8x56","fixed8x64","fixed8x72","fixed8x80","fixed8x88","fixed8x96","fixed8x104","fixed8x112","fixed8x120","fixed8x128","fixed8x136","fixed8x144","fixed8x152","fixed8x160","fixed8x168","fixed8x176","fixed8x184","fixed8x192","fixed8x200","fixed8x208","fixed8x216","fixed8x224","fixed8x232","fixed8x240","fixed8x248","fixed16x8","fixed16x16","fixed16x24","fixed16x32","fixed16x40","fixed16x48","fixed16x56","fixed16x64","fixed16x72","fixed16x80","fixed16x88","fixed16x96","fixed16x104","fixed16x112","fixed16x120","fixed16x128","fixed16x136","fixed16x144","fixed16x152","fixed16x160","fixed16x168","fixed16x176","fixed16x184","fixed16x192","fixed16x200","fixed16x208","fixed16x216","fixed16x224","fixed16x232","fixed16x240","fixed24x8","fixed24x16","fixed24x24","fixed24x32","fixed24x40","fixed24x48","fixed24x56","fixed24x64","fixed24x72","fixed24x80","fixed24x88","fixed24x96","fixed24x104","fixed24x112","fixed24x120","fixed24x128","fixed24x136","fixed24x144","fixed24x152","fixed24x160","fixed24x168","fixed24x176","fixed24x184","fixed24x192","fixed24x200","fixed24x208","fixed24x216","fixed24x224","fixed24x232","fixed32x8","fixed32x16","fixed32x24","fixed32x32","fixed32x40","fixed32x48","fixed32x56","fixed32x64","fixed32x72","fixed32x80","fixed32x88","fixed32x96","fixed32x104","fixed32x112","fixed32x120","fixed32x128","fixed32x136","fixed32x144","fixed32x152","fixed32x160","fixed32x168","fixed32x176","fixed32x184","fixed32x192","fixed32x200","fixed32x208","fixed32x216","fixed32x224","fixed40x8","fixed40x16","fixed40x24","fixed40x32","fixed40x40","fixed40x48","fixed40x56","fixed40x64","fixed40x72","fixed40x80","fixed40x88","fixed40x96","fixed40x104","fixed40x112","fixed40x120","fixed40x128","fixed40x136","fixed40x144","fixed40x152","fixed40x160","fixed40x168","fixed40x176","fixed40x184","fixed40x192","fixed40x200","fixed40x208","fixed40x216","fixed48x8","fixed48x16","fixed48x24","fixed48x32","fixed48x40","fixed48x48","fixed48x56","fixed48x64","fixed48x72","fixed48x80","fixed48x88","fixed48x96","fixed48x104","fixed48x112","fixed48x120","fixed48x128","fixed48x136","fixed48x144","fixed48x152","fixed48x160","fixed48x168","fixed48x176","fixed48x184","fixed48x192","fixed48x200","fixed48x208","fixed56x8","fixed56x16","fixed56x24","fixed56x32","fixed56x40","fixed56x48","fixed56x56","fixed56x64","fixed56x72","fixed56x80","fixed56x88","fixed56x96","fixed56x104","fixed56x112","fixed56x120","fixed56x128","fixed56x136","fixed56x144","fixed56x152","fixed56x160","fixed56x168","fixed56x176","fixed56x184","fixed56x192","fixed56x200","fixed64x8","fixed64x16","fixed64x24","fixed64x32","fixed64x40","fixed64x48","fixed64x56","fixed64x64","fixed64x72","fixed64x80","fixed64x88","fixed64x96","fixed64x104","fixed64x112","fixed64x120","fixed64x128","fixed64x136","fixed64x144","fixed64x152","fixed64x160","fixed64x168","fixed64x176","fixed64x184","fixed64x192","fixed72x8","fixed72x16","fixed72x24","fixed72x32","fixed72x40","fixed72x48","fixed72x56","fixed72x64","fixed72x72","fixed72x80","fixed72x88","fixed72x96","fixed72x104","fixed72x112","fixed72x120","fixed72x128","fixed72x136","fixed72x144","fixed72x152","fixed72x160","fixed72x168","fixed72x176","fixed72x184","fixed80x8","fixed80x16","fixed80x24","fixed80x32","fixed80x40","fixed80x48","fixed80x56","fixed80x64","fixed80x72","fixed80x80","fixed80x88","fixed80x96","fixed80x104","fixed80x112","fixed80x120","fixed80x128","fixed80x136","fixed80x144","fixed80x152","fixed80x160","fixed80x168","fixed80x176","fixed88x8","fixed88x16","fixed88x24","fixed88x32","fixed88x40","fixed88x48","fixed88x56","fixed88x64","fixed88x72","fixed88x80","fixed88x88","fixed88x96","fixed88x104","fixed88x112","fixed88x120","fixed88x128","fixed88x136","fixed88x144","fixed88x152","fixed88x160","fixed88x168","fixed96x8","fixed96x16","fixed96x24","fixed96x32","fixed96x40","fixed96x48","fixed96x56","fixed96x64","fixed96x72","fixed96x80","fixed96x88","fixed96x96","fixed96x104","fixed96x112","fixed96x120","fixed96x128","fixed96x136","fixed96x144","fixed96x152","fixed96x160","fixed104x8","fixed104x16","fixed104x24","fixed104x32","fixed104x40","fixed104x48","fixed104x56","fixed104x64","fixed104x72","fixed104x80","fixed104x88","fixed104x96","fixed104x104","fixed104x112","fixed104x120","fixed104x128","fixed104x136","fixed104x144","fixed104x152","fixed112x8","fixed112x16","fixed112x24","fixed112x32","fixed112x40","fixed112x48","fixed112x56","fixed112x64","fixed112x72","fixed112x80","fixed112x88","fixed112x96","fixed112x104","fixed112x112","fixed112x120","fixed112x128","fixed112x136","fixed112x144","fixed120x8","fixed120x16","fixed120x24","fixed120x32","fixed120x40","fixed120x48","fixed120x56","fixed120x64","fixed120x72","fixed120x80","fixed120x88","fixed120x96","fixed120x104","fixed120x112","fixed120x120","fixed120x128","fixed120x136","fixed128x8","fixed128x16","fixed128x24","fixed128x32","fixed128x40","fixed128x48","fixed128x56","fixed128x64","fixed128x72","fixed128x80","fixed128x88","fixed128x96","fixed128x104","fixed128x112","fixed128x120","fixed128x128","fixed136x8","fixed136x16","fixed136x24","fixed136x32","fixed136x40","fixed136x48","fixed136x56","fixed136x64","fixed136x72","fixed136x80","fixed136x88","fixed136x96","fixed136x104","fixed136x112","fixed136x120","fixed144x8","fixed144x16","fixed144x24","fixed144x32","fixed144x40","fixed144x48","fixed144x56","fixed144x64","fixed144x72","fixed144x80","fixed144x88","fixed144x96","fixed144x104","fixed144x112","fixed152x8","fixed152x16","fixed152x24","fixed152x32","fixed152x40","fixed152x48","fixed152x56","fixed152x64","fixed152x72","fixed152x80","fixed152x88","fixed152x96","fixed152x104","fixed160x8","fixed160x16","fixed160x24","fixed160x32","fixed160x40","fixed160x48","fixed160x56","fixed160x64","fixed160x72","fixed160x80","fixed160x88","fixed160x96","fixed168x8","fixed168x16","fixed168x24","fixed168x32","fixed168x40","fixed168x48","fixed168x56","fixed168x64","fixed168x72","fixed168x80","fixed168x88","fixed176x8","fixed176x16","fixed176x24","fixed176x32","fixed176x40","fixed176x48","fixed176x56","fixed176x64","fixed176x72","fixed176x80","fixed184x8","fixed184x16","fixed184x24","fixed184x32","fixed184x40","fixed184x48","fixed184x56","fixed184x64","fixed184x72","fixed192x8","fixed192x16","fixed192x24","fixed192x32","fixed192x40","fixed192x48","fixed192x56","fixed192x64","fixed200x8","fixed200x16","fixed200x24","fixed200x32","fixed200x40","fixed200x48","fixed200x56","fixed208x8","fixed208x16","fixed208x24","fixed208x32","fixed208x40","fixed208x48","fixed216x8","fixed216x16","fixed216x24","fixed216x32","fixed216x40","fixed224x8","fixed224x16","fixed224x24","fixed224x32","fixed232x8","fixed232x16","fixed232x24","fixed240x8","fixed240x16","fixed248x8","ufixed","ufixed0x8","ufixed0x16","ufixed0x24","ufixed0x32","ufixed0x40","ufixed0x48","ufixed0x56","ufixed0x64","ufixed0x72","ufixed0x80","ufixed0x88","ufixed0x96","ufixed0x104","ufixed0x112","ufixed0x120","ufixed0x128","ufixed0x136","ufixed0x144","ufixed0x152","ufixed0x160","ufixed0x168","ufixed0x176","ufixed0x184","ufixed0x192","ufixed0x200","ufixed0x208","ufixed0x216","ufixed0x224","ufixed0x232","ufixed0x240","ufixed0x248","ufixed0x256","ufixed8x8","ufixed8x16","ufixed8x24","ufixed8x32","ufixed8x40","ufixed8x48","ufixed8x56","ufixed8x64","ufixed8x72","ufixed8x80","ufixed8x88","ufixed8x96","ufixed8x104","ufixed8x112","ufixed8x120","ufixed8x128","ufixed8x136","ufixed8x144","ufixed8x152","ufixed8x160","ufixed8x168","ufixed8x176","ufixed8x184","ufixed8x192","ufixed8x200","ufixed8x208","ufixed8x216","ufixed8x224","ufixed8x232","ufixed8x240","ufixed8x248","ufixed16x8","ufixed16x16","ufixed16x24","ufixed16x32","ufixed16x40","ufixed16x48","ufixed16x56","ufixed16x64","ufixed16x72","ufixed16x80","ufixed16x88","ufixed16x96","ufixed16x104","ufixed16x112","ufixed16x120","ufixed16x128","ufixed16x136","ufixed16x144","ufixed16x152","ufixed16x160","ufixed16x168","ufixed16x176","ufixed16x184","ufixed16x192","ufixed16x200","ufixed16x208","ufixed16x216","ufixed16x224","ufixed16x232","ufixed16x240","ufixed24x8","ufixed24x16","ufixed24x24","ufixed24x32","ufixed24x40","ufixed24x48","ufixed24x56","ufixed24x64","ufixed24x72","ufixed24x80","ufixed24x88","ufixed24x96","ufixed24x104","ufixed24x112","ufixed24x120","ufixed24x128","ufixed24x136","ufixed24x144","ufixed24x152","ufixed24x160","ufixed24x168","ufixed24x176","ufixed24x184","ufixed24x192","ufixed24x200","ufixed24x208","ufixed24x216","ufixed24x224","ufixed24x232","ufixed32x8","ufixed32x16","ufixed32x24","ufixed32x32","ufixed32x40","ufixed32x48","ufixed32x56","ufixed32x64","ufixed32x72","ufixed32x80","ufixed32x88","ufixed32x96","ufixed32x104","ufixed32x112","ufixed32x120","ufixed32x128","ufixed32x136","ufixed32x144","ufixed32x152","ufixed32x160","ufixed32x168","ufixed32x176","ufixed32x184","ufixed32x192","ufixed32x200","ufixed32x208","ufixed32x216","ufixed32x224","ufixed40x8","ufixed40x16","ufixed40x24","ufixed40x32","ufixed40x40","ufixed40x48","ufixed40x56","ufixed40x64","ufixed40x72","ufixed40x80","ufixed40x88","ufixed40x96","ufixed40x104","ufixed40x112","ufixed40x120","ufixed40x128","ufixed40x136","ufixed40x144","ufixed40x152","ufixed40x160","ufixed40x168","ufixed40x176","ufixed40x184","ufixed40x192","ufixed40x200","ufixed40x208","ufixed40x216","ufixed48x8","ufixed48x16","ufixed48x24","ufixed48x32","ufixed48x40","ufixed48x48","ufixed48x56","ufixed48x64","ufixed48x72","ufixed48x80","ufixed48x88","ufixed48x96","ufixed48x104","ufixed48x112","ufixed48x120","ufixed48x128","ufixed48x136","ufixed48x144","ufixed48x152","ufixed48x160","ufixed48x168","ufixed48x176","ufixed48x184","ufixed48x192","ufixed48x200","ufixed48x208","ufixed56x8","ufixed56x16","ufixed56x24","ufixed56x32","ufixed56x40","ufixed56x48","ufixed56x56","ufixed56x64","ufixed56x72","ufixed56x80","ufixed56x88","ufixed56x96","ufixed56x104","ufixed56x112","ufixed56x120","ufixed56x128","ufixed56x136","ufixed56x144","ufixed56x152","ufixed56x160","ufixed56x168","ufixed56x176","ufixed56x184","ufixed56x192","ufixed56x200","ufixed64x8","ufixed64x16","ufixed64x24","ufixed64x32","ufixed64x40","ufixed64x48","ufixed64x56","ufixed64x64","ufixed64x72","ufixed64x80","ufixed64x88","ufixed64x96","ufixed64x104","ufixed64x112","ufixed64x120","ufixed64x128","ufixed64x136","ufixed64x144","ufixed64x152","ufixed64x160","ufixed64x168","ufixed64x176","ufixed64x184","ufixed64x192","ufixed72x8","ufixed72x16","ufixed72x24","ufixed72x32","ufixed72x40","ufixed72x48","ufixed72x56","ufixed72x64","ufixed72x72","ufixed72x80","ufixed72x88","ufixed72x96","ufixed72x104","ufixed72x112","ufixed72x120","ufixed72x128","ufixed72x136","ufixed72x144","ufixed72x152","ufixed72x160","ufixed72x168","ufixed72x176","ufixed72x184","ufixed80x8","ufixed80x16","ufixed80x24","ufixed80x32","ufixed80x40","ufixed80x48","ufixed80x56","ufixed80x64","ufixed80x72","ufixed80x80","ufixed80x88","ufixed80x96","ufixed80x104","ufixed80x112","ufixed80x120","ufixed80x128","ufixed80x136","ufixed80x144","ufixed80x152","ufixed80x160","ufixed80x168","ufixed80x176","ufixed88x8","ufixed88x16","ufixed88x24","ufixed88x32","ufixed88x40","ufixed88x48","ufixed88x56","ufixed88x64","ufixed88x72","ufixed88x80","ufixed88x88","ufixed88x96","ufixed88x104","ufixed88x112","ufixed88x120","ufixed88x128","ufixed88x136","ufixed88x144","ufixed88x152","ufixed88x160","ufixed88x168","ufixed96x8","ufixed96x16","ufixed96x24","ufixed96x32","ufixed96x40","ufixed96x48","ufixed96x56","ufixed96x64","ufixed96x72","ufixed96x80","ufixed96x88","ufixed96x96","ufixed96x104","ufixed96x112","ufixed96x120","ufixed96x128","ufixed96x136","ufixed96x144","ufixed96x152","ufixed96x160","ufixed104x8","ufixed104x16","ufixed104x24","ufixed104x32","ufixed104x40","ufixed104x48","ufixed104x56","ufixed104x64","ufixed104x72","ufixed104x80","ufixed104x88","ufixed104x96","ufixed104x104","ufixed104x112","ufixed104x120","ufixed104x128","ufixed104x136","ufixed104x144","ufixed104x152","ufixed112x8","ufixed112x16","ufixed112x24","ufixed112x32","ufixed112x40","ufixed112x48","ufixed112x56","ufixed112x64","ufixed112x72","ufixed112x80","ufixed112x88","ufixed112x96","ufixed112x104","ufixed112x112","ufixed112x120","ufixed112x128","ufixed112x136","ufixed112x144","ufixed120x8","ufixed120x16","ufixed120x24","ufixed120x32","ufixed120x40","ufixed120x48","ufixed120x56","ufixed120x64","ufixed120x72","ufixed120x80","ufixed120x88","ufixed120x96","ufixed120x104","ufixed120x112","ufixed120x120","ufixed120x128","ufixed120x136","ufixed128x8","ufixed128x16","ufixed128x24","ufixed128x32","ufixed128x40","ufixed128x48","ufixed128x56","ufixed128x64","ufixed128x72","ufixed128x80","ufixed128x88","ufixed128x96","ufixed128x104","ufixed128x112","ufixed128x120","ufixed128x128","ufixed136x8","ufixed136x16","ufixed136x24","ufixed136x32","ufixed136x40","ufixed136x48","ufixed136x56","ufixed136x64","ufixed136x72","ufixed136x80","ufixed136x88","ufixed136x96","ufixed136x104","ufixed136x112","ufixed136x120","ufixed144x8","ufixed144x16","ufixed144x24","ufixed144x32","ufixed144x40","ufixed144x48","ufixed144x56","ufixed144x64","ufixed144x72","ufixed144x80","ufixed144x88","ufixed144x96","ufixed144x104","ufixed144x112","ufixed152x8","ufixed152x16","ufixed152x24","ufixed152x32","ufixed152x40","ufixed152x48","ufixed152x56","ufixed152x64","ufixed152x72","ufixed152x80","ufixed152x88","ufixed152x96","ufixed152x104","ufixed160x8","ufixed160x16","ufixed160x24","ufixed160x32","ufixed160x40","ufixed160x48","ufixed160x56","ufixed160x64","ufixed160x72","ufixed160x80","ufixed160x88","ufixed160x96","ufixed168x8","ufixed168x16","ufixed168x24","ufixed168x32","ufixed168x40","ufixed168x48","ufixed168x56","ufixed168x64","ufixed168x72","ufixed168x80","ufixed168x88","ufixed176x8","ufixed176x16","ufixed176x24","ufixed176x32","ufixed176x40","ufixed176x48","ufixed176x56","ufixed176x64","ufixed176x72","ufixed176x80","ufixed184x8","ufixed184x16","ufixed184x24","ufixed184x32","ufixed184x40","ufixed184x48","ufixed184x56","ufixed184x64","ufixed184x72","ufixed192x8","ufixed192x16","ufixed192x24","ufixed192x32","ufixed192x40","ufixed192x48","ufixed192x56","ufixed192x64","ufixed200x8","ufixed200x16","ufixed200x24","ufixed200x32","ufixed200x40","ufixed200x48","ufixed200x56","ufixed208x8","ufixed208x16","ufixed208x24","ufixed208x32","ufixed208x40","ufixed208x48","ufixed216x8","ufixed216x16","ufixed216x24","ufixed216x32","ufixed216x40","ufixed224x8","ufixed224x16","ufixed224x24","ufixed224x32","ufixed232x8","ufixed232x16","ufixed232x24","ufixed240x8","ufixed240x16","ufixed248x8","event","enum","let","mapping","private","public","external","inherited","payable","true","false","var","import","constant","if","else","for","else","for","while","do","break","continue","throw","returns","return","suicide","new","is","this","super"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]]}}},25183:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}]},o={defaultToken:"",tokenPostfix:".aes",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["contract","library","entrypoint","function","stateful","state","hash","signature","tuple","list","address","string","bool","int","record","datatype","type","option","oracle","oracle_query","Call","Bits","Bytes","Oracle","String","Crypto","Address","Auth","Chain","None","Some","bits","bytes","event","let","map","private","public","true","false","var","if","else","throw"],operators:["=",">","<","!","~","?","::",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]]}}},23001:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"'",close:"'",notIn:["string"]},{open:'"',close:'"',notIn:["string"]},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"}]},o={defaultToken:"",tokenPostfix:".rq",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["add","as","asc","ask","base","by","clear","construct","copy","create","data","delete","desc","describe","distinct","drop","false","filter","from","graph","group","having","in","insert","limit","load","minus","move","named","not","offset","optional","order","prefix","reduced","select","service","silent","to","true","undef","union","using","values","where","with"],builtinFunctions:["a","abs","avg","bind","bnode","bound","ceil","coalesce","concat","contains","count","datatype","day","encode_for_uri","exists","floor","group_concat","hours","if","iri","isblank","isiri","isliteral","isnumeric","isuri","lang","langmatches","lcase","max","md5","min","minutes","month","now","rand","regex","replace","round","sameterm","sample","seconds","sha1","sha256","sha384","sha512","str","strafter","strbefore","strdt","strends","strlang","strlen","strstarts","struuid","substr","sum","timezone","tz","ucase","uri","uuid","year"],ignoreCase:!0,tokenizer:{root:[[/<[^\s\u00a0>]*>?/,"tag"],{include:"@strings"},[/#.*/,"comment"],[/[{}()\[\]]/,"@brackets"],[/[;,.]/,"delimiter"],[/[_\w\d]+:(\.(?=[\w_\-\\%])|[:\w_-]|\\[-\\_~.!$&'()*+,;=/?#@%]|%[a-f\d][a-f\d])*/,"tag"],[/:(\.(?=[\w_\-\\%])|[:\w_-]|\\[-\\_~.!$&'()*+,;=/?#@%]|%[a-f\d][a-f\d])+/,"tag"],[/[$?]?[_\w\d]+/,{cases:{"@keywords":{token:"keyword"},"@builtinFunctions":{token:"predefined.sql"},"@default":"identifier"}}],[/\^\^/,"operator.sql"],[/\^[*+\-<>=&|^\/!?]*/,"operator.sql"],[/[*+\-<>=&|\/!?]/,"operator.sql"],[/@[a-z\d\-]*/,"metatag.html"],[/\s+/,"white"]],strings:[[/'([^'\\]|\\.)*$/,"string.invalid"],[/'$/,"string.sql","@pop"],[/'/,"string.sql","@stringBody"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"$/,"string.sql","@pop"],[/"/,"string.sql","@dblStringBody"]],stringBody:[[/[^\\']+/,"string.sql"],[/\\./,"string.escape"],[/'/,"string.sql","@pop"]],dblStringBody:[[/[^\\"]+/,"string.sql"],[/\\./,"string.escape"],[/"/,"string.sql","@pop"]]}}},78417:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"--",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={defaultToken:"",tokenPostfix:".sql",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:["ABORT","ABSOLUTE","ACTION","ADA","ADD","AFTER","ALL","ALLOCATE","ALTER","ALWAYS","ANALYZE","AND","ANY","ARE","AS","ASC","ASSERTION","AT","ATTACH","AUTHORIZATION","AUTOINCREMENT","AVG","BACKUP","BEFORE","BEGIN","BETWEEN","BIT","BIT_LENGTH","BOTH","BREAK","BROWSE","BULK","BY","CASCADE","CASCADED","CASE","CAST","CATALOG","CHAR","CHARACTER","CHARACTER_LENGTH","CHAR_LENGTH","CHECK","CHECKPOINT","CLOSE","CLUSTERED","COALESCE","COLLATE","COLLATION","COLUMN","COMMIT","COMPUTE","CONFLICT","CONNECT","CONNECTION","CONSTRAINT","CONSTRAINTS","CONTAINS","CONTAINSTABLE","CONTINUE","CONVERT","CORRESPONDING","COUNT","CREATE","CROSS","CURRENT","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURSOR","DATABASE","DATE","DAY","DBCC","DEALLOCATE","DEC","DECIMAL","DECLARE","DEFAULT","DEFERRABLE","DEFERRED","DELETE","DENY","DESC","DESCRIBE","DESCRIPTOR","DETACH","DIAGNOSTICS","DISCONNECT","DISK","DISTINCT","DISTRIBUTED","DO","DOMAIN","DOUBLE","DROP","DUMP","EACH","ELSE","END","END-EXEC","ERRLVL","ESCAPE","EXCEPT","EXCEPTION","EXCLUDE","EXCLUSIVE","EXEC","EXECUTE","EXISTS","EXIT","EXPLAIN","EXTERNAL","EXTRACT","FAIL","FALSE","FETCH","FILE","FILLFACTOR","FILTER","FIRST","FLOAT","FOLLOWING","FOR","FOREIGN","FORTRAN","FOUND","FREETEXT","FREETEXTTABLE","FROM","FULL","FUNCTION","GENERATED","GET","GLOB","GLOBAL","GO","GOTO","GRANT","GROUP","GROUPS","HAVING","HOLDLOCK","HOUR","IDENTITY","IDENTITYCOL","IDENTITY_INSERT","IF","IGNORE","IMMEDIATE","IN","INCLUDE","INDEX","INDEXED","INDICATOR","INITIALLY","INNER","INPUT","INSENSITIVE","INSERT","INSTEAD","INT","INTEGER","INTERSECT","INTERVAL","INTO","IS","ISNULL","ISOLATION","JOIN","KEY","KILL","LANGUAGE","LAST","LEADING","LEFT","LEVEL","LIKE","LIMIT","LINENO","LOAD","LOCAL","LOWER","MATCH","MATERIALIZED","MAX","MERGE","MIN","MINUTE","MODULE","MONTH","NAMES","NATIONAL","NATURAL","NCHAR","NEXT","NO","NOCHECK","NONCLUSTERED","NONE","NOT","NOTHING","NOTNULL","NULL","NULLIF","NULLS","NUMERIC","OCTET_LENGTH","OF","OFF","OFFSET","OFFSETS","ON","ONLY","OPEN","OPENDATASOURCE","OPENQUERY","OPENROWSET","OPENXML","OPTION","OR","ORDER","OTHERS","OUTER","OUTPUT","OVER","OVERLAPS","PAD","PARTIAL","PARTITION","PASCAL","PERCENT","PIVOT","PLAN","POSITION","PRAGMA","PRECEDING","PRECISION","PREPARE","PRESERVE","PRIMARY","PRINT","PRIOR","PRIVILEGES","PROC","PROCEDURE","PUBLIC","QUERY","RAISE","RAISERROR","RANGE","READ","READTEXT","REAL","RECONFIGURE","RECURSIVE","REFERENCES","REGEXP","REINDEX","RELATIVE","RELEASE","RENAME","REPLACE","REPLICATION","RESTORE","RESTRICT","RETURN","RETURNING","REVERT","REVOKE","RIGHT","ROLLBACK","ROW","ROWCOUNT","ROWGUIDCOL","ROWS","RULE","SAVE","SAVEPOINT","SCHEMA","SCROLL","SECOND","SECTION","SECURITYAUDIT","SELECT","SEMANTICKEYPHRASETABLE","SEMANTICSIMILARITYDETAILSTABLE","SEMANTICSIMILARITYTABLE","SESSION","SESSION_USER","SET","SETUSER","SHUTDOWN","SIZE","SMALLINT","SOME","SPACE","SQL","SQLCA","SQLCODE","SQLERROR","SQLSTATE","SQLWARNING","STATISTICS","SUBSTRING","SUM","SYSTEM_USER","TABLE","TABLESAMPLE","TEMP","TEMPORARY","TEXTSIZE","THEN","TIES","TIME","TIMESTAMP","TIMEZONE_HOUR","TIMEZONE_MINUTE","TO","TOP","TRAILING","TRAN","TRANSACTION","TRANSLATE","TRANSLATION","TRIGGER","TRIM","TRUE","TRUNCATE","TRY_CONVERT","TSEQUAL","UNBOUNDED","UNION","UNIQUE","UNKNOWN","UNPIVOT","UPDATE","UPDATETEXT","UPPER","USAGE","USE","USER","USING","VACUUM","VALUE","VALUES","VARCHAR","VARYING","VIEW","VIRTUAL","WAITFOR","WHEN","WHENEVER","WHERE","WHILE","WINDOW","WITH","WITHIN GROUP","WITHOUT","WORK","WRITE","WRITETEXT","YEAR","ZONE"],operators:["ALL","AND","ANY","BETWEEN","EXISTS","IN","LIKE","NOT","OR","SOME","EXCEPT","INTERSECT","UNION","APPLY","CROSS","FULL","INNER","JOIN","LEFT","OUTER","RIGHT","CONTAINS","FREETEXT","IS","NULL","PIVOT","UNPIVOT","MATCHED"],builtinFunctions:["AVG","CHECKSUM_AGG","COUNT","COUNT_BIG","GROUPING","GROUPING_ID","MAX","MIN","SUM","STDEV","STDEVP","VAR","VARP","CUME_DIST","FIRST_VALUE","LAG","LAST_VALUE","LEAD","PERCENTILE_CONT","PERCENTILE_DISC","PERCENT_RANK","COLLATE","COLLATIONPROPERTY","TERTIARY_WEIGHTS","FEDERATION_FILTERING_VALUE","CAST","CONVERT","PARSE","TRY_CAST","TRY_CONVERT","TRY_PARSE","ASYMKEY_ID","ASYMKEYPROPERTY","CERTPROPERTY","CERT_ID","CRYPT_GEN_RANDOM","DECRYPTBYASYMKEY","DECRYPTBYCERT","DECRYPTBYKEY","DECRYPTBYKEYAUTOASYMKEY","DECRYPTBYKEYAUTOCERT","DECRYPTBYPASSPHRASE","ENCRYPTBYASYMKEY","ENCRYPTBYCERT","ENCRYPTBYKEY","ENCRYPTBYPASSPHRASE","HASHBYTES","IS_OBJECTSIGNED","KEY_GUID","KEY_ID","KEY_NAME","SIGNBYASYMKEY","SIGNBYCERT","SYMKEYPROPERTY","VERIFYSIGNEDBYCERT","VERIFYSIGNEDBYASYMKEY","CURSOR_STATUS","DATALENGTH","IDENT_CURRENT","IDENT_INCR","IDENT_SEED","IDENTITY","SQL_VARIANT_PROPERTY","CURRENT_TIMESTAMP","DATEADD","DATEDIFF","DATEFROMPARTS","DATENAME","DATEPART","DATETIME2FROMPARTS","DATETIMEFROMPARTS","DATETIMEOFFSETFROMPARTS","DAY","EOMONTH","GETDATE","GETUTCDATE","ISDATE","MONTH","SMALLDATETIMEFROMPARTS","SWITCHOFFSET","SYSDATETIME","SYSDATETIMEOFFSET","SYSUTCDATETIME","TIMEFROMPARTS","TODATETIMEOFFSET","YEAR","CHOOSE","COALESCE","IIF","NULLIF","ABS","ACOS","ASIN","ATAN","ATN2","CEILING","COS","COT","DEGREES","EXP","FLOOR","LOG","LOG10","PI","POWER","RADIANS","RAND","ROUND","SIGN","SIN","SQRT","SQUARE","TAN","APP_NAME","APPLOCK_MODE","APPLOCK_TEST","ASSEMBLYPROPERTY","COL_LENGTH","COL_NAME","COLUMNPROPERTY","DATABASE_PRINCIPAL_ID","DATABASEPROPERTYEX","DB_ID","DB_NAME","FILE_ID","FILE_IDEX","FILE_NAME","FILEGROUP_ID","FILEGROUP_NAME","FILEGROUPPROPERTY","FILEPROPERTY","FULLTEXTCATALOGPROPERTY","FULLTEXTSERVICEPROPERTY","INDEX_COL","INDEXKEY_PROPERTY","INDEXPROPERTY","OBJECT_DEFINITION","OBJECT_ID","OBJECT_NAME","OBJECT_SCHEMA_NAME","OBJECTPROPERTY","OBJECTPROPERTYEX","ORIGINAL_DB_NAME","PARSENAME","SCHEMA_ID","SCHEMA_NAME","SCOPE_IDENTITY","SERVERPROPERTY","STATS_DATE","TYPE_ID","TYPE_NAME","TYPEPROPERTY","DENSE_RANK","NTILE","RANK","ROW_NUMBER","PUBLISHINGSERVERNAME","OPENDATASOURCE","OPENQUERY","OPENROWSET","OPENXML","CERTENCODED","CERTPRIVATEKEY","CURRENT_USER","HAS_DBACCESS","HAS_PERMS_BY_NAME","IS_MEMBER","IS_ROLEMEMBER","IS_SRVROLEMEMBER","LOGINPROPERTY","ORIGINAL_LOGIN","PERMISSIONS","PWDENCRYPT","PWDCOMPARE","SESSION_USER","SESSIONPROPERTY","SUSER_ID","SUSER_NAME","SUSER_SID","SUSER_SNAME","SYSTEM_USER","USER","USER_ID","USER_NAME","ASCII","CHAR","CHARINDEX","CONCAT","DIFFERENCE","FORMAT","LEFT","LEN","LOWER","LTRIM","NCHAR","PATINDEX","QUOTENAME","REPLACE","REPLICATE","REVERSE","RIGHT","RTRIM","SOUNDEX","SPACE","STR","STUFF","SUBSTRING","UNICODE","UPPER","BINARY_CHECKSUM","CHECKSUM","CONNECTIONPROPERTY","CONTEXT_INFO","CURRENT_REQUEST_ID","ERROR_LINE","ERROR_NUMBER","ERROR_MESSAGE","ERROR_PROCEDURE","ERROR_SEVERITY","ERROR_STATE","FORMATMESSAGE","GETANSINULL","GET_FILESTREAM_TRANSACTION_CONTEXT","HOST_ID","HOST_NAME","ISNULL","ISNUMERIC","MIN_ACTIVE_ROWVERSION","NEWID","NEWSEQUENTIALID","ROWCOUNT_BIG","XACT_STATE","TEXTPTR","TEXTVALID","COLUMNS_UPDATED","EVENTDATA","TRIGGER_NESTLEVEL","UPDATE","CHANGETABLE","CHANGE_TRACKING_CONTEXT","CHANGE_TRACKING_CURRENT_VERSION","CHANGE_TRACKING_IS_COLUMN_IN_MASK","CHANGE_TRACKING_MIN_VALID_VERSION","CONTAINSTABLE","FREETEXTTABLE","SEMANTICKEYPHRASETABLE","SEMANTICSIMILARITYDETAILSTABLE","SEMANTICSIMILARITYTABLE","FILETABLEROOTPATH","GETFILENAMESPACEPATH","GETPATHLOCATOR","PATHNAME","GET_TRANSMISSION_STATUS"],builtinVariables:["@@DATEFIRST","@@DBTS","@@LANGID","@@LANGUAGE","@@LOCK_TIMEOUT","@@MAX_CONNECTIONS","@@MAX_PRECISION","@@NESTLEVEL","@@OPTIONS","@@REMSERVER","@@SERVERNAME","@@SERVICENAME","@@SPID","@@TEXTSIZE","@@VERSION","@@CURSOR_ROWS","@@FETCH_STATUS","@@DATEFIRST","@@PROCID","@@ERROR","@@IDENTITY","@@ROWCOUNT","@@TRANCOUNT","@@CONNECTIONS","@@CPU_BUSY","@@IDLE","@@IO_BUSY","@@PACKET_ERRORS","@@PACK_RECEIVED","@@PACK_SENT","@@TIMETICKS","@@TOTAL_ERRORS","@@TOTAL_READ","@@TOTAL_WRITE"],pseudoColumns:["$ACTION","$IDENTITY","$ROWGUID","$PARTITION"],tokenizer:{root:[{include:"@comments"},{include:"@whitespace"},{include:"@pseudoColumns"},{include:"@numbers"},{include:"@strings"},{include:"@complexIdentifiers"},{include:"@scopes"},[/[;,.]/,"delimiter"],[/[()]/,"@brackets"],[/[\w@#$]+/,{cases:{"@operators":"operator","@builtinVariables":"predefined","@builtinFunctions":"predefined","@keywords":"keyword","@default":"identifier"}}],[/[<>=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],comments:[[/--+.*/,"comment"],[/\/\*/,{token:"comment.quote",next:"@comment"}]],comment:[[/[^*/]+/,"comment"],[/\*\//,{token:"comment.quote",next:"@pop"}],[/./,"comment"]],pseudoColumns:[[/[$][A-Za-z_][\w@#$]*/,{cases:{"@pseudoColumns":"predefined","@default":"identifier"}}]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/N'/,{token:"string",next:"@string"}],[/'/,{token:"string",next:"@string"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],complexIdentifiers:[[/\[/,{token:"identifier.quote",next:"@bracketedIdentifier"}],[/"/,{token:"identifier.quote",next:"@quotedIdentifier"}]],bracketedIdentifier:[[/[^\]]+/,"identifier"],[/]]/,"identifier"],[/]/,{token:"identifier.quote",next:"@pop"}]],quotedIdentifier:[[/[^"]+/,"identifier"],[/""/,"identifier"],[/"/,{token:"identifier.quote",next:"@pop"}]],scopes:[[/BEGIN\s+(DISTRIBUTED\s+)?TRAN(SACTION)?\b/i,"keyword"],[/BEGIN\s+TRY\b/i,{token:"keyword.try"}],[/END\s+TRY\b/i,{token:"keyword.try"}],[/BEGIN\s+CATCH\b/i,{token:"keyword.catch"}],[/END\s+CATCH\b/i,{token:"keyword.catch"}],[/(BEGIN|CASE)\b/i,{token:"keyword.block"}],[/END\b/i,{token:"keyword.block"}],[/WHEN\b/i,{token:"keyword.choice"}],[/THEN\b/i,{token:"keyword.choice"}]]}}},32788:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["var","end_var"],["var_input","end_var"],["var_output","end_var"],["var_in_out","end_var"],["var_temp","end_var"],["var_global","end_var"],["var_access","end_var"],["var_external","end_var"],["type","end_type"],["struct","end_struct"],["program","end_program"],["function","end_function"],["function_block","end_function_block"],["action","end_action"],["step","end_step"],["initial_step","end_step"],["transaction","end_transaction"],["configuration","end_configuration"],["tcp","end_tcp"],["recource","end_recource"],["channel","end_channel"],["library","end_library"],["folder","end_folder"],["binaries","end_binaries"],["includes","end_includes"],["sources","end_sources"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"/*",close:"*/"},{open:"'",close:"'",notIn:["string_sq"]},{open:'"',close:'"',notIn:["string_dq"]},{open:"var_input",close:"end_var"},{open:"var_output",close:"end_var"},{open:"var_in_out",close:"end_var"},{open:"var_temp",close:"end_var"},{open:"var_global",close:"end_var"},{open:"var_access",close:"end_var"},{open:"var_external",close:"end_var"},{open:"type",close:"end_type"},{open:"struct",close:"end_struct"},{open:"program",close:"end_program"},{open:"function",close:"end_function"},{open:"function_block",close:"end_function_block"},{open:"action",close:"end_action"},{open:"step",close:"end_step"},{open:"initial_step",close:"end_step"},{open:"transaction",close:"end_transaction"},{open:"configuration",close:"end_configuration"},{open:"tcp",close:"end_tcp"},{open:"recource",close:"end_recource"},{open:"channel",close:"end_channel"},{open:"library",close:"end_library"},{open:"folder",close:"end_folder"},{open:"binaries",close:"end_binaries"},{open:"includes",close:"end_includes"},{open:"sources",close:"end_sources"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"var",close:"end_var"},{open:"var_input",close:"end_var"},{open:"var_output",close:"end_var"},{open:"var_in_out",close:"end_var"},{open:"var_temp",close:"end_var"},{open:"var_global",close:"end_var"},{open:"var_access",close:"end_var"},{open:"var_external",close:"end_var"},{open:"type",close:"end_type"},{open:"struct",close:"end_struct"},{open:"program",close:"end_program"},{open:"function",close:"end_function"},{open:"function_block",close:"end_function_block"},{open:"action",close:"end_action"},{open:"step",close:"end_step"},{open:"initial_step",close:"end_step"},{open:"transaction",close:"end_transaction"},{open:"configuration",close:"end_configuration"},{open:"tcp",close:"end_tcp"},{open:"recource",close:"end_recource"},{open:"channel",close:"end_channel"},{open:"library",close:"end_library"},{open:"folder",close:"end_folder"},{open:"binaries",close:"end_binaries"},{open:"includes",close:"end_includes"},{open:"sources",close:"end_sources"}],folding:{markers:{start:new RegExp("^\\s*#pragma\\s+region\\b"),end:new RegExp("^\\s*#pragma\\s+endregion\\b")}}},o={defaultToken:"",tokenPostfix:".st",ignoreCase:!0,brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["if","end_if","elsif","else","case","of","to","__try","__catch","__finally","do","with","by","while","repeat","end_while","end_repeat","end_case","for","end_for","task","retain","non_retain","constant","with","at","exit","return","interval","priority","address","port","on_channel","then","iec","file","uses","version","packagetype","displayname","copyright","summary","vendor","common_source","from","extends","implements"],constant:["false","true","null"],defineKeywords:["var","var_input","var_output","var_in_out","var_temp","var_global","var_access","var_external","end_var","type","end_type","struct","end_struct","program","end_program","function","end_function","function_block","end_function_block","interface","end_interface","method","end_method","property","end_property","namespace","end_namespace","configuration","end_configuration","tcp","end_tcp","resource","end_resource","channel","end_channel","library","end_library","folder","end_folder","binaries","end_binaries","includes","end_includes","sources","end_sources","action","end_action","step","initial_step","end_step","transaction","end_transaction"],typeKeywords:["int","sint","dint","lint","usint","uint","udint","ulint","real","lreal","time","date","time_of_day","date_and_time","string","bool","byte","word","dword","array","pointer","lword"],operators:["=",">","<",":",":=","<=",">=","<>","&","+","-","*","**","MOD","^","or","and","not","xor","abs","acos","asin","atan","cos","exp","expt","ln","log","sin","sqrt","tan","sel","max","min","limit","mux","shl","shr","rol","ror","indexof","sizeof","adr","adrinst","bitadr","is_valid","ref","ref_to"],builtinVariables:[],builtinFunctions:["sr","rs","tp","ton","tof","eq","ge","le","lt","ne","round","trunc","ctd","сtu","ctud","r_trig","f_trig","move","concat","delete","find","insert","left","len","replace","right","rtc"],symbols:/[=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}]},o={defaultToken:"",tokenPostfix:".swift",identifier:/[a-zA-Z_][\w$]*/,attributes:["@GKInspectable","@IBAction","@IBDesignable","@IBInspectable","@IBOutlet","@IBSegueAction","@NSApplicationMain","@NSCopying","@NSManaged","@Sendable","@UIApplicationMain","@autoclosure","@actorIndependent","@asyncHandler","@available","@convention","@derivative","@differentiable","@discardableResult","@dynamicCallable","@dynamicMemberLookup","@escaping","@frozen","@globalActor","@inlinable","@inline","@main","@noDerivative","@nonobjc","@noreturn","@objc","@objcMembers","@preconcurrency","@propertyWrapper","@requires_stored_property_inits","@resultBuilder","@testable","@unchecked","@unknown","@usableFromInline","@warn_unqualified_access"],accessmodifiers:["open","public","internal","fileprivate","private"],keywords:["#available","#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning","Any","Protocol","Self","Type","actor","as","assignment","associatedtype","associativity","async","await","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","do","dynamic","dynamicType","else","enum","extension","fallthrough","false","fileprivate","final","for","func","get","guard","higherThan","if","import","in","indirect","infix","init","inout","internal","is","isolated","lazy","left","let","lowerThan","mutating","nil","none","nonisolated","nonmutating","open","operator","optional","override","postfix","precedence","precedencegroup","prefix","private","protocol","public","repeat","required","rethrows","return","right","safe","self","set","some","static","struct","subscript","super","switch","throw","throws","true","try","typealias","unowned","unsafe","var","weak","where","while","willSet","__consuming","__owned"],symbols:/[=(){}\[\].,:;@#\_&\-<>`?!+*\\\/]/,operatorstart:/[\/=\-+!*%<>&|^~?\u00A1-\u00A7\u00A9\u00AB\u00AC\u00AE\u00B0-\u00B1\u00B6\u00BB\u00BF\u00D7\u00F7\u2016-\u2017\u2020-\u2027\u2030-\u203E\u2041-\u2053\u2055-\u205E\u2190-\u23FF\u2500-\u2775\u2794-\u2BFF\u2E00-\u2E7F\u3001-\u3003\u3008-\u3030]/,operatorend:/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE00-\uFE0F\uFE20-\uFE2F\uE0100-\uE01EF]/,operators:/(@operatorstart)((@operatorstart)|(@operatorend))*/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},{include:"@attribute"},{include:"@literal"},{include:"@keyword"},{include:"@invokedmethod"},{include:"@symbol"}],whitespace:[[/\s+/,"white"],[/"""/,"string.quote","@endDblDocString"]],endDblDocString:[[/[^"]+/,"string"],[/\\"/,"string"],[/"""/,"string.quote","@popall"],[/"/,"string"]],symbol:[[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/[.]/,"delimiter"],[/@operators/,"operator"],[/@symbols/,"operator"]],comment:[[/\/\/\/.*$/,"comment.doc"],[/\/\*\*/,"comment.doc","@commentdocbody"],[/\/\/.*$/,"comment"],[/\/\*/,"comment","@commentbody"]],commentdocbody:[[/\/\*/,"comment","@commentbody"],[/\*\//,"comment.doc","@pop"],[/\:[a-zA-Z]+\:/,"comment.doc.param"],[/./,"comment.doc"]],commentbody:[[/\/\*/,"comment","@commentbody"],[/\*\//,"comment","@pop"],[/./,"comment"]],attribute:[[/@@@identifier/,{cases:{"@attributes":"keyword.control","@default":""}}]],literal:[[/"/,{token:"string.quote",next:"@stringlit"}],[/0[b]([01]_?)+/,"number.binary"],[/0[o]([0-7]_?)+/,"number.octal"],[/0[x]([0-9a-fA-F]_?)+([pP][\-+](\d_?)+)?/,"number.hex"],[/(\d_?)*\.(\d_?)+([eE][\-+]?(\d_?)+)?/,"number.float"],[/(\d_?)+/,"number"]],stringlit:[[/\\\(/,{token:"operator",next:"@interpolatedexpression"}],[/@escapes/,"string"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",next:"@pop"}],[/./,"string"]],interpolatedexpression:[[/\(/,{token:"operator",next:"@interpolatedexpression"}],[/\)/,{token:"operator",next:"@pop"}],{include:"@literal"},{include:"@keyword"},{include:"@symbol"}],keyword:[[/`/,{token:"operator",next:"@escapedkeyword"}],[/@identifier/,{cases:{"@keywords":"keyword","[A-Z][a-zA-Z0-9$]*":"type.identifier","@default":"identifier"}}]],escapedkeyword:[[/`/,{token:"operator",next:"@pop"}],[/./,"identifier"]],invokedmethod:[[/([.])(@identifier)/,{cases:{$2:["delimeter","type.identifier"],"@default":""}}]]}}} -/*!--------------------------------------------------------------------------------------------- - * Copyright (C) David Owens II, owensd.io. All rights reserved. - *--------------------------------------------------------------------------------------------*/,27370:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"],["begin","end"],["case","endcase"],["casex","endcase"],["casez","endcase"],["checker","endchecker"],["class","endclass"],["clocking","endclocking"],["config","endconfig"],["function","endfunction"],["generate","endgenerate"],["group","endgroup"],["interface","endinterface"],["module","endmodule"],["package","endpackage"],["primitive","endprimitive"],["program","endprogram"],["property","endproperty"],["specify","endspecify"],["sequence","endsequence"],["table","endtable"],["task","endtask"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{offSide:!1,markers:{start:new RegExp("^(?:\\s*|.*(?!\\/[\\/\\*])[^\\w])(?:begin|case(x|z)?|class|clocking|config|covergroup|function|generate|interface|module|package|primitive|property|program|sequence|specify|table|task)\\b"),end:new RegExp("^(?:\\s*|.*(?!\\/[\\/\\*])[^\\w])(?:end|endcase|endclass|endclocking|endconfig|endgroup|endfunction|endgenerate|endinterface|endmodule|endpackage|endprimitive|endproperty|endprogram|endsequence|endspecify|endtable|endtask)\\b")}}},o={defaultToken:"",tokenPostfix:".sv",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["accept_on","alias","always","always_comb","always_ff","always_latch","and","assert","assign","assume","automatic","before","begin","bind","bins","binsof","bit","break","buf","bufif0","bufif1","byte","case","casex","casez","cell","chandle","checker","class","clocking","cmos","config","const","constraint","context","continue","cover","covergroup","coverpoint","cross","deassign","default","defparam","design","disable","dist","do","edge","else","end","endcase","endchecker","endclass","endclocking","endconfig","endfunction","endgenerate","endgroup","endinterface","endmodule","endpackage","endprimitive","endprogram","endproperty","endspecify","endsequence","endtable","endtask","enum","event","eventually","expect","export","extends","extern","final","first_match","for","force","foreach","forever","fork","forkjoin","function","generate","genvar","global","highz0","highz1","if","iff","ifnone","ignore_bins","illegal_bins","implements","implies","import","incdir","include","initial","inout","input","inside","instance","int","integer","interconnect","interface","intersect","join","join_any","join_none","large","let","liblist","library","local","localparam","logic","longint","macromodule","matches","medium","modport","module","nand","negedge","nettype","new","nexttime","nmos","nor","noshowcancelled","not","notif0","notif1","null","or","output","package","packed","parameter","pmos","posedge","primitive","priority","program","property","protected","pull0","pull1","pulldown","pullup","pulsestyle_ondetect","pulsestyle_onevent","pure","rand","randc","randcase","randsequence","rcmos","real","realtime","ref","reg","reject_on","release","repeat","restrict","return","rnmos","rpmos","rtran","rtranif0","rtranif1","s_always","s_eventually","s_nexttime","s_until","s_until_with","scalared","sequence","shortint","shortreal","showcancelled","signed","small","soft","solve","specify","specparam","static","string","strong","strong0","strong1","struct","super","supply0","supply1","sync_accept_on","sync_reject_on","table","tagged","task","this","throughout","time","timeprecision","timeunit","tran","tranif0","tranif1","tri","tri0","tri1","triand","trior","trireg","type","typedef","union","unique","unique0","unsigned","until","until_with","untyped","use","uwire","var","vectored","virtual","void","wait","wait_order","wand","weak","weak0","weak1","while","wildcard","wire","with","within","wor","xnor","xor"],builtin_gates:["and","nand","nor","or","xor","xnor","buf","not","bufif0","bufif1","notif1","notif0","cmos","nmos","pmos","rcmos","rnmos","rpmos","tran","tranif1","tranif0","rtran","rtranif1","rtranif0"],operators:["=","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>+","<<<=",">>>=","?",":","+","-","!","~","&","~&","|","~|","^","~^","^~","+","-","*","/","%","==","!=","===","!==","==?","!=?","&&","||","**","<","<=",">",">=","&","|","^",">>","<<",">>>","<<<","++","--","->","<->","inside","dist","::","+:","-:","*>","&&&","|->","|=>","#=#"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],{include:"@numbers"},[/[;,.]/,"delimiter"],{include:"@strings"}],identifier_or_keyword:[[/@identifier/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}]],numbers:[[/\d+?[\d_]*(?:\.[\d_]+)?[eE][\-+]?\d+/,"number.float"],[/\d+?[\d_]*\.[\d_]+(?:\s*@timeunits)?/,"number.float"],[/(?:\d+?[\d_]*\s*)?'[sS]?[dD]\s*[0-9xXzZ?]+?[0-9xXzZ?_]*/,"number"],[/(?:\d+?[\d_]*\s*)?'[sS]?[bB]\s*[0-1xXzZ?]+?[0-1xXzZ?_]*/,"number.binary"],[/(?:\d+?[\d_]*\s*)?'[sS]?[oO]\s*[0-7xXzZ?]+?[0-7xXzZ?_]*/,"number.octal"],[/(?:\d+?[\d_]*\s*)?'[sS]?[hH]\s*[0-9a-fA-FxXzZ?]+?[0-9a-fA-FxXzZ?_]*/,"number.hex"],[/1step/,"number"],[/[\dxXzZ]+?[\dxXzZ_]*(?:\s*@timeunits)?/,"number"],[/'[01xXzZ]+/,"number"]],module_instance:[{include:"@whitespace"},[/(#?)(\()/,["",{token:"@brackets",next:"@port_connection"}]],[/@identifier\s*[;={}\[\],]/,{token:"@rematch",next:"@pop"}],[/@symbols|[;={}\[\],]/,{token:"@rematch",next:"@pop"}],[/@identifier/,"type"],[/;/,"delimiter","@pop"]],port_connection:[{include:"@identifier_or_keyword"},{include:"@whitespace"},[/@systemcall/,"variable.predefined"],{include:"@numbers"},{include:"@strings"},[/[,]/,"delimiter"],[/\(/,"@brackets","@port_connection"],[/\)/,"@brackets","@pop"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],strings:[[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],include:[[/(\s*)(")([\w*\/*]*)(.\w*)(")/,["","string.include.identifier","string.include.identifier","string.include.identifier",{token:"string.include.identifier",next:"@pop"}]],[/(\s*)(<)([\w*\/*]*)(.\w*)(>)/,["","string.include.identifier","string.include.identifier","string.include.identifier",{token:"string.include.identifier",next:"@pop"}]]],table:[{include:"@whitespace"},[/[()]/,"@brackets"],[/[:;]/,"delimiter"],[/[01\-*?xXbBrRfFpPnN]/,"variable.predefined"],["endtable","keyword.endtable","@pop"]]}}},16858:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={tokenPostfix:".tcl",specialFunctions:["set","unset","rename","variable","proc","coroutine","foreach","incr","append","lappend","linsert","lreplace"],mainFunctions:["if","then","elseif","else","case","switch","while","for","break","continue","return","package","namespace","catch","exit","eval","expr","uplevel","upvar"],builtinFunctions:["file","info","concat","join","lindex","list","llength","lrange","lsearch","lsort","split","array","parray","binary","format","regexp","regsub","scan","string","subst","dict","cd","clock","exec","glob","pid","pwd","close","eof","fblocked","fconfigure","fcopy","fileevent","flush","gets","open","puts","read","seek","socket","tell","interp","after","auto_execok","auto_load","auto_mkindex","auto_reset","bgerror","error","global","history","load","source","time","trace","unknown","unset","update","vwait","winfo","wm","bind","event","pack","place","grid","font","bell","clipboard","destroy","focus","grab","lower","option","raise","selection","send","tk","tkwait","tk_bisque","tk_focusNext","tk_focusPrev","tk_focusFollowsMouse","tk_popup","tk_setPalette"],symbols:/[=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["{#","#}"]},brackets:[["{#","#}"],["{%","%}"],["{{","}}"],["(",")"],["[","]"],["\x3c!--","--\x3e"],["<",">"]],autoClosingPairs:[{open:"{# ",close:" #}"},{open:"{% ",close:" %}"},{open:"{{ ",close:" }}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}]},o={defaultToken:"",tokenPostfix:"",ignoreCase:!0,keywords:["apply","autoescape","block","deprecated","do","embed","extends","flush","for","from","if","import","include","macro","sandbox","set","use","verbatim","with","endapply","endautoescape","endblock","endembed","endfor","endif","endmacro","endsandbox","endset","endwith","true","false"],tokenizer:{root:[[/\s+/],[/{#/,"comment.twig","@commentState"],[/{%[-~]?/,"delimiter.twig","@blockState"],[/{{[-~]?/,"delimiter.twig","@variableState"],[/)/,["delimiter.html","tag.html","","delimiter.html"]],[/(<)(script)/,["delimiter.html",{token:"tag.html",next:"@script"}]],[/(<)(style)/,["delimiter.html",{token:"tag.html",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/|>=|<=/,"operators.twig"],[/(starts with|ends with|matches)(\s+)/,["operators.twig",""]],[/(in)(\s+)/,["operators.twig",""]],[/(is)(\s+)/,["operators.twig",""]],[/\||~|:|\.{1,2}|\?{1,2}/,"operators.twig"],[/[^\W\d][\w]*/,{cases:{"@keywords":"keyword.twig","@default":"variable.twig"}}],[/\d+(\.\d+)?/,"number.twig"],[/\(|\)|\[|\]|{|}|,/,"delimiter.twig"],[/"([^#"\\]*(?:\\.[^#"\\]*)*)"|\'([^\'\\]*(?:\\.[^\'\\]*)*)\'/,"string.twig"],[/"/,"string.twig","@stringState"],[/=>/,"operators.twig"],[/=/,"operators.twig"]],doctype:[[/[^>]+/,"metatag.content.html"],[/>/,"metatag.html","@pop"]],comment:[[/-->/,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name.html","@scriptAfterType"],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter.html","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value.html",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value.html",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name.html","@styleAfterType"],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/>/,{token:"delimiter.html",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter.html","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value.html",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value.html",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value.html"],[/'([^']*)'/,"attribute.value.html"],[/[\w\-]+/,"attribute.name.html"],[/=/,"delimiter.html"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}}},66387:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>u,language:()=>h});var n=i(78270),o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,l=(e,t,i,n)=>{if(t&&"object"===typeof t||"function"===typeof t)for(let l of r(t))a.call(e,l)||l===i||o(e,l,{get:()=>t[l],enumerable:!(n=s(t,l))||n.enumerable});return e},c=(e,t,i)=>(l(e,t,"default"),i&&l(i,t,"default")),d={}; -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/c(d,n);var u={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:d.languages.IndentAction.IndentOutdent,appendText:" * "}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:d.languages.IndentAction.None,appendText:" * "}},{beforeText:/^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:d.languages.IndentAction.None,appendText:"* "}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:d.languages.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"`",close:"`",notIn:["string","comment"]},{open:"/**",close:" */",notIn:["string"]}],folding:{markers:{start:new RegExp("^\\s*//\\s*#?region\\b"),end:new RegExp("^\\s*//\\s*#?endregion\\b")}}},h={defaultToken:"invalid",tokenPostfix:".ts",keywords:["abstract","any","as","asserts","bigint","boolean","break","case","catch","class","continue","const","constructor","debugger","declare","default","delete","do","else","enum","export","extends","false","finally","for","from","function","get","if","implements","import","in","infer","instanceof","interface","is","keyof","let","module","namespace","never","new","null","number","object","out","package","private","protected","public","override","readonly","require","global","return","satisfies","set","static","string","super","switch","symbol","this","throw","true","try","type","typeof","undefined","unique","unknown","var","void","while","with","yield","async","await","of"],operators:["<=",">=","==","!=","===","!==","=>","+","-","**","*","/","%","++","--","<<",">",">>>","&","|","^","!","~","&&","||","??","?",":","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=","@"],symbols:/[=>](?!@symbols)/,"@brackets"],[/!(?=([^=]|$))/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,"number.float"],[/0[xX](@hexdigits)n?/,"number.hex"],[/0[oO]?(@octaldigits)n?/,"number.octal"],[/0[bB](@binarydigits)n?/,"number.binary"],[/(@digits)n?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],[/`/,"string","@string_backtick"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@jsdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],jsdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/,["regexp.escape.control","regexp.escape.control"]],[/[()]/,"regexp.escape.control"],[/@regexpctl/,"regexp.escape.control"],[/[^\\\/]/,"regexp"],[/@regexpesc/,"regexp.escape"],[/\\\./,"regexp.invalid"],[/(\/)([dgimsuy]*)/,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/,"regexp.escape.control"],[/\^/,"regexp.invalid"],[/@regexpesc/,"regexp.escape"],[/[^\]]/,"regexp"],[/\]/,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]],string_backtick:[[/\$\{/,{token:"delimiter.bracket",next:"@bracketCounting"}],[/[^\\`$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/`/,"string","@pop"]],bracketCounting:[[/\{/,"delimiter.bracket","@bracketCounting"],[/\}/,"delimiter.bracket","@pop"],{include:"common"}]}}},3427:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>o}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"'",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"],["addhandler","end addhandler"],["class","end class"],["enum","end enum"],["event","end event"],["function","end function"],["get","end get"],["if","end if"],["interface","end interface"],["module","end module"],["namespace","end namespace"],["operator","end operator"],["property","end property"],["raiseevent","end raiseevent"],["removehandler","end removehandler"],["select","end select"],["set","end set"],["structure","end structure"],["sub","end sub"],["synclock","end synclock"],["try","end try"],["while","end while"],["with","end with"],["using","end using"],["do","loop"],["for","next"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"<",close:">",notIn:["string","comment"]}],folding:{markers:{start:new RegExp("^\\s*#Region\\b"),end:new RegExp("^\\s*#End Region\\b")}}},o={defaultToken:"",tokenPostfix:".vb",ignoreCase:!0,brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.angle",open:"<",close:">"},{token:"keyword.tag-addhandler",open:"addhandler",close:"end addhandler"},{token:"keyword.tag-class",open:"class",close:"end class"},{token:"keyword.tag-enum",open:"enum",close:"end enum"},{token:"keyword.tag-event",open:"event",close:"end event"},{token:"keyword.tag-function",open:"function",close:"end function"},{token:"keyword.tag-get",open:"get",close:"end get"},{token:"keyword.tag-if",open:"if",close:"end if"},{token:"keyword.tag-interface",open:"interface",close:"end interface"},{token:"keyword.tag-module",open:"module",close:"end module"},{token:"keyword.tag-namespace",open:"namespace",close:"end namespace"},{token:"keyword.tag-operator",open:"operator",close:"end operator"},{token:"keyword.tag-property",open:"property",close:"end property"},{token:"keyword.tag-raiseevent",open:"raiseevent",close:"end raiseevent"},{token:"keyword.tag-removehandler",open:"removehandler",close:"end removehandler"},{token:"keyword.tag-select",open:"select",close:"end select"},{token:"keyword.tag-set",open:"set",close:"end set"},{token:"keyword.tag-structure",open:"structure",close:"end structure"},{token:"keyword.tag-sub",open:"sub",close:"end sub"},{token:"keyword.tag-synclock",open:"synclock",close:"end synclock"},{token:"keyword.tag-try",open:"try",close:"end try"},{token:"keyword.tag-while",open:"while",close:"end while"},{token:"keyword.tag-with",open:"with",close:"end with"},{token:"keyword.tag-using",open:"using",close:"end using"},{token:"keyword.tag-do",open:"do",close:"loop"},{token:"keyword.tag-for",open:"for",close:"next"}],keywords:["AddHandler","AddressOf","Alias","And","AndAlso","As","Async","Boolean","ByRef","Byte","ByVal","Call","Case","Catch","CBool","CByte","CChar","CDate","CDbl","CDec","Char","CInt","Class","CLng","CObj","Const","Continue","CSByte","CShort","CSng","CStr","CType","CUInt","CULng","CUShort","Date","Decimal","Declare","Default","Delegate","Dim","DirectCast","Do","Double","Each","Else","ElseIf","End","EndIf","Enum","Erase","Error","Event","Exit","False","Finally","For","Friend","Function","Get","GetType","GetXMLNamespace","Global","GoSub","GoTo","Handles","If","Implements","Imports","In","Inherits","Integer","Interface","Is","IsNot","Let","Lib","Like","Long","Loop","Me","Mod","Module","MustInherit","MustOverride","MyBase","MyClass","NameOf","Namespace","Narrowing","New","Next","Not","Nothing","NotInheritable","NotOverridable","Object","Of","On","Operator","Option","Optional","Or","OrElse","Out","Overloads","Overridable","Overrides","ParamArray","Partial","Private","Property","Protected","Public","RaiseEvent","ReadOnly","ReDim","RemoveHandler","Resume","Return","SByte","Select","Set","Shadows","Shared","Short","Single","Static","Step","Stop","String","Structure","Sub","SyncLock","Then","Throw","To","True","Try","TryCast","TypeOf","UInteger","ULong","UShort","Using","Variant","Wend","When","While","Widening","With","WithEvents","WriteOnly","Xor"],tagwords:["If","Sub","Select","Try","Class","Enum","Function","Get","Interface","Module","Namespace","Operator","Set","Structure","Using","While","With","Do","Loop","For","Next","Property","Continue","AddHandler","RemoveHandler","Event","RaiseEvent","SyncLock"],symbols:/[=>{"use strict";i.r(t),i.d(t,{conf:()=>n,language:()=>v}); -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/ -var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"}]};function o(e){let t=[];const i=e.split(/\t+|\r+|\n+| +/);for(let n=0;n0&&t.push(i[n]);return t}var s=o("true false"),r=o("\n\t\t\t alias\n\t\t\t break\n\t\t\t case\n\t\t\t const\n\t\t\t const_assert\n\t\t\t continue\n\t\t\t continuing\n\t\t\t default\n\t\t\t diagnostic\n\t\t\t discard\n\t\t\t else\n\t\t\t enable\n\t\t\t fn\n\t\t\t for\n\t\t\t if\n\t\t\t let\n\t\t\t loop\n\t\t\t override\n\t\t\t requires\n\t\t\t return\n\t\t\t struct\n\t\t\t switch\n\t\t\t var\n\t\t\t while\n\t\t\t "),a=o("\n\t\t\t NULL\n\t\t\t Self\n\t\t\t abstract\n\t\t\t active\n\t\t\t alignas\n\t\t\t alignof\n\t\t\t as\n\t\t\t asm\n\t\t\t asm_fragment\n\t\t\t async\n\t\t\t attribute\n\t\t\t auto\n\t\t\t await\n\t\t\t become\n\t\t\t binding_array\n\t\t\t cast\n\t\t\t catch\n\t\t\t class\n\t\t\t co_await\n\t\t\t co_return\n\t\t\t co_yield\n\t\t\t coherent\n\t\t\t column_major\n\t\t\t common\n\t\t\t compile\n\t\t\t compile_fragment\n\t\t\t concept\n\t\t\t const_cast\n\t\t\t consteval\n\t\t\t constexpr\n\t\t\t constinit\n\t\t\t crate\n\t\t\t debugger\n\t\t\t decltype\n\t\t\t delete\n\t\t\t demote\n\t\t\t demote_to_helper\n\t\t\t do\n\t\t\t dynamic_cast\n\t\t\t enum\n\t\t\t explicit\n\t\t\t export\n\t\t\t extends\n\t\t\t extern\n\t\t\t external\n\t\t\t fallthrough\n\t\t\t filter\n\t\t\t final\n\t\t\t finally\n\t\t\t friend\n\t\t\t from\n\t\t\t fxgroup\n\t\t\t get\n\t\t\t goto\n\t\t\t groupshared\n\t\t\t highp\n\t\t\t impl\n\t\t\t implements\n\t\t\t import\n\t\t\t inline\n\t\t\t instanceof\n\t\t\t interface\n\t\t\t layout\n\t\t\t lowp\n\t\t\t macro\n\t\t\t macro_rules\n\t\t\t match\n\t\t\t mediump\n\t\t\t meta\n\t\t\t mod\n\t\t\t module\n\t\t\t move\n\t\t\t mut\n\t\t\t mutable\n\t\t\t namespace\n\t\t\t new\n\t\t\t nil\n\t\t\t noexcept\n\t\t\t noinline\n\t\t\t nointerpolation\n\t\t\t noperspective\n\t\t\t null\n\t\t\t nullptr\n\t\t\t of\n\t\t\t operator\n\t\t\t package\n\t\t\t packoffset\n\t\t\t partition\n\t\t\t pass\n\t\t\t patch\n\t\t\t pixelfragment\n\t\t\t precise\n\t\t\t precision\n\t\t\t premerge\n\t\t\t priv\n\t\t\t protected\n\t\t\t pub\n\t\t\t public\n\t\t\t readonly\n\t\t\t ref\n\t\t\t regardless\n\t\t\t register\n\t\t\t reinterpret_cast\n\t\t\t require\n\t\t\t resource\n\t\t\t restrict\n\t\t\t self\n\t\t\t set\n\t\t\t shared\n\t\t\t sizeof\n\t\t\t smooth\n\t\t\t snorm\n\t\t\t static\n\t\t\t static_assert\n\t\t\t static_cast\n\t\t\t std\n\t\t\t subroutine\n\t\t\t super\n\t\t\t target\n\t\t\t template\n\t\t\t this\n\t\t\t thread_local\n\t\t\t throw\n\t\t\t trait\n\t\t\t try\n\t\t\t type\n\t\t\t typedef\n\t\t\t typeid\n\t\t\t typename\n\t\t\t typeof\n\t\t\t union\n\t\t\t unless\n\t\t\t unorm\n\t\t\t unsafe\n\t\t\t unsized\n\t\t\t use\n\t\t\t using\n\t\t\t varying\n\t\t\t virtual\n\t\t\t volatile\n\t\t\t wgsl\n\t\t\t where\n\t\t\t with\n\t\t\t writeonly\n\t\t\t yield\n\t\t\t "),l=o("\n\t\tread write read_write\n\t\tfunction private workgroup uniform storage\n\t\tperspective linear flat\n\t\tcenter centroid sample\n\t\tvertex_index instance_index position front_facing frag_depth\n\t\t\tlocal_invocation_id local_invocation_index\n\t\t\tglobal_invocation_id workgroup_id num_workgroups\n\t\t\tsample_index sample_mask\n\t\trgba8unorm\n\t\trgba8snorm\n\t\trgba8uint\n\t\trgba8sint\n\t\trgba16uint\n\t\trgba16sint\n\t\trgba16float\n\t\tr32uint\n\t\tr32sint\n\t\tr32float\n\t\trg32uint\n\t\trg32sint\n\t\trg32float\n\t\trgba32uint\n\t\trgba32sint\n\t\trgba32float\n\t\tbgra8unorm\n"),c=o("\n\t\tbool\n\t\tf16\n\t\tf32\n\t\ti32\n\t\tsampler sampler_comparison\n\t\ttexture_depth_2d\n\t\ttexture_depth_2d_array\n\t\ttexture_depth_cube\n\t\ttexture_depth_cube_array\n\t\ttexture_depth_multisampled_2d\n\t\ttexture_external\n\t\ttexture_external\n\t\tu32\n\t\t"),d=o("\n\t\tarray\n\t\tatomic\n\t\tmat2x2\n\t\tmat2x3\n\t\tmat2x4\n\t\tmat3x2\n\t\tmat3x3\n\t\tmat3x4\n\t\tmat4x2\n\t\tmat4x3\n\t\tmat4x4\n\t\tptr\n\t\ttexture_1d\n\t\ttexture_2d\n\t\ttexture_2d_array\n\t\ttexture_3d\n\t\ttexture_cube\n\t\ttexture_cube_array\n\t\ttexture_multisampled_2d\n\t\ttexture_storage_1d\n\t\ttexture_storage_2d\n\t\ttexture_storage_2d_array\n\t\ttexture_storage_3d\n\t\tvec2\n\t\tvec3\n\t\tvec4\n\t\t"),u=o("\n\t\tvec2i vec3i vec4i\n\t\tvec2u vec3u vec4u\n\t\tvec2f vec3f vec4f\n\t\tvec2h vec3h vec4h\n\t\tmat2x2f mat2x3f mat2x4f\n\t\tmat3x2f mat3x3f mat3x4f\n\t\tmat4x2f mat4x3f mat4x4f\n\t\tmat2x2h mat2x3h mat2x4h\n\t\tmat3x2h mat3x3h mat3x4h\n\t\tmat4x2h mat4x3h mat4x4h\n\t\t"),h=o("\n bitcast all any select arrayLength abs acos acosh asin asinh atan atanh atan2\n ceil clamp cos cosh countLeadingZeros countOneBits countTrailingZeros cross\n degrees determinant distance dot exp exp2 extractBits faceForward firstLeadingBit\n firstTrailingBit floor fma fract frexp inverseBits inverseSqrt ldexp length\n log log2 max min mix modf normalize pow quantizeToF16 radians reflect refract\n reverseBits round saturate sign sin sinh smoothstep sqrt step tan tanh transpose\n trunc dpdx dpdxCoarse dpdxFine dpdy dpdyCoarse dpdyFine fwidth fwidthCoarse fwidthFine\n textureDimensions textureGather textureGatherCompare textureLoad textureNumLayers\n textureNumLevels textureNumSamples textureSample textureSampleBias textureSampleCompare\n textureSampleCompareLevel textureSampleGrad textureSampleLevel textureSampleBaseClampToEdge\n textureStore atomicLoad atomicStore atomicAdd atomicSub atomicMax atomicMin\n atomicAnd atomicOr atomicXor atomicExchange atomicCompareExchangeWeak pack4x8snorm\n pack4x8unorm pack2x16snorm pack2x16unorm pack2x16float unpack4x8snorm unpack4x8unorm\n unpack2x16snorm unpack2x16unorm unpack2x16float storageBarrier workgroupBarrier\n workgroupUniformLoad\n"),g=o("\n\t\t\t\t\t &\n\t\t\t\t\t &&\n\t\t\t\t\t ->\n\t\t\t\t\t /\n\t\t\t\t\t =\n\t\t\t\t\t ==\n\t\t\t\t\t !=\n\t\t\t\t\t >\n\t\t\t\t\t >=\n\t\t\t\t\t <\n\t\t\t\t\t <=\n\t\t\t\t\t %\n\t\t\t\t\t -\n\t\t\t\t\t --\n\t\t\t\t\t +\n\t\t\t\t\t ++\n\t\t\t\t\t |\n\t\t\t\t\t ||\n\t\t\t\t\t *\n\t\t\t\t\t <<\n\t\t\t\t\t >>\n\t\t\t\t\t +=\n\t\t\t\t\t -=\n\t\t\t\t\t *=\n\t\t\t\t\t /=\n\t\t\t\t\t %=\n\t\t\t\t\t &=\n\t\t\t\t\t |=\n\t\t\t\t\t ^=\n\t\t\t\t\t >>=\n\t\t\t\t\t <<=\n\t\t\t\t\t "),p=/enable|requires|diagnostic/,f=/[_\p{XID_Start}]\p{XID_Continue}*/u,m="variable.predefined",v={tokenPostfix:".wgsl",defaultToken:"invalid",unicode:!0,atoms:s,keywords:r,reserved:a,predeclared_enums:l,predeclared_types:c,predeclared_type_generators:d,predeclared_type_aliases:u,predeclared_intrinsics:h,operators:g,symbols:/[!%&*+\-\.\/:;<=>^|_~,]+/,tokenizer:{root:[[p,"keyword","@directive"],[f,{cases:{"@atoms":m,"@keywords":"keyword","@reserved":"invalid","@predeclared_enums":m,"@predeclared_types":m,"@predeclared_type_generators":m,"@predeclared_type_aliases":m,"@predeclared_intrinsics":m,"@default":"identifier"}}],{include:"@commentOrSpace"},{include:"@numbers"},[/[{}()\[\]]/,"@brackets"],["@","annotation","@attribute"],[/@symbols/,{cases:{"@operators":"operator","@default":"delimiter"}}],[/./,"invalid"]],commentOrSpace:[[/\s+/,"white"],[/\/\*/,"comment","@blockComment"],[/\/\/.*$/,"comment"]],blockComment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@push"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],attribute:[{include:"@commentOrSpace"},[/\w+/,"annotation","@pop"]],directive:[{include:"@commentOrSpace"},[/[()]/,"@brackets"],[/,/,"delimiter"],[f,"meta.content"],[/;/,"delimiter","@pop"]],numbers:[[/0[fh]/,"number.float"],[/[1-9][0-9]*[fh]/,"number.float"],[/[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[fh]?/,"number.float"],[/[0-9]+\.[0-9]*([eE][+-]?[0-9]+)?[fh]?/,"number.float"],[/[0-9]+[eE][+-]?[0-9]+[fh]?/,"number.float"],[/0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+(?:[pP][+-]?[0-9]+[fh]?)?/,"number.hex"],[/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*(?:[pP][+-]?[0-9]+[fh]?)?/,"number.hex"],[/0[xX][0-9a-fA-F]+[pP][+-]?[0-9]+[fh]?/,"number.hex"],[/0[xX][0-9a-fA-F]+[iu]?/,"number.hex"],[/[1-9][0-9]*[iu]?/,"number"],[/0[iu]?/,"number"]]}}},98955:(e,t,i)=>{"use strict";i.r(t),i.d(t,{conf:()=>u,language:()=>h});var n=i(78270),o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,l=(e,t,i,n)=>{if(t&&"object"===typeof t||"function"===typeof t)for(let l of r(t))a.call(e,l)||l===i||o(e,l,{get:()=>t[l],enumerable:!(n=s(t,l))||n.enumerable});return e},c=(e,t,i)=>(l(e,t,"default"),i&&l(i,t,"default")),d={}; -/*!----------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Version: 0.45.0(5e5af013f8d295555a7210df0d5f2cea0bf5dd56) - * Released under the MIT license - * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt - *-----------------------------------------------------------------------------*/c(d,n);var u={comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["<",">"]],autoClosingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],surroundingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],onEnterRules:[{beforeText:new RegExp("<([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:d.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:d.languages.IndentAction.Indent}}]},h={defaultToken:"",tokenPostfix:".xml",ignoreCase:!0,qualifiedName:/(?:[\w\.\-]+:)?[\w\.\-]+/,tokenizer:{root:[[/[^<&]+/,""],{include:"@whitespace"},[/(<)(@qualifiedName)/,[{token:"delimiter"},{token:"tag",next:"@tag"}]],[/(<\/)(@qualifiedName)(\s*)(>)/,[{token:"delimiter"},{token:"tag"},"",{token:"delimiter"}]],[/(<\?)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/(<\!)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/<\!\[CDATA\[/,{token:"delimiter.cdata",next:"@cdata"}],[/&\w+;/,"string.escape"]],cdata:[[/[^\]]+/,""],[/\]\]>/,{token:"delimiter.cdata",next:"@pop"}],[/\]/,""]],tag:[[/[ \t\r\n]+/,""],[/(@qualifiedName)(\s*=\s*)("[^"]*"|'[^']*')/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">?\/]*|'[^'>?\/]*)(?=[\?\/]\>)/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">]*|'[^'>]*)/,["attribute.name","","attribute.value"]],[/@qualifiedName/,"attribute.name"],[/\?>/,{token:"delimiter",next:"@pop"}],[/(\/)(>)/,[{token:"tag"},{token:"delimiter",next:"@pop"}]],[/>/,{token:"delimiter",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[//,{token:"comment",next:"@pop"}],[/
    for i := 0; i < 3; i++ { @@ -47,6 +48,7 @@ func scheduledTaskStatusToIcon(taskStatus valueObject.ScheduledTaskStatus) strin templ ScheduledTasksPopover( scheduledTasksEntities []entity.ScheduledTask, ) { +
    @@ -169,7 +171,7 @@ templ ScheduledTasksPopover( hx-vals={ "{\"taskId\": " + scheduledTask.Id.String() + ", \"status\": \"pending\"}" } hx-trigger="click" hx-swap="none" - @click="$dispatch('refresh:footer')" + @click="$store.main.refreshFooter()" class="rounded-md border-none bg-amber-700 bg-opacity-60 px-2 py-1 text-center text-sm font-bold lowercase leading-none hover:bg-opacity-80" > @@ -189,9 +191,15 @@ templ ScheduledTasksPopover( } templ ResourceUsageProgressBar(usageRate uint8, usageLabel, tooltipText, icon string) { +
    - @componentMisc.ProgressBar(usageRate, usageLabel) + @componentMisc.ProgressBar(componentMisc.ProgressBarInputDto{ + ComponentColor: "os-300", + CompletionRate: usageRate, + Label: usageLabel, + LabelBackgroundColor: "os-700", + })
    { tooltipText }
    @@ -205,11 +213,12 @@ templ Footer(