diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml deleted file mode 100644 index 36d0ca1..0000000 --- a/.github/workflows/docker-image.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Build Docker Image - -on: - release: - types: - - published - -jobs: - docker: - runs-on: ubuntu-latest - steps: - - - name: Set up labels - id: meta - uses: docker/metadata-action@v4 - with: - tags: | - bryntum/pdf-export-server:${{ github.event.release.tag_name }} - bryntum/pdf-export-server:latest - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to DockerHub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v3 - with: - push: true - tags: ${{ steps.meta.output.tags }} diff --git a/.github/workflows/docker-test.js.yml b/.github/workflows/docker-test.js.yml new file mode 100644 index 0000000..a8f9451 --- /dev/null +++ b/.github/workflows/docker-test.js.yml @@ -0,0 +1,37 @@ +# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Build docker image + +on: + push: + paths: + - 'src/**' + - '__tests__/**' + - 'package.json' + - 'Dockerfile' + - 'app.config.js' + - 'babel.config.js' + - '.puppeteerrc.cjs' + branches: [ main ] + pull_request: + paths: + - 'src/**' + - '__tests__/**' + - 'package.json' + - 'Dockerfile' + - 'app.config.js' + - 'babel.config.js' + - '.puppeteerrc.cjs' + branches: [ main ] + +permissions: + contents: read + +jobs: + build-docker: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Build the Docker image + run: docker build . --file Dockerfile \ No newline at end of file diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 9a91e43..6ac6eff 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -24,7 +24,8 @@ jobs: strategy: matrix: - node-version: [14.x, 16.x] + # MuhammaraJS does not have pre-built binaries for Node 25, skip this version for now, though docker uses it + node-version: [20.x, 24.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..2f7b074 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,141 @@ +name: Release + +on: + workflow_dispatch: + inputs: + version_bump: + description: 'Version bump type' + required: true + type: choice + options: + - patch + - minor + - major + prerelease: + description: 'Mark as pre-release' + required: false + type: boolean + default: false + +jobs: + release: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Bump version (local only) + id: bump + run: | + # Get current version + CURRENT_VERSION=$(node -p "require('./package.json').version") + echo "Current version: $CURRENT_VERSION" + + # Bump version using npm (doesn't create git tag) + npm version ${{ inputs.version_bump }} --no-git-tag-version + + # Update package-lock.json + npm install --package-lock-only --ignore-scripts + + # Get new version + NEW_VERSION=$(node -p "require('./package.json').version") + echo "New version: $NEW_VERSION" + + # Set outputs + echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT + echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT + echo "tag=v$NEW_VERSION" >> $GITHUB_OUTPUT + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push Docker image (includes tests) + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: | + bryntum/pdf-export-server:${{ steps.bump.outputs.new_version }} + bryntum/pdf-export-server:latest + cache-from: type=gha + cache-to: type=gha,mode=max + + # Only commit/tag/release if Docker build succeeded + - name: Configure Git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Commit version bump + run: | + git add package.json package-lock.json + git commit -m "chore: bump version to ${{ steps.bump.outputs.new_version }}" + git push + + - name: Create and push tag + run: | + git tag ${{ steps.bump.outputs.tag }} + git push origin ${{ steps.bump.outputs.tag }} + + - name: Generate release notes + id: release_notes + run: | + # Get commits since last tag (exclude the version bump commit) + LAST_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") + + if [ -n "$LAST_TAG" ]; then + echo "Generating notes from $LAST_TAG to HEAD^" + COMMITS=$(git log $LAST_TAG..HEAD^ --pretty=format:"- %s (%h)" --no-merges) + else + echo "No previous tag found, using recent commits" + COMMITS=$(git log -20 --pretty=format:"- %s (%h)" --no-merges | grep -v "chore: bump version" || true) + fi + + # Create release notes + NOTES="## What's Changed + + $COMMITS + + **Full Changelog**: https://github.com/${{ github.repository }}/compare/$LAST_TAG...${{ steps.bump.outputs.tag }}" + + # Save to file for the release step + echo "$NOTES" > release_notes.md + cat release_notes.md + + - name: Create GitHub Release + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ steps.bump.outputs.tag }} + name: ${{ steps.bump.outputs.tag }} + body_path: release_notes.md + prerelease: ${{ inputs.prerelease }} + generate_release_notes: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Summary + run: | + echo "## Release Summary" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "- **Previous version:** ${{ steps.bump.outputs.current_version }}" >> $GITHUB_STEP_SUMMARY + echo "- **New version:** ${{ steps.bump.outputs.new_version }}" >> $GITHUB_STEP_SUMMARY + echo "- **Tag:** ${{ steps.bump.outputs.tag }}" >> $GITHUB_STEP_SUMMARY + echo "- **Pre-release:** ${{ inputs.prerelease }}" >> $GITHUB_STEP_SUMMARY + echo "- **Docker image:** bryntum/pdf-export-server:${{ steps.bump.outputs.new_version }}" >> $GITHUB_STEP_SUMMARY diff --git a/.gitignore b/.gitignore index 68845ec..32d7b8d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,14 @@ .idea +.claude +dist +dist/ cert cert/ log log/ tmp tmp/ -bin/linux -bin/win -bin/mac node_modules/ !log/config.json !.gitkeep diff --git a/.puppeteerrc.cjs b/.puppeteerrc.cjs new file mode 100644 index 0000000..dac0796 --- /dev/null +++ b/.puppeteerrc.cjs @@ -0,0 +1,9 @@ +/** + * Puppeteer configuration + * @see https://pptr.dev/guides/configuration + */ +module.exports = { + // Use Chrome for Testing (has arm64 macOS builds since Chrome 115+) + // This is the default in puppeteer v21+ + defaultProduct: 'chrome' +}; diff --git a/.run/Build pdf image amd64.run.xml b/.run/Build pdf image amd64.run.xml new file mode 100644 index 0000000..e486cc6 --- /dev/null +++ b/.run/Build pdf image amd64.run.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f45451c..fffbd61 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,34 +1,25 @@ -# Based on https://developers.google.com/web/tools/puppeteer/troubleshooting#running_puppeteer_in_docker +# Based on https://pptr.dev/troubleshooting#running-puppeteer-in-docker -FROM node:16.15.0 +FROM node:24-slim +# Install system dependencies required for Chromium/Chrome to run +# Puppeteer will download its own browser during npm install RUN apt-get update \ - && apt-get install -y wget gnupg ca-certificates \ - && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ - && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ - && apt-get update \ - # Chrome installation is required to get system dependencies. Puppeteer will download required version on its own. - && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf --no-install-recommends \ -# https://techoverflow.net/2018/06/05/how-to-fix-puppetteer-error-while-loading-shared-libraries-libx11-xcb-so-1-cannot-open-shared-object-file-no-such-file-or-directory/ \ - gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 \ - libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \ - libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 \ - libnss3 lsb-release xdg-utils \ + && apt-get install -y --no-install-recommends \ + # Build tools for native modules + build-essential python3 make gcc g++ \ + # Chromium dependencies + ca-certificates fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 \ + libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 \ + libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 \ + libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \ + libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 \ + libxss1 libxtst6 lsb-release xdg-utils wget \ + # Fonts for international character support + fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \ && rm -rf /var/lib/apt/lists/* -# If running Docker >= 1.13.0 use docker run's --init arg to reap zombie processes, otherwise -# uncomment the following lines to have `dumb-init` as PID 1 -# ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init -# RUN chmod +x /usr/local/bin/dumb-init -# ENTRYPOINT ["dumb-init", "--"] - -# Uncomment to skip the chromium download when installing puppeteer. If you do, -# you'll need to launch puppeteer with: -# browser.launch({executablePath: 'google-chrome-stable'}) -# ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true - -# Install puppeteer so it's available in the container. -# Add user so we don't need --no-sandbox. +# Add user so we don't need --no-sandbox RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \ && mkdir -p /home/pptruser/log \ && mkdir /home/pptruser/cert \ @@ -41,15 +32,25 @@ RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \ # Run everything after as non-privileged user. USER pptruser -COPY --chown=pptruser:pptruser ["src/", "/home/pptruser/src/"] -COPY --chown=pptruser:pptruser ["app.config.js", "package.json", "/home/pptruser/"] +COPY --chown=pptruser:pptruser ["package.json", "/home/pptruser/"] WORKDIR /home/pptruser +# MuhammaraJS installs fixed dependency to tar 7.5.7 which fails security audit. Can be simplified to `npm i` after +# this issue is fixed: https://github.com/julianhille/MuhammaraJS/issues/500 +# Run install to get muhammara +RUN npm i +# Install packages to muhammara submodule to get updated tar package +RUN (cd node_modules/muhammara && rm -rf node_modules package-lock.json && npm i) +# Run install again to update lock file RUN npm i +COPY --chown=pptruser:pptruser src /home/pptruser/src +COPY --chown=pptruser:pptruser __tests__ /home/pptruser/__tests__ +COPY --chown=pptruser:pptruser ["app.config.js", ".puppeteerrc.cjs", "babel.config.js", "/home/pptruser/"] + +RUN npm run test + EXPOSE 8080 8081 ENTRYPOINT [ "node", "./src/server.js", "-H", "8081" ] - -CMD ["bash"] diff --git a/README.md b/README.md index b8e02ea..ef54ac9 100644 --- a/README.md +++ b/README.md @@ -1,126 +1,112 @@ -# Standalone export server +# PDF export server -This package contains the sources for an executable service which builds PDF and PNG files out of HTML fragments. +This repository contains sources for a server which builds PDF and PNG files out of HTML fragments. +Server is designed to work with [Bryntum PDF Export feature](https://bryntum.com/products/grid/docs/api/Grid/feature/export/PdfExport). +See compatibility table between Export server and other Bryntum products in this [table](docs/compatibility.md). +Live demos available here: +- [Gantt](https://bryntum.com/products/gantt/examples/export/) +- [Scheduler](https://bryntum.com/products/scheduler/examples/export/) +- [Grid](https://bryntum.com/products/grid/examples/export/) + +#### Features - Uses headless chromium browser. -- Easy OS (Linux, Windows, Mac) independent build/install into binary or runnable as NodeJS instance. +- Runnable as NodeJS instance. +- Docker container available at [Docker Hub](https://hub.docker.com/r/bryntum/pdf-export-server) +- Can be assembled to a single executable file - Written in JavaScript and fully adaptable. -- Can be used as standalone service or as an intermediary between your (C#, Java, PHP) frontend and backend. Just catch -the HTML fragments, call the service and serve the binary. - -## Compatibility +- Can be used as standalone service or as an intermediary between your (C#, Java, PHP) frontend and backend. -| pdf-export-server | ExtScheduler/ExtGantt | Bryntum Grid/Scheduler/Gantt | -|---|---|---| -| 1.0.0 | * | * | +## Getting started -## Usage +### Using NodeJS -To start PDF export server you only need to install packages and run a node command: +Supported Node versions: +``` +1.0.0+: Node >=8 <14 +2.0.0+: Node >= 20 +``` +1. Check out this repository +```shell +git clone git@github.com:bryntum/pdf-export-server.git +cd pdf-export-server +``` +2. Install packages ```shell pdf-export-server$ npm i -pdf-export-server$ node ./src/server.js +``` +3. Start the server +```shell +pdf-export-server$ npm run start Access-Control-Allow-Origin: * Http server started on port 8080 ``` - +Multiple configuration options are available as you can see in the [configuration](docs/configuration.md) guide. + -## Configuration +### Using image from Docker Hub -You can specify application options in the app.config.js or by passing them from the CLI. +For your convenience we have pre-built container available on +[Docker Hub](https://hub.docker.com/r/bryntum/pdf-export-server). +1. Pull it ```shell -pdf-export-server$ node ./src/server.js --help - -Usage: ./server [OPTION] - - -h, --http=PORT Start http server on port - -H, --https=PORT Start https server on port - -c, --cors=HOST CORS origin, default value "*". Set to "false" to disable CORS - -m, --maximum=SIZE Maximum upload size (default 50mb) - -r, --resources=PATH The absolute path to the resource directory. This path will be accessible via the webserver - --max-workers=WORKERS Maximum amount of workers (puppeteer instances) (default: 5) - --level=LEVEL Specify log level (error, warn, verbose). Default "error" - --timeout=TIMEOUT Request timeout time in seconds - --quick Provide to only wait for page load event - --no-sandbox Provide to pass no-sandbox argument to chromium - --no-config Provide to ignore app.config.js - --verbose Alias for --level=verbose - --help Show help message +docker pull bryntum/pdf-export-server ``` - -The following command starts a server with HTTP and HTTPS on ports 8080 and 8081 respectively: - +2. Create `docker-compose.yml` and configure image/port forwarding +```yaml +version: "3.9" +services: + web: + image: "bryntum/pdf-export-server:latest" + ports: + - "8080:8080" +``` +3. Start container ```shell -pdf-export-server$ node ./src/server.js -h 8080 -H 8081 -m 100mb +docker compose -f docker-compose.yml up ``` -The flag -m above extends the upload capacity to 100 MB. +You can also build image from source as described in the [Docker guide](docs/docker.md) -##### Workers +## Building Executable -To speed up the export we parallelize it using puppeteer instances (workers). It is slower than using tabs, but much -easier to restart the export if browser or tab fails. By default, there are 5 workers which feel fine on machines with -as much as 1 GB RAM. In general, it takes about 2-3 seconds to generate one PDF page, depending on network speed and -overall system performance. Workers amount is not limited. +To create a standalone executable file for the PDF Export Server, follow the detailed instructions provided in +the [Building executable guide](docs/building.md). This process ensures that the server can run independently without +needing a Node.js environment. -##### Resources - -When sending HTML fragments to the server, the server launches puppeteer and tries to generate PDF-files based on the -provided input. In case the CSS stylesheets are not accessible to the server (for example the resources are protected -by a login session), you can make use of the built-in web-server to serve resources. +### Steps to Build -In this case configure the export feature with `translateURLsToAbsolute`. +1. **Install Prerequisites** + - Ensure you have the required Node.js version (as mentioned in the [Getting Started](#using-nodejs) section). + - Make sure all dependencies are installed: + ```shell + npm i + ``` -```javascript -new Grid({ - features : { - pdfExport : { - exportServer : 'http://export-host:8081', - translateURLsToAbsolute : 'http://export-host:8081/resources' - } - } -}) -``` - -This tells the export plugin to change all the used stylesheet URLs to be fetched from -`http://export-host:8081/resources`. Then copy all the resources your application uses to the export server keeping the -folder hierarchy. After this map the virtual `http://export-host:8081/resources` to the real folder on your export -server: - -```shell -pdf-export-server$ node ./src/server.js -r /web/application/styles -``` - -The path can be either absolute (`/web/application/styles`) or relative (`web/application/styles`), -for example when you start the export server with the export demo locally. +2. **Run the Build Command** + Execute the following command to create the executable: + ```shell + npm run build + ``` -So if you're running the export demo from the localhost, for example `http://lh/bryntum-suite/grid/examples/export/`, -you need to copy the folders starting from the `bryntum-suite` to the `examples/_shared/server/web/application/styles`, -keeping only resources the demo uses (css files, fonts etc.). - -##### Security - -Be careful which folder to set open with the -r option; php, aspx/cs, config files won't be interpreted but served as -download when hit. Only point folders which contain resources needed for generating the page, like fonts, CSS or image -files. +3. **Run the Executable** + Once the executable is built, you can launch the server directly without any external dependencies: + ```shell + ./dist/pdf-export-server* + ``` ## Links - [Architecture](docs/architecture.md) - [Server protocol](docs/protocol.md) - [Building executable](docs/building.md) - [Docker](docs/docker.md) +- [Compatibility table](docs/compatibility.md) +- [Configuration options](docs/configuration.md) +- [Troubleshooting](docs/troubleshooting.md) ## FAQ -### Exported PDF/PNG doesn't look correct - -Most likely server couldn't get access to the resources. See [architecture](docs/architecture.md) guide for detailed -information or [resources section](#CORS) for short summary. - -### Cannot export using HTTPS - -You can see errors like `NET::ERR_CERT_AUTHORITY_INVALID` or CORS exception (in Firefox). See - [Make browser to accept self-signed certificate](#self-signed-certificate) section for more info. +Please refer to the [FAQ](docs/faq.md) for common questions and issues. diff --git a/__tests__/assertions.js b/__tests__/assertions.js index 1723ce1..d84066e 100644 --- a/__tests__/assertions.js +++ b/__tests__/assertions.js @@ -2,16 +2,58 @@ const path = require('path'); const fs = require('fs'); const http = require('http'); const https = require('https'); -const testDataPDF = require('./samples/smoke/base_https.pdf.json'); -const testDataPNG = require('./samples/smoke/base_https.png.json'); -const { getTmpFilePath, assertImage } = require('./utils.js'); +const { getTmpFilePath, RESOURCES_PORT } = require('./utils.js'); + +const testPageHTML = fs.readFileSync(path.join(__dirname, 'samples/smoke/base.html'), 'utf-8'); +const commonTestData = { + // Navigate to this URL to fix web security issues + clientURL : 'http://localhost:{port}/resources/build/grid.css', + orientation : 'portrait', + // This is calculated canvas size for the HTML being rendered + format : '1120*2389', + fileName : 'base_https', + sendAsBinary : true +} +const testDataPDF = { + ...commonTestData, + html : [{ html : testPageHTML }], + fileFormat : 'pdf' +} +const testDataPNG = { + ...commonTestData, + html : [{ html : testPageHTML }], + fileFormat : 'png' +} // https://github.com/request/request/issues/418#issuecomment-274105600 // Allow self-signed certificates https.globalAgent.options.rejectUnauthorized = false; +/** + * @param {String} json + * @param {'http'|'https'} protocol + * @param {'pdf'|'png'} fileFormat + * @param {String} host + * @param {Number} port + * @param {Number} timeout + * @returns {Promise} + */ async function getFile(json, protocol, fileFormat, host, port, timeout) { + json = json.replace(/{port}/g, String(RESOURCES_PORT)); + + // Default timeout: 30 seconds for CI environments + const requestTimeout = timeout != null ? timeout : 30000; + return new Promise((resolve, reject) => { + let settled = false; + + const settle = (fn, value) => { + if (!settled) { + settled = true; + fn(value); + } + }; + const request = (protocol === 'http' ? http : https).request({ hostname : host, port : port, @@ -20,7 +62,7 @@ async function getFile(json, protocol, fileFormat, host, port, timeout) { 'Content-Type' : 'application/json', 'Content-Length' : Buffer.byteLength(json) }, - timeout : timeout != null ? timeout : undefined + timeout : requestTimeout }, response => { const chunks = []; response.on('data', function(data) { @@ -30,22 +72,25 @@ async function getFile(json, protocol, fileFormat, host, port, timeout) { const result = Buffer.concat(chunks); if (response.statusCode === 200) { - // fs.writeFileSync(path.join(__dirname, `test.${fileFormat}`), result); - resolve(result); + settle(resolve, result); } else if (/application\/json/.test(response.headers['content-type'])) { - reject(new Error(result.toString())); + settle(reject, new Error(result.toString())); } else { - reject('Request ended unexpectedly'); + settle(reject, new Error('Request ended unexpectedly')); } }); }); request.on('timeout', () => { - request.abort(); + request.destroy(); + settle(reject, new Error('timeout')); + }); - reject(new Error('timeout')); + // Handle errors to prevent unhandled 'error' events after timeout/destroy + request.on('error', (error) => { + settle(reject, error); }); request.write(json); @@ -53,37 +98,47 @@ async function getFile(json, protocol, fileFormat, host, port, timeout) { }); } -async function assertExportedFile({ protocol, host, port, fileFormat }) { +async function assertExportedFile({ protocol, host, port, fileFormat, timeout }) { const json = JSON.stringify(fileFormat === 'pdf' ? testDataPDF : testDataPNG); - const exportedFile = await getFile(json, protocol, fileFormat, host, port); - - let result = false; - - if (fileFormat === 'png') { - result = await assertImage(path.join(__dirname, 'samples', 'smoke', 'base_https.png'), exportedFile); - } - else { - let baseSize = fs.statSync(path.join(__dirname, 'samples', 'smoke', `base_https.pdf`)).size; + const exportedFile = await getFile(json, protocol, fileFormat, host, port, timeout); - const gotSize = Math.abs(baseSize - exportedFile.length); - const expectedSize = baseSize * 0.05; + let baseSize = fs.statSync(path.join(process.cwd(), '__tests__', 'samples', 'smoke', `base_https.${fileFormat}`)).size; - if (gotSize > expectedSize) { - const tmpFilePath = getTmpFilePath(fileFormat); + const gotSize = Math.abs(baseSize - exportedFile.length); + const expectedSize = baseSize * 0.05; - fs.writeFileSync(tmpFilePath, exportedFile); + if (gotSize > expectedSize) { + const tmpFilePath = getTmpFilePath(fileFormat); - fail(`${fileFormat} length differs very much from expected.\nCheck exported file here: ${tmpFilePath}`); - } + fs.writeFileSync(tmpFilePath, exportedFile); - expect(gotSize).toBeLessThanOrEqual(expectedSize); + fail(`${fileFormat} length differs very much from expected.\nCheck exported file here: ${tmpFilePath}`); } - return result; + expect(gotSize).toBeLessThanOrEqual(expectedSize); +} + +async function waitForWithTimeout(promise, timeout) { + let timeoutId; + + return Promise.race([ + promise.then( + (result) => { + clearTimeout(timeoutId); + return result; + } + ), + new Promise((_, reject) => { + timeoutId = setTimeout(() => { + reject(new Error(`Promise timed out after ${timeout}ms.`)); + }, timeout); + }) + ]); } module.exports = { getFile, - assertExportedFile + assertExportedFile, + waitForWithTimeout }; diff --git a/__tests__/e2e/http.test.js b/__tests__/e2e/http.test.js new file mode 100644 index 0000000..10d6a8f --- /dev/null +++ b/__tests__/e2e/http.test.js @@ -0,0 +1,82 @@ +/** + * E2E tests for HTTP connectivity. + * These tests verify that the HTTP server correctly receives requests and returns responses. + * Most export logic testing is done in queue tests which are faster. + */ +const fs = require('fs'); +const path = require('path'); +const { startServer, stopServer, getLoggerConfig, getPort, certExists } = require('../utils.js'); +const { assertExportedFile } = require('../assertions.js'); + +jest.setTimeout(60 * 1000); + +let server; + +afterEach(() => { + if (server) { + return stopServer(server).then(() => server = null); + } +}); + +describe('E2E HTTP Export', () => { + test('Should accept POST request and return PDF', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + logger : getLoggerConfig('e2e_http_pdf') + }); + + await assertExportedFile({ + fileFormat : 'pdf', + host : 'localhost', + protocol : 'http', + port : server.httpPort + }); + }); + + test('Should accept POST request and return PNG', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + logger : getLoggerConfig('e2e_http_png') + }); + + await assertExportedFile({ + fileFormat : 'png', + host : 'localhost', + protocol : 'http', + port : server.httpPort + }); + }); +}); + +describe('E2E HTTPS Export', () => { + if (certExists) { + test('Should accept POST request over HTTPS', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'https', + port, + workers : 1, + logger : getLoggerConfig('e2e_https_pdf') + }); + + await assertExportedFile({ + fileFormat : 'pdf', + host : 'localhost', + protocol : 'https', + port : server.httpsPort + }); + }); + } + else { + test('Cert is not found, skipping HTTPS tests', () => {}); + } +}); diff --git a/__tests__/e2e/websocket.test.js b/__tests__/e2e/websocket.test.js new file mode 100644 index 0000000..1c3cc25 --- /dev/null +++ b/__tests__/e2e/websocket.test.js @@ -0,0 +1,175 @@ +/** + * E2E tests for WebSocket connectivity. + * These tests verify that the WebSocket server correctly handles connections and export requests. + */ +const fs = require('fs'); +const path = require('path'); +const WebSocket = require('ws'); +const { startServer, stopServer, getLoggerConfig, getPort } = require('../utils.js'); + +jest.setTimeout(60 * 1000); + +// E2E tests use {port} placeholder - replaced with actual server port when sending request +const testPageHTML = fs.readFileSync(path.join(__dirname, '../samples/smoke/base.html'), 'utf-8'); + +let server; + +afterEach(async () => { + if (server) { + await stopServer(server); + server = null; + } +}); + +/** + * Helper to create WebSocket connection + */ +function createWebSocketConnection(port) { + return new Promise((resolve, reject) => { + const ws = new WebSocket(`ws://localhost:${port}/`); + + ws.on('error', (error) => { + reject(new Error(`WebSocket connection failed: ${error.message}`)); + }); + + ws.on('open', () => { + resolve(ws); + }); + }); +} + +/** + * Helper to send messages and wait for response + */ +function sendAndReceive(ws, messages, expectBinary = true) { + return new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + reject(new Error('Timeout waiting for WebSocket response')); + }, 30000); + + ws.on('message', (data, isBinary) => { + clearTimeout(timeout); + if (expectBinary && isBinary) { + resolve(Buffer.from(data)); + } + else if (!expectBinary && !isBinary) { + resolve(JSON.parse(data.toString())); + } + else { + reject(new Error(`Unexpected message type: expected ${expectBinary ? 'binary' : 'text'}`)); + } + }); + + ws.on('error', (error) => { + clearTimeout(timeout); + reject(error); + }); + + // Send all messages in sequence + for (const msg of messages) { + ws.send(JSON.stringify(msg)); + } + }); +} + +describe('E2E WebSocket', () => { + test('Should establish WebSocket connection', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + websocket : true, + logger : getLoggerConfig('e2e_ws_connect') + }); + + const ws = await createWebSocketConnection(server.httpPort); + + expect(ws).toBeDefined(); + expect(ws.readyState).toBe(WebSocket.OPEN); + + ws.close(); + }); + + test('Should export PDF via WebSocket with binary response', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + websocket : true, + logger : getLoggerConfig('e2e_ws_binary') + }); + + const ws = await createWebSocketConnection(server.httpPort); + + // Replace {port} with actual server port for resource loading + const htmlWithPort = testPageHTML.replace(/{port}/g, server.httpPort); + + const exportMessage = { + fileFormat : 'pdf', + fileName : 'test', + format : 'A4', + orientation : 'portrait', + clientURL : `http://localhost:${server.httpPort}/resources/build/grid.css`, + html : [{ html : htmlWithPort }] + }; + + const doneMessage = { + done : true, + sendAsBinary : true + }; + + const response = await sendAndReceive(ws, [exportMessage, doneMessage], true); + + // Verify we received binary PDF data + expect(Buffer.isBuffer(response)).toBe(true); + expect(response.length).toBeGreaterThan(0); + expect(response.slice(0, 4).toString('utf8')).toBe('%PDF'); + + ws.close(); + }); + + test('Should export PDF via WebSocket with URL response', async () => { + const port = getPort(); + + server = await startServer({ + protocol : 'http', + port, + workers : 1, + websocket : true, + logger : getLoggerConfig('e2e_ws_url') + }); + + const ws = await createWebSocketConnection(server.httpPort); + + // Replace {port} with actual server port for resource loading + const htmlWithPort = testPageHTML.replace(/{port}/g, server.httpPort); + + const exportMessage = { + fileFormat : 'pdf', + fileName : 'test', + format : 'A4', + orientation : 'portrait', + clientURL : `http://localhost:${server.httpPort}/resources/build/grid.css`, + html : [{ html : htmlWithPort }] + }; + + const doneMessage = { + done : true, + sendAsBinary : false + }; + + const response = await sendAndReceive(ws, [exportMessage, doneMessage], false); + + // Verify we received a JSON response with URL + expect(response).toBeDefined(); + expect(response.success).toBe(true); + expect(response.url).toBeDefined(); + expect(response.url).toMatch(/^http:\/\/localhost:\d+\//); + + ws.close(); + }); +}); diff --git a/__tests__/failing_worker.test.js b/__tests__/failing_worker.test.js deleted file mode 100644 index 16e5053..0000000 --- a/__tests__/failing_worker.test.js +++ /dev/null @@ -1,49 +0,0 @@ -const testDataPDF = require('./samples/smoke/base_https.pdf.json'); -const { startServer, stopServer, getLoggerConfig } = require('./utils.js'); -const { getFile } = require('./assertions.js'); - -// We export 100 pages, takes time -jest.setTimeout(5 * 60 * 1000); - -let server; - -async function assertExportedFile({ protocol, host, port }) { - const json = JSON.stringify(testDataPDF); // using data for pnf, it has 3 pages - - // request file with timeout 20 seconds, which is more than enough - const exportedFile = await getFile(json, protocol, 'png', host, port, 20000); - - // Image received - expect(exportedFile?.length).toBeGreaterThan(1000); -} - -afterEach(() => { - if (server) { - return stopServer(server).then(() => server = null); - } -}); - -describe('Should export content with randomly failing workers', () => { - test('Should export 5 equal PNG files', async () => { - const - host = 'localhost', - protocol = 'http', - port = 8081, - workers = 4; - - server = await startServer({ protocol, port, workers, testing : true, logger : getLoggerConfig('failing_workers') }); - - try { - const promises = []; - - for (let i = 0; i < 5; i++) { - promises.push(assertExportedFile({ protocol, host, port: server.httpPort })); - } - - await Promise.all(promises); - } - catch (e) { - fail(e); - } - }); -}); diff --git a/__tests__/globalSetup.js b/__tests__/globalSetup.js new file mode 100644 index 0000000..c7f1a79 --- /dev/null +++ b/__tests__/globalSetup.js @@ -0,0 +1,9 @@ +/** + * Jest global setup - runs once before all tests. + * Starts the static resource server. + */ +const { startStaticServer } = require('./staticServer.js'); + +module.exports = async () => { + await startStaticServer(); +}; diff --git a/__tests__/globalTeardown.js b/__tests__/globalTeardown.js new file mode 100644 index 0000000..b56fa4f --- /dev/null +++ b/__tests__/globalTeardown.js @@ -0,0 +1,9 @@ +/** + * Jest global teardown - runs once after all tests. + * Stops the static resource server. + */ +const { stopStaticServer } = require('./staticServer.js'); + +module.exports = async () => { + await stopStaticServer(); +}; diff --git a/__tests__/parallel.test.js b/__tests__/parallel.test.js deleted file mode 100644 index 095d44b..0000000 --- a/__tests__/parallel.test.js +++ /dev/null @@ -1,121 +0,0 @@ -const fs = require('fs'); -const testData = require('./samples/parallel/data.json'); -const { getTmpFilePath, certExists, startServer, stopServer, getLoggerConfig } = require('./utils.js'); -const { getFile } = require('./assertions.js'); -const requestPayload = require('./samples/parallel/parallel2.json'); - -// We export 100 pages, takes time -jest.setTimeout(5 * 60 * 1000); - -let server; - -afterEach(() => { - if (server) { - return stopServer(server).then(() => server = null); - } -}); - -describe('Should export over HTTP', () => { - test('Should export tp PDF', async () => { - const - host = 'localhost', - protocol = 'http', - port = 8081, - workers = 4, - fileFormat = 'pdf'; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('parallel_http_pdf') }) - - const promises = []; - - const json = JSON.stringify(testData); - - for (let i = 0; i < 2; i++) { - promises.push(getFile(json, protocol, fileFormat, host, server.httpPort, 60000 * 2)); - } - - const exportedFiles = await Promise.all(promises); - - exportedFiles.forEach(file => { - if (file.length < 100000) { - const tmpFilePath = getTmpFilePath(fileFormat); - - fs.writeFileSync(tmpFilePath, file); - - fail(`${fileFormat} length is incorrect!\nSee exported file here: ${tmpFilePath}`); - } - - // Not clear how to compare visual result of pdf, yet - // So this is more of a sanity test, checking if returned pdf has size greater that .100KB - expect(file.length).toBeGreaterThan(100000); - }); - }); -}); - -describe('Should export over HTTPS', () => { - if (certExists) { - test('Should export tp PDF', async () => { - - }); - } - else { - test('Cert is not found, skipping tests', () => {}); - } -}); - -describe('Parallel export requests received in very specific moments should work ok', () => { - test('', async () => { - const - protocol = 'http', - port = 8081, - workers = 2; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('parallel_2') }); - - const old = server.taskQueue.runJob; - - // Create a promise which will resolve when first worker is started. At that point of time we want to process another - // request on the server. - const promise2 = new Promise(resolve => { - let overridden = false; - - server.taskQueue.runJob = function(worker, job) { - if (!overridden) { - overridden = true; - - worker.onPageCreated = function() { - // replace hook with empty one - worker.onPageCreated = () => {}; - - resolve(server.exportRequestHandler(requestPayload, 'request2')); - }; - } - old.apply(server.taskQueue, [worker, job]); - }; - }); - - const promise1 = server.exportRequestHandler(requestPayload, 'request1'); - - // Limit waiting time by 20 sec - const promises = [ - Promise.all([promise1, promise2]), - new Promise(resolve => setTimeout(() => { - resolve('timeout'); - }, 20000)) - ]; - const buffers = await Promise.race(promises); - - await Promise.allSettled(promises); - - if (buffers === 'timeout') { - fail('Request timeout'); - } - else { - // Generated files have same size - expect(buffers[0].length).toEqual(buffers[1].length); - } - - // Wait couple seconds for workers to become idle/get destroyed - await new Promise(resolve => setTimeout(resolve, 3000)); - }); -}); diff --git a/__tests__/queue/export.test.js b/__tests__/queue/export.test.js new file mode 100644 index 0000000..5fb4c5a --- /dev/null +++ b/__tests__/queue/export.test.js @@ -0,0 +1,178 @@ +const fs = require('fs'); +const path = require('path'); +const { createExportServer, stopExportServer, streamToBuffer, getLoggerConfig, getTmpFilePath, loadTestHTML, RESOURCES_PORT } = require('../utils.js'); + +jest.setTimeout(60 * 1000); + +const samplesDir = path.join(__dirname, '../samples/smoke'); +const testPageHTML = loadTestHTML(path.join(samplesDir, 'base.html')); +const baselinePDF = path.join(samplesDir, 'base_https.pdf'); +const baselinePNG = path.join(samplesDir, 'base_https.png'); + +// URL to navigate before setting content - establishes same-origin context for loading resources +const clientURL = `http://localhost:${RESOURCES_PORT}/resources/build/grid.css`; + +// Allow 5% size difference from baseline +const SIZE_THRESHOLD = 0.05; + +/** + * Assert that buffer size is within threshold of baseline file. + * If not, save the output to tmp directory for inspection. + */ +function assertSizeMatchesBaseline(buffer, baselinePath, fileFormat) { + const baseSize = fs.statSync(baselinePath).size; + const sizeDelta = Math.abs(baseSize - buffer.length); + const threshold = baseSize * SIZE_THRESHOLD; + + if (sizeDelta > threshold) { + const tmpFilePath = getTmpFilePath(fileFormat); + fs.writeFileSync(tmpFilePath, buffer); + throw new Error( + `${fileFormat.toUpperCase()} size differs from baseline.\n` + + `Expected: ~${baseSize} bytes, Got: ${buffer.length} bytes\n` + + `Delta: ${sizeDelta} (threshold: ${Math.round(threshold)})\n` + + `Exported file saved to: ${tmpFilePath}` + ); + } + + expect(sizeDelta).toBeLessThanOrEqual(threshold); +} + +let exportServer; + +afterEach(() => { + if (exportServer) { + stopExportServer(exportServer); + exportServer = null; + } +}); + +describe('Queue Export - PDF', () => { + test('Should export single page to PDF matching baseline', async () => { + exportServer = createExportServer({ + workers : 1, + logger : getLoggerConfig('queue_export_pdf') + }); + + const requestData = { + html : [{ html : testPageHTML }], + orientation : 'portrait', + format : '1120*2389', + fileFormat : 'pdf', + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-pdf-1'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PDF + expect(buffer.slice(0, 4).toString('utf8')).toBe('%PDF'); + + // Compare with baseline + assertSizeMatchesBaseline(buffer, baselinePDF, 'pdf'); + }); + + test('Should export multiple pages to PDF', async () => { + exportServer = createExportServer({ + workers : 2, + logger : getLoggerConfig('queue_export_pdf_multi') + }); + + const requestData = { + html : [ + { html : testPageHTML }, + { html : testPageHTML }, + { html : testPageHTML } + ], + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-pdf-multi'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PDF + expect(buffer.slice(0, 4).toString('utf8')).toBe('%PDF'); + + // Multi-page PDF should be larger than single-page baseline + const baseSize = fs.statSync(baselinePDF).size; + expect(buffer.length).toBeGreaterThan(baseSize); + }); +}); + +describe('Queue Export - PNG', () => { + test('Should export single page to PNG matching baseline', async () => { + exportServer = createExportServer({ + workers : 1, + logger : getLoggerConfig('queue_export_png') + }); + + const requestData = { + html : [{ html : testPageHTML }], + orientation : 'portrait', + format : '1120*2389', + fileFormat : 'png', + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-png-1'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PNG (magic bytes: 89 50 4E 47) + expect(buffer[0]).toBe(0x89); + expect(buffer.slice(1, 4).toString('utf8')).toBe('PNG'); + + // Compare with baseline + assertSizeMatchesBaseline(buffer, baselinePNG, 'png'); + }); + + test('Should export multiple pages to PNG (combined vertically)', async () => { + exportServer = createExportServer({ + workers : 2, + logger : getLoggerConfig('queue_export_png_multi') + }); + + const requestData = { + html : [ + { html : testPageHTML }, + { html : testPageHTML } + ], + orientation : 'portrait', + format : 'A4', + fileFormat : 'png', + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-png-multi'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PNG + expect(buffer[0]).toBe(0x89); + expect(buffer.slice(1, 4).toString('utf8')).toBe('PNG'); + + // Multi-page PNG should be larger than single-page baseline + const baseSize = fs.statSync(baselinePNG).size; + expect(buffer.length).toBeGreaterThan(baseSize); + }); +}); + +describe('Queue Export - Error Handling', () => { + test('Should throw error when html is missing', async () => { + exportServer = createExportServer({ + workers : 1, + logger : getLoggerConfig('queue_export_error') + }); + + const requestData = { + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf' + }; + + await expect( + exportServer.exportRequestHandler(requestData, 'test-error-1') + ).rejects.toThrow('No html fragments found'); + }); +}); diff --git a/__tests__/queue/failing_worker.test.js b/__tests__/queue/failing_worker.test.js new file mode 100644 index 0000000..02d0846 --- /dev/null +++ b/__tests__/queue/failing_worker.test.js @@ -0,0 +1,91 @@ +const path = require('path'); +const { createExportServer, stopExportServer, streamToBuffer, getLoggerConfig, loadTestHTML, RESOURCES_PORT } = require('../utils.js'); + +jest.setTimeout(5 * 60 * 1000); + +const testPageHTML = loadTestHTML(path.join(__dirname, '../samples/smoke/base.html')); + +// URL to navigate before setting content - establishes same-origin context for loading resources +const clientURL = `http://localhost:${RESOURCES_PORT}/resources/build/grid.css`; + +let exportServer; + +afterEach(() => { + if (exportServer) { + stopExportServer(exportServer); + exportServer = null; + } +}); + +describe('Queue with Randomly Failing Workers', () => { + test('Should successfully export despite random worker failures', async () => { + exportServer = createExportServer({ + workers : 4, + testing : true, // Enable random failures (40% probability) + logger : getLoggerConfig('queue_failing_worker') + }); + + const requestData = { + html : [{ html : testPageHTML }], + orientation : 'portrait', + format : '1120*2389', + fileFormat : 'png', + clientURL + }; + + // With testing mode, workers randomly fail but should eventually succeed through retries + // We run multiple exports to test the retry mechanism + const promises = []; + for (let i = 0; i < 5; i++) { + promises.push( + exportServer.exportRequestHandler(requestData, `test-failing-${i}`) + .then(stream => streamToBuffer(stream)) + .catch(() => null) // Some may fail after max retries, that's expected + ); + } + + const results = await Promise.all(promises); + + // At least some should succeed + const successfulResults = results.filter(r => r !== null); + expect(successfulResults.length).toBeGreaterThan(0); + + // Successful results should be valid PNGs + successfulResults.forEach(buffer => { + expect(buffer.length).toBeGreaterThan(0); + expect(buffer[0]).toBe(0x89); + expect(buffer.slice(1, 4).toString('utf8')).toBe('PNG'); + }); + }); + + test('Should handle multiple pages with failing workers', async () => { + exportServer = createExportServer({ + workers : 4, + testing : true, + logger : getLoggerConfig('queue_failing_worker_multi') + }); + + const requestData = { + html : [ + { html : testPageHTML }, + { html : testPageHTML }, + { html : testPageHTML } + ], + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + clientURL + }; + + // Some may fail after max retries + const result = await exportServer.exportRequestHandler(requestData, 'test-failing-multi') + .then(stream => streamToBuffer(stream)) + .catch(() => null); + + // If it succeeded, verify it's a valid PDF + if (result) { + expect(result.length).toBeGreaterThan(0); + expect(result.slice(0, 4).toString('utf8')).toBe('%PDF'); + } + }); +}); diff --git a/__tests__/queue/parallel.test.js b/__tests__/queue/parallel.test.js new file mode 100644 index 0000000..e3c9473 --- /dev/null +++ b/__tests__/queue/parallel.test.js @@ -0,0 +1,169 @@ +const fs = require('fs'); +const path = require('path'); +const { createExportServer, stopExportServer, streamToBuffer, getLoggerConfig, getTmpFilePath, loadTestHTML, RESOURCES_PORT } = require('../utils.js'); +const { waitForWithTimeout } = require('../assertions.js'); + +// We export many pages, takes time +jest.setTimeout(5 * 60 * 1000); + +const parallelSamplesDir = path.join(__dirname, '../samples/parallel'); +const smokeSamplesDir = path.join(__dirname, '../samples/smoke'); +const baselineParallelPDF = path.join(parallelSamplesDir, 'base.pdf'); + +// URL to navigate before setting content - establishes same-origin context for loading resources +const clientURL = `http://localhost:${RESOURCES_PORT}/resources/build/grid.css`; + +// Allow 5% size difference from baseline +const SIZE_THRESHOLD = 0.05; + +/** + * Assert that buffer size is within threshold of baseline file. + * If not, save the output to tmp directory for inspection. + */ +function assertSizeMatchesBaseline(buffer, baselinePath, fileFormat) { + const baseSize = fs.statSync(baselinePath).size; + const sizeDelta = Math.abs(baseSize - buffer.length); + const threshold = baseSize * SIZE_THRESHOLD; + + if (sizeDelta > threshold) { + const tmpFilePath = getTmpFilePath(fileFormat); + fs.writeFileSync(tmpFilePath, buffer); + throw new Error( + `${fileFormat.toUpperCase()} size differs from baseline.\n` + + `Expected: ~${baseSize} bytes, Got: ${buffer.length} bytes\n` + + `Delta: ${sizeDelta} (threshold: ${Math.round(threshold)})\n` + + `Exported file saved to: ${tmpFilePath}` + ); + } + + expect(sizeDelta).toBeLessThanOrEqual(threshold); +} + +let exportServer; + +afterEach(() => { + if (exportServer) { + stopExportServer(exportServer); + exportServer = null; + } +}); + +describe('Queue Parallel Export', () => { + test('Should export many pages in parallel matching baseline', async () => { + // Load HTML chunks from samples/parallel/chunks + const chunksDir = path.join(parallelSamplesDir, 'chunks'); + const chunkFiles = fs.readdirSync(chunksDir).filter(f => f.endsWith('.html')).sort(); + const htmlChunks = chunkFiles.map(file => ({ + html : loadTestHTML(path.join(chunksDir, file)) + })); + + exportServer = createExportServer({ + workers : 4, + logger : getLoggerConfig('queue_parallel') + }); + + const requestData = { + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + html : htmlChunks, + clientURL + }; + + const result = await exportServer.exportRequestHandler(requestData, 'test-parallel-1'); + const buffer = await streamToBuffer(result); + + // Verify we got a valid PDF + expect(buffer.slice(0, 4).toString('utf8')).toBe('%PDF'); + + // Compare with baseline + assertSizeMatchesBaseline(buffer, baselineParallelPDF, 'pdf'); + }); + + test('Should handle concurrent export requests', async () => { + const testPageHTML = loadTestHTML(path.join(smokeSamplesDir, 'base.html')); + + exportServer = createExportServer({ + workers : 2, + logger : getLoggerConfig('queue_parallel_concurrent') + }); + + const requestData = { + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + html : [{ html : testPageHTML }], + clientURL + }; + + // Send multiple requests concurrently + const promises = [ + exportServer.exportRequestHandler(requestData, 'concurrent-1'), + exportServer.exportRequestHandler(requestData, 'concurrent-2'), + exportServer.exportRequestHandler(requestData, 'concurrent-3') + ]; + + const results = await Promise.all(promises); + const buffers = await Promise.all(results.map(r => streamToBuffer(r))); + + // All should produce valid PDFs of similar size + buffers.forEach((buffer, i) => { + expect(buffer.length).toBeGreaterThan(0); + expect(buffer.slice(0, 4).toString('utf8')).toBe('%PDF'); + }); + + // All files should be approximately the same size + const sizes = buffers.map(b => b.length); + const avgSize = sizes.reduce((a, b) => a + b, 0) / sizes.length; + sizes.forEach(size => { + expect(Math.abs(size - avgSize)).toBeLessThan(avgSize * 0.1); + }); + }); + + test('Should handle request arriving while worker is processing', async () => { + const testPageHTML = loadTestHTML(path.join(parallelSamplesDir, 'chunks/page_1.html')); + + exportServer = createExportServer({ + workers : 2, + logger : getLoggerConfig('queue_parallel_timing') + }); + + const requestData = { + orientation : 'portrait', + format : 'A4', + fileFormat : 'pdf', + html : [{ html : testPageHTML }], + clientURL + }; + + const old = exportServer.taskQueue.runJob.bind(exportServer.taskQueue); + + // Create a promise which resolves when first worker starts processing + // At that moment, we send another request + const promise2 = new Promise(resolve => { + let overridden = false; + + exportServer.taskQueue.runJob = function(worker, job) { + if (!overridden) { + overridden = true; + + worker.onPageCreated = function() { + worker.onPageCreated = () => {}; + resolve(exportServer.exportRequestHandler(requestData, 'request2')); + }; + } + old(worker, job); + }; + }); + + const promise1 = exportServer.exportRequestHandler(requestData, 'request1'); + + const results = await waitForWithTimeout(Promise.all([promise1, promise2]), 20000); + const buffers = await Promise.all(results.map(r => streamToBuffer(r))); + + // Both should produce valid PDFs of same size + expect(buffers[0].length).toBeGreaterThan(0); + expect(buffers[1].length).toBeGreaterThan(0); + expect(buffers[0].length).toEqual(buffers[1].length); + }); +}); diff --git a/__tests__/samples/compare-tuning/1px_border.png b/__tests__/samples/compare-tuning/1px_border.png deleted file mode 100644 index 1d98562..0000000 Binary files a/__tests__/samples/compare-tuning/1px_border.png and /dev/null differ diff --git a/__tests__/samples/compare-tuning/shot_linux.png b/__tests__/samples/compare-tuning/shot_linux.png deleted file mode 100644 index 10b6e62..0000000 Binary files a/__tests__/samples/compare-tuning/shot_linux.png and /dev/null differ diff --git a/__tests__/samples/compare-tuning/shot_windows.png b/__tests__/samples/compare-tuning/shot_windows.png deleted file mode 100644 index 120be4a..0000000 Binary files a/__tests__/samples/compare-tuning/shot_windows.png and /dev/null differ diff --git a/__tests__/samples/compare-tuning/shot_windows_0-1.png b/__tests__/samples/compare-tuning/shot_windows_0-1.png deleted file mode 100644 index c3aee7b..0000000 Binary files a/__tests__/samples/compare-tuning/shot_windows_0-1.png and /dev/null differ diff --git a/__tests__/samples/fileprotocol/data.json b/__tests__/samples/fileprotocol/data.json deleted file mode 100644 index c4f8ab4..0000000 --- a/__tests__/samples/fileprotocol/data.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "html": [ - { "html" : "" } - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "pdf", - "fileName": "base_https", - "sendAsBinary": true -} diff --git a/__tests__/samples/parallel/base.pdf b/__tests__/samples/parallel/base.pdf index ba54c46..567fe2c 100644 Binary files a/__tests__/samples/parallel/base.pdf and b/__tests__/samples/parallel/base.pdf differ diff --git a/__tests__/samples/parallel/chunks/page_1.html b/__tests__/samples/parallel/chunks/page_1.html new file mode 100644 index 0000000..df72a39 --- /dev/null +++ b/__tests__/samples/parallel/chunks/page_1.html @@ -0,0 +1,1438 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 7:33 PM
+
Page: 1/4
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/parallel/chunks/page_2.html b/__tests__/samples/parallel/chunks/page_2.html new file mode 100644 index 0000000..dcb359d --- /dev/null +++ b/__tests__/samples/parallel/chunks/page_2.html @@ -0,0 +1,1477 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 7:33 PM
+
Page: 2/4
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/parallel/chunks/page_3.html b/__tests__/samples/parallel/chunks/page_3.html new file mode 100644 index 0000000..6a7045a --- /dev/null +++ b/__tests__/samples/parallel/chunks/page_3.html @@ -0,0 +1,1477 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 7:33 PM
+
Page: 3/4
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/parallel/chunks/page_4.html b/__tests__/samples/parallel/chunks/page_4.html new file mode 100644 index 0000000..93b8a61 --- /dev/null +++ b/__tests__/samples/parallel/chunks/page_4.html @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 7:33 PM
+
Page: 4/4
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/parallel/data.json b/__tests__/samples/parallel/data.json deleted file mode 100644 index 2606374..0000000 --- a/__tests__/samples/parallel/data.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "html": [ - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 1/17
#
First name
Surname
Score
Rank
Percent
1
Mike
Ewans
830
95
2
Linda
McGregor
540
15
3
Jenny
Jones
400
73
4
Linda
Taylor
490
97
5
Daniel
Wilson
900
35
6
Melissa
Johnson
850
69
7
Karen
McGregor
780
30
8
Daniel
Thomas
930
22
9
Don
Jackson
360
5
10
Don
Taylor
990
79
11
Jane
Taylor
900
51
12
Daniel
Adams
200
37
13
Jane
Brown
170
51
14
Mike
More
410
100
15
Lisa
More
510
44
16
Mary
Brown
860
2
17
David
McGregor
380
97
18
Don
Ewans
910
20
19
Adam
More
180
46
20
Linda
Adams
410
97
21
Mike
Brown
860
98
22
Don
Jones
640
18
23
Barbara
Anderson
40
33
24
Doug
Thomas
730
38
25
Doug
Wilson
410
59
26
Karen
Brown
330
75
27
Adam
Johnson
190
2
28
Adam
Jackson
860
15
29
Jenny
Williams
690
79
30
John
Miller
750
41
31
Barbara
Jackson
950
12
32
James
Smith
740
59

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 2/17
#
First name
Surname
Score
Rank
Percent
32
James
Smith
740
59
33
Doug
McGregor
540
17
34
Jane
Anderson
150
61
35
Jenny
Anderson
540
35
36
Mary
Davis
900
92
37
Karen
Ewans
420
3
38
Don
Scott
150
8
39
Adam
Miller
90
37
40
John
Jackson
290
29
41
Karen
Scott
760
74
42
Linda
Brown
870
67
43
Don
Taylor
650
73
44
John
Adams
190
86
45
Doug
Jones
10
66
46
James
Davis
860
92
47
Mike
Johnson
160
2
48
Don
Johnson
420
68
49
Jane
McGregor
250
17
50
Jane
Thomas
340
29
51
Lisa
Anderson
710
94
52
Don
Thomas
200
72
53
Doug
Jackson
640
26
54
James
Ewans
70
12
55
Jenny
Brown
260
14
56
Doug
Ewans
890
41
57
Mike
Ewans
640
95
58
Linda
McGregor
90
36
59
Jenny
Jones
390
32
60
Linda
Taylor
460
68
61
Daniel
Wilson
830
20
62
Melissa
Johnson
80
48
63
Karen
McGregor
350
19
64
Daniel
Thomas
520
75

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 3/17
#
First name
Surname
Score
Rank
Percent
64
Daniel
Thomas
520
75
65
Don
Jackson
910
54
66
Don
Taylor
780
28
67
Jane
Taylor
10
46
68
Daniel
Adams
470
6
69
Jane
Brown
720
53
70
Mike
More
740
69
71
Lisa
More
70
78
72
Mary
Brown
230
71
73
David
McGregor
40
41
74
Don
Ewans
840
14
75
Adam
More
990
24
76
Linda
Adams
950
38
77
Mike
Brown
750
13
78
Don
Jones
230
39
79
Barbara
Anderson
370
59
80
Doug
Thomas
420
28
81
Doug
Wilson
230
99
82
Karen
Brown
420
42
83
Adam
Johnson
540
41
84
Adam
Jackson
950
34
85
Jenny
Williams
760
41
86
John
Miller
70
86
87
Barbara
Jackson
660
1
88
James
Smith
970
56
89
Doug
McGregor
220
98
90
Jane
Anderson
850
54
91
Jenny
Anderson
130
81
92
Mary
Davis
640
32
93
Karen
Ewans
20
44
94
Don
Scott
490
79
95
Adam
Miller
520
17
96
John
Jackson
450
63
97
Karen
Scott
650
84

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 4/17
#
First name
Surname
Score
Rank
Percent
97
Karen
Scott
650
84
98
Linda
Brown
140
88
99
Don
Taylor
230
83
100
John
Adams
520
36
101
Doug
Jones
380
81
102
James
Davis
310
53
103
Mike
Johnson
10
77
104
Don
Johnson
390
58
105
Jane
McGregor
490
61
106
Jane
Thomas
420
9
107
Lisa
Anderson
470
41
108
Don
Thomas
390
47
109
Doug
Jackson
170
76
110
James
Ewans
610
7
111
Jenny
Brown
730
46
112
Doug
Ewans
860
47
113
Mike
Ewans
970
86
114
Linda
McGregor
440
95
115
Jenny
Jones
640
39
116
Linda
Taylor
160
45
117
Daniel
Wilson
360
46
118
Melissa
Johnson
720
98
119
Karen
McGregor
550
89
120
Daniel
Thomas
810
86
121
Don
Jackson
20
34
122
Don
Taylor
110
80
123
Jane
Taylor
800
79
124
Daniel
Adams
870
65
125
Jane
Brown
590
30
126
Mike
More
320
41
127
Lisa
More
760
90
128
Mary
Brown
670
2
129
David
McGregor
500
28

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 5/17
#
First name
Surname
Score
Rank
Percent
129
David
McGregor
500
28
130
Don
Ewans
380
15
131
Adam
More
60
57
132
Linda
Adams
800
56
133
Mike
Brown
670
8
134
Don
Jones
840
7
135
Barbara
Anderson
290
30
136
Doug
Thomas
40
40
137
Doug
Wilson
580
9
138
Karen
Brown
900
46
139
Adam
Johnson
320
70
140
Adam
Jackson
860
63
141
Jenny
Williams
530
58
142
John
Miller
810
1
143
Barbara
Jackson
990
61
144
James
Smith
920
48
145
Doug
McGregor
310
75
146
Jane
Anderson
50
44
147
Jenny
Anderson
380
91
148
Mary
Davis
530
99
149
Karen
Ewans
600
47
150
Don
Scott
150
75
151
Adam
Miller
410
22
152
John
Jackson
540
18
153
Karen
Scott
610
43
154
Linda
Brown
80
60
155
Don
Taylor
20
74
156
John
Adams
250
36
157
Doug
Jones
860
54
158
James
Davis
70
35
159
Mike
Johnson
270
46
160
Don
Johnson
850
38
161
Jane
McGregor
120
30
162
Jane
Thomas
730
77

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 6/17
#
First name
Surname
Score
Rank
Percent
162
Jane
Thomas
730
77
163
Lisa
Anderson
550
38
164
Don
Thomas
540
96
165
Doug
Jackson
450
37
166
James
Ewans
300
29
167
Jenny
Brown
930
55
168
Doug
Ewans
760
54
169
Mike
Ewans
330
37
170
Linda
McGregor
780
32
171
Jenny
Jones
870
62
172
Linda
Taylor
860
4
173
Daniel
Wilson
730
86
174
Melissa
Johnson
770
21
175
Karen
McGregor
720
41
176
Daniel
Thomas
310
46
177
Don
Jackson
930
55
178
Don
Taylor
250
17
179
Jane
Taylor
860
8
180
Daniel
Adams
450
6
181
Jane
Brown
850
59
182
Mike
More
650
84
183
Lisa
More
630
25
184
Mary
Brown
10
11
185
David
McGregor
660
88
186
Don
Ewans
980
14
187
Adam
More
540
14
188
Linda
Adams
990
86
189
Mike
Brown
320
31
190
Don
Jones
590
27
191
Barbara
Anderson
40
79
192
Doug
Thomas
20
65
193
Doug
Wilson
490
14
194
Karen
Brown
690
31

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 7/17
#
First name
Surname
Score
Rank
Percent
194
Karen
Brown
690
31
195
Adam
Johnson
950
25
196
Adam
Jackson
20
39
197
Jenny
Williams
860
65
198
John
Miller
680
100
199
Barbara
Jackson
330
98
200
James
Smith
420
76
201
Doug
McGregor
860
16
202
Jane
Anderson
520
52
203
Jenny
Anderson
150
27
204
Mary
Davis
480
41
205
Karen
Ewans
760
48
206
Don
Scott
790
1
207
Adam
Miller
0
64
208
John
Jackson
100
27
209
Karen
Scott
890
44
210
Linda
Brown
290
24
211
Don
Taylor
230
15
212
John
Adams
760
17
213
Doug
Jones
490
65
214
James
Davis
740
46
215
Mike
Johnson
560
20
216
Don
Johnson
70
91
217
Jane
McGregor
30
82
218
Jane
Thomas
990
22
219
Lisa
Anderson
330
12
220
Don
Thomas
540
46
221
Doug
Jackson
180
22
222
James
Ewans
750
12
223
Jenny
Brown
930
58
224
Doug
Ewans
530
43
225
Mike
Ewans
220
4
226
Linda
McGregor
350
19

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 8/17
#
First name
Surname
Score
Rank
Percent
226
Linda
McGregor
350
19
227
Jenny
Jones
820
42
228
Linda
Taylor
90
79
229
Daniel
Wilson
0
99
230
Melissa
Johnson
880
50
231
Karen
McGregor
70
74
232
Daniel
Thomas
210
78
233
Don
Jackson
190
54
234
Don
Taylor
540
73
235
Jane
Taylor
700
40
236
Daniel
Adams
790
77
237
Jane
Brown
550
38
238
Mike
More
770
99
239
Lisa
More
20
30
240
Mary
Brown
90
17
241
David
McGregor
890
23
242
Don
Ewans
470
38
243
Adam
More
260
89
244
Linda
Adams
150
85
245
Mike
Brown
80
95
246
Don
Jones
600
83
247
Barbara
Anderson
140
70
248
Doug
Thomas
600
21
249
Doug
Wilson
990
79
250
Karen
Brown
680
57
251
Adam
Johnson
190
55
252
Adam
Jackson
180
87
253
Jenny
Williams
610
62
254
John
Miller
570
50
255
Barbara
Jackson
260
84
256
James
Smith
50
52
257
Doug
McGregor
360
9
258
Jane
Anderson
170
86
259
Jenny
Anderson
420
9

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 9/17
#
First name
Surname
Score
Rank
Percent
259
Jenny
Anderson
420
9
260
Mary
Davis
780
69
261
Karen
Ewans
690
26
262
Don
Scott
540
46
263
Adam
Miller
90
15
264
John
Jackson
680
62
265
Karen
Scott
290
25
266
Linda
Brown
970
100
267
Don
Taylor
950
92
268
John
Adams
100
63
269
Doug
Jones
370
78
270
James
Davis
680
29
271
Mike
Johnson
620
53
272
Don
Johnson
50
87
273
Jane
McGregor
990
58
274
Jane
Thomas
40
12
275
Lisa
Anderson
500
25
276
Don
Thomas
860
64
277
Doug
Jackson
500
69
278
James
Ewans
0
42
279
Jenny
Brown
760
67
280
Doug
Ewans
810
31
281
Mike
Ewans
680
68
282
Linda
McGregor
790
3
283
Jenny
Jones
650
4
284
Linda
Taylor
510
64
285
Daniel
Wilson
690
8
286
Melissa
Johnson
110
1
287
Karen
McGregor
720
79
288
Daniel
Thomas
20
29
289
Don
Jackson
890
68
290
Don
Taylor
820
47
291
Jane
Taylor
50
29

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 10/17
#
First name
Surname
Score
Rank
Percent
291
Jane
Taylor
50
29
292
Daniel
Adams
260
7
293
Jane
Brown
660
63
294
Mike
More
740
10
295
Lisa
More
70
56
296
Mary
Brown
750
92
297
David
McGregor
770
28
298
Don
Ewans
40
31
299
Adam
More
550
6
300
Linda
Adams
890
77
301
Mike
Brown
490
19
302
Don
Jones
690
26
303
Barbara
Anderson
440
30
304
Doug
Thomas
710
3
305
Doug
Wilson
20
25
306
Karen
Brown
380
55
307
Adam
Johnson
730
61
308
Adam
Jackson
300
42
309
Jenny
Williams
520
30
310
John
Miller
700
12
311
Barbara
Jackson
220
100
312
James
Smith
990
40
313
Doug
McGregor
450
76
314
Jane
Anderson
850
97
315
Jenny
Anderson
50
48
316
Mary
Davis
960
34
317
Karen
Ewans
490
92
318
Don
Scott
260
76
319
Adam
Miller
460
3
320
John
Jackson
400
3
321
Karen
Scott
640
23
322
Linda
Brown
830
97
323
Don
Taylor
700
8

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 11/17
#
First name
Surname
Score
Rank
Percent
323
Don
Taylor
700
8
324
John
Adams
510
61
325
Doug
Jones
350
1
326
James
Davis
490
44
327
Mike
Johnson
200
100
328
Don
Johnson
30
5
329
Jane
McGregor
560
41
330
Jane
Thomas
830
13
331
Lisa
Anderson
520
70
332
Don
Thomas
920
41
333
Doug
Jackson
180
21
334
James
Ewans
250
64
335
Jenny
Brown
960
95
336
Doug
Ewans
960
44
337
Mike
Ewans
250
77
338
Linda
McGregor
240
10
339
Jenny
Jones
10
37
340
Linda
Taylor
800
73
341
Daniel
Wilson
690
32
342
Melissa
Johnson
300
91
343
Karen
McGregor
930
20
344
Daniel
Thomas
950
58
345
Don
Jackson
980
12
346
Don
Taylor
230
23
347
Jane
Taylor
80
22
348
Daniel
Adams
270
32
349
Jane
Brown
40
39
350
Mike
More
270
64
351
Lisa
More
870
80
352
Mary
Brown
490
41
353
David
McGregor
10
33
354
Don
Ewans
960
18
355
Adam
More
640
76
356
Linda
Adams
580
71

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 12/17
#
First name
Surname
Score
Rank
Percent
356
Linda
Adams
580
71
357
Mike
Brown
570
62
358
Don
Jones
500
66
359
Barbara
Anderson
620
79
360
Doug
Thomas
430
90
361
Doug
Wilson
150
45
362
Karen
Brown
120
46
363
Adam
Johnson
780
47
364
Adam
Jackson
830
39
365
Jenny
Williams
260
37
366
John
Miller
660
52
367
Barbara
Jackson
980
9
368
James
Smith
930
73
369
Doug
McGregor
50
32
370
Jane
Anderson
280
39
371
Jenny
Anderson
30
39
372
Mary
Davis
800
49
373
Karen
Ewans
360
60
374
Don
Scott
390
13
375
Adam
Miller
590
97
376
John
Jackson
790
38
377
Karen
Scott
900
41
378
Linda
Brown
470
11
379
Don
Taylor
280
27
380
John
Adams
380
57
381
Doug
Jones
370
19
382
James
Davis
520
42
383
Mike
Johnson
200
99
384
Don
Johnson
150
60
385
Jane
McGregor
170
89
386
Jane
Thomas
360
47
387
Lisa
Anderson
150
4
388
Don
Thomas
810
95

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 13/17
#
First name
Surname
Score
Rank
Percent
388
Don
Thomas
810
95
389
Doug
Jackson
260
21
390
James
Ewans
50
57
391
Jenny
Brown
230
87
392
Doug
Ewans
900
87
393
Mike
Ewans
730
7
394
Linda
McGregor
240
79
395
Jenny
Jones
550
2
396
Linda
Taylor
670
93
397
Daniel
Wilson
140
63
398
Melissa
Johnson
390
94
399
Karen
McGregor
670
7
400
Daniel
Thomas
50
28
401
Don
Jackson
210
71
402
Don
Taylor
100
24
403
Jane
Taylor
720
44
404
Daniel
Adams
600
51
405
Jane
Brown
260
48
406
Mike
More
180
43
407
Lisa
More
210
20
408
Mary
Brown
780
32
409
David
McGregor
420
52
410
Don
Ewans
540
72
411
Adam
More
950
78
412
Linda
Adams
340
65
413
Mike
Brown
720
49
414
Don
Jones
980
76
415
Barbara
Anderson
150
59
416
Doug
Thomas
960
25
417
Doug
Wilson
990
52
418
Karen
Brown
840
73
419
Adam
Johnson
520
42
420
Adam
Jackson
940
34
421
Jenny
Williams
90
81

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 14/17
#
First name
Surname
Score
Rank
Percent
421
Jenny
Williams
90
81
422
John
Miller
970
33
423
Barbara
Jackson
760
13
424
James
Smith
310
75
425
Doug
McGregor
630
71
426
Jane
Anderson
120
57
427
Jenny
Anderson
690
95
428
Mary
Davis
330
43
429
Karen
Ewans
400
34
430
Don
Scott
990
96
431
Adam
Miller
730
40
432
John
Jackson
890
22
433
Karen
Scott
980
49
434
Linda
Brown
340
71
435
Don
Taylor
900
72
436
John
Adams
610
47
437
Doug
Jones
10
67
438
James
Davis
850
1
439
Mike
Johnson
270
48
440
Don
Johnson
830
28
441
Jane
McGregor
430
26
442
Jane
Thomas
190
57
443
Lisa
Anderson
390
51
444
Don
Thomas
740
10
445
Doug
Jackson
960
5
446
James
Ewans
680
88
447
Jenny
Brown
410
36
448
Doug
Ewans
260
17
449
Mike
Ewans
500
72
450
Linda
McGregor
240
7
451
Jenny
Jones
990
28
452
Linda
Taylor
960
64
453
Daniel
Wilson
540
60

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 15/17
#
First name
Surname
Score
Rank
Percent
453
Daniel
Wilson
540
60
454
Melissa
Johnson
320
52
455
Karen
McGregor
0
63
456
Daniel
Thomas
890
92
457
Don
Jackson
580
78
458
Don
Taylor
50
12
459
Jane
Taylor
230
56
460
Daniel
Adams
530
39
461
Jane
Brown
350
92
462
Mike
More
650
67
463
Lisa
More
720
5
464
Mary
Brown
950
23
465
David
McGregor
200
74
466
Don
Ewans
720
32
467
Adam
More
820
85
468
Linda
Adams
360
47
469
Mike
Brown
930
84
470
Don
Jones
140
55
471
Barbara
Anderson
220
41
472
Doug
Thomas
440
50
473
Doug
Wilson
190
91
474
Karen
Brown
720
86
475
Adam
Johnson
210
79
476
Adam
Jackson
960
94
477
Jenny
Williams
920
37
478
John
Miller
530
100
479
Barbara
Jackson
260
91
480
James
Smith
500
21
481
Doug
McGregor
600
18
482
Jane
Anderson
760
42
483
Jenny
Anderson
650
52
484
Mary
Davis
440
87
485
Karen
Ewans
220
39

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 16/17
#
First name
Surname
Score
Rank
Percent
485
Karen
Ewans
220
39
486
Don
Scott
60
92
487
Adam
Miller
130
19
488
John
Jackson
870
42
489
Karen
Scott
800
87
490
Linda
Brown
460
65
491
Don
Taylor
270
5
492
John
Adams
610
74
493
Doug
Jones
870
42
494
James
Davis
930
34
495
Mike
Johnson
650
20
496
Don
Johnson
160
87
497
Jane
McGregor
900
70
498
Jane
Thomas
10
76
499
Lisa
Anderson
50
96
500
Don
Thomas
620
75
501
Doug
Jackson
280
55
502
James
Ewans
730
16
503
Jenny
Brown
60
55
504
Doug
Ewans
20
91
505
Mike
Ewans
950
43
506
Linda
McGregor
710
16
507
Jenny
Jones
470
10
508
Linda
Taylor
230
30
509
Daniel
Wilson
200
77
510
Melissa
Johnson
410
88
511
Karen
McGregor
320
66
512
Daniel
Thomas
840
20
513
Don
Jackson
480
2
514
Don
Taylor
300
87
515
Jane
Taylor
380
17
516
Daniel
Adams
430
43
517
Jane
Brown
20
26
518
Mike
More
430
35

© 2020 Bryntum AB

" - }, - { - "html": "
Date: Jul 9, 2022 10:07 PM
Page: 17/17
#
First name
Surname
Score
Rank
Percent
518
Mike
More
430
35
519
Lisa
More
240
72
520
Mary
Brown
180
21
521
David
McGregor
450
65
522
Don
Ewans
170
8
523
Adam
More
380
27
524
Linda
Adams
370
90
525
Mike
Brown
960
65
526
Don
Jones
530
10
527
Barbara
Anderson
90
40
528
Doug
Thomas
730
47
529
Doug
Wilson
760
84
530
Karen
Brown
690
9
531
Adam
Johnson
470
36
532
Adam
Jackson
320
53

© 2020 Bryntum AB

" - } - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "pdf", - "fileName": "Grid", - "sendAsBinary": true -} diff --git a/__tests__/samples/parallel/parallel2.json b/__tests__/samples/parallel/parallel2.json deleted file mode 100644 index 3dd9c43..0000000 --- a/__tests__/samples/parallel/parallel2.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "html": [ - { "html" : "
Date: Dec 21, 2021 11:44 AM
#
First name
Surname
Score
Rank
Percent
1
Don
Taylor
880
99
2
John
Adams
850
55
3
Doug
Jones
330
100
4
James
Davis
790
33
5
Mike
Johnson
780
60
6
Don
Johnson
640
5
7
Jane
McGregor
290
3
8
Jane
Thomas
400
50
9
Lisa
Anderson
890
70
10
Don
Thomas
10
96
11
Doug
Jackson
270
3
12
James
Ewans
140
87
13
Jenny
Brown
560
69
14
Doug
Ewans
550
34
15
Mike
Ewans
70
43
16
Linda
McGregor
60
87
17
Jenny
Jones
290
53
18
Linda
Taylor
390
16
19
Daniel
Wilson
80
49
20
Melissa
Johnson
450
77
21
Karen
McGregor
690
80
22
Daniel
Thomas
620
1
23
Don
Jackson
570
11
24
Don
Taylor
0
90
25
Jane
Taylor
600
30
26
Daniel
Adams
470
24
27
Jane
Brown
740
77
28
Mike
More
430
50
29
Lisa
More
900
75
30
Mary
Brown
980
57
31
David
McGregor
460
8
32
Don
Ewans
740
4
33
Adam
More
210
100
34
Linda
Adams
170
34
35
Mike
Brown
420
55
36
Don
Jones
590
19
37
Barbara
Anderson
730
76
38
Doug
Thomas
350
94
39
Doug
Wilson
530
54
40
Karen
Brown
340
23
41
Adam
Johnson
450
36
42
Adam
Jackson
370
83
43
Jenny
Williams
290
10
44
John
Miller
760
1
45
Barbara
Jackson
370
89
46
James
Smith
950
8
47
Doug
McGregor
360
22
48
Jane
Anderson
280
20
49
Jenny
Anderson
540
55
50
Mary
Davis
530
71

© 2020 Bryntum AB

" } - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "pdf", - "fileName": "base_https", - "sendAsBinary": true -} diff --git a/__tests__/samples/resources/build/fontawesome/css/fontawesome.css b/__tests__/samples/resources/build/fontawesome/css/fontawesome.css new file mode 100644 index 0000000..a9b2ec8 --- /dev/null +++ b/__tests__/samples/resources/build/fontawesome/css/fontawesome.css @@ -0,0 +1,6243 @@ +/*! + * Font Awesome Free 6.7.2 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 2024 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fas, +.far, +.fab, +.fa-solid, +.fa-regular, +.fa-brands, +.fa { + -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; } + +.fas::before, +.far::before, +.fab::before, +.fa-solid::before, +.fa-regular::before, +.fa-brands::before, +.fa::before { + content: var(--fa); } + +.fa-classic, +.fas, +.fa-solid, +.far, +.fa-regular { + 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: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.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(-1 * var(--fa-li-width, 2em)); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + animation-name: 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-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + animation-name: 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-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + animation-name: fa-fade; + 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-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + animation-name: fa-beat-fade; + 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-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + animation-name: 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-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + animation-name: fa-shake; + 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-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + animation-name: fa-spin; + animation-delay: var(--fa-animation-delay, 0s); + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 2s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + animation-name: fa-spin; + animation-direction: var(--fa-animation-direction, normal); + animation-duration: var(--fa-animation-duration, 1s); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-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, 1) translateY(0); } + 10% { + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + transform: scale(1, 1) translateY(0); } + 100% { + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.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); } + 8%, 24% { + 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%, 100% { + transform: rotate(0deg); } } + +@keyframes fa-spin { + 0% { + transform: rotate(0deg); } + 100% { + transform: rotate(360deg); } } + +.fa-rotate-90 { + transform: rotate(90deg); } + +.fa-rotate-180 { + transform: rotate(180deg); } + +.fa-rotate-270 { + transform: rotate(270deg); } + +.fa-flip-horizontal { + transform: scale(-1, 1); } + +.fa-flip-vertical { + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + transform: scale(-1, -1); } + +.fa-rotate-by { + transform: rotate(var(--fa-rotate-angle, 0)); } + +.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); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0 { + --fa: "\30"; } + +.fa-1 { + --fa: "\31"; } + +.fa-2 { + --fa: "\32"; } + +.fa-3 { + --fa: "\33"; } + +.fa-4 { + --fa: "\34"; } + +.fa-5 { + --fa: "\35"; } + +.fa-6 { + --fa: "\36"; } + +.fa-7 { + --fa: "\37"; } + +.fa-8 { + --fa: "\38"; } + +.fa-9 { + --fa: "\39"; } + +.fa-fill-drip { + --fa: "\f576"; } + +.fa-arrows-to-circle { + --fa: "\e4bd"; } + +.fa-circle-chevron-right { + --fa: "\f138"; } + +.fa-chevron-circle-right { + --fa: "\f138"; } + +.fa-at { + --fa: "\40"; } + +.fa-trash-can { + --fa: "\f2ed"; } + +.fa-trash-alt { + --fa: "\f2ed"; } + +.fa-text-height { + --fa: "\f034"; } + +.fa-user-xmark { + --fa: "\f235"; } + +.fa-user-times { + --fa: "\f235"; } + +.fa-stethoscope { + --fa: "\f0f1"; } + +.fa-message { + --fa: "\f27a"; } + +.fa-comment-alt { + --fa: "\f27a"; } + +.fa-info { + --fa: "\f129"; } + +.fa-down-left-and-up-right-to-center { + --fa: "\f422"; } + +.fa-compress-alt { + --fa: "\f422"; } + +.fa-explosion { + --fa: "\e4e9"; } + +.fa-file-lines { + --fa: "\f15c"; } + +.fa-file-alt { + --fa: "\f15c"; } + +.fa-file-text { + --fa: "\f15c"; } + +.fa-wave-square { + --fa: "\f83e"; } + +.fa-ring { + --fa: "\f70b"; } + +.fa-building-un { + --fa: "\e4d9"; } + +.fa-dice-three { + --fa: "\f527"; } + +.fa-calendar-days { + --fa: "\f073"; } + +.fa-calendar-alt { + --fa: "\f073"; } + +.fa-anchor-circle-check { + --fa: "\e4aa"; } + +.fa-building-circle-arrow-right { + --fa: "\e4d1"; } + +.fa-volleyball { + --fa: "\f45f"; } + +.fa-volleyball-ball { + --fa: "\f45f"; } + +.fa-arrows-up-to-line { + --fa: "\e4c2"; } + +.fa-sort-down { + --fa: "\f0dd"; } + +.fa-sort-desc { + --fa: "\f0dd"; } + +.fa-circle-minus { + --fa: "\f056"; } + +.fa-minus-circle { + --fa: "\f056"; } + +.fa-door-open { + --fa: "\f52b"; } + +.fa-right-from-bracket { + --fa: "\f2f5"; } + +.fa-sign-out-alt { + --fa: "\f2f5"; } + +.fa-atom { + --fa: "\f5d2"; } + +.fa-soap { + --fa: "\e06e"; } + +.fa-icons { + --fa: "\f86d"; } + +.fa-heart-music-camera-bolt { + --fa: "\f86d"; } + +.fa-microphone-lines-slash { + --fa: "\f539"; } + +.fa-microphone-alt-slash { + --fa: "\f539"; } + +.fa-bridge-circle-check { + --fa: "\e4c9"; } + +.fa-pump-medical { + --fa: "\e06a"; } + +.fa-fingerprint { + --fa: "\f577"; } + +.fa-hand-point-right { + --fa: "\f0a4"; } + +.fa-magnifying-glass-location { + --fa: "\f689"; } + +.fa-search-location { + --fa: "\f689"; } + +.fa-forward-step { + --fa: "\f051"; } + +.fa-step-forward { + --fa: "\f051"; } + +.fa-face-smile-beam { + --fa: "\f5b8"; } + +.fa-smile-beam { + --fa: "\f5b8"; } + +.fa-flag-checkered { + --fa: "\f11e"; } + +.fa-football { + --fa: "\f44e"; } + +.fa-football-ball { + --fa: "\f44e"; } + +.fa-school-circle-exclamation { + --fa: "\e56c"; } + +.fa-crop { + --fa: "\f125"; } + +.fa-angles-down { + --fa: "\f103"; } + +.fa-angle-double-down { + --fa: "\f103"; } + +.fa-users-rectangle { + --fa: "\e594"; } + +.fa-people-roof { + --fa: "\e537"; } + +.fa-people-line { + --fa: "\e534"; } + +.fa-beer-mug-empty { + --fa: "\f0fc"; } + +.fa-beer { + --fa: "\f0fc"; } + +.fa-diagram-predecessor { + --fa: "\e477"; } + +.fa-arrow-up-long { + --fa: "\f176"; } + +.fa-long-arrow-up { + --fa: "\f176"; } + +.fa-fire-flame-simple { + --fa: "\f46a"; } + +.fa-burn { + --fa: "\f46a"; } + +.fa-person { + --fa: "\f183"; } + +.fa-male { + --fa: "\f183"; } + +.fa-laptop { + --fa: "\f109"; } + +.fa-file-csv { + --fa: "\f6dd"; } + +.fa-menorah { + --fa: "\f676"; } + +.fa-truck-plane { + --fa: "\e58f"; } + +.fa-record-vinyl { + --fa: "\f8d9"; } + +.fa-face-grin-stars { + --fa: "\f587"; } + +.fa-grin-stars { + --fa: "\f587"; } + +.fa-bong { + --fa: "\f55c"; } + +.fa-spaghetti-monster-flying { + --fa: "\f67b"; } + +.fa-pastafarianism { + --fa: "\f67b"; } + +.fa-arrow-down-up-across-line { + --fa: "\e4af"; } + +.fa-spoon { + --fa: "\f2e5"; } + +.fa-utensil-spoon { + --fa: "\f2e5"; } + +.fa-jar-wheat { + --fa: "\e517"; } + +.fa-envelopes-bulk { + --fa: "\f674"; } + +.fa-mail-bulk { + --fa: "\f674"; } + +.fa-file-circle-exclamation { + --fa: "\e4eb"; } + +.fa-circle-h { + --fa: "\f47e"; } + +.fa-hospital-symbol { + --fa: "\f47e"; } + +.fa-pager { + --fa: "\f815"; } + +.fa-address-book { + --fa: "\f2b9"; } + +.fa-contact-book { + --fa: "\f2b9"; } + +.fa-strikethrough { + --fa: "\f0cc"; } + +.fa-k { + --fa: "\4b"; } + +.fa-landmark-flag { + --fa: "\e51c"; } + +.fa-pencil { + --fa: "\f303"; } + +.fa-pencil-alt { + --fa: "\f303"; } + +.fa-backward { + --fa: "\f04a"; } + +.fa-caret-right { + --fa: "\f0da"; } + +.fa-comments { + --fa: "\f086"; } + +.fa-paste { + --fa: "\f0ea"; } + +.fa-file-clipboard { + --fa: "\f0ea"; } + +.fa-code-pull-request { + --fa: "\e13c"; } + +.fa-clipboard-list { + --fa: "\f46d"; } + +.fa-truck-ramp-box { + --fa: "\f4de"; } + +.fa-truck-loading { + --fa: "\f4de"; } + +.fa-user-check { + --fa: "\f4fc"; } + +.fa-vial-virus { + --fa: "\e597"; } + +.fa-sheet-plastic { + --fa: "\e571"; } + +.fa-blog { + --fa: "\f781"; } + +.fa-user-ninja { + --fa: "\f504"; } + +.fa-person-arrow-up-from-line { + --fa: "\e539"; } + +.fa-scroll-torah { + --fa: "\f6a0"; } + +.fa-torah { + --fa: "\f6a0"; } + +.fa-broom-ball { + --fa: "\f458"; } + +.fa-quidditch { + --fa: "\f458"; } + +.fa-quidditch-broom-ball { + --fa: "\f458"; } + +.fa-toggle-off { + --fa: "\f204"; } + +.fa-box-archive { + --fa: "\f187"; } + +.fa-archive { + --fa: "\f187"; } + +.fa-person-drowning { + --fa: "\e545"; } + +.fa-arrow-down-9-1 { + --fa: "\f886"; } + +.fa-sort-numeric-desc { + --fa: "\f886"; } + +.fa-sort-numeric-down-alt { + --fa: "\f886"; } + +.fa-face-grin-tongue-squint { + --fa: "\f58a"; } + +.fa-grin-tongue-squint { + --fa: "\f58a"; } + +.fa-spray-can { + --fa: "\f5bd"; } + +.fa-truck-monster { + --fa: "\f63b"; } + +.fa-w { + --fa: "\57"; } + +.fa-earth-africa { + --fa: "\f57c"; } + +.fa-globe-africa { + --fa: "\f57c"; } + +.fa-rainbow { + --fa: "\f75b"; } + +.fa-circle-notch { + --fa: "\f1ce"; } + +.fa-tablet-screen-button { + --fa: "\f3fa"; } + +.fa-tablet-alt { + --fa: "\f3fa"; } + +.fa-paw { + --fa: "\f1b0"; } + +.fa-cloud { + --fa: "\f0c2"; } + +.fa-trowel-bricks { + --fa: "\e58a"; } + +.fa-face-flushed { + --fa: "\f579"; } + +.fa-flushed { + --fa: "\f579"; } + +.fa-hospital-user { + --fa: "\f80d"; } + +.fa-tent-arrow-left-right { + --fa: "\e57f"; } + +.fa-gavel { + --fa: "\f0e3"; } + +.fa-legal { + --fa: "\f0e3"; } + +.fa-binoculars { + --fa: "\f1e5"; } + +.fa-microphone-slash { + --fa: "\f131"; } + +.fa-box-tissue { + --fa: "\e05b"; } + +.fa-motorcycle { + --fa: "\f21c"; } + +.fa-bell-concierge { + --fa: "\f562"; } + +.fa-concierge-bell { + --fa: "\f562"; } + +.fa-pen-ruler { + --fa: "\f5ae"; } + +.fa-pencil-ruler { + --fa: "\f5ae"; } + +.fa-people-arrows { + --fa: "\e068"; } + +.fa-people-arrows-left-right { + --fa: "\e068"; } + +.fa-mars-and-venus-burst { + --fa: "\e523"; } + +.fa-square-caret-right { + --fa: "\f152"; } + +.fa-caret-square-right { + --fa: "\f152"; } + +.fa-scissors { + --fa: "\f0c4"; } + +.fa-cut { + --fa: "\f0c4"; } + +.fa-sun-plant-wilt { + --fa: "\e57a"; } + +.fa-toilets-portable { + --fa: "\e584"; } + +.fa-hockey-puck { + --fa: "\f453"; } + +.fa-table { + --fa: "\f0ce"; } + +.fa-magnifying-glass-arrow-right { + --fa: "\e521"; } + +.fa-tachograph-digital { + --fa: "\f566"; } + +.fa-digital-tachograph { + --fa: "\f566"; } + +.fa-users-slash { + --fa: "\e073"; } + +.fa-clover { + --fa: "\e139"; } + +.fa-reply { + --fa: "\f3e5"; } + +.fa-mail-reply { + --fa: "\f3e5"; } + +.fa-star-and-crescent { + --fa: "\f699"; } + +.fa-house-fire { + --fa: "\e50c"; } + +.fa-square-minus { + --fa: "\f146"; } + +.fa-minus-square { + --fa: "\f146"; } + +.fa-helicopter { + --fa: "\f533"; } + +.fa-compass { + --fa: "\f14e"; } + +.fa-square-caret-down { + --fa: "\f150"; } + +.fa-caret-square-down { + --fa: "\f150"; } + +.fa-file-circle-question { + --fa: "\e4ef"; } + +.fa-laptop-code { + --fa: "\f5fc"; } + +.fa-swatchbook { + --fa: "\f5c3"; } + +.fa-prescription-bottle { + --fa: "\f485"; } + +.fa-bars { + --fa: "\f0c9"; } + +.fa-navicon { + --fa: "\f0c9"; } + +.fa-people-group { + --fa: "\e533"; } + +.fa-hourglass-end { + --fa: "\f253"; } + +.fa-hourglass-3 { + --fa: "\f253"; } + +.fa-heart-crack { + --fa: "\f7a9"; } + +.fa-heart-broken { + --fa: "\f7a9"; } + +.fa-square-up-right { + --fa: "\f360"; } + +.fa-external-link-square-alt { + --fa: "\f360"; } + +.fa-face-kiss-beam { + --fa: "\f597"; } + +.fa-kiss-beam { + --fa: "\f597"; } + +.fa-film { + --fa: "\f008"; } + +.fa-ruler-horizontal { + --fa: "\f547"; } + +.fa-people-robbery { + --fa: "\e536"; } + +.fa-lightbulb { + --fa: "\f0eb"; } + +.fa-caret-left { + --fa: "\f0d9"; } + +.fa-circle-exclamation { + --fa: "\f06a"; } + +.fa-exclamation-circle { + --fa: "\f06a"; } + +.fa-school-circle-xmark { + --fa: "\e56d"; } + +.fa-arrow-right-from-bracket { + --fa: "\f08b"; } + +.fa-sign-out { + --fa: "\f08b"; } + +.fa-circle-chevron-down { + --fa: "\f13a"; } + +.fa-chevron-circle-down { + --fa: "\f13a"; } + +.fa-unlock-keyhole { + --fa: "\f13e"; } + +.fa-unlock-alt { + --fa: "\f13e"; } + +.fa-cloud-showers-heavy { + --fa: "\f740"; } + +.fa-headphones-simple { + --fa: "\f58f"; } + +.fa-headphones-alt { + --fa: "\f58f"; } + +.fa-sitemap { + --fa: "\f0e8"; } + +.fa-circle-dollar-to-slot { + --fa: "\f4b9"; } + +.fa-donate { + --fa: "\f4b9"; } + +.fa-memory { + --fa: "\f538"; } + +.fa-road-spikes { + --fa: "\e568"; } + +.fa-fire-burner { + --fa: "\e4f1"; } + +.fa-flag { + --fa: "\f024"; } + +.fa-hanukiah { + --fa: "\f6e6"; } + +.fa-feather { + --fa: "\f52d"; } + +.fa-volume-low { + --fa: "\f027"; } + +.fa-volume-down { + --fa: "\f027"; } + +.fa-comment-slash { + --fa: "\f4b3"; } + +.fa-cloud-sun-rain { + --fa: "\f743"; } + +.fa-compress { + --fa: "\f066"; } + +.fa-wheat-awn { + --fa: "\e2cd"; } + +.fa-wheat-alt { + --fa: "\e2cd"; } + +.fa-ankh { + --fa: "\f644"; } + +.fa-hands-holding-child { + --fa: "\e4fa"; } + +.fa-asterisk { + --fa: "\2a"; } + +.fa-square-check { + --fa: "\f14a"; } + +.fa-check-square { + --fa: "\f14a"; } + +.fa-peseta-sign { + --fa: "\e221"; } + +.fa-heading { + --fa: "\f1dc"; } + +.fa-header { + --fa: "\f1dc"; } + +.fa-ghost { + --fa: "\f6e2"; } + +.fa-list { + --fa: "\f03a"; } + +.fa-list-squares { + --fa: "\f03a"; } + +.fa-square-phone-flip { + --fa: "\f87b"; } + +.fa-phone-square-alt { + --fa: "\f87b"; } + +.fa-cart-plus { + --fa: "\f217"; } + +.fa-gamepad { + --fa: "\f11b"; } + +.fa-circle-dot { + --fa: "\f192"; } + +.fa-dot-circle { + --fa: "\f192"; } + +.fa-face-dizzy { + --fa: "\f567"; } + +.fa-dizzy { + --fa: "\f567"; } + +.fa-egg { + --fa: "\f7fb"; } + +.fa-house-medical-circle-xmark { + --fa: "\e513"; } + +.fa-campground { + --fa: "\f6bb"; } + +.fa-folder-plus { + --fa: "\f65e"; } + +.fa-futbol { + --fa: "\f1e3"; } + +.fa-futbol-ball { + --fa: "\f1e3"; } + +.fa-soccer-ball { + --fa: "\f1e3"; } + +.fa-paintbrush { + --fa: "\f1fc"; } + +.fa-paint-brush { + --fa: "\f1fc"; } + +.fa-lock { + --fa: "\f023"; } + +.fa-gas-pump { + --fa: "\f52f"; } + +.fa-hot-tub-person { + --fa: "\f593"; } + +.fa-hot-tub { + --fa: "\f593"; } + +.fa-map-location { + --fa: "\f59f"; } + +.fa-map-marked { + --fa: "\f59f"; } + +.fa-house-flood-water { + --fa: "\e50e"; } + +.fa-tree { + --fa: "\f1bb"; } + +.fa-bridge-lock { + --fa: "\e4cc"; } + +.fa-sack-dollar { + --fa: "\f81d"; } + +.fa-pen-to-square { + --fa: "\f044"; } + +.fa-edit { + --fa: "\f044"; } + +.fa-car-side { + --fa: "\f5e4"; } + +.fa-share-nodes { + --fa: "\f1e0"; } + +.fa-share-alt { + --fa: "\f1e0"; } + +.fa-heart-circle-minus { + --fa: "\e4ff"; } + +.fa-hourglass-half { + --fa: "\f252"; } + +.fa-hourglass-2 { + --fa: "\f252"; } + +.fa-microscope { + --fa: "\f610"; } + +.fa-sink { + --fa: "\e06d"; } + +.fa-bag-shopping { + --fa: "\f290"; } + +.fa-shopping-bag { + --fa: "\f290"; } + +.fa-arrow-down-z-a { + --fa: "\f881"; } + +.fa-sort-alpha-desc { + --fa: "\f881"; } + +.fa-sort-alpha-down-alt { + --fa: "\f881"; } + +.fa-mitten { + --fa: "\f7b5"; } + +.fa-person-rays { + --fa: "\e54d"; } + +.fa-users { + --fa: "\f0c0"; } + +.fa-eye-slash { + --fa: "\f070"; } + +.fa-flask-vial { + --fa: "\e4f3"; } + +.fa-hand { + --fa: "\f256"; } + +.fa-hand-paper { + --fa: "\f256"; } + +.fa-om { + --fa: "\f679"; } + +.fa-worm { + --fa: "\e599"; } + +.fa-house-circle-xmark { + --fa: "\e50b"; } + +.fa-plug { + --fa: "\f1e6"; } + +.fa-chevron-up { + --fa: "\f077"; } + +.fa-hand-spock { + --fa: "\f259"; } + +.fa-stopwatch { + --fa: "\f2f2"; } + +.fa-face-kiss { + --fa: "\f596"; } + +.fa-kiss { + --fa: "\f596"; } + +.fa-bridge-circle-xmark { + --fa: "\e4cb"; } + +.fa-face-grin-tongue { + --fa: "\f589"; } + +.fa-grin-tongue { + --fa: "\f589"; } + +.fa-chess-bishop { + --fa: "\f43a"; } + +.fa-face-grin-wink { + --fa: "\f58c"; } + +.fa-grin-wink { + --fa: "\f58c"; } + +.fa-ear-deaf { + --fa: "\f2a4"; } + +.fa-deaf { + --fa: "\f2a4"; } + +.fa-deafness { + --fa: "\f2a4"; } + +.fa-hard-of-hearing { + --fa: "\f2a4"; } + +.fa-road-circle-check { + --fa: "\e564"; } + +.fa-dice-five { + --fa: "\f523"; } + +.fa-square-rss { + --fa: "\f143"; } + +.fa-rss-square { + --fa: "\f143"; } + +.fa-land-mine-on { + --fa: "\e51b"; } + +.fa-i-cursor { + --fa: "\f246"; } + +.fa-stamp { + --fa: "\f5bf"; } + +.fa-stairs { + --fa: "\e289"; } + +.fa-i { + --fa: "\49"; } + +.fa-hryvnia-sign { + --fa: "\f6f2"; } + +.fa-hryvnia { + --fa: "\f6f2"; } + +.fa-pills { + --fa: "\f484"; } + +.fa-face-grin-wide { + --fa: "\f581"; } + +.fa-grin-alt { + --fa: "\f581"; } + +.fa-tooth { + --fa: "\f5c9"; } + +.fa-v { + --fa: "\56"; } + +.fa-bangladeshi-taka-sign { + --fa: "\e2e6"; } + +.fa-bicycle { + --fa: "\f206"; } + +.fa-staff-snake { + --fa: "\e579"; } + +.fa-rod-asclepius { + --fa: "\e579"; } + +.fa-rod-snake { + --fa: "\e579"; } + +.fa-staff-aesculapius { + --fa: "\e579"; } + +.fa-head-side-cough-slash { + --fa: "\e062"; } + +.fa-truck-medical { + --fa: "\f0f9"; } + +.fa-ambulance { + --fa: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation { + --fa: "\e598"; } + +.fa-snowman { + --fa: "\f7d0"; } + +.fa-mortar-pestle { + --fa: "\f5a7"; } + +.fa-road-barrier { + --fa: "\e562"; } + +.fa-school { + --fa: "\f549"; } + +.fa-igloo { + --fa: "\f7ae"; } + +.fa-joint { + --fa: "\f595"; } + +.fa-angle-right { + --fa: "\f105"; } + +.fa-horse { + --fa: "\f6f0"; } + +.fa-q { + --fa: "\51"; } + +.fa-g { + --fa: "\47"; } + +.fa-notes-medical { + --fa: "\f481"; } + +.fa-temperature-half { + --fa: "\f2c9"; } + +.fa-temperature-2 { + --fa: "\f2c9"; } + +.fa-thermometer-2 { + --fa: "\f2c9"; } + +.fa-thermometer-half { + --fa: "\f2c9"; } + +.fa-dong-sign { + --fa: "\e169"; } + +.fa-capsules { + --fa: "\f46b"; } + +.fa-poo-storm { + --fa: "\f75a"; } + +.fa-poo-bolt { + --fa: "\f75a"; } + +.fa-face-frown-open { + --fa: "\f57a"; } + +.fa-frown-open { + --fa: "\f57a"; } + +.fa-hand-point-up { + --fa: "\f0a6"; } + +.fa-money-bill { + --fa: "\f0d6"; } + +.fa-bookmark { + --fa: "\f02e"; } + +.fa-align-justify { + --fa: "\f039"; } + +.fa-umbrella-beach { + --fa: "\f5ca"; } + +.fa-helmet-un { + --fa: "\e503"; } + +.fa-bullseye { + --fa: "\f140"; } + +.fa-bacon { + --fa: "\f7e5"; } + +.fa-hand-point-down { + --fa: "\f0a7"; } + +.fa-arrow-up-from-bracket { + --fa: "\e09a"; } + +.fa-folder { + --fa: "\f07b"; } + +.fa-folder-blank { + --fa: "\f07b"; } + +.fa-file-waveform { + --fa: "\f478"; } + +.fa-file-medical-alt { + --fa: "\f478"; } + +.fa-radiation { + --fa: "\f7b9"; } + +.fa-chart-simple { + --fa: "\e473"; } + +.fa-mars-stroke { + --fa: "\f229"; } + +.fa-vial { + --fa: "\f492"; } + +.fa-gauge { + --fa: "\f624"; } + +.fa-dashboard { + --fa: "\f624"; } + +.fa-gauge-med { + --fa: "\f624"; } + +.fa-tachometer-alt-average { + --fa: "\f624"; } + +.fa-wand-magic-sparkles { + --fa: "\e2ca"; } + +.fa-magic-wand-sparkles { + --fa: "\e2ca"; } + +.fa-e { + --fa: "\45"; } + +.fa-pen-clip { + --fa: "\f305"; } + +.fa-pen-alt { + --fa: "\f305"; } + +.fa-bridge-circle-exclamation { + --fa: "\e4ca"; } + +.fa-user { + --fa: "\f007"; } + +.fa-school-circle-check { + --fa: "\e56b"; } + +.fa-dumpster { + --fa: "\f793"; } + +.fa-van-shuttle { + --fa: "\f5b6"; } + +.fa-shuttle-van { + --fa: "\f5b6"; } + +.fa-building-user { + --fa: "\e4da"; } + +.fa-square-caret-left { + --fa: "\f191"; } + +.fa-caret-square-left { + --fa: "\f191"; } + +.fa-highlighter { + --fa: "\f591"; } + +.fa-key { + --fa: "\f084"; } + +.fa-bullhorn { + --fa: "\f0a1"; } + +.fa-globe { + --fa: "\f0ac"; } + +.fa-synagogue { + --fa: "\f69b"; } + +.fa-person-half-dress { + --fa: "\e548"; } + +.fa-road-bridge { + --fa: "\e563"; } + +.fa-location-arrow { + --fa: "\f124"; } + +.fa-c { + --fa: "\43"; } + +.fa-tablet-button { + --fa: "\f10a"; } + +.fa-building-lock { + --fa: "\e4d6"; } + +.fa-pizza-slice { + --fa: "\f818"; } + +.fa-money-bill-wave { + --fa: "\f53a"; } + +.fa-chart-area { + --fa: "\f1fe"; } + +.fa-area-chart { + --fa: "\f1fe"; } + +.fa-house-flag { + --fa: "\e50d"; } + +.fa-person-circle-minus { + --fa: "\e540"; } + +.fa-ban { + --fa: "\f05e"; } + +.fa-cancel { + --fa: "\f05e"; } + +.fa-camera-rotate { + --fa: "\e0d8"; } + +.fa-spray-can-sparkles { + --fa: "\f5d0"; } + +.fa-air-freshener { + --fa: "\f5d0"; } + +.fa-star { + --fa: "\f005"; } + +.fa-repeat { + --fa: "\f363"; } + +.fa-cross { + --fa: "\f654"; } + +.fa-box { + --fa: "\f466"; } + +.fa-venus-mars { + --fa: "\f228"; } + +.fa-arrow-pointer { + --fa: "\f245"; } + +.fa-mouse-pointer { + --fa: "\f245"; } + +.fa-maximize { + --fa: "\f31e"; } + +.fa-expand-arrows-alt { + --fa: "\f31e"; } + +.fa-charging-station { + --fa: "\f5e7"; } + +.fa-shapes { + --fa: "\f61f"; } + +.fa-triangle-circle-square { + --fa: "\f61f"; } + +.fa-shuffle { + --fa: "\f074"; } + +.fa-random { + --fa: "\f074"; } + +.fa-person-running { + --fa: "\f70c"; } + +.fa-running { + --fa: "\f70c"; } + +.fa-mobile-retro { + --fa: "\e527"; } + +.fa-grip-lines-vertical { + --fa: "\f7a5"; } + +.fa-spider { + --fa: "\f717"; } + +.fa-hands-bound { + --fa: "\e4f9"; } + +.fa-file-invoice-dollar { + --fa: "\f571"; } + +.fa-plane-circle-exclamation { + --fa: "\e556"; } + +.fa-x-ray { + --fa: "\f497"; } + +.fa-spell-check { + --fa: "\f891"; } + +.fa-slash { + --fa: "\f715"; } + +.fa-computer-mouse { + --fa: "\f8cc"; } + +.fa-mouse { + --fa: "\f8cc"; } + +.fa-arrow-right-to-bracket { + --fa: "\f090"; } + +.fa-sign-in { + --fa: "\f090"; } + +.fa-shop-slash { + --fa: "\e070"; } + +.fa-store-alt-slash { + --fa: "\e070"; } + +.fa-server { + --fa: "\f233"; } + +.fa-virus-covid-slash { + --fa: "\e4a9"; } + +.fa-shop-lock { + --fa: "\e4a5"; } + +.fa-hourglass-start { + --fa: "\f251"; } + +.fa-hourglass-1 { + --fa: "\f251"; } + +.fa-blender-phone { + --fa: "\f6b6"; } + +.fa-building-wheat { + --fa: "\e4db"; } + +.fa-person-breastfeeding { + --fa: "\e53a"; } + +.fa-right-to-bracket { + --fa: "\f2f6"; } + +.fa-sign-in-alt { + --fa: "\f2f6"; } + +.fa-venus { + --fa: "\f221"; } + +.fa-passport { + --fa: "\f5ab"; } + +.fa-thumbtack-slash { + --fa: "\e68f"; } + +.fa-thumb-tack-slash { + --fa: "\e68f"; } + +.fa-heart-pulse { + --fa: "\f21e"; } + +.fa-heartbeat { + --fa: "\f21e"; } + +.fa-people-carry-box { + --fa: "\f4ce"; } + +.fa-people-carry { + --fa: "\f4ce"; } + +.fa-temperature-high { + --fa: "\f769"; } + +.fa-microchip { + --fa: "\f2db"; } + +.fa-crown { + --fa: "\f521"; } + +.fa-weight-hanging { + --fa: "\f5cd"; } + +.fa-xmarks-lines { + --fa: "\e59a"; } + +.fa-file-prescription { + --fa: "\f572"; } + +.fa-weight-scale { + --fa: "\f496"; } + +.fa-weight { + --fa: "\f496"; } + +.fa-user-group { + --fa: "\f500"; } + +.fa-user-friends { + --fa: "\f500"; } + +.fa-arrow-up-a-z { + --fa: "\f15e"; } + +.fa-sort-alpha-up { + --fa: "\f15e"; } + +.fa-chess-knight { + --fa: "\f441"; } + +.fa-face-laugh-squint { + --fa: "\f59b"; } + +.fa-laugh-squint { + --fa: "\f59b"; } + +.fa-wheelchair { + --fa: "\f193"; } + +.fa-circle-arrow-up { + --fa: "\f0aa"; } + +.fa-arrow-circle-up { + --fa: "\f0aa"; } + +.fa-toggle-on { + --fa: "\f205"; } + +.fa-person-walking { + --fa: "\f554"; } + +.fa-walking { + --fa: "\f554"; } + +.fa-l { + --fa: "\4c"; } + +.fa-fire { + --fa: "\f06d"; } + +.fa-bed-pulse { + --fa: "\f487"; } + +.fa-procedures { + --fa: "\f487"; } + +.fa-shuttle-space { + --fa: "\f197"; } + +.fa-space-shuttle { + --fa: "\f197"; } + +.fa-face-laugh { + --fa: "\f599"; } + +.fa-laugh { + --fa: "\f599"; } + +.fa-folder-open { + --fa: "\f07c"; } + +.fa-heart-circle-plus { + --fa: "\e500"; } + +.fa-code-fork { + --fa: "\e13b"; } + +.fa-city { + --fa: "\f64f"; } + +.fa-microphone-lines { + --fa: "\f3c9"; } + +.fa-microphone-alt { + --fa: "\f3c9"; } + +.fa-pepper-hot { + --fa: "\f816"; } + +.fa-unlock { + --fa: "\f09c"; } + +.fa-colon-sign { + --fa: "\e140"; } + +.fa-headset { + --fa: "\f590"; } + +.fa-store-slash { + --fa: "\e071"; } + +.fa-road-circle-xmark { + --fa: "\e566"; } + +.fa-user-minus { + --fa: "\f503"; } + +.fa-mars-stroke-up { + --fa: "\f22a"; } + +.fa-mars-stroke-v { + --fa: "\f22a"; } + +.fa-champagne-glasses { + --fa: "\f79f"; } + +.fa-glass-cheers { + --fa: "\f79f"; } + +.fa-clipboard { + --fa: "\f328"; } + +.fa-house-circle-exclamation { + --fa: "\e50a"; } + +.fa-file-arrow-up { + --fa: "\f574"; } + +.fa-file-upload { + --fa: "\f574"; } + +.fa-wifi { + --fa: "\f1eb"; } + +.fa-wifi-3 { + --fa: "\f1eb"; } + +.fa-wifi-strong { + --fa: "\f1eb"; } + +.fa-bath { + --fa: "\f2cd"; } + +.fa-bathtub { + --fa: "\f2cd"; } + +.fa-underline { + --fa: "\f0cd"; } + +.fa-user-pen { + --fa: "\f4ff"; } + +.fa-user-edit { + --fa: "\f4ff"; } + +.fa-signature { + --fa: "\f5b7"; } + +.fa-stroopwafel { + --fa: "\f551"; } + +.fa-bold { + --fa: "\f032"; } + +.fa-anchor-lock { + --fa: "\e4ad"; } + +.fa-building-ngo { + --fa: "\e4d7"; } + +.fa-manat-sign { + --fa: "\e1d5"; } + +.fa-not-equal { + --fa: "\f53e"; } + +.fa-border-top-left { + --fa: "\f853"; } + +.fa-border-style { + --fa: "\f853"; } + +.fa-map-location-dot { + --fa: "\f5a0"; } + +.fa-map-marked-alt { + --fa: "\f5a0"; } + +.fa-jedi { + --fa: "\f669"; } + +.fa-square-poll-vertical { + --fa: "\f681"; } + +.fa-poll { + --fa: "\f681"; } + +.fa-mug-hot { + --fa: "\f7b6"; } + +.fa-car-battery { + --fa: "\f5df"; } + +.fa-battery-car { + --fa: "\f5df"; } + +.fa-gift { + --fa: "\f06b"; } + +.fa-dice-two { + --fa: "\f528"; } + +.fa-chess-queen { + --fa: "\f445"; } + +.fa-glasses { + --fa: "\f530"; } + +.fa-chess-board { + --fa: "\f43c"; } + +.fa-building-circle-check { + --fa: "\e4d2"; } + +.fa-person-chalkboard { + --fa: "\e53d"; } + +.fa-mars-stroke-right { + --fa: "\f22b"; } + +.fa-mars-stroke-h { + --fa: "\f22b"; } + +.fa-hand-back-fist { + --fa: "\f255"; } + +.fa-hand-rock { + --fa: "\f255"; } + +.fa-square-caret-up { + --fa: "\f151"; } + +.fa-caret-square-up { + --fa: "\f151"; } + +.fa-cloud-showers-water { + --fa: "\e4e4"; } + +.fa-chart-bar { + --fa: "\f080"; } + +.fa-bar-chart { + --fa: "\f080"; } + +.fa-hands-bubbles { + --fa: "\e05e"; } + +.fa-hands-wash { + --fa: "\e05e"; } + +.fa-less-than-equal { + --fa: "\f537"; } + +.fa-train { + --fa: "\f238"; } + +.fa-eye-low-vision { + --fa: "\f2a8"; } + +.fa-low-vision { + --fa: "\f2a8"; } + +.fa-crow { + --fa: "\f520"; } + +.fa-sailboat { + --fa: "\e445"; } + +.fa-window-restore { + --fa: "\f2d2"; } + +.fa-square-plus { + --fa: "\f0fe"; } + +.fa-plus-square { + --fa: "\f0fe"; } + +.fa-torii-gate { + --fa: "\f6a1"; } + +.fa-frog { + --fa: "\f52e"; } + +.fa-bucket { + --fa: "\e4cf"; } + +.fa-image { + --fa: "\f03e"; } + +.fa-microphone { + --fa: "\f130"; } + +.fa-cow { + --fa: "\f6c8"; } + +.fa-caret-up { + --fa: "\f0d8"; } + +.fa-screwdriver { + --fa: "\f54a"; } + +.fa-folder-closed { + --fa: "\e185"; } + +.fa-house-tsunami { + --fa: "\e515"; } + +.fa-square-nfi { + --fa: "\e576"; } + +.fa-arrow-up-from-ground-water { + --fa: "\e4b5"; } + +.fa-martini-glass { + --fa: "\f57b"; } + +.fa-glass-martini-alt { + --fa: "\f57b"; } + +.fa-square-binary { + --fa: "\e69b"; } + +.fa-rotate-left { + --fa: "\f2ea"; } + +.fa-rotate-back { + --fa: "\f2ea"; } + +.fa-rotate-backward { + --fa: "\f2ea"; } + +.fa-undo-alt { + --fa: "\f2ea"; } + +.fa-table-columns { + --fa: "\f0db"; } + +.fa-columns { + --fa: "\f0db"; } + +.fa-lemon { + --fa: "\f094"; } + +.fa-head-side-mask { + --fa: "\e063"; } + +.fa-handshake { + --fa: "\f2b5"; } + +.fa-gem { + --fa: "\f3a5"; } + +.fa-dolly { + --fa: "\f472"; } + +.fa-dolly-box { + --fa: "\f472"; } + +.fa-smoking { + --fa: "\f48d"; } + +.fa-minimize { + --fa: "\f78c"; } + +.fa-compress-arrows-alt { + --fa: "\f78c"; } + +.fa-monument { + --fa: "\f5a6"; } + +.fa-snowplow { + --fa: "\f7d2"; } + +.fa-angles-right { + --fa: "\f101"; } + +.fa-angle-double-right { + --fa: "\f101"; } + +.fa-cannabis { + --fa: "\f55f"; } + +.fa-circle-play { + --fa: "\f144"; } + +.fa-play-circle { + --fa: "\f144"; } + +.fa-tablets { + --fa: "\f490"; } + +.fa-ethernet { + --fa: "\f796"; } + +.fa-euro-sign { + --fa: "\f153"; } + +.fa-eur { + --fa: "\f153"; } + +.fa-euro { + --fa: "\f153"; } + +.fa-chair { + --fa: "\f6c0"; } + +.fa-circle-check { + --fa: "\f058"; } + +.fa-check-circle { + --fa: "\f058"; } + +.fa-circle-stop { + --fa: "\f28d"; } + +.fa-stop-circle { + --fa: "\f28d"; } + +.fa-compass-drafting { + --fa: "\f568"; } + +.fa-drafting-compass { + --fa: "\f568"; } + +.fa-plate-wheat { + --fa: "\e55a"; } + +.fa-icicles { + --fa: "\f7ad"; } + +.fa-person-shelter { + --fa: "\e54f"; } + +.fa-neuter { + --fa: "\f22c"; } + +.fa-id-badge { + --fa: "\f2c1"; } + +.fa-marker { + --fa: "\f5a1"; } + +.fa-face-laugh-beam { + --fa: "\f59a"; } + +.fa-laugh-beam { + --fa: "\f59a"; } + +.fa-helicopter-symbol { + --fa: "\e502"; } + +.fa-universal-access { + --fa: "\f29a"; } + +.fa-circle-chevron-up { + --fa: "\f139"; } + +.fa-chevron-circle-up { + --fa: "\f139"; } + +.fa-lari-sign { + --fa: "\e1c8"; } + +.fa-volcano { + --fa: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right { + --fa: "\e553"; } + +.fa-sterling-sign { + --fa: "\f154"; } + +.fa-gbp { + --fa: "\f154"; } + +.fa-pound-sign { + --fa: "\f154"; } + +.fa-viruses { + --fa: "\e076"; } + +.fa-square-person-confined { + --fa: "\e577"; } + +.fa-user-tie { + --fa: "\f508"; } + +.fa-arrow-down-long { + --fa: "\f175"; } + +.fa-long-arrow-down { + --fa: "\f175"; } + +.fa-tent-arrow-down-to-line { + --fa: "\e57e"; } + +.fa-certificate { + --fa: "\f0a3"; } + +.fa-reply-all { + --fa: "\f122"; } + +.fa-mail-reply-all { + --fa: "\f122"; } + +.fa-suitcase { + --fa: "\f0f2"; } + +.fa-person-skating { + --fa: "\f7c5"; } + +.fa-skating { + --fa: "\f7c5"; } + +.fa-filter-circle-dollar { + --fa: "\f662"; } + +.fa-funnel-dollar { + --fa: "\f662"; } + +.fa-camera-retro { + --fa: "\f083"; } + +.fa-circle-arrow-down { + --fa: "\f0ab"; } + +.fa-arrow-circle-down { + --fa: "\f0ab"; } + +.fa-file-import { + --fa: "\f56f"; } + +.fa-arrow-right-to-file { + --fa: "\f56f"; } + +.fa-square-arrow-up-right { + --fa: "\f14c"; } + +.fa-external-link-square { + --fa: "\f14c"; } + +.fa-box-open { + --fa: "\f49e"; } + +.fa-scroll { + --fa: "\f70e"; } + +.fa-spa { + --fa: "\f5bb"; } + +.fa-location-pin-lock { + --fa: "\e51f"; } + +.fa-pause { + --fa: "\f04c"; } + +.fa-hill-avalanche { + --fa: "\e507"; } + +.fa-temperature-empty { + --fa: "\f2cb"; } + +.fa-temperature-0 { + --fa: "\f2cb"; } + +.fa-thermometer-0 { + --fa: "\f2cb"; } + +.fa-thermometer-empty { + --fa: "\f2cb"; } + +.fa-bomb { + --fa: "\f1e2"; } + +.fa-registered { + --fa: "\f25d"; } + +.fa-address-card { + --fa: "\f2bb"; } + +.fa-contact-card { + --fa: "\f2bb"; } + +.fa-vcard { + --fa: "\f2bb"; } + +.fa-scale-unbalanced-flip { + --fa: "\f516"; } + +.fa-balance-scale-right { + --fa: "\f516"; } + +.fa-subscript { + --fa: "\f12c"; } + +.fa-diamond-turn-right { + --fa: "\f5eb"; } + +.fa-directions { + --fa: "\f5eb"; } + +.fa-burst { + --fa: "\e4dc"; } + +.fa-house-laptop { + --fa: "\e066"; } + +.fa-laptop-house { + --fa: "\e066"; } + +.fa-face-tired { + --fa: "\f5c8"; } + +.fa-tired { + --fa: "\f5c8"; } + +.fa-money-bills { + --fa: "\e1f3"; } + +.fa-smog { + --fa: "\f75f"; } + +.fa-crutch { + --fa: "\f7f7"; } + +.fa-cloud-arrow-up { + --fa: "\f0ee"; } + +.fa-cloud-upload { + --fa: "\f0ee"; } + +.fa-cloud-upload-alt { + --fa: "\f0ee"; } + +.fa-palette { + --fa: "\f53f"; } + +.fa-arrows-turn-right { + --fa: "\e4c0"; } + +.fa-vest { + --fa: "\e085"; } + +.fa-ferry { + --fa: "\e4ea"; } + +.fa-arrows-down-to-people { + --fa: "\e4b9"; } + +.fa-seedling { + --fa: "\f4d8"; } + +.fa-sprout { + --fa: "\f4d8"; } + +.fa-left-right { + --fa: "\f337"; } + +.fa-arrows-alt-h { + --fa: "\f337"; } + +.fa-boxes-packing { + --fa: "\e4c7"; } + +.fa-circle-arrow-left { + --fa: "\f0a8"; } + +.fa-arrow-circle-left { + --fa: "\f0a8"; } + +.fa-group-arrows-rotate { + --fa: "\e4f6"; } + +.fa-bowl-food { + --fa: "\e4c6"; } + +.fa-candy-cane { + --fa: "\f786"; } + +.fa-arrow-down-wide-short { + --fa: "\f160"; } + +.fa-sort-amount-asc { + --fa: "\f160"; } + +.fa-sort-amount-down { + --fa: "\f160"; } + +.fa-cloud-bolt { + --fa: "\f76c"; } + +.fa-thunderstorm { + --fa: "\f76c"; } + +.fa-text-slash { + --fa: "\f87d"; } + +.fa-remove-format { + --fa: "\f87d"; } + +.fa-face-smile-wink { + --fa: "\f4da"; } + +.fa-smile-wink { + --fa: "\f4da"; } + +.fa-file-word { + --fa: "\f1c2"; } + +.fa-file-powerpoint { + --fa: "\f1c4"; } + +.fa-arrows-left-right { + --fa: "\f07e"; } + +.fa-arrows-h { + --fa: "\f07e"; } + +.fa-house-lock { + --fa: "\e510"; } + +.fa-cloud-arrow-down { + --fa: "\f0ed"; } + +.fa-cloud-download { + --fa: "\f0ed"; } + +.fa-cloud-download-alt { + --fa: "\f0ed"; } + +.fa-children { + --fa: "\e4e1"; } + +.fa-chalkboard { + --fa: "\f51b"; } + +.fa-blackboard { + --fa: "\f51b"; } + +.fa-user-large-slash { + --fa: "\f4fa"; } + +.fa-user-alt-slash { + --fa: "\f4fa"; } + +.fa-envelope-open { + --fa: "\f2b6"; } + +.fa-handshake-simple-slash { + --fa: "\e05f"; } + +.fa-handshake-alt-slash { + --fa: "\e05f"; } + +.fa-mattress-pillow { + --fa: "\e525"; } + +.fa-guarani-sign { + --fa: "\e19a"; } + +.fa-arrows-rotate { + --fa: "\f021"; } + +.fa-refresh { + --fa: "\f021"; } + +.fa-sync { + --fa: "\f021"; } + +.fa-fire-extinguisher { + --fa: "\f134"; } + +.fa-cruzeiro-sign { + --fa: "\e152"; } + +.fa-greater-than-equal { + --fa: "\f532"; } + +.fa-shield-halved { + --fa: "\f3ed"; } + +.fa-shield-alt { + --fa: "\f3ed"; } + +.fa-book-atlas { + --fa: "\f558"; } + +.fa-atlas { + --fa: "\f558"; } + +.fa-virus { + --fa: "\e074"; } + +.fa-envelope-circle-check { + --fa: "\e4e8"; } + +.fa-layer-group { + --fa: "\f5fd"; } + +.fa-arrows-to-dot { + --fa: "\e4be"; } + +.fa-archway { + --fa: "\f557"; } + +.fa-heart-circle-check { + --fa: "\e4fd"; } + +.fa-house-chimney-crack { + --fa: "\f6f1"; } + +.fa-house-damage { + --fa: "\f6f1"; } + +.fa-file-zipper { + --fa: "\f1c6"; } + +.fa-file-archive { + --fa: "\f1c6"; } + +.fa-square { + --fa: "\f0c8"; } + +.fa-martini-glass-empty { + --fa: "\f000"; } + +.fa-glass-martini { + --fa: "\f000"; } + +.fa-couch { + --fa: "\f4b8"; } + +.fa-cedi-sign { + --fa: "\e0df"; } + +.fa-italic { + --fa: "\f033"; } + +.fa-table-cells-column-lock { + --fa: "\e678"; } + +.fa-church { + --fa: "\f51d"; } + +.fa-comments-dollar { + --fa: "\f653"; } + +.fa-democrat { + --fa: "\f747"; } + +.fa-z { + --fa: "\5a"; } + +.fa-person-skiing { + --fa: "\f7c9"; } + +.fa-skiing { + --fa: "\f7c9"; } + +.fa-road-lock { + --fa: "\e567"; } + +.fa-a { + --fa: "\41"; } + +.fa-temperature-arrow-down { + --fa: "\e03f"; } + +.fa-temperature-down { + --fa: "\e03f"; } + +.fa-feather-pointed { + --fa: "\f56b"; } + +.fa-feather-alt { + --fa: "\f56b"; } + +.fa-p { + --fa: "\50"; } + +.fa-snowflake { + --fa: "\f2dc"; } + +.fa-newspaper { + --fa: "\f1ea"; } + +.fa-rectangle-ad { + --fa: "\f641"; } + +.fa-ad { + --fa: "\f641"; } + +.fa-circle-arrow-right { + --fa: "\f0a9"; } + +.fa-arrow-circle-right { + --fa: "\f0a9"; } + +.fa-filter-circle-xmark { + --fa: "\e17b"; } + +.fa-locust { + --fa: "\e520"; } + +.fa-sort { + --fa: "\f0dc"; } + +.fa-unsorted { + --fa: "\f0dc"; } + +.fa-list-ol { + --fa: "\f0cb"; } + +.fa-list-1-2 { + --fa: "\f0cb"; } + +.fa-list-numeric { + --fa: "\f0cb"; } + +.fa-person-dress-burst { + --fa: "\e544"; } + +.fa-money-check-dollar { + --fa: "\f53d"; } + +.fa-money-check-alt { + --fa: "\f53d"; } + +.fa-vector-square { + --fa: "\f5cb"; } + +.fa-bread-slice { + --fa: "\f7ec"; } + +.fa-language { + --fa: "\f1ab"; } + +.fa-face-kiss-wink-heart { + --fa: "\f598"; } + +.fa-kiss-wink-heart { + --fa: "\f598"; } + +.fa-filter { + --fa: "\f0b0"; } + +.fa-question { + --fa: "\3f"; } + +.fa-file-signature { + --fa: "\f573"; } + +.fa-up-down-left-right { + --fa: "\f0b2"; } + +.fa-arrows-alt { + --fa: "\f0b2"; } + +.fa-house-chimney-user { + --fa: "\e065"; } + +.fa-hand-holding-heart { + --fa: "\f4be"; } + +.fa-puzzle-piece { + --fa: "\f12e"; } + +.fa-money-check { + --fa: "\f53c"; } + +.fa-star-half-stroke { + --fa: "\f5c0"; } + +.fa-star-half-alt { + --fa: "\f5c0"; } + +.fa-code { + --fa: "\f121"; } + +.fa-whiskey-glass { + --fa: "\f7a0"; } + +.fa-glass-whiskey { + --fa: "\f7a0"; } + +.fa-building-circle-exclamation { + --fa: "\e4d3"; } + +.fa-magnifying-glass-chart { + --fa: "\e522"; } + +.fa-arrow-up-right-from-square { + --fa: "\f08e"; } + +.fa-external-link { + --fa: "\f08e"; } + +.fa-cubes-stacked { + --fa: "\e4e6"; } + +.fa-won-sign { + --fa: "\f159"; } + +.fa-krw { + --fa: "\f159"; } + +.fa-won { + --fa: "\f159"; } + +.fa-virus-covid { + --fa: "\e4a8"; } + +.fa-austral-sign { + --fa: "\e0a9"; } + +.fa-f { + --fa: "\46"; } + +.fa-leaf { + --fa: "\f06c"; } + +.fa-road { + --fa: "\f018"; } + +.fa-taxi { + --fa: "\f1ba"; } + +.fa-cab { + --fa: "\f1ba"; } + +.fa-person-circle-plus { + --fa: "\e541"; } + +.fa-chart-pie { + --fa: "\f200"; } + +.fa-pie-chart { + --fa: "\f200"; } + +.fa-bolt-lightning { + --fa: "\e0b7"; } + +.fa-sack-xmark { + --fa: "\e56a"; } + +.fa-file-excel { + --fa: "\f1c3"; } + +.fa-file-contract { + --fa: "\f56c"; } + +.fa-fish-fins { + --fa: "\e4f2"; } + +.fa-building-flag { + --fa: "\e4d5"; } + +.fa-face-grin-beam { + --fa: "\f582"; } + +.fa-grin-beam { + --fa: "\f582"; } + +.fa-object-ungroup { + --fa: "\f248"; } + +.fa-poop { + --fa: "\f619"; } + +.fa-location-pin { + --fa: "\f041"; } + +.fa-map-marker { + --fa: "\f041"; } + +.fa-kaaba { + --fa: "\f66b"; } + +.fa-toilet-paper { + --fa: "\f71e"; } + +.fa-helmet-safety { + --fa: "\f807"; } + +.fa-hard-hat { + --fa: "\f807"; } + +.fa-hat-hard { + --fa: "\f807"; } + +.fa-eject { + --fa: "\f052"; } + +.fa-circle-right { + --fa: "\f35a"; } + +.fa-arrow-alt-circle-right { + --fa: "\f35a"; } + +.fa-plane-circle-check { + --fa: "\e555"; } + +.fa-face-rolling-eyes { + --fa: "\f5a5"; } + +.fa-meh-rolling-eyes { + --fa: "\f5a5"; } + +.fa-object-group { + --fa: "\f247"; } + +.fa-chart-line { + --fa: "\f201"; } + +.fa-line-chart { + --fa: "\f201"; } + +.fa-mask-ventilator { + --fa: "\e524"; } + +.fa-arrow-right { + --fa: "\f061"; } + +.fa-signs-post { + --fa: "\f277"; } + +.fa-map-signs { + --fa: "\f277"; } + +.fa-cash-register { + --fa: "\f788"; } + +.fa-person-circle-question { + --fa: "\e542"; } + +.fa-h { + --fa: "\48"; } + +.fa-tarp { + --fa: "\e57b"; } + +.fa-screwdriver-wrench { + --fa: "\f7d9"; } + +.fa-tools { + --fa: "\f7d9"; } + +.fa-arrows-to-eye { + --fa: "\e4bf"; } + +.fa-plug-circle-bolt { + --fa: "\e55b"; } + +.fa-heart { + --fa: "\f004"; } + +.fa-mars-and-venus { + --fa: "\f224"; } + +.fa-house-user { + --fa: "\e1b0"; } + +.fa-home-user { + --fa: "\e1b0"; } + +.fa-dumpster-fire { + --fa: "\f794"; } + +.fa-house-crack { + --fa: "\e3b1"; } + +.fa-martini-glass-citrus { + --fa: "\f561"; } + +.fa-cocktail { + --fa: "\f561"; } + +.fa-face-surprise { + --fa: "\f5c2"; } + +.fa-surprise { + --fa: "\f5c2"; } + +.fa-bottle-water { + --fa: "\e4c5"; } + +.fa-circle-pause { + --fa: "\f28b"; } + +.fa-pause-circle { + --fa: "\f28b"; } + +.fa-toilet-paper-slash { + --fa: "\e072"; } + +.fa-apple-whole { + --fa: "\f5d1"; } + +.fa-apple-alt { + --fa: "\f5d1"; } + +.fa-kitchen-set { + --fa: "\e51a"; } + +.fa-r { + --fa: "\52"; } + +.fa-temperature-quarter { + --fa: "\f2ca"; } + +.fa-temperature-1 { + --fa: "\f2ca"; } + +.fa-thermometer-1 { + --fa: "\f2ca"; } + +.fa-thermometer-quarter { + --fa: "\f2ca"; } + +.fa-cube { + --fa: "\f1b2"; } + +.fa-bitcoin-sign { + --fa: "\e0b4"; } + +.fa-shield-dog { + --fa: "\e573"; } + +.fa-solar-panel { + --fa: "\f5ba"; } + +.fa-lock-open { + --fa: "\f3c1"; } + +.fa-elevator { + --fa: "\e16d"; } + +.fa-money-bill-transfer { + --fa: "\e528"; } + +.fa-money-bill-trend-up { + --fa: "\e529"; } + +.fa-house-flood-water-circle-arrow-right { + --fa: "\e50f"; } + +.fa-square-poll-horizontal { + --fa: "\f682"; } + +.fa-poll-h { + --fa: "\f682"; } + +.fa-circle { + --fa: "\f111"; } + +.fa-backward-fast { + --fa: "\f049"; } + +.fa-fast-backward { + --fa: "\f049"; } + +.fa-recycle { + --fa: "\f1b8"; } + +.fa-user-astronaut { + --fa: "\f4fb"; } + +.fa-plane-slash { + --fa: "\e069"; } + +.fa-trademark { + --fa: "\f25c"; } + +.fa-basketball { + --fa: "\f434"; } + +.fa-basketball-ball { + --fa: "\f434"; } + +.fa-satellite-dish { + --fa: "\f7c0"; } + +.fa-circle-up { + --fa: "\f35b"; } + +.fa-arrow-alt-circle-up { + --fa: "\f35b"; } + +.fa-mobile-screen-button { + --fa: "\f3cd"; } + +.fa-mobile-alt { + --fa: "\f3cd"; } + +.fa-volume-high { + --fa: "\f028"; } + +.fa-volume-up { + --fa: "\f028"; } + +.fa-users-rays { + --fa: "\e593"; } + +.fa-wallet { + --fa: "\f555"; } + +.fa-clipboard-check { + --fa: "\f46c"; } + +.fa-file-audio { + --fa: "\f1c7"; } + +.fa-burger { + --fa: "\f805"; } + +.fa-hamburger { + --fa: "\f805"; } + +.fa-wrench { + --fa: "\f0ad"; } + +.fa-bugs { + --fa: "\e4d0"; } + +.fa-rupee-sign { + --fa: "\f156"; } + +.fa-rupee { + --fa: "\f156"; } + +.fa-file-image { + --fa: "\f1c5"; } + +.fa-circle-question { + --fa: "\f059"; } + +.fa-question-circle { + --fa: "\f059"; } + +.fa-plane-departure { + --fa: "\f5b0"; } + +.fa-handshake-slash { + --fa: "\e060"; } + +.fa-book-bookmark { + --fa: "\e0bb"; } + +.fa-code-branch { + --fa: "\f126"; } + +.fa-hat-cowboy { + --fa: "\f8c0"; } + +.fa-bridge { + --fa: "\e4c8"; } + +.fa-phone-flip { + --fa: "\f879"; } + +.fa-phone-alt { + --fa: "\f879"; } + +.fa-truck-front { + --fa: "\e2b7"; } + +.fa-cat { + --fa: "\f6be"; } + +.fa-anchor-circle-exclamation { + --fa: "\e4ab"; } + +.fa-truck-field { + --fa: "\e58d"; } + +.fa-route { + --fa: "\f4d7"; } + +.fa-clipboard-question { + --fa: "\e4e3"; } + +.fa-panorama { + --fa: "\e209"; } + +.fa-comment-medical { + --fa: "\f7f5"; } + +.fa-teeth-open { + --fa: "\f62f"; } + +.fa-file-circle-minus { + --fa: "\e4ed"; } + +.fa-tags { + --fa: "\f02c"; } + +.fa-wine-glass { + --fa: "\f4e3"; } + +.fa-forward-fast { + --fa: "\f050"; } + +.fa-fast-forward { + --fa: "\f050"; } + +.fa-face-meh-blank { + --fa: "\f5a4"; } + +.fa-meh-blank { + --fa: "\f5a4"; } + +.fa-square-parking { + --fa: "\f540"; } + +.fa-parking { + --fa: "\f540"; } + +.fa-house-signal { + --fa: "\e012"; } + +.fa-bars-progress { + --fa: "\f828"; } + +.fa-tasks-alt { + --fa: "\f828"; } + +.fa-faucet-drip { + --fa: "\e006"; } + +.fa-cart-flatbed { + --fa: "\f474"; } + +.fa-dolly-flatbed { + --fa: "\f474"; } + +.fa-ban-smoking { + --fa: "\f54d"; } + +.fa-smoking-ban { + --fa: "\f54d"; } + +.fa-terminal { + --fa: "\f120"; } + +.fa-mobile-button { + --fa: "\f10b"; } + +.fa-house-medical-flag { + --fa: "\e514"; } + +.fa-basket-shopping { + --fa: "\f291"; } + +.fa-shopping-basket { + --fa: "\f291"; } + +.fa-tape { + --fa: "\f4db"; } + +.fa-bus-simple { + --fa: "\f55e"; } + +.fa-bus-alt { + --fa: "\f55e"; } + +.fa-eye { + --fa: "\f06e"; } + +.fa-face-sad-cry { + --fa: "\f5b3"; } + +.fa-sad-cry { + --fa: "\f5b3"; } + +.fa-audio-description { + --fa: "\f29e"; } + +.fa-person-military-to-person { + --fa: "\e54c"; } + +.fa-file-shield { + --fa: "\e4f0"; } + +.fa-user-slash { + --fa: "\f506"; } + +.fa-pen { + --fa: "\f304"; } + +.fa-tower-observation { + --fa: "\e586"; } + +.fa-file-code { + --fa: "\f1c9"; } + +.fa-signal { + --fa: "\f012"; } + +.fa-signal-5 { + --fa: "\f012"; } + +.fa-signal-perfect { + --fa: "\f012"; } + +.fa-bus { + --fa: "\f207"; } + +.fa-heart-circle-xmark { + --fa: "\e501"; } + +.fa-house-chimney { + --fa: "\e3af"; } + +.fa-home-lg { + --fa: "\e3af"; } + +.fa-window-maximize { + --fa: "\f2d0"; } + +.fa-face-frown { + --fa: "\f119"; } + +.fa-frown { + --fa: "\f119"; } + +.fa-prescription { + --fa: "\f5b1"; } + +.fa-shop { + --fa: "\f54f"; } + +.fa-store-alt { + --fa: "\f54f"; } + +.fa-floppy-disk { + --fa: "\f0c7"; } + +.fa-save { + --fa: "\f0c7"; } + +.fa-vihara { + --fa: "\f6a7"; } + +.fa-scale-unbalanced { + --fa: "\f515"; } + +.fa-balance-scale-left { + --fa: "\f515"; } + +.fa-sort-up { + --fa: "\f0de"; } + +.fa-sort-asc { + --fa: "\f0de"; } + +.fa-comment-dots { + --fa: "\f4ad"; } + +.fa-commenting { + --fa: "\f4ad"; } + +.fa-plant-wilt { + --fa: "\e5aa"; } + +.fa-diamond { + --fa: "\f219"; } + +.fa-face-grin-squint { + --fa: "\f585"; } + +.fa-grin-squint { + --fa: "\f585"; } + +.fa-hand-holding-dollar { + --fa: "\f4c0"; } + +.fa-hand-holding-usd { + --fa: "\f4c0"; } + +.fa-chart-diagram { + --fa: "\e695"; } + +.fa-bacterium { + --fa: "\e05a"; } + +.fa-hand-pointer { + --fa: "\f25a"; } + +.fa-drum-steelpan { + --fa: "\f56a"; } + +.fa-hand-scissors { + --fa: "\f257"; } + +.fa-hands-praying { + --fa: "\f684"; } + +.fa-praying-hands { + --fa: "\f684"; } + +.fa-arrow-rotate-right { + --fa: "\f01e"; } + +.fa-arrow-right-rotate { + --fa: "\f01e"; } + +.fa-arrow-rotate-forward { + --fa: "\f01e"; } + +.fa-redo { + --fa: "\f01e"; } + +.fa-biohazard { + --fa: "\f780"; } + +.fa-location-crosshairs { + --fa: "\f601"; } + +.fa-location { + --fa: "\f601"; } + +.fa-mars-double { + --fa: "\f227"; } + +.fa-child-dress { + --fa: "\e59c"; } + +.fa-users-between-lines { + --fa: "\e591"; } + +.fa-lungs-virus { + --fa: "\e067"; } + +.fa-face-grin-tears { + --fa: "\f588"; } + +.fa-grin-tears { + --fa: "\f588"; } + +.fa-phone { + --fa: "\f095"; } + +.fa-calendar-xmark { + --fa: "\f273"; } + +.fa-calendar-times { + --fa: "\f273"; } + +.fa-child-reaching { + --fa: "\e59d"; } + +.fa-head-side-virus { + --fa: "\e064"; } + +.fa-user-gear { + --fa: "\f4fe"; } + +.fa-user-cog { + --fa: "\f4fe"; } + +.fa-arrow-up-1-9 { + --fa: "\f163"; } + +.fa-sort-numeric-up { + --fa: "\f163"; } + +.fa-door-closed { + --fa: "\f52a"; } + +.fa-shield-virus { + --fa: "\e06c"; } + +.fa-dice-six { + --fa: "\f526"; } + +.fa-mosquito-net { + --fa: "\e52c"; } + +.fa-file-fragment { + --fa: "\e697"; } + +.fa-bridge-water { + --fa: "\e4ce"; } + +.fa-person-booth { + --fa: "\f756"; } + +.fa-text-width { + --fa: "\f035"; } + +.fa-hat-wizard { + --fa: "\f6e8"; } + +.fa-pen-fancy { + --fa: "\f5ac"; } + +.fa-person-digging { + --fa: "\f85e"; } + +.fa-digging { + --fa: "\f85e"; } + +.fa-trash { + --fa: "\f1f8"; } + +.fa-gauge-simple { + --fa: "\f629"; } + +.fa-gauge-simple-med { + --fa: "\f629"; } + +.fa-tachometer-average { + --fa: "\f629"; } + +.fa-book-medical { + --fa: "\f7e6"; } + +.fa-poo { + --fa: "\f2fe"; } + +.fa-quote-right { + --fa: "\f10e"; } + +.fa-quote-right-alt { + --fa: "\f10e"; } + +.fa-shirt { + --fa: "\f553"; } + +.fa-t-shirt { + --fa: "\f553"; } + +.fa-tshirt { + --fa: "\f553"; } + +.fa-cubes { + --fa: "\f1b3"; } + +.fa-divide { + --fa: "\f529"; } + +.fa-tenge-sign { + --fa: "\f7d7"; } + +.fa-tenge { + --fa: "\f7d7"; } + +.fa-headphones { + --fa: "\f025"; } + +.fa-hands-holding { + --fa: "\f4c2"; } + +.fa-hands-clapping { + --fa: "\e1a8"; } + +.fa-republican { + --fa: "\f75e"; } + +.fa-arrow-left { + --fa: "\f060"; } + +.fa-person-circle-xmark { + --fa: "\e543"; } + +.fa-ruler { + --fa: "\f545"; } + +.fa-align-left { + --fa: "\f036"; } + +.fa-dice-d6 { + --fa: "\f6d1"; } + +.fa-restroom { + --fa: "\f7bd"; } + +.fa-j { + --fa: "\4a"; } + +.fa-users-viewfinder { + --fa: "\e595"; } + +.fa-file-video { + --fa: "\f1c8"; } + +.fa-up-right-from-square { + --fa: "\f35d"; } + +.fa-external-link-alt { + --fa: "\f35d"; } + +.fa-table-cells { + --fa: "\f00a"; } + +.fa-th { + --fa: "\f00a"; } + +.fa-file-pdf { + --fa: "\f1c1"; } + +.fa-book-bible { + --fa: "\f647"; } + +.fa-bible { + --fa: "\f647"; } + +.fa-o { + --fa: "\4f"; } + +.fa-suitcase-medical { + --fa: "\f0fa"; } + +.fa-medkit { + --fa: "\f0fa"; } + +.fa-user-secret { + --fa: "\f21b"; } + +.fa-otter { + --fa: "\f700"; } + +.fa-person-dress { + --fa: "\f182"; } + +.fa-female { + --fa: "\f182"; } + +.fa-comment-dollar { + --fa: "\f651"; } + +.fa-business-time { + --fa: "\f64a"; } + +.fa-briefcase-clock { + --fa: "\f64a"; } + +.fa-table-cells-large { + --fa: "\f009"; } + +.fa-th-large { + --fa: "\f009"; } + +.fa-book-tanakh { + --fa: "\f827"; } + +.fa-tanakh { + --fa: "\f827"; } + +.fa-phone-volume { + --fa: "\f2a0"; } + +.fa-volume-control-phone { + --fa: "\f2a0"; } + +.fa-hat-cowboy-side { + --fa: "\f8c1"; } + +.fa-clipboard-user { + --fa: "\f7f3"; } + +.fa-child { + --fa: "\f1ae"; } + +.fa-lira-sign { + --fa: "\f195"; } + +.fa-satellite { + --fa: "\f7bf"; } + +.fa-plane-lock { + --fa: "\e558"; } + +.fa-tag { + --fa: "\f02b"; } + +.fa-comment { + --fa: "\f075"; } + +.fa-cake-candles { + --fa: "\f1fd"; } + +.fa-birthday-cake { + --fa: "\f1fd"; } + +.fa-cake { + --fa: "\f1fd"; } + +.fa-envelope { + --fa: "\f0e0"; } + +.fa-angles-up { + --fa: "\f102"; } + +.fa-angle-double-up { + --fa: "\f102"; } + +.fa-paperclip { + --fa: "\f0c6"; } + +.fa-arrow-right-to-city { + --fa: "\e4b3"; } + +.fa-ribbon { + --fa: "\f4d6"; } + +.fa-lungs { + --fa: "\f604"; } + +.fa-arrow-up-9-1 { + --fa: "\f887"; } + +.fa-sort-numeric-up-alt { + --fa: "\f887"; } + +.fa-litecoin-sign { + --fa: "\e1d3"; } + +.fa-border-none { + --fa: "\f850"; } + +.fa-circle-nodes { + --fa: "\e4e2"; } + +.fa-parachute-box { + --fa: "\f4cd"; } + +.fa-indent { + --fa: "\f03c"; } + +.fa-truck-field-un { + --fa: "\e58e"; } + +.fa-hourglass { + --fa: "\f254"; } + +.fa-hourglass-empty { + --fa: "\f254"; } + +.fa-mountain { + --fa: "\f6fc"; } + +.fa-user-doctor { + --fa: "\f0f0"; } + +.fa-user-md { + --fa: "\f0f0"; } + +.fa-circle-info { + --fa: "\f05a"; } + +.fa-info-circle { + --fa: "\f05a"; } + +.fa-cloud-meatball { + --fa: "\f73b"; } + +.fa-camera { + --fa: "\f030"; } + +.fa-camera-alt { + --fa: "\f030"; } + +.fa-square-virus { + --fa: "\e578"; } + +.fa-meteor { + --fa: "\f753"; } + +.fa-car-on { + --fa: "\e4dd"; } + +.fa-sleigh { + --fa: "\f7cc"; } + +.fa-arrow-down-1-9 { + --fa: "\f162"; } + +.fa-sort-numeric-asc { + --fa: "\f162"; } + +.fa-sort-numeric-down { + --fa: "\f162"; } + +.fa-hand-holding-droplet { + --fa: "\f4c1"; } + +.fa-hand-holding-water { + --fa: "\f4c1"; } + +.fa-water { + --fa: "\f773"; } + +.fa-calendar-check { + --fa: "\f274"; } + +.fa-braille { + --fa: "\f2a1"; } + +.fa-prescription-bottle-medical { + --fa: "\f486"; } + +.fa-prescription-bottle-alt { + --fa: "\f486"; } + +.fa-landmark { + --fa: "\f66f"; } + +.fa-truck { + --fa: "\f0d1"; } + +.fa-crosshairs { + --fa: "\f05b"; } + +.fa-person-cane { + --fa: "\e53c"; } + +.fa-tent { + --fa: "\e57d"; } + +.fa-vest-patches { + --fa: "\e086"; } + +.fa-check-double { + --fa: "\f560"; } + +.fa-arrow-down-a-z { + --fa: "\f15d"; } + +.fa-sort-alpha-asc { + --fa: "\f15d"; } + +.fa-sort-alpha-down { + --fa: "\f15d"; } + +.fa-money-bill-wheat { + --fa: "\e52a"; } + +.fa-cookie { + --fa: "\f563"; } + +.fa-arrow-rotate-left { + --fa: "\f0e2"; } + +.fa-arrow-left-rotate { + --fa: "\f0e2"; } + +.fa-arrow-rotate-back { + --fa: "\f0e2"; } + +.fa-arrow-rotate-backward { + --fa: "\f0e2"; } + +.fa-undo { + --fa: "\f0e2"; } + +.fa-hard-drive { + --fa: "\f0a0"; } + +.fa-hdd { + --fa: "\f0a0"; } + +.fa-face-grin-squint-tears { + --fa: "\f586"; } + +.fa-grin-squint-tears { + --fa: "\f586"; } + +.fa-dumbbell { + --fa: "\f44b"; } + +.fa-rectangle-list { + --fa: "\f022"; } + +.fa-list-alt { + --fa: "\f022"; } + +.fa-tarp-droplet { + --fa: "\e57c"; } + +.fa-house-medical-circle-check { + --fa: "\e511"; } + +.fa-person-skiing-nordic { + --fa: "\f7ca"; } + +.fa-skiing-nordic { + --fa: "\f7ca"; } + +.fa-calendar-plus { + --fa: "\f271"; } + +.fa-plane-arrival { + --fa: "\f5af"; } + +.fa-circle-left { + --fa: "\f359"; } + +.fa-arrow-alt-circle-left { + --fa: "\f359"; } + +.fa-train-subway { + --fa: "\f239"; } + +.fa-subway { + --fa: "\f239"; } + +.fa-chart-gantt { + --fa: "\e0e4"; } + +.fa-indian-rupee-sign { + --fa: "\e1bc"; } + +.fa-indian-rupee { + --fa: "\e1bc"; } + +.fa-inr { + --fa: "\e1bc"; } + +.fa-crop-simple { + --fa: "\f565"; } + +.fa-crop-alt { + --fa: "\f565"; } + +.fa-money-bill-1 { + --fa: "\f3d1"; } + +.fa-money-bill-alt { + --fa: "\f3d1"; } + +.fa-left-long { + --fa: "\f30a"; } + +.fa-long-arrow-alt-left { + --fa: "\f30a"; } + +.fa-dna { + --fa: "\f471"; } + +.fa-virus-slash { + --fa: "\e075"; } + +.fa-minus { + --fa: "\f068"; } + +.fa-subtract { + --fa: "\f068"; } + +.fa-chess { + --fa: "\f439"; } + +.fa-arrow-left-long { + --fa: "\f177"; } + +.fa-long-arrow-left { + --fa: "\f177"; } + +.fa-plug-circle-check { + --fa: "\e55c"; } + +.fa-street-view { + --fa: "\f21d"; } + +.fa-franc-sign { + --fa: "\e18f"; } + +.fa-volume-off { + --fa: "\f026"; } + +.fa-hands-asl-interpreting { + --fa: "\f2a3"; } + +.fa-american-sign-language-interpreting { + --fa: "\f2a3"; } + +.fa-asl-interpreting { + --fa: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting { + --fa: "\f2a3"; } + +.fa-gear { + --fa: "\f013"; } + +.fa-cog { + --fa: "\f013"; } + +.fa-droplet-slash { + --fa: "\f5c7"; } + +.fa-tint-slash { + --fa: "\f5c7"; } + +.fa-mosque { + --fa: "\f678"; } + +.fa-mosquito { + --fa: "\e52b"; } + +.fa-star-of-david { + --fa: "\f69a"; } + +.fa-person-military-rifle { + --fa: "\e54b"; } + +.fa-cart-shopping { + --fa: "\f07a"; } + +.fa-shopping-cart { + --fa: "\f07a"; } + +.fa-vials { + --fa: "\f493"; } + +.fa-plug-circle-plus { + --fa: "\e55f"; } + +.fa-place-of-worship { + --fa: "\f67f"; } + +.fa-grip-vertical { + --fa: "\f58e"; } + +.fa-hexagon-nodes { + --fa: "\e699"; } + +.fa-arrow-turn-up { + --fa: "\f148"; } + +.fa-level-up { + --fa: "\f148"; } + +.fa-u { + --fa: "\55"; } + +.fa-square-root-variable { + --fa: "\f698"; } + +.fa-square-root-alt { + --fa: "\f698"; } + +.fa-clock { + --fa: "\f017"; } + +.fa-clock-four { + --fa: "\f017"; } + +.fa-backward-step { + --fa: "\f048"; } + +.fa-step-backward { + --fa: "\f048"; } + +.fa-pallet { + --fa: "\f482"; } + +.fa-faucet { + --fa: "\e005"; } + +.fa-baseball-bat-ball { + --fa: "\f432"; } + +.fa-s { + --fa: "\53"; } + +.fa-timeline { + --fa: "\e29c"; } + +.fa-keyboard { + --fa: "\f11c"; } + +.fa-caret-down { + --fa: "\f0d7"; } + +.fa-house-chimney-medical { + --fa: "\f7f2"; } + +.fa-clinic-medical { + --fa: "\f7f2"; } + +.fa-temperature-three-quarters { + --fa: "\f2c8"; } + +.fa-temperature-3 { + --fa: "\f2c8"; } + +.fa-thermometer-3 { + --fa: "\f2c8"; } + +.fa-thermometer-three-quarters { + --fa: "\f2c8"; } + +.fa-mobile-screen { + --fa: "\f3cf"; } + +.fa-mobile-android-alt { + --fa: "\f3cf"; } + +.fa-plane-up { + --fa: "\e22d"; } + +.fa-piggy-bank { + --fa: "\f4d3"; } + +.fa-battery-half { + --fa: "\f242"; } + +.fa-battery-3 { + --fa: "\f242"; } + +.fa-mountain-city { + --fa: "\e52e"; } + +.fa-coins { + --fa: "\f51e"; } + +.fa-khanda { + --fa: "\f66d"; } + +.fa-sliders { + --fa: "\f1de"; } + +.fa-sliders-h { + --fa: "\f1de"; } + +.fa-folder-tree { + --fa: "\f802"; } + +.fa-network-wired { + --fa: "\f6ff"; } + +.fa-map-pin { + --fa: "\f276"; } + +.fa-hamsa { + --fa: "\f665"; } + +.fa-cent-sign { + --fa: "\e3f5"; } + +.fa-flask { + --fa: "\f0c3"; } + +.fa-person-pregnant { + --fa: "\e31e"; } + +.fa-wand-sparkles { + --fa: "\f72b"; } + +.fa-ellipsis-vertical { + --fa: "\f142"; } + +.fa-ellipsis-v { + --fa: "\f142"; } + +.fa-ticket { + --fa: "\f145"; } + +.fa-power-off { + --fa: "\f011"; } + +.fa-right-long { + --fa: "\f30b"; } + +.fa-long-arrow-alt-right { + --fa: "\f30b"; } + +.fa-flag-usa { + --fa: "\f74d"; } + +.fa-laptop-file { + --fa: "\e51d"; } + +.fa-tty { + --fa: "\f1e4"; } + +.fa-teletype { + --fa: "\f1e4"; } + +.fa-diagram-next { + --fa: "\e476"; } + +.fa-person-rifle { + --fa: "\e54e"; } + +.fa-house-medical-circle-exclamation { + --fa: "\e512"; } + +.fa-closed-captioning { + --fa: "\f20a"; } + +.fa-person-hiking { + --fa: "\f6ec"; } + +.fa-hiking { + --fa: "\f6ec"; } + +.fa-venus-double { + --fa: "\f226"; } + +.fa-images { + --fa: "\f302"; } + +.fa-calculator { + --fa: "\f1ec"; } + +.fa-people-pulling { + --fa: "\e535"; } + +.fa-n { + --fa: "\4e"; } + +.fa-cable-car { + --fa: "\f7da"; } + +.fa-tram { + --fa: "\f7da"; } + +.fa-cloud-rain { + --fa: "\f73d"; } + +.fa-building-circle-xmark { + --fa: "\e4d4"; } + +.fa-ship { + --fa: "\f21a"; } + +.fa-arrows-down-to-line { + --fa: "\e4b8"; } + +.fa-download { + --fa: "\f019"; } + +.fa-face-grin { + --fa: "\f580"; } + +.fa-grin { + --fa: "\f580"; } + +.fa-delete-left { + --fa: "\f55a"; } + +.fa-backspace { + --fa: "\f55a"; } + +.fa-eye-dropper { + --fa: "\f1fb"; } + +.fa-eye-dropper-empty { + --fa: "\f1fb"; } + +.fa-eyedropper { + --fa: "\f1fb"; } + +.fa-file-circle-check { + --fa: "\e5a0"; } + +.fa-forward { + --fa: "\f04e"; } + +.fa-mobile { + --fa: "\f3ce"; } + +.fa-mobile-android { + --fa: "\f3ce"; } + +.fa-mobile-phone { + --fa: "\f3ce"; } + +.fa-face-meh { + --fa: "\f11a"; } + +.fa-meh { + --fa: "\f11a"; } + +.fa-align-center { + --fa: "\f037"; } + +.fa-book-skull { + --fa: "\f6b7"; } + +.fa-book-dead { + --fa: "\f6b7"; } + +.fa-id-card { + --fa: "\f2c2"; } + +.fa-drivers-license { + --fa: "\f2c2"; } + +.fa-outdent { + --fa: "\f03b"; } + +.fa-dedent { + --fa: "\f03b"; } + +.fa-heart-circle-exclamation { + --fa: "\e4fe"; } + +.fa-house { + --fa: "\f015"; } + +.fa-home { + --fa: "\f015"; } + +.fa-home-alt { + --fa: "\f015"; } + +.fa-home-lg-alt { + --fa: "\f015"; } + +.fa-calendar-week { + --fa: "\f784"; } + +.fa-laptop-medical { + --fa: "\f812"; } + +.fa-b { + --fa: "\42"; } + +.fa-file-medical { + --fa: "\f477"; } + +.fa-dice-one { + --fa: "\f525"; } + +.fa-kiwi-bird { + --fa: "\f535"; } + +.fa-arrow-right-arrow-left { + --fa: "\f0ec"; } + +.fa-exchange { + --fa: "\f0ec"; } + +.fa-rotate-right { + --fa: "\f2f9"; } + +.fa-redo-alt { + --fa: "\f2f9"; } + +.fa-rotate-forward { + --fa: "\f2f9"; } + +.fa-utensils { + --fa: "\f2e7"; } + +.fa-cutlery { + --fa: "\f2e7"; } + +.fa-arrow-up-wide-short { + --fa: "\f161"; } + +.fa-sort-amount-up { + --fa: "\f161"; } + +.fa-mill-sign { + --fa: "\e1ed"; } + +.fa-bowl-rice { + --fa: "\e2eb"; } + +.fa-skull { + --fa: "\f54c"; } + +.fa-tower-broadcast { + --fa: "\f519"; } + +.fa-broadcast-tower { + --fa: "\f519"; } + +.fa-truck-pickup { + --fa: "\f63c"; } + +.fa-up-long { + --fa: "\f30c"; } + +.fa-long-arrow-alt-up { + --fa: "\f30c"; } + +.fa-stop { + --fa: "\f04d"; } + +.fa-code-merge { + --fa: "\f387"; } + +.fa-upload { + --fa: "\f093"; } + +.fa-hurricane { + --fa: "\f751"; } + +.fa-mound { + --fa: "\e52d"; } + +.fa-toilet-portable { + --fa: "\e583"; } + +.fa-compact-disc { + --fa: "\f51f"; } + +.fa-file-arrow-down { + --fa: "\f56d"; } + +.fa-file-download { + --fa: "\f56d"; } + +.fa-caravan { + --fa: "\f8ff"; } + +.fa-shield-cat { + --fa: "\e572"; } + +.fa-bolt { + --fa: "\f0e7"; } + +.fa-zap { + --fa: "\f0e7"; } + +.fa-glass-water { + --fa: "\e4f4"; } + +.fa-oil-well { + --fa: "\e532"; } + +.fa-vault { + --fa: "\e2c5"; } + +.fa-mars { + --fa: "\f222"; } + +.fa-toilet { + --fa: "\f7d8"; } + +.fa-plane-circle-xmark { + --fa: "\e557"; } + +.fa-yen-sign { + --fa: "\f157"; } + +.fa-cny { + --fa: "\f157"; } + +.fa-jpy { + --fa: "\f157"; } + +.fa-rmb { + --fa: "\f157"; } + +.fa-yen { + --fa: "\f157"; } + +.fa-ruble-sign { + --fa: "\f158"; } + +.fa-rouble { + --fa: "\f158"; } + +.fa-rub { + --fa: "\f158"; } + +.fa-ruble { + --fa: "\f158"; } + +.fa-sun { + --fa: "\f185"; } + +.fa-guitar { + --fa: "\f7a6"; } + +.fa-face-laugh-wink { + --fa: "\f59c"; } + +.fa-laugh-wink { + --fa: "\f59c"; } + +.fa-horse-head { + --fa: "\f7ab"; } + +.fa-bore-hole { + --fa: "\e4c3"; } + +.fa-industry { + --fa: "\f275"; } + +.fa-circle-down { + --fa: "\f358"; } + +.fa-arrow-alt-circle-down { + --fa: "\f358"; } + +.fa-arrows-turn-to-dots { + --fa: "\e4c1"; } + +.fa-florin-sign { + --fa: "\e184"; } + +.fa-arrow-down-short-wide { + --fa: "\f884"; } + +.fa-sort-amount-desc { + --fa: "\f884"; } + +.fa-sort-amount-down-alt { + --fa: "\f884"; } + +.fa-less-than { + --fa: "\3c"; } + +.fa-angle-down { + --fa: "\f107"; } + +.fa-car-tunnel { + --fa: "\e4de"; } + +.fa-head-side-cough { + --fa: "\e061"; } + +.fa-grip-lines { + --fa: "\f7a4"; } + +.fa-thumbs-down { + --fa: "\f165"; } + +.fa-user-lock { + --fa: "\f502"; } + +.fa-arrow-right-long { + --fa: "\f178"; } + +.fa-long-arrow-right { + --fa: "\f178"; } + +.fa-anchor-circle-xmark { + --fa: "\e4ac"; } + +.fa-ellipsis { + --fa: "\f141"; } + +.fa-ellipsis-h { + --fa: "\f141"; } + +.fa-chess-pawn { + --fa: "\f443"; } + +.fa-kit-medical { + --fa: "\f479"; } + +.fa-first-aid { + --fa: "\f479"; } + +.fa-person-through-window { + --fa: "\e5a9"; } + +.fa-toolbox { + --fa: "\f552"; } + +.fa-hands-holding-circle { + --fa: "\e4fb"; } + +.fa-bug { + --fa: "\f188"; } + +.fa-credit-card { + --fa: "\f09d"; } + +.fa-credit-card-alt { + --fa: "\f09d"; } + +.fa-car { + --fa: "\f1b9"; } + +.fa-automobile { + --fa: "\f1b9"; } + +.fa-hand-holding-hand { + --fa: "\e4f7"; } + +.fa-book-open-reader { + --fa: "\f5da"; } + +.fa-book-reader { + --fa: "\f5da"; } + +.fa-mountain-sun { + --fa: "\e52f"; } + +.fa-arrows-left-right-to-line { + --fa: "\e4ba"; } + +.fa-dice-d20 { + --fa: "\f6cf"; } + +.fa-truck-droplet { + --fa: "\e58c"; } + +.fa-file-circle-xmark { + --fa: "\e5a1"; } + +.fa-temperature-arrow-up { + --fa: "\e040"; } + +.fa-temperature-up { + --fa: "\e040"; } + +.fa-medal { + --fa: "\f5a2"; } + +.fa-bed { + --fa: "\f236"; } + +.fa-square-h { + --fa: "\f0fd"; } + +.fa-h-square { + --fa: "\f0fd"; } + +.fa-podcast { + --fa: "\f2ce"; } + +.fa-temperature-full { + --fa: "\f2c7"; } + +.fa-temperature-4 { + --fa: "\f2c7"; } + +.fa-thermometer-4 { + --fa: "\f2c7"; } + +.fa-thermometer-full { + --fa: "\f2c7"; } + +.fa-bell { + --fa: "\f0f3"; } + +.fa-superscript { + --fa: "\f12b"; } + +.fa-plug-circle-xmark { + --fa: "\e560"; } + +.fa-star-of-life { + --fa: "\f621"; } + +.fa-phone-slash { + --fa: "\f3dd"; } + +.fa-paint-roller { + --fa: "\f5aa"; } + +.fa-handshake-angle { + --fa: "\f4c4"; } + +.fa-hands-helping { + --fa: "\f4c4"; } + +.fa-location-dot { + --fa: "\f3c5"; } + +.fa-map-marker-alt { + --fa: "\f3c5"; } + +.fa-file { + --fa: "\f15b"; } + +.fa-greater-than { + --fa: "\3e"; } + +.fa-person-swimming { + --fa: "\f5c4"; } + +.fa-swimmer { + --fa: "\f5c4"; } + +.fa-arrow-down { + --fa: "\f063"; } + +.fa-droplet { + --fa: "\f043"; } + +.fa-tint { + --fa: "\f043"; } + +.fa-eraser { + --fa: "\f12d"; } + +.fa-earth-americas { + --fa: "\f57d"; } + +.fa-earth { + --fa: "\f57d"; } + +.fa-earth-america { + --fa: "\f57d"; } + +.fa-globe-americas { + --fa: "\f57d"; } + +.fa-person-burst { + --fa: "\e53b"; } + +.fa-dove { + --fa: "\f4ba"; } + +.fa-battery-empty { + --fa: "\f244"; } + +.fa-battery-0 { + --fa: "\f244"; } + +.fa-socks { + --fa: "\f696"; } + +.fa-inbox { + --fa: "\f01c"; } + +.fa-section { + --fa: "\e447"; } + +.fa-gauge-high { + --fa: "\f625"; } + +.fa-tachometer-alt { + --fa: "\f625"; } + +.fa-tachometer-alt-fast { + --fa: "\f625"; } + +.fa-envelope-open-text { + --fa: "\f658"; } + +.fa-hospital { + --fa: "\f0f8"; } + +.fa-hospital-alt { + --fa: "\f0f8"; } + +.fa-hospital-wide { + --fa: "\f0f8"; } + +.fa-wine-bottle { + --fa: "\f72f"; } + +.fa-chess-rook { + --fa: "\f447"; } + +.fa-bars-staggered { + --fa: "\f550"; } + +.fa-reorder { + --fa: "\f550"; } + +.fa-stream { + --fa: "\f550"; } + +.fa-dharmachakra { + --fa: "\f655"; } + +.fa-hotdog { + --fa: "\f80f"; } + +.fa-person-walking-with-cane { + --fa: "\f29d"; } + +.fa-blind { + --fa: "\f29d"; } + +.fa-drum { + --fa: "\f569"; } + +.fa-ice-cream { + --fa: "\f810"; } + +.fa-heart-circle-bolt { + --fa: "\e4fc"; } + +.fa-fax { + --fa: "\f1ac"; } + +.fa-paragraph { + --fa: "\f1dd"; } + +.fa-check-to-slot { + --fa: "\f772"; } + +.fa-vote-yea { + --fa: "\f772"; } + +.fa-star-half { + --fa: "\f089"; } + +.fa-boxes-stacked { + --fa: "\f468"; } + +.fa-boxes { + --fa: "\f468"; } + +.fa-boxes-alt { + --fa: "\f468"; } + +.fa-link { + --fa: "\f0c1"; } + +.fa-chain { + --fa: "\f0c1"; } + +.fa-ear-listen { + --fa: "\f2a2"; } + +.fa-assistive-listening-systems { + --fa: "\f2a2"; } + +.fa-tree-city { + --fa: "\e587"; } + +.fa-play { + --fa: "\f04b"; } + +.fa-font { + --fa: "\f031"; } + +.fa-table-cells-row-lock { + --fa: "\e67a"; } + +.fa-rupiah-sign { + --fa: "\e23d"; } + +.fa-magnifying-glass { + --fa: "\f002"; } + +.fa-search { + --fa: "\f002"; } + +.fa-table-tennis-paddle-ball { + --fa: "\f45d"; } + +.fa-ping-pong-paddle-ball { + --fa: "\f45d"; } + +.fa-table-tennis { + --fa: "\f45d"; } + +.fa-person-dots-from-line { + --fa: "\f470"; } + +.fa-diagnoses { + --fa: "\f470"; } + +.fa-trash-can-arrow-up { + --fa: "\f82a"; } + +.fa-trash-restore-alt { + --fa: "\f82a"; } + +.fa-naira-sign { + --fa: "\e1f6"; } + +.fa-cart-arrow-down { + --fa: "\f218"; } + +.fa-walkie-talkie { + --fa: "\f8ef"; } + +.fa-file-pen { + --fa: "\f31c"; } + +.fa-file-edit { + --fa: "\f31c"; } + +.fa-receipt { + --fa: "\f543"; } + +.fa-square-pen { + --fa: "\f14b"; } + +.fa-pen-square { + --fa: "\f14b"; } + +.fa-pencil-square { + --fa: "\f14b"; } + +.fa-suitcase-rolling { + --fa: "\f5c1"; } + +.fa-person-circle-exclamation { + --fa: "\e53f"; } + +.fa-chevron-down { + --fa: "\f078"; } + +.fa-battery-full { + --fa: "\f240"; } + +.fa-battery { + --fa: "\f240"; } + +.fa-battery-5 { + --fa: "\f240"; } + +.fa-skull-crossbones { + --fa: "\f714"; } + +.fa-code-compare { + --fa: "\e13a"; } + +.fa-list-ul { + --fa: "\f0ca"; } + +.fa-list-dots { + --fa: "\f0ca"; } + +.fa-school-lock { + --fa: "\e56f"; } + +.fa-tower-cell { + --fa: "\e585"; } + +.fa-down-long { + --fa: "\f309"; } + +.fa-long-arrow-alt-down { + --fa: "\f309"; } + +.fa-ranking-star { + --fa: "\e561"; } + +.fa-chess-king { + --fa: "\f43f"; } + +.fa-person-harassing { + --fa: "\e549"; } + +.fa-brazilian-real-sign { + --fa: "\e46c"; } + +.fa-landmark-dome { + --fa: "\f752"; } + +.fa-landmark-alt { + --fa: "\f752"; } + +.fa-arrow-up { + --fa: "\f062"; } + +.fa-tv { + --fa: "\f26c"; } + +.fa-television { + --fa: "\f26c"; } + +.fa-tv-alt { + --fa: "\f26c"; } + +.fa-shrimp { + --fa: "\e448"; } + +.fa-list-check { + --fa: "\f0ae"; } + +.fa-tasks { + --fa: "\f0ae"; } + +.fa-jug-detergent { + --fa: "\e519"; } + +.fa-circle-user { + --fa: "\f2bd"; } + +.fa-user-circle { + --fa: "\f2bd"; } + +.fa-user-shield { + --fa: "\f505"; } + +.fa-wind { + --fa: "\f72e"; } + +.fa-car-burst { + --fa: "\f5e1"; } + +.fa-car-crash { + --fa: "\f5e1"; } + +.fa-y { + --fa: "\59"; } + +.fa-person-snowboarding { + --fa: "\f7ce"; } + +.fa-snowboarding { + --fa: "\f7ce"; } + +.fa-truck-fast { + --fa: "\f48b"; } + +.fa-shipping-fast { + --fa: "\f48b"; } + +.fa-fish { + --fa: "\f578"; } + +.fa-user-graduate { + --fa: "\f501"; } + +.fa-circle-half-stroke { + --fa: "\f042"; } + +.fa-adjust { + --fa: "\f042"; } + +.fa-clapperboard { + --fa: "\e131"; } + +.fa-circle-radiation { + --fa: "\f7ba"; } + +.fa-radiation-alt { + --fa: "\f7ba"; } + +.fa-baseball { + --fa: "\f433"; } + +.fa-baseball-ball { + --fa: "\f433"; } + +.fa-jet-fighter-up { + --fa: "\e518"; } + +.fa-diagram-project { + --fa: "\f542"; } + +.fa-project-diagram { + --fa: "\f542"; } + +.fa-copy { + --fa: "\f0c5"; } + +.fa-volume-xmark { + --fa: "\f6a9"; } + +.fa-volume-mute { + --fa: "\f6a9"; } + +.fa-volume-times { + --fa: "\f6a9"; } + +.fa-hand-sparkles { + --fa: "\e05d"; } + +.fa-grip { + --fa: "\f58d"; } + +.fa-grip-horizontal { + --fa: "\f58d"; } + +.fa-share-from-square { + --fa: "\f14d"; } + +.fa-share-square { + --fa: "\f14d"; } + +.fa-child-combatant { + --fa: "\e4e0"; } + +.fa-child-rifle { + --fa: "\e4e0"; } + +.fa-gun { + --fa: "\e19b"; } + +.fa-square-phone { + --fa: "\f098"; } + +.fa-phone-square { + --fa: "\f098"; } + +.fa-plus { + --fa: "\2b"; } + +.fa-add { + --fa: "\2b"; } + +.fa-expand { + --fa: "\f065"; } + +.fa-computer { + --fa: "\e4e5"; } + +.fa-xmark { + --fa: "\f00d"; } + +.fa-close { + --fa: "\f00d"; } + +.fa-multiply { + --fa: "\f00d"; } + +.fa-remove { + --fa: "\f00d"; } + +.fa-times { + --fa: "\f00d"; } + +.fa-arrows-up-down-left-right { + --fa: "\f047"; } + +.fa-arrows { + --fa: "\f047"; } + +.fa-chalkboard-user { + --fa: "\f51c"; } + +.fa-chalkboard-teacher { + --fa: "\f51c"; } + +.fa-peso-sign { + --fa: "\e222"; } + +.fa-building-shield { + --fa: "\e4d8"; } + +.fa-baby { + --fa: "\f77c"; } + +.fa-users-line { + --fa: "\e592"; } + +.fa-quote-left { + --fa: "\f10d"; } + +.fa-quote-left-alt { + --fa: "\f10d"; } + +.fa-tractor { + --fa: "\f722"; } + +.fa-trash-arrow-up { + --fa: "\f829"; } + +.fa-trash-restore { + --fa: "\f829"; } + +.fa-arrow-down-up-lock { + --fa: "\e4b0"; } + +.fa-lines-leaning { + --fa: "\e51e"; } + +.fa-ruler-combined { + --fa: "\f546"; } + +.fa-copyright { + --fa: "\f1f9"; } + +.fa-equals { + --fa: "\3d"; } + +.fa-blender { + --fa: "\f517"; } + +.fa-teeth { + --fa: "\f62e"; } + +.fa-shekel-sign { + --fa: "\f20b"; } + +.fa-ils { + --fa: "\f20b"; } + +.fa-shekel { + --fa: "\f20b"; } + +.fa-sheqel { + --fa: "\f20b"; } + +.fa-sheqel-sign { + --fa: "\f20b"; } + +.fa-map { + --fa: "\f279"; } + +.fa-rocket { + --fa: "\f135"; } + +.fa-photo-film { + --fa: "\f87c"; } + +.fa-photo-video { + --fa: "\f87c"; } + +.fa-folder-minus { + --fa: "\f65d"; } + +.fa-hexagon-nodes-bolt { + --fa: "\e69a"; } + +.fa-store { + --fa: "\f54e"; } + +.fa-arrow-trend-up { + --fa: "\e098"; } + +.fa-plug-circle-minus { + --fa: "\e55e"; } + +.fa-sign-hanging { + --fa: "\f4d9"; } + +.fa-sign { + --fa: "\f4d9"; } + +.fa-bezier-curve { + --fa: "\f55b"; } + +.fa-bell-slash { + --fa: "\f1f6"; } + +.fa-tablet { + --fa: "\f3fb"; } + +.fa-tablet-android { + --fa: "\f3fb"; } + +.fa-school-flag { + --fa: "\e56e"; } + +.fa-fill { + --fa: "\f575"; } + +.fa-angle-up { + --fa: "\f106"; } + +.fa-drumstick-bite { + --fa: "\f6d7"; } + +.fa-holly-berry { + --fa: "\f7aa"; } + +.fa-chevron-left { + --fa: "\f053"; } + +.fa-bacteria { + --fa: "\e059"; } + +.fa-hand-lizard { + --fa: "\f258"; } + +.fa-notdef { + --fa: "\e1fe"; } + +.fa-disease { + --fa: "\f7fa"; } + +.fa-briefcase-medical { + --fa: "\f469"; } + +.fa-genderless { + --fa: "\f22d"; } + +.fa-chevron-right { + --fa: "\f054"; } + +.fa-retweet { + --fa: "\f079"; } + +.fa-car-rear { + --fa: "\f5de"; } + +.fa-car-alt { + --fa: "\f5de"; } + +.fa-pump-soap { + --fa: "\e06b"; } + +.fa-video-slash { + --fa: "\f4e2"; } + +.fa-battery-quarter { + --fa: "\f243"; } + +.fa-battery-2 { + --fa: "\f243"; } + +.fa-radio { + --fa: "\f8d7"; } + +.fa-baby-carriage { + --fa: "\f77d"; } + +.fa-carriage-baby { + --fa: "\f77d"; } + +.fa-traffic-light { + --fa: "\f637"; } + +.fa-thermometer { + --fa: "\f491"; } + +.fa-vr-cardboard { + --fa: "\f729"; } + +.fa-hand-middle-finger { + --fa: "\f806"; } + +.fa-percent { + --fa: "\25"; } + +.fa-percentage { + --fa: "\25"; } + +.fa-truck-moving { + --fa: "\f4df"; } + +.fa-glass-water-droplet { + --fa: "\e4f5"; } + +.fa-display { + --fa: "\e163"; } + +.fa-face-smile { + --fa: "\f118"; } + +.fa-smile { + --fa: "\f118"; } + +.fa-thumbtack { + --fa: "\f08d"; } + +.fa-thumb-tack { + --fa: "\f08d"; } + +.fa-trophy { + --fa: "\f091"; } + +.fa-person-praying { + --fa: "\f683"; } + +.fa-pray { + --fa: "\f683"; } + +.fa-hammer { + --fa: "\f6e3"; } + +.fa-hand-peace { + --fa: "\f25b"; } + +.fa-rotate { + --fa: "\f2f1"; } + +.fa-sync-alt { + --fa: "\f2f1"; } + +.fa-spinner { + --fa: "\f110"; } + +.fa-robot { + --fa: "\f544"; } + +.fa-peace { + --fa: "\f67c"; } + +.fa-gears { + --fa: "\f085"; } + +.fa-cogs { + --fa: "\f085"; } + +.fa-warehouse { + --fa: "\f494"; } + +.fa-arrow-up-right-dots { + --fa: "\e4b7"; } + +.fa-splotch { + --fa: "\f5bc"; } + +.fa-face-grin-hearts { + --fa: "\f584"; } + +.fa-grin-hearts { + --fa: "\f584"; } + +.fa-dice-four { + --fa: "\f524"; } + +.fa-sim-card { + --fa: "\f7c4"; } + +.fa-transgender { + --fa: "\f225"; } + +.fa-transgender-alt { + --fa: "\f225"; } + +.fa-mercury { + --fa: "\f223"; } + +.fa-arrow-turn-down { + --fa: "\f149"; } + +.fa-level-down { + --fa: "\f149"; } + +.fa-person-falling-burst { + --fa: "\e547"; } + +.fa-award { + --fa: "\f559"; } + +.fa-ticket-simple { + --fa: "\f3ff"; } + +.fa-ticket-alt { + --fa: "\f3ff"; } + +.fa-building { + --fa: "\f1ad"; } + +.fa-angles-left { + --fa: "\f100"; } + +.fa-angle-double-left { + --fa: "\f100"; } + +.fa-qrcode { + --fa: "\f029"; } + +.fa-clock-rotate-left { + --fa: "\f1da"; } + +.fa-history { + --fa: "\f1da"; } + +.fa-face-grin-beam-sweat { + --fa: "\f583"; } + +.fa-grin-beam-sweat { + --fa: "\f583"; } + +.fa-file-export { + --fa: "\f56e"; } + +.fa-arrow-right-from-file { + --fa: "\f56e"; } + +.fa-shield { + --fa: "\f132"; } + +.fa-shield-blank { + --fa: "\f132"; } + +.fa-arrow-up-short-wide { + --fa: "\f885"; } + +.fa-sort-amount-up-alt { + --fa: "\f885"; } + +.fa-comment-nodes { + --fa: "\e696"; } + +.fa-house-medical { + --fa: "\e3b2"; } + +.fa-golf-ball-tee { + --fa: "\f450"; } + +.fa-golf-ball { + --fa: "\f450"; } + +.fa-circle-chevron-left { + --fa: "\f137"; } + +.fa-chevron-circle-left { + --fa: "\f137"; } + +.fa-house-chimney-window { + --fa: "\e00d"; } + +.fa-pen-nib { + --fa: "\f5ad"; } + +.fa-tent-arrow-turn-left { + --fa: "\e580"; } + +.fa-tents { + --fa: "\e582"; } + +.fa-wand-magic { + --fa: "\f0d0"; } + +.fa-magic { + --fa: "\f0d0"; } + +.fa-dog { + --fa: "\f6d3"; } + +.fa-carrot { + --fa: "\f787"; } + +.fa-moon { + --fa: "\f186"; } + +.fa-wine-glass-empty { + --fa: "\f5ce"; } + +.fa-wine-glass-alt { + --fa: "\f5ce"; } + +.fa-cheese { + --fa: "\f7ef"; } + +.fa-yin-yang { + --fa: "\f6ad"; } + +.fa-music { + --fa: "\f001"; } + +.fa-code-commit { + --fa: "\f386"; } + +.fa-temperature-low { + --fa: "\f76b"; } + +.fa-person-biking { + --fa: "\f84a"; } + +.fa-biking { + --fa: "\f84a"; } + +.fa-broom { + --fa: "\f51a"; } + +.fa-shield-heart { + --fa: "\e574"; } + +.fa-gopuram { + --fa: "\f664"; } + +.fa-earth-oceania { + --fa: "\e47b"; } + +.fa-globe-oceania { + --fa: "\e47b"; } + +.fa-square-xmark { + --fa: "\f2d3"; } + +.fa-times-square { + --fa: "\f2d3"; } + +.fa-xmark-square { + --fa: "\f2d3"; } + +.fa-hashtag { + --fa: "\23"; } + +.fa-up-right-and-down-left-from-center { + --fa: "\f424"; } + +.fa-expand-alt { + --fa: "\f424"; } + +.fa-oil-can { + --fa: "\f613"; } + +.fa-t { + --fa: "\54"; } + +.fa-hippo { + --fa: "\f6ed"; } + +.fa-chart-column { + --fa: "\e0e3"; } + +.fa-infinity { + --fa: "\f534"; } + +.fa-vial-circle-check { + --fa: "\e596"; } + +.fa-person-arrow-down-to-line { + --fa: "\e538"; } + +.fa-voicemail { + --fa: "\f897"; } + +.fa-fan { + --fa: "\f863"; } + +.fa-person-walking-luggage { + --fa: "\e554"; } + +.fa-up-down { + --fa: "\f338"; } + +.fa-arrows-alt-v { + --fa: "\f338"; } + +.fa-cloud-moon-rain { + --fa: "\f73c"; } + +.fa-calendar { + --fa: "\f133"; } + +.fa-trailer { + --fa: "\e041"; } + +.fa-bahai { + --fa: "\f666"; } + +.fa-haykal { + --fa: "\f666"; } + +.fa-sd-card { + --fa: "\f7c2"; } + +.fa-dragon { + --fa: "\f6d5"; } + +.fa-shoe-prints { + --fa: "\f54b"; } + +.fa-circle-plus { + --fa: "\f055"; } + +.fa-plus-circle { + --fa: "\f055"; } + +.fa-face-grin-tongue-wink { + --fa: "\f58b"; } + +.fa-grin-tongue-wink { + --fa: "\f58b"; } + +.fa-hand-holding { + --fa: "\f4bd"; } + +.fa-plug-circle-exclamation { + --fa: "\e55d"; } + +.fa-link-slash { + --fa: "\f127"; } + +.fa-chain-broken { + --fa: "\f127"; } + +.fa-chain-slash { + --fa: "\f127"; } + +.fa-unlink { + --fa: "\f127"; } + +.fa-clone { + --fa: "\f24d"; } + +.fa-person-walking-arrow-loop-left { + --fa: "\e551"; } + +.fa-arrow-up-z-a { + --fa: "\f882"; } + +.fa-sort-alpha-up-alt { + --fa: "\f882"; } + +.fa-fire-flame-curved { + --fa: "\f7e4"; } + +.fa-fire-alt { + --fa: "\f7e4"; } + +.fa-tornado { + --fa: "\f76f"; } + +.fa-file-circle-plus { + --fa: "\e494"; } + +.fa-book-quran { + --fa: "\f687"; } + +.fa-quran { + --fa: "\f687"; } + +.fa-anchor { + --fa: "\f13d"; } + +.fa-border-all { + --fa: "\f84c"; } + +.fa-face-angry { + --fa: "\f556"; } + +.fa-angry { + --fa: "\f556"; } + +.fa-cookie-bite { + --fa: "\f564"; } + +.fa-arrow-trend-down { + --fa: "\e097"; } + +.fa-rss { + --fa: "\f09e"; } + +.fa-feed { + --fa: "\f09e"; } + +.fa-draw-polygon { + --fa: "\f5ee"; } + +.fa-scale-balanced { + --fa: "\f24e"; } + +.fa-balance-scale { + --fa: "\f24e"; } + +.fa-gauge-simple-high { + --fa: "\f62a"; } + +.fa-tachometer { + --fa: "\f62a"; } + +.fa-tachometer-fast { + --fa: "\f62a"; } + +.fa-shower { + --fa: "\f2cc"; } + +.fa-desktop { + --fa: "\f390"; } + +.fa-desktop-alt { + --fa: "\f390"; } + +.fa-m { + --fa: "\4d"; } + +.fa-table-list { + --fa: "\f00b"; } + +.fa-th-list { + --fa: "\f00b"; } + +.fa-comment-sms { + --fa: "\f7cd"; } + +.fa-sms { + --fa: "\f7cd"; } + +.fa-book { + --fa: "\f02d"; } + +.fa-user-plus { + --fa: "\f234"; } + +.fa-check { + --fa: "\f00c"; } + +.fa-battery-three-quarters { + --fa: "\f241"; } + +.fa-battery-4 { + --fa: "\f241"; } + +.fa-house-circle-check { + --fa: "\e509"; } + +.fa-angle-left { + --fa: "\f104"; } + +.fa-diagram-successor { + --fa: "\e47a"; } + +.fa-truck-arrow-right { + --fa: "\e58b"; } + +.fa-arrows-split-up-and-left { + --fa: "\e4bc"; } + +.fa-hand-fist { + --fa: "\f6de"; } + +.fa-fist-raised { + --fa: "\f6de"; } + +.fa-cloud-moon { + --fa: "\f6c3"; } + +.fa-briefcase { + --fa: "\f0b1"; } + +.fa-person-falling { + --fa: "\e546"; } + +.fa-image-portrait { + --fa: "\f3e0"; } + +.fa-portrait { + --fa: "\f3e0"; } + +.fa-user-tag { + --fa: "\f507"; } + +.fa-rug { + --fa: "\e569"; } + +.fa-earth-europe { + --fa: "\f7a2"; } + +.fa-globe-europe { + --fa: "\f7a2"; } + +.fa-cart-flatbed-suitcase { + --fa: "\f59d"; } + +.fa-luggage-cart { + --fa: "\f59d"; } + +.fa-rectangle-xmark { + --fa: "\f410"; } + +.fa-rectangle-times { + --fa: "\f410"; } + +.fa-times-rectangle { + --fa: "\f410"; } + +.fa-window-close { + --fa: "\f410"; } + +.fa-baht-sign { + --fa: "\e0ac"; } + +.fa-book-open { + --fa: "\f518"; } + +.fa-book-journal-whills { + --fa: "\f66a"; } + +.fa-journal-whills { + --fa: "\f66a"; } + +.fa-handcuffs { + --fa: "\e4f8"; } + +.fa-triangle-exclamation { + --fa: "\f071"; } + +.fa-exclamation-triangle { + --fa: "\f071"; } + +.fa-warning { + --fa: "\f071"; } + +.fa-database { + --fa: "\f1c0"; } + +.fa-share { + --fa: "\f064"; } + +.fa-mail-forward { + --fa: "\f064"; } + +.fa-bottle-droplet { + --fa: "\e4c4"; } + +.fa-mask-face { + --fa: "\e1d7"; } + +.fa-hill-rockslide { + --fa: "\e508"; } + +.fa-right-left { + --fa: "\f362"; } + +.fa-exchange-alt { + --fa: "\f362"; } + +.fa-paper-plane { + --fa: "\f1d8"; } + +.fa-road-circle-exclamation { + --fa: "\e565"; } + +.fa-dungeon { + --fa: "\f6d9"; } + +.fa-align-right { + --fa: "\f038"; } + +.fa-money-bill-1-wave { + --fa: "\f53b"; } + +.fa-money-bill-wave-alt { + --fa: "\f53b"; } + +.fa-life-ring { + --fa: "\f1cd"; } + +.fa-hands { + --fa: "\f2a7"; } + +.fa-sign-language { + --fa: "\f2a7"; } + +.fa-signing { + --fa: "\f2a7"; } + +.fa-calendar-day { + --fa: "\f783"; } + +.fa-water-ladder { + --fa: "\f5c5"; } + +.fa-ladder-water { + --fa: "\f5c5"; } + +.fa-swimming-pool { + --fa: "\f5c5"; } + +.fa-arrows-up-down { + --fa: "\f07d"; } + +.fa-arrows-v { + --fa: "\f07d"; } + +.fa-face-grimace { + --fa: "\f57f"; } + +.fa-grimace { + --fa: "\f57f"; } + +.fa-wheelchair-move { + --fa: "\e2ce"; } + +.fa-wheelchair-alt { + --fa: "\e2ce"; } + +.fa-turn-down { + --fa: "\f3be"; } + +.fa-level-down-alt { + --fa: "\f3be"; } + +.fa-person-walking-arrow-right { + --fa: "\e552"; } + +.fa-square-envelope { + --fa: "\f199"; } + +.fa-envelope-square { + --fa: "\f199"; } + +.fa-dice { + --fa: "\f522"; } + +.fa-bowling-ball { + --fa: "\f436"; } + +.fa-brain { + --fa: "\f5dc"; } + +.fa-bandage { + --fa: "\f462"; } + +.fa-band-aid { + --fa: "\f462"; } + +.fa-calendar-minus { + --fa: "\f272"; } + +.fa-circle-xmark { + --fa: "\f057"; } + +.fa-times-circle { + --fa: "\f057"; } + +.fa-xmark-circle { + --fa: "\f057"; } + +.fa-gifts { + --fa: "\f79c"; } + +.fa-hotel { + --fa: "\f594"; } + +.fa-earth-asia { + --fa: "\f57e"; } + +.fa-globe-asia { + --fa: "\f57e"; } + +.fa-id-card-clip { + --fa: "\f47f"; } + +.fa-id-card-alt { + --fa: "\f47f"; } + +.fa-magnifying-glass-plus { + --fa: "\f00e"; } + +.fa-search-plus { + --fa: "\f00e"; } + +.fa-thumbs-up { + --fa: "\f164"; } + +.fa-user-clock { + --fa: "\f4fd"; } + +.fa-hand-dots { + --fa: "\f461"; } + +.fa-allergies { + --fa: "\f461"; } + +.fa-file-invoice { + --fa: "\f570"; } + +.fa-window-minimize { + --fa: "\f2d1"; } + +.fa-mug-saucer { + --fa: "\f0f4"; } + +.fa-coffee { + --fa: "\f0f4"; } + +.fa-brush { + --fa: "\f55d"; } + +.fa-file-half-dashed { + --fa: "\e698"; } + +.fa-mask { + --fa: "\f6fa"; } + +.fa-magnifying-glass-minus { + --fa: "\f010"; } + +.fa-search-minus { + --fa: "\f010"; } + +.fa-ruler-vertical { + --fa: "\f548"; } + +.fa-user-large { + --fa: "\f406"; } + +.fa-user-alt { + --fa: "\f406"; } + +.fa-train-tram { + --fa: "\e5b4"; } + +.fa-user-nurse { + --fa: "\f82f"; } + +.fa-syringe { + --fa: "\f48e"; } + +.fa-cloud-sun { + --fa: "\f6c4"; } + +.fa-stopwatch-20 { + --fa: "\e06f"; } + +.fa-square-full { + --fa: "\f45c"; } + +.fa-magnet { + --fa: "\f076"; } + +.fa-jar { + --fa: "\e516"; } + +.fa-note-sticky { + --fa: "\f249"; } + +.fa-sticky-note { + --fa: "\f249"; } + +.fa-bug-slash { + --fa: "\e490"; } + +.fa-arrow-up-from-water-pump { + --fa: "\e4b6"; } + +.fa-bone { + --fa: "\f5d7"; } + +.fa-table-cells-row-unlock { + --fa: "\e691"; } + +.fa-user-injured { + --fa: "\f728"; } + +.fa-face-sad-tear { + --fa: "\f5b4"; } + +.fa-sad-tear { + --fa: "\f5b4"; } + +.fa-plane { + --fa: "\f072"; } + +.fa-tent-arrows-down { + --fa: "\e581"; } + +.fa-exclamation { + --fa: "\21"; } + +.fa-arrows-spin { + --fa: "\e4bb"; } + +.fa-print { + --fa: "\f02f"; } + +.fa-turkish-lira-sign { + --fa: "\e2bb"; } + +.fa-try { + --fa: "\e2bb"; } + +.fa-turkish-lira { + --fa: "\e2bb"; } + +.fa-dollar-sign { + --fa: "\24"; } + +.fa-dollar { + --fa: "\24"; } + +.fa-usd { + --fa: "\24"; } + +.fa-x { + --fa: "\58"; } + +.fa-magnifying-glass-dollar { + --fa: "\f688"; } + +.fa-search-dollar { + --fa: "\f688"; } + +.fa-users-gear { + --fa: "\f509"; } + +.fa-users-cog { + --fa: "\f509"; } + +.fa-person-military-pointing { + --fa: "\e54a"; } + +.fa-building-columns { + --fa: "\f19c"; } + +.fa-bank { + --fa: "\f19c"; } + +.fa-institution { + --fa: "\f19c"; } + +.fa-museum { + --fa: "\f19c"; } + +.fa-university { + --fa: "\f19c"; } + +.fa-umbrella { + --fa: "\f0e9"; } + +.fa-trowel { + --fa: "\e589"; } + +.fa-d { + --fa: "\44"; } + +.fa-stapler { + --fa: "\e5af"; } + +.fa-masks-theater { + --fa: "\f630"; } + +.fa-theater-masks { + --fa: "\f630"; } + +.fa-kip-sign { + --fa: "\e1c4"; } + +.fa-hand-point-left { + --fa: "\f0a5"; } + +.fa-handshake-simple { + --fa: "\f4c6"; } + +.fa-handshake-alt { + --fa: "\f4c6"; } + +.fa-jet-fighter { + --fa: "\f0fb"; } + +.fa-fighter-jet { + --fa: "\f0fb"; } + +.fa-square-share-nodes { + --fa: "\f1e1"; } + +.fa-share-alt-square { + --fa: "\f1e1"; } + +.fa-barcode { + --fa: "\f02a"; } + +.fa-plus-minus { + --fa: "\e43c"; } + +.fa-video { + --fa: "\f03d"; } + +.fa-video-camera { + --fa: "\f03d"; } + +.fa-graduation-cap { + --fa: "\f19d"; } + +.fa-mortar-board { + --fa: "\f19d"; } + +.fa-hand-holding-medical { + --fa: "\e05c"; } + +.fa-person-circle-check { + --fa: "\e53e"; } + +.fa-turn-up { + --fa: "\f3bf"; } + +.fa-level-up-alt { + --fa: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } diff --git a/__tests__/samples/resources/build/fontawesome/css/solid.css b/__tests__/samples/resources/build/fontawesome/css/solid.css new file mode 100644 index 0000000..6742be3 --- /dev/null +++ b/__tests__/samples/resources/build/fontawesome/css/solid.css @@ -0,0 +1,19 @@ +/*! + * Font Awesome Free 6.7.2 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 2024 Fonticons, Inc. + */ +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } diff --git a/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.ttf b/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..1c10972 Binary files /dev/null and b/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.woff2 b/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..1672102 Binary files /dev/null and b/__tests__/samples/resources/build/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/__tests__/samples/resources/build/grid.css b/__tests__/samples/resources/build/grid.css new file mode 100644 index 0000000..ed5fca8 --- /dev/null +++ b/__tests__/samples/resources/build/grid.css @@ -0,0 +1,325 @@ +@charset "UTF-8"; +/*! + * + * Bryntum Grid 7.2.1 (TRIAL VERSION) + * + * Copyright(c) 2026 Bryntum AB + * https://bryntum.com/contact + * https://bryntum.com/license + * + * Bryntum incorporates third-party code licensed under the MIT and Apache-2.0 licenses. + * See the licenses below or visit https://bryntum.com/products/grid/docs/guide/Grid/licenses + * + * # Third Party Notices + * + * Bryntum uses the following third party libraries: + * + * * [Font Awesome 6 Free](https://fontawesome.com/license/free) (MIT/SIL OFL 1.1) + * * [Roboto font (for Material theme only)](https://github.com/google/roboto) (Apache-2.0) + * * [Styling Cross-Browser Compatible Range Inputs with Sass](https://github.com/darlanrod/input-range-sass) (MIT) + * * [Tree Walker polyfill (only applies to Salesforce)](https://github.com/Krinkle/dom-TreeWalker-polyfill) (MIT) + * * [chronograph](https://github.com/bryntum/chronograph) (MIT) + * * [later.js](https://github.com/bunkat/later) (MIT) + * * [Monaco editor (only used in our demos)](https://microsoft.github.io/monaco-editor) (MIT) + * * Map/Set polyfill to fix performance issues for Salesforce LWS (MIT) + * * [Chart.js (when using Chart package)](https://github.com/chartjs/Chart.js) (MIT) + * + * Note: the **chronograph** and **later.js** libraries are used in Bryntum Scheduler Pro and Bryntum Gantt, but they are + * listed for all Bryntum products since the distribution contains trial versions of the thin bundles for all other + * products. TreeWalker is only used in the LWC bundle for Salesforce. Roboto font is only used in the material theme. + * + * ## Font Awesome 6 Free + * + * [Font Awesome Free 6 by @fontawesome](https://fontawesome.com/) + * + * Font Awesome Free is free, open source, and GPL friendly. You can use it for commercial projects, open source projects, + * or really almost whatever you want. + * + * [Full Font Awesome Free license](https://fontawesome.com/license/free) + * + * ## Roboto font + * + * [Apache License Version 2.0, January 2004](https://www.apache.org/licenses/LICENSE-2.0) + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 + * of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are + * under common control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by + * contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial + * ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, + * documentation source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including + * but not limited to compiled object code, generated documentation, and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as + * indicated by a copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work + * and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an + * original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or + * additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the + * Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. + * For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including + * but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems + * that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding + * communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a + * Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received + * by Licensor and subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to + * You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, + * prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such + * Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a + * perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise + * transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are + * necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity ( + * including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within + * the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this + * License for that Work shall terminate as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with + * or without modifications, and in Source or Object form, provided that You meet the following conditions: + * + * (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, + * and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the + * Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute + * must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that + * do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file + * distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the + * Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices + * normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You + * may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the + * NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the + * License. + * + * You may add Your own copyright statement to Your modifications and may provide additional or different license terms and + * conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, + * provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this + * License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for + * inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any + * additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any + * separate license agreement you may have executed with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product + * names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and + * reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and + * each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, + * MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness + * of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this + * License. + * + * 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or + * otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, + * shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or + * consequential damages of any character arising as a result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or + * any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such + * damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose + * to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or + * rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and + * on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and + * hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by + * brackets "[]" + * replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the + * appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose + * be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + * + * Copyright [yyyy] [name of copyright owner] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * [APACHE LICENSE, VERSION 2.0](http://www.apache.org/licenses/LICENSE-2.0) + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an " + * AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * ## Styling Cross-Browser Compatible Range Inputs with Sass + * + * Github: [input-range-sass](https://github.com/darlanrod/input-range-sass) + * + * Author: [Darlan Rod](https://github.com/darlanrod) + * + * Version 1.4.1 + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Darlan Rod + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Tree Walker polyfill + * + * The MIT License (MIT) + * + * [Copyright 2013–2017 Timo Tijhof](https://github.com/Krinkle/dom-TreeWalker-polyfill) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## chronograph + * + * GitHub: [chronograph](https://github.com/bryntum/chronograph) + * + * The MIT License (MIT) + * + * Copyright (c) 2023 Bryntum + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## later.js + * + * GitHub: [later.js](https://github.com/bunkat/later) + * + * The MIT License (MIT) + * + * Copyright © 2013 BunKat + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Monaco editor + * + * GitHub: [Monaco editor](https://microsoft.github.io/monaco-editor) (MIT) + * + * The MIT License (MIT) + * + * Copyright (c) 2016 - present Microsoft Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Map/Set polyfill to fix performance issues for Salesforce LWS + * + * Copyright © 2024 Certinia Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * ## Chart.js + * + * GitHub: [Chart.js](https://github.com/chartjs/Chart.js) + * + * The MIT License (MIT) + * + * Copyright (c) 2014-2022 Chart.js Contributors + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +:root,:host{--bryntum-version: "7.2.1";--b-checkbox-checked-check-content: "\f00c";--b-widget-anchor-width: 1.2em;--b-widget-anchor-height: .6em;--b-widget-font-size: 1em;--b-widget-font-weight: 400;--b-widget-icon-font-family: "Font Awesome 6 Free";--b-widget-icon-font-weight: 900;--b-widget-sub-menu-icon: "\f0da";--b-widget-color: var(--b-text-1);--b-widget-border-color: var(--b-border-3);--b-widget-disabled-color: var(--b-text-3);--b-widget-disabled-background: var(--b-neutral-90);--b-widget-padding: 1em;--b-widget-padding-large: 1.5em;--b-widget-gap: 1em;--b-widget-focus-outline-width: 2px;--b-widget-focus-outline-color: var(--b-primary);--b-widget-floating-box-shadow: var(--b-elevation-2);--b-aligned-above-floating-box-shadow: -3px -1px 6px rgba(0, 0, 0, .12), 3px -2px 6px rgba(0, 0, 0, .24);--b-widget-floating-border: null;--b-label-color: var(--b-widget-color);--b-widget-scrollbar-border-color: var(--b-border-7);--b-widget-anchor-offset: 1px;--b-elevation-0: none;--b-elevation-1: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 1px 1px 0 rgba(0, 0, 0, .1), 0 2px 1px -1px rgba(0, 0, 0, .08);--b-elevation-2: 0 1px 5px 0 rgba(0, 0, 0, .12), 0 2px 2px 0 rgba(0, 0, 0, .1), 0 3px 1px -2px rgba(0, 0, 0, .08);--b-elevation-3: 0 3px 6px rgba(0, 0, 0, .12), 0 3px 6px rgba(0, 0, 0, .24);--b-elevation-4: 0 5px 6px -3px rgba(0, 0, 0, .16), 0 8px 10px 1px rgba(0, 0, 0, .1), 0 3px 14px 2px rgba(0, 0, 0, .08);--b-default-transition-duration: .15s}@media (prefers-reduced-motion: reduce){body:not(.b-siesta-testing){--b-default-transition-duration: 0s}}@property --bi-widget-grid-column{syntax : "*"; inherits : false;}.b-internal{--bi-widget-grid-column: null}.b-widget{display:flex;position:relative;overflow:hidden;color-scheme:var(--b-widget-color-scheme);font-weight:var(--b-widget-font-weight);font-size:var(--b-widget-font-size);grid-column:var(--bi-widget-grid-column)}.b-widget,.b-widget:before,.b-widget:after,.b-widget *,.b-widget *:before,.b-widget *:after{box-sizing:border-box}.b-widget.b-hidden.b-hide-mode-clip{clip:rect(0,0,0,0)!important}.b-widget.b-hidden.b-hide-mode-opacity{opacity:0!important;pointer-events:none}.b-widget.b-hidden.b-hide-mode-display{display:none!important}.b-widget.b-positioned{position:absolute;inset-inline-start:0;inset-block-start:0}.b-widget.b-positionable{position:absolute}.b-widget .b-aria-desc-element{position:absolute;clip-path:polygon(0 0);contain:strict}.b-widget.b-floating,.b-widget.b-positioned{box-shadow:var(--b-widget-floating-box-shadow)}:is(.b-widget.b-floating,.b-widget.b-positioned).b-centered{top:50%;inset-inline-start:50%;z-index:1;translate:calc(-50% * var(--b-rtl-negate)) -50%}.b-widget.b-maximized{position:fixed;translate:none!important;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;top:0!important;inset-inline-start:0!important}.b-widget.b-maximized.b-mobile .b-bottom-toolbar{order:-1;min-height:3.5em}.b-widget.b-maximized.b-mobile .b-bottom-toolbar .b-toolbar-content{padding-block:.5em 0;padding-inline-start:1em!important}.b-widget>.b-focus-trap{position:absolute;display:none;clip:rect(0,0,0,0)}.b-widget.b-focus-trapped.b-contains-focus>.b-focus-trap{display:inherit}.b-widget.b-initializing *{transition:none!important}.b-anchor{position:absolute}.b-anchor svg{position:absolute;top:0;pointer-events:none;overflow:visible}.b-anchor.b-anchor-top,.b-anchor.b-anchor-bottom{left:0;height:calc(var(--b-widget-anchor-height) + var(--bi-align-offset-y, 0px));width:100%}:is(.b-anchor.b-anchor-top,.b-anchor.b-anchor-bottom) svg{width:var(--b-widget-anchor-width);height:var(--b-widget-anchor-height)}.b-anchor.b-anchor-top{bottom:calc(100% - var(--b-widget-anchor-offset))}.b-anchor.b-anchor-top svg{top:auto;bottom:0}.b-anchor.b-anchor-bottom{top:calc(100% - var(--b-widget-anchor-offset))}.b-anchor.b-anchor-bottom svg{rotate:180deg}.b-anchor.b-anchor-start,.b-anchor.b-anchor-end{top:0;width:calc(var(--b-widget-anchor-height) + var(--bi-align-offset-x, 0px));height:100%}:is(.b-anchor.b-anchor-start,.b-anchor.b-anchor-end) svg{height:var(--b-widget-anchor-width);width:var(--b-widget-anchor-height)}.b-anchor.b-anchor-start{inset-inline-end:100%}.b-anchor.b-anchor-start svg{rotate:270deg;transform-origin:var(--b-widget-anchor-height) var(--b-widget-anchor-height)}.b-anchor.b-anchor-end{inset-inline-start:100%}.b-anchor.b-anchor-end svg{rotate:90deg;transform-origin:calc(var(--b-widget-anchor-height) / 2) calc(var(--b-widget-anchor-height) / 2)}.b-anchor.b-anchor-right{inset-inline-start:calc(100% - var(--bi-border-width, 0px));clip-path:rect(0 100% 100% var(--bi-border-width, 0px))}.b-anchor.b-anchor-left{inset-inline-end:calc(100% - var(--bi-border-width, 0px));clip-path:rect(0 calc(100% - var(--bi-border-width, 0px)) 100% 0)}.b-rtl>.b-anchor.b-anchor-right{inset-inline-end:calc(100% - var(--bi-border-width, 0px));inset-inline-start:auto}.b-rtl>.b-anchor.b-anchor-left{inset-inline-start:calc(100% - var(--bi-border-width, 0px));inset-inline-end:auto}.b-float-root{position:fixed!important;inset:0;pointer-events:none;overflow:clip;z-index:14000;contain:strict}.b-float-root.b-safari{user-select:none;-webkit-user-select:none}.b-float-root>.b-floating{position:absolute;contain:layout style;pointer-events:all;transition:opacity .2s;top:0;inset-inline-start:0;z-index:1}.b-float-root>.b-floating:not(.b-popup){box-shadow:var(--b-widget-floating-box-shadow);border-radius:var(--b-widget-border-radius);border:var(--b-widget-floating-border)}.b-firefox :is(.b-float-root>.b-floating){contain:layout}.b-float-root>.b-floating.b-hidden{opacity:0}.b-float-root>.b-floating.b-aligned-above:not(.b-anchored){box-shadow:var(--b-aligned-above-floating-box-shadow)}.b-trial-demo-mode [style*="data:image/svg+xml"]{background-image:none!important}:root,:host{--b-rtl-negate: 1}.b-rtl{direction:rtl;--b-rtl-negate: -1}.b-rtl .b-anchor.b-anchor-start svg{rotate:90deg;transform-origin:calc(var(--b-widget-anchor-height) / 2) calc(var(--b-widget-anchor-height) / 2)}.b-rtl .b-anchor.b-anchor-end svg{rotate:270deg;transform-origin:var(--b-widget-anchor-height) var(--b-widget-anchor-height)}.b-ltr{direction:ltr}.b-aria-live-el{height:0;width:0;position:absolute;inset-inline-start:-9999px;contain:strict}.b-released,.b-hide-display,.b-theme-info{display:none!important}.b-hide-visibility{visibility:hidden!important}.b-hide-offscreen{visibility:hidden!important;position:absolute!important;top:-10000em;left:-10000em}.b-yscroll-pad{display:none}.b-visible-scrollbar .b-show-yscroll-padding>.b-yscroll-pad{display:block;order:9999;border-inline-start:1px solid var(--b-widget-scrollbar-border-color)}.b-visible-scrollbar .b-show-yscroll-padding>.b-yscroll-pad .b-yscroll-pad-sizer{overflow-x:hidden;overflow-y:scroll;margin-inline-start:-1px;height:0;max-width:var(--bi-scrollbar-width)}.b-widget-scroller.b-hide-scroll{scrollbar-width:none}.b-widget-scroller.b-hide-scroll::-webkit-scrollbar{display:none}:is(div,span) .b-color-red{--b-primary: var(--b-color-red)}:is(div,span) .b-color-pink{--b-primary: var(--b-color-pink)}:is(div,span) .b-color-magenta{--b-primary: var(--b-color-magenta)}:is(div,span) .b-color-purple{--b-primary: var(--b-color-purple)}:is(div,span) .b-color-deep-purple{--b-primary: var(--b-color-deep-purple)}:is(div,span) .b-color-violet{--b-primary: var(--b-color-violet)}:is(div,span) .b-color-indigo{--b-primary: var(--b-color-indigo)}:is(div,span) .b-color-blue{--b-primary: var(--b-color-blue)}:is(div,span) .b-color-light-blue{--b-primary: var(--b-color-light-blue)}:is(div,span) .b-color-cyan{--b-primary: var(--b-color-cyan)}:is(div,span) .b-color-teal{--b-primary: var(--b-color-teal)}:is(div,span) .b-color-green{--b-primary: var(--b-color-green)}:is(div,span) .b-color-light-green{--b-primary: var(--b-color-light-green)}:is(div,span) .b-color-lime{--b-primary: var(--b-color-lime)}:is(div,span) .b-color-yellow{--b-primary: var(--b-color-yellow)}:is(div,span) .b-color-amber{--b-primary: var(--b-color-amber)}:is(div,span) .b-color-orange{--b-primary: var(--b-color-orange)}:is(div,span) .b-color-deep-orange{--b-primary: var(--b-color-deep-orange)}:is(div,span) .b-color-brown{--b-primary: var(--b-color-brown)}:is(div,span) .b-color-lighter-gray{--b-primary: var(--b-color-lighter-gray)}:is(div,span) .b-color-light-gray{--b-primary: var(--b-color-light-gray)}:is(div,span) .b-color-gray{--b-primary: var(--b-color-gray)}:is(div,span) .b-color-black{--b-primary: var(--b-color-black)}@keyframes b-anim-fade-in{0%{opacity:0}to{opacity:1}}@keyframes b-anim-fade-out{0%{opacity:1}to{opacity:0}}@keyframes b-anim-slide-in-from-right{30%{translate:-50%;opacity:.5}30.01%{translate:50%}to{translate:0;opacity:1}}@keyframes b-anim-slide-in-from-left{30%{translate:50%;opacity:.5}30.01%{translate:-50%}to{translate:0;opacity:1}}@keyframes b-anim-slide-in-from-below{30%{translate:0 -50%;opacity:.5}30.01%{translate:0 50%}to{translate:0;opacity:1}}@keyframes b-anim-slide-in-from-above{30%{translate:0 50%;opacity:.5}30.01%{translate:0 -50%}to{translate:0;opacity:1}}.b-slide-in-next,.b-slide-in-previous{animation:b-anim-slide-in-from-left .3s ease 0s 1 normal}.b-slide-vertical.b-slide-in-next{animation-name:b-anim-slide-in-from-below}.b-slide-vertical.b-slide-in-previous{animation-name:b-anim-slide-in-from-above}.b-slide-in-next:not(.b-slide-vertical){animation-name:b-anim-slide-in-from-right}.b-slide-in-previous:not(.b-slide-vertical){animation-name:b-anim-slide-in-from-left}.b-rtl.b-slide-in-next:not(.b-slide-vertical){animation-name:b-anim-slide-in-from-left}.b-rtl.b-slide-in-previous:not(.b-slide-vertical){animation-name:b-anim-slide-in-from-right}.b-sliding-child-element{overflow:clip}.b-transition-expand-collapse.b-aligned-below{animation:b-anim-expand-downwards .3s forwards}.b-transition-expand-collapse.b-aligned-above{animation:b-anim-expand-upwards .3s forwards}.b-transition-expand-collapse.b-hiding.b-aligned-below{animation:b-anim-collapse-upwards .3s forwards}.b-transition-expand-collapse.b-hiding.b-aligned-above{animation:b-anim-collapse-downwards .3s forwards}@keyframes b-anim-expand-downwards{0%{clip-path:rect(-25px calc(100% + 25px) 0 -25px);opacity:0}to{clip-path:rect(-25px calc(100% + 25px) calc(100% + 25px) -25px);opacity:1}}@keyframes b-anim-collapse-upwards{0%{clip-path:rect(-25px calc(100% + 25px) calc(100% + 25px) -25px);opacity:1}to{clip-path:rect(-25px calc(100% + 25px) 0 -25px);opacity:0}}@keyframes b-anim-expand-upwards{0%{clip-path:rect(100% calc(100% + 25px) 100% -25px);opacity:0}to{clip-path:rect(-25px calc(100% + 25px) calc(100% + 25px) -25px);opacity:1}}@keyframes b-anim-collapse-downwards{0%{clip-path:rect(-25px calc(100% + 25px) calc(100% + 25px) -25px);opacity:1}to{clip-path:rect(100% calc(100% + 25px) 100% -25px);opacity:0}}:root,:host{--b-color-red: #e53935;--b-color-pink: #d81b60;--b-color-magenta: #c200c2;--b-color-purple: #8e24aa;--b-color-violet: #5e35b1;--b-color-deep-purple: #4527a0;--b-color-indigo: #3949ab;--b-color-blue: #1e88e5;--b-color-light-blue: #03a9f4;--b-color-cyan: #3bc9db;--b-color-teal: #00897b;--b-color-green: #43a047;--b-color-light-green: #8bc34a;--b-color-lime: #c0ca33;--b-color-yellow: #fdd835;--b-color-amber: #ffb300;--b-color-orange: #fb8c00;--b-color-deep-orange: #f4511e;--b-color-brown: #6d4c41;--b-color-lighter-gray: #e0e0e0;--b-color-light-gray: #c0c0c0;--b-color-gray: #757575;--b-color-black: #000000;--b-neutral-100: hsl(0 0 100%);--b-neutral-99: hsl(0 0 99%);--b-neutral-98: hsl(0 0 98%);--b-neutral-97: hsl(0 0 97%);--b-neutral-96: hsl(0 0 96%);--b-neutral-95: hsl(0 0 95%);--b-neutral-94: hsl(0 0 94%);--b-neutral-93: hsl(0 0 93%);--b-neutral-92: hsl(0 0 92%);--b-neutral-91: hsl(0 0 91%);--b-neutral-90: hsl(0 0 90%);--b-neutral-85: hsl(0 0 85%);--b-neutral-80: hsl(0 0 80%);--b-neutral-75: hsl(0 0 75%);--b-neutral-70: hsl(0 0 70%);--b-neutral-65: hsl(0 0 65%);--b-neutral-60: hsl(0 0 60%);--b-neutral-55: hsl(0 0 55%);--b-neutral-50: hsl(0 0 50%);--b-neutral-45: hsl(0 0 45%);--b-neutral-40: hsl(0 0 40%);--b-neutral-35: hsl(0 0 35%);--b-neutral-30: hsl(0 0 30%);--b-neutral-25: hsl(0 0 25%);--b-neutral-20: hsl(0 0 20%);--b-neutral-15: hsl(0 0 15%);--b-neutral-10: hsl(0 0 10%);--b-neutral-5: hsl(0 0 5%);--b-neutral-2: hsl(0 0 2%);--b-neutral-1: hsl(0 0 1%);--b-neutral-0: hsl(0 0 0%);--b-border-1: var(--b-neutral-10);--b-border-2: var(--b-neutral-30);--b-border-3: var(--b-neutral-50);--b-border-4: var(--b-neutral-60);--b-border-5: var(--b-neutral-70);--b-border-6: var(--b-neutral-80);--b-border-7: var(--b-neutral-90);--b-border-8: var(--b-neutral-93);--b-border-9: var(--b-neutral-95);--b-border-10: var(--b-neutral-100);--b-text-1: var(--b-neutral-10);--b-text-2: var(--b-neutral-30);--b-text-3: var(--b-neutral-50);--b-text-4: var(--b-neutral-70);--b-text-5: var(--b-neutral-100)}.b-colorize,.b-bryntum{--b-primary-100: var(--b-mix);--b-primary-99: color-mix(in srgb, var(--b-primary), var(--b-mix) 98%);--b-primary-98: color-mix(in srgb, var(--b-primary), var(--b-mix) 96%);--b-primary-97: color-mix(in srgb, var(--b-primary), var(--b-mix) 94%);--b-primary-96: color-mix(in srgb, var(--b-primary), var(--b-mix) 92%);--b-primary-95: color-mix(in srgb, var(--b-primary), var(--b-mix) 90%);--b-primary-94: color-mix(in srgb, var(--b-primary), var(--b-mix) 88%);--b-primary-93: color-mix(in srgb, var(--b-primary), var(--b-mix) 86%);--b-primary-92: color-mix(in srgb, var(--b-primary), var(--b-mix) 84%);--b-primary-91: color-mix(in srgb, var(--b-primary), var(--b-mix) 82%);--b-primary-90: color-mix(in srgb, var(--b-primary), var(--b-mix) 80%);--b-primary-85: color-mix(in srgb, var(--b-primary), var(--b-mix) 70%);--b-primary-80: color-mix(in srgb, var(--b-primary), var(--b-mix) 60%);--b-primary-75: color-mix(in srgb, var(--b-primary), var(--b-mix) 50%);--b-primary-70: color-mix(in srgb, var(--b-primary), var(--b-mix) 40%);--b-primary-65: color-mix(in srgb, var(--b-primary), var(--b-mix) 30%);--b-primary-60: color-mix(in srgb, var(--b-primary), var(--b-mix) 20%);--b-primary-55: color-mix(in srgb, var(--b-primary), var(--b-mix) 10%);--b-primary-50: var(--b-primary);--b-primary-45: color-mix(in srgb, var(--b-primary), var(--b-opposite) 10%);--b-primary-40: color-mix(in srgb, var(--b-primary), var(--b-opposite) 20%);--b-primary-35: color-mix(in srgb, var(--b-primary), var(--b-opposite) 30%);--b-primary-30: color-mix(in srgb, var(--b-primary), var(--b-opposite) 40%);--b-primary-25: color-mix(in srgb, var(--b-primary), var(--b-opposite) 50%);--b-primary-20: color-mix(in srgb, var(--b-primary), var(--b-opposite) 60%);--b-primary-15: color-mix(in srgb, var(--b-primary), var(--b-opposite) 70%);--b-primary-10: color-mix(in srgb, var(--b-primary), var(--b-opposite) 80%);--b-primary-5: color-mix(in srgb, var(--b-primary), var(--b-opposite) 90%);--b-primary-2: color-mix(in srgb, var(--b-primary), var(--b-opposite) 96%);--b-primary-1: color-mix(in srgb, var(--b-primary), var(--b-opposite) 98%);--b-primary-0: var(--b-opposite)}@supports not (color: color-mix(in srgb,red,blue)){.b-colorize,.b-bryntum{--b-primary-99: linear-gradient(rgba(255, 255, 255, .98), rgba(255, 255, 255, .98)) var(--b-primary);--b-primary-98: linear-gradient(rgba(255, 255, 255, .96), rgba(255, 255, 255, .96)) var(--b-primary);--b-primary-97: linear-gradient(rgba(255, 255, 255, .94), rgba(255, 255, 255, .94)) var(--b-primary);--b-primary-96: linear-gradient(rgba(255, 255, 255, .92), rgba(255, 255, 255, .92)) var(--b-primary);--b-primary-95: linear-gradient(rgba(255, 255, 255, .9), rgba(255, 255, 255, .9)) var(--b-primary);--b-primary-94: linear-gradient(rgba(255, 255, 255, .88), rgba(255, 255, 255, .88)) var(--b-primary);--b-primary-93: linear-gradient(rgba(255, 255, 255, .86), rgba(255, 255, 255, .86)) var(--b-primary);--b-primary-92: linear-gradient(rgba(255, 255, 255, .84), rgba(255, 255, 255, .84)) var(--b-primary);--b-primary-91: linear-gradient(rgba(255, 255, 255, .82), rgba(255, 255, 255, .82)) var(--b-primary);--b-primary-90: linear-gradient(rgba(255, 255, 255, .8), rgba(255, 255, 255, .8)) var(--b-primary);--b-primary-85: linear-gradient(rgba(255, 255, 255, .7), rgba(255, 255, 255, .7)) var(--b-primary);--b-primary-80: linear-gradient(rgba(255, 255, 255, .6), rgba(255, 255, 255, .6)) var(--b-primary);--b-primary-75: linear-gradient(rgba(255, 255, 255, .5), rgba(255, 255, 255, .5)) var(--b-primary);--b-primary-70: linear-gradient(rgba(255, 255, 255, .4), rgba(255, 255, 255, .4)) var(--b-primary);--b-primary-65: linear-gradient(rgba(255, 255, 255, .3), rgba(255, 255, 255, .3)) var(--b-primary);--b-primary-60: linear-gradient(rgba(255, 255, 255, .2), rgba(255, 255, 255, .2)) var(--b-primary);--b-primary-55: linear-gradient(rgba(255, 255, 255, .1), rgba(255, 255, 255, .1)) var(--b-primary);--b-primary-45: linear-gradient(rgba(0, 0, 0, .1), rgba(0, 0, 0, .1)) var(--b-primary);--b-primary-40: linear-gradient(rgba(0, 0, 0, .2), rgba(0, 0, 0, .2)) var(--b-primary);--b-primary-35: linear-gradient(rgba(0, 0, 0, .3), rgba(0, 0, 0, .3)) var(--b-primary);--b-primary-30: linear-gradient(rgba(0, 0, 0, .4), rgba(0, 0, 0, .4)) var(--b-primary);--b-primary-25: linear-gradient(rgba(0, 0, 0, .5), rgba(0, 0, 0, .5)) var(--b-primary);--b-primary-20: linear-gradient(rgba(0, 0, 0, .6), rgba(0, 0, 0, .6)) var(--b-primary);--b-primary-15: linear-gradient(rgba(0, 0, 0, .7), rgba(0, 0, 0, .7)) var(--b-primary);--b-primary-10: linear-gradient(rgba(0, 0, 0, .8), rgba(0, 0, 0, .8)) var(--b-primary);--b-primary-5: linear-gradient(rgba(0, 0, 0, .9), rgba(0, 0, 0, .9)) var(--b-primary);--b-primary-2: linear-gradient(rgba(0, 0, 0, .96), rgba(0, 0, 0, .96)) var(--b-primary);--b-primary-1: linear-gradient(rgba(0, 0, 0, .98), rgba(0, 0, 0, .98)) var(--b-primary)}}.b-fx-highlight{z-index:9999!important;animation:b-anim-fx-highlight 1s ease 0s 1}@keyframes b-anim-fx-highlight{0%{box-shadow:none}50%{box-shadow:0 0 10px 5px var(--b-primary-50)}to{box-shadow:none}}.b-dragging,.b-dragging *{pointer-events:none!important}.b-dragging:not(.b-widget){z-index:100;opacity:.8;box-sizing:border-box}.b-dragging:not(.b-widget).b-drag-unified-proxy{opacity:.65}.b-dragging:not(.b-widget).b-drag-main{z-index:101;opacity:1}.b-drag-proxy{position:absolute!important;top:0;inset-inline-start:0;pointer-events:none!important;box-sizing:border-box}.b-drag-proxy *{box-sizing:border-box}.b-aborting,.b-drag-final-transition{transition-duration:.3s;transition-property:all!important}.b-drag-unified-animation{transition:translate .2s}.b-drag-original.b-hidden{display:none!important}.b-drag-helper-active *{-webkit-user-select:none!important;user-select:none!important}.b-resize-grip{position:absolute;z-index:1}.b-resize-grip-top-start,.b-resize-grip-top-end,.b-resize-grip-bottom-start,.b-resize-grip-bottom-end{width:.5em;height:.5em}.b-resize-grip-top,.b-resize-grip-top-start,.b-resize-grip-top-end{top:0}.b-resize-grip-bottom,.b-resize-grip-bottom-start,.b-resize-grip-bottom-end{bottom:0}.b-resize-grip-start,.b-resize-grip-top-start,.b-resize-grip-bottom-start{inset-inline-start:0}.b-resize-grip-end,.b-resize-grip-top-end,.b-resize-grip-bottom-end{inset-inline-end:0}.b-resize-grip-top,.b-resize-grip-bottom{height:.5em}.b-resize-grip-start,.b-resize-grip-end{width:.5em}.b-resize-grip-top-start,.b-resize-grip-bottom-end{cursor:nwse-resize;z-index:2}.b-resize-grip-top-end,.b-resize-grip-bottom-start{cursor:nesw-resize;z-index:2}.b-resize-grip-top,.b-resize-grip-bottom{cursor:ns-resize;width:100%;inset-inline-start:0}.b-resize-grip-start,.b-resize-grip-end{height:100%;top:0;cursor:ew-resize}.b-no-resize-observer.b-resize-monitored:not(.b-floating){position:relative}.b-no-resize-observer.b-resize-monitored .b-resize-monitors{position:absolute;left:0;top:0;width:100%;height:100%;visibility:hidden;overflow:hidden}.b-no-resize-observer.b-resize-monitored .b-resize-monitors>*{width:100%;height:100%;overflow:hidden}.b-no-resize-observer.b-resize-monitored .b-resize-monitors>.b-resize-monitor-expand:after{content:"";display:block;width:100000px;height:100000px}.b-no-resize-observer.b-resize-monitored .b-resize-monitors>.b-resize-monitor-shrink:after{content:"";display:block;width:200%;height:200%;min-width:1px;min-height:1px}.simulated-mouse{position:absolute;z-index:100;top:10px;left:10px;transition:top .5s,left .5s;pointer-events:none;font-size:16px}.simulated-mouse.quick{transition:top .05s,left .05s}.simulated-mouse:after{position:absolute;content:"\f245" / "";font-family:var(--b-widget-icon-font-family);font-weight:900;z-index:102}.simulated-mouse.drag:before,.simulated-mouse.mousedown:before,.simulated-mouse.dblclick:before,.simulated-mouse.click:before{position:absolute;content:"";border:2px solid transparent;border-radius:50%;animation-name:b-anim-click;animation-duration:.2s;top:0;left:0;translate:-50% -50%;z-index:101;opacity:.7}.simulated-mouse.drag:after{content:"\f25a" / "";left:-3px}.simulated-mouse.dblclick:before{animation-name:b-anim-dblclick;animation-duration:.3s}.simulated-mouse.mousedown:before,.simulated-mouse.drag:before{animation-name:none;width:1.5em;height:1.5em;border-color:red}@keyframes b-anim-click{0%{width:0;height:0}90%{width:1.5em;height:1.5em;border-color:red}to{width:0;height:0;border-color:transparent}}@keyframes b-anim-dblclick{0%{width:0;height:0}40%{width:1.5em;height:1.5em;border-color:red}50%{width:0;height:0}90%{width:1.5em;height:1.5em;border-color:red}to{width:0;height:0;border-color:transparent}}.b-scroll-hidden{visibility:hidden!important;position:absolute!important;top:-10000em;left:-10000em;translate:0 0!important}.b-infinity-scroller{overflow:scroll}.b-infinity-scroller.b-infinity-scroller-smooth{scroll-behavior:smooth}.b-infinity-scroller-item{position:absolute!important}.b-widget-scroller{overflow:hidden;-webkit-overflow-scrolling:touch;overflow-anchor:none;position:relative}.b-hide-scroll{scrollbar-width:none}.b-hide-scroll::-webkit-scrollbar{display:none}.b-scroller-stretcher{position:absolute;height:1px;width:1px;top:0;inset-inline-start:0}.b-icon{display:inline-flex;gap:.5em}.b-icon:before,.b-fw-icon:before{font-style:normal;font-variant:normal;line-height:1;display:grid;place-items:center;font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);content:var(--fa)}.b-fw-icon:before{width:1em}.b-icon-scroll-left:before{content:var(--b-icon-scroll-left, "\f104")}.b-icon-scroll-right:before{content:var(--b-icon-scroll-right, "\f105")}.b-icon-spin-up:before{content:var(--b-icon-spin-up, "\f0d8")}.b-icon-spin-down:before{content:var(--b-icon-spin-down, "\f0d7")}.b-icon-add:before{content:var(--b-icon-add, "+")}.b-icon-clear:before{content:var(--b-icon-clear, "\f00d")}.b-icon-remove:before{content:var(--b-icon-remove, "\f00d")}.b-icon-close:before{content:var(--b-icon-close, "\f00d")}.b-icon-remove-circle:before{content:var(--b-icon-remove-circle, "\f057")}.b-icon-collapse-down:before{content:var(--b-icon-collapse-down, "\f078")}.b-icon-collapse-left:before{content:var(--b-icon-collapse-left, "\f053")}.b-icon-collapse-right:before{content:var(--b-icon-collapse-right, "\f054")}.b-icon-collapse-up:before{content:var(--b-icon-collapse-up, "\f077")}.b-icon-filter-disable:before{content:var(--b-icon-filter-disable, "\f05e")}.b-icon-search:before{content:var(--b-icon-search, "\f002")}.b-icon-search-plus:before{content:var(--b-icon-search-plus, "\f00e")}.b-icon-search-minus:before{content:var(--b-icon-search-minus, "\f010")}.b-icon-hide:before{content:var(--b-icon-hide, "\f057")}.b-icon-trash:before{content:var(--b-icon-trash, "\f1f8")}.b-icon-edit:before{content:var(--b-icon-edit, "\f303")}.b-icon-show-details:before{content:var(--b-icon-show-details, "\f002")}.b-icon-rename:before{content:var(--b-icon-rename, "\f044")}.b-icon-copy:before{content:var(--b-icon-copy, "\f0c5")}.b-icon-cut:before{content:var(--b-icon-cut, "\f0c4")}.b-icon-paste:before{content:var(--b-icon-paste, "\f0ea")}.b-icon-expand-row:before{content:var(--b-icon-expand-row, "\f107")}.b-icon-expand-column:before{content:var(--b-icon-expand-column, "\f105")}.b-icon-expand{content:var(--b-icon-expand, "\f065")}.b-icon-first:before{content:var(--b-icon-first, "\f100")}:is(.b-rtl .b-icon-first,.b-rtl .b-icon-last,.b-rtl .b-icon-next,.b-rtl .b-icon-previous,.b-rtl .b-icon-scroll-left,.b-rtl .b-icon-scroll-right):before{scale:-1 1}.b-icon-last:before{content:var(--b-icon-last, "\f101")}.b-icon-redo:before{content:var(--b-icon-redo, "\f01e")}.b-icon-reload:before{content:var(--b-icon-reload, "\f01e")}.b-icon-undo:before{content:var(--b-icon-undo, "\f0e2")}.b-icon-compare:before{content:var(--b-icon-compare, "\e13a")}.b-icon-split-horizontal:before,.b-icon-split-vertical:before,.b-icon-split-both:before{min-width:1em!important;width:1em;height:1em;border-radius:2px;border:2px solid currentColor;overflow:hidden}.b-icon-split-horizontal:before{content:var(--b-icon-split-horizontal, "\2503");rotate:90deg;border-left-width:3px;align-items:start;line-height:.8}.b-icon-split-vertical:before{content:var(--b-icon-split-vertical, "\2503");border-top-width:3px;align-items:start;line-height:.8}.b-icon-split-both:before{content:var(--b-icon-split-both, "\254b");border-top-width:3px}.b-icon-download:before{content:var(--b-icon-download, "\f019")}.b-icon-code:before{content:var(--b-icon-code, "\f121")}.b-icon-clipboard:before{content:var(--b-icon-clipboard, "\f328")}.b-icon-filter:before{content:var(--b-icon-filter, "\f0b0")}.b-icon-filter-equal:before{content:var(--b-icon-filter-equal, "\f0b0")}.b-icon-filter-less:before{content:var(--b-icon-filter-less, "\f053")}.b-icon-filter-before:before{content:var(--b-icon-filter-before, "\f053")}.b-icon-filter-more:before{content:var(--b-icon-filter-more, "\f054")}.b-icon-filter-after:before{content:var(--b-icon-filter-after, "\f054")}.b-icon-check:before{content:var(--b-icon-check, "\f00c")}.b-icon-checked:before{content:var(--b-icon-checked, "\f14a")}.b-icon-unchecked:before{content:var(--b-icon-unchecked, "\f0c8")}.b-icon-radio:before{content:var(--b-icon-radio, "\f111")}.b-icon-radio-unchecked:before{content:var(--b-icon-radio-unchecked, "\f111")}.b-icon-radio-checked:before{content:var(--b-icon-radio-checked, "\f192")}.b-icon-calendar:before{content:var(--b-icon-calendar, "\f133")}.b-icon-calendar-day:before{content:var(--b-icon-calendar-day, "\f783")}.b-icon-calendar-plus:before{content:var(--b-icon-calendar-plus, "\f271")}.b-icon-clock:before{content:var(--b-icon-clock, "\f017")}.b-icon-recurring:before{content:var(--b-icon-recurring, "\f021")}.b-icon-duration:before{content:var(--b-icon-duration, "\f254")}.b-icon-milestone:before{content:var(--b-icon-milestone, "\f219")}.b-icon-locked:before{content:var(--b-icon-locked, "\f023")}.b-icon-unlocked:before{content:var(--b-icon-unlocked, "\f09c")}.b-icon-user:before{content:var(--b-icon-user, "\f0c0")}.b-icon-menu:before{content:var(--b-icon-menu, "\f0c9")}.b-icon-menu-horizontal:before{content:var(--b-icon-menu-horizontal, "\f141")}.b-icon-menu-vertical:before{content:var(--b-icon-menu-vertical, "\f142")}.b-icon-info:before{content:var(--b-icon-info, "\f129")}.b-icon-sub-menu:before{content:var(--b-widget-sub-menu-icon)}.b-icon-star:before{content:var(--b-icon-star, "\f005")}.b-icon-warning:before{content:var(--b-icon-warning, "\f071")}.b-icon-columns:before{content:var(--b-icon-columns, "\f0db")}.b-icon-picker:before{content:var(--b-icon-picker, "\f0d7");transition:rotate .2s}.b-icon-picker-rotated:before{content:var(--b-icon-picker-rotated, "\f0d7");rotate:180deg;transition:rotate .2s}.b-icon-resize-horizontal:before{content:var(--b-icon-resize-horizontal, "\f337")}.b-icon-fullscreen:before{content:var(--b-icon-fullscreen, "\f0b2")}.b-icon-cog:before{content:var(--b-icon-cog, "\f013")}:is(.b-linux,.b-windows) .b-icon-cog:before{vertical-align:middle}.b-icon-file-download:before{content:var(--b-icon-file-download, "\f56d")}.b-icon-sync:before{content:var(--b-icon-sync, "\f2f1")}.b-icon-bad-mood-emoji:before{content:var(--b-icon-bad-mood-emoji, "\f119")}.b-icon-circle:before{content:var(--b-icon-circle, "\f111")}.b-icon-square:before{content:var(--b-icon-square, "\f0c8")}.b-icon-merge-cells:before{content:var(--b-icon-merge-cells, "\f5fd")}.b-icon-version:before{content:var(--b-icon-version, "\e5a0")}.b-icon-material:before{content:var(--b-icon-material, "\e4e6")}.b-icon-cost:before{content:var(--b-icon-cost, "\f81d")}.b-icon-paper-plane:before{content:var(--b-icon-paper-plane, "\f1d8")}.b-icon-robot:before{content:var(--b-icon-robot, "\f544")}.b-icon-mic:before{content:var(--b-icon-mic, "\f130")}.b-icon-play:before{content:var(--b-icon-play, "\f04b")}.b-icon-stop:before{content:var(--b-icon-stop, "\f04d")}.b-icon-message:before{content:var(--b-icon-message, "\f27a")}.b-icon-volume-high:before{content:var(--b-icon-volume-high, "\f028")}.b-icon-thumbs-up:before{content:var(--b-icon-thumbs-up, "\f164")}.b-icon-thumbs-down:before{content:var(--b-icon-thumbs-down, "\f165")}.b-icon-exclamation-circle:before{content:"\f06a"}.b-icon-eye:before{content:"\f06e"}.b-icon-up:before{content:var(--b-icon-up, "\f062")}.b-icon-down:before{content:var(--b-icon-down, "\f063")}.b-icon-left:before{content:var(--b-icon-left, "\f060")}.b-icon-right:before{content:var(--b-icon-right, "\f061")}.b-icon-angle-left:before{content:var(--b-icon-angle-left, "\f104")}.b-icon-angle-right:before{content:var(--b-icon-angle-right, "\f105")}.b-icon-before:before{content:var(--b-icon-before, "\f053")}.b-icon-previous:before{content:var(--b-icon-previous, "\f053")}.b-icon-after:before{content:var(--b-icon-after, "\f054")}.b-icon-next:before{content:var(--b-icon-next, "\f054")}.b-icon-move-left-right:before{content:var(--b-icon-move-left-right, "\f337")}.b-icon-move-up-down:before{content:var(--b-icon-move-up-down, "\f338")}.b-icon-circle-arrow-up:before{content:var(--b-icon-circle-arrow-up, "\f0aa")}.b-icon-column-move-left:before{content:var(--b-icon-column-move-left, "\f0a8")}.b-icon-column-move-right:before{content:var(--b-icon-column-move-right, "\f0a9")}.b-icon-hide-column:before{content:var(--b-icon-hide-column, "\f057")}.b-icon-column-pin:before{content:var(--b-icon-column-pin, "\f08d")}.b-icon-column-unpin:before{content:var(--b-icon-column-unpin, "\e68f")}.b-icon-sort:before{content:var(--b-icon-sort, "\f0dc")}.b-icon-sort-asc:before{content:var(--b-icon-sort-asc, "\f15e")}.b-icon-sort-desc:before{content:var(--b-icon-sort-desc, "\f15d")}.b-icon-sorted-asc:before{content:var(--b-icon-sorted-asc, "\f062")}.b-icon-group-asc:before{content:var(--b-icon-group-asc, "\f885")}.b-icon-group-desc:before{content:var(--b-icon-group-desc, "\f160")}.b-icon-group-collapse:before{content:var(--b-icon-group-collapse, "\f056")}.b-icon-group-expand:before{content:var(--b-icon-group-expand, "\f055")}.b-icon-grouped-asc:before{content:var(--b-icon-grouped-asc, "\f012")}.b-icon-tree-expand:before{content:var(--b-icon-tree-expand, "\f105")}.b-icon-tree-collapse:before{content:var(--b-icon-tree-collapse, "\f107")}.b-icon-tree-folder:before{content:var(--b-icon-tree-folder, "\f07b")}.b-icon-tree-folder-open:before{content:var(--b-icon-tree-folder-open, "\f07c")}.b-icon-tree-leaf:before{content:var(--b-icon-tree-leaf, "\f111")}.b-icon-expand-gridregion:before{content:var(--b-icon-expand-gridregion, "\f054")}.b-icon-collapse-gridregion:before{content:var(--b-icon-collapse-gridregion, "\f053")}.b-icon-lock-row:before{content:var(--b-icon-lock-row, "\e73a")}.b-icon-unlock-row:before{content:var(--b-icon-unlock-row, "\e73b")}.b-icon-unassign:before{content:var(--b-icon-unassign, "\f506")}.b-icon-valid:before{content:var(--b-icon-valid, "\f00c")}.b-icon-invalid:before{content:var(--b-icon-invalid, "\f05e")}.b-icon-checking:before{content:var(--b-icon-checking, "\f110")}.b-icon-expand-resource:before{content:var(--b-icon-expand-resource, "\f103")}.b-icon-note:before{content:var(--b-icon-note, "\f249")}.b-icon-advanced:before{content:var(--b-icon-advanced, "\f085")}.b-icon-palette:before{content:var(--b-icon-palette, "\f53f")}.b-icon-renumber:before{content:var(--b-icon-renumber, "\f884")}.b-icon-indent:before{content:var(--b-icon-indent, "\f03c")}.b-icon-outdent:before{content:var(--b-icon-outdent, "\f03b")}.b-icon-subtask:before{content:var(--b-icon-subtask, "\e476")}.b-icon-predecessor:before{content:var(--b-icon-predecessor, "\e477")}.b-icon-successor:before{content:var(--b-icon-successor, "\e47a")}.b-icon-link:before{content:var(--b-icon-link, "\f0c1")}.b-icon-unlink:before{content:var(--b-icon-unlink, "\f127")}.b-icon-calendar-days:before{content:var(--b-icon-calendar-days, "\f073")}.b-icon-calendar-week:before{content:var(--b-icon-calendar-week, "\f784")}.b-icon-bold:before{content:var(--b-icon-bold, "\f032")}.b-icon-underline:before{content:var(--b-icon-underline, "\f0cd")}.b-icon-italic:before{content:var(--b-icon-italic, "\f033")}.b-icon-clock-live{background-color:currentColor;border-radius:50%;width:1em;height:1em;animation-delay:0s;display:grid}.b-icon-clock-live:before,.b-icon-clock-live:after{grid-area:1 / 1 / 1 / 1;position:relative;font-size:1em!important;content:"";width:.1em!important;left:.44em;background:#fff;border-radius:.5em}.b-icon-clock-live:before{top:.15em;height:.4em!important;transform-origin:.05em .35em;animation:b-anim-rotate 6s infinite linear;animation-play-state:paused;animation-delay:inherit}.b-icon-clock-live:after{top:.22em;height:.33em;transform-origin:.05em .3em;animation:b-anim-rotate 72s infinite linear;animation-play-state:paused;animation-delay:inherit}.b-icon-chart:before{content:var(--b-icon-chart, "\f201")}.b-icon-settings:before{content:var(--b-icon-settings, "\f013")}.b-icon-spinner:before{content:var(--b-icon-spinner, "\f110");animation:b-anim-rotate 2s infinite linear}@keyframes b-anim-rotate{0%{rotate:0deg}to{rotate:360deg}}:root,:host{--b-gripper-edge-size: 1em;--b-gripper-horz-cursor: ns-resize;--b-gripper-border: 1px solid rgba(0, 0, 0, .3);--b-gripper-horz-edge-height: var(--b-gripper-edge-size);--b-gripper-horz-height: .25em;--b-gripper-horz-width: 1.2em;--b-gripper-horz-offset: .4em;--b-gripper-horz-transition: opacity .2s, margin-inline-start .2s, width .2s;--b-gripper-vert-cursor: ew-resize;--b-gripper-vert-gradient: repeating-linear-gradient( 90deg, rgba(0, 0, 0, .5), rgba(255, 255, 255, .8) 3px);--b-gripper-vert-edge-width: var(--b-gripper-edge-size);--b-gripper-vert-width: calc(var(--b-gripper-vert-edge-width) / 2);--b-gripper-vert-height: 12px;--b-gripper-vert-offset: 4px;--b-gripper-vert-transition: opacity .2s, margin-top .2s, height .2s}.b-gripper{position:absolute}.b-gripper:after{content:" " / "";position:absolute;opacity:0}.b-hover-top .b-gripper.b-gripper-horz,.b-hover-bottom .b-gripper.b-gripper-horz{cursor:var(--b-gripper-horz-cursor);height:var(--b-gripper-horz-edge-height);left:0;right:0}.b-hover-bottom .b-gripper.b-gripper-horz{bottom:0}.b-gripper.b-gripper-horz:after{width:0;left:50%;margin-inline-start:0;border-top:var(--b-gripper-border);border-bottom:var(--b-gripper-border);height:var(--b-gripper-horz-height)}.b-hover-left .b-gripper.b-gripper-vert,.b-hover-right .b-gripper.b-gripper-vert{top:0;bottom:0;cursor:var(--b-gripper-vert-cursor);width:var(--b-gripper-vert-edge-width)}.b-hover-right .b-gripper.b-gripper-vert{right:0}.b-hover-left .b-gripper.b-gripper-vert{left:0}.b-gripper.b-gripper-vert:after{height:0;top:50%;margin-top:0;background:var(--b-gripper-vert-gradient);width:var(--b-gripper-vert-width)}.b-hover-anim.b-hover-edge .b-gripper-horz:after{opacity:1;margin-inline-start:calc(var(--b-gripper-horz-width) / -2);width:var(--b-gripper-horz-width);transition:var(--b-gripper-horz-transition)}.b-hover-top .b-gripper-horz:after{top:var(--b-gripper-horz-offset)}.b-hover-bottom .b-gripper-horz:after{bottom:var(--b-gripper-horz-offset)}.b-hover-anim.b-hover-edge .b-gripper-vert:after{opacity:1;margin-top:calc(var(--b-gripper-vert-height) / -2);height:var(--b-gripper-vert-height);transition:var(--b-gripper-vert-transition)}.b-hover-left .b-gripper-vert:after{left:var(--b-gripper-vert-offset)}.b-hover-right .b-gripper-vert:after{right:var(--b-gripper-vert-offset)}.b-sftime-picker .b-panel-content{background:var(--b-panel-background);align-items:stretch;padding:.5em;gap:.5em}.b-sftime-picker .b-panel-content .b-widget{margin:0;flex:0 0 auto;width:auto}.b-sftime-picker .b-panel-content .b-number-field{height:100%}.b-sftime-picker .b-panel-content .b-number-field>.b-label{clip-path:polygon(0 0);position:absolute;contain:strict}.b-sftime-picker .b-panel-content .b-number-field:not(.b-first-visible-child):before{content:":";align-self:center;margin-inline-end:.5em;font-weight:700}.b-sftime-picker .b-panel-content .b-number-field input{width:3em}.b-sftime-picker .b-panel-content .b-button{flex:0 0 3em;padding:0}.b-sftime-picker .b-panel-content .b-button .b-button-label{text-overflow:clip}:root,:host{--b-button-box-shadow: null;--b-button-text-align: center;--b-button-disabled-opacity: .4;--b-button-icon-only-border-radius: 50%;--b-button-font-weight: 500;--b-button-gap: .5em;--b-button-height: 3em;--b-button-icon-padding-inline: var(--b-widget-padding);--b-button-end-icon-padding-inline: var(--b-widget-padding);--b-button-menu-padding-inline: var(--b-widget-padding);--b-button-opacity: 1;--b-button-padding-inline: var(--b-widget-padding);--b-button-pressed-box-shadow: none;--b-button-focus-outline-width: var(--b-widget-focus-outline-width);--b-button-focus-outline-offset: calc(var(--b-widget-focus-outline-width) * -1);--b-button-border-radius: var(--b-widget-border-radius);--b-button-elevated-active-box-shadow: var(--b-elevation-1);--b-button-elevated-box-shadow: var(--b-elevation-1);--b-button-elevated-focus-box-shadow: var(--b-elevation-1);--b-button-elevated-hover-box-shadow: var(--b-elevation-2);--b-button-filled-color: var(--b-text-5);--b-button-filled-hover-box-shadow: none;--b-button-tonal-hover-box-shadow: none;--b-button-outlined-border-width: 1px;--b-button-outlined-border-color: var(--b-border-6);--b-button-outlined-disabled-background: transparent;--b-button-outlined-disabled-border-color: var(--b-border-6);--b-button-outlined-background: transparent;--b-button-outlined-pressed-color: unset;--b-button-type-text-background: transparent;--b-button-type-text-disabled-background: transparent;--b-button-disabled-background: var(--b-widget-disabled-background);--b-button-disabled-color: var(--b-neutral-50);--b-button-type-text-focused-background: transparent;--b-button-type-text-text-only-border-radius: unset;--b-button-focus-outline-color: var(--b-primary)}.b-button{display:flex;align-items:center;position:relative;transition-property:box-shadow,font-weight,background,color,border,border-radius;transition-duration:var(--b-default-transition-duration);overflow:hidden;flex-shrink:0;font-family:inherit;text-decoration:none;padding-block:0;contain:style;--b-button-border-width: var(--b-button-idle-border-width);--b-button-border-color: var(--b-button-idle-border-color);--b-widget-font-weight: var(--b-button-font-weight);--bi-button-cursor: pointer;background:var(--b-button-background);border:var(--b-button-border-width) solid var(--b-button-border-color);border-radius:var(--b-button-border-radius);box-shadow:var(--b-button-box-shadow);color:var(--bi-button-applied-color, var(--b-button-color));cursor:var(--bi-button-cursor);gap:var(--b-button-gap);height:var(--b-button-height);max-height:var(--b-button-max-height);opacity:var(--b-button-opacity);padding-inline:var(--b-button-padding-inline);justify-content:var(--b-button-text-align)}.b-button .b-button-label,.b-button i{white-space:nowrap;text-overflow:ellipsis;transition:color .2s;z-index:1;margin:0;cursor:var(--bi-button-cursor)}.b-button .b-button-label{overflow:hidden}.b-button i{flex-shrink:0}.b-button.b-button-elevated{--b-button-background: var(--b-button-elevated-background, var(--b-primary-98));--b-button-hover-background: var(--b-button-elevated-hover-background, var(--b-primary-95));--b-button-focused-background: var(--b-button-elevated-focused-background, var(--b-primary-95));--b-button-active-background: var(--b-button-elevated-active-background, var(--b-primary-95));--b-button-pressed-background: var(--b-button-elevated-pressed-background, var(--b-primary-90));--b-button-pressed-hover-background: var(--b-button-elevated-pressed-hover-background, var(--b-primary-92));--b-button-box-shadow: var(--b-button-elevated-box-shadow);--b-button-hover-box-shadow: var(--b-button-elevated-hover-box-shadow);--b-button-focus-box-shadow: var(--b-button-elevated-focus-box-shadow);--b-button-active-box-shadow: var(--b-button-elevated-active-box-shadow);--b-button-color: var(--b-button-elevated-color, var(--b-primary-40));--b-button-split-color: var(--b-button-elevated-split-color, color-mix(in srgb, var(--b-button-color), transparent 70%))}.b-button.b-button-filled,.b-button.b-raised{--b-button-background: var(--b-button-filled-background, var(--b-primary-45));--b-button-hover-background: var(--b-button-filled-hover-background, var(--b-primary-55));--b-button-focused-background: var(--b-button-filled-focused-background, var(--b-primary-60));--b-button-active-background: var(--b-button-filled-active-background, var(--b-primary-60));--b-button-pressed-background: var(--b-button-filled-pressed-background, var(--b-primary-65));--b-button-pressed-hover-background: var(--b-button-filled-pressed-hover-background, var(--b-primary-70));--b-button-color: var(--b-button-filled-color);--b-button-hover-box-shadow: var(--b-button-filled-hover-box-shadow);--b-button-split-color: var(--b-button-filled-split-color, var(--b-button-color))}.b-button.b-button-tonal{--b-button-background: var(--b-button-tonal-background, var(--b-primary-95));--b-button-hover-background: var(--b-button-tonal-hover-background, var(--b-primary-90));--b-button-focused-background: var(--b-button-tonal-focused-background, var(--b-primary-90));--b-button-active-background: var(--b-button-tonal-active-background, var(--b-primary-85));--b-button-pressed-background: var(--b-button-tonal-pressed-background, var(--b-primary-80));--b-button-pressed-hover-background: var(--b-button-tonal-pressed-hover-background, var(--b-primary-85));--b-button-hover-box-shadow: var(--b-button-tonal-hover-box-shadow);--b-button-color: var(--b-button-tonal-color, var(--b-primary-30));--b-button-split-color: var(--b-button-tonal-split-color, color-mix(in srgb, var(--b-button-tonal-color, var(--b-primary-30)), transparent 70%));--b-button-idle-border-width: var(--b-button-tonal-border-width);--b-button-idle-border-color: var(--b-button-tonal-border-color);--b-button-focus-border-color: var(--b-button-tonal-border-color);--b-button-hover-border-color: var(--b-button-tonal-border-color);--b-button-disabled-border-color: var(--b-button-tonal-border-color)}.b-button.b-button-outlined{--b-button-background: var(--b-button-outlined-background);--b-button-hover-background: var(--b-button-outlined-hover-background, var(--b-primary-95));--b-button-focused-background: var(--b-button-outlined-focused-background, var(--b-primary-90));--b-button-active-background: var(--b-button-outlined-active-background, var(--b-primary-90));--b-button-pressed-background: var(--b-button-outlined-pressed-background, var(--b-primary-90));--b-button-pressed-hover-background: var(--b-button-outlined-pressed-hover-background, var(--b-primary-92));--b-button-color: var(--b-button-outlined-color, var(--b-primary-25));--b-button-pressed-color: var(--b-button-outlined-pressed-color);--b-button-idle-border-width: var(--b-button-outlined-border-width);--b-button-idle-border-color: var(--b-button-outlined-border-color);--b-button-focus-border-color: var(--b-button-outlined-focus-border-color, var(--b-primary));--b-button-hover-border-color: var(--b-button-outlined-hover-border-color, var(--b-primary-80));--b-button-disabled-background: var(--b-button-outlined-disabled-background);--b-button-disabled-border-color: var(--b-button-outlined-disabled-border-color);--b-button-split-color: var(--b-button-outlined-split-color, var(--b-button-border-color))}.b-button.b-button-text,.b-button.b-transparent{--b-button-background: var(--b-button-type-text-background);--b-button-hover-background: var(--b-button-type-text-hover-background, var(--b-primary-95));--b-button-focused-background: var(--b-button-type-text-focused-background);--b-button-active-background: var(--b-button-type-text-active-background, var(--b-primary-90));--b-button-pressed-background: var(--b-button-type-text-pressed-background, var(--b-primary-90));--b-button-pressed-hover-background: var(--b-button-type-text-pressed-hover-background, var(--b-primary-92));--b-button-color: var(--b-button-type-text-color, var(--b-primary-20));--b-button-disabled-background: var(--b-button-type-text-disabled-background);--b-button-split-color: var(--b-button-type-text-split-color, var(--b-button-color))}:is(.b-button.b-button-text,.b-button.b-transparent).b-split-button .b-button-menu-icon{align-self:center}:is(.b-button.b-button-text,.b-button.b-transparent).b-text:not(:has(.b-button-icon)){border-radius:var(--b-button-type-text-text-only-border-radius, var(--b-button-border-radius))}.b-button:focus-visible{outline-offset:var(--b-button-focus-outline-offset);outline:var(--b-button-focus-outline-color) solid var(--b-button-focus-outline-width)}.b-button.b-focus,.b-button:focus-visible{--b-button-background: var(--b-button-focused-background);--b-button-box-shadow: var(--b-button-focus-box-shadow);--b-button-border-color: var(--b-button-focus-border-color)}:is(.b-button:hover,.b-button .b-hover):where(:not(:active,.b-disabled)){--b-button-background: var(--b-button-hover-background);--b-button-box-shadow: var(--b-button-hover-box-shadow);--b-button-border-color: var(--b-button-hover-border-color)}.b-button.b-active,.b-button:active{--b-button-background: var(--b-button-active-background);--b-button-box-shadow: var(--b-button-active-box-shadow)}.b-button.b-rotate-vertical{padding-inline:0;padding-block:var(--b-button-padding-inline);width:var(--b-button-height);height:auto}.b-button.b-rotate-vertical .b-button-label{writing-mode:vertical-lr}.b-button.b-rotate-left{flex-direction:column-reverse}.b-button.b-rotate-left .b-button-label{rotate:180deg}.b-button.b-rotate-left i{rotate:270deg}.b-button.b-rotate-right{flex-direction:column}.b-button.b-rotate-right i{rotate:90deg}.b-button.b-pressed{--bi-button-applied-color: var(--b-button-pressed-color);--b-button-background: var(--b-button-pressed-background);--b-button-box-shadow: var(--b-button-pressed-box-shadow)}.b-button.b-pressed:hover{--b-button-background: var(--b-button-pressed-hover-background)}.b-button.b-icon-align-start{--b-button-padding-inline: var(--b-button-icon-padding-inline)}.b-button.b-icon-align-end{--b-button-padding-inline: var(--b-button-end-icon-padding-inline)}.b-button.b-icon-align-end .b-button-icon{order:1}.b-button.b-disabled{--b-button-color: var(--b-button-disabled-color);--b-button-background: var(--b-button-disabled-background);--b-button-opacity: var(--b-button-disabled-opacity);--b-button-box-shadow: none;--b-button-border-color: var(--b-button-disabled-border-color);--bi-button-cursor: normal}.b-button:not(.b-text,.b-has-menu-icon,.b-tab){aspect-ratio:1 / 1;--b-button-padding-inline: 0;--b-button-border-radius: var(--b-button-icon-only-border-radius)}.b-button.b-has-menu-icon:not(.b-text){--b-button-padding-inline: var(--b-button-menu-padding-inline)}.b-button .b-button-menu-icon:before{transition:rotate .2s}.b-button.b-menu-visible .b-button-menu-icon:before{rotate:180deg}.b-button-custom-content{display:flex;align-items:center}.b-using-keyboard .b-button-key{text-decoration:underline}.b-split-button{padding-inline-end:0}.b-split-button .b-button-menu-icon{display:grid;place-content:center;align-self:stretch;transition:border .2s;padding-inline:var(--b-button-padding-inline);border-inline-start:1px solid var(--b-button-split-color)}.b-split-button i:first-child{flex:1 0 auto;text-align:end}.b-split-button .b-button-label{flex:1 0 auto;text-align:start}:root,:host{--b-tab-border-radius: 0;--b-tab-indicator-border-radius: 0;--b-tab-font-weight: 500;--b-tab-padding: 0 var(--b-widget-padding-large);--b-tab-icon-only-padding: 0 var(--b-widget-padding);--b-tab-indicator-display: block;--b-tab-hover-indicator-opacity: 0;--b-tab-background: transparent;--b-tab-color: var(--b-neutral-40);--b-tab-close-color: var(--b-neutral-50);--b-tab-close-hover-color: var(--b-neutral-30);--b-tab-active-background: var(--b-tab-background);--b-tab-border: null;--b-tab-active-border: null;--b-tab-hover-border: var(--b-tab-border);--b-tab-label-position: null;--b-tab-indicator-height: .2em;--b-tab-hover-color: var(--b-neutral-20);--b-tab-active-tab-color: var(--b-neutral-0);--b-tab-invalid-indicator-color: var(--b-color-red);--b-tab-indicator-hidden-color: transparent;--b-tab-invalid-border: null;--bi-tab-indicator-opacity: 0}.b-button.b-tab{border:var(--b-tab-border);--b-button-background: var(--b-tab-background);--b-button-border-radius: var(--b-tab-border-radius);--b-button-hover-background: var(--b-tab-hover-background, var(--b-primary-95));--b-button-focused-background: var(--b-tab-focus-background, var(--b-primary-90));--b-button-color: var(--b-tab-color);--b-button-font-weight: var(--b-tab-font-weight);--b-button-padding: var(--b-tab-padding);--b-tab-indicator-applied-color: var(--b-tab-indicator-hidden-color, transparent)}.b-button.b-tab.b-active{--b-tab-border: var(--b-tab-active-border);--b-button-background: var(--b-tab-active-background);--b-tab-color: var(--b-tab-active-tab-color);--b-tab-indicator-applied-color: var(--b-tab-indicator-color);--bi-tab-indicator-opacity: 1}.b-button.b-tab:hover:where(:not(.b-active)){--b-tab-color: var(--b-tab-hover-color);--b-tab-border: var(--b-tab-hover-border);--b-button-background: var(--b-tab-hover-background, var(--b-primary-95))}.b-button.b-tab.b-invalid{--b-tab-indicator-applied-color: var(--b-tab-invalid-indicator-color);--bi-tab-indicator-opacity: 1;--b-tab-border: var(--b-tab-invalid-border)}.b-button.b-tab:not(.b-text){--b-button-icon-padding: var(--b-tab-icon-only-padding)}.b-button.b-tab .b-button-label{display:grid;place-items:center;align-self:stretch;position:var(--b-tab-label-position)}.b-tab-bar.b-dock-top{--b-tab-indicator-inset: auto 0 0 0}.b-tab-bar.b-dock-right{--b-tab-indicator-inset: 0 auto 0 0}.b-tab-bar.b-dock-bottom{--b-tab-indicator-inset: 0 0 auto 0}.b-tab-bar.b-dock-left{--b-tab-indicator-inset: 0 auto 0 0}.b-tab-indicator{position:absolute;transition:opacity .2s,background .2s;opacity:var(--bi-tab-indicator-opacity);inset:var(--b-tab-indicator-inset, auto 0 0 0);display:var(--b-tab-indicator-display);background:var(--b-tab-indicator-applied-color, var(--b-tab-active-tab-color));block-size:var(--b-tab-indicator-height);border-radius:var(--b-tab-indicator-border-radius)}.b-tab-close{font-size:.8em;cursor:pointer;color:var(--b-tab-close-color)}.b-tab-close:hover{color:var(--b-tab-close-hover-color)}.b-tab.b-drag-proxy{transition:background-color .3s;opacity:.9;background-color:var(--b-toolbar-background)}.b-aisettings-panel{padding-block:1em}.b-aisettings-panel .b-field-inner{justify-content:end}:root,:host{--b-chat-button-color: #FFF}.b-bryntum{--b-chat-button-background: var(--b-primary)}.b-chat-button.b-button{position:absolute;bottom:1em;inset-inline-end:1em;border:none;border-radius:50%;font-size:1em;width:2.75em;height:2.75em;display:grid;place-items:center;padding:0;margin:0;box-shadow:0 2px 8px #63636333;scale:1;transition:scale .2s;min-height:0;z-index:10000;outline:none;color:var(--b-chat-button-color);background:var(--b-chat-button-background)}.b-chat-button.b-button .b-button-menu-icon{display:none}.b-chat-button.b-button i{position:relative;display:grid;place-items:center;font-size:1.3em}.b-chat-button.b-button:hover{scale:1.1}.b-chat-button.b-button:active{scale:1}.b-using-keyboard .b-chat-button.b-button:focus:not(:active){box-shadow:0 0 .8em #3183fe}.b-chat-button.b-button.b-chat-button-animating i:before{animation:b-anim-chat-button-icon-transition .2s}.b-chat-button.b-button.b-chat-closed{--bi-content: "\f27a"}.b-chat-button.b-button.b-chat-closed-previous{--bi-previous-content: "\f27a"}.b-chat-button.b-button.b-chat-open{--bi-content: "\f00d"}.b-chat-button.b-button.b-chat-open-previous{--bi-previous-content: "\f00d"}.b-chat-button.b-button.b-voice-speaking{--bi-content: "\e473"}.b-chat-button.b-button.b-voice-speaking i{animation:b-anim-voice-speaking .7s infinite}.b-chat-button.b-button.b-voice-speaking-previous{--bi-previous-content: "\e473"}.b-chat-button.b-button.b-voice-waiting{--bi-content: "\f110";animation:b-anim-rotate 2s infinite linear}.b-chat-button.b-button.b-voice-waiting-previous{--bi-previous-content: "\f110"}.b-chat-button.b-button.b-voice-active{--bi-content: "\f130"}.b-chat-button.b-button.b-voice-active i{animation:b-anim-voice-active .9s ease-out infinite}.b-chat-button.b-button.b-voice-active-previous{--bi-previous-content: "\f130"}.b-chat-button.b-button.b-voice-inactive{--bi-content: "\f130";background:#aaa}.b-chat-button.b-button.b-voice-inactive-previous{--bi-previous-content: "\f130"}.b-chat-button.b-button .b-button-icon:before{content:var(--bi-content)}@keyframes b-anim-voice-speaking{0%{transform:none;opacity:1}49.9%{transform:none}50%{transform:scaleX(-1);opacity:.5}to{transform:scaleX(-1);opacity:1}}@keyframes b-anim-voice-active{0%{transform:scale(1);opacity:1}25%{transform:scale(.95)}60%{transform:scale(1.05);opacity:.8}to{transform:scale(1);opacity:1}}@keyframes b-anim-chat-button-icon-transition{0%{font-size:1em;content:var(--bi-previous-content)}50%{font-size:.1em}to{font-size:1em;content:var(--bi-content)}}@starting-style{.b-chat-button.b-button{scale:0}.b-chat-button.b-button i:after{opacity:0}}:root,:host{--b-chat-panel-border-radius: 1em;--b-chat-panel-message-them-align-self: flex-start;--b-chat-panel-message-them-background: var(--b-neutral-90);--b-chat-panel-message-them-color: var(--b-text-2);--b-chat-panel-intro-color: var(--b-neutral-50);--b-chat-panel-example-prompt-color: var(--b-neutral-70);--b-chat-panel-example-prompt-hover-color: var(--b-neutral-40);--b-chat-panel-message-us-align-self: flex-end;--b-chat-panel-message-us-color: #FFF;--b-chat-panel-message-color: var(--b-chat-panel-message-us-color);--b-chat-panel-tool-color: var(--b-color-lighter-gray);--b-chat-panel-tool-color-active: var(--b-color-gray);--b-chat-panel-tool-hover-color: var(--b-color-light-gray);--b-chat-panel-font-size: .8em;--b-chat-panel-loading-color: var(--b-text-3);--b-chat-panel-option-hover-background: color-mix(in srgb, var(--b-chat-panel-message-us-background), transparent 90%);--b-chat-panel-avatar-size: 5em}.b-internal{--bi-value: null}.b-chat-bubbles{display:flex;flex-flow:column nowrap;gap:.5em;overflow-x:clip;overflow-y:auto}.b-chat-bubbles:before{content:""}.b-chat-bubbles .b-message{display:flex;flex-direction:column;gap:.2em;overflow:clip;width:100%;flex-shrink:0;align-self:var(--b-chat-panel-message-align-self)}.b-chat-bubbles .b-bubble{padding:.5em .75em;opacity:1;transition:opacity .2s,translate .2s;translate:0;z-index:1;min-height:2.5em;line-height:1.5em;max-width:80%;word-wrap:break-word;overflow:auto;border-radius:var(--b-chat-panel-border-radius);align-self:var(--b-chat-panel-message-align-self);background:var(--b-chat-panel-message-background);color:var(--b-chat-panel-message-color)}.b-chat-bubbles .b-bubble .b-aborted{opacity:.3}.b-chat-bubbles .b-bubble .b-failed{color:var(--b-color-red)}.b-chat-bubbles .b-bubble strong{font-weight:600}.b-chat-bubbles .b-undone .b-bubble{opacity:.3}.b-chat-bubbles .b-async .b-bubble{width:3.5em;display:flex;align-items:center;overflow:clip}.b-chat-bubbles .b-async .b-asyncstatus{font-size:.8em;opacity:.8;padding-inline-start:.2em}.b-chat-bubbles .b-bubble-loading{position:relative;inset-inline-start:-2em;width:.5em;height:.5em;border-radius:50%;animation:b-anim-jumping-dots 2s infinite;box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}.b-chat-bubbles .b-bubble-tools{display:flex;padding-inline:.75em;gap:.5em;align-items:center;transition:opacity .2s,translate .2s;transition-delay:.2s;justify-content:var(--b-chat-panel-message-them-align-self)}.b-chat-bubbles .b-bubble-tools .b-undone-tag{border-radius:1em;font-size:.75em;padding-inline:.5em;background:var(--b-color-red);color:var(--b-neutral-100)}.b-chat-bubbles .b-bubble-tool{font-size:var(--b-chat-panel-font-size);color:var(--b-chat-panel-tool-color)}.b-chat-bubbles .b-bubble-tool:hover{--b-chat-panel-tool-color: var(--b-chat-panel-tool-hover-color)}.b-chat-bubbles button.b-bubble-tool{cursor:pointer;border:none;background:transparent;padding-inline:0}.b-chat-bubbles .b-timestamp{font-size:.7em;color:var(--b-chat-panel-tool-color)}.b-chat-bubbles .b-us{--b-chat-panel-message-align-self: var(--b-chat-panel-message-us-align-self);--b-chat-panel-message-background: var(--b-chat-panel-message-us-background, var(--b-primary));--b-chat-panel-message-color: var(--b-chat-panel-message-us-color)}.b-chat-bubbles .b-them{--b-chat-panel-message-align-self: var(--b-chat-panel-message-them-align-self);--b-chat-panel-message-background: var(--b-chat-panel-message-them-background);--b-chat-panel-message-color: var(--b-chat-panel-message-them-color)}.b-chat-bubbles .b-confidence{position:relative;width:1em;height:.6em;border-radius:.25em;border:1px solid var(--b-chat-panel-tool-color);overflow:clip}.b-chat-bubbles .b-confidence:before{display:block;position:absolute;content:"";height:100%;opacity:.6;width:calc(var(--bi-value) * 100%);background:var(--b-chat-panel-tool-color)}.b-chat-bubbles .b-options{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5em;opacity:1;transition:height .2s,opacity .2s,gap .2s;height:auto;overflow:hidden;align-items:var(--b-chat-panel-message-us-align-self)}.b-chat-bubbles .b-options:has(.b-selected){gap:0}.b-chat-bubbles .b-options:has(.b-selected) .b-option{pointer-events:none}.b-chat-bubbles .b-options:has(.b-selected) .b-option:not(.b-selected){opacity:0;height:0;min-height:0;padding-block:0;display:none;transition-delay:0s}.b-chat-bubbles .b-option{background:none;font-size:1em;padding:.5em .75em;opacity:1;transition:opacity .2s,translate .2s,height .2s,min-height .2s,padding .2s,display .2s;transition-delay:.2s;translate:0;min-height:2.5em;line-height:1.5em;overflow:hidden;transition-behavior:allow-discrete;interpolate-size:allow-keywords;border:1px solid var(--b-chat-panel-tool-color);border-radius:var(--b-chat-panel-border-radius)}.b-chat-bubbles .b-option:not(.b-outdated):hover{cursor:pointer;background:var(--b-chat-panel-option-hover-background)}.b-chat-bubbles .b-option.b-selected{border:none;background:var(--b-chat-panel-message-us-background, var(--b-primary));color:var(--b-chat-panel-message-us-color)}.b-chat-bubbles .b-option:nth-child(2){transition-delay:.3s}.b-chat-bubbles .b-option:nth-child(3){transition-delay:.4s}.b-chat-bubbles .b-option:nth-child(4){transition-delay:.5s}.b-chat-bubbles .b-option:nth-child(5){transition-delay:.6s}.b-chat-bubbles .b-option:nth-child(6){transition-delay:.7s}.b-chat-bubbles .b-option.b-outdated{opacity:.3;transition-delay:0s}.b-chat-bubbles .b-bottom-anchor{min-height:1px}@starting-style{.b-chat-bubbles.b-animate .b-bubble{opacity:0;translate:0 1em}.b-chat-bubbles.b-animate .b-bubble-tools{opacity:0;translate:0 -1em}.b-chat-bubbles.b-animate .b-option{translate:-100% 0;opacity:0}}@keyframes b-anim-jumping-dots{0%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}16.667%{box-shadow:2em -.5em 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}33.333%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}50%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em -.5em 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}66.667%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}83.333%{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em -.5em 0 0 var(--b-chat-panel-loading-color)}to{box-shadow:2em 0 0 0 var(--b-chat-panel-loading-color),2.75em 0 0 0 var(--b-chat-panel-loading-color),3.5em 0 0 0 var(--b-chat-panel-loading-color)}}.b-chat-panel-mixin.b-panel>header{gap:.5em}.b-chat-panel-mixin.b-panel>header:after{display:none}.b-float-root>.b-chat-panel-mixin.b-panel.b-floating{--b-aligned-above-floating-box-shadow: var(--b-widget-floating-box-shadow )}.b-chat-panel-mixin.b-panel .b-chat-panel-mixin-content{--b-panel-with-header-padding: 0}.b-chat-panel-mixin.b-panel .b-chat-panel-mixin-content>div{padding-inline:1em}.b-chat-panel-mixin.b-panel .b-chat-bubbles{padding-top:1em;flex:1}.b-chat-panel-mixin.b-panel .b-intro{display:flex;flex-direction:column;align-items:center;gap:.5em;text-align:center;margin-bottom:1em;color:var(--b-chat-panel-intro-color)}.b-chat-panel-mixin.b-panel .b-intro div{line-height:1.5em}.b-chat-panel-mixin.b-panel .b-intro .b-chat-avatar{border-radius:50%;margin-bottom:1em;background:var(--b-primary);width:var(--b-chat-panel-avatar-size)}.b-chat-panel-mixin.b-panel .b-example-prompt{font-size:.9em;font-style:italic;cursor:pointer;color:var(--b-chat-panel-example-prompt-color)}.b-chat-panel-mixin.b-panel .b-example-prompt:before{content:'"'}.b-chat-panel-mixin.b-panel .b-example-prompt:after{content:'"'}.b-chat-panel-mixin.b-panel .b-example-prompt:hover{color:var(--b-chat-panel-example-prompt-hover-color)}.b-chat-panel-mixin.b-panel .b-text-field{padding-bottom:1em}.b-chat-panel-mixin.b-panel .b-text-field .b-field-inner{border-radius:var(--b-chat-panel-border-radius)}.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger{color:var(--b-chat-panel-tool-color)}.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger:before{font-size:1.5em}.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger:hover{color:var(--b-chat-panel-tool-hover-color)}.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger.b-send-chat-msg{transition:color .2s}.b-using-keyboard :is(.b-chat-panel-mixin.b-panel .b-text-field .b-field-trigger).b-icon-mic:focus{padding-inline-end:0;margin-inline-end:.6em;outline-offset:.4em}.b-chat-panel-mixin.b-panel .b-text-field .b-send-chat-msg:not(.b-disabled){color:var(--b-chat-panel-tool-color-active)}.b-is-speaking button.b-bubble-tool[data-ref=readAloud],.b-aichat-panel-mixin.b-panel .b-text-field .b-is-recording,.b-aichat-panel-mixin.b-panel .b-text-field .b-is-recording:hover{color:#00f}.b-bubble ul,.b-bubble ol{padding-inline-start:1em}.b-bubble>p:first-child{margin-block-start:0}.b-bubble>p:last-child{margin-block-end:0}.b-aichat-panel-mixin .b-panel-header .b-tool[data-ref=offline]{color:#f99d9d}.b-confirmation-dialog:not(.b-centered,.b-dragged-by-user){top:.5em;inset-inline-start:calc(100% - .5em);translate:-100%;transition:top .4s ease,inset-inline-start .4s ease}.b-confirmation-dialog .b-approve-button{--b-primary: var(--b-color-green )}.b-confirmation-dialog .b-reject-button{--b-primary: var(--b-color-red)}.b-confirmation-dialog .b-message-icon{font-size:2em;color:var(--b-primary)}.b-confirmation-dialog .b-message{align-items:center}.b-confirmation-dialog .b-confirmation-dialog-content>*{white-space:nowrap}.b-confirmation-dialog .b-records-item{background-color:var(--b-neutral-90);display:flex;align-items:center;border-radius:1em;padding:.5em}@media (max-width: 500px){.b-confirmation-dialog .b-toolbar-fill,.b-confirmation-dialog .b-approve-button label,.b-confirmation-dialog .b-reject-button label{display:none}}@media (max-width: 400px){.b-confirmation-dialog .b-highlight-button label{display:none}}@media (max-width: 300px){.b-confirmation-dialog .b-preview-button label{display:none}}.b-panel.b-checkbox-group{gap:var(--bi-field-gap)}.b-panel.b-checkbox-group .b-fieldset-content.b-inline{flex-wrap:wrap}.b-panel.b-checkbox-group .b-fieldset-content.b-inline label{white-space:nowrap}.b-panel.b-checkbox-group.b-invalid .b-checkbox label:before{outline-offset:2px;outline:1px solid var(--b-color-red)}:root,:host{--b-container-gap: var(--b-widget-gap);--b-container-padding: 0;--b-container-color: var(--b-widget-color);--b-divider-font-size: .9em;--b-divider-line-color: var(--b-border-5);--b-divider-text-color: var(--b-border-4);--b-divider-font-weight: null;--b-divider-margin-block: 1em;--b-container-border-width: 1px;--b-container-border-color: var(--b-border-7)}.b-internal{--bi-container-columns: null}.b-container{min-width:0;min-height:0;color:var(--b-container-color);gap:var(--b-container-gap);padding:var(--b-container-padding);align-content:var(--b-container-align-content)}.b-container:where(:not(.b-panel)){display:grid;grid-auto-rows:min-content}.b-container:where(:not(.b-panel)).b-columns{grid-template-columns:repeat(var(--bi-container-columns),auto)}.b-container.b-vbox{display:flex;flex-direction:column}.b-container.b-vbox.b-single-child:not(.b-toolbar-content)>.b-container{align-self:stretch;flex:1 1 auto}.b-container.b-hbox{display:flex;flex-flow:row nowrap}.b-container.b-hbox.b-single-child:not(.b-toolbar-content)>.b-container{align-self:stretch;flex:1 1 auto}.b-container.b-field-align-end .b-field-inner{justify-content:flex-end;justify-self:end}.b-container.b-bordered{border:var(--b-container-border-width) solid var(--b-container-border-color);border-radius:var(--b-widget-border-radius)}.b-content-element:has(>.b-splitter){gap:0}.b-content-element:has(>.b-splitter.b-moving) *{transition:none!important}:is(.b-container,.b-panel).b-label-align-before{--b-field-align-before-label-column: span 1;--b-field-align-before-field-column: span 1}.b-container.b-label-align-before,.b-panel.b-label-align-before>.b-panel-body-wrap>.b-panel-content,.b-panel.b-label-align-before>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content{grid-template-columns:repeat(var(--bi-container-columns, 1),max-content 1fr);grid-auto-rows:min-content}:is(.b-container.b-label-align-before,.b-panel.b-label-align-before>.b-panel-body-wrap>.b-panel-content,.b-panel.b-label-align-before>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content)>.b-has-label{display:contents;--b-field-label-padding: 0}:is(.b-container.b-label-align-before,.b-panel.b-label-align-before>.b-panel-body-wrap>.b-panel-content,.b-panel.b-label-align-before>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content)>.b-has-label>label{grid-row:auto}:is(.b-container.b-label-align-before,.b-panel.b-label-align-before>.b-panel-body-wrap>.b-panel-content,.b-panel.b-label-align-before>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content)>.b-has-label>.b-field-inner{grid-row:auto}.b-content-element{position:relative}.b-content-element.b-text-content{display:block;overflow:auto}.b-divider{justify-content:center;grid-column:1 / -1;margin-block:var(--b-divider-margin-block)}.b-divider:before{content:"";width:100%;border-bottom:1px solid var(--b-divider-line-color);position:absolute;top:50%}.b-divider[data-text]:after{display:flex;padding:0 1em;content:attr(data-text);z-index:1;color:var(--b-divider-text-color);background:var(--b-parent-background-color, var(--b-panel-background));font-size:var(--b-divider-font-size);font-weight:var(--b-divider-font-weight)}.b-undo-redo-base.b-toolbar{gap:.5em;align-items:center}:root,:host{--b-button-group-border-width: 0px;--b-button-group-border-radius: var(--b-button-border-radius);--b-button-group-box-shadow: none;--b-button-group-border-color: transparent;--b-button-group-padded-padding: .3em;--b-button-group-padded-background: var(--b-neutral-95);--b-button-group-padded-active-background: var(--b-neutral-97);--b-button-group-padded-pressed-background: var(--b-neutral-100);--b-button-group-padded-pressed-hover-background: var(--b-neutral-98);--b-button-group-padded-pressed-box-shadow: 0 1px 3px 0 rgb(0 0 0 /.05), 0 1px 1px 0 rgb(0 0 0 /.04), 0 2px 1px -1px rgb(0 0 0 /.03);--b-button-group-padded-pressed-border: null;--b-button-group-padded-button-opacity: .5;--b-button-group-padded-border: null;--b-button-group-padded-filled-pressed-color: var(--b-neutral-100)}.b-bryntum{--b-button-group-padded-filled-pressed-background: var(--b-primary-50);--b-button-group-padded-filled-pressed-hover-background: var(--b-primary-55)}.b-button-group{display:flex;gap:0;flex-shrink:0;align-items:center;width:min-content;height:min-content;transition-property:box-shadow,border,opacity,background;box-shadow:var(--b-button-group-box-shadow);border:var(--b-button-group-border-width) solid var(--b-button-group-border-color);opacity:var(--bi-button-group-opacity, 1);transition-duration:var(--b-default-transition-duration)}.b-button-group.b-columned{width:100%;flex-wrap:wrap}.b-button-group.b-button-group-tonal .b-button{--bi-button-group-button-border-end-width: 1px;--b-button-group-border-color: color-mix(in oklab, var(--b-button-tonal-color), transparent 80%)}.b-button-group.b-button-group-elevated{--b-button-group-box-shadow: var(--b-button-elevated-box-shadow)}.b-button-group.b-button-group-outlined{--b-button-group-border-color: var(--b-button-outlined-border-color);--b-button-group-border-width: var(--b-button-outlined-border-width);--bi-button-group-button-border-end-width: var(--b-button-outlined-border-width)}.b-button-group.b-button-group-outlined.b-disabled{--b-button-group-border-color: var(--b-button-outlined-disabled-border-color);--bi-button-group-opacity: var(--b-button-disabled-opacity)}.b-button-group.b-button-group-outlined.b-disabled .b-button{--b-button-disabled-opacity: 1}.b-button-group.b-rotate-vertical{flex-direction:column}.b-button-group .b-button{--b-button-border-width: 0;--b-button-box-shadow: none}.b-button-group .b-button:not(.b-button-text){--b-button-border-radius: 0}.b-button-group .b-button:not(.b-last-visible-child){border-inline-end:var(--bi-button-group-button-border-end-width) solid var(--b-button-group-border-color)}.b-button-group .b-button:not(.b-text,.b-button-text){aspect-ratio:unset;min-width:3.25em}.b-button-group .b-button:focus{z-index:3}.b-button-group .b-pressed{z-index:2}.b-button-group:where(.b-no-gap:not(.b-button-group-text,.b-button-group-padded,.b-button-group-padded-filled)){border-radius:var(--b-button-group-border-radius)}.b-button-group:where(.b-no-gap:not(.b-button-group-text,.b-button-group-padded,.b-button-group-padded-filled)) .b-first-visible-child{border-start-start-radius:calc(var(--b-button-group-border-radius) - var(--b-button-group-border-width));border-end-start-radius:calc(var(--b-button-group-border-radius) - var(--b-button-group-border-width))}.b-button-group:where(.b-no-gap:not(.b-button-group-text,.b-button-group-padded,.b-button-group-padded-filled)) .b-last-visible-child{border-start-end-radius:calc(var(--b-button-group-border-radius) - var(--b-button-group-border-width));border-end-end-radius:calc(var(--b-button-group-border-radius) - var(--b-button-group-border-width))}.b-button-group-padded,.b-button-group-padded-filled{background:var(--b-button-group-padded-background);border-radius:var(--b-button-group-border-radius);padding:var(--b-button-group-padded-padding);border:var(--b-button-group-padded-border);gap:3px}:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button{background:transparent;transition-property:opacity,background,box-shadow,border;transition-duration:var(--b-default-transition-duration);border-radius:calc(var(--b-button-group-border-radius) - 1px);height:calc(var(--b-button-height) - var(--b-button-group-padded-padding) * 2);opacity:var(--b-button-group-padded-button-opacity)}:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button:hover,:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button.b-pressed{opacity:1}:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button:active{background:var(--b-button-group-padded-active-background)}:is(.b-button-group-padded,.b-button-group-padded-filled) .b-button.b-pressed{background:var(--b-button-group-padded-pressed-background);border:var(--b-button-group-padded-pressed-border);box-shadow:var(--b-button-group-padded-pressed-box-shadow)}:is(.b-button-group-padded,.b-button-group-padded-filled):not(.b-toggle-group){gap:var(--b-button-group-padded-padding)}:is(.b-button-group-padded,.b-button-group-padded-filled):not(.b-toggle-group) .b-button.b-pressed:hover{background:var(--b-button-group-padded-pressed-hover-background)}.b-button-group-padded-filled .b-button.b-pressed{box-shadow:none;background:var(--b-button-group-padded-filled-pressed-background);color:var(--b-button-group-padded-filled-pressed-color)}.b-button-group-padded-filled:not(.b-toggle-group) .b-button.b-pressed:hover{background:var(--b-button-group-padded-filled-pressed-hover-background)}:root,:host{--b-editor-background: transparent;--b-editor-border-radius: var(--b-widget-border-radius)}.b-editor{display:flex;overflow:visible;background:var(--b-editor-background);border-radius:var(--b-editor-border-radius)}.b-editor .b-label{display:none}.b-editor .b-field{display:flex;width:100%;height:100%;--b-text-field-input-height: 100%}.b-editor .b-field-inner{height:100%}.b-field-filter-picker{display:flex;flex-flow:row wrap;overflow:visible;--b-container-gap: 1em;--b-text-field-default-width: 100%}.b-field-filter-picker-property,.b-field-filter-picker-operator,.b-field-filter-picker-values,.b-field-filter-picker-case-sensitive,.b-field-filter-picker-values-multiple{flex:1;min-width:10em}:is(.b-field-filter-picker-property,.b-field-filter-picker-operator,.b-field-filter-picker-values,.b-field-filter-picker-case-sensitive,.b-field-filter-picker-values-multiple).b-hidden{display:none}.b-field-filter-picker-values-multiple{display:flex;align-items:center;gap:var(--b-container-gap)}.b-field-filter-picker-values-multiple .b-field{flex:1}.b-combo.b-field-filter-picker-combo-locked{margin-top:.25em;--b-text-field-border-width: 0;--b-text-field-input-padding: 0;--b-text-field-input-height: 3em;--b-text-field-background: transparent}:root,:host{--b-panel-gap: var(--b-widget-gap);--b-panel-background: var(--b-neutral-100);--b-panel-header-color: var(--b-widget-color);--b-panel-overlay-box-shadow: var(--b-elevation-1);--b-panel-drawer-box-shadow: var(--b-elevation-4);--b-panel-header-font-size: 1.2em;--b-panel-header-font-weight: calc(var(--b-widget-font-weight) + 100);--b-panel-header-text-align: start;--b-panel-header-gap: var(--b-widget-gap);--b-panel-padding: var(--b-widget-padding-large);--b-panel-with-header-padding: var(--b-panel-padding);--b-panel-bottom-toolbar-padding: var(--b-widget-padding-large);--b-panel-bottom-toolbar-background: transparent;--b-panel-top-toolbar-margin-inline: null;--b-panel-top-toolbar-border-radius: null;--b-panel-with-header-top-toolbar-background: var(--b-neutral-97);--b-panel-header-padding: var(--b-widget-padding-large);--b-panel-border: null;--b-panel-header-background: transparent;--b-drawer-size: 30em;--b-panel-overlay-border: null;--b-default-panel-transition: background var(--b-default-transition-duration), color var(--b-default-transition-duration), border-color var(--b-default-transition-duration)}.b-panel{display:flex;flex-direction:column;gap:0;outline:none;transition:var(--b-default-panel-transition);overflow:clip;background:var(--b-panel-background);border:var(--b-panel-border)}.b-panel.b-columns .b-panel-content{display:grid;grid-auto-rows:min-content;grid-template-columns:repeat(var(--bi-container-columns),auto)}.b-panel.b-panel-has-header>.b-panel-body-wrap>.b-top-toolbar:not(.b-tab-bar){margin-inline:var(--b-panel-top-toolbar-margin-inline);border-radius:var(--b-panel-top-toolbar-border-radius);background:var(--b-panel-with-header-top-toolbar-background)}.b-panel>.b-panel-overlay,.b-panel>.b-panel-body-wrap{z-index:0}.b-panel>.b-panel-collapse-size-locker{position:absolute!important}.b-panel .b-panel-overlay-right{border-inline-start:var(--b-panel-overlay-border)}.b-panel:not(.b-panel-collapsible-overlay).b-collapsed>.b-panel-collapse-size-locker{clip:rect(0,0,0,0)}:is(.b-panel:not(.b-panel-collapsible-overlay).b-panel-collapse-down:not(.b-panel-has-header),.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-bottom.b-panel-collapse-down,.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-bottom.b-panel-collapse-up)>.b-panel-collapse-size-locker{top:0}:is(.b-panel:not(.b-panel-collapsible-overlay).b-panel-collapse-up:not(.b-panel-has-header),.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-top.b-panel-collapse-up,.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-top.b-panel-collapse-down)>.b-panel-collapse-size-locker{bottom:0}:is(.b-panel:not(.b-panel-collapsible-overlay).b-panel-collapse-left:not(.b-panel-has-header),.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-left.b-panel-collapse-left,.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-left.b-panel-collapse-right)>.b-panel-collapse-size-locker{right:0}:is(.b-panel:not(.b-panel-collapsible-overlay).b-panel-collapse-right:not(.b-panel-has-header),.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-right.b-panel-collapse-left,.b-panel:not(.b-panel-collapsible-overlay).b-header-dock-right.b-panel-collapse-right)>.b-panel-collapse-size-locker{left:0}.b-panel.b-panel-collapsible-overlay{background:transparent}.b-panel.b-panel-collapsible-overlay:not(.b-collapsing,.b-expanding,.b-panel-overlay-revealed,.b-panel-overlay-revealing)>.b-panel-overlay>.b-panel-overlay-header{display:none}.b-panel.b-panel-collapsible-overlay.b-panel-overlay-revealed>.b-panel-overlay{box-shadow:var(--b-panel-overlay-box-shadow);overflow:visible}.b-panel.b-panel-collapsible-overlay>.b-panel-header{transition:translate .2s ease-in-out}.b-panel.b-panel-collapsible-overlay.b-collapsed>.b-panel-header>.b-collapsify-hide{display:none}:is(.b-panel.b-panel-collapsible-overlay.b-collapsing,.b-panel.b-panel-collapsible-overlay.b-expanding)>.b-panel-header{opacity:0}.b-panel.b-panel-collapsible-overlay:not(.b-collapsed,.b-collapsing)>.b-panel-overlay>.b-panel-overlay-header{display:none}.b-panel.b-panel-collapsible-overlay.b-collapsing,.b-panel.b-panel-collapsible-overlay.b-expanding,.b-panel.b-panel-collapsible-overlay.b-panel-overlay-revealing,.b-panel.b-panel-collapsible-overlay.b-panel-overlay-revealed{overflow:visible;z-index:1}.b-panel.b-panel-collapsible-overlay.b-collapsing{overflow:visible}.b-panel.b-panel-collapsible-overlay.b-collapsing>.b-panel-header{z-index:-1}.b-panel.b-panel-collapsible-overlay.b-collapsing.b-panel-collapse-up>.b-panel-header{translate:0 -100%}.b-panel.b-panel-collapsible-overlay.b-collapsing.b-panel-collapse-down>.b-panel-header{translate:0 100%}.b-panel.b-panel-collapsible-overlay.b-collapsing.b-panel-collapse-right>.b-panel-header{translate:100% 0}.b-panel.b-panel-collapsible-overlay.b-collapsing.b-panel-collapse-left>.b-panel-header{translate:-100% 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding){border:none}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding)>.b-panel-collapse-size-locker{transition:translate .2s cubic-bezier(.06,1.1,.58,1),clip-path .2s ease-out,top .2s ease-out,right .2s ease-out,bottom .2s ease-out,left .2s ease-out}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-up>.b-panel-collapse-size-locker{translate:0 -100%}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-up.b-panel-overlay-revealed>.b-panel-collapse-size-locker{clip-path:inset(0 0 -20px 0);translate:0 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-down>.b-panel-collapse-size-locker{translate:0 100%}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-down.b-panel-overlay-revealed>.b-panel-collapse-size-locker{clip-path:inset(-20px 0 0 0);translate:0 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-left>.b-panel-collapse-size-locker{translate:-100% 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-left.b-panel-overlay-revealed>.b-panel-collapse-size-locker{clip-path:inset(0 -20px 0 0);translate:0 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-right>.b-panel-collapse-size-locker{translate:100% 0}.b-panel.b-panel-collapsible-overlay.b-collapsed:not(.b-expanding).b-panel-collapse-right.b-panel-overlay-revealed>.b-panel-collapse-size-locker{clip-path:inset(0 0 0 -20px);translate:0 0}.b-panel.b-panel-collapsible-overlay.b-expanding{flex:none!important;overflow:visible}.b-panel.b-header-dock-right,.b-panel.b-header-dock-bottom{justify-content:flex-end}.b-panel.b-collapsed:not(.b-expanding,.b-panel-overlay-revealed,.b-panel-overlay-revealing){visibility:hidden;flex:0 1 0}.b-panel.b-collapsed>.b-panel-collapse-revealer{visibility:visible;cursor:pointer}.b-panel.b-collapsed>.b-panel-collapse-revealer.b-dock-right,.b-panel.b-collapsed>.b-panel-collapse-revealer .b-dock-left{height:100%;border-block:none}.b-panel .b-panel-collapser-header{display:none}.b-panel.b-collapse-unflex{flex-grow:unset!important;flex-basis:unset!important;flex-shrink:0!important}:is(.b-panel.b-collapsed,.b-panel.b-collapsing) .b-panel-collapser-header{display:flex}:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-top,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-bottom{min-height:auto!important}:is(:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-top,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-bottom).b-panel-collapsible-overlay:not(.b-panel-overlay-revealed,.b-panel-overlay-revealing){height:unset!important}.b-vbox>:is(:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-top,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-bottom){flex:none!important}:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-right,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-left{min-width:auto!important}:is(:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-right,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-left).b-panel-collapsible-overlay:not(.b-panel-overlay-revealed,.b-panel-overlay-revealing){width:unset!important}.b-hbox>:is(:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-right,:is(.b-panel.b-collapsed,.b-panel.b-collapsing).b-header-dock-left){flex:none!important}.b-panel.b-collapsed:not(.b-expanding,.b-panel-overlay-revealed,.b-panel-overlay-revealing).b-header-dock-right,.b-panel.b-collapsed:not(.b-expanding,.b-panel-overlay-revealed,.b-panel-overlay-revealing).b-header-dock-left{width:unset!important;flex:unset!important}.b-drawer-panel{--b-panel-overlay-box-shadow: var(--b-panel-drawer-box-shadow)}.b-drawer-panel:not(.b-positioned,.b-floating){flex:unset}.b-drawer-panel.b-panel-overlay-revealed>header.b-panel-collapse-revealer{display:none}.b-drawer-panel>header.b-panel-collapse-revealer{display:none}.b-drawer-panel.b-panel-collapse-up{min-height:var(--b-drawer-size);height:auto;inset:0 0 auto}.b-drawer-panel.b-panel-collapse-right{width:var(--b-drawer-size);inset:0 0 0 auto}.b-drawer-panel.b-panel-collapse-down{min-height:var(--b-drawer-size);height:auto;inset:auto 0 0}.b-drawer-panel.b-panel-collapse-left{width:var(--b-drawer-size);inset:0 auto 0 0}.b-panel-overlay{background:var(--b-panel-background)}.b-panel-header{display:flex;flex-direction:row;align-items:center;flex-shrink:0;z-index:1;transition:background var(--b-default-transition-duration),color var(--b-default-transition-duration),border var(--b-default-transition-duration);background:var(--b-panel-header-background);color:var(--b-panel-header-color);padding:var(--b-panel-header-padding);gap:var(--b-panel-header-gap);border-bottom:var(--b-panel-header-border-bottom)}.b-panel-collapsible>.b-panel-header{cursor:pointer}.b-panel-header.b-dock-top{border-top-left-radius:inherit;border-top-right-radius:inherit}.b-panel-header.b-dock-right{flex-flow:column nowrap;border-start-end-radius:inherit;border-end-end-radius:inherit;order:100}.b-panel-header.b-dock-right,.b-panel-header.b-dock-bottom{order:100}.b-panel-header.b-dock-left{flex-flow:column-reverse nowrap;border-start-start-radius:inherit;border-end-start-radius:inherit}.b-panel-header.b-dock-left .b-header-title{rotate:180deg}:is(.b-panel-header.b-dock-right,.b-panel-header.b-dock-left) .b-header-title{writing-mode:vertical-lr}.b-panel-header .b-header-title{align-items:center;flex:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;font-size:var(--b-panel-header-font-size);font-weight:var(--b-panel-header-font-weight);text-align:var(--b-panel-header-text-align);gap:var(--b-panel-header-gap)}.b-panel-header .b-header-title.b-header-html-title,.b-panel-header .b-header-title.b-panel-ui-toolbar{display:flex}.b-panel-body-wrap{overflow:hidden;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.b-panel-body-wrap .b-top-toolbar .b-button.b-button-text{--b-button-type-text-color: var(--b-panel-top-toolbar-button-type-text-color, var(--b-primary-20))}.b-panel-body-wrap .b-bottom-toolbar{background:var(--b-panel-bottom-toolbar-background);--b-toolbar-padding: var(--b-panel-bottom-toolbar-padding)}.b-panel-collapser{z-index:0}.b-panel-content{flex:1;overflow:clip;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;gap:var(--b-panel-gap);padding:var(--b-panel-padding)}.b-panel-content:where(:not(.b-vbox,.b-hbox)){display:grid;grid-auto-rows:min-content;align-items:center}.b-panel-content.b-vbox{--b-text-field-default-width: 100%}.b-panel-has-header:where(:not(:has(.b-top-toolbar:not(.b-hidden,.b-tab-bar))))>.b-panel-body-wrap>.b-panel-content{padding:var(--b-panel-with-header-padding)}.b-panel .b-panel-content:has(+.b-bottom-toolbar:not(.b-bordered,.b-hidden)){padding-block-end:0}.b-collapse-tool:before{rotate:var(--b-panel-collapse-tool-rotate)}.b-collapse-tool:not(.b-collapsing):before{transition:all .2s ease-in-out}.b-collapse-tool.b-rotate-left,.b-collapse-tool.b-rotate-right{--b-panel-collapse-tool-rotate: 0deg}.b-collapse-tool.b-collapsed{--b-panel-collapse-tool-rotate: 180deg}.b-panel-ui-plain{--b-panel-header-background: var(--b-panel-background);--b-panel-header-color: var(--b-widget-color)}.b-panel-ui-toolbar{--b-panel-header-background: var(--b-grid-header-background, var(--b-toolbar-background));--b-panel-header-color: var(--b-widget-color);--b-panel-header-font-size: var(--b-widget-font-size);--b-panel-header-padding: 1em;--b-panel-header-border-bottom: 1px solid var(--b-grid-header-border-color, var(--b-border-5))}:root,:host{--b-calendar-panel-day-font-size: unset;--b-calendar-panel-day-header-font-weight: 500;--b-calendar-panel-week-width: 2em;--b-calendar-panel-week-number-display: none;--b-calendar-panel-cell-display: flex;--b-calendar-panel-cell-padding: none;--b-calendar-panel-cell-font-size: 1em;--b-calendar-panel-cell-font-weight: var(--b-widget-font-weight);--b-calendar-panel-disabled-cell-opacity: .4;--b-calendar-panel-non-working-cell-display: flex;--b-calendar-panel-gap: 0em;--b-calendar-panel-day-color: unset;--b-calendar-panel-color: var(--b-widget-color);--b-calendar-panel-other-month-color: var(--b-neutral-60);--b-calendar-panel-weeks-gap: .5em}.b-internal{--bi-min-column-width: null}.b-calendar-panel{user-select:none;-webkit-user-select:none}.b-calendar-panel.b-show-week-column{--b-calendar-panel-week-number-display: flex}.b-calendar-panel.b-hide-other-month-cells .b-other-month{visibility:hidden;pointer-events:none}.b-calendar-panel.b-disable-other-month-cells .b-other-month{pointer-events:none;opacity:var(--b-calendar-panel-disabled-cell-opacity)}.b-calendar-panel.b-shade-past-dates .b-past-date{opacity:var(--b-calendar-panel-disabled-cell-opacity)}.b-calendar-panel-content{gap:0;padding:0}.b-calendar-panel-content.b-hide-non-working-days .b-non-working-day{display:none}.b-calendar-panel-row{display:flex}.b-week-number-cell{flex-direction:column;justify-content:center;cursor:pointer;display:var(--b-calendar-panel-week-number-display);font-size:var(--b-calendar-panel-day-font-size);width:var(--b-calendar-panel-week-width);color:var(--b-calendar-panel-week-number-color, var(--b-primary-20))}.b-calendar-week-days .b-week-number-cell{flex-direction:row;font-size:var(--b-calendar-panel-day-font-size)}.b-calendar-day-header{flex:1;justify-content:center;display:flex;color:var(--b-calendar-panel-day-color);font-size:var(--b-calendar-panel-day-font-size);min-width:var(--bi-min-column-width);font-weight:var(--b-calendar-panel-day-header-font-weight)}.b-calendar-week-days{padding-inline:var(--b-calendar-panel-gap);gap:var(--b-calendar-panel-gap)}.b-weeks-container{display:flex;flex-flow:column nowrap;padding-block:var(--b-calendar-panel-weeks-gap);gap:var(--b-calendar-panel-weeks-gap)}.b-weeks-container .b-calendar-panel-row{flex:1;min-height:var(--bi-min-row-height, 0)}.b-calendar-panel-days{display:flex;flex:1;gap:var(--b-calendar-panel-gap)}.b-calendar-panel-cell{flex:1;justify-content:center;align-items:center;position:relative;transition:padding var(--b-default-transition-duration);color:var(--b-calendar-panel-color);display:var(--b-calendar-panel-cell-display);padding:var(--b-calendar-panel-cell-padding);background:var(--b-calendar-panel-cell-background);font-weight:var(--b-calendar-panel-cell-font-weight);font-size:var(--b-calendar-panel-cell-font-size);min-width:var(--bi-min-column-width)}.b-calendar-panel-cell.b-other-month{--b-calendar-panel-color: var(--b-calendar-panel-other-month-color)}.b-calendar-panel-cell.b-disabled-date{opacity:var(--b-calendar-panel-disabled-cell-opacity)}:root,:host{--b-date-picker-min-width: 25em;--b-date-picker-title-font-weight: 600;--b-date-picker-day-font-size: 1em;--b-date-picker-date-padding: .5em;--b-date-picker-date-font-size: 1em;--b-date-picker-today-font-weight: inherit;--b-date-picker-selected-font-weight: 600;--b-date-picker-selected-week-border-radius: 2px;--b-date-picker-cell-margin-block: 2px;--b-date-picker-toolbar-font-size: 1em;--b-date-picker-day-color: var(--b-neutral-20);--b-date-picker-date-color: var(--b-neutral-30);--b-date-picker-today-background: transparent;--b-date-picker-selected-color: var(--b-primary-30);--b-date-picker-header-padding: 1.5em 0;--b-date-picker-color: var(--b-primary)}.b-date-picker{position:relative;opacity:1;flex-shrink:0;color:var(--b-date-picker-color);min-width:var(--b-date-picker-min-width);--b-calendar-panel-day-color: var(--b-date-picker-day-color);--b-calendar-panel-day-font-size: var(--b-date-picker-day-font-size);--b-calendar-panel-color: var(--b-date-picker-date-color);--b-calendar-panel-cell-background: transparent;--b-calendar-panel-cell-font-size: var(--b-date-picker-date-font-size);--b-panel-header-padding: var(--b-date-picker-header-padding)}.b-date-picker.b-date-picker-has-payload{--b-calendar-panel-cell-display: block}.b-date-picker.b-floating .b-weeks-container{max-height:24em}.b-date-picker .b-top-toolbar{--b-toolbar-background: transparent;--b-toolbar-gap: 0}.b-date-picker .b-top-toolbar>.b-toolbar-content>.b-widget{font-size:var(--b-date-picker-toolbar-font-size)}.b-date-picker .b-top-toolbar .b-button{min-width:2em;--b-button-type-text-color: var(--b-date-picker-toolbar-color, var(--b-primary-30))}.b-date-picker .b-top-toolbar .b-widget{--b-primary: inherit}.b-date-picker .b-top-toolbar .b-text-field{color:var(--b-date-picker-toolbar-color, var(--b-primary-30));--b-text-field-background: transparent}.b-date-picker .b-top-toolbar i{font-size:.9em}:is(.b-date-picker [data-ref=monthButton],.b-date-picker [data-ref=yearButton]) .b-button-label{font-size:1.1em}.b-date-picker .b-calendar-panel-cell{cursor:pointer;line-height:1;margin-block:var(--b-date-picker-cell-margin-block)}.b-date-picker .b-calendar-panel-cell:hover{--b-date-picker-date-background: var(--b-date-picker-date-hover-background, var(--b-primary-95));color:var(--b-date-picker-date-hover-color)}.b-date-picker .b-calendar-panel-cell:focus-visible{outline:none}.b-date-picker .b-calendar-panel-cell:focus-visible:after{content:"";position:absolute;z-index:1;border-radius:.25em;pointer-events:none;inset:calc(var(--b-widget-focus-outline-width) * -1) var(--b-widget-focus-outline-width);outline:var(--b-widget-focus-outline-width) solid var(--b-widget-focus-outline-color);outline-offset:-1px}:is(.b-date-picker .b-calendar-panel-cell:not(.b-range-end):last-child,.b-date-picker .b-calendar-panel-cell:not(.b-range-end).b-last-visible-cell):before{clip-path:polygon(0 0,calc(100% - 10px) 0,100% 50%,calc(100% - 10px) 100%,0 100%)}:is(.b-date-picker .b-calendar-panel-cell:not(.b-range-start):first-child,.b-date-picker .b-calendar-panel-cell:not(.b-range-start).b-first-visible-cell):before{clip-path:polygon(10px 0,100% 0,100% 100%,10px 100%,0 50%)}.b-date-picker .b-date-picker-cell-payload{pointer-events:none;position:absolute;inset:auto 0 0;display:flex;justify-content:center;overflow:clip;z-index:1;font-weight:var(--b-widget-font-weight)}.b-date-picker .b-month-picker,.b-date-picker .b-year-picker{inset:0;z-index:1}.b-date-picker .b-selected-date:not(.b-in-range){--b-date-picker-date-hover-background: var(--b-date-picker-selected-hover-background, var(--b-date-picker-selected-background, var(--b-primary-90)));--b-calendar-panel-color: var(--b-date-picker-selected-color);--b-date-picker-date-background: var(--b-date-picker-selected-background, var(--b-primary-90));--b-calendar-panel-cell-font-weight: var(--b-date-picker-selected-font-weight);--b-date-picker-date-border: var(--b-date-picker-selected-border)}.b-date-picker .b-today,.b-date-picker .b-today:not(.b-in-range){--b-date-picker-date-border: var(--b-date-picker-today-border, 1px solid var(--b-date-picker-today-color, var(--b-primary-50)))}.b-date-picker .b-today{--b-date-picker-date-hover-background: var(--b-date-picker-today-hover-background, var(--b-primary-95));--b-calendar-panel-color: var(--b-date-picker-today-color, var(--b-primary-50));--b-calendar-panel-date-background: var(--b-date-picker-today-background);--b-calendar-panel-cell-font-weight: var(--b-date-picker-today-font-weight)}.b-date-picker.b-highlight-selected-week .b-calendar-week:has(.b-selected-date){background:var(--b-date-picker-selected-week-background, var(--b-primary-95));border-radius:var(--b-date-picker-selected-week-border-radius)}.b-date-picker .b-in-range{--b-date-picker-selected-color: var(--b-date-picker-selected-range-color)}:is(.b-date-picker .b-range-start:where(:not(.b-range-end)),.b-date-picker .b-range-end:where(:not(.b-range-start)),.b-date-picker .b-in-range):before{content:"";position:absolute;display:block;height:100%;inset-inline-start:0;background:var(--b-date-picker-selected-range-background, var(--b-primary-96))}.b-date-picker .b-range-start:before{inset-inline-start:50%;width:calc(50% + var(--b-calendar-panel-gap))}.b-date-picker .b-in-range:before{width:calc(100% + var(--b-calendar-panel-gap))}.b-date-picker .b-range-end:before{width:50%}.b-date-picker .b-out-of-range{opacity:var(--b-calendar-panel-disabled-cell-opacity)}.b-date-picker-cell-inner{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:50%;height:100%;position:relative;z-index:1;aspect-ratio:1 / 1;min-width:2.25em;background:var(--b-date-picker-date-background);padding:var(--b-date-picker-date-padding);outline:var(--b-date-picker-date-border)}.b-date-picker-title{display:flex;flex-direction:row;flex:1;align-items:center;justify-content:center;gap:.3em;overflow:visible}.b-date-picker-month-button,.b-date-picker-year-button{padding:0;background:transparent;border-radius:1px;font-weight:var(--b-date-picker-title-font-weight);--b-button-focus-outline-offset: 1px}.b-carousel-content:not(.b-carousel-empty){padding:0}.b-carousel-content>.b-carousel-content{overflow:clip}.b-carousel-content.b-carousel-empty>.b-carousel-inner-ct,.b-carousel-content:not(.b-carousel-empty)>.b-carousel-empty-text{display:none}.b-multi-date-picker.b-widget.b-floating,.b-multi-date-picker.b-widget.b-floating .b-carousel-inner-ct{border-radius:var(--b-popup-border-radius)}.b-multi-date-picker .b-top-toolbar{--b-toolbar-gap: var(--b-date-range-field-gap)}.b-multi-date-picker [data-ref=yearButton],.b-multi-date-picker [data-ref=monthButton]{color:var(--b-button-type-text-color);opacity:1}.b-multi-date-picker-nav-floating{overflow:visible}.b-multi-date-picker-nav-floating>.b-multi-date-picker-nav-button{position:absolute;top:50%;z-index:1;box-shadow:var(--b-elevation-1);--b-button-type-text-background: var(--b-panel-background);--b-button-type-text-hover-background: var(--b-primary-97)}.b-multi-date-picker-nav-floating>.b-multi-date-picker-next-button{inset-inline-end:0;translate:calc(50% * var(--b-rtl-negate)) -50%}.b-multi-date-picker-nav-floating>.b-multi-date-picker-prev-button{inset-inline-start:0;translate:calc(-50% * var(--b-rtl-negate)) -50%}.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker-content .b-calendar-week,.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker-content .b-calendar-week-days{padding-inline:1.5em}.b-multi-date-picker-content>.b-carousel-inner-ct [data-ref=nextMonth],.b-multi-date-picker-content>.b-carousel-inner-ct [data-ref=prevMonth],.b-multi-date-picker-content>.b-carousel-inner-ct [data-ref=prevYear],.b-multi-date-picker-content>.b-carousel-inner-ct [data-ref=nextYear]{display:none}.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker.b-carousel-visible.b-carousel-first>.b-top-focus-trap,.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker.b-carousel-visible.b-carousel-last>.b-end-focus-trap{display:none}.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker.b-carousel-reserve [data-ref=monthField]{pointer-events:none}.b-multi-date-picker-content>.b-carousel-inner-ct .b-date-picker.b-carousel-reserve [data-ref=yearButton]{display:none}.b-demo-code-editor{width:490px;flex:unset;--b-toolbar-padding: .5em;--b-panel-padding: 0;--b-panel-background: var(--b-neutral-100);--b-text-field-input-height: 3em;--b-panel-overlay-border: none;--b-toolbar-background: transparent}.b-demo-code-editor .b-top-toolbar{height:58px;--b-toolbar-gap: 0}@media (min-width : 2000px){.b-demo-code-editor{width:700px}}.b-demo-code-editor:not(.b-collapsed){border-inline-start:var(--b-splitter-size, 4px) solid var(--b-border-7)}:is(.b-demo-code-editor.b-collapsed,.b-demo-code-editor.b-collapsing) .b-panel-collapse-revealer{display:none}.b-demo-code-editor:not(.b-resizing){transition:border-width .1s}.b-demo-code-editor .b-code-editor-body-wrap,.b-demo-code-editor .b-panel-overlay{overflow:hidden}.b-demo-code-editor .b-panel-content{direction:ltr}.b-demo-code-editor.b-resizing *{user-select:none;-webkit-user-select:none}.b-demo-code-editor.b-over-resize-handle{cursor:ew-resize}.b-demo-code-editor.b-hidden{display:flex!important;border-inline-start-width:0}.b-demo-code-editor .b-bottom-toolbar{transition:background-color .2s}.readonly :is(.b-demo-code-editor .b-bottom-toolbar){background-color:#ff8d46}.b-demo-code-editor .b-bottom-toolbar [data-ref=cursorPos]{margin-inline-start:auto}.b-demo-code-editor .b-bottom-toolbar .b-toolbar-content{padding:1em!important}.b-demo-code-editor.invalid .b-bottom-toolbar{color:#fff;background:#b71c1c}.b-demo-code-editor [data-ref=filesCombo]{margin-inline-end:.5em}.b-demo-code-editor-file-picker{--b-list-item-gap: 0}.b-demo-code-editor-file-picker .b-editor-file-type{margin-inline-end:.5em}:root,:host{--b-field-label-padding: 0;--b-field-label-default-gap: var(--b-widget-gap);--b-field-label-above-gap: .5em;--b-field-label-before-gap: var(--b-widget-gap);--b-field-default-template-areas: "before inner";--b-field-default-template-columns: auto 1fr;--b-field-default-label-padding: 0 1em 0 0;--b-field-error-tip-primary: var(--b-color-red);--b-field-align-before-label-column: unset;--b-field-align-before-field-column: unset}@property --bi-field-template-areas{syntax : "*"; inherits : false;}@property --bi-field-template-columns{syntax : "*"; inherits : false;}.b-field,.b-slider{display:grid;grid-template-rows:100%;align-items:center;justify-items:start;flex-shrink:0;--bi-field-template-areas: "inner";--bi-field-template-columns: 1fr;grid-template-areas:var(--bi-field-template-areas);grid-template-columns:var(--bi-field-template-columns);color:var(--b-primary);gap:var(--bi-field-gap);--b-field-label-grid-area: before}:is(.b-field,.b-slider) .b-field-inner{display:grid;align-items:center;justify-items:center;grid-area:inner;max-height:100%}:is(.b-field,.b-slider) .b-label{align-self:center;grid-area:var(--b-field-label-grid-area);padding:var(--b-field-label-padding)}.b-vbox>:is(.b-field,.b-slider).b-label-above .b-label{align-self:flex-start}:is(.b-field,.b-slider).b-has-label{--bi-field-template-areas: var(--b-field-default-template-areas);--bi-field-template-columns: var(--b-field-default-template-columns);--bi-field-gap: var(--b-field-label-default-gap)}:is(.b-field,.b-slider).b-has-label.b-required .b-label:after{content:"*"}:is(.b-field,.b-slider).b-label-align-before,:is(.b-field,.b-slider).b-label-before{--bi-field-template-columns: auto 1fr;--bi-field-template-areas: "before inner";--b-field-label-grid-area: before;--bi-field-gap: var(--b-field-label-before-gap)}:is(.b-field,.b-slider).b-label-above{grid-template-rows:auto 1fr;--bi-field-template-columns: 1fr;--bi-field-template-areas: "above" "inner";--b-field-label-grid-area: above;--bi-field-gap: var(--b-field-label-above-gap)}:is(.b-field,.b-slider).b-label-align-before .b-label{grid-column:var(--b-field-align-before-label-column)}:is(.b-field,.b-slider).b-label-align-before .b-field-inner{grid-column:var(--b-field-align-before-field-column)}:is(:is(.b-field,.b-slider).b-read-only,:is(.b-field,.b-slider).b-disabled) .b-field-trigger{pointer-events:none;opacity:.5}.b-field-container-wrap{display:flex;flex:1 1 auto;overflow:hidden;position:relative;gap:var(--b-container-gap)}.b-field-container-wrap>.b-container{width:100%}.b-field.b-collapsed:not(.b-field-container-inline)>.b-field-container-wrap{height:0}.b-field.b-collapsed.b-field-container-inline>.b-field-container-wrap{opacity:0}.b-field-container:not(.b-field-container-inline) .b-field-container{gap:var(--b-container-gap)}.b-field-container-inline{gap:var(--b-container-gap);--bi-field-template-areas: "inner container";--bi-field-template-columns: max-content 1fr}.b-field-container-inline .b-field-container-wrap{grid-area:container;width:100%}.b-field-container-inline .b-field-container{width:100%;display:flex;flex-direction:row;flex-wrap:nowrap}:root,:host{--b-checkbox-size: 1.25em;--b-checkbox-border-radius: calc(var(--b-widget-border-radius) / 2);--b-checkbox-check-font-size: .9em;--b-checkbox-disabled-opacity: .4;--b-checkbox-inner-gap: 1em;--b-checkbox-ring-content: none;--b-checkbox-border-width: 1px;--b-checkbox-border-color: var(--b-widget-border-color);--b-checkbox-checked-border-color: var(--b-widget-border-color);--b-checkbox-checked-check-color: var(--b-neutral-100);--b-checkbox-disabled-checked-check-color: var(--b-neutral-100);--b-checkbox-hover-border-color: var(--b-border-3);--b-checkbox-focus-outline-width: var(--b-widget-focus-outline-width);--b-checkbox-focus-outline-offset: 2px;--b-checkbox-focus-outline-color: var(--b-widget-focus-outline-color);--bi-checkbox-ring-opacity: 0}.b-checkbox{width:fit-content;overflow:visible}.b-checkbox>.b-field-inner>input{grid-area:input;appearance:none;margin:0}.b-checkbox:not(.b-disabled) input{cursor:pointer}:is(.b-checkbox:focus-within,.b-checkbox.b-focus) input{outline:none}:is(.b-checkbox:focus-within,.b-checkbox.b-focus) input:focus-visible~.b-checkbox-box,:is(.b-checkbox:focus-within,.b-checkbox.b-focus).b-focus input~.b-checkbox-box{outline:var(--b-checkbox-focus-outline-width) solid var(--b-checkbox-focus-outline-color);outline-offset:var(--b-checkbox-focus-outline-offset)}.b-checkbox>.b-field-inner{grid-template-areas:"input"}.b-checkbox.b-text>.b-field-inner{grid-template-areas:"input after";gap:var(--b-checkbox-inner-gap)}.b-checkbox .b-checkbox-label{grid-area:after;white-space:nowrap;justify-self:stretch;overflow:hidden;text-overflow:ellipsis;user-select:none;-webkit-user-select:none;color:var(--b-label-color)}.b-checkbox label{cursor:pointer}.b-checkbox:not(.b-disabled):has(input:hover),.b-checkbox:not(.b-disabled).b-hover{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-hover-opacity)}.b-checkbox:not(.b-disabled):has(input:focus-visible),.b-checkbox:not(.b-disabled).b-focus{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-focus-opacity)}.b-checkbox:not(.b-disabled):has(input:active),.b-checkbox:not(.b-disabled).b-active{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-active-opacity)}.b-checkbox:not(.b-slide-toggle)>.b-field-inner{grid-template-columns:var(--b-checkbox-size)}.b-checkbox:not(.b-slide-toggle)>.b-field-inner input{aspect-ratio:1 / 1;width:var(--b-checkbox-size)}.b-checkbox:not(.b-slide-toggle).b-text>.b-field-inner{grid-template-columns:var(--b-checkbox-size) auto}.b-checkbox:not(.b-slide-toggle)>.b-field-inner:before{content:var(--b-checkbox-ring-content);background:var(--b-primary);grid-area:input;border-radius:50%;pointer-events:none;transition:opacity .3s;aspect-ratio:1 / 1;width:calc(var(--b-checkbox-size) * 2.25);opacity:var(--bi-checkbox-ring-opacity)}.b-checkbox:not(.b-slide-toggle) input:checked~.b-checkbox-box{--b-checkbox-background: var(--b-checkbox-checked-background);--b-checkbox-border-color: var(--b-checkbox-checked-border-color)}.b-checkbox:not(.b-slide-toggle) input:checked~.b-checkbox-box:after{scale:1}.b-checkbox:not(.b-slide-toggle).b-disabled{--b-checkbox-border-color: var(--b-checkbox-disabled-border-color, var(--b-widget-disabled-color));--b-checkbox-checked-border-color: var(--b-checkbox-disabled-background, var(--b-widget-disabled-color));--b-checkbox-checked-check-color: var(--b-checkbox-disabled-checked-check-color);--b-checkbox-checked-background: var(--b-checkbox-disabled-checked-background, var(--b-widget-disabled-background));--b-label-color: var(--b-checkbox-disabled-background, var(--b-widget-disabled-color));--b-checkbox-opacity: var(--b-checkbox-disabled-opacity)}.b-checkbox:not(.b-slide-toggle):not(.b-disabled):has(input:hover),.b-checkbox:not(.b-slide-toggle):not(.b-disabled).b-hover{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-hover-opacity);--b-checkbox-background: var(--b-checkbox-hover-background);--b-checkbox-border-color: var(--b-checkbox-hover-border-color)}:is(.b-checkbox:not(.b-slide-toggle):not(.b-disabled):has(input:hover),.b-checkbox:not(.b-slide-toggle):not(.b-disabled).b-hover) input:checked~.b-checkbox-box{--b-checkbox-background: var(--b-checkbox-checked-hover-background)}.b-checkbox:not(.b-slide-toggle):not(.b-disabled):has(input:focus-visible),.b-checkbox:not(.b-slide-toggle):not(.b-disabled).b-focus{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-focus-opacity)}.b-checkbox:not(.b-slide-toggle):not(.b-disabled):has(input:active),.b-checkbox:not(.b-slide-toggle):not(.b-disabled).b-active{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-active-opacity)}.b-checkbox-box{grid-area:input;pointer-events:none;display:flex;align-items:center;justify-content:center;transition:background .2s ease,border .2s ease;width:var(--b-checkbox-size);height:var(--b-checkbox-size);border-radius:var(--b-checkbox-border-radius);border:var(--b-checkbox-border-width) solid var(--b-checkbox-border-color);background:var(--b-checkbox-background);opacity:var(--b-checkbox-opacity, 1)}.b-checkbox-box:after{transition:scale .2s ease,border .2s ease;scale:0;font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);content:var(--b-checkbox-checked-check-content);color:var(--b-checkbox-checked-check-color);font-size:var(--b-checkbox-check-font-size)}.b-menu>.b-menu-body-wrap .b-menu-content>.b-checkbox{margin-inline-start:var(--b-checkbox-inner-gap)}.b-field-container:not(.b-field-container-inline)>.b-field-container-wrap{margin-top:.5em;margin-inline-start:calc(var(--b-checkbox-size) + var(--b-checkbox-inner-gap))}.b-container.b-label-align-before .b-checkbox:not(.b-has-label){grid-column:2 / 2}:root,:host{--b-field-filter-picker-group-gap: 4em}.b-field-filter-picker-group .b-no-visible-children{display:none}.b-field-filter-picker-group [data-ref=pickers]{--b-container-gap: 0}.b-field-filter-picker-group-row{position:relative;flex-shrink:0;align-items:baseline;overflow:visible;padding-top:var(--b-field-filter-picker-group-gap);padding-bottom:.5em}.b-field-filter-picker-group-row:first-child{--b-field-filter-picker-group-gap: 0}.b-field-filter-picker-group-row:first-child:before{display:none}.b-field-filter-picker-group-row:before{content:attr(data-separator-text);font-size:85%;position:absolute;text-align:center;width:100%;top:.15em;background-position:0 50%;background-size:100% 1px;background-repeat:no-repeat;background-image:linear-gradient(to right,var(--b-border-5),var(--b-border-5) 44%,transparent 44%,transparent 56%,var(--b-border-5) 56%);height:var(--b-field-filter-picker-group-gap);line-height:var(--b-field-filter-picker-group-gap)}.b-field-filter-picker-group-row:not(.b-field-filter-picker-group-row-removable){padding-inline-end:2.25em}.b-field-filter-picker-group-row [data-ref=pickers]{gap:0}.b-field-filter-picker-group-filter-active{width:2.3em;align-self:center}.b-field-filter-picker-group-filter-active.b-slide-toggle{width:3.5em}.b-field-filter-picker-group-other-filters{padding:.5em 0}.b-field-filter-picker-group-add-button{align-self:center}.b-field-filter-picker-group-remove{margin-inline-start:.25em}:root,:host{--b-radio-check-gap: .2em;--b-radio-background: var(--b-neutral-100);--b-radio-checked-background: var(--b-radio-background);--b-radio-checked-border-color: var(--b-radio-checked-color)}.b-radio.b-checkbox{--b-checkbox-border-radius: 50%;--b-checkbox-checked-check-content: "";--b-checkbox-checked-check-color: var(--b-primary);--b-checkbox-background: var(--b-radio-background);--b-checkbox-checked-background: var(--b-radio-checked-background);--b-checkbox-checked-border-color: var(--b-radio-checked-border-color);--b-checkbox-checked-hover-background: var(--b-radio-checked-background);--b-checkbox-check-font-size: 1em}.b-radio.b-checkbox .b-checkbox-box:after{border-radius:50%;aspect-ratio:1 / 1;width:100%;background:var(--b-radio-checked-color, var(--b-primary));border:var(--b-radio-check-gap) solid var(--b-radio-checked-background)}:root,:host{--b-slide-toggle-border-width: var(--b-checkbox-border-width);--b-slide-toggle-width: 2.75em;--b-slide-toggle-height: 1.75em;--b-slide-toggle-thumb-size: 1em;--b-slide-toggle-border-radius: calc(var(--b-slide-toggle-height) / 2);--b-slide-toggle-checked-thumb-size: 1em;--b-slide-toggle-thumb-offset: .15em;--b-slide-toggle-font-size: 1em;--b-slide-toggle-disabled-opacity: .5;--b-slide-toggle-inner-gap: .5em;--b-slide-toggle-label-before-padding: 0 .5em 0 0;--b-slide-toggle-ring-color: var(--b-neutral-60);--b-slide-toggle-disabled-background: var(--b-neutral-85);--b-slide-toggle-disabled-thumb-background: var(--b-neutral-100);--b-slide-toggle-focus-outline-width: var(--b-checkbox-focus-outline-width);--b-slide-toggle-focus-outline-offset: var(--b-checkbox-focus-outline-offset);--b-slide-toggle-thumb-border: null;--b-slide-toggle-checked-thumb-border: null;--b-slide-toggle-thumb-color: var(--b-primary);--b-slide-toggle-thumb-background: var(--b-neutral-100);--b-slide-toggle-hovered-thumb-background: var(--b-neutral-95);--b-slide-toggle-checked-thumb-background: var(--b-neutral-100);--b-slide-toggle-checked-border-color: var(--b-slide-toggle-checked-background);--b-slide-toggle-checked-ring-color: var(--b-primary);--b-slide-toggle-checked-thumb-offset: 4px}.b-internal{--bi-slidetoggle-thumb-position: null}.b-slide-toggle{--bi-slidetoggle-thumb-position: calc(var(--b-slide-toggle-thumb-offset) + (var(--b-slide-toggle-checked-thumb-size) - var(--b-slide-toggle-thumb-size)) / 2);--b-checkbox-inner-gap: var(--b-slide-toggle-inner-gap);--b-checkbox-label-before-padding: var(--b-slide-toggle-label-before-padding)}.b-slide-toggle .b-field-inner{grid-template-columns:max-content}.b-slide-toggle input{width:100%;height:100%}.b-slide-toggle input:checked~.b-slide-toggle-toggle{--b-slide-toggle-background: var(--b-slide-toggle-checked-background, var(--b-primary));--b-slide-toggle-thumb-background: var(--b-slide-toggle-checked-thumb-background);--b-slide-toggle-thumb-border: var(--b-slide-toggle-checked-thumb-border);--b-slide-toggle-thumb-size: var(--b-slide-toggle-checked-thumb-size);--b-slide-toggle-border-color: var(--b-slide-toggle-checked-border-color);--b-slide-toggle-ring-color: var(--b-slide-toggle-checked-ring-color);--bi-slidetoggle-thumb-position: calc(var(--b-slide-toggle-width) - var(--b-slide-toggle-checked-thumb-size) - var(--b-slide-toggle-checked-thumb-offset))}.b-slide-toggle:not(.b-disabled):hover,.b-slide-toggle:not(.b-disabled).b-hover,.b-slide-toggle:not(.b-disabled):focus-within,.b-slide-toggle:not(.b-disabled).b-focus,.b-slide-toggle:not(.b-disabled).b-active,.b-slide-toggle:not(.b-disabled):active{--b-slide-toggle-thumb-background: var(--b-slide-toggle-hovered-thumb-background);--b-slide-toggle-background: var(--b-slide-toggle-hover-background)}:is(.b-slide-toggle:not(.b-disabled):hover,.b-slide-toggle:not(.b-disabled).b-hover,.b-slide-toggle:not(.b-disabled):focus-within,.b-slide-toggle:not(.b-disabled).b-focus,.b-slide-toggle:not(.b-disabled).b-active,.b-slide-toggle:not(.b-disabled):active) input:checked~.b-slide-toggle-toggle{--b-slide-toggle-thumb-background: var(--b-slide-toggle-checked-hovered-thumb-background);--b-slide-toggle-background: var(--b-slide-toggle-checked-hover-background, var(--b-primary))}:is(.b-slide-toggle:not(.b-disabled):focus-within,.b-slide-toggle:not(.b-disabled).b-focus):has(:focus-visible) .b-slide-toggle-toggle,:is(.b-slide-toggle:not(.b-disabled):focus-within,.b-slide-toggle:not(.b-disabled).b-focus).b-focus .b-slide-toggle-toggle{outline:var(--b-slide-toggle-focus-outline-width) solid var(--b-slide-toggle-focus-outline-color, var(--b-checkbox-focus-outline-color));outline-offset:var(--b-slide-toggle-focus-outline-offset)}.b-slide-toggle.b-disabled{--b-slide-toggle-opacity: var(--b-slide-toggle-disabled-opacity);--b-slide-toggle-border-color: var(--b-slide-toggle-disabled-border-color);--b-slide-toggle-checked-border-color: var(--b-slide-toggle-disabled-border-color)}.b-slide-toggle.b-disabled input:checked~.b-slide-toggle-toggle{--b-slide-toggle-background: var(--b-slide-toggle-disabled-background);--b-slide-toggle-thumb-background: var(--b-slide-toggle-disabled-thumb-background);--b-slide-toggle-checked-border-color: var(--b-slide-toggle-disabled-background)}.b-slide-toggle-toggle{display:flex;align-items:center;pointer-events:none;grid-area:input;transition:background .2s,border .2s,opacity .2s;font-size:var(--b-slide-toggle-font-size);width:var(--b-slide-toggle-width);height:var(--b-slide-toggle-height);background:var(--b-slide-toggle-background);border:var(--b-slide-toggle-border-width) solid var(--b-slide-toggle-border-color);border-radius:var(--b-slide-toggle-border-radius);opacity:var(--b-slide-toggle-opacity, 1)}.b-slide-toggle-thumb{aspect-ratio:1 / 1;border-radius:50%;transition:background .2s ease,width .2s ease,margin .2s ease;position:relative;background:var(--b-slide-toggle-thumb-background);border:var(--b-slide-toggle-thumb-border);color:var(--b-slide-toggle-thumb-color);width:var(--b-slide-toggle-thumb-size);margin-inline-start:var(--bi-slidetoggle-thumb-position)}.b-slide-toggle-thumb:before{border-radius:50%;pointer-events:none;transition:opacity .5s ease;aspect-ratio:1 / 1;display:block;position:absolute;top:50%;inset-inline-start:50%;translate:calc(-50% * var(--b-rtl-negate)) -50%;content:var(--b-checkbox-ring-content);background:var(--b-slide-toggle-ring-color);opacity:var(--bi-checkbox-ring-opacity);width:calc(var(--b-slide-toggle-checked-thumb-size) * 1.7)}.b-date-time-field{width:unset;--b-text-field-default-width: 22em}.b-date-time-field.b-field>div.b-field-inner{display:flex}.b-date-time-field.b-field>div.b-field-inner:has(.b-field-trigger.b-align-start),.b-date-time-field.b-field>div.b-field-inner:has(.b-field-trigger.b-align-end){padding-inline:0}.b-date-time-field .b-date-field,.b-date-time-field .b-time-field{border-top-left-radius:0;border-bottom-left-radius:0;grid-template-areas:"inner";grid-template-columns:1fr;--b-text-field-background: transparent}:is(.b-date-time-field .b-date-field,.b-date-time-field .b-time-field) .b-label{display:none}:is(.b-date-time-field .b-date-field,.b-date-time-field .b-time-field) .b-field-inner:before{content:none}.b-date-time-field .b-date-field{flex:1 1 53%}.b-date-time-field .b-date-field .b-step-trigger-forward.b-align-end{padding-inline-end:calc(var(--b-text-field-input-padding) / 2)}.b-date-time-field .b-time-field{flex:1 1 46%}.b-date-time-field .b-time-field .b-field-trigger.b-align-start{padding-inline-start:calc(var(--b-text-field-input-padding) / 2)}:root,:host{--b-text-field-font-weight: normal;--b-text-field-padding: 0;--b-text-field-input-font-size: var(--b-widget-font-size);--b-text-field-input-padding: 0;--b-text-field-border-style: solid;--b-text-field-focus-border-style: solid;--b-text-field-disabled-opacity: .4;--b-text-field-outlined-border-radius: var(--b-widget-border-radius);--b-field-trigger-gap: .75em;--b-field-trigger-edge-gap: 1em;--b-text-field-default-template-areas: "before inner";--b-text-field-default-template-columns: auto 1fr;--b-text-field-default-label-padding: 0 var(--b-widget-padding) 0 0;--b-text-field-label-grid-area: before;--b-text-field-label-color: var(--b-widget-color);--b-text-field-input-color: var(--b-widget-color);--b-text-field-border-color: var(--b-widget-border-color);--b-text-field-label-above-grid-area: above;--b-text-field-label-font-size: var(--b-label-font-size);--b-text-field-empty-label-font-size: var(--b-text-field-label-font-size);--b-text-field-label-scale: 1;--b-text-field-empty-label-scale: 1;--b-text-field-trigger-read-only-color: var(--b-neutral-85);--b-text-field-trigger-disabled-color: var(--b-neutral-40);--b-text-field-filled-background: var(--b-neutral-95);--b-text-field-filled-hover-background: var(--b-neutral-90);--b-text-field-filled-focus-background: var(--b-neutral-90);--b-text-field-filled-border-width: 0;--b-text-field-filled-border-radius: var(--b-widget-border-radius);--b-text-field-filled-input-padding: 1em;--b-text-field-filled-no-label-input-padding: 1em;--b-text-field-filled-focus-border-width: 0;--b-text-field-filled-focus-label-color: var(--b-widget-color);--b-text-field-outlined-background: var(--b-neutral-100);--b-text-field-outlined-border-width: 1px;--b-text-field-outlined-border-color: var(--b-border-5);--b-text-field-outlined-input-padding: var(--b-widget-padding);--b-text-field-outlined-focus-border-width: var(--b-widget-focus-outline-width);--b-text-field-outlined-label-background: transparent;--b-text-field-outlined-label-padding: 0;--b-text-field-outlined-label-before-padding: 0;--b-text-field-outlined-label-above-padding: 0;--b-text-field-outlined-hover-border-color: var(--b-border-4);--b-text-field-outlined-hover-background: var(--b-neutral-100);--b-text-field-outlined-focus-background: var(--b-neutral-100);--b-text-field-outlined-focus-label-color: var(--b-widget-color);--b-text-field-filled-material-label-position: static;--b-field-trigger-color: var(--b-neutral-60);--b-spin-trigger-font-size: 1em;--b-text-field-invalid-border-color: var(--b-color-red);--b-text-field-invalid-label-color: var(--b-color-red);--b-text-field-color: var(--b-primary);--b-text-field-focus-border-color: var(--b-primary);--b-text-field-default-width: 12.5em;--bi-text-field-input-width: 100%}.b-internal{--b-text-field-opacity: null;--b-text-field-border-width: null;--b-text-field-focus-border-width: null;--b-text-field-focus-label-color: null;--bi-text-field-empty-label-padding: null}.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field{position:relative;height:fit-content;width:fit-content;overflow:visible;border-radius:var(--b-text-field-border-radius);color:var(--b-text-field-color);--b-field-label-grid-area: var(--b-text-field-label-grid-area);--b-field-label-padding: var(--b-text-field-label-padding);--b-field-default-template-areas: var(--b-text-field-default-template-areas);--b-field-default-template-columns: var(--b-text-field-default-template-columns);--b-field-default-label-padding: var(--b-text-field-default-label-padding);--b-label-color: var(--b-text-field-label-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):where(:not(.b-has-width)){width:var(--b-text-field-default-width)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field)>.b-field-inner{display:flex;min-width:0;position:relative;overflow:hidden;transition:background var(--b-default-transition-duration);background:var(--b-text-field-background);border-radius:var(--b-text-field-border-radius);padding:var(--b-text-field-padding);opacity:var(--b-text-field-opacity);width:var(--bi-text-field-input-width)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field)>.b-field-inner:before{content:"";position:absolute;inset:0;background:transparent;border-radius:inherit;pointer-events:none;transition:border .1s;z-index:1;border-width:var(--b-text-field-border-width);border-style:var(--b-text-field-border-style);border-color:var(--b-text-field-border-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) bry-time,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) input,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) textarea,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-display-field-value{border:none;background:transparent;width:100%;font-family:inherit;outline:none;text-align:inherit;color:var(--b-text-field-input-color);font-weight:var(--b-text-field-font-weight);height:var(--b-text-field-input-height);font-size:var(--b-text-field-input-font-size);padding:var(--b-text-field-input-padding)}:is(:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) bry-time,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) input,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) textarea,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-display-field-value)::selection{background:var(--b-text-field-selection-background, var(--b-primary-85))}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) input::placeholder{color:var(--bi-text-field-placeholder-color, var(--b-text-4));font-style:var(--b-text-field-placeholder-font-style)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-label-above{border-top-left-radius:0;border-top-right-radius:0;--b-field-label-grid-area: var(--b-text-field-label-above-grid-area)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) label{z-index:2;line-height:1em;align-self:start;transition:top .2s ease,left .2s ease,font-size .2s ease,padding .2s ease,scale .2s ease;transform-origin:top left;font-size:var(--b-text-field-label-font-size)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-has-label:not(.b-label-before,.b-label-align-before){--bi-text-field-placeholder-color: var(--b-text-field-label-above-placeholder-color, var(--b-text-4))}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-has-label:not(.b-label-before,.b-label-align-before) label{scale:var(--b-text-field-label-scale);position:var(--b-text-field-material-label-position);top:var(--b-text-field-material-label-top);inset-inline-start:var(--b-text-field-material-label-left);cursor:var(--b-text-field-material-label-cursor)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger{display:flex;flex-direction:column;align-self:stretch;align-items:center;justify-content:center;cursor:pointer;flex:0 0 auto;min-width:1em;gap:0;color:var(--b-field-trigger-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-start{padding-inline-start:var(--b-field-trigger-gap)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-start:first-child{padding-inline-start:var(--b-field-trigger-edge-gap)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-end{padding-inline-end:var(--b-field-trigger-gap)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-end:last-child,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-trigger.b-align-end.b-last-trigger{padding-inline-end:var(--b-field-trigger-edge-gap)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-spin-trigger .b-icon{font-size:var(--b-spin-trigger-font-size)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-container-wrap{grid-row:1}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-disabled{--b-text-field-opacity: var(--b-text-field-disabled-opacity);--b-text-field-label-color: var(--b-widget-disabled-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-disabled .b-field-trigger{cursor:auto;color:var(--b-text-field-trigger-disabled-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-read-only .b-field-trigger{cursor:auto;color:var(--b-text-field-trigger-read-only-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):not(.b-has-label) input,:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):not(.b-has-label) span{padding:var(--b-text-field-no-label-input-padding, var(--b-text-field-input-padding))}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-filled{--b-text-field-background: var(--b-text-field-filled-background);--b-text-field-hover-background: var(--b-text-field-filled-hover-background);--b-text-field-border-width: var(--b-text-field-filled-border-width);--b-text-field-border-radius: var(--b-text-field-filled-border-radius);--b-text-field-input-padding: var(--b-text-field-filled-input-padding);--b-text-field-no-label-input-padding: var(--b-text-field-filled-no-label-input-padding);--b-text-field-focus-border-width: var(--b-text-field-filled-focus-border-width);--b-text-field-label-before-padding: var(--b-text-field-filled-label-before-padding);--b-text-field-label-above-padding: var(--b-text-field-filled-label-above-padding);--b-text-field-hover-border-color: var(--b-text-field-filled-hover-border-color);--b-text-field-focus-background: var(--b-text-field-filled-focus-background);--b-text-field-focus-label-color: var(--b-text-field-filled-focus-label-color);--b-text-field-material-label-position: var(--b-text-field-filled-material-label-position);--b-text-field-material-label-top: var(--b-text-field-filled-material-label-top);--b-text-field-material-label-left: var(--b-text-field-filled-material-label-left);--b-text-field-material-label-cursor: var(--b-text-field-filled-material-label-cursor);--b-text-field-material-empty-label-font-size: var(--b-text-field-filled-material-empty-label-font-size);--b-text-field-material-empty-label-top: var(--b-text-field-filled-material-empty-label-top);--b-text-field-material-empty-label-left: var(--b-text-field-filled-material-empty-label-left)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-filled:where(.b-has-start-trigger:not(.b-no-steppers)),:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-filled:has(.b-has-start-trigger:not(.b-no-steppers)){--b-text-field-material-label-left: var(--b-text-field-filled-material-trigger-label-left);--b-text-field-material-empty-label-left: var(--b-text-field-filled-material-trigger-empty-label-left)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-outlined{--b-text-field-background: var(--b-text-field-outlined-background);--b-text-field-border-radius: var(--b-text-field-outlined-border-radius);--b-text-field-border-width: var(--b-text-field-outlined-border-width);--b-text-field-border-color: var(--b-text-field-outlined-border-color);--b-text-field-input-padding: var(--b-text-field-outlined-input-padding);--b-text-field-focus-border-width: var(--b-text-field-outlined-focus-border-width);--b-text-field-label-before-padding: var(--b-text-field-outlined-label-before-padding);--b-text-field-label-above-padding: var(--b-text-field-outlined-label-above-padding);--b-text-field-hover-border-color: var(--b-text-field-outlined-hover-border-color);--b-text-field-hover-background: var(--b-text-field-outlined-hover-background);--b-text-field-focus-label-color: var(--b-text-field-outlined-focus-label-color);--b-text-field-focus-background: var(--b-text-field-outlined-focus-background);--b-text-field-material-label-position: var(--b-text-field-outlined-material-label-position, static);--b-text-field-material-label-top: var(--b-text-field-outlined-material-label-top);--b-text-field-material-label-left: var(--b-text-field-outlined-material-label-left);--b-text-field-material-label-cursor: var(--b-text-field-outlined-material-label-cursor);--b-text-field-material-empty-label-background: var(--b-text-field-outlined-material-empty-label-background);--b-text-field-material-empty-label-top: var(--b-text-field-outlined-material-empty-label-top);--b-text-field-material-empty-label-left: var(--b-text-field-outlined-material-empty-label-left)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-outlined:where(.b-has-start-trigger:not(.b-no-steppers)){--b-text-field-material-empty-label-left: var(--b-text-field-outlined-material-trigger-empty-label-left)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-outlined:where(:not(.b-label-before,.b-label-align-before)){--b-text-field-label-padding: var(--b-text-field-outlined-label-padding)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-text-field-outlined:where(:not(.b-label-before,.b-label-align-before)) label:before{content:"";position:absolute;inset:0;z-index:-1;background:var(--b-text-field-outlined-label-background)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):hover:where(:not(.b-disabled)){--b-text-field-background: var(--b-text-field-hover-background);--b-text-field-border-color: var(--b-text-field-hover-border-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):focus-within{--b-text-field-background: var(--b-text-field-focus-background);--b-text-field-border-width: var(--b-text-field-focus-border-width);--b-text-field-border-style: var(--b-text-field-focus-border-style);--b-text-field-border-color: var(--b-text-field-focus-border-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field):focus-within:not(.b-label-before,.b-label-align-before){--b-text-field-label-color: var(--b-text-field-focus-label-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-widget.b-empty:not(:focus-within){--b-text-field-label-font-size: var(--b-text-field-empty-label-font-size);--b-text-field-label-padding: var(--b-text-field-empty-label-padding);--b-text-field-label-scale: var(--b-text-field-empty-label-scale);--b-text-field-outlined-label-above-padding: var(--b-text-field-outlined-material-empty-label-padding);--b-text-field-label-background: var(--b-text-field-material-empty-label-background);--b-text-field-material-label-top: var(--b-text-field-material-empty-label-top);--b-text-field-material-label-left: var(--b-text-field-material-empty-label-left);--b-text-field-outlined-label-background: var(--b-text-field-outlined-material-empty-label-background)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field).b-invalid:where(:not(.b-disabled)){--b-text-field-border-color: var(--b-text-field-invalid-border-color);--b-text-field-label-color: var(--b-text-field-invalid-label-color);--b-text-field-focus-label-color: var(--b-text-field-invalid-label-color)}:is(.b-text-field,.b-number-field,.b-date-time-field,.b-text-area-field) .b-field-clear-clone{position:absolute;animation:b-shrink-width .3s}.b-theme-transition .b-text-field .b-field-inner:before{transition-duration:var(--b-default-transition-duration)}.b-field-hint{align-self:stretch;overflow:visible;pointer-events:none;position:relative;white-space:nowrap;width:0}.b-field-no-hint .b-field-hint{display:none}.b-field-hint-content{position:absolute;inset-inline-end:.6em;top:50%;translate:0 -50%;color:var(--b-text-field-input-color);font-size:var(--b-label-font-size);font-weight:var(--b-label-font-weight)}.b-container:where(:not(.b-toolbar))>.b-field,.b-panel:where(:not(.b-toolbar))>.b-panel-body-wrap>.b-panel-content>.b-field,.b-panel:where(:not(.b-toolbar))>.b-panel-overlay>.b-panel-body-wrap>.b-panel-content>.b-field,.b-grid-header>.b-field{--b-text-field-default-width: 100%}@keyframes b-shrink-width{0%{max-width:200px}to{max-width:0}}:root,:host{--b-combo-filled-chip-view-padding-top: 1.55em;--b-combo-filled-label-before-chip-view-padding-top: .5em;--b-combo-outlined-chip-view-padding-top: .6em;--b-combo-outlined-label-before-chip-view-padding-top: .5em;--b-combo-chip-font-size: .9em;--b-combo-chip-view-margin-block: 0;--b-combo-chip-view-padding: .6em 1em;--b-combo-chip-view-min-height: 3em}.b-combo [data-ref=expand]:before{transition:rotate .2s ease}.b-combo.b-open [data-ref=expand]:before{rotate:180deg}.b-combo.b-not-editable :not(.b-field-trigger){cursor:pointer}.b-combo.b-uses-chip-view .b-field-inner{justify-items:start}.b-combo.b-uses-chip-view:not(.b-empty) input::placeholder{visibility:hidden}.b-combo.b-text-field-filled{--b-combo-chip-view-padding-top: var(--b-combo-filled-chip-view-padding-top)}.b-combo.b-text-field-outlined{--b-combo-chip-view-padding-top: var(--b-combo-outlined-chip-view-padding-top)}:is(.b-combo.b-label-align-before,.b-combo.b-label-before).b-text-field-filled{--b-combo-chip-view-padding-top: var(--b-combo-filled-label-before-chip-view-padding-top)}:is(.b-combo.b-label-align-before,.b-combo.b-label-before).b-text-field-outlined{--b-combo-chip-view-padding-top: var(--b-combo-outlined-label-before-chip-view-padding-top)}:is(.b-combo.b-hide-trigger,.b-combo.b-read-only) .b-field-trigger.b-icon-picker{display:none}.b-combo-chip-view{color:inherit;flex:1;align-self:stretch;padding-top:var(--b-combo-chip-view-padding-top);min-height:var(--b-combo-chip-view-min-height);margin-block:var(--b-combo-chip-view-margin-block);--b-chip-view-chip-font-size: var(--b-combo-chip-font-size);--b-chip-view-padding: var(--b-combo-chip-view-padding)}.b-combo-chip-view.b-chip-view input{flex:1;height:auto;order:99999;padding:0;align-self:center}.b-combo-picker.b-empty:not(.b-masked)[data-add-new-value]:after{content:attr(data-add-new-value);display:block;cursor:pointer;padding:var(--b-list-item-padding);color:var(--b-list-item-color)}.b-float-root>.b-combo-picker{padding:var(--b-menu-padding)}:is(.b-color-field,.b-color-box-combo) .b-color-box{grid-area:before;width:1.5em;flex-shrink:0;transition:color var(--b-default-transition-duration);border-radius:var(--b-color-picker-color-border-radius);margin-inline:var(--b-widget-padding) 0}:is(.b-color-field,.b-color-box-combo) .b-color-box.b-no-color{background:none;border:1px solid var(--b-color-picker-color-no-color-color)}.b-color-box{width:1em;aspect-ratio:1 / 1;background:currentColor;margin-inline-end:.5em;color:var(--b-primary)}.b-date-field.b-no-steppers .b-step-trigger{display:none}:root,:host{--b-date-range-field-gap: .5em}.b-date-range-field:not(.b-has-width){width:auto}.b-date-range-field .b-field-container-wrap{grid-area:inner}.b-date-range-field .b-field-container{--b-container-gap: var(--b-date-range-field-gap)}.b-date-range-field .b-field{grid-template-areas:"inner";grid-template-columns:1fr}.b-date-range-field .b-start-date{width:13em}.b-date-range-field .b-end-date{width:11em;--b-field-trigger-gap: 0}.b-date-range-field .b-end-time,.b-date-range-field .b-start-time{flex:7 7 auto}.b-date-range-picker .b-start-date,.b-date-range-picker .b-end-date{width:13em}.b-date-range-picker.b-date-range-field-picker .b-end-date{width:11em}.b-display-field span{display:flex;min-width:10em;align-items:center}:root,:host{--b-text-area-field-padding: var(--b-widget-padding)}.b-text-area-field{height:auto}.b-text-area-field .b-field-inner{height:100%;--b-text-field-input-padding: var(--b-text-area-field-padding)}.b-text-area-field textarea{font-family:inherit;height:100%;min-height:var(--b-text-field-input-height)}:root,:host{--b-text-area-picker-field-picker-color: var(--b-neutral-20)}.b-text-area-picker-field-picker{display:flex;min-height:10em;border:none;outline:none;padding:1em;background:var(--b-text-area-picker-field-picker-background, var(--b-primary-98));color:var(--b-text-area-picker-field-picker-color)}.b-text-area-picker-field-picker:focus{border-color:var(--b-primary)}.b-time-field bry-time{align-items:center;--b-time-field-button-background: color-mix(in srgb, currentColor, #fff 85%);--b-time-field-input-background: transparent}.b-time-field.b-empty .b-field-trigger{animation-delay:-300s}.b-time-field.b-empty:not(.b-contains-focus) bry-time{opacity:0}.b-time-field.b-no-steppers .b-step-trigger{display:none}.b-time-field .b-step-trigger:before{transition:color .3s}.b-time-field.b-rtl .b-step-trigger:before{transform:scaleX(-1)}:root,:host{--b-field-set-border-radius: var(--b-widget-border-radius);--b-field-set-border-width: 1px;--b-field-set-padding: var(--b-panel-padding);--b-field-set-border-color: var(--b-border-3);--b-field-set-background: var(--b-neutral-100);--b-field-set-label-font-size: .8em}.b-field-set{position:relative;overflow:visible;align-items:stretch;gap:0;color:var(--b-primary);--b-panel-with-header-padding: var(--b-field-set-padding)}.b-field-set fieldset{background:var(--b-field-set-background);border:var(--b-field-set-border-width) solid var(--b-field-set-border-color);border-radius:var(--b-field-set-border-radius);padding:var(--b-field-set-padding);margin:0}.b-field-set.b-columns fieldset{grid-template-columns:repeat(var(--bi-container-columns),auto)}.b-field-set:not(.b-label-align-before)>.b-label{position:absolute;inset-block-start:0;inset-inline-start:0;translate:calc(1em * var(--b-rtl-negate)) -50%;padding-inline:.5em;z-index:1;line-height:1em;font-size:var(--b-field-set-label-font-size)}.b-field-set:not(.b-label-align-before)>.b-label:before{content:"";position:absolute;inset:0;z-index:-1;clip-path:inset(calc(.5em - var(--b-field-set-border-width)) 0 0 0);background:var(--b-field-set-background)}.b-field-set.b-label-align-before:not(:has(.b-inline))>.b-label{align-self:start}legend.b-field-set-legend{position:absolute;top:-10000px;clip:rect(0,0,0,0)}.b-toolbar-content>.b-field-set{--b-field-set-background: var(--b-toolbar-background, var(--b-neutral-100))}:root,:host{--b-radio-group-gap: var(--b-widget-gap)}.b-radio-group{width:fit-content;gap:var(--bi-field-gap);--b-field-set-border-width: 0;--b-field-set-border-radius: 0;--b-field-set-padding: 0;--b-field-label-above-gap: 0;--b-field-set-background: transparent;--b-panel-background: transparent}.b-radio-group>.b-panel-header{padding-inline:var(--b-field-set-padding)}.b-radio-group:not(:has(.b-inline)){--b-panel-gap: var(--b-radio-group-gap)}.b-radio-group:not(:has(.b-inline)) .b-radio-group-content{width:fit-content}.b-radio-group:has(.b-inline){overflow:visible}.b-radio-group:has(.b-inline)>.b-label:not(.b-align-start){scale:var(--b-text-field-label-scale)}.b-radio-group:has(.b-inline)>div{grid-area:inner}.b-radio-group:has(.b-inline) .b-panel-body-wrap{overflow:visible}.b-radio-group .b-radio-group-body-wrap,.b-radio-group fieldset.b-radio-group-content{overflow:visible}.b-radio-group.b-label-before{flex-direction:row;gap:var(--b-field-label-before-gap)}.b-radio-group.b-label-above>.b-label{align-self:flex-start;margin-bottom:.75em}.b-radio-group.b-has-label>.b-label{position:static;translate:none;padding-inline:0;font-size:var(--b-label-font-size)}.b-radio-group.b-has-label>.b-label:before{content:none}:root,:host{--b-popup-border-radius: var(--b-widget-border-radius);--b-popup-text-popup-width: 25em;--b-popup-close-icon-content: "\f00d";--b-popup-maximize-icon-content: "\f065";--b-popup-padding: var(--b-widget-padding-large);--b-popup-background: var(--b-panel-background);--b-modal-mask-background: var(--b-mask-background);--b-popup-border: null}.b-popup.b-panel{--b-panel-background: var(--b-popup-background);--b-panel-padding: var(--b-popup-padding);border:var(--b-popup-border)}.b-popup.b-panel .b-panel{--b-panel-background: var(--b-popup-background)}.b-popup{border-radius:var(--b-popup-border-radius)}.b-popup .b-panel-body-wrap{border-radius:inherit}.b-popup .b-panel-body-wrap>.b-bottom-toolbar{background:transparent}.b-popup.b-header-dock-top .b-panel-body-wrap{border-start-start-radius:0;border-start-end-radius:0}.b-popup:where(.b-anchored){overflow:visible}.b-text-popup{max-width:var(--b-popup-text-popup-width);--b-panel-gap: 0}.b-text-popup .b-popup-content{display:flex;flex-direction:column}.b-popup-close:before{content:var(--b-popup-close-icon-content)}.b-popup-expand:before{content:var(--b-popup-maximize-icon-content)}.b-tooltip-loading .b-icon{display:inline-block;margin-inline-end:.5em}@media (max-width : 480px){.b-popup{max-width:100%!important}}.b-modal-mask{position:fixed;inset:0;pointer-events:all;z-index:1;background:var(--b-modal-mask-background);color:var(--b-modal-mask-color, var(--b-primary))}.b-modal-mask.b-modal-transparent{--b-modal-mask-background: transparent}.b-internal{--bi-hint-highlight-top: null;--bi-hint-highlight-left: null;--bi-hint-highlight-width: null;--bi-hint-highlight-height: null}.b-hint code{padding:2px 4px;line-height:1;background:var(--b-neutral-80)}.b-hint .b-description{line-height:1.7em}.b-hint .b-mask{--b-mask-background: color-mix(in srgb, var(--b-neutral-70), transparent 90%);--b-mask-text-background: transparent;--b-elevation-1: none;--b-mask-text-color: transparent}.b-hint.b-floating{width:max-content;max-width:37em;transition:top .5s,inset-inline-start .5s}.b-hint.b-floating [data-ref=steps]{margin-inline-end:auto}.b-hint.b-floating.b-no-title .b-hint-header{max-height:0;padding:0}.b-hint.b-floating.b-no-title .b-popup-close{position:absolute;inset-block-start:var(--b-widget-padding-large);inset-inline-end:var(--b-widget-padding-large)}.b-hint.b-floating.b-no-title .b-hint-content{padding-inline-end:calc(var(--b-widget-padding-large) * 2);padding-block:var(--b-widget-padding-large) 0}.b-hint.b-floating,.b-hint.b-floating .b-hint-body-wrap{border-radius:.5em}.b-hint.b-floating .b-button{height:2.75em}.b-hint.b-floating .b-tooltip-header .b-tool{position:absolute;top:.5em;right:.5em}.b-float-root .b-hint-highlighter{--bi-hint-highlight-color: var(--b-color-orange);background-color:transparent;pointer-events:none!important;transition:left .5s,top .5s,width .5s,height .5s,background-color .7s;border-radius:3px;outline:2px solid var(--bi-hint-highlight-color);left:var(--bi-hint-highlight-left);top:var(--bi-hint-highlight-top);width:var(--bi-hint-highlight-width);height:var(--bi-hint-highlight-height)}.b-float-root .b-hint-highlighter.b-hint-highlighter-ping{z-index:99999;animation:b-anim-hint-highlighter-ping 1.2s 3 linear}.b-float-root .b-hint-highlighter.b-hint-highlighter-center{background-color:var(--bi-hint-highlight-color);border-radius:50%;outline-offset:-2px;z-index:-1}.b-float-root .b-hint-highlighter.b-realigning{transition:none!important}@keyframes b-anim-hint-highlighter-ping{0%{outline-color:var(--bi-hint-highlight-color);outline-offset:-2px;outline-width:2px}70%{outline-offset:20px;outline-color:color-mix(in srgb,var(--bi-hint-highlight-color) 40%,transparent 60%);outline-width:10px}95%{outline-offset:20px;outline-color:transparent;outline-width:10px}96%{outline-offset:-2px;outline-color:transparent;outline-width:2px}to{outline-offset:-2px;outline-color:var(--bi-hint-highlight-color);outline-width:2px}}.b-modal-mask[owned-by*=b-hint]{--bi-hint-highlight-radius: var(--b-widget-border-radius, 0px);clip-path:polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,var(--bi-hint-highlight-left) var(--bi-hint-highlight-top),var(--bi-hint-highlight-left) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height)),calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height)),calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width)) var(--bi-hint-highlight-top),var(--bi-hint-highlight-left) var(--bi-hint-highlight-top));transition:all .5s}@supports (clip-path: shape(from 0 0,close)){.b-modal-mask[owned-by*=b-hint]{clip-path:shape(evenodd from 0% 0%,line to 100% 0%,line to 100% 100%,line to 0% 100%,line to 0% 0%,line to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-radius)) var(--bi-hint-highlight-top),arc to var(--bi-hint-highlight-left) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-radius)) of var(--bi-hint-highlight-radius),line to var(--bi-hint-highlight-left) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height) - var(--bi-hint-highlight-radius)),arc to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-radius)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height)) of var(--bi-hint-highlight-radius),line to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width) - var(--bi-hint-highlight-radius)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height)),arc to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-height) - var(--bi-hint-highlight-radius)) of var(--bi-hint-highlight-radius),line to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width)) calc(var(--bi-hint-highlight-top) + var(--bi-hint-highlight-radius)),arc to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-width) - var(--bi-hint-highlight-radius)) var(--bi-hint-highlight-top) of var(--bi-hint-highlight-radius),line to calc(var(--bi-hint-highlight-left) + var(--bi-hint-highlight-radius)) var(--bi-hint-highlight-top),line to 0% 0%)}}:root,:host{--b-menu-border-radius: var(--b-widget-border-radius);--b-menu-background: var(--b-panel-background);--b-menu-padding: 0}.b-menu.b-popup{min-height:2em;user-select:none;-webkit-user-select:none;background:var(--b-menu-background);--b-panel-padding: var(--b-menu-padding);--b-popup-border-radius: var(--b-menu-border-radius)}.b-menu.b-popup .b-menu-body-wrap{border-radius:0}.b-menu-content{gap:0}.b-menu-content>:not(.b-menu-item){margin:1em}.b-menu-custom-content{display:flex}.b-menu-with-submenu .b-menu-item:not(.b-has-submenu){--bi-menu-item-margin-inline-end: 2em}:root,:host{--b-message-dialog-min-width: 20em;--b-message-dialog-button-min-width: 6.5em;--bi-messagedialog-display: none}.b-message-dialog{user-select:none;-webkit-user-select:none;min-width:var(--b-message-dialog-min-width)}.b-message-dialog .b-button{min-width:var(--b-message-dialog-button-min-width)}.b-message-dialog .b-message-dialog-input,.b-message-dialog .b-message-dialog-ok-button,.b-message-dialog .b-message-dialog-cancel-button{display:var(--bi-messagedialog-display)}:is(.b-message-dialog.b-message-dialog-prompt,.b-message-dialog.b-message-dialog-confirm) .b-message-dialog-ok-button,:is(.b-message-dialog.b-message-dialog-prompt,.b-message-dialog.b-message-dialog-confirm) .b-message-dialog-cancel-button{--bi-messagedialog-display: flex}.b-message-dialog.b-message-dialog-prompt .b-message-dialog-input,.b-message-dialog.b-message-dialog-alert .b-message-dialog-ok-button{--bi-messagedialog-display: flex}.b-message-dialog .b-message-dialog-message{display:block}:root,:host{--b-tooltip-plain-padding: .5em;--b-tooltip-rich-padding: var(--b-widget-padding);--b-tooltip-rich-border-radius: var(--b-widget-border-radius-large);--b-tooltip-plain-font-size: .9em;--b-tooltip-text-gap: 1em;--b-tooltip-flex-direction: column;--b-tooltip-align-items: flex-start;--b-tooltip-content-display: flex;--b-tooltip-plain-color: var(--b-widget-color);--b-tooltip-rich-color: var(--b-widget-color);--b-tooltip-rich-background: var(--b-neutral-100);--b-tooltip-z-index: 2}.b-tooltip.b-popup{color:var(--b-primary);z-index:var(--b-tooltip-z-index)}.b-tooltip.b-popup:not(.b-allow-over){user-select:none;-webkit-user-select:none}.b-tooltip.b-popup.b-plain-tooltip{--b-popup-background: var(--b-tooltip-plain-background, var(--b-neutral-100));--b-panel-padding: var(--b-tooltip-plain-padding);--b-tooltip-color: var(--b-tooltip-plain-color);--b-widget-font-size: var(--b-tooltip-plain-font-size);--b-popup-border-radius: var(--b-widget-border-radius)}.b-tooltip.b-popup.b-plain-tooltip .b-tooltip-content{display:block;text-align:center}.b-rich-tooltip{--b-popup-background: var(--b-tooltip-rich-background);--b-tooltip-color: var(--b-tooltip-rich-color);--b-panel-padding: var(--b-tooltip-rich-padding);--b-popup-border-radius: var(--b-tooltip-rich-border-radius)}.b-rich-tooltip .b-tooltip-content{flex-wrap:wrap;display:var(--b-tooltip-content-display);flex-direction:var(--b-tooltip-flex-direction);align-items:var(--b-tooltip-align-items)}.b-tooltip-content{color:var(--b-tooltip-color)}.b-tooltip-content:where(.b-text-content){--b-panel-gap: var(--b-tooltip-text-gap)}.b-tooltip-content:where(.b-text-content)>*{margin-block:0}:root,:host{--b-year-picker-gap: .5em;--b-year-picker-padding: var(--b-year-picker-gap);--b-year-picker-title-font-weight: 600;--b-year-picker-year-font-weight: var(--b-widget-font-weight);--b-year-picker-year-color: var(--b-neutral-30)}.b-month-picker-body-wrap,.b-year-picker-body-wrap{height:100%}.b-month-picker-content,.b-year-picker-content{grid-template-columns:repeat(4,1fr);grid-auto-rows:auto;place-items:center;height:100%;gap:var(--b-year-picker-gap);padding:var(--b-year-picker-padding)}:is(.b-month-picker-content,.b-year-picker-content) .b-button{width:100%;padding:.5em 0;--b-button-font-weight: var(--b-year-picker-year-font-weight);--b-button-color: var(--b-year-picker-year-color);--b-button-hover-background: var(--b-year-picker-hover-background, var(--b-date-picker-date-hover-background, var(--b-primary-95)))}:is(.b-month-picker-content,.b-year-picker-content) .b-button.b-selected{--b-button-background: var(--b-year-picker-selected-background, var(--b-date-picker-selected-background, var(--b-primary-90)));--b-button-color: var(--b-year-picker-selected-color);--b-button-font-weight: var(--b-year-picker-title-font-weight)}.b-month-picker-title,.b-year-picker-title{flex:1;background:transparent;font-weight:var(--b-year-picker-title-font-weight)}:is(.b-month-picker-title,.b-year-picker-title) .b-button-label{font-size:1.1em}.b-time-picker{max-height:39em}.b-time-picker .b-list{background-color:transparent;align-items:center;scroll-snap-type:block}.b-time-picker-item{aspect-ratio:1;flex-shrink:0;width:3em;scroll-snap-align:start;display:grid;place-content:center;cursor:pointer;border-radius:var(--b-widget-border-radius)}.b-time-picker-item:hover,.b-time-picker-item[aria-selected=true]{outline:var(--b-widget-focus-outline-width) solid var(--b-widget-focus-outline-color);outline-offset:calc(var(--b-widget-focus-outline-width) * -1)}.b-time-picker-content{justify-content:center}:root,:host{--b-toolbar-gap: var(--b-widget-gap);--b-toolbar-padding: var(--b-widget-padding);--b-toolbar-separator-height: 2em;--b-toolbar-justify-content: flex-start;--b-toolbar-background: var(--b-panel-background);--b-toolbar-separator-color: var(--b-neutral-50)}.b-toolbar{display:flex;flex-direction:row;gap:0;overflow:hidden;flex-shrink:0;transition:background-color .2s;background:var(--b-toolbar-background)}.b-toolbar.b-dock-left,.b-toolbar.b-dock-right{flex-direction:column;--bi-toolbar-min-width: var(--b-toolbar-min-size, unset)}.b-toolbar.b-dock-top,.b-toolbar.b-dock-bottom{align-items:center;flex-wrap:nowrap;--bi-toolbar-min-height: var(--b-toolbar-min-size, unset)}:is(.b-toolbar.b-dock-top,.b-toolbar.b-dock-bottom) .b-box-center.b-toolbar-content>.b-button{height:100%;min-height:var(--b-button-height)}.b-toolbar .b-overflow-button{margin:var(--b-toolbar-padding);place-content:center}.b-toolbar .b-overflow-button.b-rotate-vertical{rotate:90deg;align-self:center}.b-toolbar .b-overflow-button:active{background:var(--b-neutral-90)}.b-toolbar .b-box-center.b-toolbar-content,.b-toolbar .b-html{align-items:center}.b-box-center.b-toolbar-content{flex:1;overflow:hidden;gap:var(--b-toolbar-gap);padding:var(--b-toolbar-padding);min-height:var(--bi-toolbar-min-height);min-width:var(--bi-toolbar-min-width);justify-content:var(--b-toolbar-justify-content)}.b-toolbar-separator{border-inline-end:1px solid var(--b-toolbar-separator-color);min-height:var(--b-toolbar-separator-height)}.b-toolbar-fill{flex:1}.b-toolbar-overflow-menu>.b-panel-body-wrap>.b-menu-content .b-widget{flex:0 0 auto!important;width:auto}.b-confirmation-bar{--b-toolbar-justify-content: flex-end}.b-paging-toolbar [data-ref=pageNumber]{width:auto}.b-paging-toolbar [data-ref=pageNumber] .b-field-inner{width:3.5em}.b-paging-toolbar [data-ref=pageNumber] input{text-align:center}:root,:host{--b-tab-bar-border-bottom-width: 1px;--b-tab-bar-border-bottom-color: var(--b-border-6);--b-tab-bar-background: transparent;--b-tab-bar-padding: 0}.b-tab-bar{--b-panel-bottom-toolbar-padding: var(--b-tab-bar-padding);--b-toolbar-gap: 0;--b-toolbar-padding: var(--b-tab-bar-padding);--b-toolbar-background: var(--b-tab-bar-background);transition:border var(--b-default-transition-duration),background var(--b-default-transition-duration);border-bottom:var(--b-tab-bar-border-bottom-width) solid var(--b-tab-bar-border-bottom-color)}.b-tab-bar .b-overflow-button{padding-inline:1em;margin-inline:.5em}.demo-header{display:flex;padding-inline:.7em 0;padding-block:0;flex:0 0 auto;background:var(--b-demo-header-background);border-bottom:1px solid var(--b-border-6);transition:background-color var(--b-default-transition-duration),padding var(--b-default-transition-duration),font-size .1s,border-color var(--b-default-transition-duration)}.demo-header a{text-decoration:none}.demo-header .b-icon{font-size:1.1em}.demo-header .title{margin-inline-end:auto;display:flex;align-items:center;white-space:nowrap;color:var(--b-text-1)}.demo-header .title:focus-visible{outline-offset:var(--b-button-focus-outline-offset);outline:var(--b-button-focus-outline-width) solid var(--b-widget-focus-outline-color);border-radius:var(--b-widget-border-radius)}.demo-header .title h1{display:flex;align-items:center;margin:0;font-weight:600;font-size:1.1em}.demo-header .title svg{margin-inline-end:.75em;height:2em;width:2em;background:#0076f8;padding-inline-end:.2em;border-radius:5px}.demo-header .title svg g{fill:#fff}.demo-header .b-toolbar{font-size:.9em;--b-toolbar-padding: .7em;--b-toolbar-background: transparent}:root,:host{--b-file-field-button-background: var(--b-primary);--b-file-field-button-color: var(--b-neutral-100)}.b-file-field input[type=file]{font-family:inherit;color:var(--b-label-color)}.b-file-field input[type=file]::file-selector-button{padding:.5em 1em;border-radius:.25em;cursor:pointer;font-weight:500;margin-inline-end:1em;border:none;font-family:inherit;background:var(--b-file-field-button-background);color:var(--b-file-field-button-color)}.b-file-field input[type=file]::file-selector-button:hover{background:color-mix(in srgb,var(--b-file-field-button-background),#fff 10%)}.b-file-picker{overflow:visible}:root,:host{--b-histogram-bar-border-width: null;--b-histogram-bar0-border-width: null;--b-histogram-bar1-border-width: null;--b-histogram-bar2-border-width: null;--b-histogram-bar3-border-width: null;--b-histogram-bar4-border-width: null;--b-histogram-bar5-border-width: null;--b-histogram-transition-duration: .3s;--b-histogram-bar-legend-font-size: .8em;--b-histogram-bar-color: var(--b-color-green);--b-histogram-bar-border-color: null;--b-histogram-bar0-color: var(--b-color-green);--b-histogram-bar0-border-color: null;--b-histogram-bar1-color: var(--b-color-blue);--b-histogram-bar1-border-color: null;--b-histogram-bar2-color: var(--b-color-indigo);--b-histogram-bar2-border-color: null;--b-histogram-bar3-color: var(--b-color-teal);--b-histogram-bar3-border-color: null;--b-histogram-bar4-color: var(--b-color-orange);--b-histogram-bar4-border-color: null;--b-histogram-bar5-color: var(--b-color-lime);--b-histogram-bar5-border-color: null;--b-histogram-exceeds-top-bar-color: var(--b-color-red);--b-histogram-outline-color: #f99}.b-histogram{background-color:#fff;padding:1px;contain:strict}.b-histogram svg *{vector-effect:non-scaling-stroke}.b-histogram rect{fill:var(--b-histogram-bar-color);stroke-width:var(--b-histogram-bar-border-width);stroke:var(--b-histogram-bar-border-color);transition-property:x,y,width,height,fill;transition-duration:var(--b-histogram-transition-duration)}.b-histogram rect.b-series-index-0{fill:var(--b-histogram-bar0-color);stroke-width:var(--b-histogram-bar0-border-width);stroke:var(--b-histogram-bar0-border-color)}.b-histogram rect.b-series-index-1{fill:var(--b-histogram-bar1-color);stroke-width:var(--b-histogram-bar1-border-width);stroke:var(--b-histogram-bar1-border-color)}.b-histogram rect.b-series-index-2{fill:var(--b-histogram-bar2-color);stroke-width:var(--b-histogram-bar2-border-width);stroke:var(--b-histogram-bar2-border-color)}.b-histogram rect.b-series-index-3{fill:var(--b-histogram-bar3-color);stroke-width:var(--b-histogram-bar3-border-width);stroke:var(--b-histogram-bar3-border-color)}.b-histogram rect.b-series-index-4{fill:var(--b-histogram-bar4-color);stroke-width:var(--b-histogram-bar4-border-width);stroke:var(--b-histogram-bar4-border-color)}.b-histogram rect.b-series-index-5{fill:var(--b-histogram-bar5-color);stroke-width:var(--b-histogram-bar5-border-width);stroke:var(--b-histogram-bar5-border-color)}.b-histogram rect.b-exceeds-top{fill:var(--b-histogram-exceeds-top-bar-color)}.b-histogram text.b-bar-legend{writing-mode:tb;text-anchor:end;font-size:var(--b-histogram-bar-legend-font-size);pointer-events:none}.b-histogram svg{overflow:visible}.b-histogram path{fill:transparent;stroke:var(--b-histogram-outline-color);transition:d var(--b-histogram-transition-duration);pointer-events:none}:root,:host{--b-scale-line-color: var(--b-neutral-60);--b-scale-label-color: var(--b-neutral-30)}.b-scale{contain:strict}.b-scale svg *{vector-effect:non-scaling-stroke}.b-scale.b-scale-vertical text.b-scale-tick-label{translate:0 .3em}.b-scale.b-scale-vertical.b-align-right{text-anchor:end}.b-scale.b-scale-horizontal text.b-scale-tick-label{text-anchor:middle}.b-scale path{stroke:var(--b-scale-line-color);pointer-events:none}.b-scale text{fill:var(--b-scale-label-color)}:root,:host{--b-label-font-size: var(--b-widget-font-size);--b-label-font-weight: 400;--b-label-disabled-color: var(--b-neutral-50)}.b-label{white-space:nowrap;align-items:center;transition:color var(--b-default-transition-duration);user-select:none;-webkit-user-select:none;color:var(--b-label-color);font-size:var(--b-label-font-size);font-weight:var(--b-label-font-weight)}.b-disabled>.b-label{--b-label-color: var(--b-label-disabled-color)}.b-hbox,.b-vbox{display:flex;align-items:stretch;justify-content:flex-start;position:relative}:is(.b-hbox,.b-vbox)>.b-box-center{flex:1 1 auto;overflow:hidden}.b-hbox{flex-flow:row nowrap}.b-vbox{flex-flow:column nowrap}.b-box-justify-stretch{justify-content:stretch}:root,:host{--bi-card-margin: 1em}.b-card-container{display:flex;flex-flow:row nowrap;align-items:stretch;overflow:hidden;padding:0;position:relative}.b-card-container.b-animating{overflow:hidden}.b-card-container>.b-card-item{flex:1 0 100%;align-items:stretch;max-width:100%;min-width:100%}.b-card-container.b-hide-child-headers>.b-panel:not(.b-positioned)>.b-panel-header{display:none}.b-slide-in-left{animation:b-anim-card-slide-in-left calc(.3s * var(--bi-duration-debug-factor, 1)) ease 0s 1}.b-slide-out-right{pointer-events:none;left:var(--bi-card-margin);animation:b-anim-card-slide-out-right calc(.3s * var(--bi-duration-debug-factor, 1)) ease 0s 1}.b-slide-in-right{animation:b-anim-card-slide-in-right calc(.3s * var(--bi-duration-debug-factor, 1)) ease 0s 1}.b-slide-out-left{pointer-events:none;margin-inline-start:calc(var(--bi-card-margin) * -1);margin-inline-end:var(--bi-card-margin);animation:b-anim-card-slide-out-left calc(.3s * var(--bi-duration-debug-factor, 1)) ease 0s 1}@keyframes b-anim-card-slide-in-left{0%{translate:-100% 0}to{translate:0}}@keyframes b-anim-card-slide-out-right{0%{translate:-100% 0}to{translate:0}}@keyframes b-anim-card-slide-in-right{0%{translate:0}to{translate:-100% 0}}@keyframes b-anim-card-slide-out-left{0%{translate:0}to{translate:-100% 0}}.b-fit-container{display:flex;flex-flow:row nowrap;align-items:stretch;overflow:hidden;position:relative}.b-fit-container>.b-fit-item{flex:1 0 auto;margin:0;max-width:100%;align-self:stretch!important}:root,:host{--b-list-multi-select-gap: 0;--b-list-item-gap: .75em;--b-list-item-padding: .75em;--b-list-multi-select-item-padding: var(--b-list-item-padding);--b-list-item-border-radius: 0;--b-list-item-group-padding: .75em .75em .75em 2em;--b-list-selected-icon-size: 1.25em;--b-list-selected-icon-content: var(--b-checkbox-checked-check-content);--b-list-checkbox-checked-check-color: var(--b-text-5);--b-list-item-group-header-font-weight: calc(var(--b-widget-font-weight) + 200);--b-list-background: transparent;--b-list-title-background: var(--b-neutral-100);--b-list-item-color: var(--b-widget-color);--b-list-title-font-weight: 500}.b-list{display:flex;flex-direction:column;padding:0;margin:0;background:var(--b-list-background);border-radius:var(--b-list-border-radius)}.b-list.b-floating{--b-list-border-radius: var(--b-widget-border-radius);--b-list-background: var(--b-list-floating-background, var(--b-primary-100))}.b-list .b-empty-text{pointer-events:none}.b-list .b-select-all-item{position:sticky;top:0;z-index:1;background:var(--b-list-title-background);font-weight:var(--b-list-title-font-weight)}:has(.b-list-title)>:is(.b-list .b-select-all-item){top:2em}.b-list.b-multi-select{gap:var(--b-list-multi-select-gap)}.b-list-item{display:flex;cursor:pointer;overflow:clip;user-select:none;-webkit-user-select:none;flex-shrink:0;background:var(--b-list-item-background);color:var(--b-list-item-color);font-weight:var(--b-list-item-font-weight);padding:var(--b-list-item-padding);border-radius:var(--b-list-item-border-radius)}.b-list-item .b-selected-icon{display:flex;align-items:center;justify-content:center;transition:all .2s;width:var(--b-list-selected-icon-size);height:var(--b-list-selected-icon-size);border-radius:var(--b-checkbox-border-radius);border:var(--b-checkbox-border-width) solid var(--b-checkbox-border-color);background:var(--b-checkbox-background)}.b-list-item .b-selected-icon:before{transition:scale .2s ease;scale:0;content:var(--b-checkbox-checked-check-content);color:var(--b-list-checkbox-checked-check-color);font-size:var(--b-checkbox-check-font-size)}.b-multi-select>.b-list-item{--b-list-item-padding: var(--b-list-multi-select-item-padding)}.b-multi-select>.b-list-item.b-selected .b-selected-icon:before{scale:1}.b-multi-select>.b-list-item.b-selected .b-list-item-content{--b-checkbox-background: var(--b-list-checkbox-checked-background);--b-checkbox-border-color: var(--b-list-checkbox-checked-border-color, var(--b-list-checkbox-checked-background))}.b-list-item:focus{outline:none}.b-list-item.b-list-item-group-header{--b-list-item-font-weight: var(--b-list-item-group-header-font-weight)}.b-list-item.b-out-of-view:before{content:"..."}.b-grouped>.b-list-item:not(.b-list-item-group-header,.b-list-item-tree-parent){--b-list-item-padding: var(--b-list-item-group-padding)}.b-list-item.b-selected{--b-list-item-background: var(--b-list-item-selected-background, var(--b-primary-95))}.b-list-item.b-active,.b-list-item:focus-visible{--b-list-item-background: var(--b-list-item-focus-background, var(--b-primary-85))}.b-list-title{position:sticky;top:0;z-index:1;font-weight:var(--b-list-title-font-weight);background:var(--b-list-title-background)}.b-list-expander-icon{pointer-events:all;width:1.1em;height:1em}.b-list-item:is(.b-list-item-group-header,.b-list-item-tree-parent) .b-list-expander-icon{margin-inline-start:auto;margin-inline-end:0}.b-list-item-content{display:flex;align-items:center;flex:1;gap:var(--b-list-item-gap)}:root,:host{--b-chip-view-gap: .25em;--b-chip-view-padding: 0;--b-chip-view-chip-border-radius: 1.5em;--b-chip-view-chip-border-width: 1px;--b-chip-view-chip-font-size: 1em;--b-chip-view-chip-gap: .5em;--b-chip-view-chip-padding-block: .25em;--b-chip-view-chip-padding-inline: .75em;--b-chip-view-chip-border-color: transparent;--b-chip-view-chip-color: var(--b-text-1);--b-chip-view-chip-selected-color: var(--b-text-1)}.b-chip-view{display:flex;flex-flow:row wrap;background:transparent;align-items:center;--b-list-multi-select-gap: var(--b-chip-view-gap);padding:var(--b-chip-view-padding)}.b-chip-view.b-transitioning-height{transition:height .2s ease-in-out}.b-chip-view.b-adding-item.b-prevent-scroll{overflow:clip!important}.b-chip{display:flex;cursor:pointer;outline:none;overflow:clip;opacity:1;transition:opacity .2s linear,translate .2s ease-in,max-width .2s,background .2s;translate:0 0;max-width:15em;align-items:center;line-height:1.2em;border:var(--b-chip-view-chip-border-width) solid var(--b-chip-view-chip-border-color);background:var(--b-chip-view-chip-background, var(--b-primary-90));font-size:var(--b-chip-view-chip-font-size);border-radius:var(--b-chip-view-chip-border-radius);padding-block:var(--b-chip-view-chip-padding-block);padding-inline:var(--b-chip-view-chip-padding-inline)}.b-chip:hover{--b-chip-view-chip-background: var(--b-chip-view-chip-hover-background, var(--b-primary-85))}.b-chip.b-selected{--b-chip-view-chip-background: var(--b-chip-view-chip-selected-background, var(--b-primary-75));--b-chip-view-chip-color: var(--b-chip-view-chip-selected-color)}.b-chip.b-active{--b-chip-view-chip-background: var(--b-chip-view-chip-active-background, var(--b-primary-85));--b-chip-view-chip-color: var(--b-chip-view-chip-selected-color)}.b-chip.b-selected.b-active{--b-chip-view-chip-background: var(--b-chip-view-chip-active-selected-background, var(--b-primary-75))}.b-chip:focus-visible{--b-chip-view-chip-border-color: var(--b-chip-view-chip-focus-border-color, var(--b-primary-35))}.b-chip.b-removing.b-anim-collapse{transition:opacity .2s linear,max-width .2s ease-out;opacity:0;max-width:0}.b-chip.b-adding.b-anim-slide-up{opacity:0;translate:0 1em}.b-chip.b-adding.b-anim-expand{max-width:0;opacity:0}.b-chip-content{display:flex;overflow:clip;white-space:nowrap;align-items:center;gap:var(--b-chip-view-chip-gap);color:var(--b-chip-view-chip-color)}:root,:host{--b-color-picker-color-border-radius: var(--b-widget-border-radius);--b-color-picker-color-outline-width: 2px;--b-color-picker-color-outline: var(--b-color-picker-color-outline-width) solid currentColor;--b-color-picker-color-hover-outline: var(--b-color-picker-color-outline-width) solid currentColor;--b-color-picker-color-active-outline: var(--b-color-picker-color-outline-width) solid color-mix(in oklab, currentColor, transparent 50%);--b-color-picker-color-outline-offset: 2px;--b-color-picker-color-size: 2em;--b-color-picker-gap: .8em;--b-color-picker-padding: var(--b-widget-padding);--b-color-picker-color-no-color-color: #ccc;--b-color-picker-columns: 5}.b-color-picker{display:grid;overflow:visible;--b-menu-padding: var(--b-color-picker-padding);grid-gap:var(--b-color-picker-gap);grid-template-columns:repeat(var(--b-color-picker-columns),1fr);--b-list-background: transparent}.b-color-picker.b-combo-picker,.b-color-picker.b-color-column-picker{grid-template-columns:repeat(auto-fill,minmax(var(--b-color-picker-color-size),1fr));min-width:calc(var(--b-color-picker-color-size) * 4 + var(--b-color-picker-gap) * 3)}:is(.b-color-picker.b-combo-picker,.b-color-picker.b-color-column-picker) .b-color-picker-swatch{width:100%}.b-color-picker-swatch{display:grid;aspect-ratio:1 / 1;cursor:pointer;background-color:currentColor;position:relative;place-items:center;overflow:clip;outline-offset:calc(var(--b-color-picker-color-outline-width) * -1);transition:outline-offset .2s;outline:var(--b-color-picker-color-hover-outline);border-radius:var(--b-color-picker-color-border-radius);color:var(--b-primary);width:var(--b-color-picker-color-size)}.b-color-picker-swatch.b-color-active{outline:var(--b-color-picker-color-active-outline);outline-offset:var(--b-color-picker-color-outline-offset)}.b-color-picker-swatch.b-selected,.b-color-picker-swatch:hover{outline:var(--b-color-picker-color-hover-outline);outline-offset:var(--b-color-picker-color-outline-offset)}.b-color-picker-swatch.b-no-color{background-color:transparent;border:1px solid currentColor;color:var(--b-color-picker-color-no-color-color)}.b-color-picker-swatch.b-no-color:before{content:"";position:absolute;height:300%;border-inline-end:1px solid currentColor;rotate:135deg}:root,:host{--b-mask-border-radius: var(--b-widget-border-radius);--b-mask-padding: var(--b-widget-padding);--b-mask-text-background: var(--b-popup-background, var(--b-neutral-100));--b-mask-progress-height: .25em;--b-mask-background: color-mix(in srgb, var(--b-neutral-0), transparent 85%);--b-mask-text-color: var(--b-widget-color);--b-mask-progress-color: color-mix(in srgb, var(--b-mask-text-color), transparent 30%);--b-mask-color: var(--b-primary);--b-mask-transition-duration: .5s}.b-mask{position:absolute;inset:0;display:grid;place-items:center;z-index:100;opacity:1;background:var(--b-mask-background);color:var(--b-mask-color);transition:opacity var(--b-mask-transition-duration)}.b-mask.b-delayed-show{opacity:0}@starting-style{.b-mask{opacity:0}}.b-mask-rendition-text{--b-mask-color: transparent;--b-mask-text-color: var(--b-text-2)}.b-mask-rendition-text .b-mask-content{box-shadow:none}.b-mask-content{position:relative;overflow:hidden;background:var(--b-mask-text-background);box-shadow:var(--b-elevation-1);border-radius:var(--b-mask-border-radius)}.b-mask-progress-bar{height:var(--b-mask-progress-height);background:var(--b-mask-progress-color)}.b-mask-text{display:flex;gap:.5em;user-select:none;-webkit-user-select:none;align-items:center;color:var(--b-mask-text-color);padding:var(--b-mask-padding)}.b-masked{position:relative}:root,:host{--b-menu-item-gap: var(--b-widget-gap);--b-menu-item-icon-width: 1em;--b-menu-item-min-width: 12em;--b-menu-item-padding: var(--b-widget-padding);--b-menu-item-font-weight: var(--b-widget-font-weight);--b-menu-item-separator-border-color: var(--b-border-6);--b-menu-item-color: var(--b-widget-color);--b-menu-item-icon-color: var(--b-menu-item-color);--b-menu-item-disabled-color: var(--b-widget-disabled-color);--b-menu-item-disabled-icon-color: var(--b-neutral-70);--b-menu-item-background: transparent;--b-menu-item-hover-color: var(--b-widget-color);--b-menu-item-focus-color: var(--b-widget-color);--b-menu-item-hover-icon-color: var(--b-widget-color);--b-menu-item-focus-icon-color: var(--b-widget-color);--b-menu-item-border-radius: null;--b-menu-item-separator-height: 1px;--b-menu-item-separator-inset: 0}.b-menu-item{display:flex;align-items:center;outline:none;overflow:clip;flex-shrink:0;background:var(--b-menu-item-background);border-radius:var(--b-menu-item-border-radius);color:var(--b-menu-item-color);font-weight:var(--b-menu-item-font-weight);gap:var(--b-menu-item-gap);min-width:var(--b-menu-item-min-width);padding:var(--b-menu-item-padding)}.b-menu-item.b-separator:not(.b-first-visible-child){overflow:visible;margin-top:calc(var(--b-menu-item-separator-height) * 2 - 1px)}.b-menu-item.b-separator:not(.b-first-visible-child):before{content:"";display:block;position:absolute;inset-inline:var(--b-menu-item-separator-inset);top:calc(var(--b-menu-item-separator-height) * -1);border-top:1px solid var(--b-menu-item-separator-border-color)}.b-menu-item:not(.b-disabled){cursor:pointer}.b-menu-item:hover{--b-menu-item-color: var(--b-menu-item-hover-color);--b-menu-item-background: var(--b-menu-item-hover-background, var(--b-primary-90));--b-menu-item-icon-color: var(--b-menu-item-hover-icon-color)}.b-menu-item:focus-within{--b-menu-item-color: var(--b-menu-item-focus-color);--b-menu-item-background: var(--b-menu-item-focus-background, var(--b-primary-90));--b-menu-item-icon-color: var(--b-menu-item-focus-icon-color)}.b-menu-item.b-disabled{--b-menu-item-color: var(--b-menu-item-disabled-color);--b-menu-item-icon-color: var(--b-menu-item-disabled-icon-color)}.b-menu-item.b-rtl .b-icon-sub-menu:before{rotate:180deg}.b-menu-item-icon{justify-self:center;color:var(--b-menu-item-icon-color);width:var(--b-menu-item-icon-width)}.b-menu-text{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-inline-start:calc(var(--b-menu-item-icon-width) + var(--b-menu-item-gap));margin-inline-end:var(--bi-menu-item-margin-inline-end)}.b-menu:not(.b-menu-with-icon) .b-menu-text,.b-menu-item-icon~.b-menu-text{margin-inline-start:0}:root,:host{--b-badge-font-size: .7em;--b-badge-height: 1.7em;--b-badge-background: var(--b-color-red);--b-badge-color: var(--b-neutral-100);--b-badge-offset: -.6em}.b-widget.b-badge{overflow:visible}.b-badge:after{content:attr(data-badge);position:absolute;display:flex;align-items:center;justify-content:center;z-index:5;padding-inline:.3em;background:var(--b-badge-background);border-radius:var(--b-badge-height);color:var(--b-badge-color);font-size:var(--b-badge-font-size);height:var(--b-badge-height);min-width:var(--b-badge-height);inset-inline-end:var(--b-badge-offset);inset-block-start:var(--b-badge-offset)}.b-formula-field-list{--b-panel-header-padding: var(--b-list-item-padding);--b-panel-header-font-size: 1em}.b-widget.b-tooltip.b-field-error-tip{--b-primary: var(--b-field-error-tip-primary);--b-tooltip-plain-background: var(--b-field-error-tip-background);--b-tooltip-plain-color: var(--b-field-error-tip-color)}:root,:host{--b-progress-bar-background: var(--b-neutral-90)}.b-progress-bar{display:flex;flex-direction:column;width:100%;margin-bottom:1em}.b-progress-bar .b-label{font-size:.95em}.b-progress-bar .b-progress-bar-label{margin-inline-end:3em}.b-progress-bar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5em}.b-progress-bar-track{position:relative;width:100%;height:.43em;overflow:hidden;border-radius:var(--b-widget-border-radius);background:var(--b-progress-bar-background)}.b-progress-bar-fill{height:100%;transition:width .2s ease;border-radius:var(--b-widget-border-radius);background:var(--b-primary)}.b-rich-text-field{overflow:visible;height:10em;color:var(--b-text-field-input-color)}.b-rich-text-field .b-field-inner{overflow:visible;align-items:flex-start}.b-rich-text-field .b-rich-text-field-container{width:100%;height:100%;padding:.5em;outline:none}.b-cell-editor .b-rich-text-field{height:100%;min-height:100%}:root,:host{--b-slider-thumb-size: 1.5em;--b-slider-thumb-elevation: var(--b-elevation-1);--b-slider-thumb-border: null;--b-slider-track-height: .5em;--b-slider-step-size: calc(var(--b-slider-track-height) * .4);--b-slider-step-width: unset;--b-slider-step-height: unset;--b-slider-step-opacity: .5;--b-slider-ring-content: none;--b-slider-value-border-radius: var(--b-widget-border-radius);--b-slider-thumb-value-size: 1.75em;--b-slider-thumb-text-color: var(--b-neutral-100);--b-slider-step-lesser-color: var(--b-neutral-100);--b-slider-value-color: var(--b-neutral-100);--b-slider-disabled-color: var(--b-neutral-80);--b-slider-disabled-thumb-color: var(--b-neutral-80);--b-slider-disabled-track-color: var(--b-neutral-90);--b-slider-track-color: var(--b-neutral-85);--b-slider-track-border: null;--b-slider-thumb-focus-outline-offset: 2px;--b-slider-thumb-focus-outline-width: var(--b-widget-focus-outline-width);--b-slider-step-border-radius: 50%}.b-internal{--bi-slider-value-percent: null;--bi-slider-value: null;--bi-slider-max: null;--bi-slider-min: null}.b-slider{place-items:center;gap:.75em;display:grid;overflow:visible;min-height:calc(var(--b-slider-thumb-value-size) + var(--b-slider-thumb-focus-outline-width) * 2 + var(--b-slider-thumb-focus-outline-offset) * 2);--bi-slider-value-percent: calc(((var(--bi-slider-value) - var(--bi-slider-min)) / (var(--bi-slider-max) - var(--bi-slider-min))) * 100%)}.b-slider.b-label-above>.b-label.b-align-start{justify-self:start}.b-slider .b-field-inner{width:100%;grid-template-areas:"track"}.b-slider.b-text:not(.b-show-value) .b-field-inner{grid-template-areas:"track" "below";gap:.5em}.b-slider input{grid-area:track;appearance:none;opacity:0;cursor:pointer;width:100%;height:100%}.b-slider:not(.b-disabled) .b-field-inner:hover{--bi-checkbox-ring-opacity: var(--b-checkbox-ring-hover-opacity)}.b-slider:not(.b-disabled) .b-field-inner:has(input:active){--bi-checkbox-ring-opacity: var(--b-checkbox-ring-active-opacity)}.b-slider:not(.b-disabled) .b-field-inner:has(input:focus){--bi-checkbox-ring-opacity: var(--b-checkbox-ring-focus-opacity)}.b-slider:not(.b-disabled) .b-field-inner:has(input:focus-visible) .b-slider-thumb{outline:var(--b-slider-thumb-focus-outline-width) solid var(--b-slider-thumb-focus-outline-color, var(--b-primary-60));outline-offset:var(--b-slider-thumb-focus-outline-offset)}.b-slider.b-thumb-value{--b-slider-thumb-size: var(--b-slider-thumb-value-size)}.b-slider.b-thumb-value .b-slider-thumb:after{display:grid;counter-reset:variable var(--bi-slider-value);content:counter(variable);font-size:.7em;width:100%;height:100%;place-items:center;line-height:1em;color:var(--b-slider-thumb-text-color)}.b-slider.b-show-value .b-slider-internal-label{grid-column:-1;padding:.5em;font-size:.9em;position:relative;z-index:1;min-width:2.75em;text-align:center;background:var(--b-slider-value-background, var(--b-primary-30));border-radius:var(--b-slider-value-border-radius);color:var(--b-slider-value-color)}.b-slider.b-show-value .b-slider-internal-label:before{content:"";width:.75em;aspect-ratio:1 / 1;background:inherit;rotate:45deg;position:absolute;inset-inline-start:0;top:50%;translate:calc(-50% * var(--b-rtl-negate)) -50%}.b-slider.b-widget.b-disabled{--b-slider-color: var(--b-slider-disabled-color);--b-slider-thumb-color: var(--b-slider-disabled-thumb-color);--b-slider-track-color: var(--b-slider-disabled-track-color);--b-slider-value-background: var(--b-slider-disabled-thumb-color)}.b-grid-cell .b-slider{width:100%}.b-slider-track{display:flex;align-items:center;grid-area:track;border-radius:.25em;position:relative;pointer-events:none;transition:background .2s;background:var(--b-slider-track-color);border:var(--b-slider-track-border);height:var(--b-slider-track-height);width:calc(100% - var(--b-slider-thumb-size))}.b-slider-progress{border-radius:inherit;height:100%;pointer-events:none;transition:background .2s;width:var(--bi-slider-value-percent);background:var(--b-slider-color, var(--b-primary))}.b-slider-thumb{position:absolute;flex-shrink:0;aspect-ratio:1/ 1;border-radius:50%;translate:calc(-50% * var(--b-rtl-negate));background-color:currentColor;z-index:1;outline:0 solid transparent;outline-offset:0;transition:color .2s,scale .2s,outline .2s,outline-offset .2s;inset-inline-start:var(--bi-slider-value-percent);color:var(--b-slider-thumb-color, var(--b-slider-color, var(--b-primary)));width:var(--b-slider-thumb-size);box-shadow:var(--b-slider-thumb-elevation);border:var(--b-slider-thumb-border)}.b-slider-thumb:before{content:var(--b-slider-ring-content);display:block;background:currentColor;position:absolute;top:50%;left:50%;translate:calc(-50% * var(--b-rtl-negate)) -50%;transform-origin:center center;border-radius:50%;pointer-events:none;transition:opacity .5s ease;aspect-ratio:1 / 1;opacity:var(--bi-checkbox-ring-opacity);width:calc(var(--b-slider-thumb-size) * 1.75)}.b-slider-steps{display:flex;position:absolute;width:100%;height:100%;justify-content:space-evenly;align-items:center}.b-slider-step{background-color:var(--b-slider-step-color, var(--b-slider-color, var(--b-primary)));border-radius:var(--b-slider-step-border-radius);width:var(--b-slider-step-width, var(--b-slider-step-size));height:var(--b-slider-step-height, var(--b-slider-step-size));opacity:var(--b-slider-step-opacity)}.b-slider-step.b-less{--b-slider-color: var(--b-slider-step-lesser-color)}.b-slider-internal-label{color:var(--b-label-color)}:root,:host{--b-splitter-size: 4px;--b-splitter-hover-size: 8px;--b-splitter-touch-hover-size: 16px;--b-splitter-disabled-size: 1px;--b-splitter-color: var(--b-border-6);--b-splitter-hover-color: var(--b-border-7);--b-splitter-disabled-color: var(--b-border-7);--b-splitter-button-size: 1em;--b-splitter-touch-button-size: 1.3em;--b-splitter-button-icon-color: var(--b-border-4);--b-splitter-button-hover-color: var(--b-border-2);--bi-splitter-overflow: visible;--bi-splitter-inner-top: 0;--bi-splitter-inner-left: 0;--bi-splitter-inner-translate: 0 0}.b-splitter{position:relative;touch-action:none;background:var(--b-splitter-color);flex:0 0 var(--b-splitter-size);overflow:var(--bi-splitter-overflow);flex-grow:0!important;--bi-splitter-inner-size: var(--b-splitter-size)}.b-splitter.b-disabled{pointer-events:none;--b-splitter-size: var(--b-splitter-disabled-size);--b-splitter-color: var(--b-splitter-disabled-color);--bi-splitter-overflow: clip}:is(.b-splitter.b-hover,.b-splitter.b-moving,.b-splitter.b-show-buttons) .b-splitter-buttons{display:flex}.b-splitter:after{content:"";position:absolute;z-index:10000;transition:all .2s;background:var(--b-splitter-color);top:var(--bi-splitter-inner-top);left:var(--bi-splitter-inner-left);width:var(--bi-splitter-inner-width);height:var(--bi-splitter-inner-height);translate:var(--bi-splitter-inner-translate)}.b-splitter.b-horizontal{min-height:var(--b-splitter-size)}.b-splitter.b-horizontal:after{--bi-splitter-inner-height: var(--bi-splitter-inner-size);--bi-splitter-inner-width: 100%}.b-splitter.b-horizontal:not(.b-drag-disabled){cursor:ns-resize}.b-splitter.b-horizontal:not(.b-drag-disabled):hover,.b-splitter.b-horizontal:not(.b-drag-disabled).b-hover,.b-splitter.b-horizontal:not(.b-drag-disabled).b-moving{--b-splitter-color: var(--b-splitter-hover-color)}:is(.b-splitter.b-horizontal:not(.b-drag-disabled):hover,.b-splitter.b-horizontal:not(.b-drag-disabled).b-hover,.b-splitter.b-horizontal:not(.b-drag-disabled).b-moving):after{--bi-splitter-inner-top: 50%;--bi-splitter-inner-translate: 0 -50%;--bi-splitter-inner-size: var(--b-splitter-hover-size)}.b-splitter.b-horizontal .b-splitter-buttons{rotate:90deg}.b-splitter.b-vertical{min-width:var(--b-splitter-size)}.b-splitter.b-vertical:after{--bi-splitter-inner-height: 100%;--bi-splitter-inner-width: var(--bi-splitter-inner-size)}.b-splitter.b-vertical:not(.b-drag-disabled){cursor:ew-resize}.b-splitter.b-vertical:not(.b-drag-disabled):hover,.b-splitter.b-vertical:not(.b-drag-disabled).b-hover,.b-splitter.b-vertical:not(.b-drag-disabled).b-moving{--b-splitter-color: var(--b-splitter-hover-color)}:is(.b-splitter.b-vertical:not(.b-drag-disabled):hover,.b-splitter.b-vertical:not(.b-drag-disabled).b-hover,.b-splitter.b-vertical:not(.b-drag-disabled).b-moving):after{--bi-splitter-inner-left: 50%;--bi-splitter-inner-translate: -50% 0;--bi-splitter-inner-size: var(--b-splitter-hover-size)}.b-splitter:last-child,.b-splitter:first-child{visibility:hidden;flex:0;min-width:0}@media (pointer : coarse){.b-splitter{--b-splitter-hover-size: var(--b-splitter-touch-hover-size)}}.b-splitter.b-rtl .b-splitter-buttons{translate:50% -50%}.b-splitter.b-rtl.b-vertical .b-splitter-buttons{scale:-1 1}.b-splitter.b-rtl .b-splitter-button-expand{justify-content:flex-end;translate:100%}.b-splitter.b-rtl .b-splitter-button-collapse{justify-content:flex-start;translate:-100%}.b-splitter-buttons{display:none;position:absolute;height:2.4em;width:2.4em;z-index:10001;inset-inline-start:50%;translate:-50% -50%;transition:top .2s ease-in-out,inset-inline-start .2s ease-in-out;font-size:var(--b-splitter-button-size)}.b-splitter-buttons:has(.b-disabled){pointer-events:none}.b-splitter-button-collapse,.b-splitter-button-expand{flex:1;cursor:pointer;display:flex;align-items:center;position:relative;padding-top:.1em;background:var(--b-splitter-color)}:is(.b-splitter-button-collapse,.b-splitter-button-expand):hover .b-splitter-button-icon{color:var(--b-splitter-button-hover-color)}:is(.b-splitter-button-collapse,.b-splitter-button-expand).b-disabled{cursor:default;visibility:hidden!important;pointer-events:none}:is(.b-splitter-button-collapse,.b-splitter-button-expand):not(.b-disabled){pointer-events:auto}.b-splitter-button-collapse{border-top-left-radius:100% 50%;border-bottom-left-radius:100% 50%;justify-content:flex-end}.b-splitter-button-expand{border-top-right-radius:100% 50%;border-bottom-right-radius:100% 50%}.b-splitter-button-icon{cursor:pointer;height:1.5em;font-size:1.3em;font-weight:400;align-content:center;color:var(--b-splitter-button-icon-color)}.b-splitter-button-touch-area{height:3em;top:-.3em;width:2em;position:absolute}.b-splitter-button-collapse .b-splitter-button-touch-area{inset-inline-start:-.9em}.b-splitter-button-expand .b-splitter-button-touch-area{inset-inline-end:-.9em}:root,:host{--b-toast-padding: var(--b-widget-padding);--b-toast-border-radius: var(--b-widget-border-radius);--b-toast-transition-duration: .25s;--b-toast-progress-height: .25em;--b-toast-color: var(--b-widget-color)}.b-internal{--bi-toast-side: null}.b-float-root>.b-toast{display:block;overflow-x:clip;overflow-y:auto;top:auto;inset-inline-end:2em;inset-inline-start:auto;max-width:60%;max-height:60%;line-height:1.4em;cursor:pointer;transition:var(--bi-toast-side) var(--b-toast-transition-duration) ease-in,translate var(--b-toast-transition-duration) ease-in,background .2s,color .2s;background:var(--b-toast-background, var(--b-primary-98));color:var(--b-toast-color);padding:var(--b-toast-padding);border-radius:var(--b-toast-border-radius)}.b-float-root>.b-toast:is(.b-side-top-start,.b-side-top-end){top:0}.b-float-root>.b-toast:is(.b-side-top-start,.b-side-bottom-start){inset-inline-start:2em;inset-inline-end:auto}.b-float-root>.b-toast.b-toast-hide.b-side-bottom-end,.b-float-root>.b-toast.b-toast-hide.b-side-bottom-start{bottom:0!important;translate:0 100%!important}.b-float-root>.b-toast.b-toast-hide.b-side-top-end,.b-float-root>.b-toast.b-toast-hide.b-side-top-start{top:0!important;translate:0 -100%!important}.b-float-root>.b-toast.b-icon:before{margin-inline-end:.5em}.b-toast-progress{position:absolute;top:0;inset-inline-start:0;animation-name:b-toast-progress;animation-timing-function:linear;height:var(--b-toast-progress-height);background:var(--b-toast-progress-color, var(--b-primary-50))}@keyframes b-toast-progress{0%{width:0}to{width:100%}}.b-tool{display:grid;appearance:none;background-color:transparent;border:none;border-radius:50%;cursor:pointer;padding:0;width:1.25em;place-content:center;transition:color .2s;aspect-ratio:1 / 1;color:var(--b-panel-header-color)}.b-tool:focus-visible{outline:var(--b-widget-focus-outline-width) solid var(--b-widget-focus-outline-color)}.b-tool.b-disabled{opacity:.4}:root,:host{--b-avatar-size: 2.5em;--b-avatar-initials-text-transform: uppercase;--b-avatar-initials-font-weight: 600;--b-avatar-border-radius: 50%;--b-avatar-aspect-ratio: 1 / 1;--b-avatar-icon-font-size: 1.1em;--b-avatar-border: null}.b-colorize{--b-avatar-background: var(--b-primary-85);--b-avatar-icon-color: var(--b-primary-30);--b-avatar-initials-color: var(--b-primary-30)}.b-resource-avatar{touch-action:pan-x pan-y;display:grid;place-items:center;flex-shrink:0;width:var(--b-avatar-size);height:var(--b-avatar-size);background:var(--b-avatar-background);border-radius:var(--b-avatar-border-radius);border:var(--b-avatar-border)}.b-resource-avatar.b-resource-icon:before{color:var(--b-avatar-icon-color);font-size:var(--b-avatar-icon-font-size)}i.b-resource-avatar{display:grid}.b-resource-initials{color:var(--b-avatar-initials-color);font-weight:var(--b-avatar-initials-font-weight);text-transform:var(--b-avatar-initials-text-transform)}.b-ripple-clip{position:absolute;inset:0;z-index:0;border-radius:inherit;overflow:clip;pointer-events:none}.b-ripple-clip:before{position:absolute;content:"";width:0;aspect-ratio:1 / 1;border-radius:50%;opacity:0;transition:width .2s linear,opacity .1s linear;translate:-50% -50%;inset-inline-start:var(--b-click-x);inset-block-start:var(--b-click-y);background:var(--b-ripple-background);mix-blend-mode:var(--b-ripple-blend-mode)}.b-ripple-clip.b-animate:before{opacity:1;width:200%}:root,:host{--b-grid-column-transition-duration: var(--b-default-transition-duration);--b-grid-row-transition-duration: var(--b-default-transition-duration);--b-grid-empty-padding: var(--b-widget-padding);--b-grid-empty-color: var(--b-text-2);--b-grid-panel-header-padding: var(--b-panel-header-padding);--b-grid-panel-header-border-bottom: var(--b-grid-header-border-width) solid var(--b-grid-header-border-color);--b-grid-background: var(--b-neutral-100);--b-grid-cell-border-width: 1px;--b-grid-cell-focused-outline-width: var(--b-widget-focus-outline-width);--b-grid-cell-focused-outline-color: var(--b-widget-focus-outline-color);--b-grid-cell-gap: .5em;--b-grid-cell-padding-block: 0;--b-grid-cell-padding-inline: var(--b-widget-padding);--b-grid-cell-font-size: 1em;--b-grid-cell-font-weight: var(--b-widget-font-weight);--b-grid-row-height: 45px;--b-grid-row-border-width: 1px;--b-grid-row-zindex: 1;--b-grid-splitter-width: 1px;--b-grid-cell-border-color: var(--b-border-7);--b-grid-cell-background: var(--b-neutral-100);--b-grid-cell-color: var(--b-widget-color);--b-grid-cell-selected-color: var(--b-widget-color);--b-grid-row-border-color: var(--b-grid-cell-border-color);--b-grid-cell-dirty-color: var(--b-color-red);--b-grid-splitter-narrow-color: var(--b-neutral-80);--bi-grid-cell-overflow: clip;--b-grid-row-placeholder-color: var(--b-neutral-95);--b-grid-cell-highlight-color: color-mix(in srgb, var(--b-color-yellow) 20%, var(--b-neutral-100))}.b-grid-base{overflow:clip;min-width:0;--b-panel-bottom-toolbar-padding: var(--b-grid-header-padding);--b-panel-header-border-bottom: var(--b-grid-panel-header-border-bottom);--b-panel-header-padding: var(--b-grid-panel-header-padding);--b-panel-background: var(--b-grid-background);--b-panel-top-toolbar-margin-inline: 0;--b-panel-top-toolbar-border-radius: 0}.b-grid-base:where(.b-outer:not(.b-auto-height)){height:100%}.b-grid-base.b-auto-height{height:auto;flex:none}.b-grid-base.b-auto-height .b-grid-vertical-scroller{position:relative}.b-grid-base.b-auto-height.b-grid-empty .b-grid-body-container{height:unset!important;flex:1}.b-grid-base .b-empty-text{display:none}.b-grid-base.b-grid-empty .b-empty-text{display:block;position:relative;color:var(--b-grid-empty-color);padding:var(--b-grid-empty-padding);z-index:10}.b-grid-base .b-editing{overflow:visible;contain:unset;z-index:2}.b-grid-base.b-splicing-rows-toggle .b-grid-row:is(.b-adding,.b-removing,.b-repositioning),.b-grid-base.b-splicing-rows-remove .b-grid-row:is(.b-removing,.b-repositioning),.b-grid-base.b-splicing-rows-insert .b-grid-row:is(.b-adding,.b-repositioning){transition:top var(--b-grid-row-transition-duration),left var(--b-grid-row-transition-duration);z-index:calc(var(--b-grid-row-zindex) - 1);pointer-events:none}.b-grid-base.b-collapsing-column .b-collapsing,.b-grid-base.b-collapsing-column .b-collapsing .b-grid-header:not(:first-child){min-width:0!important;overflow:clip!important;padding:0}.b-grid-base.b-collapsing-column .b-collapsing .b-grid-header:not(:first-child){width:0!important}.b-grid-base .b-expanding-start .b-grid-header:not(:first-child){min-width:0!important;width:0!important;padding:0}.b-grid-base.b-expanding-column .b-expanding .b-grid-header:not(:first-child){min-width:0!important}:is(.b-grid-base.b-collapsing-column,.b-grid-base.b-expanding-column,.b-grid-base.b-showing-column,.b-grid-base.b-hiding-column,.b-grid-base.b-toggling-columns) .b-grid-header{transition-property:min-width,max-width,width,flex,padding;transition-duration:var(--b-grid-column-transition-duration)}:is(.b-grid-base.b-collapsing-column,.b-grid-base.b-expanding-column,.b-grid-base.b-showing-column,.b-grid-base.b-hiding-column,.b-grid-base.b-toggling-columns) .b-grid-cell{transition-property:padding;transition-duration:var(--b-grid-column-transition-duration)}.b-grid-base .b-grid-header:is(.b-showing,.b-hiding){min-width:0!important;padding:0!important}.b-grid-base .b-grid-header:is(.b-showing,.b-hiding).b-flex{flex:0!important}.b-grid-base .b-toggling-all-expand.b-grid-header{width:0!important}.b-fill-last-column .b-grid-footers:not(.b-has-flex,.b-horizontal-overflow) .b-grid-footer:last-child,.b-fill-last-column .b-grid-headers:not(.b-has-flex,.b-horizontal-overflow) .b-last-parent,.b-fill-last-column .b-grid-headers:not(.b-has-flex,.b-horizontal-overflow) .b-last-leaf:not(.b-drop-placeholder){flex-grow:1;border-inline-end-color:transparent}.b-fill-last-column .b-grid-headers:not(.b-has-flex,.b-horizontal-overflow) .b-last-parent>.b-grid-header-text{border-inline-end-color:transparent}.b-fill-last-column .b-grid-cell:last-child,.b-fill-last-column .b-row-expander-row-expanded .b-grid-cell:nth-last-child(2){--b-grid-cell-border-width: 0}.b-grid-panel-body{display:flex;flex-direction:column;flex:1;position:relative;overflow:hidden}.b-grid-panel-body:not(.b-auto-height)>.b-grid-body-container{flex:1 1 0;contain:strict}.b-grid-panel-body:not(.b-auto-height)>.b-grid-body-container>.b-grid-vertical-scroller{min-height:100%}.b-grid-base.b-enable-sticky .b-sticky-cell,.b-grid-base.b-enable-sticky .b-grid-sub-grid,.b-grid-base.b-enable-sticky .b-grid-vertical-scroller,.b-grid-base.b-enable-sticky .b-grid-row{overflow:visible!important}.b-grid-base>.b-panel-body-wrap{--b-toolbar-background: var(--b-grid-toolbar-background)}.b-grid-base>.b-panel-body-wrap>.b-top-toolbar{transition:background-color var(--b-default-transition-duration),border var(--b-default-transition-duration);border-bottom:var(--b-grid-header-container-border-width) solid var(--b-grid-header-border-color)}.b-grid-base:not(.b-auto-height)>.b-panel-body-wrap>.b-bottom-toolbar{border-top:var(--b-grid-header-container-border-width) solid var(--b-grid-header-border-color)}.b-grid-body-container{position:relative}.b-grid-vertical-scroller{display:flex;overflow:clip}.b-grid-base .fa{font-family:inherit}.b-grid-base .fa:before{font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-no-transitions .b-grid-row{transition:none!important}.b-grid-base.b-highlighting-fade .b-grid-cell:not(.b-highlighted):before{content:"";position:absolute;inset:0;opacity:.8;transition:opacity .4s;pointer-events:none;background-color:var(--b-grid-cell-background, var(--b-neutral-100))}.b-grid-base:not(.b-highlighting-fade) .b-grid-cell.b-highlighted{transition:background-color .4s;background-color:var(--b-grid-cell-highlight-color)}:root,:host{--b-group-bar-separator-icon: "\f054";--b-group-bar-separator-color: var(--b-neutral-50)}.b-group-bar{display:flex;flex-wrap:nowrap;flex:1;align-self:center;gap:2.2em;min-height:2em;--b-chip-view-chip-padding: .5em 1em;--b-chip-view-chip-gap: 1em;--b-chip-view-chip-border-radius: var(--b-button-border-radius)}.b-group-bar .b-chip{position:relative;overflow:visible}.b-group-bar .b-chip:not(:last-child):after{position:absolute;inset-inline-end:-1.5em;color:var(--b-group-bar-separator-color);content:var(--b-group-bar-separator-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-rtl :is(.b-group-bar .b-chip):not(:last-child):after{scale:-1 0}.b-group-bar .b-drop-target{opacity:.5}.b-group-bar .b-drop-target .b-chip-content{visibility:hidden}.b-grid-reordering-columns-with-group-bar.b-grid-header.b-drag-proxy{min-width:10em!important;padding-inline:1em;border-radius:var(--b-button-border-radius)}.b-grid-reordering-columns-with-group-bar.b-grid-header.b-drag-proxy .b-grid-header-text{padding:.5em 0}.b-grid-reordering-columns-with-group-bar.b-grid-header.b-drag-proxy,.b-grid-reordering-columns-with-group-bar.b-grid-header.b-drag-proxy .b-grid-header-text-content{width:auto!important}.b-grid-base.b-dragging-header:not(.b-tree-group) .b-group-bar .b-drop-target{display:none}.b-grid-base.b-dragging-header:not(.b-tree-group) .b-group-bar .b-chip:after{content:none}.b-grid-base.b-dragging-header:not(.b-tree-group) .b-group-bar:hover .b-chip{display:none}.b-grid-base.b-dragging-header:not(.b-tree-group) .b-group-bar:hover .b-drop-target{display:flex}.b-sparkline-cell .b-chart{background:transparent}:root,:host{--b-quick-find-font-weight: var(--b-grid-cell-font-weight);--b-quick-find-badge-offset: .4em;--b-quick-find-badge-font-size: .7em;--b-quick-find-primary: var(--b-secondary);--b-quick-find-badge-color: var(--b-grid-header-color)}:is(.b-grid-row.b-hover,.b-grid-row.b-selected) .b-colorize{--b-quick-find-background: var(--b-quick-find-row-hover-background, var(--b-primary-95))}.b-cell-editor{--b-widget-floating-box-shadow: none}.b-cell-editor .b-field{border-radius:0;background:var(--b-grid-cell-applied-background);--b-text-field-input-padding: var(--b-grid-cell-padding-block) var(--b-grid-cell-padding-inline)}.b-grid-cell.b-editing{color:transparent}.b-grid-cell.b-editing:not(.b-tree-cell)>:not(.b-editor),.b-grid-cell.b-editing.b-tree-cell>.b-tree-cell-value{visibility:hidden}.b-grid-cell.b-editing,.b-grid-cell.b-after-edit{--bi-grid-cell-selected-color-transition-duration: 0ms}.b-chart-designer-popup>.b-popup-body-wrap>.b-popup-content{padding-top:0}.b-chart-cell .b-chart{background:none}:root,:host{--b-column-drag-toolbar-border-radius: var(--b-popup-border-radius);--b-column-drag-toolbar-opacity: .6;--b-column-drag-toolbar-hover-opacity: .9;--b-column-drag-toolbar-button-border-width: 0;--b-column-drag-toolbar-box-shadow: var(--b-widget-floating-box-shadow);--b-column-drag-toolbar-disabled-icon-color: var(--b-neutral-85);--b-column-drag-toolbar-button-box-shadow: none;--b-column-drag-toolbar-button-hover-box-shadow: none;--b-column-drag-toolbar-button-color: var(--b-neutral-20);--b-column-drag-toolbar-button-background: transparent;--b-column-drag-toolbar-title-color: var(--b-neutral-20);--b-column-drag-toolbar-background: var(--b-neutral-100)}.b-column-drag-toolbar{position:absolute;top:calc(100% - 3em);left:50%;z-index:100;animation-name:b-anim-show-column-drag-toolbar;animation-duration:.2s;translate:-50%;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:center;transition:opacity .2s,top .2s;padding:1em 1em .5em;font-size:.8em;border:var(--b-popup-border);border-radius:var(--b-column-drag-toolbar-border-radius);background:var(--b-column-drag-toolbar-background);box-shadow:var(--b-column-drag-toolbar-box-shadow);opacity:var(--b-column-drag-toolbar-opacity)}.b-column-drag-toolbar.b-closer{top:50%;translate:-50% -50%}.b-column-drag-toolbar.b-hover{--b-column-drag-toolbar-opacity: var(--b-column-drag-toolbar-hover-opacity)}.b-column-drag-toolbar.b-remove{animation-name:b-anim-hide-column-drag-toolbar;animation-duration:.2s;top:100%;--b-column-drag-toolbar-opacity: 0}.b-column-drag-toolbar.b-remove.b-closer{animation-name:b-anim-hide-column-drag-toolbar-closer}.b-column-drag-toolbar>.b-title{flex-basis:100%;margin-bottom:1em;text-align:center;color:var(--b-column-drag-toolbar-title-color)}.b-column-drag-toolbar>.b-title:before{content:"Drag header downwards"}.b-column-drag-toolbar.b-closer>.b-title:before{content:"Drop header on a button"}.b-column-drag-toolbar .b-group{display:inline-flex;flex-direction:column;align-items:center;margin-inline-end:1.5em}.b-column-drag-toolbar .b-group:last-child{margin-inline-end:0}.b-column-drag-toolbar .b-group .b-title{margin-block:.5em;color:var(--b-column-drag-toolbar-title-color)}.b-column-drag-toolbar .b-buttons{display:inline-flex;flex-direction:row}.b-column-drag-toolbar .b-target-button{display:inline-flex;flex-direction:column;align-items:center;transition:all .2s;padding:1em 0;width:7.5em;margin-inline-end:.5em;color:var(--b-column-drag-toolbar-button-color);border:var(--b-column-drag-toolbar-button-border-width) solid var(--b-column-drag-toolbar-button-border-color, var(--b-primary-40));border-radius:var(--b-column-drag-toolbar-border-radius);background:var(--b-column-drag-toolbar-button-background);box-shadow:var(--b-column-drag-toolbar-button-box-shadow)}.b-column-drag-toolbar .b-target-button:last-child{margin-inline-end:0}.b-column-drag-toolbar .b-target-button i{font-size:2.5em;pointer-events:none;transition:all .2s;color:var(--b-column-drag-toolbar-icon-color, var(--b-primary-60))}.b-column-drag-toolbar .b-target-button.b-hover:not([data-disabled=true]){--b-column-drag-toolbar-icon-color: var(--b-column-drag-toolbar-default-hover-icon-color, var(--b-primary-60));--b-column-drag-toolbar-button-color: var(--b-column-drag-toolbar-default-hover-color, var(--b-primary-60));--b-column-drag-toolbar-button-background: var(--b-column-drag-toolbar-default-hover-background, var(--b-primary-95));--b-column-drag-toolbar-button-box-shadow: var(--b-column-drag-toolbar-button-hover-box-shadow)}.b-column-drag-toolbar .b-target-button.b-hover:not([data-disabled=true]) i{scale:1.1}.b-column-drag-toolbar .b-target-button.b-activate i{scale:1.1;rotate:180deg}.b-column-drag-toolbar .b-target-button[data-ref^=group]{--b-primary: var(--b-secondary)}.b-column-drag-toolbar .b-target-button[data-disabled=true]{--b-column-drag-toolbar-button-color: var(--b-column-drag-toolbar-disabled-icon-color);--b-column-drag-toolbar-icon-color: var(--b-column-drag-toolbar-disabled-icon-color)}@keyframes b-anim-show-column-drag-toolbar{0%{top:100%;opacity:0}to{top:calc(100% - 3em);opacity:.4}}@keyframes b-anim-hide-column-drag-toolbar{0%{top:calc(100% - 3em);opacity:.4}to{top:100%;opacity:0}}@keyframes b-anim-hide-column-drag-toolbar-closer{0%{top:50%;opacity:.4}to{top:100%;opacity:0}}.b-column-rename-editor{--b-editor-background: var(--b-grid-header-background);--b-text-field-font-weight: var(--b-grid-header-font-weight)}:root,:host{--b-column-reorder-invalid-color: var(--b-color-red);--b-column-reorder-stretched-background: var(--b-primary-95)}.b-grid-header.b-drag-proxy{line-height:normal;transition:background-color .3s;border-inline-end:none;font-weight:var(--b-grid-header-font-weight);background-color:var(--b-grid-header-background);outline:1px solid var(--b-grid-header-border-color)}.b-grid-header.b-drag-proxy.b-grid-header-parent{justify-content:stretch}.b-grid-header.b-drag-proxy.b-grid-header-parent>.b-grid-header-text{border-inline-end:none}.b-grid-header.b-drag-proxy .b-grid-header:last-child{border-inline-end:none}.b-grid-header.b-drop-placeholder{opacity:.3}.b-grid-header.b-drag-invalid{--b-grid-header-color: var(--b-column-reorder-invalid-color);outline:1px solid var(--b-column-reorder-invalid-color)}.b-column-reorder-stretched{outline:none;--b-grid-header-background: var(--b-column-reorder-stretched-background)}.b-column-reorder-stretched>*{display:none!important}:root,:host{--b-column-resize-handle-width: 1em;--b-column-resize-touch-handle-width: 1.5em;--b-column-resize-header-resizing-background: var(--b-grid-header-hover-background);--b-column-resize-touch-resizing-icon: "\f07e"}.b-column-resize .b-grid-header-parent{overflow:visible}.b-column-resize .b-grid-header-resizable:not(.b-last-leaf){overflow:visible}.b-column-resize .b-grid-header-resizable .b-grid-header-resize-handle{position:absolute;inset-block:0;background:transparent;z-index:3;cursor:col-resize;display:block;inset-inline-end:calc(-1 * var(--b-column-resize-handle-width) / 2);width:var(--b-column-resize-handle-width)}.b-column-resize.b-touch{--b-column-resize-handle-width: var(--b-column-resize-touch-handle-width)}.b-column-resize.b-touch .b-grid-header.b-resizing{overflow:visible;z-index:100}.b-column-resize.b-touch .b-grid-header.b-resizing:before{position:absolute;top:50%;inset-inline-end:0;translate:calc(50% * var(--b-rtl-negate)) -50%;border-radius:50%;padding:1em;z-index:1;background:var(--b-neutral-90);content:var(--b-column-resize-touch-resizing-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-grid-header.b-resizing{--b-grid-header-background: var(--b-column-resize-header-resizing-background)}html.b-export-root,.b-export-root body{margin:0}html.b-print-root,.b-print-root body{margin:0;height:auto;overflow:unset;display:block;-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}html.b-export-root{overflow:auto}.b-export-root body,.b-print-root body{position:relative}body:not(.b-single-page-unscaled) .b-page-wrap{contain:strict}.b-export .b-time-ranges-canvas{display:block;width:100%;height:100%;position:absolute;inset:0;contain:none}.b-export .b-grid-base{min-height:0!important}.b-export .b-export-content{display:flex;flex-direction:column;height:100%}.b-export .b-export-body{flex:1;contain:strict}.b-export .b-grid-header-container{margin-inline-end:0!important;border-inline-end:none!important}.b-export .b-grid-body-container.b-widget-scroller{overflow-y:hidden!important}.b-export .b-grid-footer-container{padding-inline-end:0!important}.b-export .b-virtual-scrollers{display:none}.b-export.b-visible-scrollbar .b-show-yscroll-padding>.b-yscroll-pad{display:none}.b-export.b-multi-page .b-export-content{width:100%;height:100%}.b-export.b-multi-page .b-export-body{overflow:hidden}.b-export.b-single-page-unscaled{display:flex}.b-export.b-single-page-unscaled .b-export-body{contain:content}.b-export-header,.b-export-header *{box-sizing:border-box}@media print{.b-page-wrap{overflow:hidden}.b-grid-body-container{contain:paint!important}}.b-export-dialog .b-bottom-toolbar .b-button{width:7.5em}.b-float-root .b-export-loading-toast{display:flex;gap:.5em;align-items:center}html.b-print-root,.b-print-root body{margin:0;height:auto;overflow:unset;display:block}.b-print-root .b-float-root,.b-print-root .b-scrollbar-measure-element,.b-print-root .b-grid-header-resize-handle{display:none!important}.b-print:not(.b-safari) .b-page-wrap{page-break-after:always}:root,:host{--b-fill-handle-handle-size: .8em}.b-fill-handle-handle{translate:-50% -50%;position:absolute;cursor:crosshair;z-index:200;background-clip:content-box;user-select:none;-webkit-user-select:none;background:var(--b-grid-cell-focused-outline-color);border:1px solid var(--b-grid-cell-background);width:var(--b-fill-handle-handle-size);height:var(--b-fill-handle-handle-size)}.b-fill-handle-handle-right-edge{border-right:0;translate:-100% -50%;width:.5em}.b-fill-selection-border{position:absolute;border-radius:.1em;pointer-events:none;z-index:2;user-select:none;-webkit-user-select:none;border:var(--b-grid-cell-focused-outline-width) solid var(--b-grid-cell-focused-outline-color)}.b-indicate-crop{opacity:.4}.b-rtl .b-fill-handle-handle{translate:50% -50%}.b-rtl .b-fill-handle-handle.b-fill-handle-handle-left-edge{border-right:0;translate:100% -50%;width:.5em}:root,:host{--b-grid-filter-icon: "\f0b0";--b-grid-header-filtered-font-weight: var(--b-grid-header-font-weight);--b-grid-header-filtered-color: var(--b-grid-header-color);--bi-grid-filter-icon-opacity: 0;--bi-grid-filter-icon-active-opacity: 1;--bi-grid-filter-icon-header-hover-opacity: .5;--bi-grid-filter-icon-hover-opacity: .8;--bi-grid-filter-icon-size: 0;--bi-grid-filter-icon-margin-inline-start: 0}.b-filter-icon{cursor:pointer;transition-property:opacity,font-size;font-size:var(--bi-grid-filter-icon-size);opacity:var(--bi-grid-filter-icon-opacity);margin-inline-start:var(--bi-grid-filter-icon-margin-inline-start);transition-duration:var(--b-grid-header-icon-transition-duration)}.b-filter-icon:before{content:var(--b-grid-filter-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-filter-icon:hover{--bi-grid-filter-icon-opacity: var(--bi-grid-filter-icon-hover-opacity)}.b-grid-header.b-filter{--b-grid-header-font-weight: var(--b-grid-header-filtered-font-weight);--b-grid-header-color: var(--b-grid-header-filtered-color);--bi-grid-filter-icon-opacity: var(--bi-grid-filter-icon-active-opacity)}.b-grid-header.b-filter,.b-grid-base:not(.b-column-resizing,.b-dragging-header) .b-grid-header.b-filterable:hover{--bi-grid-filter-icon-size: var(--b-grid-header-icon-font-size);--bi-grid-filter-icon-margin-inline-start: var(--b-grid-header-gap)}.b-grid-base:not(.b-column-resizing,.b-dragging-header) .b-grid-header.b-filterable:not(.b-filter):hover{--bi-grid-filter-icon-opacity: var(--bi-grid-filter-icon-header-hover-opacity)}.b-grid-base:not(.b-filter,.b-multifilter) .b-filter-icon{pointer-events:none;--bi-grid-filter-icon-opacity: .2}.b-filter-popup-legacy-mode .b-field{width:16em}.b-filter-popup:not(.b-filter-popup-legacy-mode) .b-panel-content{padding-inline:0}.b-filter-popup .b-field-filter-picker-group-row{padding-inline:var(--b-panel-padding)}.b-filter-popup .b-field-filter-picker-group{width:36em}.b-filter-popup .b-field-filter-picker-operator{grid-column:1}.b-filter-popup .b-field-filter-picker-values{grid-column:2}.b-filter-popup .b-field-filter-picker-values-multiple{grid-column:1}.b-filter-popup .b-field-filter-picker-property{display:none}.b-filter-bar-field{margin:0 0 var(--b-grid-header-padding) 0;width:100%}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled{flex-direction:row}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled .b-grid-header-text{order:1;min-height:3.5em}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled .b-sort-icon{margin-inline-start:0}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled .b-grid-header-text-content{display:none}:is(.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-end,.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-right) .b-field{order:100000}:is(.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-end,.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-right) input{text-align:end}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-center input{text-align:center}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-end .b-field{order:100000}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled.b-grid-header-align-end input{text-align:end}.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled:hover .b-filter-bar-field input,.b-filter-bar-compact .b-grid-header.b-filter-bar-enabled:hover .b-filter-bar-field input::placeholder{color:var(--b-grid-header-hover-color)}.b-filter-bar-compact .b-filter-bar-field{margin:0;height:100%;flex:1;--b-text-field-input-padding: 0;--b-text-field-border-width: 0;--b-text-field-border-radius: 0;--b-combo-chip-view-padding-top: 0;--b-combo-chip-view-padding: 0;--b-text-field-background: transparent;--b-field-trigger-color: var(--b-grid-header-icon-color)}.b-filter-bar-compact .b-filter-bar-field input::placeholder{color:var(--b-grid-header-color);font-size:var(--b-grid-header-font-size);font-weight:var(--b-grid-header-font-weight);text-transform:var(--b-grid-header-text-transform)}.b-filter-bar-compact .b-filter-bar-field>.b-field-inner{gap:.5em}.b-filter-bar-compact .b-filter-bar-field>.b-field-inner:before{transition:none}.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=expand],.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=clear],.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=spin],.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=back],.b-filter-bar-compact .b-filter-bar-field:not(:focus-within) .b-field-trigger[data-ref=forward]{display:none}.b-filter-bar-compact .b-filter-bar-field:focus-within:not(.b-empty) .b-icon-remove,.b-filter-bar-compact .b-filter-bar-field:focus-within .b-field-trigger:not(.b-step-trigger,.b-icon-remove,.b-spintrigger){display:flex}.b-filter-bar-compact .b-filter-bar-field:not(.b-empty) input::placeholder{color:transparent}.b-filter-bar-compact.b-dragging .b-filter-bar-field{display:none}:root,:host{--b-group-header-font-weight: 500;--b-group-header-border-width: var(--b-grid-row-border-width);--b-group-header-zindex: 5;--b-group-header-collapsing-zindex: 7;--b-group-collapse-icon: "\f107";--b-group-header-icon: "\f5fd";--b-group-header-background: var(--b-neutral-100);--b-group-header-color: var(--b-neutral-20);--b-group-header-icon-color: var(--b-neutral-20);--b-group-header-border-color: var(--b-grid-row-border-color);--b-group-header-stripe-background: var(--b-neutral-97);--b-group-count-badge-background: var(--b-neutral-95);--b-group-count-badge-color: var(--b-text-2)}.b-no-row-lines{--b-group-header-border-width: 0}.b-grid-header.b-group .b-sort-icon:after{font-style:normal;content:var(--b-group-header-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-group-row{--b-grid-cell-background: var(--b-group-header-background);--b-grid-row-border-width: var(--b-group-header-border-width);--b-grid-row-border-color: var(--b-group-header-border-color);--b-grid-row-zindex: var(--b-group-header-zindex)}.b-group-row.b-collapsing,.b-group-row.b-expanding{--b-grid-row-zindex: var(--b-group-header-collapsing-zindex)}.b-group-row .b-grid-cell{--b-grid-cell-border-color: transparent}.b-hide-row-hover .b-group-row{--b-grid-cell-hover-background: var(--b-group-header-background);--b-grid-cell-selected-background: var(--b-group-header-background);--b-grid-cell-hover-selected-background: var(--b-group-header-background)}.b-stripe .b-group-row{--b-grid-row-border-width: var(--b-stripe-border-width);--b-group-header-background: var(--b-group-header-stripe-background)}.b-hide-row-hover :is(.b-stripe .b-group-row){--b-grid-cell-hover-background: var(--b-group-header-stripe-background);--b-grid-cell-selected-background: var(--b-group-header-stripe-background);--b-grid-cell-hover-selected-background: var(--b-group-header-stripe-background)}.b-grid-cell.b-group-title{contain:size layout style;z-index:1;justify-content:flex-start;text-align:start;--b-grid-cell-color: var(--b-group-header-color);--b-grid-cell-font-weight: var(--b-group-header-font-weight);--bi-grid-cell-overflow: visible;gap:var(--b-widget-gap)}.b-group-state-icon{display:grid;place-items:center;font-style:normal;cursor:pointer;width:1em;transition:rotate .2s;color:var(--b-group-header-icon-color)}.b-group-state-icon:before{content:var(--b-group-collapse-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight)}.b-grid-group-collapsed .b-group-state-icon{rotate:-90deg}.b-group-count{display:grid;place-items:center;min-width:2em;width:2em;height:2em;border-radius:50%;font-size:.7em;background:var(--b-group-count-badge-background);color:var(--b-group-count-badge-color)}:root,:host{--b-group-summary-background: var(--b-neutral-99)}.b-grid-row.b-group-footer{--b-grid-cell-border-color: transparent;--b-grid-cell-background: var(--b-group-summary-background)}.b-grid-row.b-group-footer td{padding:.25em 0}.b-grid-row.b-group-footer .b-grid-summary-label{padding-inline-end:1em}.b-grid-row.b-group-footer .b-grid-summary-value{width:100%}.b-grid-group-collapsed.b-header-summary .b-group-title{--bi-grid-cell-overflow: clip}:root,:host{--b-locked-rows-separator-width: 1px;--b-locked-rows-separator-color: var(--b-grid-splitter-color, var(--b-grid-splitter-narrow-color))}.b-locked-rows{z-index:1}.b-locked-rows [aria-rowcount="1"] .b-virtual-scrollers{flex-basis:0}.b-locked-rows:has(.b-widget-scroller.b-grid-empty){overflow:visible}.b-locked-rows:has(.b-widget-scroller.b-grid-empty) .b-grid-body-wrap,.b-locked-rows:has(.b-widget-scroller.b-grid-empty) .b-grid-panel-body{overflow:visible}.b-locked-rows:has(.b-grid-row){box-shadow:var(--b-grid-header-box-shadow);border-bottom:var(--b-locked-rows-separator-width) solid var(--b-locked-rows-separator-color)}.b-locked-rows .b-widget-scroller.b-grid-empty{min-height:0}.b-locked-rows .b-grid-row.b-last{--b-grid-row-border-width: 0}.b-merge-cells .b-single-child .b-grid-sub-grid:not(.b-grid-sub-grid-collapsed,.b-time-axis-sub-grid,.b-horizontal-overflow){overflow:clip!important}.b-merge-cells .b-grid-row:not(.b-selected,.b-hover) .b-merged-cell{border-bottom:none}.b-merge-cells .b-grid-row:is(.b-selected,.b-hover):has(.b-merged-cell){overflow:visible}.b-merge-cells .b-grid-row:is(.b-selected,.b-hover) .b-merged-cell{top:-1px;height:calc(100% + 1px);border-top:var(--b-grid-row-border-width) solid var(--b-grid-row-border-color)}.b-grid-merged-cells{position:absolute;contain:strict;z-index:2;display:flex;align-items:flex-start;border-bottom:var(--b-grid-cell-border-width) solid var(--b-grid-cell-border-color);--b-grid-cell-background: transparent;--b-grid-row-border-color: transparent;--bi-grid-cell-overflow: visible}.b-merge-cells-passthrough .b-grid-merged-cells{pointer-events:none}.b-grid-merged-cells .b-grid-cell{position:sticky;top:0;flex:1;contain:none}.b-grid-merged-cells.b-selected{background:var(--b-grid-cell-selected-background)}:root,:host{--b-grid-summary-label-font-size: 1em;--b-grid-summary-value-font-size: 1em}.b-summary-wrap{display:grid;column-gap:1em;grid-template-columns:min-content auto;align-items:center;width:100%}.b-summary-wrap .b-grid-summary-label{font-size:var(--b-grid-summary-label-font-size)}.b-summary-wrap .b-grid-summary-value{overflow:clip;text-overflow:ellipsis;font-size:var(--b-grid-summary-value-font-size)}.b-summary-wrap .b-grid-summary-value.b-no-label{grid-column:span 2}:root,:host{--b-quick-find-header-inset: 0;--b-quick-find-hit-padding: .2em 0;--b-quick-find-header-badge-color: var(--b-grid-header-color)}.b-quick-hit-cell{background:var(--b-quick-find-background, var(--b-primary-95))}.b-quick-hit-text{border-radius:2px;--b-primary: var(--b-quick-find-primary);font-weight:var(--b-quick-find-font-weight);background:var(--b-quick-find-background, var(--b-primary-95));line-height:.8}.b-quick-hit-text{padding:var(--b-quick-find-hit-padding)}.b-quick-hit-header{position:absolute;z-index:1;display:grid;place-items:center;--b-primary: var(--b-quick-find-primary);inset:var(--b-quick-find-header-inset);background:var(--b-quick-find-background, var(--b-primary-95))}.b-quick-hit-cell-badge,.b-quick-hit-header .b-quick-hit-badge{position:absolute;line-height:1;font-size:var(--b-quick-find-badge-font-size);inset-inline-end:var(--b-quick-find-badge-offset);top:var(--b-quick-find-badge-offset)}.b-quick-hit-header .b-quick-hit-badge{color:var(--b-quick-find-header-badge-color)}.b-quick-hit-cell-badge{color:var(--b-quick-find-badge-color)}:root,:host{--b-grid-splitter-zindex: 10;--b-region-resize-splitter-width: var(--b-splitter-size);--b-region-resize-splitter-width-hover: var(--b-splitter-hover-size);--b-region-resize-splitter-touch-width-hover: var(--b-splitter-touch-hover-size);--b-region-resize-splitter-collapsed-width: var(--b-region-resize-splitter-width);--b-region-resize-splitter-color: var(--b-splitter-color);--b-region-resize-button-color: var(--b-splitter-button-icon-color);--b-region-resize-splitter-hover-color: var(--b-splitter-hover-color);--b-region-resize-button-hover-color: var(--b-splitter-button-hover-color);--bi-grid-splitter-button-size: 1em;--bi-grid-splitter-button-display: flex}.b-grid-base.b-split{--b-grid-splitter-color: var(--b-region-resize-splitter-color)}.b-grid-base.b-split .b-grid-splitter:not(.b-disabled){--b-grid-splitter-width: var(--b-region-resize-splitter-width)}@media (pointer : coarse){.b-grid-base.b-split{--b-region-resize-splitter-width-hover: var(--b-region-resize-splitter-touch-width-hover)}}.b-grid-splitter{position:relative;pointer-events:var(--bi-grid-splitter-pointer-events, none);z-index:var(--b-grid-splitter-zindex)}@media (any-pointer : coarse){.b-grid-splitter{--bi-grid-splitter-button-size: 1.3em}}.b-split .b-grid-splitter{--bi-grid-splitter-pointer-events: all}.b-grid-splitter.b-disabled{--bi-grid-splitter-pointer-events: none}.b-grid-base.b-split.b-rtl .b-grid-splitter-inner .b-grid-splitter-buttons .b-grid-splitter-button-collapse,.b-grid-base.b-split.b-rtl .b-grid-splitter-inner .b-grid-splitter-buttons .b-grid-splitter-button-expand{scale:-1}.b-grid-base.b-split.b-rtl .b-grid-splitter-inner .b-grid-splitter-buttons .b-grid-splitter-button-expand{justify-content:flex-end}.b-grid-base.b-split.b-rtl .b-grid-splitter-inner .b-grid-splitter-buttons .b-grid-splitter-button-collapse{justify-content:flex-start}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)){overflow:visible}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-inner{position:absolute;inset-block:0;left:50%;translate:-50%;background:inherit;flex-direction:column;align-items:center;opacity:0;transition:opacity .2s;display:var(--bi-grid-splitter-button-display);width:var(--b-region-resize-splitter-width-hover)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed{cursor:initial;--b-grid-splitter-width: var(--b-region-resize-splitter-collapsed-width);--b-grid-splitter-color: var(--b-region-resize-splitter-hover-color)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed .b-grid-splitter-inner{opacity:1}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed:not(.b-grid-splitter-allow-collapse) .b-grid-splitter-button-collapse,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed.b-grid-splitter-allow-collapse .b-grid-splitter-button-expand{visibility:hidden}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-grid-splitter-collapsed .b-grid-splitter-buttons{--bi-grid-splitter-buttons-opacity: 1;--bi-grid-splitter-buttons-scale: 1}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-left-only:not(.b-grid-splitter-collapsed) .b-grid-splitter-button-expand,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-right-only:not(.b-grid-splitter-collapsed) .b-grid-splitter-button-collapse{visibility:hidden}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-buttons{display:flex;position:absolute;translate:0 -50%;height:2.4em;width:2.4em;transition:scale .1s,opacity .1s;opacity:var(--bi-grid-splitter-buttons-opacity, 0);scale:var(--bi-grid-splitter-buttons-scale, 0);font-size:var(--bi-grid-splitter-button-size)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-collapse,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-expand{flex:1;cursor:pointer;display:flex;align-items:center;background:var(--b-grid-splitter-color)}:is(.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-collapse,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-expand):hover{--b-region-resize-button-color: var(--b-region-resize-button-hover-color)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-collapse{border-top-left-radius:100% 50%;border-bottom-left-radius:100% 50%;justify-content:flex-end;padding-right:.1em}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-expand{border-top-right-radius:100% 50%;border-bottom-right-radius:100% 50%;padding-left:.1em}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)) .b-grid-splitter-button-icon{cursor:pointer;height:1.5em;fill:var(--b-region-resize-button-color)}.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-partner-splitter-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-touching,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-moving{--b-grid-splitter-color: var(--b-region-resize-splitter-hover-color);--bi-region-resize-splitter-inner-width: var(--b-region-resize-splitter-width-hover)}:is(.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-partner-splitter-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-touching,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-moving) .b-grid-splitter-inner{opacity:1}:is(.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-partner-splitter-hover,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-touching,.b-grid-base.b-split .b-grid-splitter:where(:not(.b-disabled)).b-moving):not(.b-partner-splitter-hover){--bi-grid-splitter-buttons-scale: 1;--bi-grid-splitter-buttons-opacity: 1}.b-grid-base.b-split:not(.b-grid-splitter-no-drag) .b-grid-splitter:not(.b-disabled,.b-grid-splitter-collapsed) .b-grid-splitter-inner{cursor:col-resize}.b-grid-header-scroller.b-collapsed,.b-grid-footer-scroller.b-collapsed,.b-virtual-scroller.b-collapsed{width:0;min-width:0!important}.b-grid-splitter-button-collapse .b-splitter-button-touch-area{left:-.9em}.b-grid-splitter-button-expand .b-splitter-button-touch-area{right:-.9em}.b-drag-helper-active .b-grid-base.b-split .b-grid-splitter{pointer-events:none!important}.b-hide-splitter-buttons{--bi-grid-splitter-button-display: none}.b-row-editor .b-bottom-toolbar .b-toolbar-content{justify-content:flex-end}.b-row-editor.b-read-only [data-ref=save]{display:none}.b-row-editor :is(.b-panel-overlay-right,.b-panel-overlay-left) .b-toolbar-content>*{flex:1 1 33%;max-width:10em}:root,:host{--b-row-expander-border-bottom-width: var(--b-grid-row-border-width);--b-row-expander-font-weight: var(--b-grid-cell-font-weight);--b-row-expander-border-bottom-color: var(--b-grid-row-border-color);--b-row-expander-color: var(--b-grid-cell-color)}.b-row-expander-body{display:flex;inset-inline:0;background:var(--b-row-expander-background);color:var(--b-row-expander-color);font-weight:var(--b-row-expander-font-weight);padding:var(--b-row-expander-padding, 0);outline:none}.b-row-expander-body,.b-row-expander-body.b-no-resize-observer.b-resize-monitored{position:absolute}.b-row-expander-body:focus-visible{outline:var(--b-widget-focus-outline-width) solid var(--b-widget-focus-outline-color);outline-offset:calc(var(--b-widget-focus-outline-width) * -1)}.b-grid-vertical-scroller>.b-row-expander-body{z-index:100;transition:height .3s,top .3s;overflow:hidden}.b-row-expander-loading{justify-content:center;align-items:center;font-size:1.2em;display:flex;width:100%}.b-row-expander-loading .b-icon-spinner{margin-inline-end:.5em}.b-grid-base .b-grid-row [data-column=expanderActionColumn] .b-icon{transition:rotate .15s ease-in-out;font-size:1em;rotate:180deg}.b-row-expander-disabled [data-column=expanderActionColumn]{opacity:.2;pointer-events:none}.b-row-expander.b-grid-base.b-animating.b-row-expander-animating.b-auto-height .b-grid-body-container,.b-row-expander.b-grid-base.b-animating.b-row-expander-animating.b-auto-height .b-grid-vertical-scroller{transition:height .3s;overflow-y:hidden!important}.b-row-expander.b-grid-base.b-animating.b-row-expander-animating.b-auto-height .b-yscroll-pad{display:none}.b-row-expander.b-grid-base.b-animating.b-row-expander-animating .b-grid-row{transition:height .3s,top .3s}.b-grid-base .b-row-expander-row-expanded:not(.b-row-is-collapsing) [data-column=expanderActionColumn] .b-icon-collapse-left{rotate:270deg}.b-grid-base .b-row-expander-row-expanded:not(.b-row-is-collapsing) [data-column=expanderActionColumn] .b-icon-collapse-right{rotate:90deg}.b-row-expander-row-expanded{border-bottom:var(--b-row-expander-border-bottom-width) solid var(--b-row-expander-border-bottom-color)}:root,:host{--b-row-reorder-indicator-size: 2px;--b-row-reorder-grip-icon: "\f58e";--b-row-reorder-indicator-color: var(--b-secondary);--b-row-reorder-indicator-invalid-color: var(--b-color-red);--b-row-reorder-box-shadow: var(--b-elevation-1);--b-row-reorder-invalid-background: color-mix(in oklab, var(--b-row-reorder-indicator-invalid-color), transparent 80%);--b-row-reorder-proxy-opacity: .5}.b-row-drop-indicator{display:none;pointer-events:none}.b-row-reordering .b-row-drop-indicator{position:absolute;display:block;left:0;width:100%;z-index:2000;top:calc(var(--b-row-reorder-indicator-size) / -2);height:var(--b-row-reorder-indicator-size);background-color:var(--b-row-reorder-indicator-color)}.b-row-reordering .b-row-drop-indicator.b-drag-invalid{--b-row-reorder-indicator-color: var(--b-row-reorder-indicator-invalid-color)}.b-row-reordering .b-grid-body-container{z-index:4}.b-row-reordering .b-drag-original{opacity:.3}.b-row-reordering .b-grid-group-collapsed.b-row-reordering-target{--b-grid-cell-background: var(--b-grid-cell-hover-background)}.b-row-reordering .b-row-reordering-target{z-index:9999;box-shadow:0 1px 0 0 var(--b-row-reorder-indicator-color) inset,0 -1px 0 0 var(--b-row-reorder-indicator-color) inset}.b-row-reorder-grip{display:grid;grid-template-columns:auto 1fr}.b-row-reorder-grip.b-grid-cell-align-end{justify-items:end}.b-row-reorder-grip.b-grid-cell-align-end:before{margin-inline-end:auto}.b-row-reorder-grip.b-grid-cell-align-right{justify-items:right}.b-row-reorder-grip.b-grid-cell-align-center{justify-items:center}.b-row-reorder-grip:before{display:inline-flex;align-self:stretch;align-items:center;cursor:move;font-size:.8em;content:var(--b-row-reorder-grip-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);padding-inline:var(--b-grid-cell-padding-inline);margin-inline-start:calc(var(--b-grid-cell-padding-inline) * -1)}:is(.b-show-grip-on-hover.b-row-reordering,.b-show-grip-on-hover .b-grid-row:not(:hover,.b-hover)) .b-row-reorder-grip:before{visibility:hidden}.b-row-reorder-proxy{display:flex;flex-direction:column;width:auto!important;height:auto!important;z-index:10000;overflow:visible}.b-row-reorder-proxy .b-grid-row{position:relative}.b-row-reorder-proxy.b-drag-copy .b-row-proxy-copy{display:flex}.b-row-reorder-proxy .b-row-proxy-copy{display:none;height:1em;width:1em;align-items:center;justify-content:center;position:absolute;inset-inline-start:-.5em;top:-.5em;border-radius:50%;padding:.75em;z-index:20000;background:var(--b-panel-background);box-shadow:var(--b-row-reorder-box-shadow)}.b-row-reorder-proxy .b-grid-row{width:100%;position:relative}.b-row-reorder-proxy.b-dragging{transition:margin-top .2s,opacity .2s;background:transparent;opacity:var(--b-row-reorder-proxy-opacity)}.b-row-reorder-proxy.b-dragging.b-drag-invalid{--b-grid-cell-background: var(--b-row-reorder-invalid-background)}.b-row-reorder-proxy.b-dragging .b-grid-row{transition:transform .2s,background-color .2s}.b-row-drag-count-indicator:before{inset-inline-end:-.7em}.b-grid-tree-grouped .b-tree-parent-row .b-row-reorder-grip:before{content:none}.b-row-resize .b-grid-row.b-resize-handle{cursor:row-resize!important}.b-row-resize .b-grid-row.b-resizing{z-index:2}.b-row-resize.b-row-resizing .b-grid-row{pointer-events:none}.b-row-resize.b-row-resizing *{cursor:row-resize!important}.b-search-hit-cell{background:var(--b-quick-find-background, var(--b-primary-95))}.b-search-hit-text{padding:.3em 0;--b-primary: var(--b-quick-find-primary);font-weight:var(--b-quick-find-font-weight);background:var(--b-quick-find-background, var(--b-primary-95))}.b-search-hit-field{position:absolute;inset:0;padding:.5em 0;background:var(--b-quick-find-background, var(--b-primary-95))}.b-search-hit-cell-badge{position:absolute;line-height:1;color:var(--b-quick-find-badge-color);font-size:var(--b-quick-find-badge-font-size);inset-inline-end:var(--b-quick-find-badge-offset);top:var(--b-quick-find-badge-offset)}:root,:host{--b-sort-header-icon: "\f062";--b-sort-header-index-font-size: .6em;--b-sort-header-index-color: inherit;--bi-grid-sort-icon-rotate: 0;--bi-grid-sort-icon-opacity: 0;--bi-grid-sort-icon-size: 0;--bi-grid-sort-icon-margin-inline-start: 0}.b-sort-hover-icon .b-grid-header.b-sortable{cursor:pointer}.b-sort-hover-icon .b-grid-header.b-sortable:not(.b-sort,.b-resizing):hover{--bi-grid-sort-icon-opacity: .5;--bi-grid-sort-icon-size: var(--b-grid-header-icon-font-size);--bi-grid-sort-icon-margin-inline-start: var(--b-grid-header-gap)}.b-grid-base.b-sort.b-dragging-header .b-grid-header:not(.b-sort){--bi-grid-sort-icon-opacity: 0;--bi-grid-sort-icon-size: 0;--bi-grid-sort-icon-margin-inline-start: 0}.b-sort-icon{transition-property:opacity,color,font-size,margin;overflow:hidden;white-space:nowrap;color:var(--b-grid-header-icon-color);opacity:var(--bi-grid-sort-icon-opacity);font-size:var(--bi-grid-sort-icon-size);margin-inline-start:var(--bi-grid-sort-icon-margin-inline-start);transition-duration:var(--b-grid-header-icon-transition-duration)}.b-sort-icon:before{display:inline-block;transition:rotate .2s;content:var(--b-sort-header-icon);font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);rotate:var(--bi-grid-sort-icon-rotate)}:is(.b-grid-header.b-asc,.b-grid-header.b-desc) .b-sort-icon{--bi-grid-sort-icon-opacity: 1;--bi-grid-sort-icon-size: var(--b-grid-header-icon-font-size);--bi-grid-sort-icon-margin-inline-start: var(--b-grid-header-gap)}.b-grid-header.b-desc .b-sort-icon{--bi-grid-sort-icon-rotate: 180deg}.b-sort .b-grid-header-text[data-sort-index]:before{content:attr(data-sort-index);position:relative;top:1em;z-index:30;order:1;color:var(--b-sort-header-index-color);font-size:var(--b-sort-header-index-font-size)}.b-split-container{display:flex;height:100%;position:relative;overflow:hidden}.b-split-container.b-split-horizontal,.b-split-container.b-split-both{flex-direction:column}.b-split-container.b-split-vertical{flex-direction:row}.b-split-container .b-split-top,.b-split-container .b-split-bottom{display:flex;flex:1}.b-split-container>.b-grid-base,.b-split-container>div>.b-grid-base{flex:1;flex-basis:0;height:unset!important}.b-sticky-cells .b-grid-sticky-row{position:absolute;top:0;left:0;min-width:auto;border:0 none;padding:0;contain:initial}.b-sticky-cells .b-grid-sticky-row .b-grid-cell{width:min-content;contain:initial;padding:0;border:0 none}.b-sticky-cells .b-sticky-cells-current-top-row .b-sticky-content-el{visibility:hidden}.b-sticky-cells .b-sticky-cells-current-top-row.b-not-enough-height .b-sticky-content-el{visibility:visible;align-self:flex-end}:root,:host{--b-stripe-odd-color: var(--b-neutral-98);--b-stripe-even-color: var(--b-neutral-100);--b-stripe-border-width: 0}.b-stripe{--b-grid-row-border-width: var(--b-stripe-border-width)}.b-stripe .b-grid-row.b-odd{--b-grid-cell-background: var(--b-stripe-odd-color)}.b-stripe .b-grid-row.b-even{--b-grid-cell-background: var(--b-stripe-even-color)}.b-stripe .b-hide-row-hover .b-grid-row.b-odd{--b-grid-cell-hover-background: var(--b-stripe-odd-color);--b-grid-cell-selected-background: var(--b-stripe-odd-color);--b-grid-cell-hover-selected-background: var(--b-stripe-odd-color)}.b-stripe .b-hide-row-hover .b-grid-row.b-even{--b-grid-cell-hover-background: var(--b-stripe-even-color);--b-grid-cell-selected-background: var(--b-stripe-even-color);--b-grid-cell-hover-selected-background: var(--b-stripe-even-color)}.b-summary-disabled .b-grid-footer-container{display:none}.b-grid-footer.b-focused:focus-visible{outline:var(--b-grid-cell-focused-outline-width) solid var(--b-grid-cell-focused-outline-color);outline-offset:var(--b-grid-cell-focused-outline-offset, calc(var(--b-grid-cell-focused-outline-width) * -1))}.b-generated-parent .b-grid-cell .b-grid-tree-group-summary{display:flex;justify-content:inherit}:root,:host{--b-grid-footer-outline-width: var(--b-grid-header-border-width);--b-grid-footer-outline-color: var(--b-grid-header-border-color);--b-grid-footer-box-shadow: none;--b-grid-footer-border-width: var(--b-grid-header-border-width);--b-grid-footer-padding: var(--b-grid-header-padding);--b-grid-footer-background: var(--b-neutral-100);--b-grid-footer-border-color: var(--b-grid-header-border-color);--b-grid-footer-color: var(--b-grid-header-color)}.b-grid-footer-container{outline:var(--b-grid-footer-outline-width) solid var(--b-grid-footer-outline-color);box-shadow:var(--b-grid-footer-box-shadow)}.b-grid-footer-container.b-hidden{display:none}.b-grid-footer-scroller{display:flex;position:relative;overflow:clip;flex-shrink:0;min-width:0}.b-grid-footers{display:inline-flex;align-items:stretch;height:100%;white-space:nowrap;line-height:initial}.b-grid-footer{display:flex;flex-shrink:0;align-items:stretch;transition:background-color .2s;color:var(--b-grid-footer-color);background:var(--b-grid-footer-background);border-inline-end:var(--b-grid-footer-border-width) solid var(--b-grid-footer-border-color);font-weight:var(--b-grid-footer-font-weight);padding:var(--b-grid-footer-padding);text-align:var(--b-grid-footer-text-align)}.b-grid-footer:last-child{--b-grid-footer-border-width: 0}.b-grid-footer-align-start,.b-grid-footer-align-left{--b-grid-footer-text-align: start}.b-grid-footer-align-center{--b-grid-footer-text-align: center}.b-grid-footer-align-end,.b-grid-footer-align-right{--b-grid-footer-text-align: end}:root,:host{--b-grid-header-font-size: inherit;--b-grid-header-font-weight: 500;--b-grid-header-padding: var(--b-grid-cell-padding-inline);--b-grid-header-text-transform: none;--b-grid-header-text-align: start;--b-grid-header-gap: .5em;--b-grid-header-icon-font-size: 1em;--b-grid-header-border-width: var(--b-grid-cell-border-width);--b-grid-header-container-border-width: 1px;--b-grid-header-zindex: 1;--b-grid-header-icon-transition-duration: var(--b-default-transition-duration);--b-grid-header-background: var(--b-neutral-100);--b-grid-header-box-shadow: var(--b-elevation-0);--b-grid-header-color: var(--b-widget-color);--b-grid-header-icon-color: var(--b-grid-header-color);--b-grid-header-border-color: var(--b-grid-cell-border-color);--b-grid-header-hover-color: var(--b-widget-color)}.b-grid-headers,.b-grid-footers{contain:paint style layout;flex:1 1 auto;z-index:var(--b-grid-header-zindex)}div.b-grid-header-container,.b-grid-footer-container{display:flex;z-index:var(--b-grid-header-zindex)}div.b-grid-header-container.b-hidden{clip-path:inset(0 0 100% 0);contain:strict;border-bottom:none}div.b-grid-header-container .b-yscroll-pad{border-bottom:var(--b-grid-header-container-border-width) solid var(--b-grid-header-border-color)}.b-grid-header-scroller{display:flex;position:relative;overflow:clip;min-width:0;box-shadow:var(--b-grid-header-box-shadow)}.b-grid-headers{display:flex;flex-flow:row nowrap;align-items:stretch;overflow:clip;line-height:initial;position:relative}.b-grid-header{position:relative;display:flex;user-select:none;-webkit-user-select:none;flex-direction:column;flex-shrink:0;align-items:stretch;justify-content:center;overflow:clip;transition:background-color var(--b-default-transition-duration),border var(--b-default-transition-duration);contain:style;--b-grid-header-applied-background: var(--b-grid-header-background);background:var(--b-grid-header-applied-background);border-inline-end:var(--b-grid-header-border-width) solid var(--b-grid-header-border-color);color:var(--b-grid-header-color);font-size:var(--b-grid-header-font-size);font-weight:var(--b-grid-header-font-weight);text-transform:var(--b-grid-header-text-transform)}.b-grid-header.b-depth-0:hover{color:var(--b-grid-header-hover-color);--b-grid-header-applied-background: var(--b-grid-header-hover-background, var(--b-primary-98));--b-grid-header-icon-color: var(--b-grid-header-hover-color)}.b-grid-header.b-focused:focus-visible{outline:var(--b-grid-cell-focused-outline-width) solid var(--b-grid-cell-focused-outline-color);outline-offset:calc(var(--b-grid-cell-focused-outline-width) * -1)}.b-grid-header.b-depth-0{width:0;padding-inline:var(--b-grid-header-padding);border-block-end:var(--b-grid-header-container-border-width) solid var(--b-grid-header-border-color)}.b-fill-last-column .b-grid-header.b-last-leaf:not(.b-drop-placeholder){border-inline-end:none}.b-grid-header:has(.b-widget) .b-grid-header-text-content:empty{display:none}.b-grid-header-parent{border-inline-end:none;flex-basis:auto;padding-inline:0}.b-grid-header-parent>.b-grid-header-text{flex:1 1 auto;padding:var(--b-grid-header-padding)}.b-grid-header-parent:where(:not(.b-last-parent))>.b-grid-header-text{transition:background-color var(--b-default-transition-duration),border var(--b-default-transition-duration);border-inline-end:var(--b-grid-header-border-width) solid var(--b-grid-header-border-color)}.b-grid-header-children{display:flex;flex-flow:row nowrap;flex:1 1 auto;transition:border var(--b-default-transition-duration);border-top:var(--b-grid-header-border-width) solid var(--b-grid-header-border-color)}.b-grid-header-children>*{width:inherit}.b-grid-header-text{display:flex;align-items:center;padding-block:var(--b-grid-header-padding)}.b-grid-header-text:has(.b-widget){gap:var(--b-grid-header-gap)}.b-grid-header-text-content{flex:1;overflow:clip;text-overflow:ellipsis;white-space:nowrap;width:0;text-align:var(--b-grid-header-text-align)}.b-grid-header-text-content.b-has-text>*{margin-inline-end:var(--b-grid-header-gap)}.b-grid-header-align-right,.b-grid-header-align-end{--b-grid-header-text-align: end}.b-grid-header-align-center{--b-grid-header-text-align: center}:is(.b-writing-mode-sideways-lr,.b-writing-mode-sideways-rl,.b-writing-mode-vertical-lr,.b-writing-mode-vertical-rl) .b-grid-header-text-content{display:flex;text-align:start;align-items:var(--b-grid-header-text-align)}.b-writing-mode-sideways-lr .b-grid-header-text-content{writing-mode:sideways-lr}.b-writing-mode-sideways-rl .b-grid-header-text-content{writing-mode:sideways-rl}.b-writing-mode-horizontal-tb .b-grid-header-text-content{writing-mode:horizontal-tb}.b-writing-mode-vertical-lr .b-grid-header-text-content{writing-mode:vertical-lr}.b-writing-mode-vertical-rl .b-grid-header-text-content{writing-mode:vertical-rl}.b-grid-header-collapse-button{background:transparent;--b-button-height: 1em;--b-button-type-text-color: var(--b-neutral-60)}.b-grid-header-collapse-button:hover{--b-button-color: var(--b-grid-header-color)}.b-check-header-with-checkbox{align-items:center}.b-check-header-with-checkbox .b-grid-header-text{display:none}:root{--bi-grid-cell-dirty-indicator-clip-path: polygon(0% 50%, 0% 0%, 50% 0%);--bi-grid-cell-dirty-indicator-clip-path-rtl: polygon(100% 50%, 50% 0%, 100% 0%);--b-grid-cell-auto-height-padding-block: var(--b-grid-cell-padding-inline)}.b-no-column-lines,.b-no-column-lines .b-grid-sub-grid{--b-grid-cell-border-width: 0;--b-grid-header-border-width: 0}.b-no-row-lines{--b-grid-row-border-width: 0}.b-grid-sub-grid{position:relative}.b-grid-sub-grid.b-hidden{display:none}.b-grid-sub-grid-collapsed{width:0;min-width:0!important;overflow:hidden!important}.b-animating .b-grid-header-scroller,.b-animating .b-grid-sub-grid{transition-property:width,flex,min-width;transition-duration:.3s}.b-grid-row{position:absolute;display:flex;flex-direction:row;align-items:stretch;inset-inline-start:0;overflow:clip;contain:layout;height:var(--b-grid-row-height);z-index:var(--b-grid-row-zindex)}.b-grid-sub-grid .b-grid-row{min-width:100%}.b-grid-row.b-hover .b-grid-cell{--b-grid-cell-applied-background: var(--b-grid-cell-hover-background, var(--b-primary-98));--b-grid-cell-color: var(--b-grid-cell-selected-color);--b-grid-link-color: var(--b-grid-row-hover-link-color, var(--b-primary-30))}.b-selected :is(.b-grid-row .b-grid-cell),.b-grid-row .b-grid-cell.b-selected{--b-grid-cell-applied-background: var(--b-grid-cell-selected-background, var(--b-primary-96));--b-grid-cell-color: var(--b-grid-cell-selected-color);--b-grid-link-color: var(--b-grid-row-hover-link-color, var(--b-primary-30));transition:background-color var(--b-default-transition-duration),color var(--bi-grid-cell-selected-color-transition-duration, var(--b-default-transition-duration))}.b-grid-row.b-hover.b-selected .b-grid-cell{--b-grid-cell-applied-background: var(--b-grid-cell-hover-selected-background, var(--b-primary-94))}.b-grid-row.fa{display:flex}.b-grid-row.fa:before{content:none}.b-grid-row.b-row-placeholder .b-grid-cell{color:transparent;clip-path:inset(1em 1em 1em 1em)}.b-grid-row.b-row-placeholder .b-grid-cell>*:not(.b-editor){display:none}.b-grid-row.b-row-placeholder .b-grid-cell:after{content:"";position:absolute;inset:1em;border-radius:5px;background:var(--b-grid-row-placeholder-color)}.b-hide-row-hover{--b-grid-cell-hover-background: var(--b-grid-cell-background);--b-grid-cell-selected-background: var(--b-grid-cell-background);--b-grid-cell-hover-selected-background: var(--b-grid-cell-background)}.b-grid-body-container.b-vertical-overflow .b-grid-row.b-last .b-grid-cell{--b-grid-row-border-color: transparent}.b-grid-cell{position:absolute;display:flex;flex-shrink:0;contain:strict;align-items:center;white-space:nowrap;height:100%;background:var(--b-grid-cell-applied-background, var(--b-grid-cell-background));color:var(--b-grid-cell-color);border-inline-end:var(--b-grid-cell-border-width) solid var(--b-grid-cell-border-color);border-bottom:var(--b-grid-row-border-width) solid var(--b-grid-row-border-color);font-size:var(--b-grid-cell-font-size);font-weight:var(--b-grid-cell-font-weight);gap:var(--b-grid-cell-gap);overflow:var(--bi-grid-cell-overflow);padding-inline:var(--b-grid-cell-padding-inline);padding-block:var(--b-grid-cell-padding-block)}.b-grid-cell:not(.b-focused) *,.b-grid-cell:not(.b-focused) *:before,.b-grid-cell:not(.b-focused) *:after{transition:none}.b-theme-transition .b-grid-cell{transition:background-color var(--b-default-transition-duration),border var(--b-default-transition-duration)}.b-windows .b-grid-cell{contain:layout}.b-grid-cell.b-focused:focus-visible{outline:var(--b-grid-cell-focused-outline-width) solid var(--b-grid-cell-focused-outline-color);outline-offset:var(--b-grid-cell-focused-outline-offset, calc(var(--b-grid-cell-focused-outline-width) * -1))}.b-grid-cell.b-hover{--b-grid-cell-applied-background: var(--b-grid-cell-hover-background, var(--b-primary-98));--b-grid-cell-color: var(--b-grid-cell-selected-color)}.b-grid-cell.b-selected{--b-grid-cell-applied-background: var(--b-grid-cell-selected-background, var(--b-primary-96));--b-grid-cell-color: var(--b-grid-cell-selected-color)}.b-grid-cell.b-auto-height{white-space:normal}.b-grid-cell.b-auto-height:not(.b-tree-cell){--b-grid-cell-padding-block: var(--b-grid-cell-auto-height-padding-block)}.b-grid-cell.b-measuring-auto-height{contain:paint style layout;align-self:baseline;height:auto}.b-grid-no-text-selection .b-grid-cell{user-select:none;-webkit-user-select:none}.b-grid-cell a{color:var(--b-grid-link-color, var(--b-primary-30))}.b-supports-has.b-use-ellipsis:not(.b-grid-measuring) .b-grid-row{height:var(--b-grid-row-height)}.b-supports-has.b-use-ellipsis:not(.b-grid-measuring) .b-grid-row .b-grid-cell:not(.b-auto-height,.b-row-reorder-grip,:has(*)){display:block;text-overflow:ellipsis;line-height:var(--b-grid-row-height)}.b-grid-cell-align-right,.b-grid-cell-align-end{justify-content:flex-end;text-align:end}.b-grid-cell-align-center{justify-content:center;text-align:center}.b-rtl{--bi-grid-cell-dirty-indicator-clip-path: var(--bi-grid-cell-dirty-indicator-clip-path-rtl) }.b-show-dirty .b-cell-dirty:not(.b-editing):after,.b-show-dirty-during-edit .b-cell-dirty:after{content:"";z-index:2;position:absolute;top:0;inset-inline-start:1px;width:1.2em;height:1.2em;background-color:var(--b-grid-cell-dirty-color);clip-path:var(--bi-grid-cell-dirty-indicator-clip-path)}.b-grid-splitter{transition:background var(--b-default-transition-duration);background:var(--b-grid-splitter-color, var(--b-grid-splitter-narrow-color));flex:0 0 var(--b-grid-splitter-width)}.b-grid-splitter .b-grid-splitter-inner{display:none}.b-virtual-scrollers{z-index:3;display:flex;flex-direction:row;contain:paint style layout}.b-firefox .b-virtual-scrollers{contain:paint layout}.b-overlay-scrollbar.b-firefox.b-windows .b-virtual-scrollers,.b-overlay-scrollbar.b-firefox.b-windows .b-virtual-scrollers .b-virtual-scroller{pointer-events:auto}.b-overlay-scrollbar .b-virtual-scrollers{position:absolute;left:0;right:0;bottom:0;pointer-events:none}.b-overlay-scrollbar .b-virtual-scrollers .b-virtual-scroller{height:16px;pointer-events:none}.b-virtual-scrollers .b-virtual-scroller{overflow-x:scroll;overflow-y:hidden}.b-virtual-scrollers .b-virtual-width{height:1px}.b-overlay-scrollbar .b-virtual-scroller:hover,.b-overlay-scrollbar .b-virtual-scroller.b-show-virtual-scroller{pointer-events:all;opacity:1;transition:opacity .5s}:root,:host{--b-action-column-button-size: 1.1em;--b-action-column-color: var(--b-widget-color);--b-action-column-row-hover-color: var(--b-widget-color);--b-action-column-readonly-color: var(--b-widget-disabled-color);--b-action-column-hover-color: var(--b-neutral-10)}.b-action-ct{display:flex;flex-flow:row nowrap;gap:.5em}.b-action-item{aspect-ratio:1 / 1;border-radius:50%;font-size:var(--b-action-column-button-size);color:var(--b-action-column-color);pointer-events:var(--bi-action-column-pointer-events, auto)}.b-action-item:hover{--b-action-column-color: var(--b-action-column-hover-color)}.b-action-item:focus-visible{outline-offset:3px;outline:currentColor solid 3px}.b-grid-base.b-read-only.b-action-column-readonly{--b-action-column-color: var(--b-action-column-readonly-color);--bi-action-column-pointer-events: none}.b-grid-row.b-hover,.b-grid-row.b-selected{--b-action-column-color: var(--b-action-column-row-hover-color)}:root,:host{--b-color-column-border-width: 0;--b-color-column-empty-border-width: 1px;--b-color-column-border-color: transparent;--b-color-column-empty-border-color: var(--b-border-7);--b-color-column-picker-width: 11em}.b-color-cell-swatch{border-radius:1em;cursor:pointer;width:1.5em;height:1.5em;margin-inline:1em;flex-shrink:0;--b-primary: transparent;background:var(--b-primary);border:var(--b-color-column-border-width) solid var(--b-color-column-border-color)}.b-color-cell-swatch.b-empty{--b-color-column-border-width: var(--b-color-column-empty-border-width);--b-color-column-border-color: var(--b-color-column-empty-border-color)}.b-color-cell-swatch.b-show-color-name{margin-inline:0}.b-color-column-picker{width:var(--b-color-column-picker-width)}:root,:host{--b-percent-column-bar-border-radius: var(--b-widget-border-radius);--b-percent-column-bar-max-height: .6em;--b-percent-column-bar-border: none;--b-percent-column-circle-thickness: .5em;--b-percent-column-circle-label-font-size: .8em;--b-percent-column-bar-background: var(--b-neutral-95);--b-percent-column-low-fill-background: var(--b-color-orange);--b-percent-column-wide-value-color: var(--b-neutral-100);--b-percent-column-low-value-color: var(--b-secondary);--b-percent-column-zero-value-color: transparent;--b-percent-column-circle-background: var(--b-grid-cell-border-color);--b-percent-column-circle-label-color: var(--b-grid-cell-color);--bi-percent-column-transition: none}.b-percent-bar-outer{display:flex;height:30%;overflow:hidden;width:100%;outline-offset:-1px;background:var(--b-percent-column-bar-background);outline:var(--b-percent-column-bar-border);border-radius:var(--b-percent-column-bar-border-radius);max-height:var(--b-percent-column-bar-max-height)}.b-percent-bar-outer.b-low{--b-percent-column-fill-background: var(--b-percent-column-low-value-color);--b-percent-column-value-color: var(--b-percent-column-low-value-color)}.b-percent-bar-outer.b-zero{--b-percent-column-value-color: var(--b-percent-column-zero-value-color)}.b-percent-bar-outer .b-percent-bar{z-index:1;background:var(--b-percent-column-fill-background, var(--b-primary-50));width:var(--bi-percent-bar-value);transition:var(--bi-percent-column-transition)}.b-percent-bar-value{display:flex;align-items:center;justify-content:flex-start;flex:1;font-size:.6em;container-name:percent-column-value;container-type:size;z-index:1}.b-percent-bar-value label{transition:translate .5s,color .5s;margin-inline-start:.5em;color:var(--b-percent-column-value-color, var(--b-primary-50));translate:var(--bi-percent-column-value-translate, 0)}@property --bi-percent-column-circle-angle{syntax : ""; inherits : false; initial-value : 0turn;}.b-percent-done-circle{--bi-percent-column-circle-angle: 0;display:flex;align-items:center;justify-content:center;margin:0 auto;max-height:3em;max-width:3em;border-radius:50%;background:conic-gradient(var(--b-percent-column-circle-done-color, var(--b-primary)) 0 var(--bi-percent-column-circle-angle),transparent var(--bi-percent-column-circle-angle) 1turn) var(--b-percent-column-circle-background)}.b-percent-done-circle:after{content:attr(data-value);display:flex;align-items:center;justify-content:center;border-radius:50%;width:calc(100% - var(--b-percent-column-circle-thickness));height:calc(100% - var(--b-percent-column-circle-thickness));background:var(--b-percent-column-circle-label-background, var(--b-grid-cell-background));font-size:var(--b-percent-column-circle-label-font-size);color:var(--b-percent-column-circle-label-color)}.b-animating .b-percent-done-circle{transition:--bi-percent-column-circle-angle .3s,height .3s,width .3s}@container percent-column-value (width < 2em){label{margin-inline-start:-.5em!important;--b-percent-column-value-color: var(--b-percent-column-wide-value-color);--bi-percent-column-value-translate: -100%}}.b-grid-body-container.b-scrolling .b-percent-bar,.b-grid-body-container.b-scrolling .b-percent-bar *{transition:none}.b-animating,.b-grid-row-updating{--bi-percent-column-transition: width .5s, padding .5s, background-color .5s}:root,:host{--b-rating-column-icon-size: 1.2em;--b-rating-column-empty-color: var(--b-neutral-95);--b-rating-column-filled-color: var(--b-color-yellow)}.b-rating-cell .b-rating-icon{font-size:var(--b-rating-column-icon-size);color:var(--bi-rating-column-icon-color);opacity:var(--bi-rating-column-icon-opacity, 1);transition:var(--bi-rating-column-icon-transition, all var(--b-default-transition-duration) linear)}.b-theme-transition :is(.b-rating-cell .b-rating-icon){transition:color var(--b-default-transition-duration)}.b-rating-cell .b-empty{--bi-rating-column-icon-color: var(--b-rating-column-empty-color);--bi-rating-column-icon-opacity: var(--bi-rating-column-empty-opacity, 1)}.b-rating-cell .b-filled{--bi-rating-column-icon-color: var(--b-rating-column-filled-color)}.b-rating-cell-inner{display:flex}.b-grid-base:not(.b-read-only) .b-rating-cell-inner:not(.b-not-editable) .b-rating-icon{cursor:pointer}.b-grid-base:not(.b-read-only) .b-rating-cell-inner:not(.b-not-editable) .b-rating-icon:hover~.b-icon{--bi-rating-column-icon-color: var(--b-rating-column-empty-color);--bi-rating-column-empty-opacity: 1}.b-grid-base:not(.b-read-only) .b-rating-cell-inner:not(.b-not-editable):hover .b-rating-icon{--bi-rating-column-icon-color: var(--b-rating-column-filled-color);--bi-rating-column-empty-opacity: .4}.b-grid-body-container.b-scrolling .b-rating-icon{--bi-rating-column-icon-transition: none}:root,:host{--b-row-number-column-background: var(--b-neutral-97)}.b-grid-base .b-grid-cell.b-row-number-cell{--b-grid-cell-background: var(--b-row-number-column-background)}:root,:host{--b-tree-loading-icon: "\f110";--b-tree-icon-width: 1.25em;--b-tree-cell-gap: var(--b-widget-gap);--b-tree-parent-font-weight: 500;--b-tree-indent-size: 1.7em;--b-tree-leaf-icon-font-size: .3em;--b-tree-expander-icon-font-size: 1.2em;--b-tree-expander-color: var(--b-text-3);--b-tree-expander-row-hover-color: var(--b-tree-expander-color);--b-tree-parent-color: var(--b-grid-cell-color);--b-tree-icon-color: var(--b-tree-expander-color);--b-tree-icon-row-hover-color: var(--b-tree-expander-color);--b-tree-line-width: 2px;--b-tree-line-color: var(--b-neutral-85);--b-tree-line-offset: .45em}.b-internal{--b-tree-level: null}.b-tree-expander{position:relative;top:1px;cursor:pointer;display:grid;place-items:center}.b-loading-children .b-tree-expander.b-icon:before{animation:b-anim-rotate 2s infinite linear;content:var(--b-tree-loading-icon)}.b-grid-cell.b-tree-cell{align-items:stretch;gap:0}.b-grid-cell.b-tree-cell.b-selected,.b-grid-cell.b-tree-cell.b-hover{--b-grid-cell-color: var(--b-grid-cell-selected-color)}.b-tree-cell-inner{gap:var(--b-tree-cell-gap)}.b-tree-leaf-cell .b-tree-cell-inner:before{margin-inline-end:.6em;text-align:center;font-family:var(--b-widget-icon-font-family);font-weight:var(--b-widget-icon-font-weight);color:var(--b-tree-expander-color);width:var(--b-tree-icon-width);min-width:var(--b-tree-icon-width)}.b-tree-icon,.b-icon-tree-leaf,.b-icon-tree-folder,.b-icon-tree-folder-open,.b-icon-tree-expand,.b-icon-tree-collapse{text-align:center;color:var(--b-tree-expander-color);width:var(--b-tree-icon-width);min-width:var(--b-tree-icon-width)}.b-tree-icon{color:var(--b-tree-icon-color)}.b-icon-tree-leaf:before{vertical-align:middle;width:100%;font-size:var(--b-tree-leaf-icon-font-size)}.b-icon-tree-folder:before,.b-icon-tree-folder-open:before{margin-inline-start:.1em}:is(.b-icon-tree-expand,.b-icon-tree-collapse).b-empty-parent{visibility:hidden}:is(.b-icon-tree-expand,.b-icon-tree-collapse):before{font-size:var(--b-tree-expander-icon-font-size)}.b-tree:not(.b-show-tree-lines) .b-tree-cell-inner{padding-inline-start:calc(var(--b-tree-indent-size) * var(--b-tree-level))}.b-tree:not(.b-show-tree-lines) .b-tree-leaf-cell .b-tree-parent-has-icon{padding-inline-start:calc(var(--b-tree-indent-size) * var(--b-tree-level) + var(--b-tree-icon-width) + var(--b-tree-cell-gap))}.b-tree-line{flex-shrink:0;transition:border-color var(--b-default-transition-duration);border-color:var(--b-tree-line-color);width:var(--b-tree-indent-size)}.b-tree-line:before{content:"";display:block;border-inline-start-color:inherit;border-inline-start-style:solid;height:100%;position:relative;border-inline-start-width:var(--b-tree-line-width);inset-inline-start:var(--b-tree-line-offset)}.b-tree-cell-inner{display:flex;align-items:center;flex-shrink:0;flex-grow:1;padding-block:.5em}.b-tree-cell-inner.b-text-value{flex-shrink:1;overflow:hidden}.b-tree-cell-inner.b-text-value .b-tree-cell-value{display:initial;overflow:hidden;text-overflow:ellipsis}.b-tree-cell.b-auto-height .b-tree-cell-inner,.b-tree-cell.b-auto-height{flex-shrink:1}a.b-tree-cell-inner{text-decoration:none}a.b-tree-cell-inner:hover .b-tree-cell-value{text-decoration:underline}.b-tree-parent-row .b-grid-cell{font-weight:var(--b-tree-parent-font-weight);--b-grid-cell-color: var(--b-tree-parent-color)}.b-tree-parent-row .b-grid-cell.b-selected,.b-tree-parent-row .b-grid-cell.b-hover{--b-grid-cell-color: var(--b-grid-cell-selected-color)}.b-tree-cell-value{flex:1;display:flex;align-items:center;gap:var(--b-grid-cell-gap)}.b-touch .b-tree-expander{width:1.1em}.b-touch .b-icon-tree-expand:before,.b-touch .b-icon-tree-collapse:before{font-size:1.8em}.b-touch .b-icon-tree-leaf:before{font-size:.6em}.b-touch .b-tree-icon,.b-touch .b-tree-leaf-cell:not(.b-tree-parent-cell):before{font-size:1.2em}:is(.b-grid-row,.b-grid-cell).b-hover,:is(.b-grid-row,.b-grid-cell).b-selected{--b-tree-expander-color: var(--b-tree-expander-row-hover-color);--b-tree-icon-color: var(--b-tree-icon-row-hover-color)}.b-widget-cell{--b-button-max-height: 80%}.b-aifilter-field .b-mask-text{padding:.5em}.b-aifilter-field-result-popup{--b-primary: var(--b-color-yellow);--b-popup-background: var(--b-primary-95)}.b-checklist-filter-combo-picker.b-panel{padding:0;--b-panel-padding: 0;--b-list-item-padding: .75em var(--b-widget-padding)}.b-checklist-filter-combo-picker.b-panel [data-ref=searchField]{width:100%}.b-checklist-filter-combo-picker.b-panel .b-list-item-content{display:flex}.b-checklist-filter-combo-picker.b-panel .b-checklist-filter-combo-item-text{flex-grow:1}.b-checklist-filter-combo-picker.b-panel .b-bottom-toolbar{--b-toolbar-padding: var(--b-widget-padding)}.b-chart-content{position:absolute;width:100%;top:0;bottom:0}.b-chart-show-controls{padding-top:1em}.b-chart-controls{position:absolute;z-index:1;top:0;inset-inline-end:0;gap:0}.b-chart{transition:background var(--b-default-transition-duration);background:var(--b-neutral-100)}:root,:host{--b-chart-designer-labels-list-padding-block: 1em}.b-grid-chart-designer-content{padding:0}.b-grid-chart-designer-content .b-chart[data-ref=preview]{background:var(--b-primary-100);border-radius:var(--b-widget-border-radius)}.b-chart-designer-settings{flex:0 0 22em;overflow:clip;transition:flex-basis .3s}.b-chart-designer-settings .b-list{background:transparent}.b-chart-designer-settings .b-tab-panel-item{padding:1em .5em .5em;--b-panel-header-padding: 0}.b-chart-designer-settings .b-chart-layout-tab{padding-top:0}.b-chart-designer-settings .b-chart-appearance-tab{padding-block:0}.b-chart-designer-settings .b-chart-appearance-tab .b-panel-header{background:transparent}.b-chart-designer-settings [data-ref=labelsSeriesList]{padding-block:var(--b-chart-designer-labels-list-padding-block)}.b-chart-designer-settings [data-ref=seriesList]{gap:1em;padding-block:1em;--b-list-item-multi-select-hover-background: transparent;--b-list-item-padding: 0}.b-chart-designer-settings [data-ref=labelsSeriesList],.b-chart-designer-settings [data-ref=seriesList]{padding-inline:1em;border:1px solid var(--b-text-field-outlined-border-color);border-radius:var(--b-widget-border-radius)}.b-chart-designer-minimal .b-chart-designer-settings{flex-basis:0}.b-chart-type-list{display:grid;grid-template-columns:4.5em 4.5em 4.5em;width:100%;column-gap:1em;overflow:visible;--b-list-item-selected-background: var(--b-primary-97);--b-list-item-focus-background: var(--b-primary-97);--b-list-item-multi-selected-focus-background: var(--b-primary-97)}.b-chart-type-list .b-list-item-group-header{font-weight:500;grid-column:1 / -1}.b-chart-type-list .b-list-item:not(.b-list-item-group-header){padding:0;border:1px solid var(--b-text-field-outlined-border-color);border-radius:var(--b-widget-border-radius)}.b-chart-type-list .b-list-item:not(.b-list-item-group-header).b-selected{outline:1px solid var(--b-widget-focus-outline-color);outline-offset:2px}.b-chart-type-thumbnail{width:4em;height:3em}.b-chart-appearance-tab{gap:0}.b-chart-appearance-tab .b-multi-section .b-panel{--b-panel-header-font-weight: 400}.b-chart-appearance-tab .b-panel{flex-shrink:0;--b-panel-header-font-size: 1em;--b-panel-with-header-padding: 0;--b-panel-header-padding: 1em 0}.b-slider-with-field.b-hbox{margin-top:1px;flex-wrap:wrap}.b-slider-with-field.b-hbox>.b-label{min-width:100%}.b-slider-with-field.b-hbox .b-slider{flex:1}.b-slider-with-field.b-hbox .b-number-field{gap:0;width:6em}.b-slider-with-field.b-hbox .b-number-field .b-label{display:none}.b-font-picker [data-ref=family]{flex:1 1 60%}.b-font-picker [data-ref=size]{flex:1 0 30%}.b-font-picker.b-hbox{flex-wrap:wrap}.b-font-picker,.b-font-picker>.b-container{gap:.6em} diff --git a/__tests__/samples/resources/build/svalbard-dark.css b/__tests__/samples/resources/build/svalbard-dark.css new file mode 100644 index 0000000..6fd9c62 --- /dev/null +++ b/__tests__/samples/resources/build/svalbard-dark.css @@ -0,0 +1,325 @@ +@charset "UTF-8"; +/*! + * + * Bryntum Grid 7.2.1 (TRIAL VERSION) + * + * Copyright(c) 2026 Bryntum AB + * https://bryntum.com/contact + * https://bryntum.com/license + * + * Bryntum incorporates third-party code licensed under the MIT and Apache-2.0 licenses. + * See the licenses below or visit https://bryntum.com/products/grid/docs/guide/Grid/licenses + * + * # Third Party Notices + * + * Bryntum uses the following third party libraries: + * + * * [Font Awesome 6 Free](https://fontawesome.com/license/free) (MIT/SIL OFL 1.1) + * * [Roboto font (for Material theme only)](https://github.com/google/roboto) (Apache-2.0) + * * [Styling Cross-Browser Compatible Range Inputs with Sass](https://github.com/darlanrod/input-range-sass) (MIT) + * * [Tree Walker polyfill (only applies to Salesforce)](https://github.com/Krinkle/dom-TreeWalker-polyfill) (MIT) + * * [chronograph](https://github.com/bryntum/chronograph) (MIT) + * * [later.js](https://github.com/bunkat/later) (MIT) + * * [Monaco editor (only used in our demos)](https://microsoft.github.io/monaco-editor) (MIT) + * * Map/Set polyfill to fix performance issues for Salesforce LWS (MIT) + * * [Chart.js (when using Chart package)](https://github.com/chartjs/Chart.js) (MIT) + * + * Note: the **chronograph** and **later.js** libraries are used in Bryntum Scheduler Pro and Bryntum Gantt, but they are + * listed for all Bryntum products since the distribution contains trial versions of the thin bundles for all other + * products. TreeWalker is only used in the LWC bundle for Salesforce. Roboto font is only used in the material theme. + * + * ## Font Awesome 6 Free + * + * [Font Awesome Free 6 by @fontawesome](https://fontawesome.com/) + * + * Font Awesome Free is free, open source, and GPL friendly. You can use it for commercial projects, open source projects, + * or really almost whatever you want. + * + * [Full Font Awesome Free license](https://fontawesome.com/license/free) + * + * ## Roboto font + * + * [Apache License Version 2.0, January 2004](https://www.apache.org/licenses/LICENSE-2.0) + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 + * of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are + * under common control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by + * contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial + * ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, + * documentation source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including + * but not limited to compiled object code, generated documentation, and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as + * indicated by a copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work + * and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an + * original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or + * additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the + * Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. + * For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including + * but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems + * that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding + * communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a + * Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received + * by Licensor and subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to + * You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, + * prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such + * Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a + * perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise + * transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are + * necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity ( + * including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within + * the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this + * License for that Work shall terminate as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with + * or without modifications, and in Source or Object form, provided that You meet the following conditions: + * + * (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, + * and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the + * Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute + * must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that + * do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file + * distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the + * Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices + * normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You + * may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the + * NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the + * License. + * + * You may add Your own copyright statement to Your modifications and may provide additional or different license terms and + * conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, + * provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this + * License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for + * inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any + * additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any + * separate license agreement you may have executed with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product + * names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and + * reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and + * each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, + * MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness + * of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this + * License. + * + * 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or + * otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, + * shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or + * consequential damages of any character arising as a result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or + * any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such + * damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose + * to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or + * rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and + * on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and + * hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by + * brackets "[]" + * replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the + * appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose + * be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + * + * Copyright [yyyy] [name of copyright owner] + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * [APACHE LICENSE, VERSION 2.0](http://www.apache.org/licenses/LICENSE-2.0) + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an " + * AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + * + * ## Styling Cross-Browser Compatible Range Inputs with Sass + * + * Github: [input-range-sass](https://github.com/darlanrod/input-range-sass) + * + * Author: [Darlan Rod](https://github.com/darlanrod) + * + * Version 1.4.1 + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Darlan Rod + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Tree Walker polyfill + * + * The MIT License (MIT) + * + * [Copyright 2013–2017 Timo Tijhof](https://github.com/Krinkle/dom-TreeWalker-polyfill) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## chronograph + * + * GitHub: [chronograph](https://github.com/bryntum/chronograph) + * + * The MIT License (MIT) + * + * Copyright (c) 2023 Bryntum + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## later.js + * + * GitHub: [later.js](https://github.com/bunkat/later) + * + * The MIT License (MIT) + * + * Copyright © 2013 BunKat + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Monaco editor + * + * GitHub: [Monaco editor](https://microsoft.github.io/monaco-editor) (MIT) + * + * The MIT License (MIT) + * + * Copyright (c) 2016 - present Microsoft Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ## Map/Set polyfill to fix performance issues for Salesforce LWS + * + * Copyright © 2024 Certinia Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * ## Chart.js + * + * GitHub: [Chart.js](https://github.com/chartjs/Chart.js) + * + * The MIT License (MIT) + * + * Copyright (c) 2014-2022 Chart.js Contributors + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +:root:not(.b-nothing),:host(:not(.b-nothing)){--b-primary: var(--b-color-blue);--b-secondary: var(--b-color-orange);--b-elevation-1: 0 1px 3px 0 rgb(0 0 0 /.22), 0 1px 1px 0 rgb(0 0 0 /.2), 0 2px 1px -1px rgb(0 0 0 /.18);--b-elevation-2: 0 1px 5px 0 rgb(0 0 0 /.22), 0 2px 2px 0 rgb(0 0 0 /.2), 0 3px 1px -2px rgb(0 0 0 /.18);--b-neutral-100: hsl(0 0 10%);--b-neutral-99: hsl(0 0 10.9%);--b-neutral-98: hsl(0 0 11.8%);--b-neutral-97: hsl(0 0 12.7%);--b-neutral-96: hsl(0 0 13.6%);--b-neutral-95: hsl(0 0 14.5%);--b-neutral-94: hsl(0 0 15.4%);--b-neutral-93: hsl(0 0 16.3%);--b-neutral-92: hsl(0 0 17.2%);--b-neutral-91: hsl(0 0 18.1%);--b-neutral-90: hsl(0 0 19%);--b-neutral-85: hsl(0 0 23.5%);--b-neutral-80: hsl(0 0 28%);--b-neutral-75: hsl(0 0 32.5%);--b-neutral-70: hsl(0 0 37%);--b-neutral-65: hsl(0 0 41.5%);--b-neutral-60: hsl(0 0 46%);--b-neutral-55: hsl(0 0 50.5%);--b-neutral-50: hsl(0 0 55%);--b-neutral-45: hsl(0 0 59.5%);--b-neutral-40: hsl(0 0 64%);--b-neutral-35: hsl(0 0 68.5%);--b-neutral-30: hsl(0 0 73%);--b-neutral-25: hsl(0 0 77.5%);--b-neutral-20: hsl(0 0 82%);--b-neutral-15: hsl(0 0 86.5%);--b-neutral-10: hsl(0 0 91%);--b-neutral-5: hsl(0 0 95.5%);--b-neutral-2: hsl(0 0 97.3%);--b-neutral-1: hsl(0 0 98.2%);--b-neutral-0: hsl(0 0 100%);--b-mix: hsl(0 0 12%);--b-opposite: #fff;--b-widget-color-scheme: dark;--b-widget-border-radius: .6em;--b-widget-border-radius-large: 1.2em;--b-widget-border-color: var(--b-neutral-60);--b-field-set-border-color: var(--b-neutral-80);--b-panel-with-header-padding: 0 var(--b-widget-padding-large) var(--b-widget-padding-large) var(--b-widget-padding-large);--b-popup-background: var(--b-neutral-97);--b-popup-padding: var(--b-widget-padding);--b-tooltip-rich-background: var(--b-neutral-96);--b-tooltip-plain-background: var(--b-neutral-96);--b-slide-toggle-border-color: transparent;--b-slide-toggle-disabled-border-color: transparent;--b-slide-toggle-height: 1.5em;--b-slide-toggle-width: 2.25em;--b-splitter-color: var(--b-neutral-80);--b-splitter-size: 1px;--b-splitter-hover-size: 5px;--b-splitter-hover-color: var(--b-neutral-90);--b-text-field-outlined-input-padding: .9em;--b-text-field-outlined-border-color: var(--b-border-6);--b-field-trigger-edge-gap: .9em;--b-grid-header-font-weight: 600;--b-grid-header-color: var(--b-neutral-25);--b-column-lines-tick-color: var(--b-neutral-93);--b-scroll-button-border-width: 1px;--b-task-board-column-header-font-weight: 600}.b-bryntum:not(.b-nothing){--bi-primary-shade: var(--b-primary-50);--b-checkbox-checked-background: var(--bi-primary-shade);--b-checkbox-checked-border-color: var(--b-checkbox-checked-background);--b-checkbox-checked-hover-background: var(--bi-primary-shade);--b-list-checkbox-checked-background: var(--b-primary);--b-menu-background: var(--b-neutral-95);--b-radio-checked-color: var(--b-neutral-100);--b-radio-checked-background: var(--bi-primary-shade);--b-radio-checked-border-color: var(--b-radio-checked-background);--b-radio-check-gap: .25em;--b-slide-toggle-background: var(--b-neutral-80);--b-slide-toggle-hover-background: var(--b-neutral-80);--b-slide-toggle-checked-hovered-thumb-background: var(--b-primary-95);--b-slide-toggle-checked-border-color: transparent;--b-slide-toggle-checked-background: var(--bi-primary-shade);--b-slide-toggle-checked-hover-background: var(--bi-primary-shade);--b-slider-color: var(--bi-primary-shade);--b-tab-indicator-color: var(--bi-primary-shade);--b-text-field-focus-border-color: var(--bi-primary-shade);--b-text-field-filled-hover-border-color: var(--bi-primary-shade);--b-toast-background: var(--b-neutral-96)}.b-colorize:not(.b-nothing){--b-quick-find-background: var(--b-primary-90);--b-resource-time-range-background: var(--b-primary-70);--b-resource-time-range-color: var(--b-primary-70)}.b-sch-event-wrap{--b-sch-event-tonal-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 80%);--b-sch-event-tonal-hover-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 60%);--b-sch-event-indented-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 80%);--b-sch-event-indented-hover-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 70%);--b-sch-event-indented-selected-background: color-mix(in srgb, var(--b-primary), var(--b-mix) 60%)}.b-theme-info{--b-theme-name: "SvalbardDark";--b-theme-filename: "svalbard-dark";--b-theme-button-rendition: "text";--b-theme-label-position: "align-before";--b-theme-overlap-label: "false"} diff --git a/__tests__/samples/resources/examples/_shared/shared.css b/__tests__/samples/resources/examples/_shared/shared.css new file mode 100644 index 0000000..239bbe0 --- /dev/null +++ b/__tests__/samples/resources/examples/_shared/shared.css @@ -0,0 +1 @@ +@font-face{font-family:Poppins;font-style:normal;font-weight:100;src:local(""),url(../../resources/fonts/poppins-v20-latin-100.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:200;src:local(""),url(../../resources/fonts/poppins-v20-latin-200.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:300;src:local(""),url(../../resources/fonts/poppins-v20-latin-300.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:400;src:local(""),url(../../resources/fonts/poppins-v20-latin-regular.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:500;src:local(""),url(../../resources/fonts/poppins-v20-latin-500.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:600;src:local(""),url(../../resources/fonts/poppins-v20-latin-600.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:700;src:local(""),url(../../resources/fonts/poppins-v20-latin-700.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:800;src:local(""),url(../../resources/fonts/poppins-v20-latin-800.woff2) format("woff2")}@font-face{font-family:Poppins;font-style:normal;font-weight:900;src:local(""),url(../../resources/fonts/poppins-v20-latin-900.woff2) format("woff2")}@font-face{font-family:Roboto Flex;font-style:normal;font-weight:100 1000;font-stretch:100%;font-display:swap;src:url(../../resources/fonts/RobotoFlex.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Montserrat;font-style:normal;font-weight:100 900;src:url(../../resources/fonts/Montserrat.woff2) format("woff2")}html,body{height:100%;overflow:hidden;box-sizing:border-box}@keyframes background-animation{0%{background-position:bottom,right,bottom right;background-size:50% 50%,75% 75%,100% 100%}50%{background-position:top,left,bottom right;background-size:70% 70%,40% 40%,100% 100%}to{background-position:bottom,right,bottom right;background-size:50% 50%,75% 75%,100% 100%}}body{font-family:Poppins,Helvetica Neue,Arial,Helvetica,sans-serif;margin:0;font-size:14px!important;display:flex;flex-flow:row nowrap;align-items:stretch;transition:background-color var(--b-default-transition-duration);background-color:var(--b-neutral-97);background-image:radial-gradient(circle,rgba(108,207,250,.3),transparent 70%,transparent 100%),radial-gradient(circle,rgba(78,34,191,.1),transparent 70%,transparent 100%),radial-gradient(circle at right bottom,color-mix(in srgb,var(--b-primary),transparent 90%),transparent 70%,transparent 100%);background-position:bottom,right,bottom right;background-size:50% 50%,75% 75%,100% 100%;&.b-initially-hidden{visibility:hidden}&.b-screenshot *{transition:none!important;animation-duration:0s!important}&.b-theme-fluent2-light,&.b-theme-fluent2-dark,&.b-theme-material3-light,&.b-theme-material3-dark{font-family:Roboto Flex,Poppins,Helvetica Neue,Arial,Helvetica,sans-serif}&.b-theme-svalbard-light,&.b-theme-svalbard-dark{font-family:Montserrat,Poppins,Helvetica Neue,Arial,Helvetica,sans-serif}&.b-theme-material3-light,&.b-theme-svalbard-light,&.b-theme-visby-light,&.b-theme-high-contrast-light,&.b-theme-stockholm-light{color-scheme:light}&.b-theme-material3-dark,&.b-theme-svalbard-dark,&.b-theme-visby-dark,&.b-theme-high-contrast-dark,&.b-theme-stockholm-dark{color-scheme:dark;background-image:radial-gradient(circle,rgba(55,104,122,.3),transparent 70%,transparent 100%),radial-gradient(circle,rgba(47,21,115,.1),transparent 70%,transparent 100%),radial-gradient(circle at right bottom,color-mix(in srgb,var(--b-primary),transparent 90%),transparent 70%,transparent 100%)}&:where(:not(.b-screenshot,.b-hide-header)){#container{#outer,.demo-app,>.b-split-container,>.b-container.b-outer:where(:not(.no-demo-app-style)){margin:0 1em 1em;box-shadow:.2rem .2rem 1.2rem #0000000d;overflow:clip;transition:background var(--b-default-transition-duration),border var(--b-default-transition-duration),max-width var(--b-default-transition-duration);background:var(--b-neutral-100);border-radius:var(--b-widget-border-radius-large);.b-theme-visby-dark &,.b-theme-visby-light &{border:1px solid var(--app-border-color, var(--b-grid-cell-border-color, var(--b-neutral-80)))}.b-theme-high-contrast-dark &,.b-theme-high-contrast-light &{border:1px solid var(--b-border-1)}}.demo-header{margin-inline:1em;border-bottom:none}}@media screen and (min-width : 1000px){#container{#outer,.demo-app,>.b-split-container,>.b-container.b-outer:where(:not(.no-demo-app-style)){margin:1em 4em 4em;&:where(:first-of-type:not(:last-child)):has(~.b-container){margin-top:1em;margin-bottom:2em}&:where(:not(:first-of-type)){margin-top:2em}}.demo-header{margin-top:1em;margin-inline:4em}}}}}#trial-button{margin-inline-end:1em}@media (max-width : 800px){#trial-button{display:none}}@media print{body{background-image:none}}.b-task-board-base.b-outer,.b-grid-base.b-outer:not(.b-panel-collapsible,.b-timeline){flex:1}#example-description{max-width:0;clip:rect(0,0,0,0);overflow:clip}#skip-to-content{position:fixed;padding:16px;font-size:120%;z-index:100;color:var(--b-neutral-100);background-color:var(--b-primary-40);border-radius:var(--b-widget-border-radius);&:not(:focus){clip:rect(0,0,0,0)}}#container{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;align-items:stretch;transform:translate(0);overflow:hidden;&:after{content:"";position:absolute;width:0;height:0;max-height:0;left:0;border:none;box-shadow:none;pointer-events:none}}.demo-header{display:flex;padding-inline:.7em 0;padding-block:0;transition:background-color var(--b-default-transition-duration),padding var(--b-default-transition-duration),font-size .1s;border-bottom:1px solid var(--b-border-7);&,*{box-sizing:border-box}a{text-decoration:none}.b-icon{font-size:1.1em}.title{margin-inline-end:auto;display:flex;align-items:center;white-space:nowrap;color:var(--b-text-1);&:focus-visible{outline-offset:var(--b-button-focus-outline-offset);outline:var(--b-button-focus-outline-width) solid var(--b-widget-focus-outline-color);border-radius:var(--b-widget-border-radius)}h1{display:flex;align-items:center;margin:0;font-weight:600;font-size:1.1em}svg{margin-inline-end:.75em;height:2em;width:2em;background:#0076f8;padding-inline-end:.2em;border-radius:5px;g{fill:#fff}}}.b-toolbar{font-size:.9em;--b-toolbar-padding: .7em;--b-toolbar-background: transparent;@media (height <= 768px){--b-toolbar-padding: .4em .5em}}.b-button-text{--b-button-type-text-hover-background: var(--b-neutral-100)}}.b-no-description [data-ref=infoButton]{display:none}.b-hint,.b-tooltip,.b-widget.b-html{code{background:var(--b-neutral-93);padding:.15em .3em;border-radius:3px;margin-inline:.2em}.description{line-height:1.7em}}.b-tooltip.b-plain-tooltip code{margin-inline:0;background:var(--b-neutral-93);color:var(--b-neutral-30)}.b-hint .header{font-weight:700;i{margin-inline-end:.5em}}.b-no-initial-demo-transition *{transition:none!important}.demo-header .b-button.b-text{min-height:2.5em}@media (max-width : 450px){.rc-feedbackbutton-iframe,.b-hint,#fullscreen-button,[data-ref=codeButton],#trial-button,.learnButton,.b-code-editor .b-icon-download{display:none!important}.demo-header a#title{padding-inline-start:0;background:none}}#header-tools{display:none}#tools{display:flex}.tools-container{order:1}.b-icon-codepen{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ffffff' id='codepen-logo' viewBox='0 0 512 512'%3E%3Cpath d='M502.3 159.7l-234-156c-8-4.9-16.5-5-24.6 0l-234 156C3.7 163.7 0 170.8 0 178v156c0 7.1 3.7 14.3 9.7 18.3l234 156c8 4.9 16.5 5 24.6 0l234-156c6-4 9.7-11.1 9.7-18.3V178c0-7.1-3.7-14.3-9.7-18.3zM278 63.1l172.3 114.9-76.9 51.4L278 165.7V63.1zm-44 0v102.6l-95.4 63.7-76.9-51.4L234 63.1zM44 219.1l55.1 36.9L44 292.8v-73.7zm190 229.7L61.7 334l76.9-51.4L234 346.3v102.6zm22-140.9l-77.7-52 77.7-52 77.7 52-77.7 52zm22 140.9V346.3l95.4-63.7 76.9 51.4L278 448.8zm190-156l-55.1-36.9L468 219.1v73.7z'/%3E%3C/svg%3E");width:1em;height:1em;flex-shrink:0;transition:background-color .3s;background-color:var(--b-button-color)}.info-popup.b-popup{.b-popup-content{padding:1.5em;.b-html{flex-direction:column}.header{font-weight:700}.description{padding-top:.5em;line-height:1.4em}}[data-ref=playHintFlow]{display:none}.b-hint-flow &{[data-ref=hintButton],[data-ref=hintCheck]{display:none}[data-ref=playHintFlow]{display:flex}}}.feedback-savedmsg{h3{margin-top:.6em}i{margin-inline-end:.2em}}.version-update-toast{max-width:250px;line-height:1.4em;h4{position:relative;margin-top:0;margin-bottom:.5em;i.fa-times{position:absolute;right:0;top:0;.b-rtl &{right:auto;left:0}}}a{text-decoration:underline}}.b-hint .header{i.fa{margin-inline-end:.5em}}.b-screenshot .demo-header,.b-hide-header .demo-header{display:none}.b-hide-toolbar{.b-outer>.b-panel-body-wrap>.b-top-toolbar,.b-outer.b-panel>header.b-panel-ui-toolbar{display:none}}.keycap{font-weight:600;font-size:.8em;padding:.2em .4em;margin-inline:.5em;border:1px solid var(--b-neutral-85);border-radius:3px;background:var(--b-neutral-97);color:var(--b-widget-color)}.docsmenu{--b-panel-header-padding: 1em;--b-panel-header-font-size: 1.1em;--b-panel-header-text-align: center;--b-panel-header-font-weight: 600;--b-panel-with-header-top-toolbar-background: transparent;.b-menu-content{overflow:visible}a{text-decoration:none}.b-docs-category{background:var(--b-neutral-100);.b-theme-high-contrast-dark &,.b-theme-high-contrast-light &{--b-menu-item-color: var(--b-neutral-10);--b-menu-item-icon-color: var(--b-neutral-10)}--b-menu-item-font-weight: 500;position:sticky;top:calc(var(--b-panel-padding) * -1px);z-index:1}}.b-code-changes-pending{#container *,>.b-widget:not(.b-code-editor) *{pointer-events:none!important}}.b-example-tooltip{.b-panel-header{.b-header-title{white-space:break-spaces}}}.b-locale-picker .b-list-item-content{div:first-child{flex:1}div:last-child{color:var(--b-neutral-40)}}.b-demo-hint .header{font-weight:600;display:flex;align-items:center;gap:.5em}label{display:block;margin-bottom:0} diff --git a/__tests__/samples/resources/examples/export/resources/app.css b/__tests__/samples/resources/examples/export/resources/app.css new file mode 100644 index 0000000..b8d2249 --- /dev/null +++ b/__tests__/samples/resources/examples/export/resources/app.css @@ -0,0 +1,36 @@ +.b-export-header, +.b-export-footer { + display : flex; + color : #fff; + background : #0076f8; + align-items : center; + z-index : 10000; +} + +.b-export-header { + text-align : start; + height : 40px; + position : relative; + padding : .7em 1em .5em 1em; + + display : flex; + flex-flow : row nowrap; + justify-content : space-between; + + img { + height : 60%; + } + + dl { + margin : 0; + font-size : 10px; + } + + dd { + margin : 0; + } +} + +.b-export-footer { + justify-content : center; +} diff --git a/__tests__/samples/resources/examples/export/resources/bryntum.svg b/__tests__/samples/resources/examples/export/resources/bryntum.svg new file mode 100644 index 0000000..339345a --- /dev/null +++ b/__tests__/samples/resources/examples/export/resources/bryntum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/__tests__/samples/resources/favicon.ico b/__tests__/samples/resources/favicon.ico new file mode 100644 index 0000000..a0c9415 Binary files /dev/null and b/__tests__/samples/resources/favicon.ico differ diff --git a/__tests__/samples/resources/resources/fonts/Montserrat.woff2 b/__tests__/samples/resources/resources/fonts/Montserrat.woff2 new file mode 100644 index 0000000..e9bd2e8 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/Montserrat.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/RobotoFlex.woff2 b/__tests__/samples/resources/resources/fonts/RobotoFlex.woff2 new file mode 100644 index 0000000..f898812 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/RobotoFlex.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-100.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-100.woff2 new file mode 100644 index 0000000..e59b153 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-100.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-200.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-200.woff2 new file mode 100644 index 0000000..eeacdfe Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-200.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-300.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-300.woff2 new file mode 100644 index 0000000..962b734 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-300.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-500.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-500.woff2 new file mode 100644 index 0000000..c660336 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-500.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-600.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-600.woff2 new file mode 100644 index 0000000..921e962 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-600.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-700.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-700.woff2 new file mode 100644 index 0000000..bf022fc Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-700.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-800.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-800.woff2 new file mode 100644 index 0000000..f107b36 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-800.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-900.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-900.woff2 new file mode 100644 index 0000000..71f96de Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-900.woff2 differ diff --git a/__tests__/samples/resources/resources/fonts/poppins-v20-latin-regular.woff2 b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-regular.woff2 new file mode 100644 index 0000000..b69e009 Binary files /dev/null and b/__tests__/samples/resources/resources/fonts/poppins-v20-latin-regular.woff2 differ diff --git a/__tests__/samples/smoke/base.html b/__tests__/samples/smoke/base.html new file mode 100644 index 0000000..dc42aab --- /dev/null +++ b/__tests__/samples/smoke/base.html @@ -0,0 +1,2046 @@ + + + + + + + + + + + + + + + +
+
+
Company logo +
+
Date: Feb 26, 2026 5:02 PM
+
+
+
+
+
+
+ + + + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/__tests__/samples/smoke/base_https.pdf b/__tests__/samples/smoke/base_https.pdf index 6eed678..588aa0a 100644 Binary files a/__tests__/samples/smoke/base_https.pdf and b/__tests__/samples/smoke/base_https.pdf differ diff --git a/__tests__/samples/smoke/base_https.pdf.json b/__tests__/samples/smoke/base_https.pdf.json deleted file mode 100644 index 3dd9c43..0000000 --- a/__tests__/samples/smoke/base_https.pdf.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "html": [ - { "html" : "
Date: Dec 21, 2021 11:44 AM
#
First name
Surname
Score
Rank
Percent
1
Don
Taylor
880
99
2
John
Adams
850
55
3
Doug
Jones
330
100
4
James
Davis
790
33
5
Mike
Johnson
780
60
6
Don
Johnson
640
5
7
Jane
McGregor
290
3
8
Jane
Thomas
400
50
9
Lisa
Anderson
890
70
10
Don
Thomas
10
96
11
Doug
Jackson
270
3
12
James
Ewans
140
87
13
Jenny
Brown
560
69
14
Doug
Ewans
550
34
15
Mike
Ewans
70
43
16
Linda
McGregor
60
87
17
Jenny
Jones
290
53
18
Linda
Taylor
390
16
19
Daniel
Wilson
80
49
20
Melissa
Johnson
450
77
21
Karen
McGregor
690
80
22
Daniel
Thomas
620
1
23
Don
Jackson
570
11
24
Don
Taylor
0
90
25
Jane
Taylor
600
30
26
Daniel
Adams
470
24
27
Jane
Brown
740
77
28
Mike
More
430
50
29
Lisa
More
900
75
30
Mary
Brown
980
57
31
David
McGregor
460
8
32
Don
Ewans
740
4
33
Adam
More
210
100
34
Linda
Adams
170
34
35
Mike
Brown
420
55
36
Don
Jones
590
19
37
Barbara
Anderson
730
76
38
Doug
Thomas
350
94
39
Doug
Wilson
530
54
40
Karen
Brown
340
23
41
Adam
Johnson
450
36
42
Adam
Jackson
370
83
43
Jenny
Williams
290
10
44
John
Miller
760
1
45
Barbara
Jackson
370
89
46
James
Smith
950
8
47
Doug
McGregor
360
22
48
Jane
Anderson
280
20
49
Jenny
Anderson
540
55
50
Mary
Davis
530
71

© 2020 Bryntum AB

" } - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "pdf", - "fileName": "base_https", - "sendAsBinary": true -} diff --git a/__tests__/samples/smoke/base_https.png b/__tests__/samples/smoke/base_https.png new file mode 100644 index 0000000..76318cf Binary files /dev/null and b/__tests__/samples/smoke/base_https.png differ diff --git a/__tests__/samples/smoke/base_https.png.json b/__tests__/samples/smoke/base_https.png.json deleted file mode 100644 index f06a6dd..0000000 --- a/__tests__/samples/smoke/base_https.png.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "html": [ - { "html": "
Date: Dec 21, 2021 11:44 AM
#
First name
Surname
Score
Rank
Percent
1
Don
Taylor
880
99
2
John
Adams
850
55
3
Doug
Jones
330
100
4
James
Davis
790
33
5
Mike
Johnson
780
60
6
Don
Johnson
640
5
7
Jane
McGregor
290
3
8
Jane
Thomas
400
50
9
Lisa
Anderson
890
70
10
Don
Thomas
10
96
11
Doug
Jackson
270
3
12
James
Ewans
140
87
13
Jenny
Brown
560
69
14
Doug
Ewans
550
34
15
Mike
Ewans
70
43
16
Linda
McGregor
60
87
17
Jenny
Jones
290
53
18
Linda
Taylor
390
16
19
Daniel
Wilson
80
49
20
Melissa
Johnson
450
77
21
Karen
McGregor
690
80
22
Daniel
Thomas
620
1
23
Don
Jackson
570
11
24
Don
Taylor
0
90
25
Jane
Taylor
600
30
26
Daniel
Adams
470
24
27
Jane
Brown
740
77
28
Mike
More
430
50
29
Lisa
More
900
75
30
Mary
Brown
980
57
31
David
McGregor
460
8
32
Don
Ewans
740
4
33
Adam
More
210
100
34
Linda
Adams
170
34
35
Mike
Brown
420
55
36
Don
Jones
590
19
37
Barbara
Anderson
730
76
38
Doug
Thomas
350
94
39
Doug
Wilson
530
54
40
Karen
Brown
340
23
41
Adam
Johnson
450
36
42
Adam
Jackson
370
83
43
Jenny
Williams
290
10
44
John
Miller
760
1
45
Barbara
Jackson
370
89
46
James
Smith
950
8
47
Doug
McGregor
360
22
48
Jane
Anderson
280
20
49
Jenny
Anderson
540
55
50
Mary
Davis
530
71

© 2020 Bryntum AB

"} - ], - "orientation": "portrait", - "format": "A4", - "fileFormat": "png", - "fileName": "base_https", - "sendAsBinary": true -} diff --git a/__tests__/smoke.test.js b/__tests__/smoke.test.js deleted file mode 100644 index 605c12b..0000000 --- a/__tests__/smoke.test.js +++ /dev/null @@ -1,88 +0,0 @@ -const { startServer, stopServer, certExists, getLoggerConfig } = require('./utils.js'); -const { assertExportedFile } = require('./assertions.js'); - -jest.setTimeout(3 * 60 * 1000); - -let server; - -afterEach(() => { - if (server) { - return stopServer(server).then(() => server = null); - } -}); - -describe('Should export over HTTP', () => { - test('Should export to PDF', async () => { - const - protocol = 'http', - port = 8081, - workers = 1; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('smoke_http_pdf') }) - - await assertExportedFile({ - fileFormat: 'pdf', - host: 'localhost', - protocol, - port: server.httpPort - }); - }); - - test('Should run consequent requests', async () => { - const - host = 'localhost', - protocol = 'http', - port = 8081, - workers = 1, - fileFormat = 'pdf'; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('smoke_consequent') }); - - await assertExportedFile({ protocol, host, port: server.httpPort, fileFormat }); - - // Waiting for 30 seconds, export server should kill all idle workers - await new Promise(resolve => { - setTimeout(() => resolve(), 30000); - }); - - const promises = [ - assertExportedFile({ protocol, host, port: server.httpPort, fileFormat }), - new Promise(resolve => { - setTimeout(() => { - resolve('timeout'); - }, 1000 * 60 * 2); - }) - ]; - - const winner = await Promise.race(promises); - - await Promise.allSettled(promises); - - if (winner === 'timeout') { - fail('Server have not returned file in 2 minutes'); - } - }); -}); - -describe('Should export over HTTPS', () => { - if (certExists) { - test('Should export to PDF', async () => { - const - protocol = 'https', - port = 8081, - workers = 1; - - server = await startServer({ protocol, port, workers, logger : getLoggerConfig('smoke_https_pdf') }) - - await assertExportedFile({ - fileFormat: 'pdf', - host: 'localhost', - protocol, - port: server.httpsPort - }); - }); - } - else { - test('Cert is not found, skipping tests', () => {}); - } -}); diff --git a/__tests__/staticServer.js b/__tests__/staticServer.js new file mode 100644 index 0000000..ea09869 --- /dev/null +++ b/__tests__/staticServer.js @@ -0,0 +1,105 @@ +/** + * Static file server for serving test resources. + * Used by Jest globalSetup/globalTeardown to make resources available during tests. + */ +const http = require('http'); +const path = require('path'); +const fs = require('fs'); + +const RESOURCES_PORT = 9999; +const RESOURCES_DIR = path.join(__dirname, 'samples', 'resources'); + +// MIME types for common file types +const MIME_TYPES = { + '.html' : 'text/html', + '.css' : 'text/css', + '.js' : 'application/javascript', + '.json' : 'application/json', + '.png' : 'image/png', + '.jpg' : 'image/jpeg', + '.jpeg' : 'image/jpeg', + '.gif' : 'image/gif', + '.svg' : 'image/svg+xml', + '.woff' : 'font/woff', + '.woff2': 'font/woff2', + '.ttf' : 'font/ttf', + '.eot' : 'application/vnd.ms-fontobject' +}; + +let server = null; + +/** + * Start the static file server + * @returns {Promise} + */ +function startStaticServer() { + return new Promise((resolve, reject) => { + server = http.createServer((req, res) => { + // Remove /resources prefix from URL + let urlPath = req.url.split('?')[0]; + if (urlPath.startsWith('/resources')) { + urlPath = urlPath.slice('/resources'.length); + } + + const filePath = path.join(RESOURCES_DIR, urlPath); + + // Log request for debugging + if (process.env.DEBUG_STATIC_SERVER) { + console.log(`[StaticServer] ${req.method} ${req.url} -> ${filePath}`); + } + + // Security: ensure we're still within RESOURCES_DIR + if (!filePath.startsWith(RESOURCES_DIR)) { + res.writeHead(403); + res.end('Forbidden'); + return; + } + + fs.stat(filePath, (err, stats) => { + if (err || !stats.isFile()) { + res.writeHead(404); + res.end('Not found'); + return; + } + + const ext = path.extname(filePath).toLowerCase(); + const contentType = MIME_TYPES[ext] || 'application/octet-stream'; + + res.writeHead(200, { 'Content-Type': contentType }); + fs.createReadStream(filePath).pipe(res); + }); + }); + + server.on('error', reject); + + server.listen(RESOURCES_PORT, () => { + console.log(`Static resource server started on port ${RESOURCES_PORT}`); + resolve(server); + }); + }); +} + +/** + * Stop the static file server + * @returns {Promise} + */ +function stopStaticServer() { + return new Promise((resolve) => { + if (server) { + server.close(() => { + console.log('Static resource server stopped'); + server = null; + resolve(); + }); + } + else { + resolve(); + } + }); +} + +module.exports = { + startStaticServer, + stopStaticServer, + RESOURCES_PORT +}; diff --git a/__tests__/utils.js b/__tests__/utils.js index 10a15f4..a21fc9d 100644 --- a/__tests__/utils.js +++ b/__tests__/utils.js @@ -2,49 +2,62 @@ const { spawn } = require('child_process'); const path = require('path'); const fs = require('fs'); const os = require('os'); +const mkdirp = require('mkdirp'); const WebServer = require('../src/server/WebServer.js'); +const ExportServer = require('../src/server/ExportServer.js'); const appConfig = require('../app.config.js').config; +const { RESOURCES_PORT } = require('./staticServer.js'); + +/** + * Port allocator that uses JEST_WORKER_ID to assign non-conflicting port ranges. + * Each Jest worker gets a range of 100 ports, ensuring parallel tests don't conflict. + * + * Worker 1: ports 8100-8199 + * Worker 2: ports 8200-8299 + * etc. + */ +class PortAllocator { + constructor() { + // JEST_WORKER_ID is 1-based, defaults to 1 if not running in Jest + const workerId = parseInt(process.env.JEST_WORKER_ID, 10) || 1; + this.basePort = 8000 + (workerId * 100); + this.currentOffset = 0; + } -const net = require("net"); -const Socket = net.Socket; - -// https://stackoverflow.com/a/66116887 -async function getNextPort(port = 8080, maxPort = 10000) { - return new Promise((resolve, reject) => { - let socket; - - const getSocket = () => { - socket?.destroy(); - - socket = new Socket(); - - socket.on('connect', () => { - checkPort(++port); - }); + /** + * Get the next available port for this worker + * @returns {number} + */ + getPort() { + const port = this.basePort + this.currentOffset; + this.currentOffset++; + return port; + } - socket.on('error', e => { - if (e.code !== "ECONNREFUSED") { - reject(e); - } else { - resolve(port); - } - }); + /** + * Reset the port counter (useful for test cleanup) + */ + reset() { + this.currentOffset = 0; + } +} - return socket; - } +// Singleton instance for the current Jest worker +const portAllocator = new PortAllocator(); - const checkPort = port => { - if (port < maxPort) { - socket = getSocket(); - socket.connect(port, '0.0.0.0'); - } - else { - reject('Could not find available port'); - } - } +/** + * Get a unique port for this test worker + * @returns {number} + */ +function getPort() { + return portAllocator.getPort(); +} - checkPort(port); - }); +/** + * Reset port allocator (call in beforeAll/afterAll if needed) + */ +function resetPorts() { + portAllocator.reset(); } @@ -61,7 +74,7 @@ function isWSL() { } } -appConfig.logger.level = 'verbose'; +appConfig.logger.level = 'error'; async function startServer(config = {}) { const { protocol, port, workers = 1 } = config; @@ -75,7 +88,12 @@ async function startServer(config = {}) { [protocol] : port, 'max-workers' : workers, findNextHttpPort : true, - chromiumArgs : isWSL() ? ['--no-sandbox'] : [] + // Host resources locally to maintain stability + resources : path.join('__tests__', 'samples', 'resources'), + chromiumArgs : [ + '--no-sandbox', + '--disable-setuid-sandbox' + ] }, config); const server = new WebServer(config); @@ -84,12 +102,15 @@ async function startServer(config = {}) { console.log = log; - // console.log(JSON.stringify(config)); - return server; } async function stopServer(server) { + // Stop the queue and close all browser instances first + if (server.taskQueue) { + server.taskQueue.stop(); + } + await new Promise(resolve => { if (server.httpServer) { server.httpServer.close(resolve); @@ -101,30 +122,13 @@ async function stopServer(server) { } function getTmpFilePath(fileFormat) { - function pad(value) { - return String(value).padStart(2, '0'); - } + const tmpDir = path.join(process.cwd(), 'tmp'); + + mkdirp.sync(tmpDir); + + const date = new Date().toISOString().replace(/[T:]/g, '_').split('.')[0]; - const now = new Date(); - - // cannot use \ / : * " < > | on windows - const formattedDate = [ - now.getFullYear(), - '-', - pad(now.getMonth() + 1), - '-', - pad(now.getDate()), - '__', - pad(now.getHours()), - '-', - pad(now.getMinutes()), - '-', - pad(now.getSeconds()) - ].join(''); - - const fileName = `${formattedDate}.${fileFormat}`; - - return path.join(__dirname, '..', 'tmp', fileName); + return path.join(tmpDir, `${date}.${fileFormat}`); } async function assertImage(pathToBase, buffer) { @@ -202,19 +206,83 @@ async function assertImage(pathToBase, buffer) { } function checkServerKey() { - return fs.existsSync(path.join(__dirname, '..', 'cert', 'server.key')); + return fs.existsSync(path.join(process.cwd(), 'cert', 'server.key')); } function getLoggerConfig(filename) { return { file : { level : 'verbose', filename : `log/tests/${filename}.txt` } }; } +/** + * Create an ExportServer instance without HTTP server for direct queue testing. + * This is faster than starting a full WebServer. + * + * @param {Object} config + * @param {number} [config.workers=1] - Number of workers + * @param {boolean} [config.testing=false] - Enable testing mode (random failures) + * @param {Object} [config.logger] - Logger config + * @returns {ExportServer} + */ +function createExportServer(config = {}) { + const { workers = 1, testing = false, logger } = config; + + return new ExportServer({ + 'max-workers' : workers, + testing, + logger : logger || appConfig.logger, + chromiumArgs : [ + '--no-sandbox', + '--disable-setuid-sandbox' + ] + }); +} + +/** + * Stop an ExportServer by stopping its queue + * @param {ExportServer} exportServer + */ +function stopExportServer(exportServer) { + if (exportServer?.taskQueue) { + exportServer.taskQueue.stop(); + } +} + +/** + * Helper to convert stream to buffer + * @param {Stream} stream + * @returns {Promise} + */ +async function streamToBuffer(stream) { + return new Promise((resolve, reject) => { + const chunks = []; + stream.on('data', chunk => chunks.push(chunk)); + stream.on('end', () => resolve(Buffer.concat(chunks))); + stream.on('error', reject); + }); +} + +/** + * Load HTML file and replace {port} placeholder with the static resources server port. + * @param {string} filePath - Path to the HTML file + * @returns {string} HTML content with port replaced + */ +function loadTestHTML(filePath) { + const html = fs.readFileSync(filePath, 'utf-8'); + return html.replace(/\{port\}/g, RESOURCES_PORT); +} + module.exports = { - getNextPort, + getPort, + resetPorts, startServer, stopServer, + createExportServer, + stopExportServer, + streamToBuffer, + loadTestHTML, getTmpFilePath, assertImage, getLoggerConfig, - certExists : checkServerKey() + certExists : checkServerKey(), + RESOURCES_PORT }; diff --git a/app.config.js b/app.config.js index 27e5200..9db8e0f 100644 --- a/app.config.js +++ b/app.config.js @@ -1,3 +1,9 @@ +const path = require('path'); + +const logPath = process.pkg + ? path.join(process.execPath, '..', 'log') + : path.join(__dirname, 'log'); + const config = { // HTTP server port "http" : 8080, @@ -5,6 +11,8 @@ const config = { // HTTPS server port "https" : null, + "websocket" : true, + // CORS headers are always set, this config defined value for Access-Control-Allow-Origin header "cors" : "*", @@ -17,6 +25,9 @@ const config = { // True to pass `--no-sandbox` flag to the chromium "no-sandbox" : true, + // True to disable web security (CORS, CSP, etc) + "disable-web-security" : false, + // Maximum amount of parallel puppeteer instances to run "max-workers" : 5, @@ -30,10 +41,10 @@ const config = { "timeout" : 300, // Configuration options for logger - // Set to false to output log to the console + // Set `false` to output log to the console "logger" : { "rotate" : { - "dirname" : "log", + "dirname" : logPath, "filename" : "export-server-%DATE%.log", "datePattern" : "YYYY-MM-DD", "maxSize" : "20mb", diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..10ffd18 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets : [ + ['@babel/preset-env', { targets : { node : 'current' } }] + ] +}; diff --git a/bin/pdf-export-server b/bin/pdf-export-server deleted file mode 100644 index 8f97cec..0000000 --- a/bin/pdf-export-server +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -require('../src/server.js'); diff --git a/build.js b/build.js index 891e6b2..8bc19b3 100644 --- a/build.js +++ b/build.js @@ -1,110 +1,201 @@ -const { exec } = require('pkg'); -const Downloader = require('./downloader.js'); +#!/usr/bin/env node +const { exec } = require('@yao-pkg/pkg'); const path = require('path'); -const copy = require('recursive-copy'); -const rimraf = require('rimraf'); -const mkdirp = require('mkdirp'); -const moveFile = require('move-file'); const fs = require('fs'); +const rimraf = require('rimraf'); +const copy = require('recursive-copy'); +const puppeteerBrowsers = require('@puppeteer/browsers'); +const { PUPPETEER_REVISIONS } = require('puppeteer-core/lib/cjs/puppeteer/revisions.js'); + +// Parse command line arguments +const args = process.argv.slice(2); +const targetPlatformArg = args.find(arg => arg.startsWith('--platform=')); +const targetPlatform = targetPlatformArg + ? targetPlatformArg.split('=')[1] + : process.platform; // Default to current platform if not specified + +const outputDir = path.join(__dirname, 'dist'); + +// Clean up and prepare directories +async function prepareDirectories() { + console.log('Cleaning build directories...'); + + if (fs.existsSync(outputDir)) { + rimraf.sync(outputDir); + } + + fs.mkdirSync(path.join(outputDir, 'log'), { recursive: true }); +} -const downloadPath = path.join(__dirname, './build/server/chromium'); -const buildPath = path.join(__dirname, './build/server'); -const binDir = path.join(__dirname, './bin'); - -async function build() { - - console.log('Start build'); - - let downloader = new Downloader(downloadPath); - let revision = Downloader.defaultRevision(); - let platforms = downloader.supportedPlatforms(); - - await mkDir(downloadPath); - - for (let i = 0; i < platforms.length; i++) { - let canDownload = await downloader.canDownloadRevision(platforms[i], revision); - if (canDownload) { - let targetBinDir = path.join(binDir, platforms[i].includes('win') ? 'win' : platforms[i]); +// Download Chromium for Puppeteer +async function downloadChrome() { + console.log('Downloading Chrome for Puppeteer...'); + + const revision = PUPPETEER_REVISIONS.chrome; + + // Use the target platform for Puppeteer browser detection or fallback to detected platform + let platform; + + if (targetPlatform === 'win32' || targetPlatform === 'windows') { + platform = 'win64'; + } + else if (targetPlatform === 'darwin' || targetPlatform === 'macos') { + platform = 'mac'; + } + else if (targetPlatform === 'linux') { + platform = 'linux'; + } + else { + // Default to auto-detection if platform not recognized + platform = puppeteerBrowsers.detectBrowserPlatform(); + } + + + console.log(`Downloading Chromium revision ${revision} for ${platform}...`); + + const installedBrowser = await puppeteerBrowsers.install({ + unpack: true, + browser: puppeteerBrowsers.Browser.CHROME, + platform: platform, + buildId: revision, + cacheDir: outputDir + }); + + console.log(`Chrome downloaded to: ${installedBrowser.executablePath}`); + + const path = installedBrowser.executablePath.replace(outputDir, '.'); + + return path.replace(/\\/g, '\\\\'); +} - console.log('Download puppeteer for ' + platforms[i]); - await downloader.downloadRevision(platforms[i], revision); - console.log('Download puppeteer for ' + platforms[i] + ' completed'); - await mkDir(path.join(targetBinDir, '/chromium')); +// Copy certificates if they exist +async function copyCertificates() { + const certDir = path.join(__dirname, 'src', 'cert'); + const targetCertDir = path.join(outputDir, 'cert'); + + if (fs.existsSync(certDir)) { + console.log('Copying HTTPS certificates...'); + fs.mkdirSync(targetCertDir, { recursive: true }); + + await copy(certDir, targetCertDir) + .catch(error => { + console.error('Certificate copy failed:', error); + }); + } else { + console.log('No certificates found, skipping...'); + } +} - let chromiumTarget = path.join(targetBinDir, 'chromium', platforms[i] + '-' + revision); - await rmDir(chromiumTarget); +// Build executable with pkg +async function buildExecutable(entryFilePath) { + console.log('Building executable...'); + + // Get platform-specific output name + const platform = process.platform; + + // Get platform-specific output name based on target platform + let outputName; + let pkgPlatform; + + switch (targetPlatform) { + case 'win32': + case 'windows': + outputName = 'pdf-export-server-win.exe'; + pkgPlatform = 'win'; + break; + case 'darwin': + case 'macos': + outputName = 'pdf-export-server-macos'; + pkgPlatform = 'macos'; + break; + case 'linux': + outputName = 'pdf-export-server-linux'; + pkgPlatform = 'linux'; + break; + default: + console.log(`Unrecognized platform: ${targetPlatform}, defaulting to current platform`); + outputName = `pdf-export-server-${platform}`; + pkgPlatform = platform; + } + + const outputPath = path.join(outputDir, outputName); + const nodeVersion = process.versions.node.split('.')[0]; + + // Build with pkg using the specified platform + const targets = `node${nodeVersion}-${pkgPlatform}`; + + console.log(`Building for target: ${targets}`); + + await exec([ + entryFilePath, + '--targets', targets, + '--output', outputPath, + '--compress', 'GZip', + '--config', 'package.json' + ]); + + console.log(`Executable created at: ${outputPath}`); + return outputPath; +} - console.log('Move puppeteer executable to os target'); - await moveFile(path.join(downloadPath, platforms[i] + '-' + revision), chromiumTarget); +// put path to local chrome to server.js +async function patchEntryFile(chromeExecutablePath) { + const entryFile = path.join(__dirname, 'src', 'server.js'); + const entryDestination = path.join(__dirname, 'src', 'server-entry.js'); - await rmDir(path.join(targetBinDir, 'cert')); + if (fs.existsSync(entryFile)) { + console.log('Copying ./src/server.js to dist directory...'); + const entrySource = fs.readFileSync(entryFile, 'utf-8'); - console.log('Copy https certificates to os target destination'); - await copy(path.join(__dirname, 'src', 'cert'), path.join(targetBinDir, 'cert')) - .catch(function(error) { - console.error('Copy failed: ' + error); - }); - } - } + // Replace chromeExecutablePath in the server.js content + const patchedSource = entrySource.replace(/CHROME_EXECUTABLE_PATH_PLACEHOLDER/g, chromeExecutablePath); - console.log('Clean up download path'); - await rmDir(downloadPath); - - await createExecutables(); - - await new Promise((resolve, reject) => { - fs.readdir(buildPath, function(err, files) { - if (err) { - reject(err); - } - else { - resolve(files); - } - }); - }).then(files => { - return Promise.all(files.map(file => { - - let target = ''; - if (file.includes('linux')) { - target = 'linux'; - } - - if (file.includes('macos')) { - target = 'mac'; - } - - if (file.includes('win')) { - target = 'win'; - } - - if (target) { - console.log('Move server executable to os target destination (' + target + ')'); - return moveFile(path.join(buildPath, file), path.join(binDir, target + '/server' + (target === 'win' ? '.exe' : ''))); - } - })); - }); - - await rmDir(path.join(buildPath, '..')); -} + fs.writeFileSync(entryDestination, patchedSource, 'utf-8'); + console.log('server.js copied and chromeExecutablePath replaced successfully.'); + } + else { + console.error('Error: ./src/server.js does not exist.'); + } -async function createExecutables() { - console.log('Create server executables'); - await exec(['./src/server.js', '--out-path', buildPath]); + return entryDestination; } -function mkDir(dir) { - return new Promise((resolve, reject) => { - mkdirp(dir, function(err) { - if (err) reject(err); - else resolve(); - }); - }); +async function clearEntryFile(entryDestination) { + try { + if (fs.existsSync(entryDestination)) { + console.log('Removing entry destination...'); + fs.unlinkSync(entryDestination); + console.log('Entry destination removed successfully.'); + } + else { + console.log('No entry destination to remove.'); + } + } + catch (error) { + console.error('Failed to remove entry destination:', error); + } } -function rmDir(dir) { - return new Promise((resolve, reject) => { - rimraf(dir, resolve); - }); +// Main build function +async function build() { + try { + console.log('Starting build process...'); + + await prepareDirectories(); + const chromeExecutablePath = await downloadChrome(); + await copyCertificates(); + const entryFilePath = await patchEntryFile(chromeExecutablePath); + const executablePath = await buildExecutable(entryFilePath); + await clearEntryFile(entryFilePath); + + console.log(`\nBuild completed successfully!`); + console.log(`Executable: ${executablePath}`); + } + catch (error) { + console.error('Build failed:', error); + process.exit(1); + } } -build().then(() => console.log('Build finished successfully!')); +// Run the build +build().then(() => {}); diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 0000000..fad4f10 --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,25 @@ +# Frequently Asked Questions + +## Does it support authentication? + +No, this project does not implement any kind of authentication. + +## Does it support external/cloud storage? + +No, this project does not implement any kind of external storage. Files are stored locally or in memory for a one-time +use. + +### Exported PDF/PNG doesn't look correct + +Most likely server couldn't get access to the resources. See [architecture](architecture.md) guide for detailed +information, [resources section](#CORS) for short summary and [troubleshooting](troubleshooting.md) guide for +debugging tips. + +### PDF/PNG file is not generated + +Most likely there is a problem on the server, see [troubleshooting](troubleshooting.md) guide for help. + +### Cannot export using HTTPS + +You can see errors like `NET::ERR_CERT_AUTHORITY_INVALID` or CORS exception (in Firefox). See +[Make browser to accept self-signed certificate](building.md#self-signed-certificate) section for more info. diff --git a/docs/architecture.md b/docs/architecture.md index e0bbbbb..f4cd755 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -302,22 +302,3 @@ regular client which is browsing `http://production.org/app` Of course, we can let PDF export server to have a local copy of resources like in the scenario with local web server and remove export server. - -## Troubleshooting - -It is difficult to see what's going on in the export server - it is remote, it uses headless -browser. Before diving into debugging actual server we may try using extensive logging: - -```shell -$ node src/server.js --verbose -``` - -This config will log page errors and if there were problems loading resources you can see similar message -in the log file: - -``` -2022-05-13T14:58:47.745Z error: [Worker@3qj8yt1k45egung7cd13n] Page 3/50 reports: Access to font at -'http://localhost/grid/resources/fonts/Lato-Regular.woff2' from origin 'null' has been blocked by CORS policy: No -'Access-Control-Allow-Origin' header is present on the requested resource. -location: about:blank -``` diff --git a/docs/building.md b/docs/building.md index 5b47e08..dd404d7 100644 --- a/docs/building.md +++ b/docs/building.md @@ -1,225 +1,103 @@ -# Building the server - -## Installation - -To install the standalone export server, NodeJS, Python 2.7 and the NPM package manager are required. - -Depending on your system you can download them here: - -https://nodejs.org/en/ -https://www.npmjs.com/get-npm - -Python: - +# Build PDF Export Server into single executable + +This guide explains how to build the PDF Export Server project using the `build.js` file. The process involves running +the `build.js` script, which automates various tasks to compile the project into a single executable. The steps outlined +below detail each aspect of the process, including the tasks performed by the script and the supported Node.js versions. + +--- + +## Prerequisites + +1. **Node.js**: + Ensure you have Node.js installed on your system. This project supports the latest stable releases starting from + **20.x.x** which are also supported by the [@yao-pkg/pkg-fetch package](https://github.com/yao-pkg/pkg-fetch/) + + You can check your current Node.js version by running: + ```bash + node -v + ``` + Upgrade or install a compatible version if needed: + [Download Node.js here](https://nodejs.org/). + +2. **Dependencies**: + Before building, ensure all project dependencies have been installed by running: + ```bash + npm install + ``` +--- + +## Building the Project + +To build the project, run: + ```bash + npm run build + ``` +This will initiate the build process and generate executable with required assets, and put it all to the `/dist` folder. +That folder has the following structure: ``` -npm install --global --production windows-build-tools +- dist + - chrome // Chrome distribution downloaded by puppeteer + - log // Target directory to log server events + - cert // Optional directory to provide server with SSL certificates + pdf-export-server* // executable ``` -Or download the 2.7.x package from https://www.python.org/ - +### Building for a target platform -```bash -cd ./server -npm install node-pre-gyp -g -npm install +It is possible to build executable for a different target platform. By default, script will use current platform. To +use a different platform you can run corresponding command: +```shell +npm run build:win +npm run build:linux +npm run build:macos ``` -## Requirements - -The solution main requirements are listed below. For the full list of required modules please check `package.json` file contents. - -**NOTE:** Please read the required libraries licensing info on the projects web-sites. - - -### Puppeteer - -The solution uses puppeteer module to generate PDF and PNG files: - -https://www.npmjs.com/package/puppeteer - -When building, puppeteer versions for Windows, Linux and Mac are downloaded and placed into the bin directory in the chromium folder. - -We recommend using puppeteer@1.17.0 (default) as it generates PDFs faster than later versions. - -### HummusJS - -PDF streams are concatenated with the "HummusJS" module: - -https://www.npmjs.com/package/hummus - -The HummusJS module contains a binary which need to be shipped with the server executable. The binary is placed under: - - ./bin/{os}/hummus/binding - -Binaries are built for node 8.9.4, so it is recommended to build server using -same node version. If you have different node version, you might consider -[Node version manager](https://github.com/creationix/nvm) to switch node -to 8.9.4 and back. Or you can rebuild hummus binary for required platform and your local node version. - -When the binary does not fit the requirements of your operating system then replace the corresponding binary with the one which is built with `npm install` - - ./node_modules/hummus/binding - -### Merge-img - -PNG streams are concatenated with "merge-img" module: - -https://www.npmjs.com/package/merge-img - -### SSL certificate (if you are running HTTPS) - -If you want to run export server on HTTPS, you will need a certificate. A self-signed certificate is provided, it can be -regenerated like this: - - openssl genrsa -out cert/server.key 2048 - openssl req -new -x509 -key src/cert/server.key -out src/cert/server.crt -days 3650 -subj /CN=localhost - - -#### Make browser accept a self-signed certificate - -Browsers tend to complain about self-signed certificates and when you are trying to access export server via HTTPS -you might get errors like `NET::ERR_CERT_AUTHORITY_INVALID` in Chrome and CORS exception in Firefox. - -##### Chrome -Enable this flag: `chrome://flags/#allow-insecure-localhost`. - -##### Firefox -Navigate to `Options -> Certificates -> View Certificates...`, open tab `Servers` and add exception for export -server address - -### Pkg - -The solution is wrapped into an executable with "pkg" module: - -https://www.npmjs.com/package/pkg - -On build the "pkg" module wraps the `./src/server.js` into an OS specific executable. The output is copied to: - - ./bin/{os}/ - - -## Building the solution - -When all requirements are met. Feel free to adjust the code to your needs and build the solution: - - node build.js - -**NOTE**: This won't work on Windows out of the box, some additional -tweaking required. See [below](#windows) - -The output is placed in the bin directory having the following structure: - - - {os} - - cert - - server.crt - - server.key - - chromium - - {os}-{version} - - hummus - - binding - -In the `cert` folder you can place your security certificates when running the server as https. - -The hummus binary is defaultly shipped and build for Linux/Windows and Mac. When the binary does not fit the requirements of the specific operating system, then copy the binary from the `node_modules` folder as described above. - -## Known problems - -1. PNG export doesn't work in WSL environment (see [details](#buildinginwsl) below). -2. WSL cannot properly build server for Windows (use Windows version of node to build it). - -When encountering any problems on the build: - -- Check the requirements based on the used packages, like `nodejs -v` is 8+. -- Delete the `node_modules` folder, -- Delete the `cert` and `chromium` folders in the bin folder (except the HummusJS binaries - else you have to recopy the hummus binding from the `node_modules` folder). -- Delete the server executables in the bin folder. - -## Starting the node server - -The server can by executed as a node script: - - cd ./server - node src/server.js - - - - -## Windows - -Since Microsoft introduced [WSL](https://docs.microsoft.com/en-us/windows/wsl/about) -developers can choose which NodeJS to use: Linux version in WSL or Windows version in host OS. Below we discuss both options. - -### Building server with node for windows - -There are two obstacles to build server using NodeJS: - -1. Default group policy, which doesn't allow users to make symlinks. -2. Node cannot rename certain file. - -#### Symlinks - -Since build script relies on making symlinks, user should have this -privilege. You can either run build with administrator privilege or (better) -allow yourself to make symlinks. - -To grant yourself right to create symlinks you need to adjust corresponding -group policy: - -1. Press *Win + R* and type *gpedit.msc* If you are using Windows 10 - you might note, that `gpedit` is missing. See [below](#gpedit) for solution. -2. Navigate to *Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment*. -3. Add users whom you trust (like yourself) to make symlinks. -4. Logout from system and log back in for group policy to take effect. - -#### Node cannot rename certain file - -At some point during the build process you might see exception of the -following nature: - Error: EPERM: operation not permitted, rename +--- -There is a similar [issue on github](https://github.com/react-community/create-react-native-app/issues/191) -which shows that multiple users experience this problem with anti-virus -software enabled. There might be a Windows Defender enabled on your machine and then disabling it fixes the issue. But disabling anti-virus completely is not safe. You might consider adding *node.exe* to the list of exceptions for your anti-virus software. -[Here](https://blog.johnnyreilly.com/2017/06/windows-defender-step-away-from-npm.html) -is a short sum-up of this issue and steps to fix Windows Defender. +## What Happens Under the Hood? - +The `build.js` file orchestrates the build process by automating several tasks: -#### Enabling gpedit in Windows 10 +1. **Environment Setup**: + - The script prepares the environment by ensuring required files, directories, and configurations are in place. + - It checks for any missing dependencies, validates files, and creates temporary folders as needed. -You can find solution on the Internet in no time, but if you prefer not -to download executables or scripts from there, here is alternative -solution (doing basically the same thing, but you can actually see that -nothing criminal is going on) +2. **Bundling the Code**: + - The script uses [@yao-pkg/pkg](https://www.npmjs.com/package/@yao-pkg/pkg) to bundle the entire Node.js + project into a single executable binary. This step includes: + - Packaging dependencies. + - Including relevant assets and configuration files. -1. Make new .bat file and paste this contents [source(russian language)](https://remontka.pro/cannot-find-gpedit-msc/) +3. **Output Generation**: + - The build script generates a final executable file (e.g., `pdf-export-server.exe` for Windows or a Linux/MacOS + - binary), which can be shared and executed without needing explicit Node.js runtime. - @echo off - dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >find-gpedit.txt - dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>find-gpedit.txt - echo Installing gpedit.msc - for /f %%i in ('findstr /i . find-gpedit.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i" - echo Gpedit installed - pause +--- -2. Now run this .bat file with administrator privileges +## Additional Notes +- **Output Directory**: + The final executable and additional build outputs are stored in a dedicated `dist` directory, which you can locate + after the build completes. - +- **Cross-Platform Builds**: + If you intend to generate builds for multiple operating systems (e.g., Windows, macOS, Linux), ensure your environment + supports cross-compilation. -### Building server with NodeJS in WSL +--- -WSL aims to work seamlessly, and it mostly does, but there are -rough edges still (like puppeteer support). +## Testing the Build Output -Server can be built/run in WSL, with few limitations. See compatibility table below: +1. After the build process finishes, navigate to the directory containing the executable (e.g., `dist/`). +2. Run the executable to ensure it performs as expected: + ```bash + ./pdf-export-server + ``` -| Built on | Running on WSL | Running on Windows | Running on Linux | -|----------|:--------------------:|:------------------:|:----------------:| -| WSL | PDF only w/o sandbox | Doesn't work | PDF/PNG | -| Windows | PDF only w/o sandbox | PDF/PNG | PDF/PNG | -| Linux | PDF only w/o sandbox | PDF/PNG | PDF/PNG | +Any issues encountered during execution can be resolved by inspecting the logs or reexamining the build setup. -Run server inside WSL with no sandbox, e.g.: +--- - ./server -h 8080 --no-sandbox +By following this guide, you should be able to successfully build the project into a single executable with ease. If you +encounter any specific issues, check the logs during the build or review the `build.js` script for deeper insights into +the underlying process. \ No newline at end of file diff --git a/docs/compatibility.md b/docs/compatibility.md new file mode 100644 index 0000000..42cb97e --- /dev/null +++ b/docs/compatibility.md @@ -0,0 +1,23 @@ +## Compatibility + +| pdf-export-server | ExtScheduler/ExtGantt | Bryntum Grid/Scheduler/Gantt | +|-------------------|---|---| +| 1.0.0 | * | * | +| 1.0.1 | * | * | +| 2.0.0 | * | * | +| 2.1.0 | * | * | + +## Reverse compatibility + +| Bryntum Grid/Scheduler/Gantt | pdf-export-server | +|-----------------------------|------------------| +| < 6.1.6 | * | +| 6.1.6 => | 2.0.0 | +| 6.3.0 => | 2.1.0 | + +## Releases + +### 2.1.0 + +This release starts supporting custom paper format sent from the client. This is the minimum version of the PDF export +server required by the Bryntum 6.3.x packages \ No newline at end of file diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000..9db474f --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,79 @@ +# Configuration + +You can specify application options in the app.config.js or by passing them from the CLI. + +```shell +pdf-export-server$ node ./src/server.js --help + +Usage: ./server [OPTION] + + -h, --http=PORT Start http server on port + -H, --https=PORT Start https server on port + -c, --cors=HOST CORS origin, default value "*". Set to "false" to disable CORS + -m, --maximum=SIZE Maximum upload size (default 50mb) + -r, --resources=PATH The absolute path to the resource directory. This path will be accessible via the webserver + --max-workers=WORKERS Maximum amount of workers (puppeteer instances) (default: 5) + --level=LEVEL Specify log level (error, warn, verbose). Default "error" + --timeout=TIMEOUT Request timeout time in seconds + --quick Provide to only wait for page load event + --no-sandbox Provide to pass no-sandbox argument to chromium + --no-config Provide to ignore app.config.js + --verbose Alias for --level=verbose + --help Show help message +``` + +The following command starts a server with HTTP and HTTPS on ports 8080 and 8081 respectively: + +```shell +pdf-export-server$ node ./src/server.js -h 8080 -H 8081 -m 100mb +``` + +The flag -m above extends the upload capacity to 100 MB. + +##### Workers + +To speed up the export we parallelize it using puppeteer instances (workers). It is slower than using tabs, but much +easier to restart the export if browser or tab fails. By default, there are 5 workers which feel fine on machines with +as much as 1 GB RAM. In general, it takes about 2-3 seconds to generate one PDF page, depending on network speed and +overall system performance. Workers amount is not limited. + +##### Resources + +When sending HTML fragments to the server, the server launches puppeteer and tries to generate PDF-files based on the +provided input. In case the CSS stylesheets are not accessible to the server (for example the resources are protected +by a login session), you can make use of the built-in web-server to serve resources. + +In this case configure the export feature with `translateURLsToAbsolute`. + +```javascript +new Grid({ + features : { + pdfExport : { + exportServer : 'http://export-host:8081', + translateURLsToAbsolute : 'http://export-host:8081/resources' + } + } +}) +``` + +This tells the export plugin to change all the used stylesheet URLs to be fetched from +`http://export-host:8081/resources`. Then copy all the resources your application uses to the export server keeping the +folder hierarchy. After this map the virtual `http://export-host:8081/resources` to the real folder on your export +server: + +```shell +pdf-export-server$ node ./src/server.js -r /web/application/styles +``` + +The path can be either absolute (`/web/application/styles`) or relative (`web/application/styles`), +for example when you start the export server with the export demo locally. + +So if you're running the export demo from the localhost, for example `http://lh/bryntum-suite/grid/examples/export/`, +you need to copy the folders starting from the `bryntum-suite` to the `examples/_shared/server/web/application/styles`, +keeping only resources the demo uses (css files, fonts etc.). + +##### Security + +Be careful which folder to set open with the -r option; php, aspx/cs, config files won't be interpreted but served as +download when hit. Only point folders which contain resources needed for generating the page, like fonts, CSS or image +files. \ No newline at end of file diff --git a/docs/docker.md b/docs/docker.md index e8835aa..c86b60f 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -3,10 +3,10 @@ Export server can be run as a Docker container. See `Dockerfile` and `docker-compose.yml` in the server directory. ## Starting container -To start Docker container run: +To start Docker container run this in the export server root directory: -``` -pdf-export-server$ docker-compose up -d --build +```shell +docker-compose up -d --build ``` Docker container will expose ports 8080 and 8081 for HTTP and HTTPS connections respectively. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 0000000..2f87f59 --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,39 @@ +# Troubleshooting + +### Check logs + +It is difficult to see what's going on in the export server - it is remote, it uses headless +browser. Before diving into debugging actual server we may try using extensive logging: + +```shell +$ node src/server.js --verbose +``` + +This config will log page errors and if there were problems loading resources you can see similar message +in the log file: + +``` +2022-05-13T14:58:47.745Z error: [Worker@3qj8yt1k45egung7cd13n] Page 3/50 reports: Access to font at +'http://localhost/grid/resources/fonts/Lato-Regular.woff2' from origin 'null' has been blocked by CORS policy: No +'Access-Control-Allow-Origin' header is present on the requested resource. +location: about:blank +``` + +### Inspect outgoing request + +Sometimes paths to resources might be generated incorrectly. If your PDF does not look correct, this is recommended +first step to take. + +1. Open network tab +2. Run export +3. Find outgoing request +4. Open `Payload` tab +5. Expand object, copy HTML string +6. Create file on a local filesystem, paste HTML string +7. Save file with `.html` extension +8. Open this file in a browser, preferably via a web server (there are a number of simple web server for static files, +e.g. [serve](https://www.npmjs.com/package/serve) package on the NPM) + +The page you will be looking at in a browser is similar to what a headless browser on the server will. You can see which +resource were not loaded and why, inspect paths etc. It can take several iterations to configure your JS app to generate +correct HTML at that point export server should handle it too. \ No newline at end of file diff --git a/downloader.js b/downloader.js deleted file mode 100644 index 5dd779b..0000000 --- a/downloader.js +++ /dev/null @@ -1,278 +0,0 @@ -/** - * Copyright 2017 Google Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const os = require('os'); -const fs = require('fs'); -const path = require('path'); -const extract = require('extract-zip'); -const util = require('util'); -const URL = require('url'); -const removeRecursive = require('rimraf'); -// @ts-ignore -const ProxyAgent = require('https-proxy-agent'); -// @ts-ignore -const getProxyForUrl = require('proxy-from-env').getProxyForUrl; - -const DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com'; -const downloadURLs = { - linux: '%s/chromium-browser-snapshots/Linux_x64/%d/chrome-linux.zip', - mac: '%s/chromium-browser-snapshots/Mac/%d/chrome-mac.zip', - win32: '%s/chromium-browser-snapshots/Win/%d/chrome-win.zip', - win64: '%s/chromium-browser-snapshots/Win_x64/%d/chrome-win.zip' -}; - -// Project root will be different for node6-transpiled code. -const PROJECT_ROOT = fs.existsSync(path.join(__dirname, '.', 'package.json')) ? path.join(__dirname, './node_modules/puppeteer') : path.join(__dirname, '..', '../node_modules/puppeteer'); - -class Downloader { - /** - * @param {string} downloadsFolder - */ - constructor(downloadsFolder) { - this._downloadsFolder = downloadsFolder; - this._downloadHost = DEFAULT_DOWNLOAD_HOST; - } - - /** - * @return {string} - */ - static defaultRevision() { - return require(path.join(PROJECT_ROOT, 'package.json')).puppeteer.chromium_revision; - } - - /** - * @return {!Downloader} - */ - static createDefault() { - const downloadsFolder = path.join(PROJECT_ROOT, '.local-chromium'); - return new Downloader(downloadsFolder); - } - - /** - * @param {string} downloadHost - */ - setDownloadHost(downloadHost) { - this._downloadHost = downloadHost; - } - - /** - * @return {!Array} - */ - supportedPlatforms() { - return Object.keys(downloadURLs); - } - - /** - * @return {string} - */ - currentPlatform() { - const platform = os.platform(); - if (platform === 'darwin') - return 'mac'; - if (platform === 'linux') - return 'linux'; - if (platform === 'win32') - return os.arch() === 'x64' ? 'win64' : 'win32'; - return ''; - } - - /** - * @param {string} platform - * @param {string} revision - * @return {!Promise} - */ - canDownloadRevision(platform, revision) { - console.assert(downloadURLs[platform], 'Unknown platform: ' + platform); - - const url = util.format(downloadURLs[platform], this._downloadHost, revision); - - let resolve; - const promise = new Promise(x => resolve = x); - const request = httpRequest(url, 'HEAD', response => { - resolve(response.statusCode === 200); - }); - request.on('error', error => { - console.error(error); - resolve(false); - }); - return promise; - } - - /** - * @param {string} platform - * @param {string} revision - * @param {?function(number, number)} progressCallback - * @return {!Promise} - */ - downloadRevision(platform, revision, progressCallback) { - let url = downloadURLs[platform]; - console.assert(url, `Unsupported platform: ${platform}`); - url = util.format(url, this._downloadHost, revision); - const zipPath = path.join(this._downloadsFolder, `download-${platform}-${revision}.zip`); - const folderPath = this._getFolderPath(platform, revision); - if (fs.existsSync(folderPath)) - return; - if (!fs.existsSync(this._downloadsFolder)) - fs.mkdirSync(this._downloadsFolder); - return downloadFile(url, zipPath, progressCallback) - .then(() => extractZip(zipPath, folderPath)) - .catch(err => err) - .then(err => { - if (fs.existsSync(zipPath)) - fs.unlinkSync(zipPath); - if (err) - throw err; - }); - } - - /** - * @return {!Array} - */ - downloadedRevisions() { - if (!fs.existsSync(this._downloadsFolder)) - return []; - const fileNames = fs.readdirSync(this._downloadsFolder); - return fileNames.map(fileName => parseFolderPath(fileName)).filter(revision => !!revision); - } - - /** - * @param {string} platform - * @param {string} revision - * @return {!Promise} - */ - removeRevision(platform, revision) { - console.assert(downloadURLs[platform], `Unsupported platform: ${platform}`); - const folderPath = this._getFolderPath(platform, revision); - console.assert(fs.existsSync(folderPath)); - return new Promise(fulfill => removeRecursive(folderPath, fulfill)); - } - - /** - * @param {string} platform - * @param {string} revision - * @return {!{revision: string, folderPath: string, executablePath: string, downloaded: boolean}} - */ - revisionInfo(platform, revision) { - console.assert(downloadURLs[platform], `Unsupported platform: ${platform}`); - const folderPath = this._getFolderPath(platform, revision); - let executablePath = ''; - if (platform === 'mac') - executablePath = path.join(folderPath, 'chrome-mac', 'Chromium.app', 'Contents', 'MacOS', 'Chromium'); - else if (platform === 'linux') - executablePath = path.join(folderPath, 'chrome-linux', 'chrome'); - else if (platform === 'win32' || platform === 'win64') - executablePath = path.join(folderPath, 'chrome-win32', 'chrome.exe'); - else - throw 'Unsupported platform: ' + platform; - return { - revision, - executablePath, - folderPath, - downloaded: fs.existsSync(folderPath) - }; - } - - /** - * @param {string} platform - * @param {string} revision - * @return {string} - */ - _getFolderPath(platform, revision) { - return path.join(this._downloadsFolder, platform + '-' + revision); - } -} - -module.exports = Downloader; - -/** - * @param {string} folderPath - * @return {?{platform: string, revision: string}} - */ -function parseFolderPath(folderPath) { - const name = path.basename(folderPath); - const splits = name.split('-'); - if (splits.length !== 2) - return null; - const [platform, revision] = splits; - if (!downloadURLs[platform]) - return null; - return {platform, revision}; -} - -/** - * @param {string} url - * @param {string} destinationPath - * @param {?function(number, number)} progressCallback - * @return {!Promise} - */ -function downloadFile(url, destinationPath, progressCallback) { - let fulfill, reject; - - const promise = new Promise((x, y) => { fulfill = x; reject = y; }); - - const request = httpRequest(url, 'GET', response => { - if (response.statusCode !== 200) { - const error = new Error(`Download failed: server returned code ${response.statusCode}. URL: ${url}`); - // consume response data to free up memory - response.resume(); - reject(error); - return; - } - const file = fs.createWriteStream(destinationPath); - file.on('finish', () => fulfill()); - file.on('error', error => reject(error)); - response.pipe(file); - const totalBytes = parseInt(/** @type {string} */ (response.headers['content-length']), 10); - if (progressCallback) - response.on('data', onData.bind(null, totalBytes)); - }); - request.on('error', error => reject(error)); - return promise; - - function onData(totalBytes, chunk) { - progressCallback(totalBytes, chunk.length); - } -} - -/** - * @param {string} zipPath - * @param {string} folderPath - * @return {!Promise} - */ -function extractZip(zipPath, folderPath) { - return new Promise(fulfill => extract(zipPath, {dir: folderPath}, fulfill)); -} - -function httpRequest(url, method, response) { - /** @type {Object} */ - const options = URL.parse(url); - options.method = method; - - const proxyURL = getProxyForUrl(url); - if (proxyURL) { - /** @type {Object} */ - const parsedProxyURL = URL.parse(proxyURL); - parsedProxyURL.secureProxy = parsedProxyURL.protocol === 'https:'; - - options.agent = new ProxyAgent(parsedProxyURL); - options.rejectUnauthorized = false; - } - - const driver = options.protocol === 'https:' ? 'https' : 'http'; - const request = require(driver).request(options, response); - request.end(); - return request; -} diff --git a/package-lock.json b/package-lock.json index 4c08dde..548bdfe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1655 +1,4670 @@ { "name": "@bryntum/pdf-export-server", - "version": "1.0.0", - "lockfileVersion": 1, + "version": "2.3.4", + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==" - }, - "@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", - "convert-source-map": "^1.7.0", + "packages": { + "": { + "name": "@bryntum/pdf-export-server", + "version": "2.3.4", + "license": "MIT", + "dependencies": { + "@types/express": "~5.0.0", + "body-parser": "~1.20.3", + "command-line-args": "~6.0.1", + "command-line-usage": "~7.0.3", + "express": "~4.22.1", + "express-request-id": "~3.0.0", + "join-images": "~1.1.5", + "memory-streams": "~0.1.3", + "mkdirp": "~0.5.6", + "muhammara": "~6.0.3", + "nanoid": "~3.3.11", + "puppeteer": "~24.36.1", + "serve-static": "~1.16.2", + "winston": "~3.2.1", + "winston-daily-rotate-file": "~4.4.1", + "ws": "~8.19.0" + }, + "bin": { + "pdf-export-server": "bin/pdf-export-server" + }, + "devDependencies": { + "@babel/preset-env": "^7.29.0", + "@yao-pkg/pkg": "~6.6.0", + "jest": "~30.2.0", + "move-file": "~1.0.0", + "recursive-copy": "^2.0.14", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", - "requires": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - }, - "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "requires": { - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" - }, - "@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" - } - }, - "@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz", + "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.11" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } + "optional": true } } }, - "@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==" + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@babel/plugin-syntax-async-generators": { + "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-bigint": { + "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-meta": { + "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", - "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", - "debug": "^4.1.0", - "globals": "^11.1.0" + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" - }, - "@jest/console": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", - "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", - "requires": { - "@jest/types": "^28.1.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", - "slash": "^3.0.0" + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/core": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.0.tgz", - "integrity": "sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==", - "requires": { - "@jest/console": "^28.1.0", - "@jest/reporters": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.0.2", - "jest-config": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-resolve-dependencies": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "jest-watcher": "^28.1.0", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "dev": true, + "license": "MIT", "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - } + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", - "requires": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", - "@types/node": "*", - "jest-mock": "^28.1.0" + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==", - "requires": { - "expect": "^28.1.0", - "jest-snapshot": "^28.1.0" + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/expect-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.0.tgz", - "integrity": "sha512-5BrG48dpC0sB80wpeIX5FU6kolDJI4K0n5BM9a5V38MGx0pyRvUBSS0u2aNTdDzmOrCjhOg8pGs6a20ivYkdmw==", - "requires": { - "jest-get-type": "^28.0.2" + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", - "requires": { - "@jest/types": "^28.1.0", - "@sinonjs/fake-timers": "^9.1.1", - "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" - } - }, - "@jest/globals": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.0.tgz", - "integrity": "sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw==", - "requires": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/types": "^28.1.0" - } - }, - "@jest/reporters": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.0.tgz", - "integrity": "sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA==", - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", - "@jridgewell/trace-mapping": "^0.3.7", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.0" - } - }, - "@jest/schemas": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", - "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", - "requires": { - "@sinclair/typebox": "^0.23.3" - } - }, - "@jest/source-map": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.0.2.tgz", - "integrity": "sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.7", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", - "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", - "requires": { - "@jest/console": "^28.1.0", - "@jest/types": "^28.1.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz", - "integrity": "sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==", - "requires": { - "@jest/test-result": "^28.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "slash": "^3.0.0" + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@emnapi/core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", + "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", + "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.2.0", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.2.0", + "jest-config": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-resolve-dependencies": "30.2.0", + "jest-runner": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "jest-watcher": "30.2.0", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", + "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-mock": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "30.2.0", + "jest-snapshot": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", + "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", + "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/types": "30.2.0", + "jest-mock": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", + "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", + "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", + "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.2.0", + "@jest/types": "30.2.0", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", + "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", + "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.1", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/types": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.2.tgz", + "integrity": "sha512-GBY0+2lI9fDrjgb5dFL9+enKXqyOPok9PXg/69NVkjW3bikbK9RQrNrI3qccQXmDNN7ln4j/yL89Qgvj/tfqrw==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.3", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@puppeteer/browsers/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@puppeteer/browsers/node_modules/tar-fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" } }, - "@jest/transform": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.0.tgz", - "integrity": "sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA==", - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.0", - "@jridgewell/trace-mapping": "^0.3.7", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" + "node_modules/@puppeteer/browsers/node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, - "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "node_modules/@puppeteer/browsers/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + "node_modules/@sinclair/typebox": { + "version": "0.34.48", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", + "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", + "dev": true, + "license": "MIT" }, - "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" } }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sinclair/typebox": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", - "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==" - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "requires": { - "type-detect": "4.0.8" - } + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" }, - "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "requires": { - "@sinonjs/commons": "^1.7.0" + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" } }, - "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "requires": { + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { "@babel/types": "^7.0.0" } }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "requires": { + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, - "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "requires": { - "@babel/types": "^7.3.0" + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" } }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "requires": { + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { "@types/node": "*" } }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { "@types/istanbul-lib-coverage": "*" } }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "requires": { + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { "@types/istanbul-lib-report": "*" } }, - "@types/node": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", - "integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==" + "node_modules/@types/node": { + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz", + "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } }, - "@types/prettier": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.1.tgz", - "integrity": "sha512-XFjFHmaLVifrAKaZ+EKghFHtHSUonyw8P2Qmy2/+osBnrKbH9UYtlK10zg8/kCt47MFilll/DEDKy3DHfJ0URw==" + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "requires": { + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, + "license": "MIT", + "dependencies": { "@types/yargs-parser": "*" } }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", "optional": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "accepts": { + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@yao-pkg/pkg": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@yao-pkg/pkg/-/pkg-6.6.0.tgz", + "integrity": "sha512-3/oiaSm7fS0Fc7dzp22r9B7vFaguGhO9vERgEReRYj2EUzdi5ssyYhe1uYJG4ec/dmo2GG6RRHOUAT8savl79Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "@yao-pkg/pkg-fetch": "3.5.24", + "into-stream": "^6.0.0", + "minimist": "^1.2.6", + "multistream": "^4.1.0", + "picocolors": "^1.1.0", + "picomatch": "^4.0.2", + "prebuild-install": "^7.1.1", + "resolve": "^1.22.10", + "stream-meter": "^1.0.4", + "tar": "^7.4.3", + "tinyglobby": "^0.2.11", + "unzipper": "^0.12.3" + }, + "bin": { + "pkg": "lib-es5/bin.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@yao-pkg/pkg-fetch": { + "version": "3.5.24", + "resolved": "https://registry.npmjs.org/@yao-pkg/pkg-fetch/-/pkg-fetch-3.5.24.tgz", + "integrity": "sha512-FPESCH1uXCYui6jeDp2aayWuFHR39w+uU1r88nI6JWRvPYOU64cHPUV/p6GSFoQdpna7ip92HnrZKbBC60l0gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.6", + "picocolors": "^1.1.0", + "progress": "^2.0.3", + "semver": "^7.3.5", + "tar-fs": "^2.1.1", + "yargs": "^16.2.0" + }, + "bin": { + "pkg-fetch": "lib-es5/bin.js" + } + }, + "node_modules/@yao-pkg/pkg-fetch/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@yao-pkg/pkg-fetch/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@yao-pkg/pkg-fetch/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@yao-pkg/pkg-fetch/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { + "license": "MIT", + "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { + "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { + "license": "MIT", + "dependencies": { "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "argparse": { + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "sprintf-js": "~1.0.2" } }, - "array-differ": { + "node_modules/array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/array-differ": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "array-flatten": { + "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "array-uniq": { + "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "arrify": { + "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "asap": { + "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async": { + "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { + "license": "MIT", + "dependencies": { "lodash": "^4.17.14" } }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "node_modules/b4a": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "babel-jest": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.0.tgz", - "integrity": "sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w==", - "requires": { - "@jest/transform": "^28.1.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.0.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", + "node_modules/babel-jest": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", + "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "30.2.0", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-0" } }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "requires": { + "node_modules/babel-plugin-istanbul": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "dev": true, + "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], + "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" } }, - "babel-plugin-jest-hoist": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz", - "integrity": "sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==", - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "node_modules/babel-plugin-jest-hoist": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", + "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/babel__core": "^7.20.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "requires": { + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.6", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, + "license": "MIT", + "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, - "babel-preset-jest": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz", - "integrity": "sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==", - "requires": { - "babel-plugin-jest-hoist": "^28.0.2", - "babel-preset-current-node-syntax": "^1.0.0" + "node_modules/babel-preset-jest": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", + "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } } }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "node_modules/bare-fs": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.4.tgz", + "integrity": "sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "node_modules/bare-os": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.7.0.tgz", + "integrity": "sha512-64Rcwj8qlnTZU8Ps6JJEdSmxBEUGgI7g8l+lMtsJLl4IsfTcHMTfJ188u2iGV6P6YPRZrtv72B2kjn+hp+Yv3g==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.0.tgz", + "integrity": "sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, - "bignumber.js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", - "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=" + "node_modules/basic-ftp": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz", + "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } }, - "bl": { + "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { + "license": "MIT", + "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "bmp-js": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.1.tgz", - "integrity": "sha1-WtAUcJnROp84qnuZrx1ueGZu038=" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - } - }, - "bser": { + "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { + "dev": true, + "license": "Apache-2.0", + "dependencies": { "node-int64": "^0.4.0" } }, - "buffer": { + "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, - "buffer-crc32": { + "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "node_modules/buffer/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "callsites": { + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "camelcase": { + "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "caniuse-lite": { - "version": "1.0.30001340", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001340.tgz", - "integrity": "sha512-jUNz+a9blQTQVu4uFcn17uAD8IDizPzQkIKh3LCJfg9BkyIqExYYdyc/ZSlWUSKb8iYiXxKsxbv4zYSvkqjrxw==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001774", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz", + "integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "chalk": { + "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { + "license": "MIT", + "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "char-regex": { + "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chromium-bidi": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.0.1.tgz", + "integrity": "sha512-c+RLxH0Vg2x2syS9wPw378oJgiJNXtYXUvnVAldUlt5uaHekn0CCU7gPksNgHjrH1qFhmjVXQj4esvuthuC7OQ==", + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } }, - "ci-info": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz", - "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==" + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + "node_modules/cjs-module-lexer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "dev": true, + "license": "MIT" }, - "cliui": { + "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { + "dev": true, + "license": "ISC", + "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, - "co": { + "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "node_modules/collect-v8-coverage": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "peer": true, "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - } + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" } }, - "color-convert": { + "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { + "license": "MIT", + "dependencies": { "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, - "color-string": { + "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "requires": { + "license": "MIT", + "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "colornames": { + "node_modules/colornames": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + "integrity": "sha512-/pyV40IrsdulWv+wFPmERh9k/mjsPZ64yUMDmWrtj/k1nmgrzzIENWKdaVKyBbvFdQWqkcaRxr+polCo3VMe7A==", + "license": "MIT" }, - "colorspace": { + "node_modules/colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "requires": { + "license": "MIT", + "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" + "node_modules/colorspace/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "node_modules/colorspace/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "node_modules/colorspace/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "node_modules/command-line-args": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz", + "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==", + "license": "MIT", + "dependencies": { + "array-back": "^6.2.2", + "find-replace": "^5.0.2", + "lodash.camelcase": "^4.3.0", + "typical": "^7.2.0" + }, + "engines": { + "node": ">=12.20" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true + } + } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "node_modules/command-line-usage": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", + "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", + "license": "MIT", + "dependencies": { + "array-back": "^6.2.2", + "chalk-template": "^0.4.0", + "table-layout": "^4.1.0", + "typical": "^7.1.1" + }, + "engines": { + "node": ">=12.20.0" + } }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" }, - "cp-file": { + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cp-file": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-5.0.0.tgz", - "integrity": "sha1-vHAP0wyjLSTUbH+wK5kuQ1/FqXg=", - "requires": { + "integrity": "sha512-08tcP4CfMVIJGh6vIvG6WSxAJPFVw+DSdfim10azS0F9m36pi+wCYqvlIXk4lSz/Q9N/gRw7zlKQLDnYE6M8Eg==", + "dev": true, + "license": "MIT", + "dependencies": { "graceful-fs": "^4.1.2", "make-dir": "^1.0.0", "nested-error-stacks": "^2.0.0", "pify": "^3.0.0", "safe-buffer": "^5.0.1" }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - } + "engines": { + "node": ">=4" } }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" + "node_modules/cp-file/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "engines": { + "node": ">= 14" } }, - "debug": { + "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { + "license": "MIT", + "dependencies": { "ms": "2.0.0" } }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", + "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" - }, - "deep-extend": { + "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } }, - "detect-newline": { + "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "devtools-protocol": { - "version": "0.0.1011705", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1011705.tgz", - "integrity": "sha512-OKvTvu9n3swmgYshvsyVHYX0+aPzCoYUnyXUacfQMmFtBtBKewV/gT4I9jkAbpTqtTi2E4S9MXLlvzBDUlqg0Q==" + "node_modules/devtools-protocol": { + "version": "0.0.1551306", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1551306.tgz", + "integrity": "sha512-CFx8QdSim8iIv+2ZcEOclBKTQY6BI1IEDa7Tm9YkwAXzEWFndTEzpTo5jAUhSnq24IC7xaDw0wvGcm96+Y3PEg==", + "license": "BSD-3-Clause" }, - "diagnostics": { + "node_modules/diagnostics": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { + "license": "MIT", + "dependencies": { "colorspace": "1.1.x", "enabled": "1.0.x", "kuler": "1.0.x" } }, - "diff-sequences": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", - "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" } }, - "ee-first": { + "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==" - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", + "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } }, - "emoji-regex": { + "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, - "enabled": { + "node_modules/enabled": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { + "integrity": "sha512-nnzgVSpB35qKrUN8358SjO1bYAmxoThECTWw9s3J0x5G8A9hokKHVDFzBjVpCoSryo6MhN8woVyascN5jheaNA==", + "license": "MIT", + "dependencies": { "env-variable": "0.0.x" } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { "once": "^1.4.0" } }, - "env-variable": { + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/env-variable": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", - "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" + "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==", + "license": "MIT" }, - "errno": { + "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { "is-arrayish": "^0.2.1" } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "escape-html": { + "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, - "escodegen": { + "node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "requires": { + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { "source-map": "~0.6.1" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "etag": { + "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "execa": { + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", @@ -1659,2758 +4674,3234 @@ "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } }, - "expand-template": { + "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, - "expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==", - "requires": { - "@jest/expect-utils": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/expect": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", + "depd": "2.0.0", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-request-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/express-request-id/-/express-request-id-3.0.0.tgz", + "integrity": "sha512-1MNfaOzlsXfrkeV+LZQLK2fq5ufosZ5XUSIXqNv11iTbOsb5SAeuK7N0eHz8BTh8s4UyvTimsecBRRlzMRE7Ng==", + "license": "MIT", + "dependencies": { + "uuid": "^9.0.0" + }, + "engines": { + "node": "^14.20.1 || >=16.0.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "express-request-id": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/express-request-id/-/express-request-id-1.4.1.tgz", - "integrity": "sha512-qpxK6XhDYtdx9FvxwCHkUeZVWtkGbWR87hBAzGECfwYF/QQCPXEwwB2/9NGkOR1tT7/aLs9mma3CT0vjSzuZVw==", - "requires": { - "uuid": "^3.3.2" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extract-zip": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.8.tgz", - "integrity": "sha512-iVU8H2PVOWCjhtfwRlWyK500NevDfxygRkVwIgh0+Yp43xTDtOZWZ7Oy7SGwLa35H7mS7GgocoCmarpPqsXZrA==", - "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.4", - "yauzl": "2.4.1" - }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", "dependencies": { - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "requires": { - "minimist": "^1.2.5" - } - } + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { "bser": "2.1.1" } }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "requires": { + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { "pend": "~1.2.0" } }, - "fecha": { + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" }, - "file-stream-rotator": { + "node_modules/file-stream-rotator": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.5.7.tgz", "integrity": "sha512-VYb3HZ/GiAGUCrfeakO8Mp54YGswNUHvL7P09WQcXAJNSj3iQ5QraYSp3cIn1MUyw6uzfgN/EFOarCNa4JvUHQ==", - "requires": { + "license": "MIT", + "dependencies": { "moment": "^2.11.2" } }, - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-replace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz", + "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true } } }, - "find-up": { + "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { + "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "from2": { + "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "license": "MIT", + "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, - "fs": { - "version": "0.0.1-security", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" - }, - "fs-constants": { + "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "dev": true, + "license": "MIT", + "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "get-package-type": { + "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "get-stream": { + "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "node_modules/get-uri/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "node_modules/get-uri/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-flag": { + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "html-escaper": { + "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" }, - "http": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/http/-/http-0.0.0.tgz", - "integrity": "sha1-huYybSnF0Dnen6xYSkVon5KfT3I=" + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" } }, - "https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", - "integrity": "sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q=" - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "human-signals": { + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "hummus": { - "version": "1.0.110", - "resolved": "https://registry.npmjs.org/hummus/-/hummus-1.0.110.tgz", - "integrity": "sha512-7qCmZFwTg3e/8Pk91J0aMnFiHF8B3Vptr++xBkZc4QEqna92W37r5G6ikbahWJLfQK2PKooXEjmls6gJoiJNBA==", - "requires": { - "node-pre-gyp": "^0.10.0" - }, + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": false, - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "aproba": { - "version": "1.2.0", - "resolved": false, - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": false, - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": false, - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": false, - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": false, - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "deep-extend": { - "version": "0.6.0", - "resolved": false, - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "delegates": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "detect-libc": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": false, - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "gauge": { - "version": "2.7.4", - "resolved": false, - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": false, - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": false, - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "resolved": false, - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": false, - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": false, - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": false, - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": false, - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": false, - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": false, - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "2.9.0", - "resolved": false, - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": false, - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": false, - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "needle": { - "version": "2.5.2", - "resolved": false, - "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": false, - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": false, - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "resolved": false, - "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.3", - "resolved": false, - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "npm-packlist": { - "version": "1.4.8", - "resolved": false, - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": false, - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": false, - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "once": { - "version": "1.4.0", - "resolved": false, - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": false, - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": false, - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "rc": { - "version": "1.2.8", - "resolved": false, - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": false, - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": false, - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": false, - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": false, - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": false, - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "5.7.1", - "resolved": false, - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": false, - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "signal-exit": { - "version": "3.0.3", - "resolved": false, - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "string-width": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": false, - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": false, - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": false, - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "tar": { - "version": "4.4.13", - "resolved": false, - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "wide-align": { - "version": "1.1.3", - "resolved": false, - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": false, - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "yallist": { - "version": "3.1.1", - "resolved": false, - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "ieee754": { + "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "requires": { + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, - "ini": { + "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" }, - "into-stream": { + "node_modules/into-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=" + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } }, - "ipaddr.js": { + "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "requires": { - "has": "^1.0.3" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "is-generator-fn": { + "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-stream": { + "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" - }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" } }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "requires": { + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" } }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "requires": { + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "istanbul-lib-coverage": "^3.0.0" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "requires": { + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "jest": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.0.tgz", - "integrity": "sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==", - "requires": { - "@jest/core": "^28.1.0", - "import-local": "^3.0.2", - "jest-cli": "^28.1.0" - }, - "dependencies": { - "jest-cli": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.0.tgz", - "integrity": "sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==", - "requires": { - "@jest/core": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } + "node_modules/jest": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", + "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.2.0", + "@jest/types": "30.2.0", + "import-local": "^3.2.0", + "jest-cli": "30.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true } } }, - "jest-changed-files": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", - "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", - "requires": { - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.0.tgz", - "integrity": "sha512-rNYfqfLC0L0zQKRKsg4n4J+W1A2fbyGH7Ss/kDIocp9KXD9iaL111glsLu7+Z7FHuZxwzInMDXq+N1ZIBkI/TQ==", - "requires": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "node_modules/jest-changed-files": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", + "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "jest-util": "30.2.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", + "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", + "chalk": "^4.1.2", "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "p-limit": "^3.1.0", + "pretty-format": "30.2.0", + "pure-rand": "^7.0.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - } - }, - "jest-config": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.0.tgz", - "integrity": "sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==", - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.0", - "@jest/types": "^28.1.0", - "babel-jest": "^28.1.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.0", - "jest-environment-node": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "micromatch": "^4.0.4", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-cli": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", + "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-config": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", + "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.2.0", + "@jest/types": "30.2.0", + "babel-jest": "30.2.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.2.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-runner": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "micromatch": "^4.0.8", "parse-json": "^5.2.0", - "pretty-format": "^28.1.0", + "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "jest-diff": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", - "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.0.2", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" - } - }, - "jest-docblock": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", - "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.0.tgz", - "integrity": "sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==", - "requires": { - "@jest/types": "^28.1.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0" - } - }, - "jest-environment-node": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.0.tgz", - "integrity": "sha512-gBLZNiyrPw9CSMlTXF1yJhaBgWDPVvH0Pq6bOEwGMXaYNzhzhw2kA/OijNF8egbCgDS0/veRv97249x2CX+udQ==", - "requires": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "node_modules/jest-diff": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", + "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", + "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "jest-util": "30.2.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", + "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" - } - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==" - }, - "jest-haste-map": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.0.tgz", - "integrity": "sha512-xyZ9sXV8PtKi6NCrJlmq53PyNVHzxmcfXNVvIRHpHmh1j/HChC4pwKgyjj7Z9us19JMw8PpQTJsFWOsIfT93Dw==", - "requires": { - "@jest/types": "^28.1.0", - "@types/graceful-fs": "^4.1.3", + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", + "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-leak-detector": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.0.tgz", - "integrity": "sha512-uIJDQbxwEL2AMMs2xjhZl2hw8s77c3wrPaQ9v6tXJLGaaQ+4QrNJH5vuw7hA7w/uGT/iJ42a83opAqxGHeyRIA==", - "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" - } - }, - "jest-matcher-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", - "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" - } - }, - "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "micromatch": "^4.0.8", + "walker": "^1.0.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" + } + }, + "node_modules/jest-leak-detector": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", + "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.2.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", - "requires": { - "@jest/types": "^28.1.0", - "@types/node": "*" + "node_modules/jest-mock": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-util": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" - }, - "jest-resolve": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.0.tgz", - "integrity": "sha512-vvfN7+tPNnnhDvISuzD1P+CRVP8cK0FHXRwPAcdDaQv4zgvwvag2n55/h5VjYcM5UJG7L4TwE5tZlzcI0X2Lhw==", - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", + "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", + "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "jest-resolve-dependencies": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.0.tgz", - "integrity": "sha512-Ue1VYoSZquPwEvng7Uefw8RmZR+me/1kr30H2jMINjGeHgeO/JgrR6wxj2ofkJ7KSAA11W3cOrhNCbj5Dqqd9g==", - "requires": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.0" - } - }, - "jest-runner": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.0.tgz", - "integrity": "sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==", - "requires": { - "@jest/console": "^28.1.0", - "@jest/environment": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "node_modules/jest-runner": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", + "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.2.0", + "@jest/environment": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-leak-detector": "30.2.0", + "jest-message-util": "30.2.0", + "jest-resolve": "30.2.0", + "jest-runtime": "30.2.0", + "jest-util": "30.2.0", + "jest-watcher": "30.2.0", + "jest-worker": "30.2.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", + "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/globals": "30.2.0", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.0.2", - "jest-environment-node": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-leak-detector": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-resolve": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-util": "^28.1.0", - "jest-watcher": "^28.1.0", - "jest-worker": "^28.1.0", - "source-map-support": "0.5.13", - "throat": "^6.0.1" - } - }, - "jest-runtime": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.0.tgz", - "integrity": "sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==", - "requires": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/globals": "^28.1.0", - "@jest/source-map": "^28.0.2", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "jest-snapshot": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.0.tgz", - "integrity": "sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==", - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.0", - "semver": "^7.3.5" - }, + "node_modules/jest-snapshot": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", + "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", + "dev": true, + "license": "MIT", "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0", + "chalk": "^4.1.2", + "expect": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-diff": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "pretty-format": "30.2.0", + "semver": "^7.7.2", + "synckit": "^0.11.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", - "requires": { - "@jest/types": "^28.1.0", + "node_modules/jest-util": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", - "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", - "requires": { - "@jest/types": "^28.1.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.0" + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", + "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", + "dev": true, + "license": "MIT", "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - } + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "jest-watcher": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", - "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", - "requires": { - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "node_modules/jest-watcher": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", + "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.0", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", - "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", - "requires": { + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.2.0", + "string-length": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", + "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", + "dev": true, + "license": "MIT", + "dependencies": { "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.2.0", "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "supports-color": "^8.1.1" }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "jimp": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.27.tgz", - "integrity": "sha1-Qe9Qgti2MgHVR0fgT+i8rLryVHQ=", - "requires": { - "bignumber.js": "^2.1.0", - "bmp-js": "0.0.1", - "es6-promise": "^3.0.2", - "exif-parser": "^0.1.9", - "file-type": "^3.1.0", - "jpeg-js": "^0.2.0", - "load-bmfont": "^1.2.3", - "mime": "^1.3.4", - "pixelmatch": "^4.0.0", - "pngjs": "^3.0.0", - "read-chunk": "^1.0.1", - "request": "^2.65.0", - "stream-to-buffer": "^0.1.0", - "tinycolor2": "^1.1.2", - "url-regex": "^3.0.0" - }, - "dependencies": { - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" - } + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "jpeg-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.2.0.tgz", - "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=" + "node_modules/join-images": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/join-images/-/join-images-1.1.5.tgz", + "integrity": "sha512-2HQGUCBoKuzQZzM0j7ON07lk/u/5eAQ5HTBGbvnL9SJVpQnPnuWTgmLQuz8vJ/1Jk/pFEbvdh6xip/cUW+JWRA==", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^3.0.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 12.13" + }, + "peerDependencies": { + "sharp": "^0.32.0" + } }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } }, - "json-parse-even-better-errors": { + "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "junk": { + "node_modules/junk": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz", - "integrity": "sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI=" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "integrity": "sha512-3KF80UaaSSxo8jVnRYtMKNGFOoVPBdkkVPsw+Ad0y4oxKXPduS6G6iHkrf69yJVff/VAaYXkV42rtZ7daJxU3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "kuler": { + "node_modules/kuler": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { + "license": "MIT", + "dependencies": { "colornames": "^1.1.1" } }, - "leven": { + "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "node_modules/linebreak": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", + "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==", + "license": "MIT", + "dependencies": { + "base64-js": "0.0.8", + "unicode-trie": "^2.0.0" } }, - "lines-and-columns": { + "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" }, - "load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "locate-path": { + "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" }, - "logform": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", - "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", - "requires": { - "@colors/colors": "1.5.0", + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } + "engines": { + "node": ">= 12.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "makeerror": { + "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "requires": { + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { "tmpl": "1.0.5" } }, - "maximatch": { + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/maximatch": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", - "integrity": "sha1-hs2NawTJ8wfAWmuUGZBtA2D7E6I=", - "requires": { + "integrity": "sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==", + "dev": true, + "license": "MIT", + "dependencies": { "array-differ": "^1.0.0", "array-union": "^1.0.1", "arrify": "^1.0.0", "minimatch": "^3.0.0" }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - } + "engines": { + "node": ">=0.10.0" } }, - "media-typer": { + "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "memory-streams": { + "node_modules/memory-streams": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/memory-streams/-/memory-streams-0.1.3.tgz", "integrity": "sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==", - "requires": { + "license": "MIT", + "dependencies": { "readable-stream": "~1.0.2" - }, + } + }, + "node_modules/memory-streams/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/memory-streams/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "node_modules/memory-streams/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" }, - "merge-img": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/merge-img/-/merge-img-2.1.3.tgz", - "integrity": "sha512-PA8caQPleTulKV7s2CXGvzTPxVoT5wkFCB0jf0RVzIYG+job08wibDA9lMYlpcHjCOvup3p1UPk1JgTwgJnu6g==", - "requires": { - "is-plain-obj": "^1.1.0", - "jimp": "0.2.27" + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "merge-stream": { + "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { + "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "mime-db": { + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { + "license": "MIT", + "dependencies": { "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mimic-fn": { + "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" + "node_modules/minimatch": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", + "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" }, - "mkdirp": { + "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { + "license": "MIT", + "dependencies": { "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "mkdirp-classic": { + "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" }, - "moment": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } }, - "move-file": { + "node_modules/move-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/move-file/-/move-file-1.0.0.tgz", "integrity": "sha512-jERy9C1VJznLzhVGXwEHvkyQjC/ZbQxQHTojilRHt19bbq2yc2ay2kmdRCHsk6Kz2xt6gpdrW9EXzHRbUrhAQw==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "cp-file": "^5.0.0", "make-dir": "^1.1.0", "path-exists": "^3.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/move-file/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "license": "MIT", "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/move-file/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "ms": { + "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/muhammara": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/muhammara/-/muhammara-6.0.3.tgz", + "integrity": "sha512-6qguAtc+jBGiKgITEli6xt+89lKk7UASGGGMCDUsNCuHtoVBtnmikDydZTJYIiBcMj6iW68N17KnSEOXCUmHOw==", + "bundleDependencies": [ + "@mapbox/node-pre-gyp" + ], + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.3", + "@xmldom/xmldom": "^0.8.6", + "linebreak": "^1.1.0", + "memory-streams": "^0.1.3" + }, + "engines": { + "node": ">=17" + } + }, + "node_modules/muhammara/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/muhammara/node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.3", + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/muhammara/node_modules/abbrev": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/muhammara/node_modules/agent-base": { + "version": "7.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/muhammara/node_modules/chownr": { + "version": "3.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/muhammara/node_modules/consola": { + "version": "3.4.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/muhammara/node_modules/debug": { + "version": "4.4.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/muhammara/node_modules/detect-libc": { + "version": "2.1.2", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/muhammara/node_modules/https-proxy-agent": { + "version": "7.0.6", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/muhammara/node_modules/minipass": { + "version": "7.1.3", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/muhammara/node_modules/minizlib": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/muhammara/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/muhammara/node_modules/node-fetch": { + "version": "2.7.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/muhammara/node_modules/nopt": { + "version": "8.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/muhammara/node_modules/semver": { + "version": "7.7.4", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/muhammara/node_modules/tar": { + "version": "7.5.9", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/muhammara/node_modules/tr46": { + "version": "0.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/muhammara/node_modules/webidl-conversions": { + "version": "3.0.1", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/muhammara/node_modules/whatwg-url": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } }, - "multistream": { + "node_modules/muhammara/node_modules/yallist": { + "version": "5.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/multistream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", - "requires": { + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { "once": "^1.4.0", "readable-stream": "^3.6.0" - }, + } + }, + "node_modules/multistream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "nanoid": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", - "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" }, - "negotiator": { + "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "nested-error-stacks": { + "node_modules/nested-error-stacks": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==" + "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", + "dev": true, + "license": "MIT" }, - "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "requires": { - "semver": "^5.4.1" - }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-abi": { + "version": "3.87.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", + "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", + "license": "MIT", "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" } }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "license": "MIT", + "peer": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node-getopt": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/node-getopt/-/node-getopt-0.3.2.tgz", - "integrity": "sha512-yqkmYrMbK1wPrfz7mgeYvA4tBperLg9FQ4S3Sau3nSAkpOA0x0zC8nQ1siBwozy1f4SE8vq2n1WKv99r+PCa1Q==" - }, - "node-int64": { + "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - }, - "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" - }, - "normalize-path": { + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "npm-run-path": { + "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-hash": { + "node_modules/object-hash": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { "wrappy": "1" } }, - "one-time": { + "node_modules/one-time": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + "integrity": "sha512-qAMrwuk2xLEutlASoiPiAMW3EN3K96Ka/ilSXYr6qR1zSVXw2j7+yDSqGTC4T9apfLYxM3tLLjKvgPdAUK7kYQ==", + "license": "MIT" }, - "onetime": { + "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "os": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", - "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==" - }, - "p-is-promise": { + "node_modules/p-is-promise": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-try": { + "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + "node_modules/pac-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, - "parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + "node_modules/pac-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "parse-json": { + "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { + "license": "MIT", + "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parseurl": { + "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", - "requires": { - "process": "^0.11.1", - "util": "^0.10.3" + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "path-exists": { + "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" }, - "pend": { + "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pify": { + "node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "requires": { - "pngjs": "^3.0.0" - } - }, - "pkg": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.5.2.tgz", - "integrity": "sha512-pD0UB2ud01C6pVv2wpGsTYJrXI/bnvGRYvMLd44wFzA1p+A2jrlTGFPAYa7YEYzmitXhx23PqalaG1eUEnSwcA==", - "requires": { - "@babel/parser": "7.16.2", - "@babel/types": "7.16.0", - "chalk": "^4.1.2", - "escodegen": "^2.0.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.4", - "into-stream": "^6.0.0", - "minimist": "^1.2.5", - "multistream": "^4.1.0", - "pkg-fetch": "3.2.6", - "prebuild-install": "6.1.4", - "progress": "^2.0.3", - "resolve": "^1.20.0", - "stream-meter": "^1.0.4", - "tslib": "2.3.1" - }, - "dependencies": { - "@babel/parser": { - "version": "7.16.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", - "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==" - }, - "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - } - } + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" } }, - "pkg-dir": { + "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "find-up": "^4.0.0" - } - }, - "pkg-fetch": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.2.6.tgz", - "integrity": "sha512-Q8fx6SIT022g0cdSE4Axv/xpfHeltspo2gg1KsWRinLQZOTRRAtOOaEFghA1F3jJ8FVsh8hGrL/Pb6Ea5XHIFw==", - "requires": { - "chalk": "^4.1.2", - "fs-extra": "^9.1.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.6", - "progress": "^2.0.3", - "semver": "^7.3.5", - "tar-fs": "^2.1.1", - "yargs": "^16.2.0" }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - } + "engines": { + "node": ">=8" } }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - }, - "prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "requires": { - "detect-libc": "^1.0.3", + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", - "simple-get": "^3.0.3", + "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", - "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } + "node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" }, - "progress": { + "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } }, - "promise": { + "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "asap": "~2.0.3" } }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "proxy-addr": { + "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { + "license": "MIT", + "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "prr": { + "node_modules/proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/proxy-agent/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT" }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "puppeteer": { - "version": "15.3.2", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-15.3.2.tgz", - "integrity": "sha512-6z4fTHCHTpG3Yu7zqP0mLfCmkNkgw5KSUfLAwuBabz9Pkqoe0Z08hqUx5GNxhhMgEo4YVOSPBshePA6zliznWQ==", - "requires": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1011705", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.8.0" - }, - "dependencies": { - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "~1.2.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "ws": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", - "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } + "node_modules/puppeteer": { + "version": "24.36.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.36.1.tgz", + "integrity": "sha512-uPiDUyf7gd7Il1KnqfNUtHqntL0w1LapEw5Zsuh8oCK8GsqdxySX1PzdIHKB2Dw273gWY4MW0zC5gy3Re9XlqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.11.2", + "chromium-bidi": "13.0.1", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1551306", + "puppeteer-core": "24.36.1", + "typed-query-selector": "^2.12.0" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" } }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "node_modules/puppeteer-core": { + "version": "24.36.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.36.1.tgz", + "integrity": "sha512-L7ykMWc3lQf3HS7ME3PSjp7wMIjJeW6+bKfH/RSTz5l6VUDGubnrC2BKj3UvM28Y5PMDFW0xniJOZHBZPpW1dQ==", + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.11.2", + "chromium-bidi": "13.0.1", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1551306", + "typed-query-selector": "^2.12.0", + "webdriver-bidi-protocol": "0.4.0", + "ws": "^8.19.0" + }, + "engines": { + "node": ">=18" + } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "node_modules/puppeteer-core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "range-parser": { + "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "rc": { + "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - } + "bin": { + "rc": "cli.js" } }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "read-chunk": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", - "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -4420,11 +7911,20 @@ "util-deprecate": "~1.0.1" } }, - "recursive-copy": { + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/recursive-copy": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.14.tgz", "integrity": "sha512-K8WNY8f8naTpfbA+RaXmkaQuD1IeW9EgNEfyGxSqqTQukpVtoOKros9jUqbpEsSw59YOmpd8nCBgtqJZy5nvog==", - "requires": { + "dev": true, + "license": "ISC", + "dependencies": { "errno": "^0.1.2", "graceful-fs": "^4.1.4", "junk": "^1.0.1", @@ -4434,703 +7934,1299 @@ "promise": "^7.0.1", "rimraf": "^2.7.1", "slash": "^1.0.0" + } + }, + "node_modules/recursive-copy/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/recursive-copy/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/recursive-copy/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - } + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "requires": { - "is-core-module": "^2.8.1", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-cwd": { + "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { "glob": "^7.1.3" - } + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==" - }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "node_modules/sharp/node_modules/tar-fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", + "license": "MIT", + "peer": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } }, - "shebang-command": { + "node_modules/sharp/node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" } }, - "shebang-regex": { + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT" + }, + "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } }, - "simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" } }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "requires": { + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { "escape-string-regexp": "^2.0.0" }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } + "engines": { + "node": ">=10" } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "stream-meter": { + "node_modules/stream-meter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", - "integrity": "sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0=", - "requires": { + "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", + "dev": true, + "license": "MIT", + "dependencies": { "readable-stream": "^2.1.4" } }, - "stream-to": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz", - "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=" + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } }, - "stream-to-buffer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz", - "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", - "requires": { - "stream-to": "~0.2.0" + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "string-length": { + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "string-width": { + "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { + "license": "MIT", + "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { + "license": "MIT", + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "strip-final-newline": { + "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "supports-color": { + "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { + "license": "MIT", + "dependencies": { "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/table-layout": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", + "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", + "license": "MIT", + "dependencies": { + "array-back": "^6.2.2", + "wordwrapjs": "^5.1.0" + }, + "engines": { + "node": ">=12.17" + } + }, + "node_modules/tar": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, - "tar-stream": { + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { + "license": "MIT", + "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "streamx": "^2.12.5" } }, - "test-exclude": { + "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "requires": { + "dev": true, + "license": "ISC", + "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" } }, - "text-hex": { + "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" }, - "tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } }, - "tmpl": { + "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { + "dev": true, + "license": "MIT", + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, - "tunnel-agent": { + "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { + "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "type-fest": { + "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "type-is": { + "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { + "license": "MIT", + "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "license": "MIT" }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" + "node_modules/typical": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", + "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "universalify": { + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" } }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "requires": { - "ip-regex": "^1.0.1" + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/unzipper": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.3.tgz", + "integrity": "sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "~3.7.2", + "duplexer2": "~0.1.4", + "fs-extra": "^11.2.0", + "graceful-fs": "^4.2.2", + "node-int64": "^0.4.0" } }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "requires": { - "inherits": "2.0.3" + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "v8-to-istanbul": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", - "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.7", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" } }, - "vary": { + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - } + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "walker": { + "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "requires": { + "dev": true, + "license": "Apache-2.0", + "dependencies": { "makeerror": "1.0.12" } }, - "webidl-conversions": { + "node_modules/webdriver-bidi-protocol": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.0.tgz", + "integrity": "sha512-U9VIlNRrq94d1xxR9JrCEAx5Gv/2W7ERSv8oWRoNe/QYbfccS0V3h/H6qeNeCRJxXGMhhnkqvwNrvPAYeuP9VA==", + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { + "dev": true, + "license": "ISC", + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "winston": { + "node_modules/winston": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { + "license": "MIT", + "dependencies": { "async": "^2.6.1", "diagnostics": "^1.1.1", "is-stream": "^1.1.0", @@ -5141,164 +9237,234 @@ "triple-beam": "^1.3.0", "winston-transport": "^4.3.0" }, - "dependencies": { - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "engines": { + "node": ">= 6.4.0" } }, - "winston-daily-rotate-file": { + "node_modules/winston-daily-rotate-file": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.4.3.tgz", "integrity": "sha512-bK2BDerFpFjzKvBlP6zCpzBjvdUtYR7sUwCHbf30m0XFOc9Zj4/xPE1lfVy6sYZiciy+meuQSSek0+Reym6x/w==", - "requires": { + "license": "MIT", + "dependencies": { "file-stream-rotator": "^0.5.7", "object-hash": "^2.0.1", "triple-beam": "^1.3.0", "winston-transport": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "winston": "^3" } }, - "winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "node_modules/winston/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "wrap-ansi": { + "node_modules/wordwrapjs": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.1.tgz", + "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==", + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { + "license": "MIT", + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "requires": { + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", - "requires": { - "async-limiter": "~1.0.0" + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.0.tgz", - "integrity": "sha512-3sLxVhbAB5OC8qvVRebCLWuouhwh/rswsiDYx3WGxajUk/l4G20SKfrKKFeNIHboUFt2JFgv2yfn+5cgOr/t5A==", - "requires": { + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^4.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "requires": { - "fd-slicer": "~1.0.1" + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } } } diff --git a/package.json b/package.json index bbdd598..0bbc7db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bryntum/pdf-export-server", - "version": "1.0.0", + "version": "2.3.4", "description": "Standalone PDF export server", "keywords": [ "bryntum", @@ -29,47 +29,68 @@ "scripts": { "start": "node ./src/server.js", "test": "jest", - "measure": "node ./src/utils/measure-export-time.js" + "measure": "node ./src/utils/measure-export-time.js", + "build": "node ./build.js", + "build:win": "node ./build.js --platform=windows", + "build:linux": "node ./build.js --platform=linux", + "build:macos": "node ./build.js --platform=macos" }, "dependencies": { - "body-parser": "~1.18.3", - "express": "~4.16.3", - "express-request-id": "~1.4.1", - "extract-zip": "~1.6.6", - "jest": "^28.1.0", - "fs": "0.0.1-security", - "http": "0.0.0", - "https": "~1.0.0", - "https-proxy-agent": "~2.2.1", - "hummus": "~1.0.87", + "@types/express": "~5.0.0", + "body-parser": "~1.20.3", + "command-line-args": "~6.0.1", + "command-line-usage": "~7.0.3", + "express": "~4.22.1", + "express-request-id": "~3.0.0", + "join-images": "~1.1.5", "memory-streams": "~0.1.3", - "merge-img": "~2.1.2", - "mkdirp": "~0.5.1", - "move-file": "~1.0.0", - "nanoid": "~2.1.9", - "node-getopt": "~0.3.2", - "os": "~0.1.1", - "path": "~0.12.7", - "pkg": "~5.5.1", - "proxy-from-env": "~1.0.0", - "puppeteer": "15.3.2", - "recursive-copy": "~2.0.9", - "rimraf": "~2.6.2", - "serve-static": "~1.13.2", - "url": "~0.11.0", + "mkdirp": "~0.5.6", + "muhammara": "~6.0.3", + "nanoid": "~3.3.11", + "puppeteer": "~24.36.1", + "serve-static": "~1.16.2", "winston": "~3.2.1", "winston-daily-rotate-file": "~4.4.1", - "ws": "~5.2.0" + "ws": "~8.19.0" + }, + "devDependencies": { + "@babel/preset-env": "^7.29.0", + "@yao-pkg/pkg": "~6.6.0", + "jest": "~30.2.0", + "move-file": "~1.0.0", + "recursive-copy": "^2.0.14", + "rimraf": "~2.6.2" + }, + "overrides": { + "tar": "7.5.9", + "glob": "13.0.6", + "@isaacs/brace-expansion": "5.0.1", + "minimatch": "10.2.3" }, "engines": { - "node": ">=14" + "node": ">=20" }, "jest": { "testMatch": [ - "**/__tests__/**/*.test.js" + "/__tests__/**/*.test.js" ], "setupFiles": [ "/__tests__/jest.setup.js" + ], + "globalSetup": "/__tests__/globalSetup.js", + "globalTeardown": "/__tests__/globalTeardown.js", + "transformIgnorePatterns": [ + "node_modules/(?!(express-request-id|nanoid|command-line-args|command-line-usage)/)" + ] + }, + "pkg": { + "assets": [ + "node_modules/muhammara/binding/muhammara.node" + ], + "ignore": [ + "**/*.c", + "**/*.cpp", + "**/*.h" ] } } diff --git a/scripts/print-html.js b/scripts/print-html.js new file mode 100755 index 0000000..dcf7807 --- /dev/null +++ b/scripts/print-html.js @@ -0,0 +1,129 @@ +#!/usr/bin/env node + +/** + * Utility script to wrap HTML file into PDF export POST request and send it to the server. + * + * Usage: + * node scripts/wrap-html.js [input.html] [output.pdf] [port] + * + * Defaults: + * input: tmp/test.html + * output: tmp/output.pdf + * port: 8080 + * + * Examples: + * node scripts/wrap-html.js + * node scripts/wrap-html.js tmp/test.html + * node scripts/wrap-html.js tmp/test.html tmp/result.pdf + * node scripts/wrap-html.js tmp/test.html tmp/result.pdf 8081 + */ + +const fs = require('fs'); +const path = require('path'); +const http = require('http'); + +const args = process.argv.slice(2); +const inputPath = args[0] || 'tmp/test.html'; +const outputPath = args[1] || 'tmp/output.pdf'; +const port = parseInt(args[2], 10) || 8080; + +// Resolve paths relative to project root +const projectRoot = path.join(__dirname, '..'); +const absoluteInputPath = path.isAbsolute(inputPath) + ? inputPath + : path.join(projectRoot, inputPath); +const absoluteOutputPath = path.isAbsolute(outputPath) + ? outputPath + : path.join(projectRoot, outputPath); + +// Check if input file exists +if (!fs.existsSync(absoluteInputPath)) { + console.error(`Error: Input file not found: ${absoluteInputPath}`); + process.exit(1); +} + +// Read HTML content +const htmlContent = fs.readFileSync(absoluteInputPath, 'utf-8'); + +// Extract dimensions from HTML if possible (look for body width/height styles) +let format = 'A4'; +const widthMatch = htmlContent.match(/width\s*:\s*(\d+)px/); +const heightMatch = htmlContent.match(/height\s*:\s*(\d+)px/); + +if (widthMatch && heightMatch) { + format = `${widthMatch[1]}*${heightMatch[1]}`; +} + +// Build the POST request structure (matching testDataPDF in assertions.js) +const requestData = { + orientation : 'portrait', + format : format, + fileName : path.basename(inputPath, path.extname(inputPath)), + sendAsBinary : true, + html : [{ html : htmlContent }], + fileFormat : 'pdf' +}; + +const jsonBody = JSON.stringify(requestData); + +console.log(`Sending POST request to http://localhost:${port}/`); +console.log(`Input: ${absoluteInputPath}`); +console.log(`Output: ${absoluteOutputPath}`); +console.log(`Format: ${format}`); + +const request = http.request({ + hostname : 'localhost', + port : port, + path : '/', + method : 'POST', + headers : { + 'Content-Type' : 'application/json', + 'Content-Length' : Buffer.byteLength(jsonBody) + } +}, response => { + const chunks = []; + + response.on('data', chunk => { + chunks.push(chunk); + }); + + response.on('end', () => { + const result = Buffer.concat(chunks); + + if (response.statusCode === 200) { + // Check if it's a PDF (starts with %PDF) + if (result.slice(0, 4).toString() === '%PDF') { + fs.writeFileSync(absoluteOutputPath, result); + console.log(`Success! PDF saved to: ${absoluteOutputPath}`); + console.log(`File size: ${result.length} bytes`); + } else { + // Might be JSON error response + try { + const json = JSON.parse(result.toString()); + console.error('Server returned JSON instead of PDF:', json); + } catch { + console.error('Unexpected response:', result.toString().slice(0, 500)); + } + process.exit(1); + } + } else { + console.error(`Server returned status ${response.statusCode}`); + try { + const json = JSON.parse(result.toString()); + console.error('Error:', json.msg || json); + } catch { + console.error('Response:', result.toString().slice(0, 500)); + } + process.exit(1); + } + }); +}); + +request.on('error', err => { + console.error(`Request failed: ${err.message}`); + console.error(`Is the server running on port ${port}?`); + process.exit(1); +}); + +request.write(jsonBody); +request.end(); diff --git a/src/commands.js b/src/commands.js index 8da5edf..f19e469 100644 --- a/src/commands.js +++ b/src/commands.js @@ -1,37 +1,43 @@ -Getopt = require('node-getopt'); +const commandLineArgs = require('command-line-args'); +const getUsage = require('command-line-usage'); module.exports = class Commands { constructor() { - this.getopt = new Getopt([ - ['h', 'http=PORT' , 'Start http server on port'], - ['H', 'https=PORT' , 'Start https server on port'], - ['c', 'cors=HOST' , 'CORS origin, default value "*". Set to "false" to disable CORS'], - ['m', 'maximum=SIZE' , 'Maximum upload size (default 50mb)'], - ['r', 'resources=PATH' , 'The absolute path to the resource directory. This path will be accessible via the webserver'], - ['', 'max-workers=WORKERS' , 'Maximum amount of workers (puppeteer instances)', 5], - ['', 'level=LEVEL' , 'Specify log level (error, warn, verbose). Default "error"'], - ['', 'timeout=TIMEOUT' , 'Request timeout time in seconds'], - ['', 'quick' , 'Provide to only wait for page load event'], - ['', 'no-sandbox' , 'Provide to pass no-sandbox argument to chromium'], - ['', 'disable-web-security' , 'Provide to pass disable-web-security argument to chromium'], - ['', 'no-config' , 'Provide to ignore app.config.js'], - ['', 'verbose' , 'Alias for --level=verbose'], - ['', 'help' , 'Show help message'] - ]); - - this.getopt.setHelp( - 'Usage: ./server [OPTION]\n' + - '\n' + - '[[OPTIONS]]\n' - ); + this.optionDefinitions = [ + { name: 'http', alias: 'h', type: Number, description: 'Start http server on port' }, + { name: 'https', alias: 'H', type: Number, description: 'Start https server on port' }, + { name: 'websocket', alias: 'w', type: Boolean, description: 'Start websocket server' }, + { name: 'cors', alias: 'c', type: String, description: 'CORS origin, default value "*". Set to "false" to disable CORS' }, + { name: 'maximum', alias: 'm', type: String, description: 'Maximum upload size (default 50mb)' }, + { name: 'resources', alias: 'r', type: String, description: 'The absolute path to the resource directory. This path will be accessible via the webserver' }, + { name: 'max-workers', type: Number, defaultValue: 5, description: 'Maximum amount of workers (puppeteer instances)' }, + { name: 'level', type: String, description: 'Specify log level (error, warn, verbose). Default "error"' }, + { name: 'timeout', type: Number, description: 'Request timeout time in seconds' }, + { name: 'quick', type: Boolean, description: 'Provide to only wait for page load event' }, + { name: 'no-sandbox', type: Boolean, description: 'Provide to pass no-sandbox argument to chromium' }, + { name: 'disable-web-security', type: Boolean, description: 'Provide to pass disable-web-security argument to chromium' }, + { name: 'no-config', type: Boolean, description: 'Provide to ignore app.config.js' }, + { name: 'verbose', type: Boolean, description: 'Alias for --level=verbose' }, + { name: 'help', type: Boolean, description: 'Show help message' } + ]; } showHelp() { - this.getopt.showHelp(); + const sections = [ + { + header: 'Usage', + content: './server [OPTION]' + }, + { + header: 'Options', + optionList: this.optionDefinitions + } + ]; + console.log(getUsage(sections)); } getOptions() { - return this.getopt.parse(process.argv.slice(2)); + return commandLineArgs(this.optionDefinitions); } -}; +}; \ No newline at end of file diff --git a/src/logger.js b/src/logger.js index d5722b2..b99429e 100644 --- a/src/logger.js +++ b/src/logger.js @@ -1,10 +1,8 @@ -const { createLogger, format, transports } = require('winston'); +const { createLogger, format, transports : winstonTransports } = require('winston'); require('winston-daily-rotate-file'); let loggers = {}; -let loggerInstance; - module.exports = { getLogger(config = {}) { let result; @@ -21,27 +19,23 @@ module.exports = { return `${timestamp} ${level}: ${message}`; }); - let transport; + const transports = [new winstonTransports.Console({ level : 'error' })]; - if (config && config.rotate) { - transport = new transports.DailyRotateFile(config.rotate); - } - else if (config && config.file) { - transport = new transports.File(config.file); + if (config?.rotate) { + transports.push(new winstonTransports.DailyRotateFile(config.rotate)); } - else { - transport = new transports.Console(); + else if (config?.file) { + transports.push(new winstonTransports.File(config.file)); } - loggers[hash] = result = createLogger(Object.assign({ + loggers[hash] = result = createLogger({ format: combine( timestamp(), myFormat ), - transports: [ - transport - ] - }, config || {})); + transports, + ...config + }); // Log unhandled promise rejections process.on('unhandledRejection', e => { diff --git a/src/queue.js b/src/queue.js index b857a73..c9d1208 100644 --- a/src/queue.js +++ b/src/queue.js @@ -1,10 +1,9 @@ const { EventEmitter } = require('events'); const puppeteer = require('puppeteer'); -const generate = require('nanoid/generate'); const { RequestCancelError } = require('./exception.js'); +const { getId } = require('./utils/helpers.js'); const - alphabet = '0123456789abcdefghijklmnopqrstuvwxyz', // Also defined in commands.js MAX_WORKERS = 5, // Max amount of fails allowed before rejecting request @@ -14,10 +13,6 @@ const // Timeout in ms before destroying the worker IDLE_TIMEOUT = 2000; -function getId() { - return generate(alphabet, 21); -} - // https://pptr.dev/#?product=Puppeteer&version=v2.0.0&show=api-pagepdfoptions const paperFormat = { letter : { width : 8.5, height : 11 }, @@ -125,13 +120,28 @@ class Queue extends Loggable { super(); const me = this; + /** + * Max number of workers to run concurrently + * @type {Number} + */ me.maxWorkers = Number(maxWorkers); + + /** + * Flag to use tabs instead of browser instances + * @type {Boolean} + */ me.useTabs = useTabs; - // Boolean flag to use quick loading (waitUntil load). Makes pages to export faster, fonts might be missing. + /** + * Flag to use quick loading (waitUntil load). Makes pages to export faster, fonts might be missing. + * @type {Boolean} + */ me.quick = quick; - // Used to switch queue to testing mode + /** + * Used to switch queue to testing mode + * @type {Boolean} + */ me.testing = testing; // List of html chunks to convert to pdf/png @@ -160,6 +170,8 @@ class Queue extends Loggable { else { me.info('All workers destroyed, queue is empty'); + me.emit('empty'); + if (me._browser) { me.info('Stopping browser'); me._browser.close(); @@ -178,7 +190,10 @@ class Queue extends Loggable { // This is a factory method, returning instance of the browser. It is passed to worker class constructor, so // it cannot refer to the instance. me.startPuppeteer = async function(scope) { - const browser = await puppeteer.launch({ ignoreHTTPSErrors : true, executablePath : chromiumExecutablePath, args : chromiumArgs }); + const browser = await puppeteer.launch({ + executablePath : chromiumExecutablePath, + args : chromiumArgs + }); scope.verbose('Browser started'); @@ -246,7 +261,7 @@ class Queue extends Loggable { * @param {String} params.requestId * @param {String[]} params.items HTML to convert to PDF/PNG * @param {Object} params.config - * @returns {Promise} + * @returns {Promise} */ async queue({ requestId, items, config }) { const me = this; @@ -319,6 +334,34 @@ class Queue extends Loggable { this.emit('jobcancel', requestId); } + /** + * Stop the queue and destroy all workers, closing all browsers + */ + stop() { + const me = this; + + me.info('Stopping queue and destroying all workers'); + + // Clear pending jobs + me.jobs = []; + + // Destroy all workers + for (const worker of me.workers.values) { + worker.destroy(); + } + + me.workers.values.clear(); + me.availableWorkers.values.clear(); + + // Close shared browser if using tabs mode + if (me._browser) { + me._browser.close(); + delete me._browser; + } + + me._running = false; + } + start() { this._activeRun = this.run(); @@ -495,6 +538,31 @@ class Worker extends Loggable { }, me.defaultIdleTimeout); } + /** + * Force destroy the worker, closing browser immediately + */ + destroy() { + const me = this; + + if (me.idleTimeout != null) { + clearTimeout(me.idleTimeout); + me.idleTimeout = null; + } + + if (me.browserDetacher) { + me.verbose('Force closing browser'); + me.browserDetacher(); + me.browser = null; + me.browserDetacher = null; + } + // Also close browser directly if detacher wasn't set (race condition during browser start) + else if (me.browser) { + me.verbose('Force closing browser directly'); + me.browser.close().catch(() => {}); + me.browser = null; + } + } + // Hook to override after new browser page is opened async onPageCreated(page) { page.on('console', this.handleConsoleMessage.bind(this)); @@ -564,6 +632,7 @@ class Worker extends Loggable { break; case 'png': result = await me.processPageIntoPngBuffer(page, html, config); + result = Buffer.from(result); break; } @@ -580,6 +649,14 @@ class Worker extends Loggable { catch (e) { me.emit('error', e); + // Close browser to prevent ghost processes when worker fails after browser started + if (me.browserDetacher) { + me.verbose('Closing browser due to error'); + me.browserDetacher(); + me.browser = null; + me.browserDetacher = null; + } + throw e; } finally { @@ -593,7 +670,7 @@ class Worker extends Loggable { * @param page * @param html * @param config - * @returns {Promise} + * @returns {Promise} */ async processPageIntoPdfBuffer(page, html, config) { const me = this; @@ -632,7 +709,7 @@ class Worker extends Loggable { * @param page * @param html * @param config - * @returns {Promise} + * @returns {Promise} */ async processPageIntoPngBuffer(page, html, config) { const me = this; diff --git a/src/server.js b/src/server.js index 685f9d9..2731162 100644 --- a/src/server.js +++ b/src/server.js @@ -10,16 +10,13 @@ const isPkg = typeof process.pkg !== 'undefined'; //Local copies of chromium is delivered next to the executable, we need to correct path to the local copy instead of reference to node_modules const chromiumExecutablePath = (isPkg - ? puppeteer.executablePath().replace( - /^.*?[/\\]node_modules[/\\]puppeteer[/\\]\.local-chromium/, - path.join(path.dirname(process.execPath), 'chromium') - ) + ? path.join(process.execPath, '..', 'CHROME_EXECUTABLE_PATH_PLACEHOLDER') : puppeteer.executablePath() ); //Read commandline options const commands = new Commands(); -const options = commands.getOptions().options; +const options = commands.getOptions(); if (options.verbose) { options.level = 'verbose'; diff --git a/src/server/ExportServer.js b/src/server/ExportServer.js index 051e110..d9b36a8 100644 --- a/src/server/ExportServer.js +++ b/src/server/ExportServer.js @@ -1,6 +1,7 @@ -const hummus = require('hummus'); +const muhammara = require('muhammara'); +const stream = require('stream'); const memoryStreams = require('memory-streams'); -const mergeImg = require('merge-img'); +const { joinImages } = require('join-images'); const { Queue } = require('../queue.js'); const { getLogger } = require('../logger.js'); @@ -24,39 +25,43 @@ module.exports = class ExportServer { }); } + async waitForQueueEvent(eventName) { + return new Promise(resolve => { + this.taskQueue.once(eventName, resolve); + }); + } + /** - * Concatenate an array of PDF buffers and return the combined result. This function uses the hummus package, a - * copy the hummus binary is delivered next to the executable. + * Concatenate an array of PDF buffers and return the combined result. This function uses the muhammara package, a + * copy the muhammara binary is delivered next to the executable. * - * @param {Buffer[]} pdfs - * @returns {Promise} + * @param {Uint8Array[]} pdfs + * @returns {Promise} */ async combinePdfBuffers(pdfs) { const outStream = new memoryStreams.WritableStream(); try { - if (pdfs.length === 1) { - return pdfs[0]; - } - const first = pdfs.shift(), - firstPage = new hummus.PDFRStreamForBuffer(first), - pdfWriter = hummus.createWriterToModify(firstPage, new hummus.PDFStreamForResponse(outStream)); + firstPage = new muhammara.PDFRStreamForBuffer(first), + pdfWriter = muhammara.createWriterToModify(firstPage, new muhammara.PDFStreamForResponse(outStream)); let next = pdfs.shift(); while (next) { - const nextPage = new hummus.PDFRStreamForBuffer(next); + const nextPage = new muhammara.PDFRStreamForBuffer(next); pdfWriter.appendPDFPagesFromPDF(nextPage); next = pdfs.shift(); } pdfWriter.end(); - const mergedBuffer = outStream.toBuffer(); outStream.end(); - return mergedBuffer; + const result = new stream.PassThrough(); + result.end(outStream.toBuffer()); + + return result; } catch (err) { outStream.end(); @@ -68,16 +73,14 @@ module.exports = class ExportServer { * Concatenate an array of Png buffers and return the combined result. * * @param pngs - * @returns {Promise} + * @returns {Promise} */ async combinePngBuffers(pngs) { - return new Promise((resolve, reject) => { - mergeImg(pngs, { direction : true }).then(img => { - img.getBuffer('image/png', (s, buf) => { - resolve(buf); - }); - }).catch(err => reject(err)); - }); + const imageObject = await joinImages(pngs, { direction: true }); + const imageBuffer = await imageObject.toFormat('png').toBuffer(); + const result = new stream.PassThrough(); + result.end(imageBuffer); + return result; } /** @@ -97,10 +100,10 @@ module.exports = class ExportServer { * * @param requestData * @param requestId UUID of the request - * @param [request] request instance - * @returns {Promise} + * @param [emitter] Event emitter. Entity which monitors connection status to dequeue jobs + * @returns {Promise} */ - async exportRequestHandler(requestData, requestId, request) { + async exportRequestHandler(requestData, requestId, emitter) { const { html, orientation, format, fileFormat, clientURL } = requestData, landscape = orientation === 'landscape'; @@ -116,10 +119,10 @@ module.exports = class ExportServer { }, dimension = format.split('*'); - //format can be send in format 12in*14in. This has precedence over A4, Letter et cetera + // dimensions can be set in format 12in*14in. This has precedence over A4, Letter etc if (dimension.length === 2) { - config.width = dimension[0]; - config.height = dimension[1]; + config.width = /in/.test(dimension[0]) ? dimension[0] : parseInt(dimension[0], 10); + config.height = /in/.test(dimension[1]) ? dimension[1] : parseInt(dimension[1], 10); config.pageRanges = '1-1'; } else { @@ -131,11 +134,11 @@ module.exports = class ExportServer { const onClose = () => me.taskQueue.dequeue(requestId); - request?.socket.on('close', onClose); + emitter?.on('close', onClose); const files = await this.taskQueue.queue({ requestId, items : html.map(i => i.html), config }); - request?.socket.off('close', onClose); + emitter?.off('close', onClose); //All buffers are stored in the files object, we need to concatenate them if (files.length) { @@ -153,7 +156,7 @@ module.exports = class ExportServer { return result; } else { - throw new Error('Something went wrong: no files'); + me.logger.log('error', 'No files found'); } } } diff --git a/src/server/WebServer.js b/src/server/WebServer.js index 22dcdb6..f497721 100644 --- a/src/server/WebServer.js +++ b/src/server/WebServer.js @@ -1,26 +1,36 @@ const express = require('express'); -const addRequestId = require('express-request-id')(); +const addRequestId = require('express-request-id').default; const bodyParser = require('body-parser'); -const nanoid = require('nanoid'); +const { nanoid } = require('nanoid'); const http = require('http'); const https = require('https'); +const { WebSocketServer, WebSocket } = require('ws'); const fs = require('fs'); const path = require('path'); const serveStatic = require('serve-static'); +const { buffer } = require('node:stream/consumers'); const ExportServer = require('./ExportServer.js'); const { RequestCancelError } = require('../exception.js'); +const { getId } = require('../utils/helpers.js'); +const packageInfo = require('../../package.json'); + +const CLOSE_REASON = { + NORMAL : 1000 +} module.exports = class WebServer extends ExportServer { constructor(config) { super(config); + console.log(`[${packageInfo.name}@${packageInfo.version}] Starting server...`); + this.files = {}; this.createServer(config); } /** - * Create the and initialise the webserver + * Create and initialise the webserver * * @param options The passed options from the command line */ @@ -33,7 +43,7 @@ module.exports = class WebServer extends ExportServer { timeout : 5 * 60 * 1000 // 5 minutes }, options); - app.use(addRequestId); + app.use(addRequestId()); app.use(bodyParser.json({ limit : options.maximum || '50mb' })); app.use(bodyParser.urlencoded({ extended : false, limit : options.maximum || '50mb' })); @@ -50,85 +60,20 @@ module.exports = class WebServer extends ExportServer { }); } - //Set target to load resources from + //Set a target to load resources from if (options.resources) { - // app.use('/resources', express.static(options.resources)); - app.use('/resources', serveStatic(options.resources)); + const resourcePath = path.join(process.cwd(), options.resources); + console.log(`Serving resources from ${resourcePath}`); + app.use('/resources', serveStatic(resourcePath)); } - //Get the file, fileKey will be a guid. This serves the pdf - app.get('/:fileKey/', (req, res) => { - const - fileKey = req.params.fileKey, - file = me.files[fileKey]; - - if (file) { - res.set('Content-Type', 'application/' + file.fileFormat); - - // Use "inline" to be able to preview PDF file in a browser tab - // res.set('Content-Disposition', 'inline; filename="' + file.fileName + '"'); - res.set('Content-Disposition', 'form-data; filename="' + file.fileName + '"'); - - res.set('Access-Control-Expose-Headers', 'Content-Length'); - res.set('Content-Length', file.buffer.length); - res.status(200).send(file.buffer); + app.get('/status', me.handleStatus.bind(me)); - delete me.files[fileKey]; - } - else { - res.send('File not found'); - } - }); + //Get the file, fileKey will be a guid. This serves the pdf + app.get('/:fileKey/', me.handleFileKey.bind(me)); //Catch the posted request. - if (!options.dedicated) { - app.post('/', (req, res) => { - const request = req.body; - - //Accepts encoded and parsed html fragments. If still encoded, then parse - if (typeof request.html === 'string') { - request.html = JSON.parse(request.html); - } - - me.logger.log('info', `POST request ${req.id}`); - me.logger.log('verbose', `POST request ${req.id} headers: ${JSON.stringify(req.headers)}`); - - //Pass the request to the processFn - me.exportRequestHandler(request, req.id, req).then(file => { - me.logger.log('info', `POST request ${req.id} succeeded`); - - //On binary the buffer is directly sent to the client, else store file locally in memory for 10 seconds - if (request.sendAsBinary) { - res.set('Content-Type', 'application/octet-stream'); - res.status(200).send(file); - } - else { - //Send the url for the cached file, will is cached for 10 seconds - res.status(200).jsonp({ - success : true, - url : me.setFile(req.protocol + '://' + req.get('host') + req.originalUrl, request, file) - }); - } - }).catch(e => { - if (e instanceof RequestCancelError) { - // Shorthand call doesn't work here for some reason - me.logger.log('verbose', `POST request ${req.id} cancelled`); - } - else { - // Shorthand call doesn't work here for some reason - me.logger.log('warn', `POST request ${req.id} failed`); - me.logger.log('warn', e.stack); - - //Make up min 500 or 200? - res.status(request.sendAsBinary ? 500 : 200).jsonp({ - success : false, - msg : e.message, - stack : e.stack - }); - } - }); - }); - } + app.post('/', me.handleExportPOSTRequest.bind(me)); // order matters, this logger should be the last one app.use((err, req, res, next) => { @@ -141,15 +86,36 @@ module.exports = class WebServer extends ExportServer { me.findNextHttpPort = options.findNextHttpPort; me.httpServer = me.createHttpServer(); me.httpServer.timeout = options.timeout; + + if (options.websocket) { + me.wsServer = new WebSocketServer({ + server : me.httpServer, + maxPayload : 0x5000000 + }); + + me.wsServer.on('connection', (ws, req) => me.handleExportWebSocketConnection(ws, req, options.timeout)); + } } if (options.https) { + const certPath = process.pkg + ? path.join(process.execPath, '..', 'cert') + : path.join(__dirname, '..', '..', 'cert'); + me.httpsPort = options.https; //Create https server and pass certificate folder - me.httpsServer = me.createHttpsServer(path.join(process.cwd(), 'cert')); + me.httpsServer = me.createHttpsServer(certPath); me.httpsServer.timeout = options.timeout; - } + if (options.websocket) { + me.wssServer = new WebSocketServer({ + server : me.httpsServer, + maxPayload : 0x5000000 + }); + + me.wssServer.on('connection', (ws, req) => me.handleExportWebSocketConnection(ws, req, options.timeout)); + } + } } /** @@ -157,10 +123,10 @@ module.exports = class WebServer extends ExportServer { * * @param host This host to fetch from * @param request Passed initial request - * @param file The file buffer pdf/png + * @param fileStream The pdf/png file stream * @returns {*} */ - setFile(host, request, file) { + setFile(host, request, fileStream) { const me = this, fileKey = nanoid(), @@ -170,17 +136,170 @@ module.exports = class WebServer extends ExportServer { date : new Date(), fileFormat : request.fileFormat, fileName : `${request.fileName || `export-${request.range}`}.${request.fileFormat}`, - buffer : file + fileStream }; //You got ten seconds to fetch the file setTimeout(() => { + me.logger.log('verbose', `File ${fileKey} expired`); delete me.files[fileKey]; }, 10000); return url; } + handleStatus(req, res) { + res.status(200).jsonp({ + success : true, + version : packageInfo.version, + websocket : this.wsServer != null || this.wssServer != null + }); + } + + handleFileKey(req, res) { + const + fileKey = req.params.fileKey, + file = this.files[fileKey]; + + if (file) { + res.set('Content-Type', 'application/' + file.fileFormat); + + // Use "inline" to be able to preview PDF file in a browser tab + // res.set('Content-Disposition', 'inline; filename="' + file.fileName + '"'); + res.set('Content-Disposition', 'form-data; filename="' + file.fileName + '"'); + + res.set('Access-Control-Expose-Headers', 'Content-Length'); + res.status(200); + file.fileStream.pipe(res); + + delete this.files[fileKey]; + } + else { + res.send('File not found'); + } + } + + handleExportPOSTRequest(req, res) { + const request = req.body; + const me = this; + + //Accepts encoded and parsed html fragments. If still encoded, then parse + if (typeof request.html === 'string') { + request.html = JSON.parse(request.html); + } + + me.logger.log('info', `POST request ${req.id}`); + me.logger.log('verbose', `POST request ${req.id} headers: ${JSON.stringify(req.headers)}`); + + //Pass the request to the processFn + me.exportRequestHandler(request, req.id, req.socket).then(fileStream => { + me.logger.log('info', `POST request ${req.id} succeeded`); + + //On binary the buffer is directly sent to the client, else store file locally in memory for 10 seconds + if (request.sendAsBinary) { + res.set('Content-Type', 'application/octet-stream'); + res.status(200); + fileStream.pipe(res); + } + else { + //Send the url for the cached file, will is cached for 10 seconds + res.status(200).jsonp({ + success : true, + url : me.setFile(req.protocol + '://' + req.get('host') + req.originalUrl, request, fileStream) + }); + } + }).catch(e => { + if (e instanceof RequestCancelError) { + // Shorthand call doesn't work here for some reason + me.logger.log('verbose', `POST request ${req.id} cancelled`); + } + else { + // Shorthand call doesn't work here for some reason + me.logger.log('warn', `POST request ${req.id} failed`); + me.logger.log('warn', e.stack); + + //Make up min 500 or 200? + res.status(request.sendAsBinary ? 500 : 200).jsonp({ + success : false, + msg : e.message, + stack : e.stack + }); + } + }); + } + + handleExportWebSocketConnection(ws, req, timeout) { + const me = this; + const protocol = req.socket.server === me.httpServer ? 'http' : 'https'; + const host = req.headers.host || req.headers[':authority'] || 'localhost'; + const origin = `${protocol}://${host}/`; + const connectionId = getId(); + const { remoteAddress } = req.socket; + + const config = {}; + const pages = []; + + let timer; + + me.logger.log('info', `[WebSocket@${connectionId}] Connection opened`); + me.logger.log('verbose', `[WebSocket@${connectionId}] Remote address: ${remoteAddress}`); + + ws.on('message', async function (data, isBinary) { + if (!timer) { + timer = setTimeout(() => { + ws.close(CLOSE_REASON.NORMAL, `Export request did not finish in ${timeout}ms`); + }, timeout); + } + + if (!isBinary) { + const request = JSON.parse(data.toString()); + + // If this is a final message, start generating PDF + if (request.done) { + config.html = pages; + + me.logger.log('verbose', `[WebSocket@${connectionId}] Generating ${config.fileFormat.toUpperCase()}`); + + const fileStream = await me.exportRequestHandler(config, connectionId, ws); + + me.logger.log('verbose', `[WebSocket@${connectionId}] ${config.fileFormat.toUpperCase()} generated`); + + if (ws.readyState === WebSocket.OPEN) { + clearTimeout(timer); + + if (request.sendAsBinary) { + const buf = await buffer(fileStream); + ws.send(buf); + + me.logger.log('verbose', `[WebSocket@${connectionId}] sent ${buf.length} bytes`); + } + else { + ws.send(JSON.stringify({ + success : true, + url : me.setFile(origin, config, fileStream) + })); + } + } + else { + me.logger.log('warn', `[WebSocket@${connectionId}] Connection closed before export finished`); + } + } + else { + pages.push(request.html); + + delete request.html; + + Object.assign(config, request); + } + } + }); + + ws.on('close', function (code, reason) { + me.logger.log('info', `[WebSocket@${connectionId}] Connection closed`); + me.logger.log('verbose', `[WebSocket@${connectionId}] reason: ${code} - ${reason}`); + }); + } + //Create http server instance createHttpServer() { return http.createServer(this.app); @@ -231,14 +350,6 @@ module.exports = class WebServer extends ExportServer { } } - getHttpServer() { - return this.httpServer; - } - - getHttpsServer() { - return this.httpsServer; - } - /** * Start the service */ @@ -246,6 +357,9 @@ module.exports = class WebServer extends ExportServer { return Promise.all([ this.startHttpServer(), this.startHttpsServer() - ]); + ]).catch(e => { + console.error(e); + throw e; + }); } }; diff --git a/src/utils/export-test.js b/src/utils/export-test.js index 463929f..dcb1ab5 100644 --- a/src/utils/export-test.js +++ b/src/utils/export-test.js @@ -10,13 +10,15 @@ const puppeteer = require('puppeteer'); const fs = require('fs'); +const fname = process.argv[2] ?? 'test.html'; + class Server { async setup() { if (!this.browser) { this.browser = await puppeteer.launch(); } - this.content = fs.readFileSync('paging-test-2.html', 'utf-8'); + this.content = fs.readFileSync(`${fname}.html`, 'utf-8'); } async export() { @@ -36,7 +38,7 @@ class Server { await page.emulateMediaType('print'); await page.pdf({ - path: 'paging-test-2.pdf', + path: `${fname}.pdf`, printBackground : true, margin : { top : 0, diff --git a/src/utils/helpers.js b/src/utils/helpers.js new file mode 100644 index 0000000..1342597 --- /dev/null +++ b/src/utils/helpers.js @@ -0,0 +1,8 @@ +const { customAlphabet } = require('nanoid'); + +const alphabet = '0123456789abcdefghijklmnopqrstuvwxyz'; +const getId = customAlphabet(alphabet, 21); + +module.exports = { + getId: getId +}