diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml similarity index 83% rename from .github/ISSUE_TEMPLATE/feature_request.yaml rename to .github/ISSUE_TEMPLATE/01-feature_request.yaml index 2c6384b27a2..f0138a22ab0 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.0.6 + placeholder: v4.1.4 validations: required: true - type: dropdown @@ -24,6 +24,21 @@ body: - Data model extension - New functionality - Change to existing functionality + - Other + validations: + required: true + - type: dropdown + attributes: + label: Triage priority + description: > + Issue triage may be prioritized in some cases. Select whichever of the following + conditions applies, if any. + options: + - I volunteer to perform this work (if approved) + - I'm a NetBox Labs customer + - This is a very minor change + - N/A + default: 3 validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml similarity index 84% rename from .github/ISSUE_TEMPLATE/bug_report.yaml rename to .github/ISSUE_TEMPLATE/02-bug_report.yaml index 3af0fa7405a..a8a2cc45b87 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -22,11 +22,25 @@ body: - Self-hosted validations: required: true + - type: dropdown + attributes: + label: Triage priority + description: > + Issue triage may be prioritized in some cases. Select whichever of the following + conditions applies, if any. + options: + - I volunteer to perform this work (if approved) + - I'm a NetBox Labs customer + - This is preventing me from using NetBox + - N/A + default: 3 + validations: + required: true - type: input attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.0.6 + placeholder: v4.1.4 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/documentation_change.yaml b/.github/ISSUE_TEMPLATE/03-documentation_change.yaml similarity index 100% rename from .github/ISSUE_TEMPLATE/documentation_change.yaml rename to .github/ISSUE_TEMPLATE/03-documentation_change.yaml diff --git a/.github/ISSUE_TEMPLATE/translation.yaml b/.github/ISSUE_TEMPLATE/04-translation.yaml similarity index 100% rename from .github/ISSUE_TEMPLATE/translation.yaml rename to .github/ISSUE_TEMPLATE/04-translation.yaml diff --git a/.github/ISSUE_TEMPLATE/housekeeping.yaml b/.github/ISSUE_TEMPLATE/05-housekeeping.yaml similarity index 100% rename from .github/ISSUE_TEMPLATE/housekeeping.yaml rename to .github/ISSUE_TEMPLATE/05-housekeeping.yaml diff --git a/.github/ISSUE_TEMPLATE/deprecation.yaml b/.github/ISSUE_TEMPLATE/06-deprecation.yaml similarity index 100% rename from .github/ISSUE_TEMPLATE/deprecation.yaml rename to .github/ISSUE_TEMPLATE/06-deprecation.yaml diff --git a/.github/workflows/auto-assign-issue.yml b/.github/workflows/auto-assign-issue.yml deleted file mode 100644 index 309f79800ec..00000000000 --- a/.github/workflows/auto-assign-issue.yml +++ /dev/null @@ -1,21 +0,0 @@ -# auto-assign-issue (https://github.com/marketplace/actions/auto-assign-issue) -name: Issue assignment - -on: - issues: - types: [opened] - -permissions: - issues: write - -jobs: - auto-assign: - runs-on: ubuntu-latest - steps: - - uses: pozil/auto-assign-issue@v2 - if: "contains(github.event.issue.labels.*.name, 'status: needs triage')" - with: - # Weighted assignments - assignees: arthanson:3, jeffgdotorg:3, jeremystretch:3, DanSheps - numOfAssignee: 1 - abortIfPreviousAssignees: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4be037427f..d77da90e3f5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: strategy: matrix: python-version: ['3.10', '3.11', '3.12'] - node-version: ['18.x'] + node-version: ['20.x'] services: redis: image: redis @@ -73,7 +73,7 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements.txt - pip install pycodestyle coverage tblib + pip install ruff coverage tblib - name: Build documentation run: mkdocs build @@ -85,7 +85,7 @@ jobs: run: python netbox/manage.py makemigrations --check - name: Check PEP8 compliance - run: pycodestyle --ignore=W504,E501 --exclude=node_modules netbox/ + run: ruff check netbox/ - name: Check UI ESLint, TypeScript, and Prettier Compliance run: yarn --cwd netbox/project-static validate diff --git a/.github/workflows/close-stale-issues.yml b/.github/workflows/close-stale-issues.yml index b02ffdacd4d..1e0e193df17 100644 --- a/.github/workflows/close-stale-issues.yml +++ b/.github/workflows/close-stale-issues.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/stale@v9 with: # General parameters - operations-per-run: 100 + operations-per-run: 200 remove-stale-when-updated: false # Issue parameters @@ -43,8 +43,9 @@ jobs: # Pull request parameters close-pr-message: > This PR has been automatically closed due to lack of activity. - days-before-pr-stale: 15 + days-before-pr-stale: 30 days-before-pr-close: 15 + exempt-pr-labels: 'status: blocked' stale-pr-label: 'pending closure' stale-pr-message: > This PR has been automatically marked as stale because it has not had diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000000..09f935b61f7 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,44 @@ +repos: +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.6.9 + hooks: + - id: ruff + name: "Ruff linter" + args: [ netbox/ ] +- repo: local + hooks: + - id: django-check + name: "Django system check" + description: "Run Django's internal check for common problems" + entry: python netbox/manage.py check + language: system + pass_filenames: false + types: [python] + - id: django-makemigrations + name: "Django migrations check" + description: "Check for any missing Django migrations" + entry: python netbox/manage.py makemigrations --check + language: system + pass_filenames: false + types: [python] + - id: mkdocs-build + name: "Build documentation" + description: "Build the documentation with mkdocs" + files: 'docs/' + entry: mkdocs build + language: system + pass_filenames: false + - id: yarn-validate + name: "Yarn validate" + description: "Check UI ESLint, TypeScript, and Prettier compliance" + files: 'netbox/project-static/' + entry: yarn --cwd netbox/project-static validate + language: system + pass_filenames: false + - id: verify-bundles + name: "Verify static asset bundles" + description: "Ensure that any modified static assets have been compiled" + files: 'netbox/project-static/' + entry: scripts/verify-bundles.sh + language: system + pass_filenames: false diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f94893021ea..a760b83711e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,7 +40,7 @@ NetBox users are welcome to participate in either role, on stage or in the crowd * First, ensure that you're running the [latest stable version](https://github.com/netbox-community/netbox/releases) of NetBox. If you're running an older version, it's likely that the bug has already been fixed. -* Next, search our [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the bug you've found has already been reported. If you come across a bug report that seems to match, please click "add a reaction" in the top right corner of the issue and add a thumbs up (:thumbsup:). This will help draw more attention to it. Any comments you can add to provide additional information or context would also be much appreciated. +* Next, search our [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the bug you've found has already been reported. If you come across a bug report that seems to match, please click "add a reaction" in the bottom left corner of the issue and add a thumbs up ( :thumbsup: ). This will help draw more attention to it. Any comments you can add to provide additional information or context would also be much appreciated. * If you can't find any existing issues (open or closed) that seem to match yours, you're welcome to [submit a new bug report](https://github.com/netbox-community/netbox/issues/new?label=type%3A+bug&template=bug_report.yaml). Be sure to complete the entire report template, including detailed steps that someone triaging your issue can follow to confirm the reported behavior. (If we're not able to replicate the bug based on the information provided, we'll ask for additional detail.) @@ -56,7 +56,9 @@ intake policy](https://github.com/netbox-community/netbox/wiki/Issue-Intake-Poli ## :bulb: Feature Requests -* First, check the GitHub [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the feature you have in mind has already been proposed. If you happen to find an open feature request that matches your idea, click "add a reaction" in the top right corner of the issue and add a thumbs up (:thumbsup:). This ensures that the issue has a better chance of receiving attention. Also feel free to add a comment with any additional justification for the feature. +* First, check the GitHub [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the feature you have in mind has already been proposed. If you happen to find an open feature request that matches your idea, click "add a reaction" in the top right corner of the issue and add a thumbs up ( :thumbsup: ). This ensures that the issue has a better chance of receiving attention. Also feel free to add a comment with any additional justification for the feature. + +* Please don't submit duplicate issues! Sometimes we reject feature requests, for various reasons. Even if you disagree with those reasons, please **do not** submit a duplicate feature request. It is very disrepectful of the maintainers' time, and you may be barred from opening future issues. * If you have a rough idea that's not quite ready for formal submission yet, start a [GitHub discussion](https://github.com/netbox-community/netbox/discussions) instead. This is a great way to test the viability and narrow down the scope of a new feature prior to submitting a formal proposal, and can serve to generate interest in your idea from other community members. diff --git a/README.md b/README.md index da07f226de8..0c793b8a4c4 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,13 @@ License Contributors GitHub stars - Languages supported + Languages supported CI status -

+

+ NetBox Community | + NetBox Cloud | + NetBox Enterprise +

NetBox exists to empower network engineers. Since its release in 2016, it has become the go-to solution for modeling and documenting network infrastructure for thousands of organizations worldwide. As a successor to legacy IPAM and DCIM applications, NetBox provides a cohesive, extensive, and accessible data model for all things networked. By providing a single robust user interface and programmable APIs for everything from cable maps to device configurations, NetBox serves as the central source of truth for the modern network. @@ -81,11 +85,6 @@ NetBox automatically logs the creation, modification, and deletion of all manage * The [official documentation](https://docs.netbox.dev) offers a comprehensive introduction. * Check out [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions) for even more projects to get the most out of NetBox! -

- NetBox Cloud
- Looking for a managed solution? Check out NetBox Cloud or NetBox Enterprise! -

- ## Get Involved * Follow [@NetBoxOfficial](https://twitter.com/NetBoxOfficial) on Twitter! diff --git a/SECURITY.md b/SECURITY.md index 4ca6ef33a40..97881a9019e 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -16,7 +16,7 @@ Administrators are encouraged to adhere to industry best practices concerning th ## Reporting a Suspected Vulnerability -If you believe you've uncovered a security vulnerability and wish to report it confidentially, you may do so via email. Please note that any reported vulnerabilities **MUST** meet all the following conditions: +If you believe you've uncovered a security vulnerability and wish to report it confidentially, you may do so by emailing `security@netboxlabs.com`. Please ensure that your report meets all the following conditions: * Affects the most recent stable release of NetBox, or a current beta release * Affects a NetBox instance installed and configured per the official documentation @@ -24,7 +24,7 @@ If you believe you've uncovered a security vulnerability and wish to report it c Please note that we **DO NOT** accept reports generated by automated tooling which merely suggest that a file or file(s) _may_ be vulnerable under certain conditions, as these are most often innocuous. -If you believe that you've found a vulnerability which meets all of these conditions, please [submit a draft security advisory](https://github.com/netbox-community/netbox/security/advisories/new) on GitHub. For any security concerns regarding NetBox deployed via Docker, please see the [netbox-docker](https://github.com/netbox-community/netbox-docker) project. +For any security concerns regarding the community-maintained Docker image for NetBox, please see the [netbox-docker](https://github.com/netbox-community/netbox-docker) project. ### Bug Bounties diff --git a/base_requirements.txt b/base_requirements.txt index 841dc0a2436..76955a6e1dc 100644 --- a/base_requirements.txt +++ b/base_requirements.txt @@ -10,7 +10,7 @@ django-cors-headers # https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst # Pinned for DNS looukp bug; see https://github.com/netbox-community/netbox/issues/16454 # and https://github.com/jazzband/django-debug-toolbar/issues/1927 -django-debug-toolbar==4.3.0 +django-debug-toolbar # Library for writing reusable URL query filters # https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst @@ -84,10 +84,6 @@ Jinja2 # https://python-markdown.github.io/changelog/ Markdown -# File inclusion plugin for Python-Markdown -# https://github.com/cmacmackin/markdown-include -markdown-include - # MkDocs Material theme (for documentation build) # https://squidfunk.github.io/mkdocs-material/changelog/ mkdocs-material diff --git a/contrib/apache.conf b/contrib/apache.conf index 73fd45c26b8..fdd0543f7d3 100644 --- a/contrib/apache.conf +++ b/contrib/apache.conf @@ -20,7 +20,7 @@ Alias /static /opt/netbox/netbox/static - Options Indexes FollowSymLinks MultiViews + Options FollowSymLinks MultiViews AllowOverride None Require all granted diff --git a/contrib/generated_schema.json b/contrib/generated_schema.json index deda2b82126..56ddee50e96 100644 --- a/contrib/generated_schema.json +++ b/contrib/generated_schema.json @@ -12,6 +12,9 @@ "left-to-right", "right-to-left", "side-to-rear", + "rear-to-side", + "bottom-to-top", + "top-to-bottom", "passive", "mixed" ] @@ -149,6 +152,7 @@ "nema-l15-60p", "nema-l21-20p", "nema-l21-30p", + "nema-l22-20p", "nema-l22-30p", "cs6361c", "cs6365c", @@ -262,6 +266,7 @@ "nema-l15-60r", "nema-l21-20r", "nema-l21-30r", + "nema-l22-20r", "nema-l22-30r", "CS6360C", "CS6364C", @@ -288,6 +293,7 @@ "molex-micro-fit-2x2", "molex-micro-fit-2x4", "dc-terminal", + "eaton-c39", "hdot-cx", "saf-d-grid", "neutrik-powercon-20a", @@ -328,6 +334,7 @@ "5gbase-t", "10gbase-t", "10gbase-cx4", + "100base-x-sfp", "1000base-x-gbic", "1000base-x-sfp", "10gbase-x-sfpp", @@ -377,7 +384,9 @@ "ieee802.11ad", "ieee802.11ax", "ieee802.11ay", + "ieee802.11be", "ieee802.15.1", + "ieee802.15.4", "other-wireless", "gsm", "cdma", @@ -517,6 +526,14 @@ "urm-p4", "urm-p8", "splice", + "usb-a", + "usb-b", + "usb-c", + "usb-mini-a", + "usb-mini-b", + "usb-micro-a", + "usb-micro-b", + "usb-micro-ab", "other" ] } @@ -574,6 +591,14 @@ "urm-p4", "urm-p8", "splice", + "usb-a", + "usb-b", + "usb-c", + "usb-mini-a", + "usb-mini-b", + "usb-micro-a", + "usb-micro-b", + "usb-micro-ab", "other" ] } diff --git a/docs/_theme/partials/copyright.html b/docs/_theme/partials/copyright.html new file mode 100644 index 00000000000..cfbfd54445b --- /dev/null +++ b/docs/_theme/partials/copyright.html @@ -0,0 +1,18 @@ + +{% if not config.extra.build_public %} + +{% endif %} diff --git a/docs/administration/authentication/microsoft-azure-ad.md b/docs/administration/authentication/microsoft-entra-id.md similarity index 94% rename from docs/administration/authentication/microsoft-azure-ad.md rename to docs/administration/authentication/microsoft-entra-id.md index 17b13081896..3451c656f1a 100644 --- a/docs/administration/authentication/microsoft-azure-ad.md +++ b/docs/administration/authentication/microsoft-entra-id.md @@ -1,8 +1,8 @@ -# Microsoft Azure AD +# Microsoft Entra ID -This guide explains how to configure single sign-on (SSO) support for NetBox using [Microsoft Azure Active Directory (AD)](https://azure.microsoft.com/en-us/services/active-directory/) as an authentication backend. +This guide explains how to configure single sign-on (SSO) support for NetBox using [Microsoft Entra ID](https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id) as an authentication backend. -## Azure AD Configuration +## Entra ID Configuration ### 1. Create a test user (optional) @@ -16,7 +16,7 @@ Under the Azure Active Directory dashboard, navigate to **Add > App registration Enter a name for the registration (e.g. "NetBox") and ensure that the "single tenant" option is selected. -Under "Redirect URI", select "Web" for the platform and enter the path to your NetBox installation, ending with `/oauth/complete/azuread-oauth2/`. Note that this URI **must** begin with `https://` unless you are referencing localhost (for development purposes). +Under "Redirect URI", select "Web" for the platform and enter the path to your NetBox installation, ending with `/oauth/complete/entraid-oauth2/`. Note that this URI **must** begin with `https://` unless you are referencing localhost (for development purposes). ![App registration parameters](../../media/authentication/azure_ad_app_registration.png) diff --git a/docs/administration/authentication/overview.md b/docs/administration/authentication/overview.md index a6c3a315976..e582f009e71 100644 --- a/docs/administration/authentication/overview.md +++ b/docs/administration/authentication/overview.md @@ -40,3 +40,22 @@ REMOTE_AUTH_BACKEND = 'social_core.backends.google.GoogleOAuth2' NetBox supports single sign-on authentication via the [python-social-auth](https://github.com/python-social-auth) library. To enable SSO, specify the path to the desired authentication backend within the `social_core` Python package. Please see the complete list of [supported authentication backends](https://github.com/python-social-auth/social-core/tree/master/social_core/backends) for the available options. Most remote authentication backends require some additional configuration through settings prefixed with `SOCIAL_AUTH_`. These will be automatically imported from NetBox's `configuration.py` file. Additionally, the [authentication pipeline](https://python-social-auth.readthedocs.io/en/latest/pipeline.html) can be customized via the `SOCIAL_AUTH_PIPELINE` parameter. (NetBox's default pipeline is defined in `netbox/settings.py` for your reference.) + +#### Configuring the SSO module's appearance + +The way a remote authentication backend is displayed to the user on the login +page may be adjusted via the `SOCIAL_AUTH_BACKEND_ATTRS` parameter, defaulting +to an empty dictionary. This dictionary maps a `social_core` module's name (ie. +`REMOTE_AUTH_BACKEND.name`) to a couple of parameters, `(display_name, icon)`. + +The `display_name` is the name displayed to the user on the login page. The +icon may either be the URL of an icon; refer to a [Material Design +Icons](https://github.com/google/material-design-icons) icon's name; or be +`None` for no icon. + +For instance, the OIDC backend may be customized with +```python +SOCIAL_AUTH_BACKEND_ATTRS = { + 'oidc': ("My awesome SSO", "login"), +} +``` diff --git a/docs/configuration/development.md b/docs/configuration/development.md index 1579f2cdb0d..6e1a4d9c419 100644 --- a/docs/configuration/development.md +++ b/docs/configuration/development.md @@ -5,7 +5,7 @@ Default: False This setting enables debugging. Debugging should be enabled only during development or troubleshooting. Note that only -clients which access NetBox from a recognized [internal IP address](#internal_ips) will see debugging tools in the user +clients which access NetBox from a recognized [internal IP address](./system.md#internal_ips) will see debugging tools in the user interface. !!! warning diff --git a/docs/configuration/error-reporting.md b/docs/configuration/error-reporting.md index 8c3526dec86..56f18784545 100644 --- a/docs/configuration/error-reporting.md +++ b/docs/configuration/error-reporting.md @@ -31,6 +31,17 @@ The sampling rate for errors. Must be a value between 0 (disabled) and 1.0 (repo --- +## SENTRY_SEND_DEFAULT_PII + +Default: False + +Maps to the Sentry SDK's [`send_default_pii`](https://docs.sentry.io/platforms/python/configuration/options/#send-default-pii) parameter. If enabled, certain personally identifiable information (PII) is added. + +!!! warning "Sensitive data" + If you enable this option, be aware that sensitive data such as cookies and authentication tokens will be logged. + +--- + ## SENTRY_TAGS An optional dictionary of tag names and values to apply to Sentry error reports.For example: diff --git a/docs/configuration/graphql-api.md b/docs/configuration/graphql-api.md new file mode 100644 index 00000000000..a792da54486 --- /dev/null +++ b/docs/configuration/graphql-api.md @@ -0,0 +1,17 @@ +# GraphQL API Parameters + +## GRAPHQL_ENABLED + +!!! tip "Dynamic Configuration Parameter" + +Default: True + +Setting this to False will disable the GraphQL API. + +--- + +## GRAPHQL_MAX_ALIASES + +Default: 10 + +The maximum number of queries that a GraphQL API request may contain. diff --git a/docs/configuration/index.md b/docs/configuration/index.md index 6a2ecdc7fc4..dab7f61353c 100644 --- a/docs/configuration/index.md +++ b/docs/configuration/index.md @@ -25,7 +25,7 @@ Some configuration parameters are primarily controlled via NetBox's admin interf * [`CUSTOM_VALIDATORS`](./data-validation.md#custom_validators) * [`DEFAULT_USER_PREFERENCES`](./default-values.md#default_user_preferences) * [`ENFORCE_GLOBAL_UNIQUE`](./miscellaneous.md#enforce_global_unique) -* [`GRAPHQL_ENABLED`](./miscellaneous.md#graphql_enabled) +* [`GRAPHQL_ENABLED`](./graphql-api.md#graphql_enabled) * [`JOB_RETENTION`](./miscellaneous.md#job_retention) * [`MAINTENANCE_MODE`](./miscellaneous.md#maintenance_mode) * [`MAPS_URL`](./miscellaneous.md#maps_url) diff --git a/docs/configuration/miscellaneous.md b/docs/configuration/miscellaneous.md index 1f0a2781bca..576eb8739d3 100644 --- a/docs/configuration/miscellaneous.md +++ b/docs/configuration/miscellaneous.md @@ -96,14 +96,6 @@ The maximum size (in bytes) of an incoming HTTP request (i.e. `GET` or `POST` da --- -## DJANGO_ADMIN_ENABLED - -Default: False - -Setting this to True installs the `django.contrib.admin` app and enables the [Django admin UI](https://docs.djangoproject.com/en/5.0/ref/contrib/admin/). This may be necessary to support older plugins which do not integrate with the native NetBox interface. - ---- - ## ENFORCE_GLOBAL_UNIQUE !!! tip "Dynamic Configuration Parameter" @@ -122,16 +114,6 @@ The maximum amount (in bytes) of uploaded data that will be held in memory befor --- -## GRAPHQL_ENABLED - -!!! tip "Dynamic Configuration Parameter" - -Default: True - -Setting this to False will disable the GraphQL API. - ---- - ## JOB_RETENTION !!! tip "Dynamic Configuration Parameter" diff --git a/docs/configuration/security.md b/docs/configuration/security.md index 15702f6490f..b97f3143205 100644 --- a/docs/configuration/security.md +++ b/docs/configuration/security.md @@ -20,19 +20,29 @@ A list of permitted URL schemes referenced when rendering links within NetBox. N ## AUTH_PASSWORD_VALIDATORS -This parameter acts as a pass-through for configuring Django's built-in password validators for local user accounts. If configured, these will be applied whenever a user's password is updated to ensure that it meets minimum criteria such as length or complexity. An example is provided below. For more detail on the available options, please see [the Django documentation](https://docs.djangoproject.com/en/stable/topics/auth/passwords/#password-validation). +This parameter acts as a pass-through for configuring Django's built-in password validators for local user accounts. These rules are applied whenever a user's password is created or updated to ensure that it meets minimum criteria such as length or complexity. The default configuration is shown below. ```python AUTH_PASSWORD_VALIDATORS = [ { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - 'OPTIONS': { - 'min_length': 10, - } + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + "OPTIONS": { + "min_length": 12, + }, + }, + { + "NAME": "utilities.password_validation.AlphanumericPasswordValidator", }, ] ``` +The default configuration enforces the follow criteria: + +* A password must be at least 12 characters in length. +* A password must have at least one uppercase letter, one lowercase letter, and one numeric digit. + +Although it is not recommended, the default validation rules can be disabled by setting `AUTH_PASSWORD_VALIDATORS = []` in the configuration file. For more detail on customizing password validation, please see [the Django documentation](https://docs.djangoproject.com/en/stable/topics/auth/passwords/#password-validation). + --- ## CORS_ORIGIN_ALLOW_ALL diff --git a/docs/configuration/system.md b/docs/configuration/system.md index a1e0ebb17f9..25c724bc922 100644 --- a/docs/configuration/system.md +++ b/docs/configuration/system.md @@ -83,7 +83,20 @@ Default: `('127.0.0.1', '::1')` A list of IP addresses recognized as internal to the system, used to control the display of debugging output. For example, the debugging toolbar will be viewable only when a client is accessing NetBox from one of the listed IP -addresses (and [`DEBUG`](#debug) is true). +addresses (and [`DEBUG`](./development.md#debug) is true). + +--- + +## ISOLATED_DEPLOYMENT + +!!! info "This feature was introduced in NetBox v4.1." + +Default: False + +Set this configuration parameter to True for NetBox deployments which do not have Internet access. This will disable miscellaneous functionality which depends on access to the Internet. + +!!! note + If Internet access is available via a proxy, set [`HTTP_PROXIES`](#http_proxies) instead. --- @@ -106,7 +119,7 @@ JINJA2_FILTERS = { ## LOGGING -By default, all messages of INFO severity or higher will be logged to the console. Additionally, if [`DEBUG`](#debug) is False and email access has been configured, ERROR and CRITICAL messages will be emailed to the users defined in [`ADMINS`](#admins). +By default, all messages of INFO severity or higher will be logged to the console. Additionally, if [`DEBUG`](./development.md#debug) is False and email access has been configured, ERROR and CRITICAL messages will be emailed to the users defined in [`ADMINS`](./miscellaneous.md#admins). The Django framework on which NetBox runs allows for the customization of logging format and destination. Please consult the [Django logging documentation](https://docs.djangoproject.com/en/stable/topics/logging/) for more information on configuring this setting. Below is an example which will write all INFO and higher messages to a local file: @@ -143,7 +156,7 @@ LOGGING = { ## MEDIA_ROOT -Default: $INSTALL_ROOT/netbox/media/ +Default: `$INSTALL_ROOT/netbox/media/` The file path to the location where media files (such as image attachments) are stored. By default, this is the `netbox/media/` directory within the base NetBox installation path. @@ -177,7 +190,7 @@ The dotted path to the desired search backend class. `CachedValueSearchBackend` Default: None (local storage) -The backend storage engine for handling uploaded files (e.g. image attachments). NetBox supports integration with the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) package, which provides backends for several popular file storage services. If not configured, local filesystem storage will be used. +The backend storage engine for handling uploaded files (e.g. image attachments). NetBox supports integration with the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) and [`django-storage-swift`](https://github.com/dennisv/django-storage-swift) packages, which provide backends for several popular file storage services. If not configured, local filesystem storage will be used. The configuration parameters for the specified storage backend are defined under the `STORAGE_CONFIG` setting. @@ -187,7 +200,7 @@ The configuration parameters for the specified storage backend are defined under Default: Empty -A dictionary of configuration parameters for the storage backend configured as `STORAGE_BACKEND`. The specific parameters to be used here are specific to each backend; see the [`django-storages` documentation](https://django-storages.readthedocs.io/en/stable/) for more detail. +A dictionary of configuration parameters for the storage backend configured as `STORAGE_BACKEND`. The specific parameters to be used here are specific to each backend; see the documentation for your selected backend ([`django-storages`](https://django-storages.readthedocs.io/en/stable/) or [`django-storage-swift`](https://github.com/dennisv/django-storage-swift)) for more detail. If `STORAGE_BACKEND` is not defined, this setting will be ignored. diff --git a/docs/customization/custom-fields.md b/docs/customization/custom-fields.md index 1f9a4a8bfd9..4658cc7e6f2 100644 --- a/docs/customization/custom-fields.md +++ b/docs/customization/custom-fields.md @@ -74,6 +74,8 @@ If a default value is specified for a selection field, it must exactly match one An object or multi-object custom field can be used to refer to a particular NetBox object or objects as the "value" for a custom field. These custom fields must define an `object_type`, which determines the type of object to which custom field instances point. +By default, an object choice field will make all objects of that type available for selection in the drop-down. The list choices can be filtered to show only objects with certain values by providing a `query_params` dict in the Related Object Filter field, as a JSON value. More information about `query_params` can be found [here](./custom-scripts.md#objectvar). + ## Custom Fields in Templates Several features within NetBox, such as export templates and webhooks, utilize Jinja2 templating. For convenience, objects which support custom field assignment expose custom field data through the `cf` property. This is a bit cleaner than accessing custom field data through the actual field (`custom_field_data`). diff --git a/docs/customization/custom-scripts.md b/docs/customization/custom-scripts.md index e6f6bb85f04..3fa6491d231 100644 --- a/docs/customization/custom-scripts.md +++ b/docs/customization/custom-scripts.md @@ -17,6 +17,9 @@ They can also be used as a mechanism for validating the integrity of data within Custom scripts are Python code which exists outside the NetBox code base, so they can be updated and changed without interfering with the core NetBox installation. And because they're completely custom, there is no inherent limitation on what a script can accomplish. +!!! danger "Only install trusted scripts" + Custom scripts have unrestricted access to change anything in the databse and are inherently unsafe and should only be installed and run from trusted sources. You should also review and set permissions for who can run scripts if the script can modify any data. + ## Writing Custom Scripts All custom scripts must inherit from the `extras.scripts.Script` base class. This class provides the functionality necessary to generate forms and log activity. diff --git a/docs/customization/custom-validation.md b/docs/customization/custom-validation.md index 909846e2047..4a2aab99802 100644 --- a/docs/customization/custom-validation.md +++ b/docs/customization/custom-validation.md @@ -86,8 +86,6 @@ CUSTOM_VALIDATORS = { #### Referencing Related Object Attributes -!!! info "This feature was introduced in NetBox v4.0." - The attributes of a related object can be referenced by specifying a dotted path. For example, to reference the name of a region to which a site is assigned, use `region.name`: ```python @@ -104,8 +102,6 @@ CUSTOM_VALIDATORS = { #### Validating Request Parameters -!!! info "This feature was introduced in NetBox v4.0." - In addition to validating object attributes, custom validators can also match against parameters of the current request (where available). For example, the following rule will permit only the user named "admin" to modify an object: ```json diff --git a/docs/development/adding-models.md b/docs/development/adding-models.md index 823789641ae..f3aa9cfcca6 100644 --- a/docs/development/adding-models.md +++ b/docs/development/adding-models.md @@ -71,7 +71,6 @@ Add the relevant navigation menu items in `netbox/netbox/navigation/menu.py`. Create the following for each model: * Detailed (full) model serializer in `api/serializers.py` -* Nested serializer in `api/nested_serializers.py` * API view in `api/views.py` * Endpoint route in `api/urls.py` diff --git a/docs/development/extending-models.md b/docs/development/extending-models.md index bf54313378a..16d1c345144 100644 --- a/docs/development/extending-models.md +++ b/docs/development/extending-models.md @@ -50,7 +50,7 @@ If you're adding a relational field (e.g. `ForeignKey`) and intend to include th ## 5. Update API serializer -Extend the model's API serializer in `.api.serializers` to include the new field. In most cases, it will not be necessary to also extend the nested serializer, which produces a minimal representation of the model. +Extend the model's API serializer in `.api.serializers` to include the new field. ## 6. Add fields to forms diff --git a/docs/development/getting-started.md b/docs/development/getting-started.md index 4dbdb63b28e..6e425d5a3f5 100644 --- a/docs/development/getting-started.md +++ b/docs/development/getting-started.md @@ -62,22 +62,7 @@ $issue-$description The description should be just two or three words to imply the focus of the work being performed. For example, bug #1234 to fix a TypeError exception when creating a device might be named `1234-device-typerror`. This ensures that branches are always follow some logical ordering (e.g. when running `git branch -a`) and helps other developers quickly identify the purpose of each. -### 3. Enable Pre-Commit Hooks - -NetBox ships with a [git pre-commit hook](https://githooks.com/) script that automatically checks for style compliance and missing database migrations prior to committing changes. This helps avoid erroneous commits that result in CI test failures. You are encouraged to enable it by creating a link to `scripts/git-hooks/pre-commit`: - -```no-highlight -cd .git/hooks/ -ln -s ../../scripts/git-hooks/pre-commit -``` -For the pre-commit hooks to work, you will also need to install the pycodestyle package: - -```no-highlight -python -m pip install pycodestyle -``` -...and set up the yarn packages as shown in the [Web UI Development Guide](web-ui.md) - -### 4. Create a Python Virtual Environment +### 3. Create a Python Virtual Environment A [virtual environment](https://docs.python.org/3/tutorial/venv.html) (or "venv" for short) is like a container for a set of Python packages. These allow you to build environments suited to specific projects without interfering with system packages or other projects. When installed per the documentation, NetBox uses a virtual environment in production. @@ -101,7 +86,7 @@ source ~/.venv/netbox/bin/activate Notice that the console prompt changes to indicate the active environment. This updates the necessary system environment variables to ensure that any Python scripts are run within the virtual environment. -### 5. Install Required Packages +### 4. Install Required Packages With the virtual environment activated, install the project's required Python packages using the `pip` module. Required packages are defined in `requirements.txt`. Each line in this file specifies the name and specific version of a required package. @@ -109,6 +94,26 @@ With the virtual environment activated, install the project's required Python pa python -m pip install -r requirements.txt ``` +### 5. Install Pre-Commit + +NetBox uses [`pre-commit`](https://pre-commit.com/) to automatically validate code when commiting new changes. This includes the following operations: + +* Run the `ruff` Python linter +* Run Django's internal system check +* Check for missing database migrations +* Validate any changes to the documentation with `mkdocs` +* Validate Typescript & Sass styling with `yarn` +* Ensure that any modified static front end assets have been recompiled + +Enable `pre-commit` with the following commands _prior_ to commiting any changes: + +```no-highlight +python -m pip install ruff pre-commit +pre-commit install +``` + +You may also need to set up the yarn packages as shown in the [Web UI Development Guide](web-ui.md). + ### 6. Configure NetBox Within the `netbox/netbox/` directory, copy `configuration_example.py` to `configuration.py` and update the following parameters: diff --git a/docs/development/models.md b/docs/development/models.md index 19b7be6dee7..1b91db515ad 100644 --- a/docs/development/models.md +++ b/docs/development/models.md @@ -18,7 +18,7 @@ Depending on its classification, each NetBox model may support various features | [Custom links](../customization/custom-links.md) | `CustomLinksMixin` | `custom_links` | These models support the assignment of custom links | | [Custom validation](../customization/custom-validation.md) | `CustomValidationMixin` | - | Supports the enforcement of custom validation rules | | [Export templates](../customization/export-templates.md) | `ExportTemplatesMixin` | `export_templates` | Users can create custom export templates for these models | -| [Job results](../features/background-jobs.md) | `JobsMixin` | `jobs` | Users can create custom export templates for these models | +| [Job results](../features/background-jobs.md) | `JobsMixin` | `jobs` | Background jobs can be scheduled for these models | | [Journaling](../features/journaling.md) | `JournalingMixin` | `journaling` | These models support persistent historical commentary | | [Synchronized data](../integrations/synchronized-data.md) | `SyncedDataMixin` | `synced_data` | Certain model data can be automatically synchronized from a remote data source | | [Tagging](../models/extras/tag.md) | `TagsMixin` | `tags` | The models can be tagged with user-defined tags | @@ -34,7 +34,9 @@ These are considered the "core" application models which are used to model netwo * [circuits.Provider](../models/circuits/provider.md) * [circuits.ProviderAccount](../models/circuits/provideraccount.md) * [circuits.ProviderNetwork](../models/circuits/providernetwork.md) +* [core.DataFile](../models/core/datafile.md) * [core.DataSource](../models/core/datasource.md) +* [core.Job](../models/core/job.md) * [dcim.Cable](../models/dcim/cable.md) * [dcim.Device](../models/dcim/device.md) * [dcim.DeviceType](../models/dcim/devicetype.md) @@ -44,12 +46,14 @@ These are considered the "core" application models which are used to model netwo * [dcim.PowerPanel](../models/dcim/powerpanel.md) * [dcim.Rack](../models/dcim/rack.md) * [dcim.RackReservation](../models/dcim/rackreservation.md) +* [dcim.RackType](../models/dcim/racktype.md) * [dcim.Site](../models/dcim/site.md) * [dcim.VirtualChassis](../models/dcim/virtualchassis.md) * [dcim.VirtualDeviceContext](../models/dcim/virtualdevicecontext.md) * [ipam.Aggregate](../models/ipam/aggregate.md) * [ipam.ASN](../models/ipam/asn.md) * [ipam.FHRPGroup](../models/ipam/fhrpgroup.md) +* [ipam.FHRPGroupAssignment](../models/ipam/fhrpgroupassignment.md) * [ipam.IPAddress](../models/ipam/ipaddress.md) * [ipam.IPRange](../models/ipam/iprange.md) * [ipam.Prefix](../models/ipam/prefix.md) @@ -76,6 +80,7 @@ These are considered the "core" application models which are used to model netwo Organization models are used to organize and classify primary models. +* [circuits.CircuitGroup](../models/circuits/circuitgroup.md) * [circuits.CircuitType](../models/circuits/circuittype.md) * [dcim.DeviceRole](../models/dcim/devicerole.md) * [dcim.Manufacturer](../models/dcim/manufacturer.md) @@ -88,6 +93,7 @@ Organization models are used to organize and classify primary models. * [tenancy.ContactRole](../models/tenancy/contactrole.md) * [virtualization.ClusterGroup](../models/virtualization/clustergroup.md) * [virtualization.ClusterType](../models/virtualization/clustertype.md) +* [vpn.TunnelGroup](../models/vpn/tunnelgroup.md) ### Nested Group Models @@ -131,3 +137,10 @@ These function as templates to effect the replication of device and virtual mach * [dcim.PowerOutletTemplate](../models/dcim/poweroutlettemplate.md) * [dcim.PowerPortTemplate](../models/dcim/powerporttemplate.md) * [dcim.RearPortTemplate](../models/dcim/rearporttemplate.md) + +### Connection Models + +Connection models are used to model the connections, or connection endpoints between models. + +* [circuits.CircuitTermination](../models/circuits/circuittermination.md) +* [vpn.TunnelTermination](../models/vpn/tunneltermination.md) diff --git a/docs/development/release-checklist.md b/docs/development/release-checklist.md index 91162f08ad7..7c8c96f3926 100644 --- a/docs/development/release-checklist.md +++ b/docs/development/release-checklist.md @@ -2,9 +2,9 @@ This documentation describes the process of packaging and publishing a new NetBox release. There are three types of release: -* Major release (e.g. v2.11 to v3.0) -* Minor release (e.g. v3.2 to v3.3) -* Patch release (e.g. v3.3.0 to v3.3.1) +* Major release (e.g. v3.7.8 to v4.0.0) +* Minor release (e.g. v4.0.10 to v4.1.0) +* Patch release (e.g. v4.1.0 to v4.1.1) While major releases generally introduce some very substantial change to the application, they are typically treated the same as minor version increments for the purpose of release packaging. @@ -19,7 +19,7 @@ Sometimes it becomes necessary to constrain dependencies to a particular version djangorestframework==3.8.1 ``` -These version constraints are added to `base_requirements.txt` to ensure that newer packages are not installed when updating the pinned dependencies in `requirements.txt` (see the [Update Requirements](#update-requirements) section below). Before each new minor version of NetBox is released, all such constraints on dependent packages should be addressed if feasible. This guards against the collection of stale constraints over time. +These version constraints are added to `base_requirements.txt` to ensure that newer packages are not installed when updating the pinned dependencies in `requirements.txt` (see the [Update Requirements](#update-python-dependencies) section below). Before each new minor version of NetBox is released, all such constraints on dependent packages should be addressed if feasible. This guards against the collection of stale constraints over time. ### Close the Release Milestone @@ -39,6 +39,10 @@ mkdocs serve Follow these instructions to perform a new installation of NetBox in a temporary environment. This process must not be automated: The goal of this step is to catch any errors or omissions in the documentation, and ensure that it is kept up-to-date for each release. Make any necessary changes to the documentation before proceeding with the release. +### Test Upgrade Paths + +Upgrading from a previous version typically involves database migrations, which must work without errors. Supported upgrade paths include from one minor version to another within the same major version (i.e. 4.0 to 4.1), as well as from the latest patch version of the previous minor version (i.e. 3.7 to 4.0 or to 4.1). Prior to release, test all these supported paths by loading demo data from the source version and performing a `./manage.py migrate`. + ### Merge the Release Branch Submit a pull request to merge the `feature` branch into the `develop` branch in preparation for its release. Once it has been merged, continue with the section for patch releases below. @@ -90,7 +94,7 @@ Updated language translations should be pulled from [Transifex](https://app.tran ### Update Version and Changelog -* Update the `VERSION` constant in `settings.py` to the new release version. +* Update the version and published date in `release.yaml` with the current version & date. Add a designation (e.g.g `beta1`) if applicable. * Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`. * Replace the "FUTURE" placeholder in the release notes with the current date. @@ -113,20 +117,10 @@ Create a [new release](https://github.com/netbox-community/netbox/releases/new) * **Tag:** Current version (e.g. `v3.3.1`) * **Target:** `master` * **Title:** Version and date (e.g. `v3.3.1 - 2022-08-25`) -* **Description:** Copy from the pull request body +* **Description:** Copy from the pull request body, then promote the `###` headers to `##` ones Once created, the release will become available for users to install. -### Update the Development Version - -On the `develop` branch, update `VERSION` in `settings.py` to point to the next release. For example, if you just released v3.3.1, set: - -``` -VERSION = 'v3.3.2-dev' -``` - -Commit this change with the comment "PRVB" (for _post-release version bump_) and push the commit upstream. - ### Update the Public Documentation After a release has been published, the public NetBox documentation needs to be updated. This is accomplished by running two actions on the [netboxlabs-docs](https://github.com/netboxlabs/netboxlabs-docs) repository. @@ -135,4 +129,6 @@ First, run the `build-site` action, by navigating to Actions > build-site > Run Once the documentation files have been compiled, they must be published by running the `deploy-kinsta` action. Select the desired deployment environment (staging or production) and specify `latest` as the deploy tag. +Clear the CDN cache from the [Kinsta](https://my.kinsta.com/) portal. Navigate to _Sites_ / _NetBox Labs_ / _Live_, select _Cache_ in the left-nav, click the _Clear Cache_ button, and confirm the clear operation. + Finally, verify that the documentation at has been updated. diff --git a/docs/development/style-guide.md b/docs/development/style-guide.md index 283ad698cfc..0d4caf395a6 100644 --- a/docs/development/style-guide.md +++ b/docs/development/style-guide.md @@ -1,6 +1,6 @@ # Style Guide -NetBox generally follows the [Django style guide](https://docs.djangoproject.com/en/stable/internals/contributing/writing-code/coding-style/), which is itself based on [PEP 8](https://www.python.org/dev/peps/pep-0008/). [Pycodestyle](https://github.com/pycqa/pycodestyle) is used to validate code formatting, ignoring certain violations. +NetBox generally follows the [Django style guide](https://docs.djangoproject.com/en/stable/internals/contributing/writing-code/coding-style/), which is itself based on [PEP 8](https://www.python.org/dev/peps/pep-0008/). [ruff](https://docs.astral.sh/ruff/) is used for linting (with certain [exceptions](#linter-exceptions)). ## Code @@ -20,32 +20,32 @@ NetBox generally follows the [Django style guide](https://docs.djangoproject.com * Nested API serializers generate minimal representations of an object. These are stored separately from the primary serializers to avoid circular dependencies. Always import nested serializers from other apps directly. For example, from within the DCIM app you would write `from ipam.api.nested_serializers import NestedIPAddressSerializer`. -### PEP 8 Exceptions +### Linting -NetBox ignores certain PEP8 assertions. These are listed below. +The [ruff](https://docs.astral.sh/ruff/) linter is used to enforce code style. A [pre-commit hook](./getting-started.md#3-enable-pre-commit-hooks) which runs this automatically is included with NetBox. To invoke `ruff` manually, run: -#### Wildcard Imports +``` +ruff check netbox/ +``` + +#### Linter Exceptions + +The following rules are ignored when linting. + +##### [E501](https://docs.astral.sh/ruff/rules/line-too-long/): Line too long + +NetBox does not enforce a hard restriction on line length, although a maximum length of 120 characters is strongly encouraged for Python code where possible. The maximum length does not apply to HTML templates or to automatically generated code (e.g. database migrations). + +##### [F403](https://docs.astral.sh/ruff/rules/undefined-local-with-import-star/): Undefined local with import star Wildcard imports (for example, `from .constants import *`) are acceptable under any of the following conditions: * The library being import contains only constant declarations (e.g. `constants.py`) * The library being imported explicitly defines `__all__` -#### Maximum Line Length (E501) +##### [F405](https://docs.astral.sh/ruff/rules/undefined-local-with-import-star-usage/): Undefined local with import star usage -NetBox does not restrict lines to a maximum length of 79 characters. We use a maximum line length of 120 characters, however this is not enforced by CI. The maximum length does not apply to HTML templates or to automatically generated code (e.g. database migrations). - -#### Line Breaks Following Binary Operators (W504) - -Line breaks are permitted following binary operators. - -### Enforcing Code Style - -The [`pycodestyle`](https://pypi.org/project/pycodestyle/) utility (formerly `pep8`) is used by the CI process to enforce code style. A [pre-commit hook](./getting-started.md#2-enable-pre-commit-hooks) which runs this automatically is included with NetBox. To invoke `pycodestyle` manually, run: - -``` -pycodestyle --ignore=W504,E501 netbox/ -``` +The justification for ignoring this rule is the same as F403 above. ### Introducing New Dependencies diff --git a/docs/development/translations.md b/docs/development/translations.md index b23e89d71fe..eca9ce71f9c 100644 --- a/docs/development/translations.md +++ b/docs/development/translations.md @@ -20,6 +20,8 @@ Then, commit the change and push to the `develop` branch on GitHub. Any new stri Typically, translated strings need to be updated only as part of the NetBox [release process](./release-checklist.md). +Check the Transifex dashboard for languages that are not marked _ready for use_, being sure to click _Show all languages_ if it appears at the bottom of the list. Use machine translation to round out any not-ready languages. It's not necessary to review the machine translation immediately as the translation teams will handle that aspect; the goal at this stage is to get translations included in the Transifex pull request. + To update translated strings, start by initiating a sync from Transifex. From the Transifex dashboard, navigate to Settings > Integrations > GitHub > Manage, and click the **Manual Sync** button at top right. ![Transifex manual sync](../media/development/transifex_sync.png) diff --git a/docs/features/authentication-permissions.md b/docs/features/authentication-permissions.md index 14e13d5cdef..cf3d11ef386 100644 --- a/docs/features/authentication-permissions.md +++ b/docs/features/authentication-permissions.md @@ -41,7 +41,7 @@ NetBox integrates with the open source [python-social-auth](https://github.com/p * Google * Hashicorp Vault * Keycloak -* Microsoft Azure AD +* Microsoft Entra ID * Microsoft Graph * Okta * OIDC diff --git a/docs/features/event-rules.md b/docs/features/event-rules.md index 158dc111a71..14b54f00087 100644 --- a/docs/features/event-rules.md +++ b/docs/features/event-rules.md @@ -1,9 +1,10 @@ # Event Rules -NetBox includes the ability to execute certain functions in response to internal object changes. These include: +NetBox includes the ability to automatically perform certain functions in response to internal events. These include: -* [Scripts](../customization/custom-scripts.md) execution -* [Webhooks](../integrations/webhooks.md) execution +* Executing a [custom script](../customization/custom-scripts.md) +* Sending a [webhook](../integrations/webhooks.md) +* Generating [user notifications](../features/notifications.md) For example, suppose you want to automatically configure a monitoring system to start monitoring a device when its operational status is changed to active, and remove it from monitoring for any other status. You can create a webhook in NetBox for the device model and craft its content and destination URL to effect the desired change on the receiving system. You can then associate an event rule with this webhook and the webhook will be sent automatically by NetBox whenever the configured constraints are met. diff --git a/docs/features/facilities.md b/docs/features/facilities.md index 84c7c57333b..4c8dfe265bc 100644 --- a/docs/features/facilities.md +++ b/docs/features/facilities.md @@ -56,6 +56,10 @@ A site typically represents a building within a region and/or site group. Each s A location can be any logical subdivision within a building, such as a floor or room. Like regions and site groups, locations can be nested into a self-recursive hierarchy for maximum flexibility. And like sites, each location has an operational status assigned to it. +## Rack Types + +A rack type represents a unique specification of a rack which exists in the real world. Each rack type can be setup with weight, height, and unit ordering. New racks of this type can then be created in NetBox, and any associated specifications will be automatically replicated from the device type. + ## Racks Finally, NetBox models each equipment rack as a discrete object within a site and location. These are physical objects into which devices are installed. Each rack can be assigned an operational status, type, facility ID, and other attributes related to inventory tracking. Each rack also must define a height (in rack units) and width, and may optionally specify its physical dimensions. diff --git a/docs/features/notifications.md b/docs/features/notifications.md new file mode 100644 index 00000000000..a28a17947ae --- /dev/null +++ b/docs/features/notifications.md @@ -0,0 +1,10 @@ +# Notifications + +!!! info "This feature was introduced in NetBox v4.1." + +NetBox includes a system for generating user notifications, which can be marked as read or deleted by individual users. There are two built-in mechanisms for generating a notification: + +* A user can subscribe to an object. When that object is modified, a notification is created to inform the user of the change. +* An [event rule](./event-rules.md) can be defined to automatically generate a notification for one or more users in response to specific system events. + +Additionally, NetBox plugins can generate notifications for their own purposes. diff --git a/docs/features/synchronized-data.md b/docs/features/synchronized-data.md index 8c95c87791f..23c79feed88 100644 --- a/docs/features/synchronized-data.md +++ b/docs/features/synchronized-data.md @@ -13,6 +13,9 @@ To enable remote data synchronization, the NetBox administrator first designates !!! info Data backends which connect to external sources typically require the installation of one or more supporting Python libraries. The Git backend requires the [`dulwich`](https://www.dulwich.io/) package, and the S3 backend requires the [`boto3`](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) package. These must be installed within NetBox's environment to enable these backends. +!!! info + If you are configuring Git and have `HTTP_PROXIES` configured to use the SOCKS protocol, you will also need to install the [`python_socks`](https://pypi.org/project/python-socks/) Python library. + Each type of remote source has its own configuration parameters. For instance, a git source will ask the user to specify a branch and authentication credentials. Once the source has been created, a synchronization job is run to automatically replicate remote files in the local database. The following NetBox models can be associated with replicated data files: diff --git a/docs/integrations/graphql-api.md b/docs/integrations/graphql-api.md index 3ccb4d4a19f..425c3adda9d 100644 --- a/docs/integrations/graphql-api.md +++ b/docs/integrations/graphql-api.md @@ -112,4 +112,4 @@ Authorization: Token $TOKEN ## Disabling the GraphQL API -If not needed, the GraphQL API can be disabled by setting the [`GRAPHQL_ENABLED`](../configuration/miscellaneous.md#graphql_enabled) configuration parameter to False and restarting NetBox. +If not needed, the GraphQL API can be disabled by setting the [`GRAPHQL_ENABLED`](../configuration/graphql-api.md#graphql_enabled) configuration parameter to False and restarting NetBox. diff --git a/docs/integrations/rest-api.md b/docs/integrations/rest-api.md index 1ba00958fdc..215b561a74c 100644 --- a/docs/integrations/rest-api.md +++ b/docs/integrations/rest-api.md @@ -101,7 +101,7 @@ See the [filtering documentation](../reference/filtering.md) for more details on ## Serialization -The REST API employs two types of serializers to represent model data: base serializers and nested serializers. The base serializer is used to present the complete view of a model. This includes all database table fields which comprise the model, and may include additional metadata. A base serializer includes relationships to parent objects, but **does not** include child objects. For example, the `VLANSerializer` includes a nested representation its parent VLANGroup (if any), but does not include any assigned Prefixes. +The REST API generally represents objects in one of two ways: complete or brief. The base serializer is used to present the complete view of an object. This includes all database table fields which comprise the model, and may include additional metadata. A base serializer includes relationships to parent objects, but **does not** include child objects. For example, the `VLANSerializer` includes a nested representation its parent VLANGroup (if any), but does not include any assigned Prefixes. Serializers employ a minimal "brief" representation of related objects, which includes only the attributes prudent for identifying the object. ```json { @@ -139,7 +139,7 @@ The REST API employs two types of serializers to represent model data: base seri ### Related Objects -Related objects (e.g. `ForeignKey` fields) are represented using nested serializers. A nested serializer provides a minimal representation of an object, including only its direct URL and enough information to display the object to a user. When performing write API actions (`POST`, `PUT`, and `PATCH`), related objects may be specified by either numeric ID (primary key), or by a set of attributes sufficiently unique to return the desired object. +Related objects (e.g. `ForeignKey` fields) are included using nested brief representations. This is a minimal representation of an object, including only its direct URL and enough information to display the object to a user. When performing write API actions (`POST`, `PUT`, and `PATCH`), related objects may be specified by either numeric ID (primary key), or by a set of attributes sufficiently unique to return the desired object. For example, when creating a new device, its rack can be specified by NetBox ID (PK): @@ -151,7 +151,7 @@ For example, when creating a new device, its rack can be specified by NetBox ID } ``` -Or by a set of nested attributes which uniquely identify the rack: +Or by a set of attributes which uniquely identify the rack: ```json { diff --git a/docs/media/misc/netbox_cloud.png b/docs/media/misc/netbox_cloud.png deleted file mode 100644 index f9deca67446..00000000000 Binary files a/docs/media/misc/netbox_cloud.png and /dev/null differ diff --git a/docs/media/misc/netbox_logo.png b/docs/media/misc/netbox_logo.png deleted file mode 100644 index c6e0a58e625..00000000000 Binary files a/docs/media/misc/netbox_logo.png and /dev/null differ diff --git a/docs/media/screenshots/cable-trace.png b/docs/media/screenshots/cable-trace.png index 63cba056f90..d2b5a6c2d26 100644 Binary files a/docs/media/screenshots/cable-trace.png and b/docs/media/screenshots/cable-trace.png differ diff --git a/docs/media/screenshots/home-dark.png b/docs/media/screenshots/home-dark.png index 95a6468fef8..c19685cca59 100644 Binary files a/docs/media/screenshots/home-dark.png and b/docs/media/screenshots/home-dark.png differ diff --git a/docs/media/screenshots/home-light.png b/docs/media/screenshots/home-light.png index ed249cbddbb..dff33b36f5f 100644 Binary files a/docs/media/screenshots/home-light.png and b/docs/media/screenshots/home-light.png differ diff --git a/docs/media/screenshots/prefixes-list.png b/docs/media/screenshots/prefixes-list.png index a5e5a4b8be6..d114a5d50e3 100644 Binary files a/docs/media/screenshots/prefixes-list.png and b/docs/media/screenshots/prefixes-list.png differ diff --git a/docs/media/screenshots/rack.png b/docs/media/screenshots/rack.png index a5954d644ee..812ce87481b 100644 Binary files a/docs/media/screenshots/rack.png and b/docs/media/screenshots/rack.png differ diff --git a/docs/models/circuits/circuit.md b/docs/models/circuits/circuit.md index 19fd8c88262..c75e2032212 100644 --- a/docs/models/circuits/circuit.md +++ b/docs/models/circuits/circuit.md @@ -36,6 +36,12 @@ The operational status of the circuit. By default, the following statuses are av !!! tip "Custom circuit statuses" Additional circuit statuses may be defined by setting `Circuit.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter. +### Distance + +!!! info "This field was introduced in NetBox v4.2." + +The distance between the circuit's two endpoints, including a unit designation (e.g. 100 meters or 25 feet). + ### Description A brief description of the circuit. diff --git a/docs/models/circuits/circuitgroup.md b/docs/models/circuits/circuitgroup.md new file mode 100644 index 00000000000..faa9dbc1466 --- /dev/null +++ b/docs/models/circuits/circuitgroup.md @@ -0,0 +1,15 @@ +# Circuit Groups + +!!! info "This feature was introduced in NetBox v4.1." + +[Circuits](./circuit.md) can be arranged into administrative groups for organization. The assignment of a circuit to a group is optional. + +## Fields + +### Name + +A unique human-friendly name. + +### Slug + +A unique URL-friendly identifier. (This value can be used for filtering.) diff --git a/docs/models/circuits/circuitgroupassignment.md b/docs/models/circuits/circuitgroupassignment.md new file mode 100644 index 00000000000..2aaa375af01 --- /dev/null +++ b/docs/models/circuits/circuitgroupassignment.md @@ -0,0 +1,25 @@ +# Circuit Group Assignments + +Circuits can be assigned to [circuit groups](./circuitgroup.md) for correlation purposes. For instance, three circuits, each belonging to a different provider, may each be assigned to the same circuit group. Each assignment may optionally include a priority designation. + +## Fields + +### Group + +The [circuit group](./circuitgroup.md) being assigned. + +### Circuit + +The [circuit](./circuit.md) that is being assigned to the group. + +### Priority + +The circuit's operation priority relative to its peers within the group. The assignment of a priority is optional. Choices include: + +* Primary +* Secondary +* Tertiary +* Inactive + +!!! tip + Additional priority choices may be defined by setting `CircuitGroupAssignment.priority` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter. diff --git a/docs/models/dcim/inventoryitem.md b/docs/models/dcim/inventoryitem.md index b9029f75cf7..a6dfa32db3a 100644 --- a/docs/models/dcim/inventoryitem.md +++ b/docs/models/dcim/inventoryitem.md @@ -44,3 +44,7 @@ The serial number assigned by the manufacturer. ### Asset Tag A unique, locally-administered label used to identify hardware resources. + +### Status + +The inventory item's operational status. diff --git a/docs/models/dcim/modulebay.md b/docs/models/dcim/modulebay.md index c7790951141..1bff799c2f2 100644 --- a/docs/models/dcim/modulebay.md +++ b/docs/models/dcim/modulebay.md @@ -14,6 +14,12 @@ Module bays represent a space or slot within a device in which a field-replaceab The device to which this module bay belongs. +### Module + +!!! info "This feature was introduced in NetBox v4.1." + +The module to which this bay belongs (optional). + ### Name The module bay's name. Must be unique to the parent device. diff --git a/docs/models/dcim/moduletype.md b/docs/models/dcim/moduletype.md index 3122d2e00cd..225873d6164 100644 --- a/docs/models/dcim/moduletype.md +++ b/docs/models/dcim/moduletype.md @@ -39,3 +39,9 @@ An alternative part number to uniquely identify the module type. ### Weight The numeric weight of the module, including a unit designation (e.g. 3 kilograms or 1 pound). + +### Airflow + +!!! info "The `airflow` field was introduced in NetBox v4.1." + +The direction in which air circulates through the device chassis for cooling. diff --git a/docs/models/dcim/poweroutlet.md b/docs/models/dcim/poweroutlet.md index 5c8bd6ff060..fe939005610 100644 --- a/docs/models/dcim/poweroutlet.md +++ b/docs/models/dcim/poweroutlet.md @@ -29,6 +29,10 @@ An alternative physical label identifying the power outlet. The type of power outlet. +### Color + +The power outlet's color (optional). + ### Power Port When modeling a device which redistributes power from an upstream supply, such as a power distribution unit (PDU), each power outlet should be mapped to the respective [power port](./powerport.md) on the device which supplies power. For example, a 24-outlet PDU may two power ports, each distributing power to 12 of its outlets. diff --git a/docs/models/dcim/rack.md b/docs/models/dcim/rack.md index 3989e2b0495..d610f63686a 100644 --- a/docs/models/dcim/rack.md +++ b/docs/models/dcim/rack.md @@ -20,6 +20,10 @@ The [location](./location.md) within a site where the rack has been installed (o The rack's name or identifier. Must be unique to the rack's location, if assigned. +### Rack Type + +The [physical type](./racktype.md) of this rack. The rack type defines physical attributes such as height and weight. + ### Status Operational status. @@ -43,44 +47,5 @@ The unique physical serial number assigned to this rack. A unique, locally-administered label used to identify hardware resources. -### Type - -A rack can be designated as one of the following types: - -* 2-post frame -* 4-post frame -* 4-post cabinet -* Wall-mounted frame -* Wall-mounted cabinet - -### Width - -The canonical distance between the two vertical rails on a face. (This is typically 19 inches, however other standard widths exist.) - -### Height - -The height of the rack, measured in units. - -### Starting Unit - -The number of the numerically lowest unit in the rack. This value defaults to one, but may be higher in certain situations. For example, you may want to model only a select range of units within a shared physical rack (e.g. U13 through U24). - -### Outer Dimensions - -The external width and depth of the rack can be tracked to aid in floorplan calculations. These measurements must be designated in either millimeters or inches. - -### Mounting Depth - -The maximum depth of a mounted device that the rack can accommodate, in millimeters. For four-post frames or cabinets, this is the horizontal distance between the front and rear vertical rails. (Note that this measurement does _not_ include space between the rails and the cabinet doors.) - -### Weight - -The numeric weight of the rack, including a unit designation (e.g. 10 kilograms or 20 pounds). - -### Maximum Weight - -The maximum total weight capacity for all installed devices, inclusive of the rack itself. - -### Descending Units - -If selected, the rack's elevation will display unit 1 at the top of the rack. (Most racks use ascending numbering, with unit 1 assigned to the bottommost position.) +!!! note + Some additional fields pertaining to physical attributes such as height and weight can also be defined on each rack, but should generally be defined instead on the [rack type](./racktype.md). diff --git a/docs/models/dcim/racktype.md b/docs/models/dcim/racktype.md new file mode 100644 index 00000000000..eeb90bd29da --- /dev/null +++ b/docs/models/dcim/racktype.md @@ -0,0 +1,61 @@ +# Rack Types + +!!! info "This feature was introduced in NetBox v4.1." + +A rack type defines the physical characteristics of a particular model of [rack](./rack.md). + +## Fields + +### Manufacturer + +The [manufacturer](./manufacturer.md) which produces this type of rack. + +### Model + +The model number assigned to this rack type by its manufacturer. Must be unique to the manufacturer. + +### Slug + +A unique URL-friendly representation of the model identifier. (This value can be used for filtering.) + +### Form Factor + +A rack can be designated as one of the following form factors: + +* 2-post frame +* 4-post frame +* 4-post cabinet +* Wall-mounted frame +* Wall-mounted cabinet + +### Width + +The canonical distance between the two vertical rails on a face. (This is typically 19 inches, however other standard widths exist.) + +### Height + +The height of the rack, measured in units. + +### Starting Unit + +The number of the numerically lowest unit in the rack. This value defaults to one, but may be higher in certain situations. For example, you may want to model only a select range of units within a shared physical rack (e.g. U13 through U24). + +### Outer Dimensions + +The external width and depth of the rack can be tracked to aid in floorplan calculations. These measurements must be designated in either millimeters or inches. + +### Mounting Depth + +The maximum depth of a mounted device that the rack can accommodate, in millimeters. For four-post frames or cabinets, this is the horizontal distance between the front and rear vertical rails. (Note that this measurement does _not_ include space between the rails and the cabinet doors.) + +### Weight + +The numeric weight of the rack, including a unit designation (e.g. 10 kilograms or 20 pounds). + +### Maximum Weight + +The maximum total weight capacity for all installed devices, inclusive of the rack itself. + +### Descending Units + +If selected, the rack's elevation will display unit 1 at the top of the rack. (Most racks use ascending numbering, with unit 1 assigned to the bottommost position.) diff --git a/docs/models/extras/branch.md b/docs/models/extras/branch.md index fd7922b7e36..4599fed8599 100644 --- a/docs/models/extras/branch.md +++ b/docs/models/extras/branch.md @@ -1,5 +1,8 @@ # Branches +!!! danger "Deprecated Feature" + This feature has been deprecated in NetBox v4.2 and will be removed in a future release. Please consider using the [netbox-branching plugin](https://github.com/netboxlabs/netbox-branching), which provides much more robust functionality. + A branch is a collection of related [staged changes](./stagedchange.md) that have been prepared for merging into the active database. A branch can be merged by executing its `commit()` method. Deleting a branch will delete all its related changes. ## Fields diff --git a/docs/models/extras/customfield.md b/docs/models/extras/customfield.md index 2353bc2b975..9aab66a36ca 100644 --- a/docs/models/extras/customfield.md +++ b/docs/models/extras/customfield.md @@ -42,13 +42,26 @@ The type of data this field holds. This must be one of the following: For object and multiple-object fields only. Designates the type of NetBox object being referenced. +### Related Object Filter + +!!! info "This field was introduced in NetBox v4.1." + +For object and multi-object custom fields, a filter may be defined to limit the available objects when populating a field value. This filter maps object attributes to values. For example, `{"status": "active"}` will include only objects with a status of "active." + +!!! warning + This setting is employed for convenience only, and should not be relied upon to enforce data integrity. + ### Weight A numeric weight used to override alphabetic ordering of fields by name. Custom fields with a lower weight will be listed before those with a higher weight. (Note that weight applies within the context of a custom field group, if defined.) ### Required -If checked, this custom field must be populated with a valid value for the object to pass validation. +If enabled, this custom field must be populated with a valid value for the object to pass validation. + +### Unique + +If enabled, each object must have a unique value set for this custom field (per object type). ### Description @@ -107,7 +120,3 @@ For numeric custom fields only. The maximum valid value (optional). ### Validation Regex For string-based custom fields only. A regular expression used to validate the field's value (optional). - -### Uniqueness Validation - -If enabled, each object must have a unique value set for this custom field (per object type). diff --git a/docs/models/extras/eventrule.md b/docs/models/extras/eventrule.md index c105a2630cf..b48e17a1eef 100644 --- a/docs/models/extras/eventrule.md +++ b/docs/models/extras/eventrule.md @@ -18,17 +18,22 @@ The type(s) of object in NetBox that will trigger the rule. If not selected, the event rule will not be processed. -### Events +### Events Types -The events which will trigger the rule. At least one event type must be selected. +The event types which will trigger the rule. At least one event type must be selected. -| Name | Description | -|------------|--------------------------------------| -| Creations | A new object has been created | -| Updates | An existing object has been modified | -| Deletions | An object has been deleted | -| Job starts | A job for an object starts | -| Job ends | A job for an object terminates | +| Name | Description | +|----------------|---------------------------------------------| +| Object created | A new object has been created | +| Object updated | An existing object has been modified | +| Object deleted | An object has been deleted | +| Job started | A background job is initiated | +| Job completed | A background job completes successfully | +| Job failed | A background job fails | +| Job errored | A background job is aborted due to an error | + +!!! tip "Custom Event Types" + The above list includes only built-in event types. NetBox plugins can also register their own custom event types. ### Conditions diff --git a/docs/models/extras/notification.md b/docs/models/extras/notification.md new file mode 100644 index 00000000000..e72a35bec53 --- /dev/null +++ b/docs/models/extras/notification.md @@ -0,0 +1,17 @@ +# Notification + +A notification alerts a user that a specific action has taken place in NetBox, such as an object being modified or a background job completing. A notification may be generated via a user's [subscription](./subscription.md) to a particular object, or by an event rule targeting a [notification group](./notificationgroup.md) of which the user is a member. + +## Fields + +### User + +The recipient of the notification. + +### Object + +The object to which the notification relates. + +### Event Type + +The type of event indicated by the notification. diff --git a/docs/models/extras/notificationgroup.md b/docs/models/extras/notificationgroup.md new file mode 100644 index 00000000000..6463d137ad3 --- /dev/null +++ b/docs/models/extras/notificationgroup.md @@ -0,0 +1,17 @@ +# Notification Group + +A set of NetBox users and/or groups of users identified as recipients for certain [notifications](./notification.md). + +## Fields + +### Name + +The name of the notification group. + +### Users + +One or more users directly designated as members of the notification group. + +### Groups + +All users of any selected groups are considered as members of the notification group. diff --git a/docs/models/extras/stagedchange.md b/docs/models/extras/stagedchange.md index feda2fee6fa..0693a32d31d 100644 --- a/docs/models/extras/stagedchange.md +++ b/docs/models/extras/stagedchange.md @@ -1,5 +1,8 @@ # Staged Changes +!!! danger "Deprecated Feature" + This feature has been deprecated in NetBox v4.2 and will be removed in a future release. Please consider using the [netbox-branching plugin](https://github.com/netboxlabs/netbox-branching), which provides much more robust functionality. + A staged change represents the creation of a new object or the modification or deletion of an existing object to be performed at some future point. Each change must be assigned to a [branch](./branch.md). Changes can be applied individually via the `apply()` method, however it is recommended to apply changes in bulk using the parent branch's `commit()` method. diff --git a/docs/models/extras/subscription.md b/docs/models/extras/subscription.md new file mode 100644 index 00000000000..3fc4a1f11be --- /dev/null +++ b/docs/models/extras/subscription.md @@ -0,0 +1,15 @@ +# Subscription + +A record indicating that a user is to be notified of any changes to a particular NetBox object. A notification maps exactly one user to exactly one object. + +When an object to which a user is subscribed changes, a [notification](./notification.md) is generated for the user. + +## Fields + +### User + +The subscribed user. + +### Object + +The object to which the user is subscribed. diff --git a/docs/models/ipam/asn.md b/docs/models/ipam/asn.md index 8de3cfd930c..17fa5ebe3e2 100644 --- a/docs/models/ipam/asn.md +++ b/docs/models/ipam/asn.md @@ -1,6 +1,6 @@ # ASNs -An Autonomous System Number (ASN) is a numeric identifier used in the BGP protocol to identify which [autonomous system](https://en.wikipedia.org/wiki/Autonomous_system_%28Internet%29) a particular prefix is originating and transiting through. NetBox support both 32- and 64- ASNs. +An Autonomous System Number (ASN) is a numeric identifier used in the Border Gateway Protocol (BGP) to identify which [autonomous system](https://en.wikipedia.org/wiki/Autonomous_system_%28Internet%29) a particular prefix is originating from or transiting through. NetBox supports both 16- and 32-bit ASNs. ASNs must be globally unique within NetBox, and may be allocated from within a [defined range](./asnrange.md). Each ASN may be assigned to multiple [sites](../dcim/site.md). @@ -8,7 +8,7 @@ ASNs must be globally unique within NetBox, and may be allocated from within a [ ### AS Number -The 32- or 64-bit AS number. +The 16- or 32-bit AS number. ### RIR diff --git a/docs/models/ipam/vlangroup.md b/docs/models/ipam/vlangroup.md index a2920fb70a4..20989452f90 100644 --- a/docs/models/ipam/vlangroup.md +++ b/docs/models/ipam/vlangroup.md @@ -14,9 +14,11 @@ A unique human-friendly name. A unique URL-friendly identifier. (This value can be used for filtering.) -### Minimum & Maximum VLAN IDs +### VLAN ID Ranges -A minimum and maximum child VLAN ID must be set for each group. (These default to 1 and 4094 respectively.) VLANs created within a group must have a VID that falls between these values (inclusive). +!!! info "This field replaced the legacy `min_vid` and `max_vid` fields in NetBox v4.1." + +The set of VLAN IDs which are encompassed by the group. By default, this will be the entire range of valid IEEE 802.1Q VLAN IDs (1 to 4094, inclusive). VLANs created within a group must have a VID that falls within one of these ranges. Ranges may not overlap. ### Scope diff --git a/docs/models/virtualization/virtualdisk.md b/docs/models/virtualization/virtualdisk.md index 9d256bb66c1..3f170c05a76 100644 --- a/docs/models/virtualization/virtualdisk.md +++ b/docs/models/virtualization/virtualdisk.md @@ -10,4 +10,4 @@ A human-friendly name that is unique to the assigned virtual machine. ### Size -The allocated disk size, in gigabytes. +The allocated disk size, in megabytes. diff --git a/docs/models/virtualization/virtualmachine.md b/docs/models/virtualization/virtualmachine.md index 7a801ca656f..7ea31111ce5 100644 --- a/docs/models/virtualization/virtualmachine.md +++ b/docs/models/virtualization/virtualmachine.md @@ -50,9 +50,13 @@ The amount of running memory provisioned, in megabytes. ### Disk -The amount of disk storage provisioned, in gigabytes. +The amount of disk storage provisioned, in megabytes. + +!!! warning + This field may be directly modified only on virtual machines which do not define discrete [virtual disks](./virtualdisk.md). Otherwise, it will report the sum of all attached disks. ### Serial Number -Optional serial number assigned to this VM. +!!! info "This field was introduced in NetBox v4.1." +Optional serial number assigned to this virtual machine. Unlike devices, uniqueness is not enforced for virtual machine serial numbers. diff --git a/docs/models/vpn/l2vpn.md b/docs/models/vpn/l2vpn.md index 79b7435bfae..1167c1c1780 100644 --- a/docs/models/vpn/l2vpn.md +++ b/docs/models/vpn/l2vpn.md @@ -28,6 +28,7 @@ The technology employed in forming and operating the L2VPN. Choices include: * VXLAN-EVPN * MPLS-EVPN * PBB-EVPN +* EVPN-VPWS !!! note Designating the type as VPWS, EPL, EP-LAN, EP-TREE will limit the L2VPN instance to two terminations. diff --git a/docs/models/wireless/wirelesslink.md b/docs/models/wireless/wirelesslink.md index e670b69ec4f..7553902b069 100644 --- a/docs/models/wireless/wirelesslink.md +++ b/docs/models/wireless/wirelesslink.md @@ -20,6 +20,12 @@ The operational status of the link. Options include: The service set identifier (SSID) for the wireless link (optional). +### Distance + +!!! info "This field was introduced in NetBox v4.1." + +The distance between the link's two endpoints, including a unit designation (e.g. 100 meters or 25 feet). + ### Authentication Type The type of wireless authentication in use. Options include: @@ -40,7 +46,3 @@ The security cipher used to apply wireless authentication. Options include: ### Pre-Shared Key The security key configured on each client to grant access to the secured wireless LAN. This applies only to certain authentication types. - -### Distance - -The numeric distance of the link, including a unit designation (e.g. 100 meters or 25 feet). diff --git a/docs/netbox_logo.png b/docs/netbox_logo.png deleted file mode 100644 index c6e0a58e625..00000000000 Binary files a/docs/netbox_logo.png and /dev/null differ diff --git a/docs/netbox_logo.svg b/docs/netbox_logo.svg index 5321be100ee..93362cbe6ff 100644 --- a/docs/netbox_logo.svg +++ b/docs/netbox_logo.svg @@ -1,21 +1,24 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + diff --git a/docs/plugins/development/background-jobs.md b/docs/plugins/development/background-jobs.md new file mode 100644 index 00000000000..873390a5886 --- /dev/null +++ b/docs/plugins/development/background-jobs.md @@ -0,0 +1,99 @@ +# Background Jobs + +!!! info "This feature was introduced in NetBox v4.1." + +NetBox plugins can defer certain operations by enqueuing [background jobs](../../features/background-jobs.md), which are executed asynchronously by background workers. This is helpful for decoupling long-running processes from the user-facing request-response cycle. + +For example, your plugin might need to fetch data from a remote system. Depending on the amount of data and the responsiveness of the remote server, this could take a few minutes. Deferring this task to a queued job ensures that it can be completed in the background, without interrupting the user. The data it fetches can be made available once the job has completed. + +## Job Runners + +A background job implements a basic [Job](../../models/core/job.md) executor for all kinds of tasks. It has logic implemented to handle the management of the associated job object, rescheduling of periodic jobs in the given interval and error handling. Adding custom jobs is done by subclassing NetBox's `JobRunner` class. + +::: netbox.jobs.JobRunner + +#### Example + +```python title="jobs.py" +from netbox.jobs import JobRunner + + +class MyTestJob(JobRunner): + class Meta: + name = "My Test Job" + + def run(self, *args, **kwargs): + obj = self.job.object + # your logic goes here +``` + +You can schedule the background job from within your code (e.g. from a model's `save()` method or a view) by calling `MyTestJob.enqueue()`. This method passes through all arguments to `Job.enqueue()`. However, no `name` argument must be passed, as the background job name will be used instead. + +### Attributes + +`JobRunner` attributes are defined under a class named `Meta` within the job. These are optional, but encouraged. + +#### `name` + +This is the human-friendly names of your background job. If omitted, the class name will be used. + +### Scheduled Jobs + +As described above, jobs can be scheduled for immediate execution or at any later time using the `enqueue()` method. However, for management purposes, the `enqueue_once()` method allows a job to be scheduled exactly once avoiding duplicates. If a job is already scheduled for a particular instance, a second one won't be scheduled, respecting thread safety. An example use case would be to schedule a periodic task that is bound to an instance in general, but not to any event of that instance (such as updates). The parameters of the `enqueue_once()` method are identical to those of `enqueue()`. + +!!! tip + It is not forbidden to `enqueue()` additional jobs while an interval schedule is active. An example use of this would be to schedule a periodic daily synchronization, but also trigger additional synchronizations on demand when the user presses a button. + +#### Example + +```python title="jobs.py" +from netbox.jobs import JobRunner + + +class MyHousekeepingJob(JobRunner): + class Meta: + name = "Housekeeping" + + def run(self, *args, **kwargs): + # your logic goes here +``` + +```python title="__init__.py" +from netbox.plugins import PluginConfig + +class MyPluginConfig(PluginConfig): + def ready(self): + from .jobs import MyHousekeepingJob + MyHousekeepingJob.setup(interval=60) +``` + +## Task queues + +Three task queues of differing priority are defined by default: + +* High +* Default +* Low + +Any tasks in the "high" queue are completed before the default queue is checked, and any tasks in the default queue are completed before those in the "low" queue. + +Plugins can also add custom queues for their own needs by setting the `queues` attribute under the PluginConfig class. An example is included below: + +```python +class MyPluginConfig(PluginConfig): + name = 'myplugin' + ... + queues = [ + 'foo', + 'bar', + ] +``` + +The `PluginConfig` above creates two custom queues with the following names `my_plugin.foo` and `my_plugin.bar`. (The plugin's name is prepended to each queue to avoid conflicts between plugins.) + +!!! warning "Configuring the RQ worker process" + By default, NetBox's RQ worker process only services the high, default, and low queues. Plugins which introduce custom queues should advise users to either reconfigure the default worker, or run a dedicated worker specifying the necessary queues. For example: + + ``` + python manage.py rqworker my_plugin.foo my_plugin.bar + ``` diff --git a/docs/plugins/development/background-tasks.md b/docs/plugins/development/background-tasks.md deleted file mode 100644 index 5ed05752af3..00000000000 --- a/docs/plugins/development/background-tasks.md +++ /dev/null @@ -1,30 +0,0 @@ -# Background Tasks - -NetBox supports the queuing of tasks that need to be performed in the background, decoupled from the request-response cycle, using the [Python RQ](https://python-rq.org/) library. Three task queues of differing priority are defined by default: - -* High -* Default -* Low - -Any tasks in the "high" queue are completed before the default queue is checked, and any tasks in the default queue are completed before those in the "low" queue. - -Plugins can also add custom queues for their own needs by setting the `queues` attribute under the PluginConfig class. An example is included below: - -```python -class MyPluginConfig(PluginConfig): - name = 'myplugin' - ... - queues = [ - 'foo', - 'bar', - ] -``` - -The PluginConfig above creates two custom queues with the following names `my_plugin.foo` and `my_plugin.bar`. (The plugin's name is prepended to each queue to avoid conflicts between plugins.) - -!!! warning "Configuring the RQ worker process" - By default, NetBox's RQ worker process only services the high, default, and low queues. Plugins which introduce custom queues should advise users to either reconfigure the default worker, or run a dedicated worker specifying the necessary queues. For example: - - ``` - python manage.py rqworker my_plugin.foo my_plugin.bar - ``` diff --git a/docs/plugins/development/event-types.md b/docs/plugins/development/event-types.md new file mode 100644 index 00000000000..4bcdeea31a1 --- /dev/null +++ b/docs/plugins/development/event-types.md @@ -0,0 +1,18 @@ +# Event Types + +!!! info "This feature was introduced in NetBox v4.1." + +Plugins can register their own custom event types for use with NetBox [event rules](../../models/extras/eventrule.md). This is accomplished by calling the `register()` method on an instance of the `EventType` class. This can be done anywhere within the plugin. An example is provided below. + +```python +from django.utils.translation import gettext_lazy as _ +from netbox.events import EventType, EVENT_TYPE_KIND_SUCCESS + +EventType( + name='ticket_opened', + text=_('Ticket opened'), + kind=EVENT_TYPE_KIND_SUCCESS +).register() +``` + +::: netbox.events.EventType diff --git a/docs/plugins/development/index.md b/docs/plugins/development/index.md index c042be6ec7e..f3f9a3e4fff 100644 --- a/docs/plugins/development/index.md +++ b/docs/plugins/development/index.md @@ -47,6 +47,7 @@ project-name/ - __init__.py - filtersets.py - graphql.py + - jobs.py - models.py - middleware.py - navigation.py diff --git a/docs/plugins/development/models.md b/docs/plugins/development/models.md index 902ee9c82df..03cedda1699 100644 --- a/docs/plugins/development/models.md +++ b/docs/plugins/development/models.md @@ -130,6 +130,8 @@ For more information about database migrations, see the [Django documentation](h ::: netbox.models.features.ExportTemplatesMixin +::: netbox.models.features.JobsMixin + ::: netbox.models.features.JournalingMixin ::: netbox.models.features.TagsMixin diff --git a/docs/plugins/development/rest-api.md b/docs/plugins/development/rest-api.md index 62dd2c882b5..8cb5b371362 100644 --- a/docs/plugins/development/rest-api.md +++ b/docs/plugins/development/rest-api.md @@ -25,6 +25,8 @@ project-name/ Serializers are responsible for converting Python objects to JSON data suitable for conveying to consumers, and vice versa. NetBox provides the `NetBoxModelSerializer` class for use by plugins to handle the assignment of tags and custom field data. (These features can also be included ad hoc via the `CustomFieldModelSerializer` and `TaggableModelSerializer` classes.) +The default nested representation of an object is defined by the `brief_fields` attributes under the serializer's `Meta` class. (Older versions of NetBox required the definition of a separate nested serializer.) + #### Example To create a serializer for a plugin model, subclass `NetBoxModelSerializer` in `api/serializers.py`. Specify the model class and the fields to include within the serializer's `Meta` class. @@ -41,31 +43,7 @@ class MyModelSerializer(NetBoxModelSerializer): class Meta: model = MyModel fields = ('id', 'foo', 'bar', 'baz') -``` - -### Nested Serializers - -There are two cases where it is generally desirable to show only a minimal representation of an object: - -1. When displaying an object related to the one being viewed (for example, the region to which a site is assigned) -2. Listing many objects using "brief" mode - -To accommodate these, it is recommended to create nested serializers accompanying the "full" serializer for each model. NetBox provides the `WritableNestedSerializer` class for just this purpose. This class accepts a primary key value on write, but displays an object representation for read requests. It also includes a read-only `display` attribute which conveys the string representation of the object. - -#### Example - -```python -# api/serializers.py -from rest_framework import serializers -from netbox.api.serializers import WritableNestedSerializer -from my_plugin.models import MyModel - -class NestedMyModelSerializer(WritableNestedSerializer): - foo = SiteSerializer(nested=True, allow_null=True) - - class Meta: - model = MyModel - fields = ('id', 'display', 'foo') + brief_fields = ('id', 'url', 'display', 'bar') ``` ## Viewsets @@ -80,11 +58,11 @@ To create a viewset for a plugin model, subclass `NetBoxModelViewSet` in `api/vi ```python # api/views.py -from netbox.api.viewsets import ModelViewSet +from netbox.api.viewsets import NetBoxModelViewSet from my_plugin.models import MyModel from .serializers import MyModelSerializer -class MyModelViewSet(ModelViewSet): +class MyModelViewSet(NetBoxModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer ``` diff --git a/docs/plugins/development/staged-changes.md b/docs/plugins/development/staged-changes.md index 64a1a43e023..a8fd1d232e0 100644 --- a/docs/plugins/development/staged-changes.md +++ b/docs/plugins/development/staged-changes.md @@ -1,7 +1,7 @@ # Staged Changes -!!! danger "Experimental Feature" - This feature is still under active development and considered experimental in nature. Its use in production is strongly discouraged at this time. +!!! danger "Deprecated Feature" + This feature has been deprecated in NetBox v4.2 and will be removed in a future release. Please consider using the [netbox-branching plugin](https://github.com/netboxlabs/netbox-branching), which provides much more robust functionality. NetBox provides a programmatic API to stage the creation, modification, and deletion of objects without actually committing those changes to the active database. This can be useful for performing a "dry run" of bulk operations, or preparing a set of changes for administrative approval, for example. diff --git a/docs/plugins/development/views.md b/docs/plugins/development/views.md index 9781cfa55a4..1f5f164fdee 100644 --- a/docs/plugins/development/views.md +++ b/docs/plugins/development/views.md @@ -196,13 +196,14 @@ Plugins can inject custom content into certain areas of core NetBox views. This | Method | View | Description | |---------------------|-------------|-----------------------------------------------------| | `navbar()` | All | Inject content inside the top navigation bar | +| `list_buttons()` | List view | Add buttons to the top of the page | +| `buttons()` | Object view | Add buttons to the top of the page | +| `alerts()` | Object view | Inject content at the top of the page | | `left_page()` | Object view | Inject content on the left side of the page | | `right_page()` | Object view | Inject content on the right side of the page | | `full_width_page()` | Object view | Inject content across the entire bottom of the page | -| `buttons()` | Object view | Add buttons to the top of the page | -| `list_buttons()` | List view | Add buttons to the top of the page | -!!! info "The `navbar()` method was introduced in NetBox v4.1." +!!! info "The `navbar()` and `alerts()` methods were introduced in NetBox v4.1." Additionally, a `render()` method is available for convenience. This method accepts the name of a template to render, and any additional context data you want to pass. Its use is optional, however. diff --git a/docs/plugins/removal.md b/docs/plugins/removal.md index f5e81bdc083..37228a939b6 100644 --- a/docs/plugins/removal.md +++ b/docs/plugins/removal.md @@ -70,3 +70,19 @@ DROP TABLE netbox=> DROP TABLE pluginname_bar; DROP TABLE ``` + +### Remove the Django Migration Records + +After removing the tables created by a plugin, the migrations that created the tables need to be removed from Django's migration history as well. This is necessary to make it possible to reinstall the plugin at a later time. If the migration history were left in place, Django would skip all migrations that were executed in the course of a previous installation, which would cause the plugin to fail after reinstallation. + +```no-highlight +netbox=> SELECT * FROM django_migrations WHERE app='pluginname'; + id | app | name | applied +-----+------------+------------------------+------------------------------- + 492 | pluginname | 0001_initial | 2023-12-21 11:59:59.325995+00 + 493 | pluginname | 0002_add_foo | 2023-12-21 11:59:59.330026+00 +netbox=> DELETE FROM django_migrations WHERE app='pluginname'; +``` + +!!! warning + Exercise extreme caution when altering Django system tables. Users are strongly encouraged to perform a backup of their database immediately before taking these actions. diff --git a/docs/release-notes/version-4.0.md b/docs/release-notes/version-4.0.md index 4537a8800f9..864029eba9c 100644 --- a/docs/release-notes/version-4.0.md +++ b/docs/release-notes/version-4.0.md @@ -1,6 +1,133 @@ # NetBox v4.0 -## v4.0.7 (FUTURE) +## v4.0.11 (2024-09-03) + +### Bug Fixes + +* [#17310](https://github.com/netbox-community/netbox/issues/17310) - Enforce restricted queryset for related objects in GraphQL API requests +* [#17321](https://github.com/netbox-community/netbox/issues/17321) - Ensure the job is attributed to the specified user when using the `runscript` management command +* [#17323](https://github.com/netbox-community/netbox/issues/17323) - Associate job with script object when executed using the `runscript` management command +* [#17337](https://github.com/netbox-community/netbox/issues/17337) - Fix ordering of virtual device contexts by device name +* [#17341](https://github.com/netbox-community/netbox/issues/17341) - Avoid `NoReverseMatch` exceptions with specific dashboard widget configurations + +## v4.0.10 (2024-08-29) + +### Enhancements + +* [#16857](https://github.com/netbox-community/netbox/issues/16857) - Scroll long rendered Markdown content within tables +* [#16905](https://github.com/netbox-community/netbox/issues/16905) - Enable filtering of device components by device status +* [#16949](https://github.com/netbox-community/netbox/issues/16949) - Add device count column to sites table +* [#17072](https://github.com/netbox-community/netbox/issues/17072) - Linkify email addresses & phone numbers in contact assignments list +* [#17177](https://github.com/netbox-community/netbox/issues/17177) - Add facility field to locations filter form + +### Bug Fixes + +* [#16292](https://github.com/netbox-community/netbox/issues/16292) - Ensure consistent evaluation of queryset for both individual and list GraphQL API queries +* [#16385](https://github.com/netbox-community/netbox/issues/16385) - Restore support for white, gray, and black background colors +* [#16640](https://github.com/netbox-community/netbox/issues/16640) - Fix potential corruption of JSON values in custom fields that are not UI-editable +* [#16670](https://github.com/netbox-community/netbox/issues/16670) - Fix conflicts within OpenAPI schema definition regarding nested serializers +* [#16733](https://github.com/netbox-community/netbox/issues/16733) - Fix bulk edit/delete of objects when using "select all" widget +* [#16756](https://github.com/netbox-community/netbox/issues/16756) - Fix dynamic pagination of custom script results table +* [#16825](https://github.com/netbox-community/netbox/issues/16825) - Avoid `NoReverseMatch` exception when displaying count of related object type with no list view +* [#16946](https://github.com/netbox-community/netbox/issues/16946) - GraphQL API requests with an invalid filter should return an empty set +* [#16959](https://github.com/netbox-community/netbox/issues/16959) - Fix function of "reset" button on objects filter form +* [#16973](https://github.com/netbox-community/netbox/issues/16973) - Fix support for evaluating user token (`$user`) against custom field values in permission constraints +* [#17007](https://github.com/netbox-community/netbox/issues/17007) - Center SSO authentication icon when backend is unnamed +* [#17070](https://github.com/netbox-community/netbox/issues/17070) - Image height & width values should not be required when creating an image attachment via the REST API +* [#17108](https://github.com/netbox-community/netbox/issues/17108) - Ensure template date & time filters always return localtime-aware values +* [#17117](https://github.com/netbox-community/netbox/issues/17117) - Work around Safari rendering bug +* [#17186](https://github.com/netbox-community/netbox/issues/17186) - Fix display of custom links with default style under dark mode +* [#17219](https://github.com/netbox-community/netbox/issues/17219) - Fix system config view exception when custom validator classes are employed +* [#17230](https://github.com/netbox-community/netbox/issues/17230) - Ensure consistent rendering for all dashboard widget colors +* [#17256](https://github.com/netbox-community/netbox/issues/17256) - Fix VLAN group scope selection for non-English languages +* [#17278](https://github.com/netbox-community/netbox/issues/17278) - Ensure hierarchy is recalculated when bulk editing recursively nested object types (e.g. tenant groups) +* [#17279](https://github.com/netbox-community/netbox/issues/17279) - Do not regenerate key when updating a token via REST API +* [#17286](https://github.com/netbox-community/netbox/issues/17286) - Fix exception when adding member device to virtual chassis via web UI + +--- + +## v4.0.9 (2024-08-14) + +### Enhancements + +* [#16692](https://github.com/netbox-community/netbox/issues/16692) - Enable modifying VLAN assignment while bulk editing prefixes +* [#17006](https://github.com/netbox-community/netbox/issues/17006) - Add IEEE 802.11be interface type + +### Bug Fixes + +* [#13459](https://github.com/netbox-community/netbox/issues/13459) - Correct OpenAPI schema type for `TreeNodeMultipleChoiceFilter` +* [#16073](https://github.com/netbox-community/netbox/issues/16073) - Respect default values for custom fields during bulk import of objects +* [#16176](https://github.com/netbox-community/netbox/issues/16176) - Restore ability to select multiple terminating devices when connecting a cable +* [#16871](https://github.com/netbox-community/netbox/issues/16871) - Sanitize device ID query parameter when bulk editing components to prevent exception +* [#17038](https://github.com/netbox-community/netbox/issues/17038) - Fix AttributeError exception when attempting to export system status data +* [#17064](https://github.com/netbox-community/netbox/issues/17064) - Fix misaligned text within rendered Markdown code blocks +* [#17124](https://github.com/netbox-community/netbox/issues/17124) - `BaseTable` should follow reverse one-to-one relationships when prefetching related objects +* [#17131](https://github.com/netbox-community/netbox/issues/17131) - Fix exception when creating object-type custom field without selecting related object type +* [#17144](https://github.com/netbox-community/netbox/issues/17144) - Avoid showing duplicated pop-up messages + +--- + +## v4.0.8 (2024-07-26) + +### Enhancements + +* [#14640](https://github.com/netbox-community/netbox/issues/14640) - Add Dutch language support +* [#14792](https://github.com/netbox-community/netbox/issues/14792) - Add Polish language support +* [#15375](https://github.com/netbox-community/netbox/issues/15375) - Enable customization of SSO backend name & icon +* [#15660](https://github.com/netbox-community/netbox/issues/15660) - Add Czech language support +* [#15696](https://github.com/netbox-community/netbox/issues/15696) - Add Danish language support +* [#16793](https://github.com/netbox-community/netbox/issues/16793) - Add Italian language support +* [#16933](https://github.com/netbox-community/netbox/issues/16933) - Enable toggling true/false marks on BooleanColumn +* [#16943](https://github.com/netbox-community/netbox/issues/16943) - Expand navigation breadcrumbs on job view to include the parent object + +### Bug Fixes + +* [#16357](https://github.com/netbox-community/netbox/issues/16357) - Replicate assigned type & tenant for cable when clicking "create an add another" +* [#16402](https://github.com/netbox-community/netbox/issues/16402) - Remove inoperative links from report result view +* [#16536](https://github.com/netbox-community/netbox/issues/16536) - Revert `role` & `role_id` filters for device components to `device_role` & `device_role_id` to avoid conflict with inventory item `role` field +* [#16624](https://github.com/netbox-community/netbox/issues/16624) - Correct OpenAPI schema definitions for several fields +* [#16760](https://github.com/netbox-community/netbox/issues/16760) - Fix data source syncing using git via a local path +* [#16819](https://github.com/netbox-community/netbox/issues/16819) - Highlight parent device in rack when viewing child device +* [#16838](https://github.com/netbox-community/netbox/issues/16838) - ActionsColumn should render extra buttons even when no stock actions are enabled +* [#16867](https://github.com/netbox-community/netbox/issues/16867) - Fix exception when a dashboard list widget references a model which has been removed +* [#16963](https://github.com/netbox-community/netbox/issues/16963) - Fix filtering of "accounts" link under providers list +* [#16964](https://github.com/netbox-community/netbox/issues/16964) - Ensure configured password validators are enforced + +--- + +## v4.0.7 (2024-07-09) + +### Enhancements + +* [#14554](https://github.com/netbox-community/netbox/issues/14554) - Add support for [django-storage-swift](https://github.com/dennisv/django-storage-swift) storage backend +* [#16424](https://github.com/netbox-community/netbox/issues/16424) - Enable filtering of devices by cluster and cluster group +* [#16716](https://github.com/netbox-community/netbox/issues/16716) - Display NAT address (if any) for OOB IP address under device view +* [#16725](https://github.com/netbox-community/netbox/issues/16725) - Always position the admin section last in the navigation menu +* [#16791](https://github.com/netbox-community/netbox/issues/16791) - Add 200 & 400 Gbps selections for circuit termination port speed +* [#16802](https://github.com/netbox-community/netbox/issues/16802) - Introduce `SENTRY_SEND_DEFAULT_PII` configuration parameter and disable PII export by default +* [#16817](https://github.com/netbox-community/netbox/issues/16817) - Add 200 & 400 Gbps selections for circuit commit rate + +### Bug Fixes + +* [#16523](https://github.com/netbox-community/netbox/issues/16523) - Restore highlighting of current device in virtual chassis members panel +* [#16654](https://github.com/netbox-community/netbox/issues/16654) - Fix parent item assignment for inventory item bulk import +* [#16657](https://github.com/netbox-community/netbox/issues/16657) - Fix translation of object types in global search +* [#16679](https://github.com/netbox-community/netbox/issues/16679) - Avoid overwriting custom JSON fields during bulk edit +* [#16689](https://github.com/netbox-community/netbox/issues/16689) - System configuration view should reflect static parameters when no config revisions exist +* [#16714](https://github.com/netbox-community/netbox/issues/16714) - Fix cloning of device types with 0U height +* [#16721](https://github.com/netbox-community/netbox/issues/16721) - Fix errant API request after deselecting a rack in device edit form +* [#16723](https://github.com/netbox-community/netbox/issues/16723) - Fix escaping of path to virtual environment in `upgrade.sh` +* [#16735](https://github.com/netbox-community/netbox/issues/16735) - Object list "results" tab should show a count of zero when empty +* [#16747](https://github.com/netbox-community/netbox/issues/16747) - Avoid clearing entire search cache when manually reindexing specific apps/models +* [#16758](https://github.com/netbox-community/netbox/issues/16758) - Ensure manually selected lagnuage persists across browser sessions +* [#16779](https://github.com/netbox-community/netbox/issues/16779) - Fix saved filter selection for child object lists +* [#16780](https://github.com/netbox-community/netbox/issues/16780) - IKE proposal created via REST API should not require authentication_algorithm +* [#16796](https://github.com/netbox-community/netbox/issues/16796) - Allow assignment of VM with no site to a cluster with a site +* [#16806](https://github.com/netbox-community/netbox/issues/16806) - Fix redirect URL when creating contact assignments with "add another" button +* [#16807](https://github.com/netbox-community/netbox/issues/16807) - Fix layout of VLAN edit form when custom fields are present +* [#16808](https://github.com/netbox-community/netbox/issues/16808) - Fix event rule triggering in scenario where objects are updated immediately prior to deletion +* [#16813](https://github.com/netbox-community/netbox/issues/16813) - Fix AttributeError exception when filtering bookmarks in dashboard widget by object type +* [#16843](https://github.com/netbox-community/netbox/issues/16843) - Permit creation of IKE policies via REST API without specifying an IKE mode --- diff --git a/docs/release-notes/version-4.1.md b/docs/release-notes/version-4.1.md index c6c260ee01c..d48bb899ff4 100644 --- a/docs/release-notes/version-4.1.md +++ b/docs/release-notes/version-4.1.md @@ -1,29 +1,227 @@ # NetBox v4.1 -## v4.1.0 (FUTURE) +## v4.1.4 (2024-10-15) + +### Enhancements + +* [#11671](https://github.com/netbox-community/netbox/issues/11671) - Display device's rack position in cable traces +* [#15829](https://github.com/netbox-community/netbox/issues/15829) - Rename Microsoft Azure AD SSO backend to Microsoft Entra ID +* [#16009](https://github.com/netbox-community/netbox/issues/16009) - Float form & bulk operation buttons within UI +* [#17079](https://github.com/netbox-community/netbox/issues/17079) - Introduce additional choices for device airflow direction +* [#17216](https://github.com/netbox-community/netbox/issues/17216) - Add EVPN-VPWS L2VPN type +* [#17655](https://github.com/netbox-community/netbox/issues/17655) - Limit the display of tagged VLANs within interface tables +* [#17669](https://github.com/netbox-community/netbox/issues/17669) - Enable filtering VLANs by assigned device or VM interface + +### Bug Fixes + +* [#16024](https://github.com/netbox-community/netbox/issues/16024) - Fix AND/OR filtering in GraphQL API for selection fields +* [#17400](https://github.com/netbox-community/netbox/issues/17400) - Fix cable tracing across split paths +* [#17562](https://github.com/netbox-community/netbox/issues/17562) - Fix GraphQL API query support for custom field choices +* [#17566](https://github.com/netbox-community/netbox/issues/17566) - Fix AttributeError exception resulting from background jobs with no associated object type +* [#17614](https://github.com/netbox-community/netbox/issues/17614) - Disallow removal of a master device from its virtual chassis +* [#17636](https://github.com/netbox-community/netbox/issues/17636) - Fix filtering of related objects when adding a power port, rear port, or inventory item template to a device type +* [#17644](https://github.com/netbox-community/netbox/issues/17644) - Correct sizing of logo & SSO icons on login page +* [#17648](https://github.com/netbox-community/netbox/issues/17648) - Fix AttributeError exception when attempting to delete a background job under certain conditions +* [#17663](https://github.com/netbox-community/netbox/issues/17663) - Fix extended lookups for choice field filters +* [#17671](https://github.com/netbox-community/netbox/issues/17671) - Fix the display of rack types in global search results +* [#17713](https://github.com/netbox-community/netbox/issues/17713) - Fix UnboundLocalError exception when attempting to sync data source in parallel + +--- + +## v4.1.3 (2024-10-02) + +### Enhancements + +* [#17639](https://github.com/netbox-community/netbox/issues/17639) - Add SOCKS support to proxy settings for Git remote data sources + +### Bug Fixes + +* [#17558](https://github.com/netbox-community/netbox/issues/17558) - Raise validation error when attempting to remove a custom field choice in use + +--- + +## v4.1.2 (2024-09-26) + +### Enhancements + +* [#14201](https://github.com/netbox-community/netbox/issues/14201) - Enable global search for AS numbers using "AS" prefix +* [#15408](https://github.com/netbox-community/netbox/issues/15408) - Enable bulk import of primary IPv4 & IPv6 addresses for virtual device contexts (VDCs) +* [#16781](https://github.com/netbox-community/netbox/issues/16781) - Add 100Base-X SFP interface type +* [#17255](https://github.com/netbox-community/netbox/issues/17255) - Include return URL when creating new IP address from prefix IPs list +* [#17471](https://github.com/netbox-community/netbox/issues/17471) - Add Eaton C39 power outlet type +* [#17482](https://github.com/netbox-community/netbox/issues/17482) - Do not preload Branch & StagedChange models in `nbshell` +* [#17550](https://github.com/netbox-community/netbox/issues/17550) - Add IEEE 802.15.4 wireless interface type + +### Bug Fixes + +* [#16837](https://github.com/netbox-community/netbox/issues/16837) - Fix filtering of cables with no type assigned +* [#17083](https://github.com/netbox-community/netbox/issues/17083) - Trim clickable area of form field labels +* [#17126](https://github.com/netbox-community/netbox/issues/17126) - Show total device weight in both imperial & metric units +* [#17360](https://github.com/netbox-community/netbox/issues/17360) - Fix AttributeError under child object views when experimental HTMX navigation is enabled +* [#17406](https://github.com/netbox-community/netbox/issues/17406) - Fix the cleanup of stale custom field data after removing a plugin +* [#17419](https://github.com/netbox-community/netbox/issues/17419) - Rebuild MPTT for module bays on upgrade to v4.1 +* [#17492](https://github.com/netbox-community/netbox/issues/17492) - Fix URL resolution in `NetBoxModelSerializer` for plugin models +* [#17497](https://github.com/netbox-community/netbox/issues/17497) - Fix uncaught FieldError exception when referencing an invalid field on a related object during bulk import +* [#17498](https://github.com/netbox-community/netbox/issues/17498) - Fix MultipleObjectsReturned exception when importing a device type without uniquely specifying a manufacturer +* [#17501](https://github.com/netbox-community/netbox/issues/17501) - Fix reporting of last run time & status for custom scripts under UI +* [#17511](https://github.com/netbox-community/netbox/issues/17511) - Restore consistent font support for non-Latin characters +* [#17517](https://github.com/netbox-community/netbox/issues/17517) - Fix cable termination selection after switching termination type +* [#17521](https://github.com/netbox-community/netbox/issues/17521) - Correct text color in notification pop-ups under dark mode +* [#17522](https://github.com/netbox-community/netbox/issues/17522) - Fix language translation of form field labels under user preferences +* [#17537](https://github.com/netbox-community/netbox/issues/17537) - Fix global search support for ASN range names +* [#17555](https://github.com/netbox-community/netbox/issues/17555) - Fix toggling disconnected interfaces under device view +* [#17601](https://github.com/netbox-community/netbox/issues/17601) - Record change to terminating object when disconnecting a cable +* [#17605](https://github.com/netbox-community/netbox/issues/17605) - Fix calculation of aggregate VM disk space under cluster view +* [#17611](https://github.com/netbox-community/netbox/issues/17611) - Correct custom field minimum value validation error message + +--- + +## v4.1.1 (2024-09-12) + +### Enhancements + +* [#16926](https://github.com/netbox-community/netbox/issues/16926) - Add USB front & rear port types +* [#17347](https://github.com/netbox-community/netbox/issues/17347) - Add NEMA L22-20 power port & outlet types + +### Bug Fixes + +* [#17066](https://github.com/netbox-community/netbox/issues/17066) - Fix OpenAPI schema definition for custom scripts REST API endpoint +* [#17332](https://github.com/netbox-community/netbox/issues/17332) - Restore pagination for object list dashboard widgets +* [#17333](https://github.com/netbox-community/netbox/issues/17333) - Avoid prefetching all jobs when retrieving custom scripts via the REST API +* [#17353](https://github.com/netbox-community/netbox/issues/17353) - Fix styling of map buttons under site and device views +* [#17354](https://github.com/netbox-community/netbox/issues/17354) - Prevent object & multi-object custom fields from breaking bulk import forms +* [#17362](https://github.com/netbox-community/netbox/issues/17362) - Remove duplicate prefixes & IP addresses returned by the `present_in_vrf` query filter +* [#17364](https://github.com/netbox-community/netbox/issues/17364) - Fix rendering of Markdown tables inside object list dashboard widgets +* [#17387](https://github.com/netbox-community/netbox/issues/17387) - Fix display of the changelog tab for users with sufficient permission +* [#17410](https://github.com/netbox-community/netbox/issues/17410) - Enable debug toolbar middleware for `strawberry-django` only when `DEBUG` is true +* [#17414](https://github.com/netbox-community/netbox/issues/17414) - Fix support for declaring individual VLAN IDs within a VLAN group +* [#17431](https://github.com/netbox-community/netbox/issues/17431) - Fix database migration error when upgrading to v4.1 from v3.7 or earlier +* [#17437](https://github.com/netbox-community/netbox/issues/17437) - Fix exception when specifying a bridge relationship on an interface template +* [#17444](https://github.com/netbox-community/netbox/issues/17444) - Custom script fails to execute when triggered by an event rule +* [#17457](https://github.com/netbox-community/netbox/issues/17457) - GraphQL `service_list` filter should not require a port number + +--- + +## v4.1.0 (2024-09-03) ### Breaking Changes * Several filters deprecated in v4.0 have been removed (see [#15410](https://github.com/netbox-community/netbox/issues/15410)). -* The unit size for virtual disk size has been changed from 1 gigabyte to 1 megabyte. Existing values have been updated accordingly. +* The unit size for `VirtualMachine.disk` and `VirtualDisk.size` has been changed from 1 gigabyte to 1 megabyte. Existing values will be adjusted automatically during the upgrade process. +* The `min_vid` and `max_vid` fields on the VLAN group model have been replaced with `vid_ranges`, an array of starting and ending VLAN ID pairs. +* The five individual event type fields on the EventRule model have been replaced by a single `event_types` array field, which lists applicable event types by name. +* All UI views & API endpoints associated with change records have been moved from `/extras` to `/core`. +* The `validate()` method on CustomValidator subclasses now **must** accept the request argument (deprecated in v4.0 by [#14279](https://github.com/netbox-community/netbox/issues/14279/)). ### New Features +#### Circuit Groups ([#7025](https://github.com/netbox-community/netbox/issues/7025)) + +Circuits can now be assigned to groups for administrative purposes. Each circuit may be assigned to multiple groups, and each assignment may optionally indicate a priority (primary, secondary, or tertiary). + +#### VLAN Group ID Ranges ([#9627](https://github.com/netbox-community/netbox/issues/9627)) + +The VLAN group model has been enhanced to support multiple VLAN ID (VID) ranges, whereas previously it could track only a single beginning and ending VID pair. VID ranges are stored as an array of beginning and ending (inclusive) integer pairs, e.g. `1-100,1000-1999`. + +#### Nested Device Modules ([#10500](https://github.com/netbox-community/netbox/issues/10500)) + +Module bays can now be added to modules to effect a hierarchical arrangement of submodules within a device. A module installed within a device's module bay may itself have module bays into which child modules may be installed. + +#### Rack Types ([#12826](https://github.com/netbox-community/netbox/issues/12826)) + +A new rack type model has been introduced, which functions similarly to device types. Users can now define a common make and model of equipment rack, the attributes of which are automatically populated when creating a new rack of that type. Backward compatibility for racks with individually defined characteristics is fully retained. + +#### Plugins Catalog Integration ([#14731](https://github.com/netbox-community/netbox/issues/14731)) + +The NetBox UI now integrates directly with the canonical [plugins catalog](https://netboxlabs.com/netbox-plugins/) hosted by [NetBox Labs](https://netboxlabs.com). Users can now explore available plugins and check for newer releases natively within the NetBox user interface. + +#### User Notifications ([#15621](https://github.com/netbox-community/netbox/issues/15621)) + +NetBox now includes a user notification system. Users can subscribe to individual objects and be alerted to changes within the web interface. Additionally, event rules can be created to trigger notifications for specific users and/or groups. Plugins can also employ this notification system for their own purposes. + ### Enhancements * [#7537](https://github.com/netbox-community/netbox/issues/7537) - Add a serial number field for virtual machines +* [#8198](https://github.com/netbox-community/netbox/issues/8198) - Enable uniqueness enforcement for custom field values +* [#8984](https://github.com/netbox-community/netbox/issues/8984) - Enable filtering of custom script output by log level +* [#11969](https://github.com/netbox-community/netbox/issues/11969) - Support for tracking airflow on racks and module types +* [#14656](https://github.com/netbox-community/netbox/issues/14656) - Dynamically render the custom field edit form depending on the selected field type +* [#15106](https://github.com/netbox-community/netbox/issues/15106) - Add `distance` and `distance_unit` fields for wireless links +* [#15156](https://github.com/netbox-community/netbox/issues/15156) - Add `display_url` field to all REST API serializers, which links to the corresponding UI view for an object +* [#16574](https://github.com/netbox-community/netbox/issues/16574) - Add `last_synced` time to REST API serializer for data sources +* [#16580](https://github.com/netbox-community/netbox/issues/16580) - Enable plugin views to enforce `LOGIN_REQUIRED` selectively (remove `AUTH_EXEMPT_PATHS`) +* [#16782](https://github.com/netbox-community/netbox/issues/16782) - Enable filtering of selection choices for object and multi-object custom fields +* [#16907](https://github.com/netbox-community/netbox/issues/16907) - Update user interface styling +* [#17051](https://github.com/netbox-community/netbox/issues/17051) - Introduce `ISOLATED_DEPLOYMENT` config parameter for denoting Internet isolation +* [#17221](https://github.com/netbox-community/netbox/issues/17221) - `ObjectEditView` now supports HTMX-based object editing +* [#17288](https://github.com/netbox-community/netbox/issues/17288) - Introduce a configurable limit on the number of aliases within a GraphQL API request +* [#17289](https://github.com/netbox-community/netbox/issues/17289) - Enforce a standard policy for local passwords by default +* [#17318](https://github.com/netbox-community/netbox/issues/17318) - Include the assigned provider in nested API representation of circuits + +### Bug Fixes (From Beta1) + +* [#17086](https://github.com/netbox-community/netbox/issues/17086) - Fix exception when viewing a job with no related object +* [#17097](https://github.com/netbox-community/netbox/issues/17097) - Record static object representation when calling `NotificationGroup.notify()` +* [#17098](https://github.com/netbox-community/netbox/issues/17098) - Prevent automatic deletion of related notifications when deleting an object +* [#17159](https://github.com/netbox-community/netbox/issues/17159) - Correct file paths in plugin installation instructions +* [#17163](https://github.com/netbox-community/netbox/issues/17163) - Fix filtering of related services under IP address view +* [#17169](https://github.com/netbox-community/netbox/issues/17169) - Avoid duplicating catalog listings for installed plugins +* [#17301](https://github.com/netbox-community/netbox/issues/17301) - Correct styling of the edit & delete buttons for custom script modules +* [#17302](https://github.com/netbox-community/netbox/issues/17302) - Fix log level filtering support for custom script messages +* [#17306](https://github.com/netbox-community/netbox/issues/17306) - Correct rounding of reported VLAN group utilization + +### Plugins + +* [#15692](https://github.com/netbox-community/netbox/issues/15692) - Introduce improved plugin support for background jobs * [#16359](https://github.com/netbox-community/netbox/issues/16359) - Enable plugins to embed content in the top navigation bar +* [#16726](https://github.com/netbox-community/netbox/issues/16726) - Extend `PluginTemplateExtension` to enable registering multiple models +* [#16776](https://github.com/netbox-community/netbox/issues/16776) - Add an `alerts()` method to `PluginTemplateExtension` for embedding important information on object views +* [#16886](https://github.com/netbox-community/netbox/issues/16886) - Introduce a mechanism for plugins to register custom event types (for use with user notifications) ### Other Changes -* [#14692](https://github.com/netbox-community/netbox/issues/14692) - Change atomic unit for virtual disks from 1GB to 1MB -* [#15410](https://github.com/netbox-community/netbox/issues/15410) - Removed various deprecated filters +* [#14692](https://github.com/netbox-community/netbox/issues/14692) - Change the atomic unit for virtual disks from 1GB to 1MB +* [#14861](https://github.com/netbox-community/netbox/issues/14861) - The URL path for UI views concerning virtual disks has been standardized to `/virtualization/virtual-disks/` +* [#15410](https://github.com/netbox-community/netbox/issues/15410) - Remove various deprecated query filters * [#15908](https://github.com/netbox-community/netbox/issues/15908) - Indicate product edition in release data * [#16388](https://github.com/netbox-community/netbox/issues/16388) - Move all change logging resources from `extras` to `core` +* [#16884](https://github.com/netbox-community/netbox/issues/16884) - Remove the ID column from the default table configuration for changelog records +* [#16988](https://github.com/netbox-community/netbox/issues/16988) - Relocate rack items in navigation menu +* [#17143](https://github.com/netbox-community/netbox/issues/17143) - The use of legacy "nested" serializer classes has been deprecated ### REST API Changes -* The `/api/extras/object-changes/` endpoint has moved to `/api/core/object-changes/` +* The `/api/extras/object-changes/` endpoint has moved to `/api/core/object-changes/`. +* Most object representations now include a read-only `display_url` field, which links to the object's corresponding UI view. +* Added the following endpoints: + * `/api/circuits/circuit-groups/` + * `/api/circuits/circuit-group-assignments/` + * `/api/dcim/rack-types/` + * `/api/extras/notification-groups/` + * `/api/extras/notifications/` + * `/api/extras/subscriptions/` +* circuits.Circuit + * Added the `assignments` field, which lists all group assignments +* core.DataSource + * Added the read-only `last_synced` field +* dcim.ModuleBay + * Added the optional `module` foreign key field +* dcim.ModuleBayTemplate + * Added the optional `module_type` foreign key field +* dcim.ModuleType + * Added the optional `airflow` choice field +* dcim.Rack + * Added the optional `rack_type` foreign key field + * Added the optional `airflow` choice field +* extras.CustomField + * Added the `related_object_filter` JSON field for object and multi-object custom fields + * Added the `validation_unique` boolean field +* extras.EventRule + * Removed the `type_create`, `type_update`, `type_delete`, `type_job_start`, and `type_job_end` boolean fields + * Added the `event_types` array field +* ipam.VLANGroup + * Removed the `min_vid` and `max_vid` fields + * Added the `vid_ranges` field, an array of starting & ending VLAN IDs * virtualization.VirtualMachine * Added the optional `serial` field * wireless.WirelessLink diff --git a/mkdocs.yml b/mkdocs.yml index f90ef4dbe22..94a4edcb32d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -86,6 +86,7 @@ nav: - Change Logging: 'features/change-logging.md' - Journaling: 'features/journaling.md' - Event Rules: 'features/event-rules.md' + - Notifications: 'features/notifications.md' - Background Jobs: 'features/background-jobs.md' - Auth & Permissions: 'features/authentication-permissions.md' - API & Integration: 'features/api-integration.md' @@ -108,6 +109,7 @@ nav: - Required Parameters: 'configuration/required-parameters.md' - System: 'configuration/system.md' - Security: 'configuration/security.md' + - GraphQL API: 'configuration/graphql-api.md' - Remote Authentication: 'configuration/remote-authentication.md' - Data & Validation: 'configuration/data-validation.md' - Default Values: 'configuration/default-values.md' @@ -142,10 +144,11 @@ nav: - Forms: 'plugins/development/forms.md' - Filters & Filter Sets: 'plugins/development/filtersets.md' - Search: 'plugins/development/search.md' + - Event Types: 'plugins/development/event-types.md' - Data Backends: 'plugins/development/data-backends.md' - REST API: 'plugins/development/rest-api.md' - GraphQL API: 'plugins/development/graphql-api.md' - - Background Tasks: 'plugins/development/background-tasks.md' + - Background Jobs: 'plugins/development/background-jobs.md' - Dashboard Widgets: 'plugins/development/dashboard-widgets.md' - Staged Changes: 'plugins/development/staged-changes.md' - Exceptions: 'plugins/development/exceptions.md' @@ -153,7 +156,7 @@ nav: - Administration: - Authentication: - Overview: 'administration/authentication/overview.md' - - Microsoft Azure AD: 'administration/authentication/microsoft-azure-ad.md' + - Microsoft Entra ID: 'administration/authentication/microsoft-entra-id.md' - Okta: 'administration/authentication/okta.md' - Permissions: 'administration/permissions.md' - Error Reporting: 'administration/error-reporting.md' @@ -163,6 +166,8 @@ nav: - Data Model: - Circuits: - Circuit: 'models/circuits/circuit.md' + - CircuitGroup: 'models/circuits/circuitgroup.md' + - CircuitGroupAssignment: 'models/circuits/circuitgroupassignment.md' - Circuit Termination: 'models/circuits/circuittermination.md' - Circuit Type: 'models/circuits/circuittype.md' - Provider: 'models/circuits/provider.md' @@ -206,6 +211,7 @@ nav: - Rack: 'models/dcim/rack.md' - RackReservation: 'models/dcim/rackreservation.md' - RackRole: 'models/dcim/rackrole.md' + - RackType: 'models/dcim/racktype.md' - RearPort: 'models/dcim/rearport.md' - RearPortTemplate: 'models/dcim/rearporttemplate.md' - Region: 'models/dcim/region.md' @@ -225,8 +231,11 @@ nav: - ExportTemplate: 'models/extras/exporttemplate.md' - ImageAttachment: 'models/extras/imageattachment.md' - JournalEntry: 'models/extras/journalentry.md' + - Notification: 'models/extras/notification.md' + - NotificationGroup: 'models/extras/notificationgroup.md' - SavedFilter: 'models/extras/savedfilter.md' - StagedChange: 'models/extras/stagedchange.md' + - Subscription: 'models/extras/subscription.md' - Tag: 'models/extras/tag.md' - Webhook: 'models/extras/webhook.md' - IPAM: diff --git a/netbox/account/urls.py b/netbox/account/urls.py index 1276dce40d1..d74677599ee 100644 --- a/netbox/account/urls.py +++ b/netbox/account/urls.py @@ -9,6 +9,8 @@ urlpatterns = [ # Account views path('profile/', views.ProfileView.as_view(), name='profile'), path('bookmarks/', views.BookmarkListView.as_view(), name='bookmarks'), + path('notifications/', views.NotificationListView.as_view(), name='notifications'), + path('subscriptions/', views.SubscriptionListView.as_view(), name='subscriptions'), path('preferences/', views.UserConfigView.as_view(), name='preferences'), path('password/', views.ChangePasswordView.as_view(), name='change_password'), path('api-tokens/', views.UserTokenListView.as_view(), name='usertoken_list'), diff --git a/netbox/account/views.py b/netbox/account/views.py index 5220c6fe84b..05f40df3f00 100644 --- a/netbox/account/views.py +++ b/netbox/account/views.py @@ -22,7 +22,7 @@ from account.models import UserToken from core.models import ObjectChange from core.tables import ObjectChangeTable from extras.models import Bookmark -from extras.tables import BookmarkTable +from extras.tables import BookmarkTable, NotificationTable, SubscriptionTable from netbox.authentication import get_auth_backend_display, get_saml_idps from netbox.config import get_config from netbox.views import generic @@ -46,10 +46,20 @@ class LoginView(View): return super().dispatch(*args, **kwargs) def gen_auth_data(self, name, url, params): - display_name, icon_name = get_auth_backend_display(name) + display_name, icon_source = get_auth_backend_display(name) + + icon_name = None + icon_img = None + if icon_source: + if '://' in icon_source: + icon_img = icon_source + else: + icon_name = icon_source + return { 'display_name': display_name, 'icon_name': icon_name, + 'icon_img': icon_img, 'url': f'{url}?{urlencode(params)}', } @@ -101,7 +111,7 @@ class LoginView(View): # Authenticate user auth_login(request, form.get_user()) logger.info(f"User {request.user} successfully authenticated") - messages.success(request, f"Logged in as {request.user}.") + messages.success(request, _("Logged in as {user}.").format(user=request.user)) # Ensure the user has a UserConfig defined. (This should normally be handled by # create_userconfig() on user creation.) @@ -113,7 +123,7 @@ class LoginView(View): # Set the user's preferred language (if any) if language := request.user.config.get('locale.language'): - response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language) + response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language, max_age=request.session.get_expiry_age()) return response @@ -151,7 +161,7 @@ class LogoutView(View): username = request.user auth_logout(request) logger.info(f"User {username} has logged out") - messages.info(request, "You have logged out.") + messages.info(request, _("You have logged out.")) # Delete session key & language cookies (if set) upon logout response = HttpResponseRedirect(resolve_url(settings.LOGOUT_REDIRECT_URL)) @@ -208,7 +218,7 @@ class UserConfigView(LoginRequiredMixin, View): # Set/clear language cookie if language := form.cleaned_data['locale.language']: - response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language) + response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language, max_age=request.session.get_expiry_age()) else: response.delete_cookie(settings.LANGUAGE_COOKIE_NAME) @@ -226,7 +236,7 @@ class ChangePasswordView(LoginRequiredMixin, View): def get(self, request): # LDAP users cannot change their password here if getattr(request.user, 'ldap_username', None): - messages.warning(request, "LDAP-authenticated user credentials cannot be changed within NetBox.") + messages.warning(request, _("LDAP-authenticated user credentials cannot be changed within NetBox.")) return redirect('account:profile') form = PasswordChangeForm(user=request.user) @@ -241,7 +251,7 @@ class ChangePasswordView(LoginRequiredMixin, View): if form.is_valid(): form.save() update_session_auth_hash(request, form.user) - messages.success(request, "Your password has been changed successfully.") + messages.success(request, _("Your password has been changed successfully.")) return redirect('account:profile') return render(request, self.template_name, { @@ -267,6 +277,36 @@ class BookmarkListView(LoginRequiredMixin, generic.ObjectListView): } +# +# Notifications & subscriptions +# + +class NotificationListView(LoginRequiredMixin, generic.ObjectListView): + table = NotificationTable + template_name = 'account/notifications.html' + + def get_queryset(self, request): + return request.user.notifications.all() + + def get_extra_context(self, request): + return { + 'active_tab': 'notifications', + } + + +class SubscriptionListView(LoginRequiredMixin, generic.ObjectListView): + table = SubscriptionTable + template_name = 'account/subscriptions.html' + + def get_queryset(self, request): + return request.user.subscriptions.all() + + def get_extra_context(self, request): + return { + 'active_tab': 'subscriptions', + } + + # # User views for token management # diff --git a/netbox/circuits/api/nested_serializers.py b/netbox/circuits/api/nested_serializers.py index 4201b37612d..487749872aa 100644 --- a/netbox/circuits/api/nested_serializers.py +++ b/netbox/circuits/api/nested_serializers.py @@ -1,9 +1,11 @@ +import warnings + from drf_spectacular.utils import extend_schema_serializer -from rest_framework import serializers from circuits.models import * from netbox.api.fields import RelatedObjectCountField from netbox.api.serializers import WritableNestedSerializer +from .serializers_.nested import NestedProviderAccountSerializer __all__ = [ 'NestedCircuitSerializer', @@ -14,6 +16,12 @@ __all__ = [ 'NestedProviderAccountSerializer', ] +# TODO: Remove in v4.2 +warnings.warn( + "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", + DeprecationWarning +) + # # Provider networks @@ -41,17 +49,6 @@ class NestedProviderSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'circuit_count'] -# -# Provider Accounts -# - -class NestedProviderAccountSerializer(WritableNestedSerializer): - - class Meta: - model = ProviderAccount - fields = ['id', 'url', 'display_url', 'display', 'name', 'account'] - - # # Circuits # diff --git a/netbox/circuits/api/serializers.py b/netbox/circuits/api/serializers.py index 5e048218c5f..9a2af4a6749 100644 --- a/netbox/circuits/api/serializers.py +++ b/netbox/circuits/api/serializers.py @@ -1,3 +1,2 @@ from .serializers_.providers import * from .serializers_.circuits import * -from .nested_serializers import * diff --git a/netbox/circuits/api/serializers_/circuits.py b/netbox/circuits/api/serializers_/circuits.py index 7010bb2c6bb..111fa6f8726 100644 --- a/netbox/circuits/api/serializers_/circuits.py +++ b/netbox/circuits/api/serializers_/circuits.py @@ -1,17 +1,18 @@ -from rest_framework import serializers - -from circuits.choices import CircuitStatusChoices -from circuits.models import Circuit, CircuitTermination, CircuitType +from circuits.choices import CircuitPriorityChoices, CircuitStatusChoices +from circuits.models import Circuit, CircuitGroup, CircuitGroupAssignment, CircuitTermination, CircuitType from dcim.api.serializers_.cables import CabledObjectSerializer from dcim.api.serializers_.sites import SiteSerializer from netbox.api.fields import ChoiceField, RelatedObjectCountField from netbox.api.serializers import NetBoxModelSerializer, WritableNestedSerializer +from netbox.choices import DistanceUnitChoices from tenancy.api.serializers_.tenants import TenantSerializer from .providers import ProviderAccountSerializer, ProviderNetworkSerializer, ProviderSerializer __all__ = ( 'CircuitSerializer', + 'CircuitGroupAssignmentSerializer', + 'CircuitGroupSerializer', 'CircuitTerminationSerializer', 'CircuitTypeSerializer', ) @@ -43,6 +44,34 @@ class CircuitCircuitTerminationSerializer(WritableNestedSerializer): ] +class CircuitGroupSerializer(NetBoxModelSerializer): + tenant = TenantSerializer(nested=True, required=False, allow_null=True) + circuit_count = RelatedObjectCountField('assignments') + + class Meta: + model = CircuitGroup + fields = [ + 'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'tenant', + 'tags', 'custom_fields', 'created', 'last_updated', 'circuit_count' + ] + brief_fields = ('id', 'url', 'display', 'name') + + +class CircuitGroupAssignmentSerializer_(NetBoxModelSerializer): + """ + Base serializer for group assignments under CircuitSerializer. + """ + group = CircuitGroupSerializer(nested=True) + priority = ChoiceField(choices=CircuitPriorityChoices, allow_blank=True, required=False) + + class Meta: + model = CircuitGroupAssignment + fields = [ + 'id', 'url', 'display_url', 'display', 'group', 'priority', 'tags', 'created', 'last_updated', + ] + brief_fields = ('id', 'url', 'display', 'group', 'priority') + + class CircuitSerializer(NetBoxModelSerializer): provider = ProviderSerializer(nested=True) provider_account = ProviderAccountSerializer(nested=True, required=False, allow_null=True, default=None) @@ -51,15 +80,17 @@ class CircuitSerializer(NetBoxModelSerializer): tenant = TenantSerializer(nested=True, required=False, allow_null=True) termination_a = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True) termination_z = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True) + assignments = CircuitGroupAssignmentSerializer_(nested=True, many=True, required=False) + distance_unit = ChoiceField(choices=DistanceUnitChoices, allow_blank=True, required=False, allow_null=True) class Meta: model = Circuit fields = [ 'id', 'url', 'display_url', 'display', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'install_date', 'termination_date', 'commit_rate', 'description', 'termination_a', 'termination_z', - 'comments', 'tags', 'custom_fields', 'created', 'last_updated', + 'distance', 'distance_unit', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'assignments', ] - brief_fields = ('id', 'url', 'display', 'cid', 'description') + brief_fields = ('id', 'url', 'display', 'provider', 'cid', 'description') class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer): @@ -75,3 +106,14 @@ class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer 'link_peers', 'link_peers_type', 'tags', 'custom_fields', 'created', 'last_updated', '_occupied', ] brief_fields = ('id', 'url', 'display', 'circuit', 'term_side', 'description', 'cable', '_occupied') + + +class CircuitGroupAssignmentSerializer(CircuitGroupAssignmentSerializer_): + circuit = CircuitSerializer(nested=True) + + class Meta: + model = CircuitGroupAssignment + fields = [ + 'id', 'url', 'display_url', 'display', 'group', 'circuit', 'priority', 'tags', 'created', 'last_updated', + ] + brief_fields = ('id', 'url', 'display', 'group', 'circuit', 'priority') diff --git a/netbox/circuits/api/serializers_/nested.py b/netbox/circuits/api/serializers_/nested.py new file mode 100644 index 00000000000..7f03de94237 --- /dev/null +++ b/netbox/circuits/api/serializers_/nested.py @@ -0,0 +1,13 @@ +from circuits.models import ProviderAccount +from netbox.api.serializers import WritableNestedSerializer + +__all__ = ( + 'NestedProviderAccountSerializer', +) + + +class NestedProviderAccountSerializer(WritableNestedSerializer): + + class Meta: + model = ProviderAccount + fields = ['id', 'url', 'display_url', 'display', 'name', 'account'] diff --git a/netbox/circuits/api/serializers_/providers.py b/netbox/circuits/api/serializers_/providers.py index b0e27754b93..4e37871079b 100644 --- a/netbox/circuits/api/serializers_/providers.py +++ b/netbox/circuits/api/serializers_/providers.py @@ -5,7 +5,7 @@ from ipam.api.serializers_.asns import ASNSerializer from ipam.models import ASN from netbox.api.fields import RelatedObjectCountField, SerializedPKRelatedField from netbox.api.serializers import NetBoxModelSerializer -from ..nested_serializers import * +from .nested import NestedProviderAccountSerializer __all__ = ( 'ProviderAccountSerializer', diff --git a/netbox/circuits/api/urls.py b/netbox/circuits/api/urls.py index fcb7a1a512c..00af3dec684 100644 --- a/netbox/circuits/api/urls.py +++ b/netbox/circuits/api/urls.py @@ -14,6 +14,8 @@ router.register('provider-networks', views.ProviderNetworkViewSet) router.register('circuit-types', views.CircuitTypeViewSet) router.register('circuits', views.CircuitViewSet) router.register('circuit-terminations', views.CircuitTerminationViewSet) +router.register('circuit-groups', views.CircuitGroupViewSet) +router.register('circuit-group-assignments', views.CircuitGroupAssignmentViewSet) app_name = 'circuits-api' urlpatterns = router.urls diff --git a/netbox/circuits/api/views.py b/netbox/circuits/api/views.py index fffb59a5740..8cce013d74f 100644 --- a/netbox/circuits/api/views.py +++ b/netbox/circuits/api/views.py @@ -55,6 +55,26 @@ class CircuitTerminationViewSet(PassThroughPortMixin, NetBoxModelViewSet): filterset_class = filtersets.CircuitTerminationFilterSet +# +# Circuit Groups +# + +class CircuitGroupViewSet(NetBoxModelViewSet): + queryset = CircuitGroup.objects.all() + serializer_class = serializers.CircuitGroupSerializer + filterset_class = filtersets.CircuitGroupFilterSet + + +# +# Circuit Group Assignments +# + +class CircuitGroupAssignmentViewSet(NetBoxModelViewSet): + queryset = CircuitGroupAssignment.objects.all() + serializer_class = serializers.CircuitGroupAssignmentSerializer + filterset_class = filtersets.CircuitGroupAssignmentFilterSet + + # # Provider accounts # diff --git a/netbox/circuits/apps.py b/netbox/circuits/apps.py index df6804303b7..4d5f177e24e 100644 --- a/netbox/circuits/apps.py +++ b/netbox/circuits/apps.py @@ -7,7 +7,7 @@ class CircuitsConfig(AppConfig): def ready(self): from netbox.models.features import register_models - from . import signals, search + from . import signals, search # noqa: F401 # Register models register_models(*self.get_models()) diff --git a/netbox/circuits/choices.py b/netbox/circuits/choices.py index 5d0065edc7a..8c25c7459de 100644 --- a/netbox/circuits/choices.py +++ b/netbox/circuits/choices.py @@ -38,6 +38,8 @@ class CircuitCommitRateChoices(ChoiceSet): (25000000, '25 Gbps'), (40000000, '40 Gbps'), (100000000, '100 Gbps'), + (200000000, '200 Gbps'), + (400000000, '400 Gbps'), (1544, 'T1 (1.544 Mbps)'), (2048, 'E1 (2.048 Mbps)'), ] @@ -69,6 +71,24 @@ class CircuitTerminationPortSpeedChoices(ChoiceSet): (25000000, '25 Gbps'), (40000000, '40 Gbps'), (100000000, '100 Gbps'), + (200000000, '200 Gbps'), + (400000000, '400 Gbps'), (1544, 'T1 (1.544 Mbps)'), (2048, 'E1 (2.048 Mbps)'), ] + + +class CircuitPriorityChoices(ChoiceSet): + key = 'CircuitGroupAssignment.priority' + + PRIORITY_PRIMARY = 'primary' + PRIORITY_SECONDARY = 'secondary' + PRIORITY_TERTIARY = 'tertiary' + PRIORITY_INACTIVE = 'inactive' + + CHOICES = [ + (PRIORITY_PRIMARY, _('Primary')), + (PRIORITY_SECONDARY, _('Secondary')), + (PRIORITY_TERTIARY, _('Tertiary')), + (PRIORITY_INACTIVE, _('Inactive')), + ] diff --git a/netbox/circuits/filtersets.py b/netbox/circuits/filtersets.py index e526738743d..ebd1fe28d2f 100644 --- a/netbox/circuits/filtersets.py +++ b/netbox/circuits/filtersets.py @@ -13,6 +13,8 @@ from .models import * __all__ = ( 'CircuitFilterSet', + 'CircuitGroupAssignmentFilterSet', + 'CircuitGroupFilterSet', 'CircuitTerminationFilterSet', 'CircuitTypeFilterSet', 'ProviderNetworkFilterSet', @@ -237,7 +239,7 @@ class CircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilte class Meta: model = Circuit - fields = ('id', 'cid', 'description', 'install_date', 'termination_date', 'commit_rate') + fields = ('id', 'cid', 'description', 'install_date', 'termination_date', 'commit_rate', 'distance', 'distance_unit') def search(self, queryset, name, value): if not value.strip(): @@ -303,3 +305,60 @@ class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet): Q(pp_info__icontains=value) | Q(description__icontains=value) ).distinct() + + +class CircuitGroupFilterSet(OrganizationalModelFilterSet, TenancyFilterSet): + + class Meta: + model = CircuitGroup + fields = ('id', 'name', 'slug', 'description') + + +class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet): + q = django_filters.CharFilter( + method='search', + label=_('Search'), + ) + provider_id = django_filters.ModelMultipleChoiceFilter( + field_name='circuit__provider', + queryset=Provider.objects.all(), + label=_('Provider (ID)'), + ) + provider = django_filters.ModelMultipleChoiceFilter( + field_name='circuit__provider__slug', + queryset=Provider.objects.all(), + to_field_name='slug', + label=_('Provider (slug)'), + ) + circuit_id = django_filters.ModelMultipleChoiceFilter( + queryset=Circuit.objects.all(), + label=_('Circuit (ID)'), + ) + circuit = django_filters.ModelMultipleChoiceFilter( + field_name='circuit__cid', + queryset=Circuit.objects.all(), + to_field_name='cid', + label=_('Circuit (CID)'), + ) + group_id = django_filters.ModelMultipleChoiceFilter( + queryset=CircuitGroup.objects.all(), + label=_('Circuit group (ID)'), + ) + group = django_filters.ModelMultipleChoiceFilter( + field_name='group__slug', + queryset=CircuitGroup.objects.all(), + to_field_name='slug', + label=_('Circuit group (slug)'), + ) + + class Meta: + model = CircuitGroupAssignment + fields = ('id', 'priority') + + def search(self, queryset, name, value): + if not value.strip(): + return queryset + return queryset.filter( + Q(circuit__cid__icontains=value) | + Q(group__name__icontains=value) + ) diff --git a/netbox/circuits/forms/bulk_edit.py b/netbox/circuits/forms/bulk_edit.py index ea15c30100c..5cb7b5d306a 100644 --- a/netbox/circuits/forms/bulk_edit.py +++ b/netbox/circuits/forms/bulk_edit.py @@ -1,10 +1,11 @@ from django import forms from django.utils.translation import gettext_lazy as _ -from circuits.choices import CircuitCommitRateChoices, CircuitStatusChoices +from circuits.choices import CircuitCommitRateChoices, CircuitPriorityChoices, CircuitStatusChoices from circuits.models import * from dcim.models import Site from ipam.models import ASN +from netbox.choices import DistanceUnitChoices from netbox.forms import NetBoxModelBulkEditForm from tenancy.models import Tenant from utilities.forms import add_blank_choice @@ -14,6 +15,8 @@ from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker, Numbe __all__ = ( 'CircuitBulkEditForm', + 'CircuitGroupAssignmentBulkEditForm', + 'CircuitGroupBulkEditForm', 'CircuitTerminationBulkEditForm', 'CircuitTypeBulkEditForm', 'ProviderBulkEditForm', @@ -158,6 +161,17 @@ class CircuitBulkEditForm(NetBoxModelBulkEditForm): options=CircuitCommitRateChoices ) ) + distance = forms.DecimalField( + label=_('Distance'), + min_value=0, + required=False + ) + distance_unit = forms.ChoiceField( + label=_('Distance unit'), + choices=add_blank_choice(DistanceUnitChoices), + required=False, + initial='' + ) description = forms.CharField( label=_('Description'), max_length=100, @@ -169,6 +183,7 @@ class CircuitBulkEditForm(NetBoxModelBulkEditForm): fieldsets = ( FieldSet('provider', 'type', 'status', 'description', name=_('Circuit')), FieldSet('provider_account', 'install_date', 'termination_date', 'commit_rate', name=_('Service Parameters')), + FieldSet('distance', 'distance_unit', name=_('Attributes')), FieldSet('tenant', name=_('Tenancy')), ) nullable_fields = ( @@ -219,3 +234,40 @@ class CircuitTerminationBulkEditForm(NetBoxModelBulkEditForm): FieldSet('port_speed', 'upstream_speed', name=_('Termination Details')), ) nullable_fields = ('description') + + +class CircuitGroupBulkEditForm(NetBoxModelBulkEditForm): + description = forms.CharField( + label=_('Description'), + max_length=200, + required=False + ) + tenant = DynamicModelChoiceField( + label=_('Tenant'), + queryset=Tenant.objects.all(), + required=False + ) + + model = CircuitGroup + nullable_fields = ( + 'description', 'tenant', + ) + + +class CircuitGroupAssignmentBulkEditForm(NetBoxModelBulkEditForm): + circuit = DynamicModelChoiceField( + label=_('Circuit'), + queryset=Circuit.objects.all(), + required=False + ) + priority = forms.ChoiceField( + label=_('Priority'), + choices=add_blank_choice(CircuitPriorityChoices), + required=False + ) + + model = CircuitGroupAssignment + fieldsets = ( + FieldSet('circuit', 'priority'), + ) + nullable_fields = ('priority',) diff --git a/netbox/circuits/forms/bulk_import.py b/netbox/circuits/forms/bulk_import.py index 1ceb44b6070..d5cdc00a7ea 100644 --- a/netbox/circuits/forms/bulk_import.py +++ b/netbox/circuits/forms/bulk_import.py @@ -1,16 +1,18 @@ from django import forms -from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ from circuits.choices import * from circuits.models import * from dcim.models import Site +from netbox.choices import DistanceUnitChoices from netbox.forms import NetBoxModelImportForm from tenancy.models import Tenant from utilities.forms.fields import CSVChoiceField, CSVModelChoiceField, SlugField __all__ = ( 'CircuitImportForm', + 'CircuitGroupAssignmentImportForm', + 'CircuitGroupImportForm', 'CircuitTerminationImportForm', 'CircuitTerminationImportRelatedForm', 'CircuitTypeImportForm', @@ -66,9 +68,6 @@ class CircuitTypeImportForm(NetBoxModelImportForm): class Meta: model = CircuitType fields = ('name', 'slug', 'color', 'description', 'tags') - help_texts = { - 'color': mark_safe(_('RGB color in hexadecimal. Example:') + ' 00ff00'), - } class CircuitImportForm(NetBoxModelImportForm): @@ -96,6 +95,12 @@ class CircuitImportForm(NetBoxModelImportForm): choices=CircuitStatusChoices, help_text=_('Operational status') ) + distance_unit = CSVChoiceField( + label=_('Distance unit'), + choices=DistanceUnitChoices, + required=False, + help_text=_('Distance unit') + ) tenant = CSVModelChoiceField( label=_('Tenant'), queryset=Tenant.objects.all(), @@ -108,7 +113,7 @@ class CircuitImportForm(NetBoxModelImportForm): model = Circuit fields = [ 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'install_date', 'termination_date', - 'commit_rate', 'description', 'comments', 'tags' + 'commit_rate', 'distance', 'distance_unit', 'description', 'comments', 'tags' ] @@ -153,3 +158,24 @@ class CircuitTerminationImportForm(NetBoxModelImportForm, BaseCircuitTermination 'circuit', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'tags' ] + + +class CircuitGroupImportForm(NetBoxModelImportForm): + tenant = CSVModelChoiceField( + label=_('Tenant'), + queryset=Tenant.objects.all(), + required=False, + to_field_name='name', + help_text=_('Assigned tenant') + ) + + class Meta: + model = CircuitGroup + fields = ('name', 'slug', 'description', 'tenant', 'tags') + + +class CircuitGroupAssignmentImportForm(NetBoxModelImportForm): + + class Meta: + model = CircuitGroupAssignment + fields = ('circuit', 'group', 'priority') diff --git a/netbox/circuits/forms/filtersets.py b/netbox/circuits/forms/filtersets.py index 6f6473c3d9e..2e9b358e891 100644 --- a/netbox/circuits/forms/filtersets.py +++ b/netbox/circuits/forms/filtersets.py @@ -1,18 +1,22 @@ from django import forms from django.utils.translation import gettext as _ -from circuits.choices import CircuitCommitRateChoices, CircuitStatusChoices, CircuitTerminationSideChoices +from circuits.choices import CircuitCommitRateChoices, CircuitPriorityChoices, CircuitStatusChoices, CircuitTerminationSideChoices from circuits.models import * from dcim.models import Region, Site, SiteGroup from ipam.models import ASN +from netbox.choices import DistanceUnitChoices from netbox.forms import NetBoxModelFilterSetForm from tenancy.forms import TenancyFilterForm, ContactModelFilterForm +from utilities.forms import add_blank_choice from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.rendering import FieldSet from utilities.forms.widgets import DatePicker, NumberWithOptions __all__ = ( 'CircuitFilterForm', + 'CircuitGroupAssignmentFilterForm', + 'CircuitGroupFilterForm', 'CircuitTerminationFilterForm', 'CircuitTypeFilterForm', 'ProviderFilterForm', @@ -112,7 +116,7 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFi fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('provider_id', 'provider_account_id', 'provider_network_id', name=_('Provider')), - FieldSet('type_id', 'status', 'install_date', 'termination_date', 'commit_rate', name=_('Attributes')), + FieldSet('type_id', 'status', 'install_date', 'termination_date', 'commit_rate', 'distance', 'distance_unit', name=_('Attributes')), FieldSet('region_id', 'site_group_id', 'site_id', name=_('Location')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), @@ -186,6 +190,15 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFi options=CircuitCommitRateChoices ) ) + distance = forms.DecimalField( + label=_('Distance'), + required=False, + ) + distance_unit = forms.ChoiceField( + label=_('Distance unit'), + choices=add_blank_choice(DistanceUnitChoices), + required=False + ) tag = TagFilterField(model) @@ -230,3 +243,41 @@ class CircuitTerminationFilterForm(NetBoxModelFilterSetForm): label=_('Provider') ) tag = TagFilterField(model) + + +class CircuitGroupFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): + model = CircuitGroup + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), + ) + tag = TagFilterField(model) + + +class CircuitGroupAssignmentFilterForm(NetBoxModelFilterSetForm): + model = CircuitGroupAssignment + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('provider_id', 'circuit_id', 'group_id', 'priority', name=_('Assignment')), + ) + provider_id = DynamicModelMultipleChoiceField( + queryset=Provider.objects.all(), + required=False, + label=_('Provider') + ) + circuit_id = DynamicModelMultipleChoiceField( + queryset=Circuit.objects.all(), + required=False, + label=_('Circuit') + ) + group_id = DynamicModelMultipleChoiceField( + queryset=CircuitGroup.objects.all(), + required=False, + label=_('Group') + ) + priority = forms.MultipleChoiceField( + label=_('Priority'), + choices=CircuitPriorityChoices, + required=False + ) + tag = TagFilterField(model) diff --git a/netbox/circuits/forms/model_forms.py b/netbox/circuits/forms/model_forms.py index ee5e47ce713..e00034a1098 100644 --- a/netbox/circuits/forms/model_forms.py +++ b/netbox/circuits/forms/model_forms.py @@ -7,11 +7,13 @@ from ipam.models import ASN from netbox.forms import NetBoxModelForm from tenancy.forms import TenancyForm from utilities.forms.fields import CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField -from utilities.forms.rendering import FieldSet, TabbedGroups +from utilities.forms.rendering import FieldSet, InlineFields, TabbedGroups from utilities.forms.widgets import DatePicker, NumberWithOptions __all__ = ( 'CircuitForm', + 'CircuitGroupAssignmentForm', + 'CircuitGroupForm', 'CircuitTerminationForm', 'CircuitTypeForm', 'ProviderForm', @@ -106,7 +108,17 @@ class CircuitForm(TenancyForm, NetBoxModelForm): comments = CommentField() fieldsets = ( - FieldSet('provider', 'provider_account', 'cid', 'type', 'status', 'description', 'tags', name=_('Circuit')), + FieldSet( + 'provider', + 'provider_account', + 'cid', + 'type', + 'status', + InlineFields('distance', 'distance_unit', label=_('Distance')), + 'description', + 'tags', + name=_('Circuit') + ), FieldSet('install_date', 'termination_date', 'commit_rate', name=_('Service Parameters')), FieldSet('tenant_group', 'tenant', name=_('Tenancy')), ) @@ -115,7 +127,7 @@ class CircuitForm(TenancyForm, NetBoxModelForm): model = Circuit fields = [ 'cid', 'type', 'provider', 'provider_account', 'status', 'install_date', 'termination_date', 'commit_rate', - 'description', 'tenant_group', 'tenant', 'comments', 'tags', + 'distance', 'distance_unit', 'description', 'tenant_group', 'tenant', 'comments', 'tags', ] widgets = { 'install_date': DatePicker(), @@ -171,3 +183,36 @@ class CircuitTerminationForm(NetBoxModelForm): options=CircuitTerminationPortSpeedChoices ), } + + +class CircuitGroupForm(TenancyForm, NetBoxModelForm): + slug = SlugField() + + fieldsets = ( + FieldSet('name', 'slug', 'description', 'tags', name=_('Circuit Group')), + FieldSet('tenant_group', 'tenant', name=_('Tenancy')), + ) + + class Meta: + model = CircuitGroup + fields = [ + 'name', 'slug', 'description', 'tenant_group', 'tenant', 'tags', + ] + + +class CircuitGroupAssignmentForm(NetBoxModelForm): + group = DynamicModelChoiceField( + label=_('Group'), + queryset=CircuitGroup.objects.all(), + ) + circuit = DynamicModelChoiceField( + label=_('Circuit'), + queryset=Circuit.objects.all(), + selector=True + ) + + class Meta: + model = CircuitGroupAssignment + fields = [ + 'group', 'circuit', 'priority', 'tags', + ] diff --git a/netbox/circuits/graphql/filters.py b/netbox/circuits/graphql/filters.py index 10887ce3f0c..b8398b2b9b5 100644 --- a/netbox/circuits/graphql/filters.py +++ b/netbox/circuits/graphql/filters.py @@ -1,12 +1,13 @@ -import strawberry import strawberry_django -from circuits import filtersets, models +from circuits import filtersets, models from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin __all__ = ( 'CircuitTerminationFilter', 'CircuitFilter', + 'CircuitGroupAssignmentFilter', + 'CircuitGroupFilter', 'CircuitTypeFilter', 'ProviderFilter', 'ProviderAccountFilter', @@ -32,6 +33,18 @@ class CircuitTypeFilter(BaseFilterMixin): pass +@strawberry_django.filter(models.CircuitGroup, lookups=True) +@autotype_decorator(filtersets.CircuitGroupFilterSet) +class CircuitGroupFilter(BaseFilterMixin): + pass + + +@strawberry_django.filter(models.CircuitGroupAssignment, lookups=True) +@autotype_decorator(filtersets.CircuitGroupAssignmentFilterSet) +class CircuitGroupAssignmentFilter(BaseFilterMixin): + pass + + @strawberry_django.filter(models.Provider, lookups=True) @autotype_decorator(filtersets.ProviderFilterSet) class ProviderFilter(BaseFilterMixin): diff --git a/netbox/circuits/graphql/schema.py b/netbox/circuits/graphql/schema.py index ac8626cc5da..ac23421ce68 100644 --- a/netbox/circuits/graphql/schema.py +++ b/netbox/circuits/graphql/schema.py @@ -3,38 +3,31 @@ from typing import List import strawberry import strawberry_django -from circuits import models from .types import * -@strawberry.type +@strawberry.type(name="Query") class CircuitsQuery: - @strawberry.field - def circuit(self, id: int) -> CircuitType: - return models.Circuit.objects.get(pk=id) + circuit: CircuitType = strawberry_django.field() circuit_list: List[CircuitType] = strawberry_django.field() - @strawberry.field - def circuit_termination(self, id: int) -> CircuitTerminationType: - return models.CircuitTermination.objects.get(pk=id) + circuit_termination: CircuitTerminationType = strawberry_django.field() circuit_termination_list: List[CircuitTerminationType] = strawberry_django.field() - @strawberry.field - def circuit_type(self, id: int) -> CircuitTypeType: - return models.CircuitType.objects.get(pk=id) + circuit_type: CircuitTypeType = strawberry_django.field() circuit_type_list: List[CircuitTypeType] = strawberry_django.field() - @strawberry.field - def provider(self, id: int) -> ProviderType: - return models.Provider.objects.get(pk=id) + circuit_group: CircuitGroupType = strawberry_django.field() + circuit_group_list: List[CircuitGroupType] = strawberry_django.field() + + circuit_group_assignment: CircuitGroupAssignmentType = strawberry_django.field() + circuit_group_assignment_list: List[CircuitGroupAssignmentType] = strawberry_django.field() + + provider: ProviderType = strawberry_django.field() provider_list: List[ProviderType] = strawberry_django.field() - @strawberry.field - def provider_account(self, id: int) -> ProviderAccountType: - return models.ProviderAccount.objects.get(pk=id) + provider_account: ProviderAccountType = strawberry_django.field() provider_account_list: List[ProviderAccountType] = strawberry_django.field() - @strawberry.field - def provider_network(self, id: int) -> ProviderNetworkType: - return models.ProviderNetwork.objects.get(pk=id) + provider_network: ProviderNetworkType = strawberry_django.field() provider_network_list: List[ProviderNetworkType] = strawberry_django.field() diff --git a/netbox/circuits/graphql/types.py b/netbox/circuits/graphql/types.py index bae91e6b02b..45f0d065d5f 100644 --- a/netbox/circuits/graphql/types.py +++ b/netbox/circuits/graphql/types.py @@ -6,13 +6,15 @@ import strawberry_django from circuits import models from dcim.graphql.mixins import CabledObjectMixin from extras.graphql.mixins import ContactsMixin, CustomFieldsMixin, TagsMixin -from netbox.graphql.types import NetBoxObjectType, ObjectType, OrganizationalObjectType +from netbox.graphql.types import BaseObjectType, NetBoxObjectType, ObjectType, OrganizationalObjectType from tenancy.graphql.types import TenantType from .filters import * __all__ = ( 'CircuitTerminationType', 'CircuitType', + 'CircuitGroupAssignmentType', + 'CircuitGroupType', 'CircuitTypeType', 'ProviderType', 'ProviderAccountType', @@ -91,3 +93,22 @@ class CircuitType(NetBoxObjectType, ContactsMixin): tenant: TenantType | None terminations: List[CircuitTerminationType] + + +@strawberry_django.type( + models.CircuitGroup, + fields='__all__', + filters=CircuitGroupFilter +) +class CircuitGroupType(OrganizationalObjectType): + tenant: TenantType | None + + +@strawberry_django.type( + models.CircuitGroupAssignment, + fields='__all__', + filters=CircuitGroupAssignmentFilter +) +class CircuitGroupAssignmentType(TagsMixin, BaseObjectType): + group: Annotated["CircuitGroupType", strawberry.lazy('circuits.graphql.types')] + circuit: Annotated["CircuitType", strawberry.lazy('circuits.graphql.types')] diff --git a/netbox/circuits/migrations/0044_circuit_groups.py b/netbox/circuits/migrations/0044_circuit_groups.py new file mode 100644 index 00000000000..98c3b8f3da2 --- /dev/null +++ b/netbox/circuits/migrations/0044_circuit_groups.py @@ -0,0 +1,88 @@ +import django.db.models.deletion +import taggit.managers +import utilities.json +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('circuits', '0043_circuittype_color'), + ('extras', '0119_notifications'), + ('tenancy', '0015_contactassignment_rename_content_type'), + ] + + operations = [ + migrations.CreateModel( + name='CircuitGroup', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), + ('name', models.CharField(max_length=100, unique=True)), + ('slug', models.SlugField(max_length=100, unique=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ( + 'tenant', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='circuit_groups', + to='tenancy.tenant', + ), + ), + ], + options={ + 'verbose_name': 'Circuit group', + 'verbose_name_plural': 'Circuit group', + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='CircuitGroupAssignment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), + ('priority', models.CharField(blank=True, max_length=50)), + ( + 'circuit', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='assignments', + to='circuits.circuit', + ), + ), + ( + 'group', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='assignments', + to='circuits.circuitgroup', + ), + ), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'verbose_name': 'Circuit group assignment', + 'verbose_name_plural': 'Circuit group assignments', + 'ordering': ('group', 'circuit', 'priority', 'pk'), + }, + ), + migrations.AddConstraint( + model_name='circuitgroupassignment', + constraint=models.UniqueConstraint( + fields=('circuit', 'group'), name='circuits_circuitgroupassignment_unique_circuit_group' + ), + ), + ] diff --git a/netbox/circuits/migrations/0045_circuit_distance.py b/netbox/circuits/migrations/0045_circuit_distance.py new file mode 100644 index 00000000000..6c970339d73 --- /dev/null +++ b/netbox/circuits/migrations/0045_circuit_distance.py @@ -0,0 +1,28 @@ +# Generated by Django 5.0.9 on 2024-09-26 22:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('circuits', '0044_circuit_groups'), + ] + + operations = [ + migrations.AddField( + model_name='circuit', + name='_abs_distance', + field=models.DecimalField(blank=True, decimal_places=4, max_digits=10, null=True), + ), + migrations.AddField( + model_name='circuit', + name='distance', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), + ), + migrations.AddField( + model_name='circuit', + name='distance_unit', + field=models.CharField(blank=True, max_length=50), + ), + ] diff --git a/netbox/circuits/models/circuits.py b/netbox/circuits/models/circuits.py index fa21d7cd33d..2df83e97ee8 100644 --- a/netbox/circuits/models/circuits.py +++ b/netbox/circuits/models/circuits.py @@ -6,11 +6,14 @@ from django.utils.translation import gettext_lazy as _ from circuits.choices import * from dcim.models import CabledObjectModel from netbox.models import ChangeLoggedModel, OrganizationalModel, PrimaryModel -from netbox.models.features import ContactsMixin, CustomFieldsMixin, CustomLinksMixin, ImageAttachmentsMixin, TagsMixin +from netbox.models.mixins import DistanceMixin +from netbox.models.features import ContactsMixin, CustomFieldsMixin, CustomLinksMixin, ExportTemplatesMixin, ImageAttachmentsMixin, TagsMixin from utilities.fields import ColorField __all__ = ( 'Circuit', + 'CircuitGroup', + 'CircuitGroupAssignment', 'CircuitTermination', 'CircuitType', ) @@ -26,16 +29,13 @@ class CircuitType(OrganizationalModel): blank=True ) - def get_absolute_url(self): - return reverse('circuits:circuittype', args=[self.pk]) - class Meta: ordering = ('name',) verbose_name = _('circuit type') verbose_name_plural = _('circuit types') -class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): +class Circuit(ContactsMixin, ImageAttachmentsMixin, DistanceMixin, PrimaryModel): """ A communications circuit connects two points. Each Circuit belongs to a Provider; Providers may have multiple circuits. Each circuit is also assigned a CircuitType and a Site, and may optionally be assigned to a particular @@ -138,9 +138,6 @@ class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): def __str__(self): return self.cid - def get_absolute_url(self): - return reverse('circuits:circuit', args=[self.pk]) - def get_status_color(self): return CircuitStatusChoices.colors.get(self.status) @@ -151,6 +148,72 @@ class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): raise ValidationError({'provider_account': "The assigned account must belong to the assigned provider."}) +class CircuitGroup(OrganizationalModel): + """ + An administrative grouping of Circuits. + """ + tenant = models.ForeignKey( + to='tenancy.Tenant', + on_delete=models.PROTECT, + related_name='circuit_groups', + blank=True, + null=True + ) + + class Meta: + ordering = ('name',) + verbose_name = _('circuit group') + verbose_name_plural = _('circuit groups') + + def __str__(self): + return self.name + + +class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLoggedModel): + """ + Assignment of a Circuit to a CircuitGroup with an optional priority. + """ + circuit = models.ForeignKey( + Circuit, + on_delete=models.CASCADE, + related_name='assignments' + ) + group = models.ForeignKey( + CircuitGroup, + on_delete=models.CASCADE, + related_name='assignments' + ) + priority = models.CharField( + verbose_name=_('priority'), + max_length=50, + choices=CircuitPriorityChoices, + blank=True + ) + prerequisite_models = ( + 'circuits.Circuit', + 'circuits.CircuitGroup', + ) + + class Meta: + ordering = ('group', 'circuit', 'priority', 'pk') + constraints = ( + models.UniqueConstraint( + fields=('circuit', 'group'), + name='%(app_label)s_%(class)s_unique_circuit_group' + ), + ) + verbose_name = _('Circuit group assignment') + verbose_name_plural = _('Circuit group assignments') + + def __str__(self): + if self.priority: + return f"{self.group} ({self.get_priority_display()})" + return str(self.group) + + def get_absolute_url(self): + return reverse('circuits:circuitgroupassignment', args=[self.pk]) + + class CircuitTermination( CustomFieldsMixin, CustomLinksMixin, diff --git a/netbox/circuits/models/providers.py b/netbox/circuits/models/providers.py index 31c8bccb297..f0fe77b1acf 100644 --- a/netbox/circuits/models/providers.py +++ b/netbox/circuits/models/providers.py @@ -1,6 +1,5 @@ from django.db import models from django.db.models import Q -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from netbox.models import PrimaryModel @@ -45,9 +44,6 @@ class Provider(ContactsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('circuits:provider', args=[self.pk]) - class ProviderAccount(ContactsMixin, PrimaryModel): """ @@ -91,9 +87,6 @@ class ProviderAccount(ContactsMixin, PrimaryModel): return f'{self.account} ({self.name})' return f'{self.account}' - def get_absolute_url(self): - return reverse('circuits:provideraccount', args=[self.pk]) - class ProviderNetwork(PrimaryModel): """ @@ -128,6 +121,3 @@ class ProviderNetwork(PrimaryModel): def __str__(self): return self.name - - def get_absolute_url(self): - return reverse('circuits:providernetwork', args=[self.pk]) diff --git a/netbox/circuits/search.py b/netbox/circuits/search.py index f3fa359bae2..7a5711f0326 100644 --- a/netbox/circuits/search.py +++ b/netbox/circuits/search.py @@ -13,6 +13,17 @@ class CircuitIndex(SearchIndex): display_attrs = ('provider', 'provider_account', 'type', 'status', 'tenant', 'description') +@register_search +class CircuitGroupIndex(SearchIndex): + model = models.CircuitGroup + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) + display_attrs = ('description',) + + @register_search class CircuitTerminationIndex(SearchIndex): model = models.CircuitTermination diff --git a/netbox/circuits/tables/circuits.py b/netbox/circuits/tables/circuits.py index e1b99ff4257..e79212a1461 100644 --- a/netbox/circuits/tables/circuits.py +++ b/netbox/circuits/tables/circuits.py @@ -9,6 +9,8 @@ from netbox.tables import NetBoxTable, columns from .columns import CommitRateColumn __all__ = ( + 'CircuitGroupAssignmentTable', + 'CircuitGroupTable', 'CircuitTable', 'CircuitTerminationTable', 'CircuitTypeTable', @@ -74,19 +76,24 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): commit_rate = CommitRateColumn( verbose_name=_('Commit Rate') ) + distance = columns.DistanceColumn() comments = columns.MarkdownColumn( - verbose_name=_('Comments'), + verbose_name=_('Comments') ) tags = columns.TagColumn( url_name='circuits:circuit_list' ) + assignments = columns.ManyToManyColumn( + verbose_name=_('Assignments'), + linkify_item=True + ) class Meta(NetBoxTable.Meta): model = Circuit fields = ( 'pk', 'id', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'tenant_group', 'termination_a', 'termination_z', 'install_date', 'termination_date', 'commit_rate', 'description', - 'comments', 'contacts', 'tags', 'created', 'last_updated', + 'comments', 'contacts', 'tags', 'created', 'last_updated', 'assignments', ) default_columns = ( 'pk', 'cid', 'provider', 'type', 'status', 'tenant', 'termination_a', 'termination_z', 'description', @@ -119,3 +126,55 @@ class CircuitTerminationTable(NetBoxTable): 'xconnect_id', 'pp_info', 'description', 'created', 'last_updated', 'actions', ) default_columns = ('pk', 'id', 'circuit', 'provider', 'term_side', 'description') + + +class CircuitGroupTable(NetBoxTable): + name = tables.Column( + verbose_name=_('Name'), + linkify=True + ) + circuit_group_assignment_count = columns.LinkedCountColumn( + viewname='circuits:circuitgroupassignment_list', + url_params={'group_id': 'pk'}, + verbose_name=_('Circuits') + ) + tags = columns.TagColumn( + url_name='circuits:circuitgroup_list' + ) + + class Meta(NetBoxTable.Meta): + model = CircuitGroup + fields = ( + 'pk', 'name', 'description', 'circuit_group_assignment_count', 'tags', + 'created', 'last_updated', 'actions', + ) + default_columns = ('pk', 'name', 'description', 'circuit_group_assignment_count') + + +class CircuitGroupAssignmentTable(NetBoxTable): + group = tables.Column( + verbose_name=_('Group'), + linkify=True + ) + provider = tables.Column( + accessor='circuit__provider', + verbose_name=_('Provider'), + linkify=True + ) + circuit = tables.Column( + verbose_name=_('Circuit'), + linkify=True + ) + priority = tables.Column( + verbose_name=_('Priority'), + ) + tags = columns.TagColumn( + url_name='circuits:circuitgroupassignment_list' + ) + + class Meta(NetBoxTable.Meta): + model = CircuitGroupAssignment + fields = ( + 'pk', 'id', 'group', 'provider', 'circuit', 'priority', 'created', 'last_updated', 'actions', 'tags', + ) + default_columns = ('pk', 'group', 'provider', 'circuit', 'priority') diff --git a/netbox/circuits/tables/providers.py b/netbox/circuits/tables/providers.py index 54499aeaf86..d70c77e9c02 100644 --- a/netbox/circuits/tables/providers.py +++ b/netbox/circuits/tables/providers.py @@ -25,7 +25,7 @@ class ProviderTable(ContactsColumnMixin, NetBoxTable): account_count = columns.LinkedCountColumn( accessor=tables.A('accounts__count'), viewname='circuits:provideraccount_list', - url_params={'account_id': 'pk'}, + url_params={'provider_id': 'pk'}, verbose_name=_('Account Count') ) asns = columns.ManyToManyColumn( diff --git a/netbox/circuits/tests/test_api.py b/netbox/circuits/tests/test_api.py index d3745f2b155..1edcd531ba2 100644 --- a/netbox/circuits/tests/test_api.py +++ b/netbox/circuits/tests/test_api.py @@ -92,10 +92,11 @@ class CircuitTypeTest(APIViewTestCases.APIViewTestCase): class CircuitTest(APIViewTestCases.APIViewTestCase): model = Circuit - brief_fields = ['cid', 'description', 'display', 'id', 'url'] + brief_fields = ['cid', 'description', 'display', 'id', 'provider', 'url'] bulk_update_data = { 'status': 'planned', } + user_permissions = ('circuits.view_provider', 'circuits.view_circuittype') @classmethod def setUpTestData(cls): @@ -150,6 +151,7 @@ class CircuitTest(APIViewTestCases.APIViewTestCase): class CircuitTerminationTest(APIViewTestCases.APIViewTestCase): model = CircuitTermination brief_fields = ['_occupied', 'cable', 'circuit', 'description', 'display', 'id', 'term_side', 'url'] + user_permissions = ('circuits.view_circuit', ) @classmethod def setUpTestData(cls): @@ -206,9 +208,42 @@ class CircuitTerminationTest(APIViewTestCases.APIViewTestCase): } +class CircuitGroupTest(APIViewTestCases.APIViewTestCase): + model = CircuitGroup + brief_fields = ['display', 'id', 'name', 'url'] + bulk_update_data = { + 'description': 'New description', + } + + @classmethod + def setUpTestData(cls): + circuit_groups = ( + CircuitGroup(name="Circuit Group 1", slug='circuit-group-1'), + CircuitGroup(name="Circuit Group 2", slug='circuit-group-2'), + CircuitGroup(name="Circuit Group 3", slug='circuit-group-3'), + ) + CircuitGroup.objects.bulk_create(circuit_groups) + + cls.create_data = [ + { + 'name': 'Circuit Group 4', + 'slug': 'circuit-group-4', + }, + { + 'name': 'Circuit Group 5', + 'slug': 'circuit-group-5', + }, + { + 'name': 'Circuit Group 6', + 'slug': 'circuit-group-6', + }, + ] + + class ProviderAccountTest(APIViewTestCases.APIViewTestCase): model = ProviderAccount brief_fields = ['account', 'description', 'display', 'id', 'name', 'url'] + user_permissions = ('circuits.view_provider',) @classmethod def setUpTestData(cls): @@ -249,9 +284,82 @@ class ProviderAccountTest(APIViewTestCases.APIViewTestCase): } +class CircuitGroupAssignmentTest(APIViewTestCases.APIViewTestCase): + model = CircuitGroupAssignment + brief_fields = ['circuit', 'display', 'group', 'id', 'priority', 'url'] + bulk_update_data = { + 'priority': CircuitPriorityChoices.PRIORITY_INACTIVE, + } + user_permissions = ('circuits.view_circuit', 'circuits.view_circuitgroup') + + @classmethod + def setUpTestData(cls): + + circuit_groups = ( + CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'), + CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'), + CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'), + CircuitGroup(name='Circuit Group 4', slug='circuit-group-4'), + CircuitGroup(name='Circuit Group 5', slug='circuit-group-5'), + CircuitGroup(name='Circuit Group 6', slug='circuit-group-6'), + ) + CircuitGroup.objects.bulk_create(circuit_groups) + + provider = Provider.objects.create(name='Provider 1', slug='provider-1') + circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') + + circuits = ( + Circuit(cid='Circuit 1', provider=provider, type=circuittype), + Circuit(cid='Circuit 2', provider=provider, type=circuittype), + Circuit(cid='Circuit 3', provider=provider, type=circuittype), + Circuit(cid='Circuit 4', provider=provider, type=circuittype), + Circuit(cid='Circuit 5', provider=provider, type=circuittype), + Circuit(cid='Circuit 6', provider=provider, type=circuittype), + ) + Circuit.objects.bulk_create(circuits) + + assignments = ( + CircuitGroupAssignment( + group=circuit_groups[0], + circuit=circuits[0], + priority=CircuitPriorityChoices.PRIORITY_PRIMARY + ), + CircuitGroupAssignment( + group=circuit_groups[1], + circuit=circuits[1], + priority=CircuitPriorityChoices.PRIORITY_SECONDARY + ), + CircuitGroupAssignment( + group=circuit_groups[2], + circuit=circuits[2], + priority=CircuitPriorityChoices.PRIORITY_TERTIARY + ), + ) + CircuitGroupAssignment.objects.bulk_create(assignments) + + cls.create_data = [ + { + 'group': circuit_groups[3].pk, + 'circuit': circuits[3].pk, + 'priority': CircuitPriorityChoices.PRIORITY_PRIMARY, + }, + { + 'group': circuit_groups[4].pk, + 'circuit': circuits[4].pk, + 'priority': CircuitPriorityChoices.PRIORITY_SECONDARY, + }, + { + 'group': circuit_groups[5].pk, + 'circuit': circuits[5].pk, + 'priority': CircuitPriorityChoices.PRIORITY_TERTIARY, + }, + ] + + class ProviderNetworkTest(APIViewTestCases.APIViewTestCase): model = ProviderNetwork brief_fields = ['description', 'display', 'id', 'name', 'url'] + user_permissions = ('circuits.view_provider', ) @classmethod def setUpTestData(cls): diff --git a/netbox/circuits/tests/test_filtersets.py b/netbox/circuits/tests/test_filtersets.py index df10c3929e3..93958298c6f 100644 --- a/netbox/circuits/tests/test_filtersets.py +++ b/netbox/circuits/tests/test_filtersets.py @@ -5,6 +5,7 @@ from circuits.filtersets import * from circuits.models import * from dcim.models import Cable, Region, Site, SiteGroup from ipam.models import ASN, RIR +from netbox.choices import DistanceUnitChoices from tenancy.models import Tenant, TenantGroup from utilities.testing import ChangeLoggedFilterSetTests @@ -222,9 +223,9 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests): ProviderNetwork.objects.bulk_create(provider_networks) circuits = ( - Circuit(provider=providers[0], provider_account=provider_accounts[0], tenant=tenants[0], type=circuit_types[0], cid='Test Circuit 1', install_date='2020-01-01', termination_date='2021-01-01', commit_rate=1000, status=CircuitStatusChoices.STATUS_ACTIVE, description='foobar1'), - Circuit(provider=providers[0], provider_account=provider_accounts[0], tenant=tenants[0], type=circuit_types[0], cid='Test Circuit 2', install_date='2020-01-02', termination_date='2021-01-02', commit_rate=2000, status=CircuitStatusChoices.STATUS_ACTIVE, description='foobar2'), - Circuit(provider=providers[0], provider_account=provider_accounts[1], tenant=tenants[1], type=circuit_types[0], cid='Test Circuit 3', install_date='2020-01-03', termination_date='2021-01-03', commit_rate=3000, status=CircuitStatusChoices.STATUS_PLANNED), + Circuit(provider=providers[0], provider_account=provider_accounts[0], tenant=tenants[0], type=circuit_types[0], cid='Test Circuit 1', install_date='2020-01-01', termination_date='2021-01-01', commit_rate=1000, status=CircuitStatusChoices.STATUS_ACTIVE, description='foobar1', distance=10, distance_unit=DistanceUnitChoices.UNIT_FOOT), + Circuit(provider=providers[0], provider_account=provider_accounts[0], tenant=tenants[0], type=circuit_types[0], cid='Test Circuit 2', install_date='2020-01-02', termination_date='2021-01-02', commit_rate=2000, status=CircuitStatusChoices.STATUS_ACTIVE, description='foobar2', distance=20, distance_unit=DistanceUnitChoices.UNIT_METER), + Circuit(provider=providers[0], provider_account=provider_accounts[1], tenant=tenants[1], type=circuit_types[0], cid='Test Circuit 3', install_date='2020-01-03', termination_date='2021-01-03', commit_rate=3000, status=CircuitStatusChoices.STATUS_PLANNED, distance=30, distance_unit=DistanceUnitChoices.UNIT_METER), Circuit(provider=providers[1], provider_account=provider_accounts[1], tenant=tenants[1], type=circuit_types[1], cid='Test Circuit 4', install_date='2020-01-04', termination_date='2021-01-04', commit_rate=4000, status=CircuitStatusChoices.STATUS_PLANNED), Circuit(provider=providers[1], provider_account=provider_accounts[2], tenant=tenants[2], type=circuit_types[1], cid='Test Circuit 5', install_date='2020-01-05', termination_date='2021-01-05', commit_rate=5000, status=CircuitStatusChoices.STATUS_OFFLINE), Circuit(provider=providers[1], provider_account=provider_accounts[2], tenant=tenants[2], type=circuit_types[1], cid='Test Circuit 6', install_date='2020-01-06', termination_date='2021-01-06', commit_rate=6000, status=CircuitStatusChoices.STATUS_OFFLINE), @@ -289,6 +290,14 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'status': [CircuitStatusChoices.STATUS_ACTIVE, CircuitStatusChoices.STATUS_PLANNED]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + def test_distance(self): + params = {'distance': [10, 20]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_distance_unit(self): + params = {'distance_unit': DistanceUnitChoices.UNIT_FOOT} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + def test_description(self): params = {'description': ['foobar1', 'foobar2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -451,6 +460,136 @@ class CircuitTerminationTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 7) +class CircuitGroupTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = CircuitGroup.objects.all() + filterset = CircuitGroupFilterSet + + @classmethod + def setUpTestData(cls): + tenant_groups = ( + TenantGroup(name='Tenant group 1', slug='tenant-group-1'), + TenantGroup(name='Tenant group 2', slug='tenant-group-2'), + TenantGroup(name='Tenant group 3', slug='tenant-group-3'), + ) + for tenantgroup in tenant_groups: + tenantgroup.save() + + tenants = ( + Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]), + Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]), + Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]), + ) + Tenant.objects.bulk_create(tenants) + + CircuitGroup.objects.bulk_create(( + CircuitGroup(name='Circuit Group 1', slug='circuit-group-1', description='foobar1', tenant=tenants[0]), + CircuitGroup(name='Circuit Group 2', slug='circuit-group-2', description='foobar2', tenant=tenants[1]), + CircuitGroup(name='Circuit Group 3', slug='circuit-group-3', tenant=tenants[1]), + )) + + def test_q(self): + params = {'q': 'foobar1'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_name(self): + params = {'name': ['Circuit Group 1']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_slug(self): + params = {'slug': ['circuit-group-1']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_description(self): + params = {'description': ['foobar1', 'foobar2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_tenant(self): + tenants = Tenant.objects.all()[:2] + params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + params = {'tenant': [tenants[0].slug, tenants[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + + def test_tenant_group(self): + tenant_groups = TenantGroup.objects.all()[:2] + params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + + +class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = CircuitGroupAssignment.objects.all() + filterset = CircuitGroupAssignmentFilterSet + + @classmethod + def setUpTestData(cls): + + circuit_groups = ( + CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'), + CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'), + CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'), + CircuitGroup(name='Circuit Group 4', slug='circuit-group-4'), + ) + CircuitGroup.objects.bulk_create(circuit_groups) + + providers = Provider.objects.bulk_create(( + Provider(name='Provider 1', slug='provider-1'), + Provider(name='Provider 2', slug='provider-2'), + Provider(name='Provider 3', slug='provider-3'), + Provider(name='Provider 4', slug='provider-4'), + )) + circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') + + circuits = ( + Circuit(cid='Circuit 1', provider=providers[0], type=circuittype), + Circuit(cid='Circuit 2', provider=providers[1], type=circuittype), + Circuit(cid='Circuit 3', provider=providers[2], type=circuittype), + Circuit(cid='Circuit 4', provider=providers[3], type=circuittype), + ) + Circuit.objects.bulk_create(circuits) + + assignments = ( + CircuitGroupAssignment( + group=circuit_groups[0], + circuit=circuits[0], + priority=CircuitPriorityChoices.PRIORITY_PRIMARY + ), + CircuitGroupAssignment( + group=circuit_groups[1], + circuit=circuits[1], + priority=CircuitPriorityChoices.PRIORITY_SECONDARY + ), + CircuitGroupAssignment( + group=circuit_groups[2], + circuit=circuits[2], + priority=CircuitPriorityChoices.PRIORITY_TERTIARY + ), + ) + CircuitGroupAssignment.objects.bulk_create(assignments) + + def test_group_id(self): + groups = CircuitGroup.objects.filter(name__in=['Circuit Group 1', 'Circuit Group 2']) + params = {'group_id': [groups[0].pk, groups[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'group': [groups[0].slug, groups[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_circuit(self): + circuits = Circuit.objects.all()[:2] + params = {'circuit_id': [circuits[0].pk, circuits[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'circuit': [circuits[0].cid, circuits[1].cid]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_provider(self): + providers = Provider.objects.all()[:2] + params = {'provider_id': [providers[0].pk, providers[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'provider': [providers[0].slug, providers[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + class ProviderNetworkTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ProviderNetwork.objects.all() filterset = ProviderNetworkFilterSet diff --git a/netbox/circuits/tests/test_views.py b/netbox/circuits/tests/test_views.py index 577548703b4..b06ade30b20 100644 --- a/netbox/circuits/tests/test_views.py +++ b/netbox/circuits/tests/test_views.py @@ -171,7 +171,7 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase): ) cls.csv_update_data = ( - f"id,cid,description,status", + "id,cid,description,status", f"{circuits[0].pk},Circuit 7,New description7,{CircuitStatusChoices.STATUS_DECOMMISSIONED}", f"{circuits[1].pk},Circuit 8,New description8,{CircuitStatusChoices.STATUS_DECOMMISSIONED}", f"{circuits[2].pk},Circuit 9,New description9,{CircuitStatusChoices.STATUS_DECOMMISSIONED}", @@ -404,3 +404,109 @@ class CircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase): response = self.client.get(reverse('circuits:circuittermination_trace', kwargs={'pk': circuittermination.pk})) self.assertHttpStatus(response, 200) + + +class CircuitGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase): + model = CircuitGroup + + @classmethod + def setUpTestData(cls): + + circuit_groups = ( + CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'), + CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'), + CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'), + ) + CircuitGroup.objects.bulk_create(circuit_groups) + + tags = create_tags('Alpha', 'Bravo', 'Charlie') + + cls.form_data = { + 'name': 'Circuit Group X', + 'slug': 'circuit-group-x', + 'description': 'A new Circuit Group', + 'tags': [t.pk for t in tags], + } + + cls.csv_data = ( + "name,slug", + "Circuit Group 4,circuit-group-4", + "Circuit Group 5,circuit-group-5", + "Circuit Group 6,circuit-group-6", + ) + + cls.csv_update_data = ( + "id,name,description", + f"{circuit_groups[0].pk},Circuit Group 7,New description7", + f"{circuit_groups[1].pk},Circuit Group 8,New description8", + f"{circuit_groups[2].pk},Circuit Group 9,New description9", + ) + + cls.bulk_edit_data = { + 'description': 'Foo', + } + + +class CircuitGroupAssignmentTestCase( + ViewTestCases.CreateObjectViewTestCase, + ViewTestCases.EditObjectViewTestCase, + ViewTestCases.DeleteObjectViewTestCase, + ViewTestCases.ListObjectsViewTestCase, + ViewTestCases.BulkEditObjectsViewTestCase, + ViewTestCases.BulkDeleteObjectsViewTestCase +): + model = CircuitGroupAssignment + + @classmethod + def setUpTestData(cls): + + circuit_groups = ( + CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'), + CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'), + CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'), + CircuitGroup(name='Circuit Group 4', slug='circuit-group-4'), + ) + CircuitGroup.objects.bulk_create(circuit_groups) + + provider = Provider.objects.create(name='Provider 1', slug='provider-1') + circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') + + circuits = ( + Circuit(cid='Circuit 1', provider=provider, type=circuittype), + Circuit(cid='Circuit 2', provider=provider, type=circuittype), + Circuit(cid='Circuit 3', provider=provider, type=circuittype), + Circuit(cid='Circuit 4', provider=provider, type=circuittype), + ) + Circuit.objects.bulk_create(circuits) + + assignments = ( + CircuitGroupAssignment( + group=circuit_groups[0], + circuit=circuits[0], + priority=CircuitPriorityChoices.PRIORITY_PRIMARY + ), + CircuitGroupAssignment( + group=circuit_groups[1], + circuit=circuits[1], + priority=CircuitPriorityChoices.PRIORITY_SECONDARY + ), + CircuitGroupAssignment( + group=circuit_groups[2], + circuit=circuits[2], + priority=CircuitPriorityChoices.PRIORITY_TERTIARY + ), + ) + CircuitGroupAssignment.objects.bulk_create(assignments) + + tags = create_tags('Alpha', 'Bravo', 'Charlie') + + cls.form_data = { + 'group': circuit_groups[3].pk, + 'circuit': circuits[3].pk, + 'priority': CircuitPriorityChoices.PRIORITY_INACTIVE, + 'tags': [t.pk for t in tags], + } + + cls.bulk_edit_data = { + 'priority': CircuitPriorityChoices.PRIORITY_INACTIVE, + } diff --git a/netbox/circuits/urls.py b/netbox/circuits/urls.py index 5c0ab99ee7a..2171d49bea4 100644 --- a/netbox/circuits/urls.py +++ b/netbox/circuits/urls.py @@ -55,4 +55,19 @@ urlpatterns = [ path('circuit-terminations/delete/', views.CircuitTerminationBulkDeleteView.as_view(), name='circuittermination_bulk_delete'), path('circuit-terminations//', include(get_model_urls('circuits', 'circuittermination'))), + # Circuit Groups + path('circuit-groups/', views.CircuitGroupListView.as_view(), name='circuitgroup_list'), + path('circuit-groups/add/', views.CircuitGroupEditView.as_view(), name='circuitgroup_add'), + path('circuit-groups/import/', views.CircuitGroupBulkImportView.as_view(), name='circuitgroup_import'), + path('circuit-groups/edit/', views.CircuitGroupBulkEditView.as_view(), name='circuitgroup_bulk_edit'), + path('circuit-groups/delete/', views.CircuitGroupBulkDeleteView.as_view(), name='circuitgroup_bulk_delete'), + path('circuit-groups//', include(get_model_urls('circuits', 'circuitgroup'))), + + # Circuit Group Assignments + path('circuit-group-assignments/', views.CircuitGroupAssignmentListView.as_view(), name='circuitgroupassignment_list'), + path('circuit-group-assignments/add/', views.CircuitGroupAssignmentEditView.as_view(), name='circuitgroupassignment_add'), + path('circuit-group-assignments/import/', views.CircuitGroupAssignmentBulkImportView.as_view(), name='circuitgroupassignment_import'), + path('circuit-group-assignments/edit/', views.CircuitGroupAssignmentBulkEditView.as_view(), name='circuitgroupassignment_bulk_edit'), + path('circuit-group-assignments/delete/', views.CircuitGroupAssignmentBulkDeleteView.as_view(), name='circuitgroupassignment_bulk_delete'), + path('circuit-group-assignments//', include(get_model_urls('circuits', 'circuitgroupassignment'))), ] diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index b10b83b23dc..8218960c9d7 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -1,6 +1,7 @@ from django.contrib import messages from django.db import transaction from django.shortcuts import get_object_or_404, redirect, render +from django.utils.translation import gettext_lazy as _ from dcim.views import PathTraceView from netbox.views import generic @@ -326,7 +327,9 @@ class CircuitSwapTerminations(generic.ObjectEditView): # Circuit must have at least one termination to swap if not circuit.termination_a and not circuit.termination_z: - messages.error(request, "No terminations have been defined for circuit {}.".format(circuit)) + messages.error(request, _( + "No terminations have been defined for circuit {circuit}." + ).format(circuit=circuit)) return redirect('circuits:circuit', pk=circuit.pk) return render(request, 'circuits/circuit_terminations_swap.html', { @@ -374,7 +377,7 @@ class CircuitSwapTerminations(generic.ObjectEditView): circuit.termination_z = None circuit.save() - messages.success(request, f"Swapped terminations for circuit {circuit}.") + messages.success(request, _("Swapped terminations for circuit {circuit}.").format(circuit=circuit)) return redirect('circuits:circuit', pk=circuit.pk) return render(request, 'circuits/circuit_terminations_swap.html', { @@ -440,3 +443,100 @@ class CircuitTerminationBulkDeleteView(generic.BulkDeleteView): # Trace view register_model_view(CircuitTermination, 'trace', kwargs={'model': CircuitTermination})(PathTraceView) + + +# +# Circuit Groups +# + +class CircuitGroupListView(generic.ObjectListView): + queryset = CircuitGroup.objects.annotate( + circuit_group_assignment_count=count_related(CircuitGroupAssignment, 'group') + ) + filterset = filtersets.CircuitGroupFilterSet + filterset_form = forms.CircuitGroupFilterForm + table = tables.CircuitGroupTable + + +@register_model_view(CircuitGroup) +class CircuitGroupView(GetRelatedModelsMixin, generic.ObjectView): + queryset = CircuitGroup.objects.all() + + def get_extra_context(self, request, instance): + return { + 'related_models': self.get_related_models(request, instance), + } + + +@register_model_view(CircuitGroup, 'edit') +class CircuitGroupEditView(generic.ObjectEditView): + queryset = CircuitGroup.objects.all() + form = forms.CircuitGroupForm + + +@register_model_view(CircuitGroup, 'delete') +class CircuitGroupDeleteView(generic.ObjectDeleteView): + queryset = CircuitGroup.objects.all() + + +class CircuitGroupBulkImportView(generic.BulkImportView): + queryset = CircuitGroup.objects.all() + model_form = forms.CircuitGroupImportForm + + +class CircuitGroupBulkEditView(generic.BulkEditView): + queryset = CircuitGroup.objects.all() + filterset = filtersets.CircuitGroupFilterSet + table = tables.CircuitGroupTable + form = forms.CircuitGroupBulkEditForm + + +class CircuitGroupBulkDeleteView(generic.BulkDeleteView): + queryset = CircuitGroup.objects.all() + filterset = filtersets.CircuitGroupFilterSet + table = tables.CircuitGroupTable + + +# +# Circuit Groups +# + +class CircuitGroupAssignmentListView(generic.ObjectListView): + queryset = CircuitGroupAssignment.objects.all() + filterset = filtersets.CircuitGroupAssignmentFilterSet + filterset_form = forms.CircuitGroupAssignmentFilterForm + table = tables.CircuitGroupAssignmentTable + + +@register_model_view(CircuitGroupAssignment) +class CircuitGroupAssignmentView(generic.ObjectView): + queryset = CircuitGroupAssignment.objects.all() + + +@register_model_view(CircuitGroupAssignment, 'edit') +class CircuitGroupAssignmentEditView(generic.ObjectEditView): + queryset = CircuitGroupAssignment.objects.all() + form = forms.CircuitGroupAssignmentForm + + +@register_model_view(CircuitGroupAssignment, 'delete') +class CircuitGroupAssignmentDeleteView(generic.ObjectDeleteView): + queryset = CircuitGroupAssignment.objects.all() + + +class CircuitGroupAssignmentBulkImportView(generic.BulkImportView): + queryset = CircuitGroupAssignment.objects.all() + model_form = forms.CircuitGroupAssignmentImportForm + + +class CircuitGroupAssignmentBulkEditView(generic.BulkEditView): + queryset = CircuitGroupAssignment.objects.all() + filterset = filtersets.CircuitGroupAssignmentFilterSet + table = tables.CircuitGroupAssignmentTable + form = forms.CircuitGroupAssignmentBulkEditForm + + +class CircuitGroupAssignmentBulkDeleteView(generic.BulkDeleteView): + queryset = CircuitGroupAssignment.objects.all() + filterset = filtersets.CircuitGroupAssignmentFilterSet + table = tables.CircuitGroupAssignmentTable diff --git a/netbox/core/api/nested_serializers.py b/netbox/core/api/nested_serializers.py index 8e5d3ff6331..df7b41ca7c8 100644 --- a/netbox/core/api/nested_serializers.py +++ b/netbox/core/api/nested_serializers.py @@ -1,3 +1,5 @@ +import warnings + from rest_framework import serializers from core.choices import JobStatusChoices @@ -12,6 +14,12 @@ __all__ = ( 'NestedJobSerializer', ) +# TODO: Remove in v4.2 +warnings.warn( + "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", + DeprecationWarning +) + class NestedDataSourceSerializer(WritableNestedSerializer): diff --git a/netbox/core/api/schema.py b/netbox/core/api/schema.py index bcc49d3fc3f..1ac822b8cc7 100644 --- a/netbox/core/api/schema.py +++ b/netbox/core/api/schema.py @@ -8,10 +8,8 @@ from drf_spectacular.plumbing import ( build_basic_type, build_choice_field, build_media_type_object, build_object_type, get_doc, ) from drf_spectacular.types import OpenApiTypes -from rest_framework import serializers -from rest_framework.relations import ManyRelatedField -from netbox.api.fields import ChoiceField, SerializedPKRelatedField +from netbox.api.fields import ChoiceField from netbox.api.serializers import WritableNestedSerializer # see netbox.api.routers.NetBoxRouter @@ -126,9 +124,18 @@ class NetBoxAutoSchema(AutoSchema): return response_serializers + def _get_serializer_name(self, serializer, direction, bypass_extensions=False) -> str: + name = super()._get_serializer_name(serializer, direction, bypass_extensions) + + # If this serializer is nested, prepend its name with "Brief" + if getattr(serializer, 'nested', False): + name = f'Brief{name}' + + return name + def get_serializer_ref_name(self, serializer): # from drf-yasg.utils - """Get serializer's ref_name (or None for ModelSerializer if it is named 'NestedSerializer') + """Get serializer's ref_name :param serializer: Serializer instance :return: Serializer's ``ref_name`` or ``None`` for inline serializer :rtype: str or None @@ -137,8 +144,6 @@ class NetBoxAutoSchema(AutoSchema): serializer_name = type(serializer).__name__ if hasattr(serializer_meta, 'ref_name'): ref_name = serializer_meta.ref_name - elif serializer_name == 'NestedSerializer' and isinstance(serializer, serializers.ModelSerializer): - ref_name = None else: ref_name = serializer_name if ref_name.endswith('Serializer'): diff --git a/netbox/core/api/serializers.py b/netbox/core/api/serializers.py index d59745ccd7e..2dde6be9f90 100644 --- a/netbox/core/api/serializers.py +++ b/netbox/core/api/serializers.py @@ -1,4 +1,3 @@ from .serializers_.change_logging import * from .serializers_.data import * from .serializers_.jobs import * -from .nested_serializers import * diff --git a/netbox/core/api/serializers_/data.py b/netbox/core/api/serializers_/data.py index eddd45c5831..2c155ba6bc5 100644 --- a/netbox/core/api/serializers_/data.py +++ b/netbox/core/api/serializers_/data.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from core.choices import * from core.models import DataFile, DataSource from netbox.api.fields import ChoiceField, RelatedObjectCountField @@ -27,8 +25,9 @@ class DataSourceSerializer(NetBoxModelSerializer): class Meta: model = DataSource fields = [ - 'id', 'url', 'display_url', 'display', 'name', 'type', 'source_url', 'enabled', 'status', 'description', 'comments', - 'parameters', 'ignore_rules', 'custom_fields', 'created', 'last_updated', 'file_count', + 'id', 'url', 'display_url', 'display', 'name', 'type', 'source_url', 'enabled', 'status', 'description', + 'parameters', 'ignore_rules', 'comments', 'custom_fields', 'created', 'last_updated', 'last_synced', + 'file_count', ] brief_fields = ('id', 'url', 'display', 'name', 'description') diff --git a/netbox/core/api/serializers_/jobs.py b/netbox/core/api/serializers_/jobs.py index e5e07aa414b..544dddb5635 100644 --- a/netbox/core/api/serializers_/jobs.py +++ b/netbox/core/api/serializers_/jobs.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from core.choices import * from core.models import Job from netbox.api.fields import ChoiceField, ContentTypeField diff --git a/netbox/core/api/views.py b/netbox/core/api/views.py index ff488e3cded..b3a024c026f 100644 --- a/netbox/core/api/views.py +++ b/netbox/core/api/views.py @@ -7,6 +7,8 @@ from rest_framework.routers import APIRootView from rest_framework.viewsets import ReadOnlyModelViewSet from core import filtersets +from core.choices import DataSourceStatusChoices +from core.jobs import SyncDataSourceJob from core.models import * from netbox.api.metadata import ContentTypeMetadata from netbox.api.viewsets import NetBoxModelViewSet, NetBoxReadOnlyModelViewSet @@ -36,7 +38,11 @@ class DataSourceViewSet(NetBoxModelViewSet): if not request.user.has_perm('core.sync_datasource', obj=datasource): raise PermissionDenied(_("This user does not have permission to synchronize this data source.")) - datasource.enqueue_sync_job(request) + # Enqueue the sync job & update the DataSource's status + SyncDataSourceJob.enqueue(instance=datasource, user=request.user) + datasource.status = DataSourceStatusChoices.QUEUED + DataSource.objects.filter(pk=datasource.pk).update(status=datasource.status) + serializer = serializers.DataSourceSerializer(datasource, context={'request': request}) return Response(serializer.data) diff --git a/netbox/core/apps.py b/netbox/core/apps.py index b1103469c19..1dfc7a65ea3 100644 --- a/netbox/core/apps.py +++ b/netbox/core/apps.py @@ -16,9 +16,9 @@ class CoreConfig(AppConfig): name = "core" def ready(self): - from core.api import schema # noqa + from core.api import schema # noqa: F401 from netbox.models.features import register_models - from . import data_backends, search + from . import data_backends, events, search # noqa: F401 # Register models register_models(*self.get_models()) diff --git a/netbox/core/choices.py b/netbox/core/choices.py index ee0febaff51..01a072ce1cf 100644 --- a/netbox/core/choices.py +++ b/netbox/core/choices.py @@ -59,6 +59,12 @@ class JobStatusChoices(ChoiceSet): (STATUS_FAILED, _('Failed'), 'red'), ) + ENQUEUED_STATE_CHOICES = ( + STATUS_PENDING, + STATUS_SCHEDULED, + STATUS_RUNNING, + ) + TERMINAL_STATE_CHOICES = ( STATUS_COMPLETED, STATUS_ERRORED, diff --git a/netbox/core/data_backends.py b/netbox/core/data_backends.py index 2d3a7d8c8f2..770a3b25879 100644 --- a/netbox/core/data_backends.py +++ b/netbox/core/data_backends.py @@ -8,10 +8,13 @@ from urllib.parse import urlparse from django import forms from django.conf import settings +from django.core.exceptions import ImproperlyConfigured from django.utils.translation import gettext as _ from netbox.data_backends import DataBackend from netbox.utils import register_data_backend +from utilities.constants import HTTP_PROXY_SUPPORTED_SCHEMAS, HTTP_PROXY_SUPPORTED_SOCK_SCHEMAS +from utilities.socks import ProxyPoolManager from .exceptions import SyncError __all__ = ( @@ -31,7 +34,7 @@ class LocalBackend(DataBackend): @contextmanager def fetch(self): - logger.debug(f"Data source type is local; skipping fetch") + logger.debug("Data source type is local; skipping fetch") local_path = urlparse(self.url).path # Strip file:// scheme yield local_path @@ -67,11 +70,18 @@ class GitBackend(DataBackend): # Initialize backend config config = ConfigDict() + self.use_socks = False # Apply HTTP proxy (if configured) - if settings.HTTP_PROXIES and self.url_scheme in ('http', 'https'): - if proxy := settings.HTTP_PROXIES.get(self.url_scheme): - config.set("http", "proxy", proxy) + if settings.HTTP_PROXIES: + if proxy := settings.HTTP_PROXIES.get(self.url_scheme, None): + if urlparse(proxy).scheme not in HTTP_PROXY_SUPPORTED_SCHEMAS: + raise ImproperlyConfigured(f"Unsupported Git DataSource proxy scheme: {urlparse(proxy).scheme}") + + if self.url_scheme in ('http', 'https'): + config.set("http", "proxy", proxy) + if urlparse(proxy).scheme in HTTP_PROXY_SUPPORTED_SOCK_SCHEMAS: + self.use_socks = True return config @@ -84,11 +94,13 @@ class GitBackend(DataBackend): clone_args = { "branch": self.params.get('branch'), "config": self.config, - "depth": 1, "errstream": porcelain.NoneStream(), - "quiet": True, } + # check if using socks for proxy - if so need to use custom pool_manager + if self.use_socks: + clone_args['pool_manager'] = ProxyPoolManager(settings.HTTP_PROXIES.get(self.url_scheme)) + if self.url_scheme in ('http', 'https'): if self.params.get('username'): clone_args.update( @@ -97,6 +109,9 @@ class GitBackend(DataBackend): "password": self.params.get('password'), } ) + if self.url_scheme: + clone_args["quiet"] = True + clone_args["depth"] = 1 logger.debug(f"Cloning git repo: {self.url}") try: diff --git a/netbox/core/events.py b/netbox/core/events.py new file mode 100644 index 00000000000..384b61fd489 --- /dev/null +++ b/netbox/core/events.py @@ -0,0 +1,33 @@ +from django.utils.translation import gettext as _ + +from netbox.events import EventType, EVENT_TYPE_KIND_DANGER, EVENT_TYPE_KIND_SUCCESS, EVENT_TYPE_KIND_WARNING + +__all__ = ( + 'JOB_COMPLETED', + 'JOB_ERRORED', + 'JOB_FAILED', + 'JOB_STARTED', + 'OBJECT_CREATED', + 'OBJECT_DELETED', + 'OBJECT_UPDATED', +) + +# Object events +OBJECT_CREATED = 'object_created' +OBJECT_UPDATED = 'object_updated' +OBJECT_DELETED = 'object_deleted' + +# Job events +JOB_STARTED = 'job_started' +JOB_COMPLETED = 'job_completed' +JOB_FAILED = 'job_failed' +JOB_ERRORED = 'job_errored' + +# Register core events +EventType(OBJECT_CREATED, _('Object created')).register() +EventType(OBJECT_UPDATED, _('Object updated')).register() +EventType(OBJECT_DELETED, _('Object deleted'), destructive=True).register() +EventType(JOB_STARTED, _('Job started')).register() +EventType(JOB_COMPLETED, _('Job completed'), kind=EVENT_TYPE_KIND_SUCCESS).register() +EventType(JOB_FAILED, _('Job failed'), kind=EVENT_TYPE_KIND_WARNING).register() +EventType(JOB_ERRORED, _('Job errored'), kind=EVENT_TYPE_KIND_DANGER).register() diff --git a/netbox/core/filtersets.py b/netbox/core/filtersets.py index f622e789cbb..21fdaa4abe2 100644 --- a/netbox/core/filtersets.py +++ b/netbox/core/filtersets.py @@ -1,4 +1,3 @@ -from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.utils.translation import gettext as _ @@ -7,6 +6,7 @@ import django_filters from netbox.filtersets import BaseFilterSet, ChangeLoggedModelFilterSet, NetBoxModelFilterSet from netbox.utils import get_data_backend_choices +from users.models import User from utilities.filters import ContentTypeFilter from .choices import * from .models import * @@ -141,12 +141,12 @@ class ObjectChangeFilterSet(BaseFilterSet): queryset=ContentType.objects.all() ) user_id = django_filters.ModelMultipleChoiceFilter( - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), label=_('User (ID)'), ) user = django_filters.ModelMultipleChoiceFilter( field_name='user__username', - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), to_field_name='username', label=_('User name'), ) diff --git a/netbox/core/forms/filtersets.py b/netbox/core/forms/filtersets.py index c629841ae31..ab4b869b739 100644 --- a/netbox/core/forms/filtersets.py +++ b/netbox/core/forms/filtersets.py @@ -1,5 +1,4 @@ from django import forms -from django.contrib.auth import get_user_model from django.utils.translation import gettext_lazy as _ from core.choices import * @@ -7,6 +6,7 @@ from core.models import * from netbox.forms import NetBoxModelFilterSetForm from netbox.forms.mixins import SavedFiltersMixin from netbox.utils import get_data_backend_choices +from users.models import User from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice from utilities.forms.fields import ( ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, @@ -121,7 +121,7 @@ class JobFilterForm(SavedFiltersMixin, FilterForm): widget=DateTimePicker() ) user = DynamicModelMultipleChoiceField( - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), required=False, label=_('User') ) @@ -150,7 +150,7 @@ class ObjectChangeFilterForm(SavedFiltersMixin, FilterForm): required=False ) user_id = DynamicModelMultipleChoiceField( - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), required=False, label=_('User') ) diff --git a/netbox/core/graphql/mixins.py b/netbox/core/graphql/mixins.py index 43f8761d18f..5195b52a0d8 100644 --- a/netbox/core/graphql/mixins.py +++ b/netbox/core/graphql/mixins.py @@ -15,7 +15,7 @@ __all__ = ( class ChangelogMixin: @strawberry_django.field - def changelog(self, info) -> List[Annotated["ObjectChangeType", strawberry.lazy('.types')]]: + def changelog(self, info) -> List[Annotated["ObjectChangeType", strawberry.lazy('.types')]]: # noqa: F821 content_type = ContentType.objects.get_for_model(self) object_changes = ObjectChange.objects.filter( changed_object_type=content_type, diff --git a/netbox/core/graphql/schema.py b/netbox/core/graphql/schema.py index 34135cd47e2..a77c57c86b1 100644 --- a/netbox/core/graphql/schema.py +++ b/netbox/core/graphql/schema.py @@ -3,18 +3,13 @@ from typing import List import strawberry import strawberry_django -from core import models from .types import * -@strawberry.type +@strawberry.type(name="Query") class CoreQuery: - @strawberry.field - def data_file(self, id: int) -> DataFileType: - return models.DataFile.objects.get(pk=id) + data_file: DataFileType = strawberry_django.field() data_file_list: List[DataFileType] = strawberry_django.field() - @strawberry.field - def data_source(self, id: int) -> DataSourceType: - return models.DataSource.objects.get(pk=id) + data_source: DataSourceType = strawberry_django.field() data_source_list: List[DataSourceType] = strawberry_django.field() diff --git a/netbox/core/jobs.py b/netbox/core/jobs.py index 264313e6204..d2b84639870 100644 --- a/netbox/core/jobs.py +++ b/netbox/core/jobs.py @@ -1,33 +1,33 @@ import logging +from netbox.jobs import JobRunner from netbox.search.backends import search_backend -from .choices import * +from .choices import DataSourceStatusChoices from .exceptions import SyncError from .models import DataSource -from rq.timeouts import JobTimeoutException logger = logging.getLogger(__name__) -def sync_datasource(job, *args, **kwargs): +class SyncDataSourceJob(JobRunner): """ Call sync() on a DataSource. """ - datasource = DataSource.objects.get(pk=job.object_id) - try: - job.start() - datasource.sync() + class Meta: + name = 'Synchronization' - # Update the search cache for DataFiles belonging to this source - search_backend.cache(datasource.datafiles.iterator()) + def run(self, *args, **kwargs): + datasource = DataSource.objects.get(pk=self.job.object_id) - job.terminate() + try: + datasource.sync() - except Exception as e: - job.terminate(status=JobStatusChoices.STATUS_ERRORED, error=repr(e)) - DataSource.objects.filter(pk=datasource.pk).update(status=DataSourceStatusChoices.FAILED) - if type(e) in (SyncError, JobTimeoutException): - logging.error(e) - else: + # Update the search cache for DataFiles belonging to this source + search_backend.cache(datasource.datafiles.iterator()) + + except Exception as e: + DataSource.objects.filter(pk=datasource.pk).update(status=DataSourceStatusChoices.FAILED) + if type(e) is SyncError: + logging.error(e) raise e diff --git a/netbox/core/management/commands/nbshell.py b/netbox/core/management/commands/nbshell.py index 7270c005a29..8f729d10acf 100644 --- a/netbox/core/management/commands/nbshell.py +++ b/netbox/core/management/commands/nbshell.py @@ -5,12 +5,16 @@ import sys from django import get_version from django.apps import apps from django.conf import settings -from django.contrib.auth import get_user_model from django.core.management.base import BaseCommand from core.models import ObjectType +from users.models import User APPS = ('circuits', 'core', 'dcim', 'extras', 'ipam', 'tenancy', 'users', 'virtualization', 'vpn', 'wireless') +EXCLUDE_MODELS = ( + 'extras.branch', + 'extras.stagedchange', +) BANNER_TEXT = """### NetBox interactive shell ({node}) ### Python {python} | Django {django} | NetBox {netbox} @@ -44,12 +48,16 @@ class Command(BaseCommand): # Gather Django models and constants from each app for app in APPS: - self.django_models[app] = [] + models = [] # Load models from each app for model in apps.get_app_config(app).get_models(): - namespace[model.__name__] = model - self.django_models[app].append(model.__name__) + app_label = model._meta.app_label + model_name = model._meta.model_name + if f'{app_label}.{model_name}' not in EXCLUDE_MODELS: + namespace[model.__name__] = model + models.append(model.__name__) + self.django_models[app] = sorted(models) # Constants try: @@ -61,7 +69,7 @@ class Command(BaseCommand): # Additional objects to include namespace['ObjectType'] = ObjectType - namespace['User'] = get_user_model() + namespace['User'] = User # Load convenience commands namespace.update({ diff --git a/netbox/core/management/commands/syncdatasource.py b/netbox/core/management/commands/syncdatasource.py index aa81379526d..990b6eb2abc 100644 --- a/netbox/core/management/commands/syncdatasource.py +++ b/netbox/core/management/commands/syncdatasource.py @@ -26,7 +26,7 @@ class Command(BaseCommand): if invalid_names := set(options['name']) - found_names: raise CommandError(f"Invalid data source names: {', '.join(invalid_names)}") else: - raise CommandError(f"Must specify at least one data source, or set --all.") + raise CommandError("Must specify at least one data source, or set --all.") if len(options['name']) > 1: self.stdout.write(f"Syncing {len(datasources)} data sources.") @@ -43,4 +43,4 @@ class Command(BaseCommand): raise e if len(options['name']) > 1: - self.stdout.write(f"Finished.") + self.stdout.write("Finished.") diff --git a/netbox/core/migrations/0012_job_object_type_optional.py b/netbox/core/migrations/0012_job_object_type_optional.py new file mode 100644 index 00000000000..3c6664afce1 --- /dev/null +++ b/netbox/core/migrations/0012_job_object_type_optional.py @@ -0,0 +1,24 @@ +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('core', '0011_move_objectchange'), + ] + + operations = [ + migrations.AlterField( + model_name='job', + name='object_type', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='jobs', + to='contenttypes.contenttype' + ), + ), + ] diff --git a/netbox/core/models/data.py b/netbox/core/models/data.py index 48fa2ff7130..39ee8fa575f 100644 --- a/netbox/core/models/data.py +++ b/netbox/core/models/data.py @@ -1,10 +1,10 @@ import hashlib import logging import os -import yaml from fnmatch import fnmatchcase from urllib.parse import urlparse +import yaml from django.conf import settings from django.contrib.contenttypes.fields import GenericForeignKey from django.core.exceptions import ValidationError @@ -12,7 +12,6 @@ from django.core.validators import RegexValidator from django.db import models from django.urls import reverse from django.utils import timezone -from django.utils.module_loading import import_string from django.utils.translation import gettext as _ from netbox.constants import CENSOR_TOKEN, CENSOR_TOKEN_CHANGED @@ -22,8 +21,6 @@ from netbox.registry import registry from utilities.querysets import RestrictedQuerySet from ..choices import * from ..exceptions import SyncError -from ..signals import post_sync, pre_sync -from .jobs import Job __all__ = ( 'AutoSyncRecord', @@ -87,9 +84,6 @@ class DataSource(JobsMixin, PrimaryModel): def __str__(self): return f'{self.name}' - def get_absolute_url(self): - return reverse('core:datasource', args=[self.pk]) - @property def docs_url(self): return f'{settings.STATIC_URL}docs/models/{self._meta.app_label}/{self._meta.model_name}/' @@ -128,7 +122,7 @@ class DataSource(JobsMixin, PrimaryModel): # Ensure URL scheme matches selected type if self.backend_class.is_local and self.url_scheme not in ('file', ''): raise ValidationError({ - 'source_url': f"URLs for local sources must start with file:// (or specify no scheme)" + 'source_url': "URLs for local sources must start with file:// (or specify no scheme)" }) def to_objectchange(self, action): @@ -153,21 +147,6 @@ class DataSource(JobsMixin, PrimaryModel): return objectchange - def enqueue_sync_job(self, request): - """ - Enqueue a background job to synchronize the DataSource by calling sync(). - """ - # Set the status to "syncing" - self.status = DataSourceStatusChoices.QUEUED - DataSource.objects.filter(pk=self.pk).update(status=self.status) - - # Enqueue a sync job - return Job.enqueue( - import_string('core.jobs.sync_datasource'), - instance=self, - user=request.user - ) - def get_backend(self): backend_params = self.parameters or {} return self.backend_class(self.source_url, **backend_params) @@ -176,6 +155,8 @@ class DataSource(JobsMixin, PrimaryModel): """ Create/update/delete child DataFiles as necessary to synchronize with the remote source. """ + from core.signals import post_sync, pre_sync + if self.status == DataSourceStatusChoices.SYNCING: raise SyncError(_("Cannot initiate sync; syncing already in progress.")) @@ -217,7 +198,7 @@ class DataSource(JobsMixin, PrimaryModel): logger.debug(f"Updated {updated_count} files") # Bulk delete deleted files - deleted_count, _ = DataFile.objects.filter(pk__in=deleted_file_ids).delete() + deleted_count, __ = DataFile.objects.filter(pk__in=deleted_file_ids).delete() logger.debug(f"Deleted {deleted_count} files") # Walk the local replication to find new files diff --git a/netbox/core/models/jobs.py b/netbox/core/models/jobs.py index b9f0d0b913d..e1b5715ddff 100644 --- a/netbox/core/models/jobs.py +++ b/netbox/core/models/jobs.py @@ -13,9 +13,6 @@ from django.utils.translation import gettext as _ from core.choices import JobStatusChoices from core.models import ObjectType from core.signals import job_end, job_start -from extras.constants import EVENT_JOB_END, EVENT_JOB_START -from netbox.config import get_config -from netbox.constants import RQ_QUEUE_DEFAULT from utilities.querysets import RestrictedQuerySet from utilities.rqworker import get_queue_for_model @@ -32,6 +29,8 @@ class Job(models.Model): to='contenttypes.ContentType', related_name='jobs', on_delete=models.CASCADE, + blank=True, + null=True ) object_id = models.PositiveBigIntegerField( blank=True, @@ -117,10 +116,11 @@ class Job(models.Model): def get_absolute_url(self): # TODO: Employ dynamic registration - if self.object_type.model == 'reportmodule': - return reverse(f'extras:report_result', kwargs={'job_pk': self.pk}) - if self.object_type.model == 'scriptmodule': - return reverse(f'extras:script_result', kwargs={'job_pk': self.pk}) + if self.object_type: + if self.object_type.model == 'reportmodule': + return reverse('extras:report_result', kwargs={'job_pk': self.pk}) + elif self.object_type.model == 'scriptmodule': + return reverse('extras:script_result', kwargs={'job_pk': self.pk}) return reverse('core:job', args=[self.pk]) def get_status_color(self): @@ -153,7 +153,7 @@ class Job(models.Model): def delete(self, *args, **kwargs): super().delete(*args, **kwargs) - rq_queue_name = get_config().QUEUE_MAPPINGS.get(self.object_type.model, RQ_QUEUE_DEFAULT) + rq_queue_name = get_queue_for_model(self.object_type.model if self.object_type else None) queue = django_rq.get_queue(rq_queue_name) job = queue.fetch_job(str(self.job_id)) @@ -198,25 +198,34 @@ class Job(models.Model): job_end.send(self) @classmethod - def enqueue(cls, func, instance, name='', user=None, schedule_at=None, interval=None, **kwargs): + def enqueue(cls, func, instance=None, name='', user=None, schedule_at=None, interval=None, immediate=False, **kwargs): """ Create a Job instance and enqueue a job using the given callable Args: func: The callable object to be enqueued for execution - instance: The NetBox object to which this job pertains + instance: The NetBox object to which this job pertains (optional) name: Name for the job (optional) user: The user responsible for running the job schedule_at: Schedule the job to be executed at the passed date and time interval: Recurrence interval (in minutes) + immediate: Run the job immediately without scheduling it in the background. Should be used for interactive + management commands only. """ - object_type = ObjectType.objects.get_for_model(instance, for_concrete_model=False) - rq_queue_name = get_queue_for_model(object_type.model) + if schedule_at and immediate: + raise ValueError(_("enqueue() cannot be called with values for both schedule_at and immediate.")) + + if instance: + object_type = ObjectType.objects.get_for_model(instance, for_concrete_model=False) + object_id = instance.pk + else: + object_type = object_id = None + rq_queue_name = get_queue_for_model(object_type.model if object_type else None) queue = django_rq.get_queue(rq_queue_name) status = JobStatusChoices.STATUS_SCHEDULED if schedule_at else JobStatusChoices.STATUS_PENDING job = Job.objects.create( object_type=object_type, - object_id=instance.pk, + object_id=object_id, name=name, status=status, scheduled=schedule_at, @@ -225,8 +234,16 @@ class Job(models.Model): job_id=uuid.uuid4() ) - if schedule_at: + # Run the job immediately, rather than enqueuing it as a background task. Note that this is a synchronous + # (blocking) operation, and execution will pause until the job completes. + if immediate: + func(job_id=str(job.job_id), job=job, **kwargs) + + # Schedule the job to run at a specific date & time. + elif schedule_at: queue.enqueue_at(schedule_at, func, job_id=str(job.job_id), job=job, **kwargs) + + # Schedule the job to run asynchronously at this first available opportunity. else: queue.enqueue(func, job_id=str(job.job_id), job=job, **kwargs) diff --git a/netbox/core/plugins.py b/netbox/core/plugins.py new file mode 100644 index 00000000000..1fcb37f2bff --- /dev/null +++ b/netbox/core/plugins.py @@ -0,0 +1,216 @@ +import datetime +import importlib +import importlib.util +from dataclasses import dataclass, field +from typing import Optional + +import requests +from django.conf import settings +from django.core.cache import cache + +from netbox.plugins import PluginConfig +from utilities.datetime import datetime_from_timestamp + +USER_AGENT_STRING = f'NetBox/{settings.RELEASE.version} {settings.RELEASE.edition}' +CACHE_KEY_CATALOG_FEED = 'plugins-catalog-feed' + + +@dataclass +class PluginAuthor: + """ + Identifying information for the author of a plugin. + """ + name: str + org_id: str = '' + url: str = '' + + +@dataclass +class PluginVersion: + """ + Details for a specific versioned release of a plugin. + """ + date: datetime.datetime = None + version: str = '' + netbox_min_version: str = '' + netbox_max_version: str = '' + has_model: bool = False + is_certified: bool = False + is_feature: bool = False + is_integration: bool = False + is_netboxlabs_supported: bool = False + + +@dataclass +class Plugin: + """ + The representation of a NetBox plugin in the catalog API. + """ + id: str = '' + status: str = '' + title_short: str = '' + title_long: str = '' + tag_line: str = '' + description_short: str = '' + slug: str = '' + author: Optional[PluginAuthor] = None + created_at: datetime.datetime = None + updated_at: datetime.datetime = None + license_type: str = '' + homepage_url: str = '' + package_name_pypi: str = '' + config_name: str = '' + is_certified: bool = False + release_latest: PluginVersion = field(default_factory=PluginVersion) + release_recent_history: list[PluginVersion] = field(default_factory=list) + is_local: bool = False # extra field for locally installed plugins + is_installed: bool = False + installed_version: str = '' + + +def get_local_plugins(plugins=None): + """ + Return a dictionary of all locally-installed plugins, mapped by name. + """ + plugins = plugins or {} + local_plugins = {} + + # Gather all locally-installed plugins + for plugin_name in settings.PLUGINS: + plugin = importlib.import_module(plugin_name) + plugin_config: PluginConfig = plugin.config + + local_plugins[plugin_config.name] = Plugin( + config_name=plugin_config.name, + title_short=plugin_config.verbose_name, + title_long=plugin_config.verbose_name, + tag_line=plugin_config.description, + description_short=plugin_config.description, + is_local=True, + is_installed=True, + installed_version=plugin_config.version, + ) + + # Update catalog entries for local plugins, or add them to the list if not listed + for k, v in local_plugins.items(): + if k in plugins: + plugins[k].is_local = True + plugins[k].is_installed = True + plugins[k].installed_version = v.installed_version + else: + plugins[k] = v + + return plugins + + +def get_catalog_plugins(): + """ + Return a dictionary of all entries in the plugins catalog, mapped by name. + """ + session = requests.Session() + + # Disable catalog fetching for isolated deployments + if settings.ISOLATED_DEPLOYMENT: + return {} + + def get_pages(): + # TODO: pagination is currently broken in API + payload = {'page': '1', 'per_page': '50'} + first_page = session.get( + settings.PLUGIN_CATALOG_URL, + headers={'User-Agent': USER_AGENT_STRING}, + proxies=settings.HTTP_PROXIES, + timeout=3, + params=payload + ).json() + yield first_page + num_pages = first_page['metadata']['pagination']['last_page'] + + for page in range(2, num_pages + 1): + payload['page'] = page + next_page = session.get( + settings.PLUGIN_CATALOG_URL, + headers={'User-Agent': USER_AGENT_STRING}, + proxies=settings.HTTP_PROXIES, + timeout=3, + params=payload + ).json() + yield next_page + + def make_plugin_dict(): + plugins = {} + + for page in get_pages(): + for data in page['data']: + + # Populate releases + releases = [] + for version in data['release_recent_history']: + releases.append( + PluginVersion( + date=datetime_from_timestamp(version['date']), + version=version['version'], + netbox_min_version=version['netbox_min_version'], + netbox_max_version=version['netbox_max_version'], + has_model=version['has_model'], + is_certified=version['is_certified'], + is_feature=version['is_feature'], + is_integration=version['is_integration'], + is_netboxlabs_supported=version['is_netboxlabs_supported'], + ) + ) + releases = sorted(releases, key=lambda x: x.date, reverse=True) + latest_release = PluginVersion( + date=datetime_from_timestamp(data['release_latest']['date']), + version=data['release_latest']['version'], + netbox_min_version=data['release_latest']['netbox_min_version'], + netbox_max_version=data['release_latest']['netbox_max_version'], + has_model=data['release_latest']['has_model'], + is_certified=data['release_latest']['is_certified'], + is_feature=data['release_latest']['is_feature'], + is_integration=data['release_latest']['is_integration'], + is_netboxlabs_supported=data['release_latest']['is_netboxlabs_supported'], + ) + + # Populate author (if any) + if data['author']: + author = PluginAuthor( + name=data['author']['name'], + org_id=data['author']['org_id'], + url=data['author']['url'], + ) + else: + author = None + + # Populate plugin data + plugins[data['config_name']] = Plugin( + id=data['id'], + status=data['status'], + title_short=data['title_short'], + title_long=data['title_long'], + tag_line=data['tag_line'], + description_short=data['description_short'], + slug=data['slug'], + author=author, + created_at=datetime_from_timestamp(data['created_at']), + updated_at=datetime_from_timestamp(data['updated_at']), + license_type=data['license_type'], + homepage_url=data['homepage_url'], + package_name_pypi=data['package_name_pypi'], + config_name=data['config_name'], + is_certified=data['is_certified'], + release_latest=latest_release, + release_recent_history=releases, + ) + + return plugins + + catalog_plugins = cache.get(CACHE_KEY_CATALOG_FEED, default={}) + if not catalog_plugins: + try: + catalog_plugins = make_plugin_dict() + cache.set(CACHE_KEY_CATALOG_FEED, catalog_plugins, 3600) + except requests.exceptions.RequestException: + pass + + return catalog_plugins diff --git a/netbox/core/signals.py b/netbox/core/signals.py index f884a27b46a..06432bf4ce4 100644 --- a/netbox/core/signals.py +++ b/netbox/core/signals.py @@ -1,9 +1,26 @@ -from django.db.models.signals import post_save -from django.dispatch import Signal, receiver +import logging +from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ValidationError +from django.db.models.fields.reverse_related import ManyToManyRel +from django.db.models.signals import m2m_changed, post_save, pre_delete +from django.dispatch import receiver, Signal +from django.utils.translation import gettext_lazy as _ +from django_prometheus.models import model_deletes, model_inserts, model_updates + +from core.choices import ObjectChangeActionChoices +from core.events import * +from core.models import ObjectChange +from extras.events import enqueue_event +from extras.utils import run_validators +from netbox.config import get_config +from netbox.context import current_request, events_queue +from netbox.models.features import ChangeLoggingMixin +from utilities.exceptions import AbortRequest from .models import ConfigRevision __all__ = ( + 'clear_events', 'job_end', 'job_start', 'post_sync', @@ -18,6 +35,152 @@ job_end = Signal() pre_sync = Signal() post_sync = Signal() +# Event signals +clear_events = Signal() + + +# +# Change logging & event handling +# + +@receiver((post_save, m2m_changed)) +def handle_changed_object(sender, instance, **kwargs): + """ + Fires when an object is created or updated. + """ + m2m_changed = False + + if not hasattr(instance, 'to_objectchange'): + return + + # Get the current request, or bail if not set + request = current_request.get() + if request is None: + return + + # Determine the type of change being made + if kwargs.get('created'): + event_type = OBJECT_CREATED + elif 'created' in kwargs: + event_type = OBJECT_UPDATED + elif kwargs.get('action') in ['post_add', 'post_remove'] and kwargs['pk_set']: + # m2m_changed with objects added or removed + m2m_changed = True + event_type = OBJECT_UPDATED + else: + return + + # Create/update an ObjectChange record for this change + action = { + OBJECT_CREATED: ObjectChangeActionChoices.ACTION_CREATE, + OBJECT_UPDATED: ObjectChangeActionChoices.ACTION_UPDATE, + OBJECT_DELETED: ObjectChangeActionChoices.ACTION_DELETE, + }[event_type] + objectchange = instance.to_objectchange(action) + # If this is a many-to-many field change, check for a previous ObjectChange instance recorded + # for this object by this request and update it + if m2m_changed and ( + prev_change := ObjectChange.objects.filter( + changed_object_type=ContentType.objects.get_for_model(instance), + changed_object_id=instance.pk, + request_id=request.id + ).first() + ): + prev_change.postchange_data = objectchange.postchange_data + prev_change.save() + elif objectchange and objectchange.has_changes: + objectchange.user = request.user + objectchange.request_id = request.id + objectchange.save() + + # Ensure that we're working with fresh M2M assignments + if m2m_changed: + instance.refresh_from_db() + + # Enqueue the object for event processing + queue = events_queue.get() + enqueue_event(queue, instance, request.user, request.id, event_type) + events_queue.set(queue) + + # Increment metric counters + if event_type == OBJECT_CREATED: + model_inserts.labels(instance._meta.model_name).inc() + elif event_type == OBJECT_UPDATED: + model_updates.labels(instance._meta.model_name).inc() + + +@receiver(pre_delete) +def handle_deleted_object(sender, instance, **kwargs): + """ + Fires when an object is deleted. + """ + # Run any deletion protection rules for the object. Note that this must occur prior + # to queueing any events for the object being deleted, in case a validation error is + # raised, causing the deletion to fail. + model_name = f'{sender._meta.app_label}.{sender._meta.model_name}' + validators = get_config().PROTECTION_RULES.get(model_name, []) + try: + run_validators(instance, validators) + except ValidationError as e: + raise AbortRequest( + _("Deletion is prevented by a protection rule: {message}").format(message=e) + ) + + # Get the current request, or bail if not set + request = current_request.get() + if request is None: + return + + # Record an ObjectChange if applicable + if hasattr(instance, 'to_objectchange'): + if hasattr(instance, 'snapshot') and not getattr(instance, '_prechange_snapshot', None): + instance.snapshot() + objectchange = instance.to_objectchange(ObjectChangeActionChoices.ACTION_DELETE) + objectchange.user = request.user + objectchange.request_id = request.id + objectchange.save() + + # Django does not automatically send an m2m_changed signal for the reverse direction of a + # many-to-many relationship (see https://code.djangoproject.com/ticket/17688), so we need to + # trigger one manually. We do this by checking for any reverse M2M relationships on the + # instance being deleted, and explicitly call .remove() on the remote M2M field to delete + # the association. This triggers an m2m_changed signal with the `post_remove` action type + # for the forward direction of the relationship, ensuring that the change is recorded. + for relation in instance._meta.related_objects: + if type(relation) is not ManyToManyRel: + continue + related_model = relation.related_model + related_field_name = relation.remote_field.name + if not issubclass(related_model, ChangeLoggingMixin): + # We only care about triggering the m2m_changed signal for models which support + # change logging + continue + for obj in related_model.objects.filter(**{related_field_name: instance.pk}): + obj.snapshot() # Ensure the change record includes the "before" state + getattr(obj, related_field_name).remove(instance) + + # Enqueue the object for event processing + queue = events_queue.get() + enqueue_event(queue, instance, request.user, request.id, OBJECT_DELETED) + events_queue.set(queue) + + # Increment metric counters + model_deletes.labels(instance._meta.model_name).inc() + + +@receiver(clear_events) +def clear_events_queue(sender, **kwargs): + """ + Delete any queued events (e.g. because of an aborted bulk transaction) + """ + logger = logging.getLogger('events') + logger.info(f"Clearing {len(events_queue.get())} queued events ({sender})") + events_queue.set({}) + + +# +# DataSource handlers +# @receiver(post_sync) def auto_sync(instance, **kwargs): diff --git a/netbox/core/tables/change_logging.py b/netbox/core/tables/change_logging.py index 423e459e5f6..aced0e8a637 100644 --- a/netbox/core/tables/change_logging.py +++ b/netbox/core/tables/change_logging.py @@ -48,6 +48,6 @@ class ObjectChangeTable(NetBoxTable): class Meta(NetBoxTable.Meta): model = ObjectChange fields = ( - 'pk', 'id', 'time', 'user_name', 'full_name', 'action', 'changed_object_type', 'object_repr', 'request_id', + 'pk', 'time', 'user_name', 'full_name', 'action', 'changed_object_type', 'object_repr', 'request_id', 'actions', ) diff --git a/netbox/core/tables/config.py b/netbox/core/tables/config.py index 9d4cb63935d..018d89edf2f 100644 --- a/netbox/core/tables/config.py +++ b/netbox/core/tables/config.py @@ -19,6 +19,7 @@ REVISION_BUTTONS = """ class ConfigRevisionTable(NetBoxTable): is_active = columns.BooleanColumn( verbose_name=_('Is Active'), + false_mark=None ) actions = columns.ActionsColumn( actions=('delete',), diff --git a/netbox/core/tables/plugins.py b/netbox/core/tables/plugins.py index 21e90cd6b46..96c612366d6 100644 --- a/netbox/core/tables/plugins.py +++ b/netbox/core/tables/plugins.py @@ -1,39 +1,84 @@ import django_tables2 as tables from django.utils.translation import gettext_lazy as _ -from netbox.tables import BaseTable + +from netbox.tables import BaseTable, columns __all__ = ( - 'PluginTable', + 'CatalogPluginTable', + 'PluginVersionTable', ) -class PluginTable(BaseTable): - name = tables.Column( - accessor=tables.A('verbose_name'), - verbose_name=_('Name') - ) +class PluginVersionTable(BaseTable): version = tables.Column( verbose_name=_('Version') ) - package = tables.Column( - accessor=tables.A('name'), - verbose_name=_('Package') + last_updated = columns.DateTimeColumn( + accessor=tables.A('date'), + timespec='minutes', + verbose_name=_('Last Updated') ) - author = tables.Column( - verbose_name=_('Author') + min_version = tables.Column( + accessor=tables.A('netbox_min_version'), + verbose_name=_('Minimum NetBox Version') ) - author_email = tables.Column( - verbose_name=_('Author Email') - ) - description = tables.Column( - verbose_name=_('Description') + max_version = tables.Column( + accessor=tables.A('netbox_max_version'), + verbose_name=_('Maximum NetBox Version') ) class Meta(BaseTable.Meta): - empty_text = _('No plugins found') + empty_text = _('No plugin data found') fields = ( - 'name', 'version', 'package', 'author', 'author_email', 'description', + 'version', 'last_updated', 'min_version', 'max_version', ) default_columns = ( - 'name', 'version', 'package', 'description', + 'version', 'last_updated', 'min_version', 'max_version', ) + orderable = False + + +class CatalogPluginTable(BaseTable): + title_long = tables.Column( + linkify=('core:plugin', [tables.A('config_name')]), + verbose_name=_('Name') + ) + author = tables.Column( + accessor=tables.A('author__name'), + verbose_name=_('Author') + ) + is_local = columns.BooleanColumn( + verbose_name=_('Local') + ) + is_installed = columns.BooleanColumn( + verbose_name=_('Installed') + ) + is_certified = columns.BooleanColumn( + verbose_name=_('Certified') + ) + created_at = columns.DateTimeColumn( + verbose_name=_('Published') + ) + updated_at = columns.DateTimeColumn( + verbose_name=_('Updated') + ) + installed_version = tables.Column( + verbose_name=_('Installed Version') + ) + latest_version = tables.Column( + accessor=tables.A('release_latest__version'), + verbose_name=_('Latest Version') + ) + + class Meta(BaseTable.Meta): + empty_text = _('No plugin data found') + fields = ( + 'title_long', 'author', 'is_local', 'is_installed', 'is_certified', 'created_at', 'updated_at', + 'installed_version', 'latest_version', + ) + default_columns = ( + 'title_long', 'author', 'is_local', 'is_installed', 'is_certified', 'installed_version', 'latest_version', + ) + # List installed plugins first, then certified plugins, then + # everything else (with each tranche ordered alphabetically) + order_by = ('-is_installed', '-is_certified', 'name') diff --git a/netbox/core/tests/test_api.py b/netbox/core/tests/test_api.py index 44db21bff9c..eeb3bd9c45f 100644 --- a/netbox/core/tests/test_api.py +++ b/netbox/core/tests/test_api.py @@ -57,6 +57,7 @@ class DataFileTest( ): model = DataFile brief_fields = ['display', 'id', 'path', 'url'] + user_permissions = ('core.view_datasource', ) @classmethod def setUpTestData(cls): diff --git a/netbox/core/urls.py b/netbox/core/urls.py index 58e96d735bb..fd6ec89962a 100644 --- a/netbox/core/urls.py +++ b/netbox/core/urls.py @@ -49,4 +49,8 @@ urlpatterns = ( # System path('system/', views.SystemView.as_view(), name='system'), + + # Plugins + path('plugins/', views.PluginListView.as_view(), name='plugin_list'), + path('plugins//', views.PluginView.as_view(), name='plugin'), ) diff --git a/netbox/core/views.py b/netbox/core/views.py index a976c1ec6d1..3c531962618 100644 --- a/netbox/core/views.py +++ b/netbox/core/views.py @@ -2,7 +2,6 @@ import json import platform from django import __version__ as DJANGO_VERSION -from django.apps import apps from django.conf import settings from django.contrib import messages from django.contrib.auth.mixins import UserPassesTestMixin @@ -32,10 +31,15 @@ from netbox.views.generic.mixins import TableMixin from utilities.data import shallow_compare_dict from utilities.forms import ConfirmationForm from utilities.htmx import htmx_partial +from utilities.json import ConfigJSONEncoder from utilities.query import count_related from utilities.views import ContentTypePermissionRequiredMixin, GetRelatedModelsMixin, register_model_view from . import filtersets, forms, tables +from .choices import DataSourceStatusChoices +from .jobs import SyncDataSourceJob from .models import * +from .plugins import get_catalog_plugins, get_local_plugins +from .tables import CatalogPluginTable, PluginVersionTable # @@ -75,9 +79,16 @@ class DataSourceSyncView(BaseObjectView): def post(self, request, pk): datasource = get_object_or_404(self.queryset, pk=pk) - job = datasource.enqueue_sync_job(request) - messages.success(request, f"Queued job #{job.pk} to sync {datasource}") + # Enqueue the sync job & update the DataSource's status + job = SyncDataSourceJob.enqueue(instance=datasource, user=request.user) + datasource.status = DataSourceStatusChoices.QUEUED + DataSource.objects.filter(pk=datasource.pk).update(status=datasource.status) + + messages.success( + request, + _("Queued job #{id} to sync {datasource}").format(id=job.pk, datasource=datasource) + ) return redirect(datasource.get_absolute_url()) @@ -305,7 +316,7 @@ class ConfigRevisionRestoreView(ContentTypePermissionRequiredMixin, View): candidate_config = get_object_or_404(ConfigRevision, pk=pk) candidate_config.activate() - messages.success(request, f"Restored configuration revision #{pk}") + messages.success(request, _("Restored configuration revision #{id}").format(id=pk)) return redirect(candidate_config.get_absolute_url()) @@ -449,9 +460,9 @@ class BackgroundTaskDeleteView(BaseRQView): # Remove job id from queue and delete the actual job queue.connection.lrem(queue.key, 0, job.id) job.delete() - messages.success(request, f'Deleted job {job_id}') + messages.success(request, _('Job {id} has been deleted.').format(id=job_id)) else: - messages.error(request, f'Error deleting job: {form.errors[0]}') + messages.error(request, _('Error deleting job {id}: {error}').format(id=job_id, error=form.errors[0])) return redirect(reverse('core:background_queue_list')) @@ -464,13 +475,13 @@ class BackgroundTaskRequeueView(BaseRQView): try: job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) except NoSuchJobError: - raise Http404(_("Job {job_id} not found").format(job_id=job_id)) + raise Http404(_("Job {id} not found.").format(id=job_id)) queue_index = QUEUES_MAP[job.origin] queue = get_queue_by_index(queue_index) requeue_job(job_id, connection=queue.connection, serializer=queue.serializer) - messages.success(request, f'You have successfully requeued: {job_id}') + messages.success(request, _('Job {id} has been re-enqueued.').format(id=job_id)) return redirect(reverse('core:background_task', args=[job_id])) @@ -482,7 +493,7 @@ class BackgroundTaskEnqueueView(BaseRQView): try: job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) except NoSuchJobError: - raise Http404(_("Job {job_id} not found").format(job_id=job_id)) + raise Http404(_("Job {id} not found.").format(id=job_id)) queue_index = QUEUES_MAP[job.origin] queue = get_queue_by_index(queue_index) @@ -505,7 +516,7 @@ class BackgroundTaskEnqueueView(BaseRQView): registry = ScheduledJobRegistry(queue.name, queue.connection) registry.remove(job) - messages.success(request, f'You have successfully enqueued: {job_id}') + messages.success(request, _('Job {id} has been enqueued.').format(id=job_id)) return redirect(reverse('core:background_task', args=[job_id])) @@ -522,11 +533,11 @@ class BackgroundTaskStopView(BaseRQView): queue_index = QUEUES_MAP[job.origin] queue = get_queue_by_index(queue_index) - stopped, _ = stop_jobs(queue, job_id) - if len(stopped) == 1: - messages.success(request, f'You have successfully stopped {job_id}') + stopped_jobs = stop_jobs(queue, job_id)[0] + if len(stopped_jobs) == 1: + messages.success(request, _('Job {id} has been stopped.').format(id=job_id)) else: - messages.error(request, f'Failed to stop {job_id}') + messages.error(request, _('Failed to stop job {id}').format(id=job_id)) return redirect(reverse('core:background_task', args=[job_id])) @@ -581,7 +592,7 @@ class WorkerView(BaseRQView): # -# Plugins +# System # class SystemView(UserPassesTestMixin, View): @@ -614,39 +625,97 @@ class SystemView(UserPassesTestMixin, View): 'rq_worker_count': Worker.count(get_connection('default')), } - # Plugins - plugins = [ - # Look up app config by package name - apps.get_app_config(plugin.rsplit('.', 1)[-1]) for plugin in settings.PLUGINS - ] - # Configuration try: config = ConfigRevision.objects.get(pk=cache.get('config_version')) except ConfigRevision.DoesNotExist: # Fall back to using the active config data if no record is found - config = ConfigRevision(data=get_config().defaults) + config = get_config() # Raw data export if 'export' in request.GET: + stats['netbox_release'] = stats['netbox_release'].asdict() + params = [param.name for param in PARAMS] data = { **stats, - 'plugins': { - plugin.name: plugin.version for plugin in plugins - }, + 'plugins': settings.PLUGINS, 'config': { - k: config.data[k] for k in sorted(config.data) + k: getattr(config, k) for k in sorted(params) }, } - response = HttpResponse(json.dumps(data, indent=4), content_type='text/json') + response = HttpResponse(json.dumps(data, cls=ConfigJSONEncoder, indent=4), content_type='text/json') response['Content-Disposition'] = 'attachment; filename="netbox.json"' return response - plugins_table = tables.PluginTable(plugins, orderable=False) - plugins_table.configure(request) + # Serialize any CustomValidator classes + if hasattr(config, 'CUSTOM_VALIDATORS') and config.CUSTOM_VALIDATORS: + config.CUSTOM_VALIDATORS = json.dumps(config.CUSTOM_VALIDATORS, cls=ConfigJSONEncoder, indent=4) return render(request, 'core/system.html', { 'stats': stats, - 'plugins_table': plugins_table, 'config': config, }) + + +# +# Plugins +# + +class BasePluginView(UserPassesTestMixin, View): + CACHE_KEY_CATALOG_ERROR = 'plugins-catalog-error' + + def test_func(self): + return self.request.user.is_staff + + def get_cached_plugins(self, request): + catalog_plugins = {} + catalog_plugins_error = cache.get(self.CACHE_KEY_CATALOG_ERROR, default=False) + if not catalog_plugins_error: + catalog_plugins = get_catalog_plugins() + if not catalog_plugins: + # Cache for 5 minutes to avoid spamming connection + cache.set(self.CACHE_KEY_CATALOG_ERROR, True, 300) + messages.warning(request, _("Plugins catalog could not be loaded")) + + return get_local_plugins(catalog_plugins) + + +class PluginListView(BasePluginView): + + def get(self, request): + q = request.GET.get('q', None) + + plugins = self.get_cached_plugins(request).values() + if q: + plugins = [obj for obj in plugins if q.casefold() in obj.title_short.casefold()] + + table = CatalogPluginTable(plugins, user=request.user) + table.configure(request) + + # If this is an HTMX request, return only the rendered table HTML + if htmx_partial(request): + return render(request, 'htmx/table.html', { + 'table': table, + }) + + return render(request, 'core/plugin_list.html', { + 'table': table, + }) + + +class PluginView(BasePluginView): + + def get(self, request, name): + + plugins = self.get_cached_plugins(request) + if name not in plugins: + raise Http404(_("Plugin {name} not found").format(name=name)) + plugin = plugins[name] + + table = PluginVersionTable(plugin.release_recent_history, user=request.user) + table.configure(request) + + return render(request, 'core/plugin.html', { + 'plugin': plugin, + 'table': table, + }) diff --git a/netbox/dcim/api/nested_serializers.py b/netbox/dcim/api/nested_serializers.py index 6aff1bdc915..4b8f0db4a46 100644 --- a/netbox/dcim/api/nested_serializers.py +++ b/netbox/dcim/api/nested_serializers.py @@ -1,9 +1,15 @@ +import warnings + from drf_spectacular.utils import extend_schema_serializer from rest_framework import serializers from dcim import models from netbox.api.fields import RelatedObjectCountField from netbox.api.serializers import WritableNestedSerializer +from .serializers_.nested import ( + NestedDeviceBaySerializer, NestedDeviceSerializer, NestedInterfaceSerializer, NestedInterfaceTemplateSerializer, + NestedLocationSerializer, NestedModuleBaySerializer, NestedRegionSerializer, NestedSiteGroupSerializer, +) __all__ = [ 'NestedCableSerializer', @@ -48,35 +54,17 @@ __all__ = [ 'NestedVirtualDeviceContextSerializer', ] +# TODO: Remove in v4.2 +warnings.warn( + "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", + DeprecationWarning +) + # # Regions/sites # -@extend_schema_serializer( - exclude_fields=('site_count',), -) -class NestedRegionSerializer(WritableNestedSerializer): - site_count = serializers.IntegerField(read_only=True) - _depth = serializers.IntegerField(source='level', read_only=True) - - class Meta: - model = models.Region - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth'] - - -@extend_schema_serializer( - exclude_fields=('site_count',), -) -class NestedSiteGroupSerializer(WritableNestedSerializer): - site_count = serializers.IntegerField(read_only=True) - _depth = serializers.IntegerField(source='level', read_only=True) - - class Meta: - model = models.SiteGroup - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth'] - - class NestedSiteSerializer(WritableNestedSerializer): class Meta: @@ -88,18 +76,6 @@ class NestedSiteSerializer(WritableNestedSerializer): # Racks # -@extend_schema_serializer( - exclude_fields=('rack_count',), -) -class NestedLocationSerializer(WritableNestedSerializer): - rack_count = serializers.IntegerField(read_only=True) - _depth = serializers.IntegerField(source='level', read_only=True) - - class Meta: - model = models.Location - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'rack_count', '_depth'] - - @extend_schema_serializer( exclude_fields=('rack_count',), ) @@ -200,13 +176,6 @@ class NestedPowerOutletTemplateSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display_url', 'display', 'name'] -class NestedInterfaceTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.InterfaceTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - class NestedRearPortTemplateSerializer(WritableNestedSerializer): class Meta: @@ -271,13 +240,6 @@ class NestedPlatformSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'device_count', 'virtualmachine_count'] -class NestedDeviceSerializer(WritableNestedSerializer): - - class Meta: - model = models.Device - fields = ['id', 'url', 'display_url', 'display', 'name'] - - class ModuleNestedModuleBaySerializer(WritableNestedSerializer): class Meta: @@ -285,13 +247,6 @@ class ModuleNestedModuleBaySerializer(WritableNestedSerializer): fields = ['id', 'url', 'display_url', 'display', 'name'] -class ModuleBayNestedModuleSerializer(WritableNestedSerializer): - - class Meta: - model = models.Module - fields = ['id', 'url', 'display_url', 'display', 'serial'] - - class NestedModuleSerializer(WritableNestedSerializer): device = NestedDeviceSerializer(read_only=True) module_bay = ModuleNestedModuleBaySerializer(read_only=True) @@ -338,15 +293,6 @@ class NestedPowerPortSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] -class NestedInterfaceSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - _occupied = serializers.BooleanField(required=False, read_only=True) - - class Meta: - model = models.Interface - fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] - - class NestedRearPortSerializer(WritableNestedSerializer): device = NestedDeviceSerializer(read_only=True) _occupied = serializers.BooleanField(required=False, read_only=True) @@ -365,22 +311,6 @@ class NestedFrontPortSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] -class NestedModuleBaySerializer(WritableNestedSerializer): - installed_module = ModuleBayNestedModuleSerializer(required=False, allow_null=True) - - class Meta: - model = models.ModuleBay - fields = ['id', 'url', 'display_url', 'display', 'installed_module', 'name'] - - -class NestedDeviceBaySerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - - class Meta: - model = models.DeviceBay - fields = ['id', 'url', 'display_url', 'display', 'device', 'name'] - - class NestedInventoryItemSerializer(WritableNestedSerializer): device = NestedDeviceSerializer(read_only=True) _depth = serializers.IntegerField(source='level', read_only=True) diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 4f8bbac1769..30aa2e1a0a7 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -11,4 +11,3 @@ from .serializers_.devices import * from .serializers_.device_components import * from .serializers_.power import * from .serializers_.rackunits import * -from .nested_serializers import * diff --git a/netbox/dcim/api/serializers_/base.py b/netbox/dcim/api/serializers_/base.py index 48f4967e363..1dca773b21d 100644 --- a/netbox/dcim/api/serializers_/base.py +++ b/netbox/dcim/api/serializers_/base.py @@ -13,7 +13,7 @@ class ConnectedEndpointsSerializer(serializers.ModelSerializer): """ Legacy serializer for pre-v3.3 connections """ - connected_endpoints_type = serializers.SerializerMethodField(read_only=True) + connected_endpoints_type = serializers.SerializerMethodField(read_only=True, allow_null=True) connected_endpoints = serializers.SerializerMethodField(read_only=True) connected_endpoints_reachable = serializers.SerializerMethodField(read_only=True) @@ -22,7 +22,7 @@ class ConnectedEndpointsSerializer(serializers.ModelSerializer): if endpoints := obj.connected_endpoints: return f'{endpoints[0]._meta.app_label}.{endpoints[0]._meta.model_name}' - @extend_schema_field(serializers.ListField) + @extend_schema_field(serializers.ListField(allow_null=True)) def get_connected_endpoints(self, obj): """ Return the appropriate serializer for the type of connected object. diff --git a/netbox/dcim/api/serializers_/cables.py b/netbox/dcim/api/serializers_/cables.py index 53dc3a0d671..397e5cd169f 100644 --- a/netbox/dcim/api/serializers_/cables.py +++ b/netbox/dcim/api/serializers_/cables.py @@ -89,7 +89,7 @@ class CablePathSerializer(serializers.ModelSerializer): class CabledObjectSerializer(serializers.ModelSerializer): cable = CableSerializer(nested=True, read_only=True, allow_null=True) cable_end = serializers.CharField(read_only=True) - link_peers_type = serializers.SerializerMethodField(read_only=True) + link_peers_type = serializers.SerializerMethodField(read_only=True, allow_null=True) link_peers = serializers.SerializerMethodField(read_only=True) _occupied = serializers.SerializerMethodField(read_only=True) diff --git a/netbox/dcim/api/serializers_/device_components.py b/netbox/dcim/api/serializers_/device_components.py index ab3944723b7..e285ce34937 100644 --- a/netbox/dcim/api/serializers_/device_components.py +++ b/netbox/dcim/api/serializers_/device_components.py @@ -15,7 +15,7 @@ from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelated from netbox.api.serializers import NetBoxModelSerializer, WritableNestedSerializer from utilities.api import get_serializer_for_model from vpn.api.serializers_.l2vpn import L2VPNTerminationSerializer -from wireless.api.nested_serializers import NestedWirelessLinkSerializer +from wireless.api.serializers_.nested import NestedWirelessLinkSerializer from wireless.api.serializers_.wirelesslans import WirelessLANSerializer from wireless.choices import * from wireless.models import WirelessLAN @@ -23,8 +23,8 @@ from .base import ConnectedEndpointsSerializer from .cables import CabledObjectSerializer from .devices import DeviceSerializer, ModuleSerializer, VirtualDeviceContextSerializer from .manufacturers import ManufacturerSerializer +from .nested import NestedInterfaceSerializer from .roles import InventoryItemRoleSerializer -from ..nested_serializers import * __all__ = ( 'ConsolePortSerializer', @@ -155,7 +155,7 @@ class PowerOutletSerializer(NetBoxModelSerializer, CabledObjectSerializer, Conne class Meta: model = PowerOutlet fields = [ - 'id', 'url', 'display_url', 'display', 'device', 'module', 'name', 'label', 'type', 'power_port', + 'id', 'url', 'display_url', 'display', 'device', 'module', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'description', 'mark_connected', 'cable', 'cable_end', 'link_peers', 'link_peers_type', 'connected_endpoints', 'connected_endpoints_type', 'connected_endpoints_reachable', 'tags', 'custom_fields', 'created', 'last_updated', '_occupied', @@ -297,6 +297,13 @@ class FrontPortSerializer(NetBoxModelSerializer, CabledObjectSerializer): class ModuleBaySerializer(NetBoxModelSerializer): device = DeviceSerializer(nested=True) + module = ModuleSerializer( + nested=True, + fields=('id', 'url', 'display'), + required=False, + allow_null=True, + default=None + ) installed_module = ModuleSerializer( nested=True, fields=('id', 'url', 'display', 'serial', 'description'), @@ -307,7 +314,7 @@ class ModuleBaySerializer(NetBoxModelSerializer): class Meta: model = ModuleBay fields = [ - 'id', 'url', 'display_url', 'display', 'device', 'name', 'installed_module', 'label', 'position', + 'id', 'url', 'display_url', 'display', 'device', 'module', 'name', 'installed_module', 'label', 'position', 'description', 'tags', 'custom_fields', 'created', 'last_updated', ] brief_fields = ('id', 'url', 'display', 'installed_module', 'name', 'description') @@ -338,11 +345,12 @@ class InventoryItemSerializer(NetBoxModelSerializer): ) component = serializers.SerializerMethodField(read_only=True, allow_null=True) _depth = serializers.IntegerField(source='level', read_only=True) + status = ChoiceField(choices=InventoryItemStatusChoices, required=False) class Meta: model = InventoryItem fields = [ - 'id', 'url', 'display_url', 'display', 'device', 'parent', 'name', 'label', 'role', 'manufacturer', + 'id', 'url', 'display_url', 'display', 'device', 'parent', 'name', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered', 'description', 'component_type', 'component_id', 'component', 'tags', 'custom_fields', 'created', 'last_updated', '_depth', ] diff --git a/netbox/dcim/api/serializers_/devices.py b/netbox/dcim/api/serializers_/devices.py index f4e72f08279..7a01b49e815 100644 --- a/netbox/dcim/api/serializers_/devices.py +++ b/netbox/dcim/api/serializers_/devices.py @@ -16,9 +16,9 @@ from .devicetypes import * from .platforms import PlatformSerializer from .racks import RackSerializer from .roles import DeviceRoleSerializer +from .nested import NestedDeviceBaySerializer, NestedDeviceSerializer, NestedModuleBaySerializer from .sites import LocationSerializer, SiteSerializer from .virtualchassis import VirtualChassisSerializer -from ..nested_serializers import * __all__ = ( 'DeviceSerializer', @@ -87,7 +87,7 @@ class DeviceSerializer(NetBoxModelSerializer): ] brief_fields = ('id', 'url', 'display', 'name', 'description') - @extend_schema_field(NestedDeviceSerializer) + @extend_schema_field(NestedDeviceSerializer(allow_null=True)) def get_parent_device(self, obj): try: device_bay = obj.parent_bay diff --git a/netbox/dcim/api/serializers_/devicetype_components.py b/netbox/dcim/api/serializers_/devicetype_components.py index b03fbc63452..04f6395a6db 100644 --- a/netbox/dcim/api/serializers_/devicetype_components.py +++ b/netbox/dcim/api/serializers_/devicetype_components.py @@ -14,8 +14,8 @@ from utilities.api import get_serializer_for_model from wireless.choices import * from .devicetypes import DeviceTypeSerializer, ModuleTypeSerializer from .manufacturers import ManufacturerSerializer +from .nested import NestedInterfaceTemplateSerializer from .roles import InventoryItemRoleSerializer -from ..nested_serializers import * __all__ = ( 'ConsolePortTemplateSerializer', @@ -253,13 +253,22 @@ class FrontPortTemplateSerializer(ValidatedModelSerializer): class ModuleBayTemplateSerializer(ValidatedModelSerializer): device_type = DeviceTypeSerializer( - nested=True + nested=True, + required=False, + allow_null=True, + default=None + ) + module_type = ModuleTypeSerializer( + nested=True, + required=False, + allow_null=True, + default=None ) class Meta: model = ModuleBayTemplate fields = [ - 'id', 'url', 'display', 'device_type', 'name', 'label', 'position', 'description', + 'id', 'url', 'display', 'device_type', 'module_type', 'name', 'label', 'position', 'description', 'created', 'last_updated', ] brief_fields = ('id', 'url', 'display', 'name', 'description') diff --git a/netbox/dcim/api/serializers_/devicetypes.py b/netbox/dcim/api/serializers_/devicetypes.py index a755247db10..0ce2af2f89a 100644 --- a/netbox/dcim/api/serializers_/devicetypes.py +++ b/netbox/dcim/api/serializers_/devicetypes.py @@ -7,6 +7,7 @@ from dcim.choices import * from dcim.models import DeviceType, ModuleType from netbox.api.fields import ChoiceField, RelatedObjectCountField from netbox.api.serializers import NetBoxModelSerializer +from netbox.choices import * from .manufacturers import ManufacturerSerializer from .platforms import PlatformSerializer @@ -62,13 +63,27 @@ class DeviceTypeSerializer(NetBoxModelSerializer): class ModuleTypeSerializer(NetBoxModelSerializer): - manufacturer = ManufacturerSerializer(nested=True) - weight_unit = ChoiceField(choices=WeightUnitChoices, allow_blank=True, required=False, allow_null=True) + manufacturer = ManufacturerSerializer( + nested=True + ) + weight_unit = ChoiceField( + choices=WeightUnitChoices, + allow_blank=True, + required=False, + allow_null=True + ) + airflow = ChoiceField( + choices=ModuleAirflowChoices, + allow_blank=True, + required=False, + allow_null=True + ) class Meta: model = ModuleType fields = [ - 'id', 'url', 'display_url', 'display', 'manufacturer', 'model', 'part_number', 'weight', 'weight_unit', - 'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', + 'id', 'url', 'display_url', 'display', 'manufacturer', 'model', 'part_number', 'airflow', + 'weight', 'weight_unit', 'description', 'comments', 'tags', 'custom_fields', + 'created', 'last_updated', ] brief_fields = ('id', 'url', 'display', 'manufacturer', 'model', 'description') diff --git a/netbox/dcim/api/serializers_/manufacturers.py b/netbox/dcim/api/serializers_/manufacturers.py index 61158e0f75d..1a1eea6ec35 100644 --- a/netbox/dcim/api/serializers_/manufacturers.py +++ b/netbox/dcim/api/serializers_/manufacturers.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from dcim.models import Manufacturer from netbox.api.fields import RelatedObjectCountField from netbox.api.serializers import NetBoxModelSerializer diff --git a/netbox/dcim/api/serializers_/nested.py b/netbox/dcim/api/serializers_/nested.py new file mode 100644 index 00000000000..ea346cc63fa --- /dev/null +++ b/netbox/dcim/api/serializers_/nested.py @@ -0,0 +1,97 @@ +from drf_spectacular.utils import extend_schema_serializer +from rest_framework import serializers + +from netbox.api.serializers import WritableNestedSerializer +from dcim import models + +__all__ = ( + 'NestedDeviceBaySerializer', + 'NestedDeviceSerializer', + 'NestedInterfaceSerializer', + 'NestedInterfaceTemplateSerializer', + 'NestedLocationSerializer', + 'NestedModuleBaySerializer', + 'NestedRegionSerializer', + 'NestedSiteGroupSerializer', +) + + +@extend_schema_serializer( + exclude_fields=('site_count',), +) +class NestedRegionSerializer(WritableNestedSerializer): + site_count = serializers.IntegerField(read_only=True) + _depth = serializers.IntegerField(source='level', read_only=True) + + class Meta: + model = models.Region + fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth'] + + +@extend_schema_serializer( + exclude_fields=('site_count',), +) +class NestedSiteGroupSerializer(WritableNestedSerializer): + site_count = serializers.IntegerField(read_only=True) + _depth = serializers.IntegerField(source='level', read_only=True) + + class Meta: + model = models.SiteGroup + fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth'] + + +@extend_schema_serializer( + exclude_fields=('rack_count',), +) +class NestedLocationSerializer(WritableNestedSerializer): + rack_count = serializers.IntegerField(read_only=True) + _depth = serializers.IntegerField(source='level', read_only=True) + + class Meta: + model = models.Location + fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'rack_count', '_depth'] + + +class NestedDeviceSerializer(WritableNestedSerializer): + + class Meta: + model = models.Device + fields = ['id', 'url', 'display_url', 'display', 'name'] + + +class NestedInterfaceSerializer(WritableNestedSerializer): + device = NestedDeviceSerializer(read_only=True) + _occupied = serializers.BooleanField(required=False, read_only=True) + + class Meta: + model = models.Interface + fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] + + +class NestedInterfaceTemplateSerializer(WritableNestedSerializer): + + class Meta: + model = models.InterfaceTemplate + fields = ['id', 'url', 'display', 'name'] + + +class NestedDeviceBaySerializer(WritableNestedSerializer): + device = NestedDeviceSerializer(read_only=True) + + class Meta: + model = models.DeviceBay + fields = ['id', 'url', 'display_url', 'display', 'device', 'name'] + + +class ModuleBayNestedModuleSerializer(WritableNestedSerializer): + + class Meta: + model = models.Module + fields = ['id', 'url', 'display_url', 'display', 'serial'] + + +class NestedModuleBaySerializer(WritableNestedSerializer): + + class Meta: + model = models.ModuleBay + fields = ['id', 'url', 'display_url', 'display', 'name'] diff --git a/netbox/dcim/api/serializers_/platforms.py b/netbox/dcim/api/serializers_/platforms.py index 3c846f8fd11..2f47457019f 100644 --- a/netbox/dcim/api/serializers_/platforms.py +++ b/netbox/dcim/api/serializers_/platforms.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from dcim.models import Platform from extras.api.serializers_.configtemplates import ConfigTemplateSerializer from netbox.api.fields import RelatedObjectCountField diff --git a/netbox/dcim/api/serializers_/power.py b/netbox/dcim/api/serializers_/power.py index fc65a0732f4..4c2cf54fbcb 100644 --- a/netbox/dcim/api/serializers_/power.py +++ b/netbox/dcim/api/serializers_/power.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from dcim.choices import * from dcim.models import PowerFeed, PowerPanel from netbox.api.fields import ChoiceField, RelatedObjectCountField diff --git a/netbox/dcim/api/serializers_/racks.py b/netbox/dcim/api/serializers_/racks.py index d8d73800195..1378c265a85 100644 --- a/netbox/dcim/api/serializers_/racks.py +++ b/netbox/dcim/api/serializers_/racks.py @@ -3,12 +3,14 @@ from rest_framework import serializers from dcim.choices import * from dcim.constants import * -from dcim.models import Rack, RackReservation, RackRole +from dcim.models import Rack, RackReservation, RackRole, RackType from netbox.api.fields import ChoiceField, RelatedObjectCountField from netbox.api.serializers import NetBoxModelSerializer +from netbox.choices import * from netbox.config import ConfigItem from tenancy.api.serializers_.tenants import TenantSerializer from users.api.serializers_.users import UserSerializer +from .manufacturers import ManufacturerSerializer from .sites import LocationSerializer, SiteSerializer __all__ = ( @@ -16,6 +18,7 @@ __all__ = ( 'RackReservationSerializer', 'RackRoleSerializer', 'RackSerializer', + 'RackTypeSerializer', ) @@ -33,18 +36,89 @@ class RackRoleSerializer(NetBoxModelSerializer): brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'rack_count') -class RackSerializer(NetBoxModelSerializer): - site = SiteSerializer(nested=True) - location = LocationSerializer(nested=True, required=False, allow_null=True, default=None) - tenant = TenantSerializer(nested=True, required=False, allow_null=True) - status = ChoiceField(choices=RackStatusChoices, required=False) - role = RackRoleSerializer(nested=True, required=False, allow_null=True) - type = ChoiceField(choices=RackTypeChoices, allow_blank=True, required=False, allow_null=True) - facility_id = serializers.CharField(max_length=50, allow_blank=True, allow_null=True, label=_('Facility ID'), - default=None) - width = ChoiceField(choices=RackWidthChoices, required=False) - outer_unit = ChoiceField(choices=RackDimensionUnitChoices, allow_blank=True, required=False, allow_null=True) - weight_unit = ChoiceField(choices=WeightUnitChoices, allow_blank=True, required=False, allow_null=True) +class RackBaseSerializer(NetBoxModelSerializer): + form_factor = ChoiceField( + choices=RackFormFactorChoices, + allow_blank=True, + required=False, + allow_null=True + ) + width = ChoiceField( + choices=RackWidthChoices, + required=False + ) + outer_unit = ChoiceField( + choices=RackDimensionUnitChoices, + allow_blank=True, + required=False, + allow_null=True + ) + weight_unit = ChoiceField( + choices=WeightUnitChoices, + allow_blank=True, + required=False, + allow_null=True + ) + + +class RackTypeSerializer(RackBaseSerializer): + manufacturer = ManufacturerSerializer( + nested=True + ) + + class Meta: + model = RackType + fields = [ + 'id', 'url', 'display_url', 'display', 'manufacturer', 'model', 'slug', 'description', 'form_factor', + 'width', 'u_height', 'starting_unit', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', 'weight', + 'max_weight', 'weight_unit', 'mounting_depth', 'description', 'comments', 'tags', + 'custom_fields', 'created', 'last_updated', + ] + brief_fields = ('id', 'url', 'display', 'manufacturer', 'model', 'slug', 'description') + + +class RackSerializer(RackBaseSerializer): + site = SiteSerializer( + nested=True + ) + location = LocationSerializer( + nested=True, + required=False, + allow_null=True, + default=None + ) + tenant = TenantSerializer( + nested=True, + required=False, + allow_null=True + ) + status = ChoiceField( + choices=RackStatusChoices, + required=False + ) + airflow = ChoiceField( + choices=RackAirflowChoices, + allow_blank=True, + required=False + ) + role = RackRoleSerializer( + nested=True, + required=False, + allow_null=True + ) + facility_id = serializers.CharField( + max_length=50, + allow_blank=True, + allow_null=True, + label=_('Facility ID'), + default=None + ) + rack_type = RackTypeSerializer( + nested=True, + required=False, + allow_null=True, + default=None + ) # Related object counts device_count = RelatedObjectCountField('devices') @@ -54,9 +128,10 @@ class RackSerializer(NetBoxModelSerializer): model = Rack fields = [ 'id', 'url', 'display_url', 'display', 'name', 'facility_id', 'site', 'location', 'tenant', 'status', - 'role', 'serial', 'asset_tag', 'type', 'width', 'u_height', 'starting_unit', 'weight', 'max_weight', - 'weight_unit', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', 'description', - 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'device_count', 'powerfeed_count', + 'role', 'serial', 'asset_tag', 'rack_type', 'form_factor', 'width', 'u_height', 'starting_unit', 'weight', + 'max_weight', 'weight_unit', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', + 'airflow', 'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'device_count', + 'powerfeed_count', ] brief_fields = ('id', 'url', 'display', 'name', 'description', 'device_count') diff --git a/netbox/dcim/api/serializers_/roles.py b/netbox/dcim/api/serializers_/roles.py index e9c9d35639a..8f922da1079 100644 --- a/netbox/dcim/api/serializers_/roles.py +++ b/netbox/dcim/api/serializers_/roles.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from dcim.models import DeviceRole, InventoryItemRole from extras.api.serializers_.configtemplates import ConfigTemplateSerializer from netbox.api.fields import RelatedObjectCountField diff --git a/netbox/dcim/api/serializers_/sites.py b/netbox/dcim/api/serializers_/sites.py index f45a1949da7..dc91f5dc766 100644 --- a/netbox/dcim/api/serializers_/sites.py +++ b/netbox/dcim/api/serializers_/sites.py @@ -8,7 +8,7 @@ from ipam.models import ASN from netbox.api.fields import ChoiceField, RelatedObjectCountField, SerializedPKRelatedField from netbox.api.serializers import NestedGroupModelSerializer, NetBoxModelSerializer from tenancy.api.serializers_.tenants import TenantSerializer -from ..nested_serializers import * +from .nested import NestedLocationSerializer, NestedRegionSerializer, NestedSiteGroupSerializer __all__ = ( 'LocationSerializer', diff --git a/netbox/dcim/api/serializers_/virtualchassis.py b/netbox/dcim/api/serializers_/virtualchassis.py index 19e94ba8dd3..a93d2833f01 100644 --- a/netbox/dcim/api/serializers_/virtualchassis.py +++ b/netbox/dcim/api/serializers_/virtualchassis.py @@ -2,7 +2,7 @@ from rest_framework import serializers from dcim.models import VirtualChassis from netbox.api.serializers import NetBoxModelSerializer -from ..nested_serializers import * +from .nested import NestedDeviceSerializer __all__ = ( 'VirtualChassisSerializer', diff --git a/netbox/dcim/api/urls.py b/netbox/dcim/api/urls.py index 36a0c99a599..d099b392a3c 100644 --- a/netbox/dcim/api/urls.py +++ b/netbox/dcim/api/urls.py @@ -12,6 +12,7 @@ router.register('sites', views.SiteViewSet) # Racks router.register('locations', views.LocationViewSet) +router.register('rack-types', views.RackTypeViewSet) router.register('rack-roles', views.RackRoleViewSet) router.register('racks', views.RackViewSet) router.register('rack-reservations', views.RackReservationViewSet) diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index be7a9c30645..87aa7535c35 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -161,6 +161,16 @@ class RackRoleViewSet(NetBoxModelViewSet): filterset_class = filtersets.RackRoleFilterSet +# +# Rack Types +# + +class RackTypeViewSet(NetBoxModelViewSet): + queryset = RackType.objects.all() + serializer_class = serializers.RackTypeSerializer + filterset_class = filtersets.RackTypeFilterSet + + # # Racks # diff --git a/netbox/dcim/apps.py b/netbox/dcim/apps.py index 4df66e36747..9653d3b93a9 100644 --- a/netbox/dcim/apps.py +++ b/netbox/dcim/apps.py @@ -10,7 +10,7 @@ class DCIMConfig(AppConfig): def ready(self): from netbox.models.features import register_models from utilities.counters import connect_counters - from . import signals, search + from . import signals, search # noqa: F401 from .models import CableTermination, Device, DeviceType, VirtualChassis # Register models diff --git a/netbox/dcim/choices.py b/netbox/dcim/choices.py index fe8d8a158f6..fee587e6b6c 100644 --- a/netbox/dcim/choices.py +++ b/netbox/dcim/choices.py @@ -51,7 +51,7 @@ class LocationStatusChoices(ChoiceSet): # Racks # -class RackTypeChoices(ChoiceSet): +class RackFormFactorChoices(ChoiceSet): TYPE_2POST = '2-post-frame' TYPE_4POST = '4-post-frame' @@ -127,6 +127,17 @@ class RackElevationDetailRenderChoices(ChoiceSet): ) +class RackAirflowChoices(ChoiceSet): + + FRONT_TO_REAR = 'front-to-rear' + REAR_TO_FRONT = 'rear-to-front' + + CHOICES = ( + (FRONT_TO_REAR, _('Front to rear')), + (REAR_TO_FRONT, _('Rear to front')), + ) + + # # DeviceTypes # @@ -186,6 +197,9 @@ class DeviceAirflowChoices(ChoiceSet): AIRFLOW_LEFT_TO_RIGHT = 'left-to-right' AIRFLOW_RIGHT_TO_LEFT = 'right-to-left' AIRFLOW_SIDE_TO_REAR = 'side-to-rear' + AIRFLOW_REAR_TO_SIDE = 'rear-to-side' + AIRFLOW_BOTTOM_TO_TOP = 'bottom-to-top' + AIRFLOW_TOP_TO_BOTTOM = 'top-to-bottom' AIRFLOW_PASSIVE = 'passive' AIRFLOW_MIXED = 'mixed' @@ -195,6 +209,9 @@ class DeviceAirflowChoices(ChoiceSet): (AIRFLOW_LEFT_TO_RIGHT, _('Left to right')), (AIRFLOW_RIGHT_TO_LEFT, _('Right to left')), (AIRFLOW_SIDE_TO_REAR, _('Side to rear')), + (AIRFLOW_REAR_TO_SIDE, _('Rear to side')), + (AIRFLOW_BOTTOM_TO_TOP, _('Bottom to top')), + (AIRFLOW_TOP_TO_BOTTOM, _('Top to bottom')), (AIRFLOW_PASSIVE, _('Passive')), (AIRFLOW_MIXED, _('Mixed')), ) @@ -224,6 +241,25 @@ class ModuleStatusChoices(ChoiceSet): ] +class ModuleAirflowChoices(ChoiceSet): + + FRONT_TO_REAR = 'front-to-rear' + REAR_TO_FRONT = 'rear-to-front' + LEFT_TO_RIGHT = 'left-to-right' + RIGHT_TO_LEFT = 'right-to-left' + SIDE_TO_REAR = 'side-to-rear' + PASSIVE = 'passive' + + CHOICES = ( + (FRONT_TO_REAR, _('Front to rear')), + (REAR_TO_FRONT, _('Rear to front')), + (LEFT_TO_RIGHT, _('Left to right')), + (RIGHT_TO_LEFT, _('Right to left')), + (SIDE_TO_REAR, _('Side to rear')), + (PASSIVE, _('Passive')), + ) + + # # ConsolePorts # @@ -366,6 +402,7 @@ class PowerPortTypeChoices(ChoiceSet): TYPE_NEMA_L1560P = 'nema-l15-60p' TYPE_NEMA_L2120P = 'nema-l21-20p' TYPE_NEMA_L2130P = 'nema-l21-30p' + TYPE_NEMA_L2220P = 'nema-l22-20p' TYPE_NEMA_L2230P = 'nema-l22-30p' # California style TYPE_CS6361C = 'cs6361c' @@ -487,6 +524,7 @@ class PowerPortTypeChoices(ChoiceSet): (TYPE_NEMA_L1560P, 'NEMA L15-60P'), (TYPE_NEMA_L2120P, 'NEMA L21-20P'), (TYPE_NEMA_L2130P, 'NEMA L21-30P'), + (TYPE_NEMA_L2220P, 'NEMA L22-20P'), (TYPE_NEMA_L2230P, 'NEMA L22-30P'), )), (_('California Style'), ( @@ -619,6 +657,7 @@ class PowerOutletTypeChoices(ChoiceSet): TYPE_NEMA_L1560R = 'nema-l15-60r' TYPE_NEMA_L2120R = 'nema-l21-20r' TYPE_NEMA_L2130R = 'nema-l21-30r' + TYPE_NEMA_L2220R = 'nema-l22-20r' TYPE_NEMA_L2230R = 'nema-l22-30r' # California style TYPE_CS6360C = 'CS6360C' @@ -651,6 +690,7 @@ class PowerOutletTypeChoices(ChoiceSet): # Direct current (DC) TYPE_DC = 'dc-terminal' # Proprietary + TYPE_EATON_C39 = 'eaton-c39' TYPE_HDOT_CX = 'hdot-cx' TYPE_SAF_D_GRID = 'saf-d-grid' TYPE_NEUTRIK_POWERCON_20A = 'neutrik-powercon-20a' @@ -733,6 +773,7 @@ class PowerOutletTypeChoices(ChoiceSet): (TYPE_NEMA_L1560R, 'NEMA L15-60R'), (TYPE_NEMA_L2120R, 'NEMA L21-20R'), (TYPE_NEMA_L2130R, 'NEMA L21-30R'), + (TYPE_NEMA_L2220R, 'NEMA L22-20R'), (TYPE_NEMA_L2230R, 'NEMA L22-30R'), )), (_('California Style'), ( @@ -771,6 +812,7 @@ class PowerOutletTypeChoices(ChoiceSet): (TYPE_DC, 'DC Terminal'), )), (_('Proprietary'), ( + (TYPE_EATON_C39, 'Eaton C39'), (TYPE_HDOT_CX, 'HDOT Cx'), (TYPE_SAF_D_GRID, 'Saf-D-Grid'), (TYPE_NEUTRIK_POWERCON_20A, 'Neutrik powerCON (20A)'), @@ -827,6 +869,7 @@ class InterfaceTypeChoices(ChoiceSet): TYPE_100ME_LFX = '100base-lfx' TYPE_100ME_FIXED = '100base-tx' TYPE_100ME_T1 = '100base-t1' + TYPE_100ME_SFP = '100base-x-sfp' TYPE_1GE_FIXED = '1000base-t' TYPE_1GE_TX_FIXED = '1000base-tx' TYPE_1GE_GBIC = '1000base-x-gbic' @@ -886,7 +929,9 @@ class InterfaceTypeChoices(ChoiceSet): TYPE_80211AD = 'ieee802.11ad' TYPE_80211AX = 'ieee802.11ax' TYPE_80211AY = 'ieee802.11ay' + TYPE_80211BE = 'ieee802.11be' TYPE_802151 = 'ieee802.15.1' + TYPE_802154 = 'ieee802.15.4' TYPE_OTHER_WIRELESS = 'other-wireless' # Cellular @@ -998,6 +1043,7 @@ class InterfaceTypeChoices(ChoiceSet): ( _('Ethernet (modular)'), ( + (TYPE_100ME_SFP, 'SFP (100ME)'), (TYPE_1GE_GBIC, 'GBIC (1GE)'), (TYPE_1GE_SFP, 'SFP (1GE)'), (TYPE_10GE_SFP_PLUS, 'SFP+ (10GE)'), @@ -1057,7 +1103,9 @@ class InterfaceTypeChoices(ChoiceSet): (TYPE_80211AD, 'IEEE 802.11ad'), (TYPE_80211AX, 'IEEE 802.11ax'), (TYPE_80211AY, 'IEEE 802.11ay'), + (TYPE_80211BE, 'IEEE 802.11be'), (TYPE_802151, 'IEEE 802.15.1 (Bluetooth)'), + (TYPE_802154, 'IEEE 802.15.4 (LR-WPAN)'), (TYPE_OTHER_WIRELESS, 'Other (Wireless)'), ) ), @@ -1315,6 +1363,14 @@ class PortTypeChoices(ChoiceSet): TYPE_URM_P2 = 'urm-p2' TYPE_URM_P4 = 'urm-p4' TYPE_URM_P8 = 'urm-p8' + TYPE_USB_A = 'usb-a' + TYPE_USB_B = 'usb-b' + TYPE_USB_C = 'usb-c' + TYPE_USB_MINI_A = 'usb-mini-a' + TYPE_USB_MINI_B = 'usb-mini-b' + TYPE_USB_MICRO_A = 'usb-micro-a' + TYPE_USB_MICRO_B = 'usb-micro-b' + TYPE_USB_MICRO_AB = 'usb-micro-ab' TYPE_OTHER = 'other' CHOICES = ( @@ -1374,6 +1430,19 @@ class PortTypeChoices(ChoiceSet): (TYPE_SPLICE, 'Splice'), ), ), + ( + _('USB'), + ( + (TYPE_USB_A, 'USB Type A'), + (TYPE_USB_B, 'USB Type B'), + (TYPE_USB_C, 'USB Type C'), + (TYPE_USB_MINI_A, 'USB Mini A'), + (TYPE_USB_MINI_B, 'USB Mini B'), + (TYPE_USB_MICRO_A, 'USB Micro A'), + (TYPE_USB_MICRO_B, 'USB Micro B'), + (TYPE_USB_MICRO_AB, 'USB Micro AB'), + ), + ), ( _('Other'), ( @@ -1412,6 +1481,7 @@ class CableTypeChoices(ChoiceSet): TYPE_SMF_OS2 = 'smf-os2' TYPE_AOC = 'aoc' TYPE_POWER = 'power' + TYPE_USB = 'usb' CHOICES = ( ( @@ -1444,6 +1514,7 @@ class CableTypeChoices(ChoiceSet): (TYPE_AOC, 'Active Optical Cabling (AOC)'), ), ), + (TYPE_USB, _('USB')), (TYPE_POWER, _('Power')), ) @@ -1483,24 +1554,6 @@ class CableLengthUnitChoices(ChoiceSet): ) -class WeightUnitChoices(ChoiceSet): - - # Metric - UNIT_KILOGRAM = 'kg' - UNIT_GRAM = 'g' - - # Imperial - UNIT_POUND = 'lb' - UNIT_OUNCE = 'oz' - - CHOICES = ( - (UNIT_KILOGRAM, _('Kilograms')), - (UNIT_GRAM, _('Grams')), - (UNIT_POUND, _('Pounds')), - (UNIT_OUNCE, _('Ounces')), - ) - - # # CableTerminations # @@ -1585,3 +1638,27 @@ class VirtualDeviceContextStatusChoices(ChoiceSet): (STATUS_PLANNED, _('Planned'), 'cyan'), (STATUS_OFFLINE, _('Offline'), 'red'), ] + + +# +# InventoryItem +# + +class InventoryItemStatusChoices(ChoiceSet): + key = 'InventoryItem.status' + + STATUS_OFFLINE = 'offline' + STATUS_ACTIVE = 'active' + STATUS_PLANNED = 'planned' + STATUS_STAGED = 'staged' + STATUS_FAILED = 'failed' + STATUS_DECOMMISSIONING = 'decommissioning' + + CHOICES = [ + (STATUS_OFFLINE, _('Offline'), 'gray'), + (STATUS_ACTIVE, _('Active'), 'green'), + (STATUS_PLANNED, _('Planned'), 'cyan'), + (STATUS_STAGED, _('Staged'), 'blue'), + (STATUS_FAILED, _('Failed'), 'red'), + (STATUS_DECOMMISSIONING, _('Decommissioning'), 'yellow'), + ] diff --git a/netbox/dcim/constants.py b/netbox/dcim/constants.py index 303fc234413..ba3e6464b2c 100644 --- a/netbox/dcim/constants.py +++ b/netbox/dcim/constants.py @@ -49,7 +49,9 @@ WIRELESS_IFACE_TYPES = [ InterfaceTypeChoices.TYPE_80211AD, InterfaceTypeChoices.TYPE_80211AX, InterfaceTypeChoices.TYPE_80211AY, + InterfaceTypeChoices.TYPE_80211BE, InterfaceTypeChoices.TYPE_802151, + InterfaceTypeChoices.TYPE_802154, InterfaceTypeChoices.TYPE_OTHER_WIRELESS, ] diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index a4d75654e0e..04ac3a3d201 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -1,5 +1,4 @@ import django_filters -from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext as _ from drf_spectacular.types import OpenApiTypes @@ -16,11 +15,12 @@ from netbox.filtersets import ( ) from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet from tenancy.models import * +from users.models import User from utilities.filters import ( ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, MultiValueWWNFilter, NumericArrayFilter, TreeNodeMultipleChoiceFilter, ) -from virtualization.models import Cluster +from virtualization.models import Cluster, ClusterGroup from vpn.models import L2VPN from wireless.choices import WirelessRoleChoices, WirelessChannelChoices from wireless.models import WirelessLAN, WirelessLink @@ -69,6 +69,7 @@ __all__ = ( 'RackFilterSet', 'RackReservationFilterSet', 'RackRoleFilterSet', + 'RackTypeFilterSet', 'RearPortFilterSet', 'RearPortTemplateFilterSet', 'RegionFilterSet', @@ -270,7 +271,7 @@ class LocationFilterSet(TenancyFilterSet, ContactModelFilterSet, OrganizationalM class Meta: model = Location - fields = ('id', 'name', 'slug', 'status', 'facility', 'description') + fields = ('id', 'name', 'slug', 'facility', 'description') def search(self, queryset, name, value): if not value.strip(): @@ -289,6 +290,41 @@ class RackRoleFilterSet(OrganizationalModelFilterSet): fields = ('id', 'name', 'slug', 'color', 'description') +class RackTypeFilterSet(NetBoxModelFilterSet): + manufacturer_id = django_filters.ModelMultipleChoiceFilter( + queryset=Manufacturer.objects.all(), + label=_('Manufacturer (ID)'), + ) + manufacturer = django_filters.ModelMultipleChoiceFilter( + field_name='manufacturer__slug', + queryset=Manufacturer.objects.all(), + to_field_name='slug', + label=_('Manufacturer (slug)'), + ) + form_factor = django_filters.MultipleChoiceFilter( + choices=RackFormFactorChoices + ) + width = django_filters.MultipleChoiceFilter( + choices=RackWidthChoices + ) + + class Meta: + model = RackType + fields = ( + 'id', 'model', 'slug', 'u_height', 'starting_unit', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', + 'mounting_depth', 'weight', 'max_weight', 'weight_unit', 'description', + ) + + def search(self, queryset, name, value): + if not value.strip(): + return queryset + return queryset.filter( + Q(model__icontains=value) | + Q(description__icontains=value) | + Q(comments__icontains=value) + ) + + class RackFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet): region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), @@ -339,12 +375,33 @@ class RackFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSe to_field_name='slug', label=_('Location (slug)'), ) + manufacturer_id = django_filters.ModelMultipleChoiceFilter( + field_name='rack_type__manufacturer', + queryset=Manufacturer.objects.all(), + label=_('Manufacturer (ID)'), + ) + manufacturer = django_filters.ModelMultipleChoiceFilter( + field_name='rack_type__manufacturer__slug', + queryset=Manufacturer.objects.all(), + to_field_name='slug', + label=_('Manufacturer (slug)'), + ) + rack_type = django_filters.ModelMultipleChoiceFilter( + field_name='rack_type__slug', + queryset=RackType.objects.all(), + to_field_name='slug', + label=_('Rack type (slug)'), + ) + rack_type_id = django_filters.ModelMultipleChoiceFilter( + queryset=RackType.objects.all(), + label=_('Rack type (ID)'), + ) status = django_filters.MultipleChoiceFilter( choices=RackStatusChoices, null_value=None ) - type = django_filters.MultipleChoiceFilter( - choices=RackTypeChoices + form_factor = django_filters.MultipleChoiceFilter( + choices=RackFormFactorChoices ) width = django_filters.MultipleChoiceFilter( choices=RackWidthChoices @@ -367,7 +424,8 @@ class RackFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSe model = Rack fields = ( 'id', 'name', 'facility_id', 'asset_tag', 'u_height', 'starting_unit', 'desc_units', 'outer_width', - 'outer_depth', 'outer_unit', 'mounting_depth', 'weight', 'max_weight', 'weight_unit', 'description', + 'outer_depth', 'outer_unit', 'mounting_depth', 'airflow', 'weight', 'max_weight', 'weight_unit', + 'description', ) def search(self, queryset, name, value): @@ -439,12 +497,12 @@ class RackReservationFilterSet(NetBoxModelFilterSet, TenancyFilterSet): label=_('Location (slug)'), ) user_id = django_filters.ModelMultipleChoiceFilter( - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), label=_('User (ID)'), ) user = django_filters.ModelMultipleChoiceFilter( field_name='user__username', - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), to_field_name='username', label=_('User (name)'), ) @@ -652,7 +710,7 @@ class ModuleTypeFilterSet(NetBoxModelFilterSet): class Meta: model = ModuleType - fields = ('id', 'model', 'part_number', 'weight', 'weight_unit', 'description') + fields = ('id', 'model', 'part_number', 'airflow', 'weight', 'weight_unit', 'description') def search(self, queryset, name, value): if not value.strip(): @@ -800,7 +858,7 @@ class RearPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCom fields = ('id', 'name', 'label', 'type', 'color', 'positions', 'description') -class ModuleBayTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet): +class ModuleBayTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class Meta: model = ModuleBayTemplate @@ -1012,6 +1070,17 @@ class DeviceFilterSet( queryset=Cluster.objects.all(), label=_('VM cluster (ID)'), ) + cluster_group = django_filters.ModelMultipleChoiceFilter( + field_name='cluster__group__slug', + queryset=ClusterGroup.objects.all(), + to_field_name='slug', + label=_('Cluster group (slug)'), + ) + cluster_group_id = django_filters.ModelMultipleChoiceFilter( + field_name='cluster__group', + queryset=ClusterGroup.objects.all(), + label=_('Cluster group (ID)'), + ) model = django_filters.ModelMultipleChoiceFilter( field_name='device_type__slug', queryset=DeviceType.objects.all(), @@ -1253,11 +1322,11 @@ class ModuleFilterSet(NetBoxModelFilterSet): to_field_name='model', label=_('Module type (model)'), ) - module_bay_id = django_filters.ModelMultipleChoiceFilter( - field_name='module_bay', + module_bay_id = TreeNodeMultipleChoiceFilter( queryset=ModuleBay.objects.all(), - to_field_name='id', - label=_('Module Bay (ID)') + field_name='module_bay', + lookup_expr='in', + label=_('Module bay (ID)'), ) device_id = django_filters.ModelMultipleChoiceFilter( queryset=Device.objects.all(), @@ -1372,12 +1441,12 @@ class DeviceComponentFilterSet(django_filters.FilterSet): to_field_name='model', label=_('Device type (model)'), ) - role_id = django_filters.ModelMultipleChoiceFilter( + device_role_id = django_filters.ModelMultipleChoiceFilter( field_name='device__role', queryset=DeviceRole.objects.all(), label=_('Device role (ID)'), ) - role = django_filters.ModelMultipleChoiceFilter( + device_role = django_filters.ModelMultipleChoiceFilter( field_name='device__role__slug', queryset=DeviceRole.objects.all(), to_field_name='slug', @@ -1394,6 +1463,10 @@ class DeviceComponentFilterSet(django_filters.FilterSet): to_field_name='name', label=_('Virtual Chassis'), ) + device_status = django_filters.MultipleChoiceFilter( + choices=DeviceStatusChoices, + field_name='device__status', + ) def search(self, queryset, name, value): if not value.strip(): @@ -1521,7 +1594,7 @@ class PowerOutletFilterSet( class Meta: model = PowerOutlet fields = ( - 'id', 'name', 'label', 'feed_leg', 'description', 'mark_connected', 'cable_end', + 'id', 'name', 'label', 'feed_leg', 'description', 'color', 'mark_connected', 'cable_end', ) @@ -1724,7 +1797,11 @@ class RearPortFilterSet( ) -class ModuleBayFilterSet(DeviceComponentFilterSet, NetBoxModelFilterSet): +class ModuleBayFilterSet(ModularDeviceComponentFilterSet, NetBoxModelFilterSet): + parent_id = django_filters.ModelMultipleChoiceFilter( + queryset=ModuleBay.objects.all(), + label=_('Parent module bay (ID)'), + ) installed_module_id = django_filters.ModelMultipleChoiceFilter( field_name='installed_module', queryset=ModuleBay.objects.all(), @@ -1783,10 +1860,14 @@ class InventoryItemFilterSet(DeviceComponentFilterSet, NetBoxModelFilterSet): serial = MultiValueCharFilter( lookup_expr='iexact' ) + status = django_filters.MultipleChoiceFilter( + choices=InventoryItemStatusChoices, + null_value=None + ) class Meta: model = InventoryItem - fields = ('id', 'name', 'label', 'part_id', 'asset_tag', 'description', 'discovered') + fields = ('id', 'name', 'label', 'part_id', 'asset_tag', 'status', 'description', 'discovered') def search(self, queryset, name, value): if not value.strip(): diff --git a/netbox/dcim/forms/bulk_create.py b/netbox/dcim/forms/bulk_create.py index 2939b986e82..0ea3aee6344 100644 --- a/netbox/dcim/forms/bulk_create.py +++ b/netbox/dcim/forms/bulk_create.py @@ -69,7 +69,7 @@ class PowerPortBulkCreateForm( class PowerOutletBulkCreateForm( - form_from_model(PowerOutlet, ['type', 'feed_leg', 'mark_connected']), + form_from_model(PowerOutlet, ['type', 'color', 'feed_leg', 'mark_connected']), DeviceBulkAddComponentForm ): model = PowerOutlet diff --git a/netbox/dcim/forms/bulk_edit.py b/netbox/dcim/forms/bulk_edit.py index 25b049e6d52..ac20173f23e 100644 --- a/netbox/dcim/forms/bulk_edit.py +++ b/netbox/dcim/forms/bulk_edit.py @@ -1,6 +1,5 @@ from django import forms from django.conf import settings -from django.contrib.auth import get_user_model from django.utils.translation import gettext_lazy as _ from timezone_field import TimeZoneFormField @@ -9,11 +8,13 @@ from dcim.constants import * from dcim.models import * from extras.models import ConfigTemplate from ipam.models import ASN, VLAN, VLANGroup, VRF +from netbox.choices import * from netbox.forms import NetBoxModelBulkEditForm from tenancy.models import Tenant +from users.models import User from utilities.forms import BulkEditForm, add_blank_choice, form_from_model from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField -from utilities.forms.rendering import FieldSet +from utilities.forms.rendering import FieldSet, InlineFields from utilities.forms.widgets import BulkEditNullBooleanSelect, NumberWithOptions from wireless.models import WirelessLAN, WirelessLANGroup from wireless.choices import WirelessRoleChoices @@ -52,6 +53,7 @@ __all__ = ( 'RackBulkEditForm', 'RackReservationBulkEditForm', 'RackRoleBulkEditForm', + 'RackTypeBulkEditForm', 'RearPortBulkEditForm', 'RearPortTemplateBulkEditForm', 'RegionBulkEditForm', @@ -218,6 +220,95 @@ class RackRoleBulkEditForm(NetBoxModelBulkEditForm): nullable_fields = ('color', 'description') +class RackTypeBulkEditForm(NetBoxModelBulkEditForm): + manufacturer = DynamicModelChoiceField( + label=_('Manufacturer'), + queryset=Manufacturer.objects.all(), + required=False + ) + form_factor = forms.ChoiceField( + label=_('Form factor'), + choices=add_blank_choice(RackFormFactorChoices), + required=False + ) + width = forms.ChoiceField( + label=_('Width'), + choices=add_blank_choice(RackWidthChoices), + required=False + ) + u_height = forms.IntegerField( + required=False, + label=_('Height (U)') + ) + starting_unit = forms.IntegerField( + required=False, + min_value=1 + ) + desc_units = forms.NullBooleanField( + required=False, + widget=BulkEditNullBooleanSelect, + label=_('Descending units') + ) + outer_width = forms.IntegerField( + label=_('Outer width'), + required=False, + min_value=1 + ) + outer_depth = forms.IntegerField( + label=_('Outer depth'), + required=False, + min_value=1 + ) + outer_unit = forms.ChoiceField( + label=_('Outer unit'), + choices=add_blank_choice(RackDimensionUnitChoices), + required=False + ) + mounting_depth = forms.IntegerField( + label=_('Mounting depth'), + required=False, + min_value=1 + ) + weight = forms.DecimalField( + label=_('Weight'), + min_value=0, + required=False + ) + max_weight = forms.IntegerField( + label=_('Max weight'), + min_value=0, + required=False + ) + weight_unit = forms.ChoiceField( + label=_('Weight unit'), + choices=add_blank_choice(WeightUnitChoices), + required=False, + initial='' + ) + description = forms.CharField( + label=_('Description'), + max_length=200, + required=False + ) + comments = CommentField() + + model = RackType + fieldsets = ( + FieldSet('manufacturer', 'description', 'form_factor', 'width', 'u_height', name=_('Rack Type')), + FieldSet( + InlineFields('outer_width', 'outer_depth', 'outer_unit', label=_('Outer Dimensions')), + InlineFields('weight', 'max_weight', 'weight_unit', label=_('Weight')), + 'mounting_depth', + name=_('Dimensions') + ), + FieldSet('starting_unit', 'desc_units', name=_('Numbering')), + ) + nullable_fields = ( + 'outer_width', 'outer_depth', 'outer_unit', 'weight', + 'max_weight', 'weight_unit', 'description', 'comments', + ) + + class RackBulkEditForm(NetBoxModelBulkEditForm): region = DynamicModelChoiceField( label=_('Region'), @@ -278,9 +369,9 @@ class RackBulkEditForm(NetBoxModelBulkEditForm): max_length=50, required=False ) - type = forms.ChoiceField( - label=_('Type'), - choices=add_blank_choice(RackTypeChoices), + form_factor = forms.ChoiceField( + label=_('Form factor'), + choices=add_blank_choice(RackFormFactorChoices), required=False ) width = forms.ChoiceField( @@ -317,6 +408,11 @@ class RackBulkEditForm(NetBoxModelBulkEditForm): required=False, min_value=1 ) + airflow = forms.ChoiceField( + label=_('Airflow'), + choices=add_blank_choice(RackAirflowChoices), + required=False + ) weight = forms.DecimalField( label=_('Weight'), min_value=0, @@ -345,8 +441,8 @@ class RackBulkEditForm(NetBoxModelBulkEditForm): FieldSet('status', 'role', 'tenant', 'serial', 'asset_tag', 'description', name=_('Rack')), FieldSet('region', 'site_group', 'site', 'location', name=_('Location')), FieldSet( - 'type', 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', - name=_('Hardware') + 'form_factor', 'width', 'u_height', 'desc_units', 'airflow', 'outer_width', 'outer_depth', 'outer_unit', + 'mounting_depth', name=_('Hardware') ), FieldSet('weight', 'max_weight', 'weight_unit', name=_('Weight')), ) @@ -359,9 +455,7 @@ class RackBulkEditForm(NetBoxModelBulkEditForm): class RackReservationBulkEditForm(NetBoxModelBulkEditForm): user = forms.ModelChoiceField( label=_('User'), - queryset=get_user_model().objects.order_by( - 'username' - ), + queryset=User.objects.order_by('username'), required=False ) tenant = DynamicModelChoiceField( @@ -471,6 +565,11 @@ class ModuleTypeBulkEditForm(NetBoxModelBulkEditForm): label=_('Part number'), required=False ) + airflow = forms.ChoiceField( + label=_('Airflow'), + choices=add_blank_choice(ModuleAirflowChoices), + required=False + ) weight = forms.DecimalField( label=_('Weight'), min_value=0, @@ -492,7 +591,11 @@ class ModuleTypeBulkEditForm(NetBoxModelBulkEditForm): model = ModuleType fieldsets = ( FieldSet('manufacturer', 'part_number', 'description', name=_('Module Type')), - FieldSet('weight', 'weight_unit', name=_('Weight')), + FieldSet( + 'airflow', + InlineFields('weight', 'max_weight', 'weight_unit', label=_('Weight')), + name=_('Chassis') + ), ) nullable_fields = ('part_number', 'weight', 'weight_unit', 'description', 'comments') @@ -1188,12 +1291,17 @@ class ComponentBulkEditForm(NetBoxModelBulkEditForm): required=False ) - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + def __init__(self, *args, initial=None, **kwargs): + try: + self.device_id = int(initial.get('device')) + except (TypeError, ValueError): + self.device_id = None + + super().__init__(*args, initial=initial, **kwargs) # Limit module queryset to Modules which belong to the parent Device - if 'device' in self.initial: - device = Device.objects.filter(pk=self.initial['device']).first() + if self.device_id: + device = Device.objects.filter(pk=self.device_id).first() self.fields['module'].queryset = Module.objects.filter(device=device) else: self.fields['module'].choices = () @@ -1201,8 +1309,8 @@ class ComponentBulkEditForm(NetBoxModelBulkEditForm): class ConsolePortBulkEditForm( - form_from_model(ConsolePort, ['label', 'type', 'speed', 'mark_connected', 'description']), - ComponentBulkEditForm + ComponentBulkEditForm, + form_from_model(ConsolePort, ['label', 'type', 'speed', 'mark_connected', 'description']) ): mark_connected = forms.NullBooleanField( label=_('Mark connected'), @@ -1218,8 +1326,8 @@ class ConsolePortBulkEditForm( class ConsoleServerPortBulkEditForm( - form_from_model(ConsoleServerPort, ['label', 'type', 'speed', 'mark_connected', 'description']), - ComponentBulkEditForm + ComponentBulkEditForm, + form_from_model(ConsoleServerPort, ['label', 'type', 'speed', 'mark_connected', 'description']) ): mark_connected = forms.NullBooleanField( label=_('Mark connected'), @@ -1235,8 +1343,8 @@ class ConsoleServerPortBulkEditForm( class PowerPortBulkEditForm( - form_from_model(PowerPort, ['label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected', 'description']), - ComponentBulkEditForm + ComponentBulkEditForm, + form_from_model(PowerPort, ['label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected', 'description']) ): mark_connected = forms.NullBooleanField( label=_('Mark connected'), @@ -1253,8 +1361,8 @@ class PowerPortBulkEditForm( class PowerOutletBulkEditForm( - form_from_model(PowerOutlet, ['label', 'type', 'feed_leg', 'power_port', 'mark_connected', 'description']), - ComponentBulkEditForm + ComponentBulkEditForm, + form_from_model(PowerOutlet, ['label', 'type', 'color', 'feed_leg', 'power_port', 'mark_connected', 'description']) ): mark_connected = forms.NullBooleanField( label=_('Mark connected'), @@ -1264,7 +1372,7 @@ class PowerOutletBulkEditForm( model = PowerOutlet fieldsets = ( - FieldSet('module', 'type', 'label', 'description', 'mark_connected'), + FieldSet('module', 'type', 'label', 'description', 'mark_connected', 'color'), FieldSet('feed_leg', 'power_port', name=_('Power')), ) nullable_fields = ('module', 'label', 'type', 'feed_leg', 'power_port', 'description') @@ -1273,8 +1381,8 @@ class PowerOutletBulkEditForm( super().__init__(*args, **kwargs) # Limit power_port queryset to PowerPorts which belong to the parent Device - if 'device' in self.initial: - device = Device.objects.filter(pk=self.initial['device']).first() + if self.device_id: + device = Device.objects.filter(pk=self.device_id).first() self.fields['power_port'].queryset = PowerPort.objects.filter(device=device) else: self.fields['power_port'].choices = () @@ -1282,12 +1390,12 @@ class PowerOutletBulkEditForm( class InterfaceBulkEditForm( + ComponentBulkEditForm, form_from_model(Interface, [ 'label', 'type', 'parent', 'bridge', 'lag', 'speed', 'duplex', 'mac_address', 'wwn', 'mtu', 'mgmt_only', 'mark_connected', 'description', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'wireless_lans' - ]), - ComponentBulkEditForm + ]) ): enabled = forms.NullBooleanField( label=_('Enabled'), @@ -1416,8 +1524,8 @@ class InterfaceBulkEditForm( def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if 'device' in self.initial: - device = Device.objects.filter(pk=self.initial['device']).first() + if self.device_id: + device = Device.objects.filter(pk=self.device_id).first() # Restrict parent/bridge/LAG interface assignment by device self.fields['parent'].widget.add_query_param('virtual_chassis_member_id', device.pk) @@ -1480,8 +1588,8 @@ class InterfaceBulkEditForm( class FrontPortBulkEditForm( - form_from_model(FrontPort, ['label', 'type', 'color', 'mark_connected', 'description']), - ComponentBulkEditForm + ComponentBulkEditForm, + form_from_model(FrontPort, ['label', 'type', 'color', 'mark_connected', 'description']) ): mark_connected = forms.NullBooleanField( label=_('Mark connected'), @@ -1497,8 +1605,8 @@ class FrontPortBulkEditForm( class RearPortBulkEditForm( - form_from_model(RearPort, ['label', 'type', 'color', 'mark_connected', 'description']), - ComponentBulkEditForm + ComponentBulkEditForm, + form_from_model(RearPort, ['label', 'type', 'color', 'mark_connected', 'description']) ): mark_connected = forms.NullBooleanField( label=_('Mark connected'), @@ -1554,10 +1662,16 @@ class InventoryItemBulkEditForm( queryset=Manufacturer.objects.all(), required=False ) + status = forms.ChoiceField( + label=_('Status'), + choices=add_blank_choice(InventoryItemStatusChoices), + required=False, + initial='' + ) model = InventoryItem fieldsets = ( - FieldSet('device', 'label', 'role', 'manufacturer', 'part_id', 'description'), + FieldSet('device', 'label', 'role', 'manufacturer', 'part_id', 'status', 'description'), ) nullable_fields = ('label', 'role', 'manufacturer', 'part_id', 'description') diff --git a/netbox/dcim/forms/bulk_import.py b/netbox/dcim/forms/bulk_import.py index 5a64cad02fb..e34db001697 100644 --- a/netbox/dcim/forms/bulk_import.py +++ b/netbox/dcim/forms/bulk_import.py @@ -9,7 +9,8 @@ from dcim.choices import * from dcim.constants import * from dcim.models import * from extras.models import ConfigTemplate -from ipam.models import VRF +from ipam.models import VRF, IPAddress +from netbox.choices import * from netbox.forms import NetBoxModelImportForm from tenancy.models import Tenant from utilities.forms.fields import ( @@ -45,6 +46,7 @@ __all__ = ( 'RackImportForm', 'RackReservationImportForm', 'RackRoleImportForm', + 'RackTypeImportForm', 'RearPortImportForm', 'RegionImportForm', 'SiteImportForm', @@ -174,9 +176,54 @@ class RackRoleImportForm(NetBoxModelImportForm): class Meta: model = RackRole fields = ('name', 'slug', 'color', 'description', 'tags') - help_texts = { - 'color': mark_safe(_('RGB color in hexadecimal. Example:') + ' 00ff00'), - } + + +class RackTypeImportForm(NetBoxModelImportForm): + manufacturer = forms.ModelChoiceField( + label=_('Manufacturer'), + queryset=Manufacturer.objects.all(), + to_field_name='name', + help_text=_('The manufacturer of this rack type') + ) + form_factor = CSVChoiceField( + label=_('Type'), + choices=RackFormFactorChoices, + required=False, + help_text=_('Form factor') + ) + starting_unit = forms.IntegerField( + required=False, + min_value=1, + help_text=_('The lowest-numbered position in the rack') + ) + width = forms.ChoiceField( + label=_('Width'), + choices=RackWidthChoices, + help_text=_('Rail-to-rail width (in inches)') + ) + outer_unit = CSVChoiceField( + label=_('Outer unit'), + choices=RackDimensionUnitChoices, + required=False, + help_text=_('Unit for outer dimensions') + ) + weight_unit = CSVChoiceField( + label=_('Weight unit'), + choices=WeightUnitChoices, + required=False, + help_text=_('Unit for rack weights') + ) + + class Meta: + model = RackType + fields = ( + 'manufacturer', 'model', 'slug', 'form_factor', 'width', 'u_height', 'starting_unit', 'desc_units', + 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', 'weight', 'max_weight', + 'weight_unit', 'description', 'comments', 'tags', + ) + + def __init__(self, data=None, *args, **kwargs): + super().__init__(data, *args, **kwargs) class RackImportForm(NetBoxModelImportForm): @@ -210,11 +257,11 @@ class RackImportForm(NetBoxModelImportForm): to_field_name='name', help_text=_('Name of assigned role') ) - type = CSVChoiceField( + form_factor = CSVChoiceField( label=_('Type'), - choices=RackTypeChoices, + choices=RackFormFactorChoices, required=False, - help_text=_('Rack type') + help_text=_('Form factor') ) width = forms.ChoiceField( label=_('Width'), @@ -227,6 +274,12 @@ class RackImportForm(NetBoxModelImportForm): required=False, help_text=_('Unit for outer dimensions') ) + airflow = CSVChoiceField( + label=_('Airflow'), + choices=RackAirflowChoices, + required=False, + help_text=_('Airflow direction') + ) weight_unit = CSVChoiceField( label=_('Weight unit'), choices=WeightUnitChoices, @@ -237,9 +290,9 @@ class RackImportForm(NetBoxModelImportForm): class Meta: model = Rack fields = ( - 'site', 'location', 'name', 'facility_id', 'tenant', 'status', 'role', 'type', 'serial', 'asset_tag', - 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', 'weight', - 'max_weight', 'weight_unit', 'description', 'comments', 'tags', + 'site', 'location', 'name', 'facility_id', 'tenant', 'status', 'role', 'form_factor', 'serial', 'asset_tag', + 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', 'airflow', + 'weight', 'max_weight', 'weight_unit', 'description', 'comments', 'tags', ) def __init__(self, data=None, *args, **kwargs): @@ -315,13 +368,13 @@ class ManufacturerImportForm(NetBoxModelImportForm): class DeviceTypeImportForm(NetBoxModelImportForm): - manufacturer = forms.ModelChoiceField( + manufacturer = CSVModelChoiceField( label=_('Manufacturer'), queryset=Manufacturer.objects.all(), to_field_name='name', help_text=_('The manufacturer which produces this device type') ) - default_platform = forms.ModelChoiceField( + default_platform = CSVModelChoiceField( label=_('Default platform'), queryset=Platform.objects.all(), to_field_name='name', @@ -354,6 +407,12 @@ class ModuleTypeImportForm(NetBoxModelImportForm): queryset=Manufacturer.objects.all(), to_field_name='name' ) + airflow = CSVChoiceField( + label=_('Airflow'), + choices=ModuleAirflowChoices, + required=False, + help_text=_('Airflow direction') + ) weight = forms.DecimalField( label=_('Weight'), required=False, @@ -368,7 +427,7 @@ class ModuleTypeImportForm(NetBoxModelImportForm): class Meta: model = ModuleType - fields = ['manufacturer', 'model', 'part_number', 'description', 'weight', 'weight_unit', 'comments', 'tags'] + fields = ['manufacturer', 'model', 'part_number', 'description', 'airflow', 'weight', 'weight_unit', 'comments', 'tags'] class DeviceRoleImportForm(NetBoxModelImportForm): @@ -384,9 +443,6 @@ class DeviceRoleImportForm(NetBoxModelImportForm): class Meta: model = DeviceRole fields = ('name', 'slug', 'color', 'vm_role', 'config_template', 'description', 'tags') - help_texts = { - 'color': mark_safe(_('RGB color in hexadecimal. Example:') + ' 00ff00'), - } class PlatformImportForm(NetBoxModelImportForm): @@ -743,7 +799,7 @@ class PowerOutletImportForm(NetBoxModelImportForm): class Meta: model = PowerOutlet - fields = ('device', 'name', 'label', 'type', 'mark_connected', 'power_port', 'feed_leg', 'description', 'tags') + fields = ('device', 'name', 'label', 'type', 'color', 'mark_connected', 'power_port', 'feed_leg', 'description', 'tags') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -1048,11 +1104,16 @@ class InventoryItemImportForm(NetBoxModelImportForm): required=False, help_text=_('Component Name') ) + status = CSVChoiceField( + label=_('Status'), + choices=InventoryItemStatusChoices, + help_text=_('Operational status') + ) class Meta: model = InventoryItem fields = ( - 'device', 'name', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered', + 'device', 'name', 'label', 'status', 'role', 'manufacturer', 'parent', 'part_id', 'serial', 'asset_tag', 'discovered', 'description', 'tags', 'component_type', 'component_name', ) @@ -1104,9 +1165,6 @@ class InventoryItemRoleImportForm(NetBoxModelImportForm): class Meta: model = InventoryItemRole fields = ('name', 'slug', 'color', 'description') - help_texts = { - 'color': mark_safe(_('RGB color in hexadecimal. Example:') + ' 00ff00'), - } # @@ -1183,9 +1241,6 @@ class CableImportForm(NetBoxModelImportForm): 'side_a_device', 'side_a_type', 'side_a_name', 'side_b_device', 'side_b_type', 'side_b_name', 'type', 'status', 'tenant', 'label', 'color', 'length', 'length_unit', 'description', 'comments', 'tags', ] - help_texts = { - 'color': mark_safe(_('RGB color in hexadecimal. Example:') + ' 00ff00'), - } def _clean_side(self, side): """ @@ -1386,9 +1441,33 @@ class VirtualDeviceContextImportForm(NetBoxModelImportForm): label=_('Status'), choices=VirtualDeviceContextStatusChoices, ) + primary_ip4 = CSVModelChoiceField( + label=_('Primary IPv4'), + queryset=IPAddress.objects.all(), + required=False, + to_field_name='address', + help_text=_('IPv4 address with mask, e.g. 1.2.3.4/24') + ) + primary_ip6 = CSVModelChoiceField( + label=_('Primary IPv6'), + queryset=IPAddress.objects.all(), + required=False, + to_field_name='address', + help_text=_('IPv6 address with prefix length, e.g. 2001:db8::1/64') + ) class Meta: fields = [ - 'name', 'device', 'status', 'tenant', 'identifier', 'comments', + 'name', 'device', 'status', 'tenant', 'identifier', 'comments', 'primary_ip4', 'primary_ip6', ] model = VirtualDeviceContext + + def __init__(self, data=None, *args, **kwargs): + super().__init__(data, *args, **kwargs) + + if data: + + # Limit primary_ip4/ip6 querysets by assigned device + params = {f"interface__device__{self.fields['device'].to_field_name}": data.get('device')} + self.fields['primary_ip4'].queryset = self.fields['primary_ip4'].queryset.filter(**params) + self.fields['primary_ip6'].queryset = self.fields['primary_ip6'].queryset.filter(**params) diff --git a/netbox/dcim/forms/common.py b/netbox/dcim/forms/common.py index 3be4d08e8ec..4341ec04110 100644 --- a/netbox/dcim/forms/common.py +++ b/netbox/dcim/forms/common.py @@ -70,6 +70,18 @@ class InterfaceCommonForm(forms.Form): class ModuleCommonForm(forms.Form): + def _get_module_bay_tree(self, module_bay): + module_bays = [] + while module_bay: + module_bays.append(module_bay) + if module_bay.module: + module_bay = module_bay.module.module_bay + else: + module_bay = None + + module_bays.reverse() + return module_bays + def clean(self): super().clean() @@ -88,6 +100,8 @@ class ModuleCommonForm(forms.Form): self.instance._disable_replication = True return + module_bays = self._get_module_bay_tree(module_bay) + for templates, component_attribute in [ ("consoleporttemplates", "consoleports"), ("consoleserverporttemplates", "consoleserverports"), @@ -104,13 +118,24 @@ class ModuleCommonForm(forms.Form): # Get the templates for the module type. for template in getattr(module_type, templates).all(): + resolved_name = template.name # Installing modules with placeholders require that the bay has a position value - if MODULE_TOKEN in template.name and not module_bay.position: - raise forms.ValidationError( - _("Cannot install module with placeholder values in a module bay with no position defined.") - ) + if MODULE_TOKEN in template.name: + if not module_bay.position: + raise forms.ValidationError( + _("Cannot install module with placeholder values in a module bay with no position defined.") + ) + + if len(module_bays) != template.name.count(MODULE_TOKEN): + raise forms.ValidationError( + _("Cannot install module with placeholder values in a module bay tree {level} in tree but {tokens} placeholders given.").format( + level=len(module_bays), tokens=template.name.count(MODULE_TOKEN) + ) + ) + + for module_bay in module_bays: + resolved_name = resolved_name.replace(MODULE_TOKEN, module_bay.position, 1) - resolved_name = template.name.replace(MODULE_TOKEN, module_bay.position) existing_item = installed_components.get(resolved_name) # It is not possible to adopt components already belonging to a module diff --git a/netbox/dcim/forms/connections.py b/netbox/dcim/forms/connections.py index 44bea047ac9..324f8ecfdad 100644 --- a/netbox/dcim/forms/connections.py +++ b/netbox/dcim/forms/connections.py @@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _ from circuits.models import Circuit, CircuitTermination from dcim.models import * -from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField +from utilities.forms.fields import DynamicModelMultipleChoiceField from .model_forms import CableForm @@ -19,7 +19,7 @@ def get_cable_form(a_type, b_type): # Device component if hasattr(term_cls, 'device'): - attrs[f'termination_{cable_end}_device'] = DynamicModelChoiceField( + attrs[f'termination_{cable_end}_device'] = DynamicModelMultipleChoiceField( queryset=Device.objects.all(), label=_('Device'), required=False, @@ -33,6 +33,7 @@ def get_cable_form(a_type, b_type): label=term_cls._meta.verbose_name.title(), context={ 'disabled': '_occupied', + 'parent': 'device', }, query_params={ 'device_id': f'$termination_{cable_end}_device', @@ -43,7 +44,7 @@ def get_cable_form(a_type, b_type): # PowerFeed elif term_cls == PowerFeed: - attrs[f'termination_{cable_end}_powerpanel'] = DynamicModelChoiceField( + attrs[f'termination_{cable_end}_powerpanel'] = DynamicModelMultipleChoiceField( queryset=PowerPanel.objects.all(), label=_('Power Panel'), required=False, @@ -57,6 +58,7 @@ def get_cable_form(a_type, b_type): label=_('Power Feed'), context={ 'disabled': '_occupied', + 'parent': 'powerpanel', }, query_params={ 'power_panel_id': f'$termination_{cable_end}_powerpanel', @@ -66,7 +68,7 @@ def get_cable_form(a_type, b_type): # CircuitTermination elif term_cls == CircuitTermination: - attrs[f'termination_{cable_end}_circuit'] = DynamicModelChoiceField( + attrs[f'termination_{cable_end}_circuit'] = DynamicModelMultipleChoiceField( queryset=Circuit.objects.all(), label=_('Circuit'), selector=True, @@ -79,6 +81,7 @@ def get_cable_form(a_type, b_type): label=_('Side'), context={ 'disabled': '_occupied', + 'parent': 'circuit', }, query_params={ 'circuit_id': f'$termination_{cable_end}_circuit', diff --git a/netbox/dcim/forms/filtersets.py b/netbox/dcim/forms/filtersets.py index 0a28a4ec445..13478263ec9 100644 --- a/netbox/dcim/forms/filtersets.py +++ b/netbox/dcim/forms/filtersets.py @@ -1,5 +1,4 @@ from django import forms -from django.contrib.auth import get_user_model from django.utils.translation import gettext_lazy as _ from dcim.choices import * @@ -8,12 +7,15 @@ from dcim.models import * from extras.forms import LocalConfigContextFilterForm from extras.models import ConfigTemplate from ipam.models import ASN, VRF +from netbox.choices import * from netbox.forms import NetBoxModelFilterSetForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm +from users.models import User from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.rendering import FieldSet from utilities.forms.widgets import NumberWithOptions +from virtualization.models import Cluster, ClusterGroup from vpn.models import L2VPN from wireless.choices import * @@ -34,7 +36,6 @@ __all__ = ( 'LocationFilterForm', 'ManufacturerFilterForm', 'ModuleFilterForm', - 'ModuleFilterForm', 'ModuleBayFilterForm', 'ModuleTypeFilterForm', 'PlatformFilterForm', @@ -47,6 +48,7 @@ __all__ = ( 'RackElevationFilterForm', 'RackReservationFilterForm', 'RackRoleFilterForm', + 'RackTypeFilterForm', 'RearPortFilterForm', 'RegionFilterForm', 'SiteFilterForm', @@ -128,6 +130,11 @@ class DeviceComponentFilterForm(NetBoxModelFilterSetForm): }, label=_('Device') ) + device_status = forms.MultipleChoiceField( + choices=DeviceStatusChoices, + required=False, + label=_('Device Status'), + ) class RegionFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): @@ -194,7 +201,7 @@ class LocationFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelF model = Location fieldsets = ( FieldSet('q', 'filter_id', 'tag'), - FieldSet('region_id', 'site_group_id', 'site_id', 'parent_id', 'status', name=_('Attributes')), + FieldSet('region_id', 'site_group_id', 'site_id', 'parent_id', 'status', 'facility', name=_('Attributes')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) @@ -231,6 +238,10 @@ class LocationFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelF choices=LocationStatusChoices, required=False ) + facility = forms.CharField( + label=_('Facility'), + required=False + ) tag = TagFilterField(model) @@ -239,16 +250,82 @@ class RackRoleFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class RackFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilterSetForm): +class RackBaseFilterForm(NetBoxModelFilterSetForm): + form_factor = forms.MultipleChoiceField( + label=_('Form factor'), + choices=RackFormFactorChoices, + required=False + ) + width = forms.MultipleChoiceField( + label=_('Width'), + choices=RackWidthChoices, + required=False + ) + u_height = forms.IntegerField( + required=False, + min_value=1 + ) + starting_unit = forms.IntegerField( + required=False, + min_value=1 + ) + desc_units = forms.NullBooleanField( + required=False, + label=_('Descending units'), + widget=forms.Select( + choices=BOOLEAN_WITH_BLANK_CHOICES + ) + ) + airflow = forms.MultipleChoiceField( + label=_('Airflow'), + choices=add_blank_choice(RackAirflowChoices), + required=False + ) + weight = forms.DecimalField( + label=_('Weight'), + required=False, + min_value=1 + ) + max_weight = forms.IntegerField( + label=_('Max weight'), + required=False, + min_value=1 + ) + weight_unit = forms.ChoiceField( + label=_('Weight unit'), + choices=add_blank_choice(WeightUnitChoices), + required=False + ) + + +class RackTypeFilterForm(RackBaseFilterForm): + model = RackType + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('form_factor', 'width', 'u_height', name=_('Rack Type')), + FieldSet('starting_unit', 'desc_units', name=_('Numbering')), + FieldSet('weight', 'max_weight', 'weight_unit', name=_('Weight')), + ) + selector_fields = ('filter_id', 'q', 'manufacturer_id') + manufacturer_id = DynamicModelMultipleChoiceField( + queryset=Manufacturer.objects.all(), + required=False, + label=_('Manufacturer') + ) + tag = TagFilterField(model) + + +class RackFilterForm(TenancyFilterForm, ContactModelFilterForm, RackBaseFilterForm): model = Rack fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Location')), - FieldSet('status', 'role_id', name=_('Function')), - FieldSet('type', 'width', 'serial', 'asset_tag', name=_('Hardware')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), - FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), + FieldSet('status', 'role_id', 'manufacturer_id', 'rack_type_id', 'serial', 'asset_tag', name=_('Rack')), + FieldSet('form_factor', 'width', 'u_height', 'airflow', name=_('Hardware')), + FieldSet('starting_unit', 'desc_units', name=_('Numbering')), FieldSet('weight', 'max_weight', 'weight_unit', name=_('Weight')), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) selector_fields = ('filter_id', 'q', 'region_id', 'site_group_id', 'site_id', 'location_id') region_id = DynamicModelMultipleChoiceField( @@ -283,22 +360,25 @@ class RackFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilte choices=RackStatusChoices, required=False ) - type = forms.MultipleChoiceField( - label=_('Type'), - choices=RackTypeChoices, - required=False - ) - width = forms.MultipleChoiceField( - label=_('Width'), - choices=RackWidthChoices, - required=False - ) role_id = DynamicModelMultipleChoiceField( queryset=RackRole.objects.all(), required=False, null_option='None', label=_('Role') ) + manufacturer_id = DynamicModelMultipleChoiceField( + queryset=Manufacturer.objects.all(), + required=False, + label=_('Manufacturer') + ) + rack_type_id = DynamicModelMultipleChoiceField( + queryset=RackType.objects.all(), + required=False, + query_params={ + 'manufacturer_id': '$manufacturer_id' + }, + label=_('Rack type') + ) serial = forms.CharField( label=_('Serial'), required=False @@ -308,21 +388,6 @@ class RackFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilte required=False ) tag = TagFilterField(model) - weight = forms.DecimalField( - label=_('Weight'), - required=False, - min_value=1 - ) - max_weight = forms.IntegerField( - label=_('Max weight'), - required=False, - min_value=1 - ) - weight_unit = forms.ChoiceField( - label=_('Weight unit'), - choices=add_blank_choice(WeightUnitChoices), - required=False - ) class RackElevationFilterForm(RackFilterForm): @@ -392,7 +457,7 @@ class RackReservationFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): label=_('Rack') ) user_id = DynamicModelMultipleChoiceField( - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), required=False, label=_('User') ) @@ -540,7 +605,7 @@ class ModuleTypeFilterForm(NetBoxModelFilterSetForm): model = ModuleType fieldsets = ( FieldSet('q', 'filter_id', 'tag'), - FieldSet('manufacturer_id', 'part_number', name=_('Hardware')), + FieldSet('manufacturer_id', 'part_number', 'airflow', name=_('Hardware')), FieldSet( 'console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces', 'pass_through_ports', name=_('Components') @@ -600,6 +665,11 @@ class ModuleTypeFilterForm(NetBoxModelFilterSetForm): ) ) tag = TagFilterField(model) + airflow = forms.MultipleChoiceField( + label=_('Airflow'), + choices=add_blank_choice(ModuleAirflowChoices), + required=False + ) weight = forms.DecimalField( label=_('Weight'), required=False @@ -655,6 +725,7 @@ class DeviceFilterForm( 'console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces', 'pass_through_ports', name=_('Components') ), + FieldSet('cluster_group_id', 'cluster_id', name=_('Cluster')), FieldSet( 'has_primary_ip', 'has_oob_ip', 'virtual_chassis_member', 'config_template_id', 'local_context_data', 'has_virtual_device_context', @@ -821,6 +892,16 @@ class DeviceFilterForm( choices=BOOLEAN_WITH_BLANK_CHOICES ) ) + cluster_id = DynamicModelMultipleChoiceField( + queryset=Cluster.objects.all(), + required=False, + label=_('Cluster') + ) + cluster_group_id = DynamicModelMultipleChoiceField( + queryset=ClusterGroup.objects.all(), + required=False, + label=_('Cluster group') + ) tag = TagFilterField(model) @@ -1157,7 +1238,9 @@ class ConsolePortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): FieldSet('q', 'filter_id', 'tag'), FieldSet('name', 'label', 'type', 'speed', name=_('Attributes')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', name=_('Device') + ), FieldSet('cabled', 'connected', 'occupied', name=_('Connection')), ) type = forms.MultipleChoiceField( @@ -1179,7 +1262,10 @@ class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterF FieldSet('q', 'filter_id', 'tag'), FieldSet('name', 'label', 'type', 'speed', name=_('Attributes')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', + name=_('Device') + ), FieldSet('cabled', 'connected', 'occupied', name=_('Connection')), ) type = forms.MultipleChoiceField( @@ -1201,7 +1287,9 @@ class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): FieldSet('q', 'filter_id', 'tag'), FieldSet('name', 'label', 'type', name=_('Attributes')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', name=_('Device') + ), FieldSet('cabled', 'connected', 'occupied', name=_('Connection')), ) type = forms.MultipleChoiceField( @@ -1216,9 +1304,12 @@ class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): model = PowerOutlet fieldsets = ( FieldSet('q', 'filter_id', 'tag'), - FieldSet('name', 'label', 'type', name=_('Attributes')), + FieldSet('name', 'label', 'type', 'color', name=_('Attributes')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', + name=_('Device') + ), FieldSet('cabled', 'connected', 'occupied', name=_('Connection')), ) type = forms.MultipleChoiceField( @@ -1227,6 +1318,10 @@ class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): required=False ) tag = TagFilterField(model) + color = ColorField( + label=_('Color'), + required=False + ) class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): @@ -1238,7 +1333,10 @@ class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): FieldSet('poe_mode', 'poe_type', name=_('PoE')), FieldSet('rf_role', 'rf_channel', 'rf_channel_width', 'tx_power', name=_('Wireless')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', 'vdc_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', 'vdc_id', + name=_('Device') + ), FieldSet('cabled', 'connected', 'occupied', name=_('Connection')), ) selector_fields = ('filter_id', 'q', 'device_id') @@ -1346,7 +1444,9 @@ class FrontPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): FieldSet('q', 'filter_id', 'tag'), FieldSet('name', 'label', 'type', 'color', name=_('Attributes')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', name=_('Device') + ), FieldSet('cabled', 'occupied', name=_('Cable')), ) model = FrontPort @@ -1368,7 +1468,10 @@ class RearPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): FieldSet('q', 'filter_id', 'tag'), FieldSet('name', 'label', 'type', 'color', name=_('Attributes')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', + name=_('Device') + ), FieldSet('cabled', 'occupied', name=_('Cable')), ) type = forms.MultipleChoiceField( @@ -1389,7 +1492,10 @@ class ModuleBayFilterForm(DeviceComponentFilterForm): FieldSet('q', 'filter_id', 'tag'), FieldSet('name', 'label', 'position', name=_('Attributes')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', + name=_('Device') + ), ) tag = TagFilterField(model) position = forms.CharField( @@ -1404,7 +1510,10 @@ class DeviceBayFilterForm(DeviceComponentFilterForm): FieldSet('q', 'filter_id', 'tag'), FieldSet('name', 'label', name=_('Attributes')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', + name=_('Device') + ), ) tag = TagFilterField(model) @@ -1418,7 +1527,10 @@ class InventoryItemFilterForm(DeviceComponentFilterForm): name=_('Attributes') ), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')), - FieldSet('device_type_id', 'device_role_id', 'device_id', 'virtual_chassis_id', name=_('Device')), + FieldSet( + 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id', + name=_('Device') + ), ) role_id = DynamicModelMultipleChoiceField( queryset=InventoryItemRole.objects.all(), @@ -1445,6 +1557,11 @@ class InventoryItemFilterForm(DeviceComponentFilterForm): choices=BOOLEAN_WITH_BLANK_CHOICES ) ) + status = forms.MultipleChoiceField( + label=_('Status'), + choices=InventoryItemStatusChoices, + required=False + ) tag = TagFilterField(model) diff --git a/netbox/dcim/forms/model_forms.py b/netbox/dcim/forms/model_forms.py index d493687f959..095882d13f1 100644 --- a/netbox/dcim/forms/model_forms.py +++ b/netbox/dcim/forms/model_forms.py @@ -1,5 +1,4 @@ from django import forms -from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext_lazy as _ from timezone_field import TimeZoneFormField @@ -11,7 +10,8 @@ from extras.models import ConfigTemplate from ipam.models import ASN, IPAddress, VLAN, VLANGroup, VRF from netbox.forms import NetBoxModelForm from tenancy.forms import TenancyForm -from utilities.forms import add_blank_choice +from users.models import User +from utilities.forms import add_blank_choice, get_field_value from utilities.forms.fields import ( CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, JSONField, NumericArrayField, SlugField, ) @@ -57,6 +57,7 @@ __all__ = ( 'RackForm', 'RackReservationForm', 'RackRoleForm', + 'RackTypeForm', 'RearPortForm', 'RearPortTemplateForm', 'RegionForm', @@ -201,6 +202,37 @@ class RackRoleForm(NetBoxModelForm): ] +class RackTypeForm(NetBoxModelForm): + manufacturer = DynamicModelChoiceField( + label=_('Manufacturer'), + queryset=Manufacturer.objects.all() + ) + comments = CommentField() + slug = SlugField( + label=_('Slug'), + slug_source='model' + ) + + fieldsets = ( + FieldSet('manufacturer', 'model', 'slug', 'description', 'form_factor', 'tags', name=_('Rack Type')), + FieldSet( + 'width', 'u_height', + InlineFields('outer_width', 'outer_depth', 'outer_unit', label=_('Outer Dimensions')), + InlineFields('weight', 'max_weight', 'weight_unit', label=_('Weight')), + 'mounting_depth', name=_('Dimensions') + ), + FieldSet('starting_unit', 'desc_units', name=_('Numbering')), + ) + + class Meta: + model = RackType + fields = [ + 'manufacturer', 'model', 'slug', 'form_factor', 'width', 'u_height', 'starting_unit', 'desc_units', + 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', 'weight', 'max_weight', 'weight_unit', + 'description', 'comments', 'tags', + ] + + class RackForm(TenancyForm, NetBoxModelForm): site = DynamicModelChoiceField( label=_('Site'), @@ -220,28 +252,54 @@ class RackForm(TenancyForm, NetBoxModelForm): queryset=RackRole.objects.all(), required=False ) + rack_type = DynamicModelChoiceField( + label=_('Rack Type'), + queryset=RackType.objects.all(), + required=False, + help_text=_("Select a pre-defined rack type, or set physical characteristics below.") + ) comments = CommentField() fieldsets = ( - FieldSet('site', 'location', 'name', 'status', 'role', 'description', 'tags', name=_('Rack')), + FieldSet('site', 'location', 'name', 'status', 'role', 'rack_type', 'description', 'airflow', 'tags', name=_('Rack')), FieldSet('facility_id', 'serial', 'asset_tag', name=_('Inventory Control')), FieldSet('tenant_group', 'tenant', name=_('Tenancy')), - FieldSet( - 'type', 'width', 'starting_unit', 'u_height', - InlineFields('outer_width', 'outer_depth', 'outer_unit', label=_('Outer Dimensions')), - InlineFields('weight', 'max_weight', 'weight_unit', label=_('Weight')), - 'mounting_depth', 'desc_units', name=_('Dimensions') - ), ) class Meta: model = Rack fields = [ 'site', 'location', 'name', 'facility_id', 'tenant_group', 'tenant', 'status', 'role', 'serial', - 'asset_tag', 'type', 'width', 'u_height', 'starting_unit', 'desc_units', 'outer_width', 'outer_depth', - 'outer_unit', 'mounting_depth', 'weight', 'max_weight', 'weight_unit', 'description', 'comments', 'tags', + 'asset_tag', 'rack_type', 'form_factor', 'width', 'u_height', 'starting_unit', 'desc_units', 'outer_width', + 'outer_depth', 'outer_unit', 'mounting_depth', 'airflow', 'weight', 'max_weight', 'weight_unit', + 'description', 'comments', 'tags', ] + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # Mimic HTMXSelect() + self.fields['rack_type'].widget.attrs.update({ + 'hx-get': '.', + 'hx-include': '#form_fields', + 'hx-target': '#form_fields', + }) + + # Omit RackType-defined fields if rack_type is set + if get_field_value(self, 'rack_type'): + for field_name in Rack.RACKTYPE_FIELDS: + del self.fields[field_name] + else: + self.fieldsets = ( + *self.fieldsets, + FieldSet( + 'form_factor', 'width', 'starting_unit', 'u_height', + InlineFields('outer_width', 'outer_depth', 'outer_unit', label=_('Outer Dimensions')), + InlineFields('weight', 'max_weight', 'weight_unit', label=_('Weight')), + 'mounting_depth', 'desc_units', name=_('Dimensions') + ), + ) + class RackReservationForm(TenancyForm, NetBoxModelForm): rack = DynamicModelChoiceField( @@ -256,9 +314,7 @@ class RackReservationForm(TenancyForm, NetBoxModelForm): ) user = forms.ModelChoiceField( label=_('User'), - queryset=get_user_model().objects.order_by( - 'username' - ) + queryset=User.objects.order_by('username') ) comments = CommentField() @@ -343,13 +399,14 @@ class ModuleTypeForm(NetBoxModelForm): fieldsets = ( FieldSet('manufacturer', 'model', 'part_number', 'description', 'tags', name=_('Module Type')), - FieldSet('weight', 'weight_unit', name=_('Weight')) + FieldSet('airflow', 'weight', 'weight_unit', name=_('Chassis')) ) class Meta: model = ModuleType fields = [ - 'manufacturer', 'model', 'part_number', 'weight', 'weight_unit', 'description', 'comments', 'tags', + 'manufacturer', 'model', 'part_number', 'airflow', 'weight', 'weight_unit', 'description', + 'comments', 'tags', ] @@ -897,7 +954,7 @@ class PowerOutletTemplateForm(ModularComponentTemplateForm): queryset=PowerPortTemplate.objects.all(), required=False, query_params={ - 'devicetype_id': '$device_type', + 'device_type_id': '$device_type', } ) @@ -918,8 +975,8 @@ class InterfaceTemplateForm(ModularComponentTemplateForm): queryset=InterfaceTemplate.objects.all(), required=False, query_params={ - 'devicetype_id': '$device_type', - 'moduletype_id': '$module_type', + 'device_type_id': '$device_type', + 'module_type_id': '$module_type', } ) @@ -944,8 +1001,8 @@ class FrontPortTemplateForm(ModularComponentTemplateForm): queryset=RearPortTemplate.objects.all(), required=False, query_params={ - 'devicetype_id': '$device_type', - 'moduletype_id': '$module_type', + 'device_type_id': '$device_type', + 'module_type_id': '$module_type', } ) @@ -976,15 +1033,15 @@ class RearPortTemplateForm(ModularComponentTemplateForm): ] -class ModuleBayTemplateForm(ComponentTemplateForm): +class ModuleBayTemplateForm(ModularComponentTemplateForm): fieldsets = ( - FieldSet('device_type', 'name', 'label', 'position', 'description'), + FieldSet('device_type', 'module_type', 'name', 'label', 'position', 'description'), ) class Meta: model = ModuleBayTemplate fields = [ - 'device_type', 'name', 'label', 'position', 'description', + 'device_type', 'module_type', 'name', 'label', 'position', 'description', ] @@ -1006,7 +1063,7 @@ class InventoryItemTemplateForm(ComponentTemplateForm): queryset=InventoryItemTemplate.objects.all(), required=False, query_params={ - 'devicetype_id': '$device_type' + 'device_type_id': '$device_type' } ) role = DynamicModelChoiceField( @@ -1228,7 +1285,7 @@ class PowerOutletForm(ModularDeviceComponentForm): fieldsets = ( FieldSet( - 'device', 'module', 'name', 'label', 'type', 'power_port', 'feed_leg', 'mark_connected', 'description', + 'device', 'module', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'mark_connected', 'description', 'tags', ), ) @@ -1236,7 +1293,7 @@ class PowerOutletForm(ModularDeviceComponentForm): class Meta: model = PowerOutlet fields = [ - 'device', 'module', 'name', 'label', 'type', 'power_port', 'feed_leg', 'mark_connected', 'description', + 'device', 'module', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'mark_connected', 'description', 'tags', ] @@ -1294,7 +1351,8 @@ class InterfaceForm(InterfaceCommonForm, ModularDeviceComponentForm): vlan_group = DynamicModelChoiceField( queryset=VLANGroup.objects.all(), required=False, - label=_('VLAN group') + label=_('VLAN group'), + help_text=_("Filter VLANs available for assignment by group.") ) untagged_vlan = DynamicModelChoiceField( queryset=VLAN.objects.all(), @@ -1396,15 +1454,15 @@ class RearPortForm(ModularDeviceComponentForm): ] -class ModuleBayForm(DeviceComponentForm): +class ModuleBayForm(ModularDeviceComponentForm): fieldsets = ( - FieldSet('device', 'name', 'label', 'position', 'description', 'tags',), + FieldSet('device', 'module', 'name', 'label', 'position', 'description', 'tags',), ) class Meta: model = ModuleBay fields = [ - 'device', 'name', 'label', 'position', 'description', 'tags', + 'device', 'module', 'name', 'label', 'position', 'description', 'tags', ] @@ -1518,7 +1576,7 @@ class InventoryItemForm(DeviceComponentForm): ) fieldsets = ( - FieldSet('device', 'parent', 'name', 'label', 'role', 'description', 'tags', name=_('Inventory Item')), + FieldSet('device', 'parent', 'name', 'label', 'status', 'role', 'description', 'tags', name=_('Inventory Item')), FieldSet('manufacturer', 'part_id', 'serial', 'asset_tag', name=_('Hardware')), FieldSet( TabbedGroups( @@ -1538,7 +1596,7 @@ class InventoryItemForm(DeviceComponentForm): model = InventoryItem fields = [ 'device', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', - 'description', 'tags', + 'status', 'description', 'tags', ] def __init__(self, *args, **kwargs): diff --git a/netbox/dcim/forms/object_create.py b/netbox/dcim/forms/object_create.py index f811700b47c..d18c7ed1448 100644 --- a/netbox/dcim/forms/object_create.py +++ b/netbox/dcim/forms/object_create.py @@ -261,8 +261,8 @@ class FrontPortCreateForm(ComponentCreateForm, model_forms.FrontPortForm): # TODO: Clean up the application of HTMXSelect attributes attrs={ 'hx-get': '.', - 'hx-include': f'#form_fields', - 'hx-target': f'#form_fields', + 'hx-include': '#form_fields', + 'hx-target': '#form_fields', } ) ) diff --git a/netbox/dcim/graphql/filters.py b/netbox/dcim/graphql/filters.py index 2ae5e777177..8c256aecb43 100644 --- a/netbox/dcim/graphql/filters.py +++ b/netbox/dcim/graphql/filters.py @@ -38,6 +38,7 @@ __all__ = ( 'RackFilter', 'RackReservationFilter', 'RackRoleFilter', + 'RackTypeFilter', 'RearPortFilter', 'RearPortTemplateFilter', 'RegionFilter', @@ -234,6 +235,12 @@ class PowerPortTemplateFilter(BaseFilterMixin): pass +@strawberry_django.filter(models.RackType, lookups=True) +@autotype_decorator(filtersets.RackTypeFilterSet) +class RackTypeFilter(BaseFilterMixin): + pass + + @strawberry_django.filter(models.Rack, lookups=True) @autotype_decorator(filtersets.RackFilterSet) class RackFilter(BaseFilterMixin): diff --git a/netbox/dcim/graphql/mixins.py b/netbox/dcim/graphql/mixins.py index 589af50c816..2e5ab7ea798 100644 --- a/netbox/dcim/graphql/mixins.py +++ b/netbox/dcim/graphql/mixins.py @@ -1,7 +1,6 @@ from typing import Annotated, List, Union import strawberry -import strawberry_django __all__ = ( 'CabledObjectMixin', @@ -11,18 +10,18 @@ __all__ = ( @strawberry.type class CabledObjectMixin: - cable: Annotated["CableType", strawberry.lazy('dcim.graphql.types')] | None + cable: Annotated["CableType", strawberry.lazy('dcim.graphql.types')] | None # noqa: F821 link_peers: List[Annotated[Union[ - Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')], - Annotated["ConsolePortType", strawberry.lazy('dcim.graphql.types')], - Annotated["ConsoleServerPortType", strawberry.lazy('dcim.graphql.types')], - Annotated["FrontPortType", strawberry.lazy('dcim.graphql.types')], - Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')], - Annotated["PowerFeedType", strawberry.lazy('dcim.graphql.types')], - Annotated["PowerOutletType", strawberry.lazy('dcim.graphql.types')], - Annotated["PowerPortType", strawberry.lazy('dcim.graphql.types')], - Annotated["RearPortType", strawberry.lazy('dcim.graphql.types')], + Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')], # noqa: F821 + Annotated["ConsolePortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["ConsoleServerPortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["FrontPortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["PowerFeedType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["PowerOutletType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["PowerPortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["RearPortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 ], strawberry.union("LinkPeerType")]] @@ -30,14 +29,14 @@ class CabledObjectMixin: class PathEndpointMixin: connected_endpoints: List[Annotated[Union[ - Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')], - Annotated["ConsolePortType", strawberry.lazy('dcim.graphql.types')], - Annotated["ConsoleServerPortType", strawberry.lazy('dcim.graphql.types')], - Annotated["FrontPortType", strawberry.lazy('dcim.graphql.types')], - Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')], - Annotated["PowerFeedType", strawberry.lazy('dcim.graphql.types')], - Annotated["PowerOutletType", strawberry.lazy('dcim.graphql.types')], - Annotated["PowerPortType", strawberry.lazy('dcim.graphql.types')], - Annotated["ProviderNetworkType", strawberry.lazy('circuits.graphql.types')], - Annotated["RearPortType", strawberry.lazy('dcim.graphql.types')], + Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')], # noqa: F821 + Annotated["ConsolePortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["ConsoleServerPortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["FrontPortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["PowerFeedType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["PowerOutletType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["PowerPortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 + Annotated["ProviderNetworkType", strawberry.lazy('circuits.graphql.types')], # noqa: F821 + Annotated["RearPortType", strawberry.lazy('dcim.graphql.types')], # noqa: F821 ], strawberry.union("ConnectedEndpointType")]] diff --git a/netbox/dcim/graphql/schema.py b/netbox/dcim/graphql/schema.py index c3962a87af6..65818fb20de 100644 --- a/netbox/dcim/graphql/schema.py +++ b/netbox/dcim/graphql/schema.py @@ -3,208 +3,130 @@ from typing import List import strawberry import strawberry_django -from dcim import models from .types import * -@strawberry.type +@strawberry.type(name="Query") class DCIMQuery: - @strawberry.field - def cable(self, id: int) -> CableType: - return models.Cable.objects.get(pk=id) + cable: CableType = strawberry_django.field() cable_list: List[CableType] = strawberry_django.field() - @strawberry.field - def console_port(self, id: int) -> ConsolePortType: - return models.ConsolePort.objects.get(pk=id) + console_port: ConsolePortType = strawberry_django.field() console_port_list: List[ConsolePortType] = strawberry_django.field() - @strawberry.field - def console_port_template(self, id: int) -> ConsolePortTemplateType: - return models.ConsolePortTemplate.objects.get(pk=id) + console_port_template: ConsolePortTemplateType = strawberry_django.field() console_port_template_list: List[ConsolePortTemplateType] = strawberry_django.field() - @strawberry.field - def console_server_port(self, id: int) -> ConsoleServerPortType: - return models.ConsoleServerPort.objects.get(pk=id) + console_server_port: ConsoleServerPortType = strawberry_django.field() console_server_port_list: List[ConsoleServerPortType] = strawberry_django.field() - @strawberry.field - def console_server_port_template(self, id: int) -> ConsoleServerPortTemplateType: - return models.ConsoleServerPortTemplate.objects.get(pk=id) + console_server_port_template: ConsoleServerPortTemplateType = strawberry_django.field() console_server_port_template_list: List[ConsoleServerPortTemplateType] = strawberry_django.field() - @strawberry.field - def device(self, id: int) -> DeviceType: - return models.Device.objects.get(pk=id) + device: DeviceType = strawberry_django.field() device_list: List[DeviceType] = strawberry_django.field() - @strawberry.field - def device_bay(self, id: int) -> DeviceBayType: - return models.DeviceBay.objects.get(pk=id) + device_bay: DeviceBayType = strawberry_django.field() device_bay_list: List[DeviceBayType] = strawberry_django.field() - @strawberry.field - def device_bay_template(self, id: int) -> DeviceBayTemplateType: - return models.DeviceBayTemplate.objects.get(pk=id) + device_bay_template: DeviceBayTemplateType = strawberry_django.field() device_bay_template_list: List[DeviceBayTemplateType] = strawberry_django.field() - @strawberry.field - def device_role(self, id: int) -> DeviceRoleType: - return models.DeviceRole.objects.get(pk=id) + device_role: DeviceRoleType = strawberry_django.field() device_role_list: List[DeviceRoleType] = strawberry_django.field() - @strawberry.field - def device_type(self, id: int) -> DeviceTypeType: - return models.DeviceType.objects.get(pk=id) + device_type: DeviceTypeType = strawberry_django.field() device_type_list: List[DeviceTypeType] = strawberry_django.field() - @strawberry.field - def front_port(self, id: int) -> FrontPortType: - return models.FrontPort.objects.get(pk=id) + front_port: FrontPortType = strawberry_django.field() front_port_list: List[FrontPortType] = strawberry_django.field() - @strawberry.field - def front_port_template(self, id: int) -> FrontPortTemplateType: - return models.FrontPortTemplate.objects.get(pk=id) + front_port_template: FrontPortTemplateType = strawberry_django.field() front_port_template_list: List[FrontPortTemplateType] = strawberry_django.field() - @strawberry.field - def interface(self, id: int) -> InterfaceType: - return models.Interface.objects.get(pk=id) + interface: InterfaceType = strawberry_django.field() interface_list: List[InterfaceType] = strawberry_django.field() - @strawberry.field - def interface_template(self, id: int) -> InterfaceTemplateType: - return models.InterfaceTemplate.objects.get(pk=id) + interface_template: InterfaceTemplateType = strawberry_django.field() interface_template_list: List[InterfaceTemplateType] = strawberry_django.field() - @strawberry.field - def inventory_item(self, id: int) -> InventoryItemType: - return models.InventoryItem.objects.get(pk=id) + inventory_item: InventoryItemType = strawberry_django.field() inventory_item_list: List[InventoryItemType] = strawberry_django.field() - @strawberry.field - def inventory_item_role(self, id: int) -> InventoryItemRoleType: - return models.InventoryItemRole.objects.get(pk=id) + inventory_item_role: InventoryItemRoleType = strawberry_django.field() inventory_item_role_list: List[InventoryItemRoleType] = strawberry_django.field() - @strawberry.field - def inventory_item_template(self, id: int) -> InventoryItemTemplateType: - return models.InventoryItemTemplate.objects.get(pk=id) + inventory_item_template: InventoryItemTemplateType = strawberry_django.field() inventory_item_template_list: List[InventoryItemTemplateType] = strawberry_django.field() - @strawberry.field - def location(self, id: int) -> LocationType: - return models.Location.objects.get(pk=id) + location: LocationType = strawberry_django.field() location_list: List[LocationType] = strawberry_django.field() - @strawberry.field - def manufacturer(self, id: int) -> ManufacturerType: - return models.Manufacturer.objects.get(pk=id) + manufacturer: ManufacturerType = strawberry_django.field() manufacturer_list: List[ManufacturerType] = strawberry_django.field() - @strawberry.field - def module(self, id: int) -> ModuleType: - return models.Module.objects.get(pk=id) + module: ModuleType = strawberry_django.field() module_list: List[ModuleType] = strawberry_django.field() - @strawberry.field - def module_bay(self, id: int) -> ModuleBayType: - return models.ModuleBay.objects.get(pk=id) + module_bay: ModuleBayType = strawberry_django.field() module_bay_list: List[ModuleBayType] = strawberry_django.field() - @strawberry.field - def module_bay_template(self, id: int) -> ModuleBayTemplateType: - return models.ModuleBayTemplate.objects.get(pk=id) + module_bay_template: ModuleBayTemplateType = strawberry_django.field() module_bay_template_list: List[ModuleBayTemplateType] = strawberry_django.field() - @strawberry.field - def module_type(self, id: int) -> ModuleTypeType: - return models.ModuleType.objects.get(pk=id) + module_type: ModuleTypeType = strawberry_django.field() module_type_list: List[ModuleTypeType] = strawberry_django.field() - @strawberry.field - def platform(self, id: int) -> PlatformType: - return models.Platform.objects.get(pk=id) + platform: PlatformType = strawberry_django.field() platform_list: List[PlatformType] = strawberry_django.field() - @strawberry.field - def power_feed(self, id: int) -> PowerFeedType: - return models.PowerFeed.objects.get(pk=id) + power_feed: PowerFeedType = strawberry_django.field() power_feed_list: List[PowerFeedType] = strawberry_django.field() - @strawberry.field - def power_outlet(self, id: int) -> PowerOutletType: - return models.PowerOutlet.objects.get(pk=id) + power_outlet: PowerOutletType = strawberry_django.field() power_outlet_list: List[PowerOutletType] = strawberry_django.field() - @strawberry.field - def power_outlet_template(self, id: int) -> PowerOutletTemplateType: - return models.PowerOutletTemplate.objects.get(pk=id) + power_outlet_template: PowerOutletTemplateType = strawberry_django.field() power_outlet_template_list: List[PowerOutletTemplateType] = strawberry_django.field() - @strawberry.field - def power_panel(self, id: int) -> PowerPanelType: - return models.PowerPanel.objects.get(id=id) + power_panel: PowerPanelType = strawberry_django.field() power_panel_list: List[PowerPanelType] = strawberry_django.field() - @strawberry.field - def power_port(self, id: int) -> PowerPortType: - return models.PowerPort.objects.get(id=id) + power_port: PowerPortType = strawberry_django.field() power_port_list: List[PowerPortType] = strawberry_django.field() - @strawberry.field - def power_port_template(self, id: int) -> PowerPortTemplateType: - return models.PowerPortTemplate.objects.get(id=id) + power_port_template: PowerPortTemplateType = strawberry_django.field() power_port_template_list: List[PowerPortTemplateType] = strawberry_django.field() - @strawberry.field - def rack(self, id: int) -> RackType: - return models.Rack.objects.get(id=id) + rack_type: RackTypeType = strawberry_django.field() + rack_type_list: List[RackTypeType] = strawberry_django.field() + + rack: RackType = strawberry_django.field() rack_list: List[RackType] = strawberry_django.field() - @strawberry.field - def rack_reservation(self, id: int) -> RackReservationType: - return models.RackReservation.objects.get(id=id) + rack_reservation: RackReservationType = strawberry_django.field() rack_reservation_list: List[RackReservationType] = strawberry_django.field() - @strawberry.field - def rack_role(self, id: int) -> RackRoleType: - return models.RackRole.objects.get(id=id) + rack_role: RackRoleType = strawberry_django.field() rack_role_list: List[RackRoleType] = strawberry_django.field() - @strawberry.field - def rear_port(self, id: int) -> RearPortType: - return models.RearPort.objects.get(id=id) + rear_port: RearPortType = strawberry_django.field() rear_port_list: List[RearPortType] = strawberry_django.field() - @strawberry.field - def rear_port_template(self, id: int) -> RearPortTemplateType: - return models.RearPortTemplate.objects.get(id=id) + rear_port_template: RearPortTemplateType = strawberry_django.field() rear_port_template_list: List[RearPortTemplateType] = strawberry_django.field() - @strawberry.field - def region(self, id: int) -> RegionType: - return models.Region.objects.get(id=id) + region: RegionType = strawberry_django.field() region_list: List[RegionType] = strawberry_django.field() - @strawberry.field - def site(self, id: int) -> SiteType: - return models.Site.objects.get(id=id) + site: SiteType = strawberry_django.field() site_list: List[SiteType] = strawberry_django.field() - @strawberry.field - def site_group(self, id: int) -> SiteGroupType: - return models.SiteGroup.objects.get(id=id) + site_group: SiteGroupType = strawberry_django.field() site_group_list: List[SiteGroupType] = strawberry_django.field() - @strawberry.field - def virtual_chassis(self, id: int) -> VirtualChassisType: - return models.VirtualChassis.objects.get(id=id) + virtual_chassis: VirtualChassisType = strawberry_django.field() virtual_chassis_list: List[VirtualChassisType] = strawberry_django.field() - @strawberry.field - def virtual_device_context(self, id: int) -> VirtualDeviceContextType: - return models.VirtualDeviceContext.objects.get(id=id) + virtual_device_context: VirtualDeviceContextType = strawberry_django.field() virtual_device_context_list: List[VirtualDeviceContextType] = strawberry_django.field() diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index 8b4613f1437..b951aead07d 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -50,6 +50,7 @@ __all__ = ( 'RackType', 'RackReservationType', 'RackRoleType', + 'RackTypeType', 'RearPortType', 'RearPortTemplateType', 'RegionType', @@ -495,12 +496,18 @@ class ModuleType(NetBoxObjectType): @strawberry_django.type( models.ModuleBay, - fields='__all__', + # fields='__all__', + exclude=('parent',), filters=ModuleBayFilter ) -class ModuleBayType(ComponentType): +class ModuleBayType(ModularComponentType): installed_module: Annotated["ModuleType", strawberry.lazy('dcim.graphql.types')] | None + children: List[Annotated["ModuleBayType", strawberry.lazy('dcim.graphql.types')]] + + @strawberry_django.field + def parent(self) -> Annotated["ModuleBayType", strawberry.lazy('dcim.graphql.types')] | None: + return self.parent @strawberry_django.type( @@ -508,7 +515,7 @@ class ModuleBayType(ComponentType): fields='__all__', filters=ModuleBayTemplateFilter ) -class ModuleBayTemplateType(ComponentTemplateType): +class ModuleBayTemplateType(ModularComponentTemplateType): _name: str @@ -561,6 +568,7 @@ class PowerFeedType(NetBoxObjectType, CabledObjectMixin, PathEndpointMixin): ) class PowerOutletType(ModularComponentType, CabledObjectMixin, PathEndpointMixin): power_port: Annotated["PowerPortType", strawberry.lazy('dcim.graphql.types')] | None + color: str @strawberry_django.type( @@ -606,6 +614,15 @@ class PowerPortTemplateType(ModularComponentTemplateType): poweroutlet_templates: List[Annotated["PowerOutletTemplateType", strawberry.lazy('dcim.graphql.types')]] +@strawberry_django.type( + models.RackType, + fields='__all__', + filters=RackTypeFilter +) +class RackTypeType(NetBoxObjectType): + manufacturer: Annotated["ManufacturerType", strawberry.lazy('dcim.graphql.types')] + + @strawberry_django.type( models.Rack, fields='__all__', @@ -618,6 +635,7 @@ class RackType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObje tenant: Annotated["TenantType", strawberry.lazy('tenancy.graphql.types')] | None role: Annotated["RackRoleType", strawberry.lazy('dcim.graphql.types')] | None + rack_type: Annotated["RackTypeType", strawberry.lazy('dcim.graphql.types')] | None reservations: List[Annotated["RackReservationType", strawberry.lazy('dcim.graphql.types')]] devices: List[Annotated["DeviceType", strawberry.lazy('dcim.graphql.types')]] powerfeeds: List[Annotated["PowerFeedType", strawberry.lazy('dcim.graphql.types')]] diff --git a/netbox/dcim/management/commands/trace_paths.py b/netbox/dcim/management/commands/trace_paths.py index d34a428e4fc..592aeb6a7be 100644 --- a/netbox/dcim/management/commands/trace_paths.py +++ b/netbox/dcim/management/commands/trace_paths.py @@ -60,7 +60,7 @@ class Command(BaseCommand): self.stdout.write((self.style.SUCCESS(f' Deleted {deleted_count} paths'))) # Reinitialize the model's PK sequence - self.stdout.write(f'Resetting database sequence for CablePath model') + self.stdout.write('Resetting database sequence for CablePath model') sequence_sql = connection.ops.sequence_reset_sql(no_style(), [CablePath]) with connection.cursor() as cursor: for sql in sequence_sql: diff --git a/netbox/dcim/migrations/0188_racktype.py b/netbox/dcim/migrations/0188_racktype.py new file mode 100644 index 00000000000..aa45246e5c7 --- /dev/null +++ b/netbox/dcim/migrations/0188_racktype.py @@ -0,0 +1,98 @@ +import django.core.validators +import django.db.models.deletion +import taggit.managers +from django.db import migrations, models + +import utilities.fields +import utilities.json +import utilities.ordering + + +class Migration(migrations.Migration): + + dependencies = [ + ('extras', '0118_customfield_uniqueness'), + ('dcim', '0187_alter_device_vc_position'), + ] + + operations = [ + migrations.CreateModel( + name='RackType', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('custom_field_data', models.JSONField( + blank=True, + default=dict, + encoder=utilities.json.CustomFieldJSONEncoder + )), + ('description', models.CharField(blank=True, max_length=200)), + ('comments', models.TextField(blank=True)), + ('weight', models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True)), + ('weight_unit', models.CharField(blank=True, max_length=50)), + ('_abs_weight', models.PositiveBigIntegerField(blank=True, null=True)), + ('manufacturer', models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name='rack_types', + to='dcim.manufacturer' + )), + ('model', models.CharField(max_length=100)), + ('slug', models.SlugField(max_length=100, unique=True)), + ('form_factor', models.CharField(max_length=50)), + ('width', models.PositiveSmallIntegerField(default=19)), + ('u_height', models.PositiveSmallIntegerField( + default=42, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(100), + ] + )), + ('starting_unit', models.PositiveSmallIntegerField( + default=1, + validators=[django.core.validators.MinValueValidator(1)] + )), + ('desc_units', models.BooleanField(default=False)), + ('outer_width', models.PositiveSmallIntegerField(blank=True, null=True)), + ('outer_depth', models.PositiveSmallIntegerField(blank=True, null=True)), + ('outer_unit', models.CharField(blank=True, max_length=50)), + ('max_weight', models.PositiveIntegerField(blank=True, null=True)), + ('_abs_max_weight', models.PositiveBigIntegerField(blank=True, null=True)), + ('mounting_depth', models.PositiveSmallIntegerField(blank=True, null=True)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'verbose_name': 'racktype', + 'verbose_name_plural': 'racktypes', + 'ordering': ('manufacturer', 'model'), + }, + ), + migrations.RenameField( + model_name='rack', + old_name='type', + new_name='form_factor', + ), + migrations.AddField( + model_name='rack', + name='rack_type', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='racks', + to='dcim.racktype', + ), + ), + migrations.AddConstraint( + model_name='racktype', + constraint=models.UniqueConstraint( + fields=('manufacturer', 'model'), name='dcim_racktype_unique_manufacturer_model' + ), + ), + migrations.AddConstraint( + model_name='racktype', + constraint=models.UniqueConstraint( + fields=('manufacturer', 'slug'), name='dcim_racktype_unique_manufacturer_slug' + ), + ), + ] diff --git a/netbox/dcim/migrations/0189_moduletype_rack_airflow.py b/netbox/dcim/migrations/0189_moduletype_rack_airflow.py new file mode 100644 index 00000000000..31787b67d47 --- /dev/null +++ b/netbox/dcim/migrations/0189_moduletype_rack_airflow.py @@ -0,0 +1,21 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0188_racktype'), + ] + + operations = [ + migrations.AddField( + model_name='moduletype', + name='airflow', + field=models.CharField(blank=True, max_length=50), + ), + migrations.AddField( + model_name='rack', + name='airflow', + field=models.CharField(blank=True, max_length=50), + ), + ] diff --git a/netbox/dcim/migrations/0190_nested_modules.py b/netbox/dcim/migrations/0190_nested_modules.py new file mode 100644 index 00000000000..9cef40efbb1 --- /dev/null +++ b/netbox/dcim/migrations/0190_nested_modules.py @@ -0,0 +1,74 @@ +import django.db.models.deletion +import mptt.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0189_moduletype_rack_airflow'), + ('extras', '0121_customfield_related_object_filter'), + ] + + operations = [ + migrations.AlterModelOptions( + name='modulebaytemplate', + options={'ordering': ('device_type', 'module_type', '_name')}, + ), + migrations.RemoveConstraint( + model_name='modulebay', + name='dcim_modulebay_unique_device_name', + ), + migrations.AddField( + model_name='modulebay', + name='level', + field=models.PositiveIntegerField(default=0, editable=False), + preserve_default=False, + ), + migrations.AddField( + model_name='modulebay', + name='lft', + field=models.PositiveIntegerField(default=0, editable=False), + preserve_default=False, + ), + migrations.AddField( + model_name='modulebay', + name='module', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + ), + migrations.AddField( + model_name='modulebay', + name='parent', + field=mptt.fields.TreeForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='dcim.modulebay'), + ), + migrations.AddField( + model_name='modulebay', + name='rght', + field=models.PositiveIntegerField(default=0, editable=False), + preserve_default=False, + ), + migrations.AddField( + model_name='modulebay', + name='tree_id', + field=models.PositiveIntegerField(db_index=True, default=0, editable=False), + preserve_default=False, + ), + migrations.AddField( + model_name='modulebaytemplate', + name='module_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + ), + migrations.AlterField( + model_name='modulebaytemplate', + name='device_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + ), + migrations.AddConstraint( + model_name='modulebay', + constraint=models.UniqueConstraint(fields=('device', 'module', 'name'), name='dcim_modulebay_unique_device_module_name'), + ), + migrations.AddConstraint( + model_name='modulebaytemplate', + constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_modulebaytemplate_unique_module_type_name'), + ), + ] diff --git a/netbox/dcim/migrations/0191_module_bay_rebuild.py b/netbox/dcim/migrations/0191_module_bay_rebuild.py new file mode 100644 index 00000000000..2600632131f --- /dev/null +++ b/netbox/dcim/migrations/0191_module_bay_rebuild.py @@ -0,0 +1,26 @@ +from django.db import migrations +import mptt +import mptt.managers + + +def rebuild_mptt(apps, schema_editor): + manager = mptt.managers.TreeManager() + ModuleBay = apps.get_model('dcim', 'ModuleBay') + manager.model = ModuleBay + mptt.register(ModuleBay) + manager.contribute_to_class(ModuleBay, 'objects') + manager.rebuild() + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0190_nested_modules'), + ] + + operations = [ + migrations.RunPython( + code=rebuild_mptt, + reverse_code=migrations.RunPython.noop + ), + ] diff --git a/netbox/dcim/migrations/0192_inventoryitem_status.py b/netbox/dcim/migrations/0192_inventoryitem_status.py new file mode 100644 index 00000000000..335ab2ca724 --- /dev/null +++ b/netbox/dcim/migrations/0192_inventoryitem_status.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.9 on 2024-09-26 20:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0191_module_bay_rebuild'), + ] + + operations = [ + migrations.AddField( + model_name='inventoryitem', + name='status', + field=models.CharField(default='active', max_length=50), + ), + ] diff --git a/netbox/dcim/migrations/0193_poweroutlet_color.py b/netbox/dcim/migrations/0193_poweroutlet_color.py new file mode 100644 index 00000000000..0a6c08b480c --- /dev/null +++ b/netbox/dcim/migrations/0193_poweroutlet_color.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.9 on 2024-09-26 19:31 + +import utilities.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0192_inventoryitem_status'), + ] + + operations = [ + migrations.AddField( + model_name='poweroutlet', + name='color', + field=utilities.fields.ColorField(blank=True, max_length=6), + ), + ] diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index 7afead829f4..96861a13e97 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -6,7 +6,6 @@ from django.core.exceptions import ValidationError from django.db import models from django.db.models import Sum from django.dispatch import Signal -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from core.models import ObjectType @@ -88,6 +87,8 @@ class Cable(PrimaryModel): null=True ) + clone_fields = ('tenant', 'type',) + class Meta: ordering = ('pk',) verbose_name = _('cable') @@ -114,9 +115,6 @@ class Cable(PrimaryModel): pk = self.pk or self._pk return self.label or f'#{pk}' - def get_absolute_url(self): - return reverse('dcim:cable', args=[self.pk]) - @property def a_terminations(self): if hasattr(self, '_a_terminations'): @@ -162,7 +160,7 @@ class Cable(PrimaryModel): if self.length is not None and not self.length_unit: raise ValidationError(_("Must specify a unit when setting a cable length")) - if self.pk is None and (not self.a_terminations or not self.b_terminations): + if self._state.adding and (not self.a_terminations or not self.b_terminations): raise ValidationError(_("Must define A and B terminations when creating a new cable.")) if self._terminations_modified: @@ -364,11 +362,11 @@ class CableTermination(ChangeLoggedModel): def delete(self, *args, **kwargs): # Delete the cable association on the terminating object - termination_model = self.termination._meta.model - termination_model.objects.filter(pk=self.termination_id).update( - cable=None, - cable_end='' - ) + termination = self.termination._meta.model.objects.get(pk=self.termination_id) + termination.snapshot() + termination.cable = None + termination.cable_end = '' + termination.save() super().delete(*args, **kwargs) @@ -664,6 +662,14 @@ class CablePath(models.Model): rear_port_id=remote_terminations[0].pk, rear_port_position__in=position_stack.pop() ) + # If all rear ports have a single position, we can just get the front ports + elif all([rp.positions == 1 for rp in remote_terminations]): + front_ports = FrontPort.objects.filter(rear_port_id__in=[rp.pk for rp in remote_terminations]) + + if len(front_ports) != len(remote_terminations): + # Some rear ports does not have a front port + is_split = True + break else: # No position indicated: path has split, so we stop at the RearPorts is_split = True diff --git a/netbox/dcim/models/device_component_templates.py b/netbox/dcim/models/device_component_templates.py index dacd7ec3ed9..3a71c424d61 100644 --- a/netbox/dcim/models/device_component_templates.py +++ b/netbox/dcim/models/device_component_templates.py @@ -98,7 +98,7 @@ class ComponentTemplateModel(ChangeLoggedModel, TrackingModelMixin): def clean(self): super().clean() - if self.pk is not None and self._original_device_type != self.device_type_id: + if not self._state.adding and self._original_device_type != self.device_type_id: raise ValidationError({ "device_type": _("Component templates cannot be moved to a different device type.") }) @@ -158,14 +158,40 @@ class ModularComponentTemplateModel(ComponentTemplateModel): _("A component template must be associated with either a device type or a module type.") ) + def _get_module_tree(self, module): + modules = [] + while module: + modules.append(module) + if module.module_bay: + module = module.module_bay.module + else: + module = None + + modules.reverse() + return modules + def resolve_name(self, module): + if MODULE_TOKEN not in self.name: + return self.name + if module: - return self.name.replace(MODULE_TOKEN, module.module_bay.position) + modules = self._get_module_tree(module) + name = self.name + for module in modules: + name = name.replace(MODULE_TOKEN, module.module_bay.position, 1) + return name return self.name def resolve_label(self, module): + if MODULE_TOKEN not in self.label: + return self.label + if module: - return self.label.replace(MODULE_TOKEN, module.module_bay.position) + modules = self._get_module_tree(module) + label = self.label + for module in modules: + label = label.replace(MODULE_TOKEN, module.module_bay.position, 1) + return label return self.label @@ -628,7 +654,7 @@ class RearPortTemplate(ModularComponentTemplateModel): } -class ModuleBayTemplate(ComponentTemplateModel): +class ModuleBayTemplate(ModularComponentTemplateModel): """ A template for a ModuleBay to be created for a new parent Device. """ @@ -641,16 +667,16 @@ class ModuleBayTemplate(ComponentTemplateModel): component_model = ModuleBay - class Meta(ComponentTemplateModel.Meta): + class Meta(ModularComponentTemplateModel.Meta): verbose_name = _('module bay template') verbose_name_plural = _('module bay templates') - def instantiate(self, device): + def instantiate(self, **kwargs): return self.component_model( - device=device, name=self.name, label=self.label, - position=self.position + position=self.position, + **kwargs ) instantiate.do_not_call_in_templates = True diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index 9438b741f58..1a86a250c08 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -5,7 +5,6 @@ from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.db.models import Sum -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from mptt.models import MPTTModel, TreeForeignKey @@ -22,7 +21,6 @@ from utilities.tracking import TrackingModelMixin from wireless.choices import * from wireless.utils import get_channel_attr - __all__ = ( 'BaseInterface', 'CabledObjectModel', @@ -301,9 +299,6 @@ class ConsolePort(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki verbose_name = _('console port') verbose_name_plural = _('console ports') - def get_absolute_url(self): - return reverse('dcim:consoleport', kwargs={'pk': self.pk}) - class ConsoleServerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, TrackingModelMixin): """ @@ -330,9 +325,6 @@ class ConsoleServerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, verbose_name = _('console server port') verbose_name_plural = _('console server ports') - def get_absolute_url(self): - return reverse('dcim:consoleserverport', kwargs={'pk': self.pk}) - # # Power components @@ -370,9 +362,6 @@ class PowerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracking verbose_name = _('power port') verbose_name_plural = _('power ports') - def get_absolute_url(self): - return reverse('dcim:powerport', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -481,6 +470,10 @@ class PowerOutlet(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki blank=True, help_text=_('Phase (for three-phase feeds)') ) + color = ColorField( + verbose_name=_('color'), + blank=True + ) clone_fields = ('device', 'module', 'type', 'power_port', 'feed_leg') @@ -488,9 +481,6 @@ class PowerOutlet(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki verbose_name = _('power outlet') verbose_name_plural = _('power outlets') - def get_absolute_url(self): - return reverse('dcim:poweroutlet', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -561,7 +551,7 @@ class BaseInterface(models.Model): self.untagged_vlan = None # Only "tagged" interfaces may have tagged VLANs assigned. ("tagged all" implies all VLANs are assigned.) - if self.pk and self.mode != InterfaceModeChoices.MODE_TAGGED: + if not self._state.adding and self.mode != InterfaceModeChoices.MODE_TAGGED: self.tagged_vlans.clear() return super().save(*args, **kwargs) @@ -746,9 +736,6 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd verbose_name = _('interface') verbose_name_plural = _('interfaces') - def get_absolute_url(self): - return reverse('dcim:interface', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1007,9 +994,6 @@ class FrontPort(ModularComponentModel, CabledObjectModel, TrackingModelMixin): verbose_name = _('front port') verbose_name_plural = _('front ports') - def get_absolute_url(self): - return reverse('dcim:frontport', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1065,14 +1049,11 @@ class RearPort(ModularComponentModel, CabledObjectModel, TrackingModelMixin): verbose_name = _('rear port') verbose_name_plural = _('rear ports') - def get_absolute_url(self): - return reverse('dcim:rearport', kwargs={'pk': self.pk}) - def clean(self): super().clean() # Check that positions count is greater than or equal to the number of associated FrontPorts - if self.pk: + if not self._state.adding: frontport_count = self.frontports.count() if self.positions < frontport_count: raise ValidationError({ @@ -1087,10 +1068,19 @@ class RearPort(ModularComponentModel, CabledObjectModel, TrackingModelMixin): # Bays # -class ModuleBay(ComponentModel, TrackingModelMixin): +class ModuleBay(ModularComponentModel, TrackingModelMixin, MPTTModel): """ An empty space within a Device which can house a child device """ + parent = TreeForeignKey( + to='self', + on_delete=models.CASCADE, + related_name='children', + blank=True, + null=True, + editable=False, + db_index=True + ) position = models.CharField( verbose_name=_('position'), max_length=30, @@ -1098,14 +1088,41 @@ class ModuleBay(ComponentModel, TrackingModelMixin): help_text=_('Identifier to reference when renaming installed components') ) + objects = TreeManager() + clone_fields = ('device',) - class Meta(ComponentModel.Meta): + class Meta(ModularComponentModel.Meta): + constraints = ( + models.UniqueConstraint( + fields=('device', 'module', 'name'), + name='%(app_label)s_%(class)s_unique_device_module_name' + ), + ) verbose_name = _('module bay') verbose_name_plural = _('module bays') - def get_absolute_url(self): - return reverse('dcim:modulebay', kwargs={'pk': self.pk}) + class MPTTMeta: + order_insertion_by = ('module',) + + def clean(self): + super().clean() + + # Check for recursion + if module := self.module: + module_bays = [self.pk] + modules = [] + while module: + if module.pk in modules or module.module_bay.pk in module_bays: + raise ValidationError(_("A module bay cannot belong to a module installed within it.")) + modules.append(module.pk) + module_bays.append(module.module_bay.pk) + module = module.module_bay.module if module.module_bay else None + + def save(self, *args, **kwargs): + if self.module: + self.parent = self.module.module_bay + super().save(*args, **kwargs) class DeviceBay(ComponentModel, TrackingModelMixin): @@ -1126,9 +1143,6 @@ class DeviceBay(ComponentModel, TrackingModelMixin): verbose_name = _('device bay') verbose_name_plural = _('device bays') - def get_absolute_url(self): - return reverse('dcim:devicebay', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1172,9 +1186,6 @@ class InventoryItemRole(OrganizationalModel): verbose_name = _('inventory item role') verbose_name_plural = _('inventory item roles') - def get_absolute_url(self): - return reverse('dcim:inventoryitemrole', args=[self.pk]) - class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): """ @@ -1205,6 +1216,12 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): ct_field='component_type', fk_field='component_id' ) + status = models.CharField( + verbose_name=_('status'), + max_length=50, + choices=InventoryItemStatusChoices, + default=InventoryItemStatusChoices.STATUS_ACTIVE + ) role = models.ForeignKey( to='dcim.InventoryItemRole', on_delete=models.PROTECT, @@ -1246,7 +1263,7 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): objects = TreeManager() - clone_fields = ('device', 'parent', 'role', 'manufacturer', 'part_id',) + clone_fields = ('device', 'parent', 'role', 'manufacturer', 'status', 'part_id') class Meta: ordering = ('device__id', 'parent__id', '_name') @@ -1262,9 +1279,6 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): verbose_name = _('inventory item') verbose_name_plural = _('inventory items') - def get_absolute_url(self): - return reverse('dcim:inventoryitem', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1275,7 +1289,7 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): }) # Validation for moving InventoryItems - if self.pk: + if not self._state.adding: # Cannot move an InventoryItem to another device if it has a parent if self.parent and self.parent.device != self.device: raise ValidationError({ @@ -1295,3 +1309,6 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): raise ValidationError({ "device": _("Cannot assign inventory item to component on another device") }) + + def get_status_color(self): + return InventoryItemStatusChoices.colors.get(self.status) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index abc9e0b0857..e472303a6aa 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -21,11 +21,12 @@ from extras.querysets import ConfigContextModelQuerySet from netbox.choices import ColorChoices from netbox.config import ConfigItem from netbox.models import OrganizationalModel, PrimaryModel +from netbox.models.mixins import WeightMixin from netbox.models.features import ContactsMixin, ImageAttachmentsMixin from utilities.fields import ColorField, CounterCacheField, NaturalOrderingField from utilities.tracking import TrackingModelMixin from .device_components import * -from .mixins import RenderConfigMixin, WeightMixin +from .mixins import RenderConfigMixin __all__ = ( @@ -54,9 +55,6 @@ class Manufacturer(ContactsMixin, OrganizationalModel): verbose_name = _('manufacturer') verbose_name_plural = _('manufacturers') - def get_absolute_url(self): - return reverse('dcim:manufacturer', args=[self.pk]) - class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): """ @@ -217,11 +215,8 @@ class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): self._original_front_image = self.__dict__.get('front_image') self._original_rear_image = self.__dict__.get('rear_image') - def get_absolute_url(self): - return reverse('dcim:devicetype', args=[self.pk]) - @property - def get_full_name(self): + def full_name(self): return f"{self.manufacturer} {self.model}" def to_yaml(self): @@ -293,7 +288,7 @@ class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): # If editing an existing DeviceType to have a larger u_height, first validate that *all* instances of it have # room to expand within their racks. This validation will impose a very high performance penalty when there are # many instances to check, but increasing the u_height of a DeviceType should be a very rare occurrence. - if self.pk and self.u_height > self._original_u_height: + if not self._state.adding and self.u_height > self._original_u_height: for d in Device.objects.filter(device_type=self, position__isnull=False): face_required = None if self.is_full_depth else d.face u_available = d.rack.get_available_units( @@ -310,7 +305,7 @@ class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): }) # If modifying the height of an existing DeviceType to 0U, check for any instances assigned to a rack position. - elif self.pk and self._original_u_height > 0 and self.u_height == 0: + elif not self._state.adding and self._original_u_height > 0 and self.u_height == 0: racked_instance_count = Device.objects.filter( device_type=self, position__isnull=False @@ -388,8 +383,14 @@ class ModuleType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): blank=True, help_text=_('Discrete part number (optional)') ) + airflow = models.CharField( + verbose_name=_('airflow'), + max_length=50, + choices=ModuleAirflowChoices, + blank=True + ) - clone_fields = ('manufacturer', 'weight', 'weight_unit',) + clone_fields = ('manufacturer', 'weight', 'weight_unit', 'airflow') prerequisite_models = ( 'dcim.Manufacturer', ) @@ -408,8 +409,9 @@ class ModuleType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): def __str__(self): return self.model - def get_absolute_url(self): - return reverse('dcim:moduletype', args=[self.pk]) + @property + def full_name(self): + return f"{self.manufacturer} {self.model}" def to_yaml(self): data = { @@ -487,9 +489,6 @@ class DeviceRole(OrganizationalModel): verbose_name = _('device role') verbose_name_plural = _('device roles') - def get_absolute_url(self): - return reverse('dcim:devicerole', args=[self.pk]) - class Platform(OrganizationalModel): """ @@ -517,9 +516,6 @@ class Platform(OrganizationalModel): verbose_name = _('platform') verbose_name_plural = _('platforms') - def get_absolute_url(self): - return reverse('dcim:platform', args=[self.pk]) - def update_interface_bridges(device, interface_templates, module=None): """ @@ -813,9 +809,6 @@ class Device( return f'{self.device_type.manufacturer} {self.device_type.model} ({self.pk})' return super().__str__() - def get_absolute_url(self): - return reverse('dcim:device', args=[self.pk]) - def clean(self): super().clean() @@ -973,6 +966,13 @@ class Device( 'vc_position': _("A device assigned to a virtual chassis must have its position defined.") }) + if hasattr(self, 'vc_master_for') and self.vc_master_for and self.vc_master_for != self.virtual_chassis: + raise ValidationError({ + 'virtual_chassis': _('Device cannot be removed from virtual chassis {virtual_chassis} because it is currently designated as its master.').format( + virtual_chassis=self.vc_master_for + ) + }) + def _instantiate_components(self, queryset, bulk_create=True): """ Instantiate components for the device from the specified component templates. @@ -1036,7 +1036,8 @@ class Device( self._instantiate_components(self.device_type.interfacetemplates.all()) self._instantiate_components(self.device_type.rearporttemplates.all()) self._instantiate_components(self.device_type.frontporttemplates.all()) - self._instantiate_components(self.device_type.modulebaytemplates.all()) + # Disable bulk_create to accommodate MPTT + self._instantiate_components(self.device_type.modulebaytemplates.all(), bulk_create=False) self._instantiate_components(self.device_type.devicebaytemplates.all()) # Disable bulk_create to accommodate MPTT self._instantiate_components(self.device_type.inventoryitemtemplates.all(), bulk_create=False) @@ -1181,9 +1182,6 @@ class Module(PrimaryModel, ConfigContextModel): def __str__(self): return f'{self.module_bay.name}: {self.module_type} ({self.pk})' - def get_absolute_url(self): - return reverse('dcim:module', args=[self.pk]) - def get_status_color(self): return ModuleStatusChoices.colors.get(self.status) @@ -1197,6 +1195,17 @@ class Module(PrimaryModel, ConfigContextModel): ) ) + # Check for recursion + module = self + module_bays = [] + modules = [] + while module: + if module.pk in modules or module.module_bay.pk in module_bays: + raise ValidationError(_("A module bay cannot belong to a module installed within it.")) + modules.append(module.pk) + module_bays.append(module.module_bay.pk) + module = module.module_bay.module if module.module_bay else None + def save(self, *args, **kwargs): is_new = self.pk is None @@ -1218,7 +1227,8 @@ class Module(PrimaryModel, ConfigContextModel): ("powerporttemplates", "powerports", PowerPort), ("poweroutlettemplates", "poweroutlets", PowerOutlet), ("rearporttemplates", "rearports", RearPort), - ("frontporttemplates", "frontports", FrontPort) + ("frontporttemplates", "frontports", FrontPort), + ("modulebaytemplates", "modulebays", ModuleBay), ]: create_instances = [] update_instances = [] @@ -1247,17 +1257,22 @@ class Module(PrimaryModel, ConfigContextModel): if not disable_replication: create_instances.append(template_instance) - component_model.objects.bulk_create(create_instances) - # Emit the post_save signal for each newly created object - for component in create_instances: - post_save.send( - sender=component_model, - instance=component, - created=True, - raw=False, - using='default', - update_fields=None - ) + if component_model is not ModuleBay: + component_model.objects.bulk_create(create_instances) + # Emit the post_save signal for each newly created object + for component in create_instances: + post_save.send( + sender=component_model, + instance=component, + created=True, + raw=False, + using='default', + update_fields=None + ) + else: + # ModuleBays must be saved individually for MPTT + for instance in create_instances: + instance.save() update_fields = ['module'] component_model.objects.bulk_update(update_instances, update_fields) @@ -1315,15 +1330,12 @@ class VirtualChassis(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:virtualchassis', kwargs={'pk': self.pk}) - def clean(self): super().clean() # Verify that the selected master device has been assigned to this VirtualChassis. (Skip when creating a new # VirtualChassis.) - if self.pk and self.master and self.master not in self.members.all(): + if not self._state.adding and self.master and self.master not in self.members.all(): raise ValidationError({ 'master': _("The selected master ({master}) is not assigned to this virtual chassis.").format( master=self.master @@ -1417,9 +1429,6 @@ class VirtualDeviceContext(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:virtualdevicecontext', kwargs={'pk': self.pk}) - def get_status_color(self): return VirtualDeviceContextStatusChoices.colors.get(self.status) diff --git a/netbox/dcim/models/mixins.py b/netbox/dcim/models/mixins.py index d4a05699cac..c9be451a05a 100644 --- a/netbox/dcim/models/mixins.py +++ b/netbox/dcim/models/mixins.py @@ -1,56 +1,10 @@ -from django.core.exceptions import ValidationError from django.db import models -from django.utils.translation import gettext_lazy as _ -from dcim.choices import * -from utilities.conversion import to_grams __all__ = ( 'RenderConfigMixin', - 'WeightMixin', ) -class WeightMixin(models.Model): - weight = models.DecimalField( - verbose_name=_('weight'), - max_digits=8, - decimal_places=2, - blank=True, - null=True - ) - weight_unit = models.CharField( - verbose_name=_('weight unit'), - max_length=50, - choices=WeightUnitChoices, - blank=True, - ) - # Stores the normalized weight (in grams) for database ordering - _abs_weight = models.PositiveBigIntegerField( - blank=True, - null=True - ) - - class Meta: - abstract = True - - def save(self, *args, **kwargs): - - # Store the given weight (if any) in grams for use in database ordering - if self.weight and self.weight_unit: - self._abs_weight = to_grams(self.weight, self.weight_unit) - else: - self._abs_weight = None - - super().save(*args, **kwargs) - - def clean(self): - super().clean() - - # Validate weight and weight_unit - if self.weight and not self.weight_unit: - raise ValidationError(_("Must specify a unit when setting a weight")) - - class RenderConfigMixin(models.Model): config_template = models.ForeignKey( to='extras.ConfigTemplate', diff --git a/netbox/dcim/models/power.py b/netbox/dcim/models/power.py index 826eaae9ce3..d0c6b18b664 100644 --- a/netbox/dcim/models/power.py +++ b/netbox/dcim/models/power.py @@ -1,7 +1,6 @@ from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from dcim.choices import * @@ -58,9 +57,6 @@ class PowerPanel(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:powerpanel', args=[self.pk]) - def clean(self): super().clean() @@ -167,9 +163,6 @@ class PowerFeed(PrimaryModel, PathEndpoint, CabledObjectModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:powerfeed', args=[self.pk]) - def clean(self): super().clean() diff --git a/netbox/dcim/models/racks.py b/netbox/dcim/models/racks.py index 289c38133a3..ae5513feaa9 100644 --- a/netbox/dcim/models/racks.py +++ b/netbox/dcim/models/racks.py @@ -8,7 +8,6 @@ from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.db.models import Count -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from dcim.choices import * @@ -16,22 +15,199 @@ from dcim.constants import * from dcim.svg import RackElevationSVG from netbox.choices import ColorChoices from netbox.models import OrganizationalModel, PrimaryModel +from netbox.models.mixins import WeightMixin from netbox.models.features import ContactsMixin, ImageAttachmentsMixin from utilities.conversion import to_grams from utilities.data import array_to_string, drange from utilities.fields import ColorField, NaturalOrderingField from .device_components import PowerPort from .devices import Device, Module -from .mixins import WeightMixin from .power import PowerFeed __all__ = ( 'Rack', 'RackReservation', 'RackRole', + 'RackType', ) +# +# Rack Types +# + +class RackBase(WeightMixin, PrimaryModel): + """ + Base class for RackType & Rack. Holds + """ + width = models.PositiveSmallIntegerField( + choices=RackWidthChoices, + default=RackWidthChoices.WIDTH_19IN, + verbose_name=_('width'), + help_text=_('Rail-to-rail width') + ) + + # Numbering + u_height = models.PositiveSmallIntegerField( + default=RACK_U_HEIGHT_DEFAULT, + verbose_name=_('height (U)'), + validators=[MinValueValidator(1), MaxValueValidator(RACK_U_HEIGHT_MAX)], + help_text=_('Height in rack units') + ) + starting_unit = models.PositiveSmallIntegerField( + default=RACK_STARTING_UNIT_DEFAULT, + verbose_name=_('starting unit'), + validators=[MinValueValidator(1)], + help_text=_('Starting unit for rack') + ) + desc_units = models.BooleanField( + default=False, + verbose_name=_('descending units'), + help_text=_('Units are numbered top-to-bottom') + ) + + # Dimensions + outer_width = models.PositiveSmallIntegerField( + verbose_name=_('outer width'), + blank=True, + null=True, + help_text=_('Outer dimension of rack (width)') + ) + outer_depth = models.PositiveSmallIntegerField( + verbose_name=_('outer depth'), + blank=True, + null=True, + help_text=_('Outer dimension of rack (depth)') + ) + outer_unit = models.CharField( + verbose_name=_('outer unit'), + max_length=50, + choices=RackDimensionUnitChoices, + blank=True + ) + mounting_depth = models.PositiveSmallIntegerField( + verbose_name=_('mounting depth'), + blank=True, + null=True, + help_text=(_( + 'Maximum depth of a mounted device, in millimeters. For four-post racks, this is the distance between the ' + 'front and rear rails.' + )) + ) + + # Weight + # WeightMixin provides weight, weight_unit, and _abs_weight + max_weight = models.PositiveIntegerField( + verbose_name=_('max weight'), + blank=True, + null=True, + help_text=_('Maximum load capacity for the rack') + ) + # Stores the normalized max weight (in grams) for database ordering + _abs_max_weight = models.PositiveBigIntegerField( + blank=True, + null=True + ) + + class Meta: + abstract = True + + +class RackType(RackBase): + """ + Devices are housed within Racks. Each rack has a defined height measured in rack units, and a front and rear face. + Each Rack is assigned to a Site and (optionally) a Location. + """ + form_factor = models.CharField( + choices=RackFormFactorChoices, + max_length=50, + verbose_name=_('form factor') + ) + manufacturer = models.ForeignKey( + to='dcim.Manufacturer', + on_delete=models.PROTECT, + related_name='rack_types' + ) + model = models.CharField( + verbose_name=_('model'), + max_length=100 + ) + slug = models.SlugField( + verbose_name=_('slug'), + max_length=100, + unique=True + ) + + clone_fields = ( + 'manufacturer', 'form_factor', 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', + 'outer_unit', 'mounting_depth', 'weight', 'max_weight', 'weight_unit', + ) + prerequisite_models = ( + 'dcim.Manufacturer', + ) + + class Meta: + ordering = ('manufacturer', 'model') + constraints = ( + models.UniqueConstraint( + fields=('manufacturer', 'model'), + name='%(app_label)s_%(class)s_unique_manufacturer_model' + ), + models.UniqueConstraint( + fields=('manufacturer', 'slug'), + name='%(app_label)s_%(class)s_unique_manufacturer_slug' + ), + ) + verbose_name = _('rack type') + verbose_name_plural = _('rack types') + + def __str__(self): + return self.model + + @property + def full_name(self): + return f"{self.manufacturer} {self.model}" + + def clean(self): + super().clean() + + # Validate outer dimensions and unit + if (self.outer_width is not None or self.outer_depth is not None) and not self.outer_unit: + raise ValidationError(_("Must specify a unit when setting an outer width/depth")) + + # Validate max_weight and weight_unit + if self.max_weight and not self.weight_unit: + raise ValidationError(_("Must specify a unit when setting a maximum weight")) + + def save(self, *args, **kwargs): + # Store the given max weight (if any) in grams for use in database ordering + if self.max_weight and self.weight_unit: + self._abs_max_weight = to_grams(self.max_weight, self.weight_unit) + else: + self._abs_max_weight = None + + # Clear unit if outer width & depth are not set + if self.outer_width is None and self.outer_depth is None: + self.outer_unit = '' + + super().save(*args, **kwargs) + + # Update all Racks associated with this RackType + for rack in self.racks.all(): + rack.snapshot() + rack.copy_racktype_attrs() + rack.save() + + @property + def units(self): + """ + Return a list of unit numbers, top to bottom. + """ + if self.desc_units: + return drange(decimal.Decimal(self.starting_unit), self.u_height + self.starting_unit, 0.5) + return drange(self.u_height + decimal.Decimal(0.5) + self.starting_unit - 1, 0.5 + self.starting_unit - 1, -0.5) + + # # Racks # @@ -50,15 +226,31 @@ class RackRole(OrganizationalModel): verbose_name = _('rack role') verbose_name_plural = _('rack roles') - def get_absolute_url(self): - return reverse('dcim:rackrole', args=[self.pk]) - -class Rack(ContactsMixin, ImageAttachmentsMixin, PrimaryModel, WeightMixin): +class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): """ Devices are housed within Racks. Each rack has a defined height measured in rack units, and a front and rear face. Each Rack is assigned to a Site and (optionally) a Location. """ + # Fields which cannot be set locally if a RackType is assigned + RACKTYPE_FIELDS = ( + 'form_factor', 'width', 'u_height', 'starting_unit', 'desc_units', 'outer_width', 'outer_depth', + 'outer_unit', 'mounting_depth', 'weight', 'weight_unit', 'max_weight', + ) + + form_factor = models.CharField( + choices=RackFormFactorChoices, + max_length=50, + blank=True, + verbose_name=_('form factor') + ) + rack_type = models.ForeignKey( + to='dcim.RackType', + on_delete=models.PROTECT, + related_name='racks', + blank=True, + null=True, + ) name = models.CharField( verbose_name=_('name'), max_length=100 @@ -121,72 +313,11 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, PrimaryModel, WeightMixin): verbose_name=_('asset tag'), help_text=_('A unique tag used to identify this rack') ) - type = models.CharField( - choices=RackTypeChoices, + airflow = models.CharField( + verbose_name=_('airflow'), max_length=50, - blank=True, - verbose_name=_('type') - ) - width = models.PositiveSmallIntegerField( - choices=RackWidthChoices, - default=RackWidthChoices.WIDTH_19IN, - verbose_name=_('width'), - help_text=_('Rail-to-rail width') - ) - u_height = models.PositiveSmallIntegerField( - default=RACK_U_HEIGHT_DEFAULT, - verbose_name=_('height (U)'), - validators=[MinValueValidator(1), MaxValueValidator(RACK_U_HEIGHT_MAX)], - help_text=_('Height in rack units') - ) - starting_unit = models.PositiveSmallIntegerField( - default=RACK_STARTING_UNIT_DEFAULT, - verbose_name=_('starting unit'), - validators=[MinValueValidator(1),], - help_text=_('Starting unit for rack') - ) - desc_units = models.BooleanField( - default=False, - verbose_name=_('descending units'), - help_text=_('Units are numbered top-to-bottom') - ) - outer_width = models.PositiveSmallIntegerField( - verbose_name=_('outer width'), - blank=True, - null=True, - help_text=_('Outer dimension of rack (width)') - ) - outer_depth = models.PositiveSmallIntegerField( - verbose_name=_('outer depth'), - blank=True, - null=True, - help_text=_('Outer dimension of rack (depth)') - ) - outer_unit = models.CharField( - verbose_name=_('outer unit'), - max_length=50, - choices=RackDimensionUnitChoices, - blank=True, - ) - max_weight = models.PositiveIntegerField( - verbose_name=_('max weight'), - blank=True, - null=True, - help_text=_('Maximum load capacity for the rack') - ) - # Stores the normalized max weight (in grams) for database ordering - _abs_max_weight = models.PositiveBigIntegerField( - blank=True, - null=True - ) - mounting_depth = models.PositiveSmallIntegerField( - verbose_name=_('mounting depth'), - blank=True, - null=True, - help_text=( - _('Maximum depth of a mounted device, in millimeters. For four-post racks, this is the ' - 'distance between the front and rear rails.') - ) + choices=RackAirflowChoices, + blank=True ) # Generic relations @@ -198,8 +329,8 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, PrimaryModel, WeightMixin): ) clone_fields = ( - 'site', 'location', 'tenant', 'status', 'role', 'type', 'width', 'u_height', 'desc_units', 'outer_width', - 'outer_depth', 'outer_unit', 'mounting_depth', 'weight', 'max_weight', 'weight_unit', + 'site', 'location', 'tenant', 'status', 'role', 'form_factor', 'width', 'airflow', 'u_height', 'desc_units', + 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', 'weight', 'max_weight', 'weight_unit', ) prerequisite_models = ( 'dcim.Site', @@ -226,9 +357,6 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, PrimaryModel, WeightMixin): return f'{self.name} ({self.facility_id})' return self.name - def get_absolute_url(self): - return reverse('dcim:rack', args=[self.pk]) - def clean(self): super().clean() @@ -244,7 +372,7 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, PrimaryModel, WeightMixin): if self.max_weight and not self.weight_unit: raise ValidationError(_("Must specify a unit when setting a maximum weight")) - if self.pk: + if not self._state.adding: mounted_devices = Device.objects.filter(rack=self).exclude(position__isnull=True).order_by('position') # Validate that Rack is tall enough to house the highest mounted Device @@ -271,6 +399,7 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, PrimaryModel, WeightMixin): }) def save(self, *args, **kwargs): + self.copy_racktype_attrs() # Store the given max weight (if any) in grams for use in database ordering if self.max_weight and self.weight_unit: @@ -284,6 +413,14 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, PrimaryModel, WeightMixin): super().save(*args, **kwargs) + def copy_racktype_attrs(self): + """ + Copy physical attributes from the assigned RackType (if any). + """ + if self.rack_type: + for field_name in self.RACKTYPE_FIELDS: + setattr(self, field_name, getattr(self.rack_type, field_name)) + @property def units(self): """ @@ -321,7 +458,7 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, PrimaryModel, WeightMixin): } # Add devices to rack units list - if self.pk: + if not self._state.adding: # Retrieve all devices installed within the rack devices = Device.objects.prefetch_related( @@ -552,9 +689,6 @@ class RackReservation(PrimaryModel): def __str__(self): return "Reservation for rack {}".format(self.rack) - def get_absolute_url(self): - return reverse('dcim:rackreservation', args=[self.pk]) - def clean(self): super().clean() diff --git a/netbox/dcim/models/sites.py b/netbox/dcim/models/sites.py index c1da807adf6..37f59045d5e 100644 --- a/netbox/dcim/models/sites.py +++ b/netbox/dcim/models/sites.py @@ -1,7 +1,6 @@ from django.contrib.contenttypes.fields import GenericRelation from django.core.exceptions import ValidationError from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from timezone_field import TimeZoneField @@ -62,9 +61,6 @@ class Region(ContactsMixin, NestedGroupModel): verbose_name = _('region') verbose_name_plural = _('regions') - def get_absolute_url(self): - return reverse('dcim:region', args=[self.pk]) - def get_site_count(self): return Site.objects.filter( Q(region=self) | @@ -115,9 +111,6 @@ class SiteGroup(ContactsMixin, NestedGroupModel): verbose_name = _('site group') verbose_name_plural = _('site groups') - def get_absolute_url(self): - return reverse('dcim:sitegroup', args=[self.pk]) - def get_site_count(self): return Site.objects.filter( Q(group=self) | @@ -241,9 +234,6 @@ class Site(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:site', args=[self.pk]) - def get_status_color(self): return SiteStatusChoices.colors.get(self.status) @@ -322,9 +312,6 @@ class Location(ContactsMixin, ImageAttachmentsMixin, NestedGroupModel): verbose_name = _('location') verbose_name_plural = _('locations') - def get_absolute_url(self): - return reverse('dcim:location', args=[self.pk]) - def get_status_color(self): return LocationStatusChoices.colors.get(self.status) diff --git a/netbox/dcim/search.py b/netbox/dcim/search.py index b349bcac063..45431cb05aa 100644 --- a/netbox/dcim/search.py +++ b/netbox/dcim/search.py @@ -242,6 +242,17 @@ class PowerPortIndex(SearchIndex): display_attrs = ('device', 'label', 'type', 'description') +@register_search +class RackTypeIndex(SearchIndex): + model = models.RackType + fields = ( + ('model', 100), + ('description', 500), + ('comments', 5000), + ) + display_attrs = ('model', 'description') + + @register_search class RackIndex(SearchIndex): model = models.Rack diff --git a/netbox/dcim/svg/cables.py b/netbox/dcim/svg/cables.py index 959414d7549..4e0f7aea638 100644 --- a/netbox/dcim/svg/cables.py +++ b/netbox/dcim/svg/cables.py @@ -162,6 +162,9 @@ class CableTraceSVG: location_label += f' / {instance.location}' if instance.rack: location_label += f' / {instance.rack}' + if instance.position: + location_label += f' / {instance.get_face_display()}' + location_label += f' / U{instance.position}' labels.append(location_label) elif instance._meta.model_name == 'circuit': labels[0] = f'Circuit {instance}' diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 7fa307bc80b..b39a2b87fc2 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -63,7 +63,10 @@ class DeviceRoleTable(NetBoxTable): verbose_name=_('VMs') ) color = columns.ColorColumn() - vm_role = columns.BooleanColumn() + vm_role = columns.BooleanColumn( + verbose_name=_('VM role'), + false_mark=None + ) config_template = tables.Column( linkify=True ) @@ -287,6 +290,11 @@ class DeviceComponentTable(NetBoxTable): linkify=True, order_by=('_name',) ) + device_status = columns.ChoiceFieldColumn( + accessor=tables.A('device__status'), + verbose_name=_('Device Status'), + color=lambda x: x.device.get_status_color(), + ) class Meta(NetBoxTable.Meta): order_by = ('device', 'name') @@ -310,6 +318,9 @@ class ModularDeviceComponentTable(DeviceComponentTable): verbose_name=_('Inventory Items'), ) + class Meta(NetBoxTable.Meta): + pass + class CableTerminationTable(NetBoxTable): cable = tables.Column( @@ -329,6 +340,7 @@ class CableTerminationTable(NetBoxTable): ) mark_connected = columns.BooleanColumn( verbose_name=_('Mark Connected'), + false_mark=None ) class Meta: @@ -500,6 +512,7 @@ class PowerOutletTable(ModularDeviceComponentTable, PathEndpointTable): verbose_name=_('Power Port'), linkify=True ) + color = columns.ColorColumn() tags = columns.TagColumn( url_name='dcim:poweroutlet_list' ) @@ -508,10 +521,10 @@ class PowerOutletTable(ModularDeviceComponentTable, PathEndpointTable): model = models.PowerOutlet fields = ( 'pk', 'id', 'name', 'device', 'module_bay', 'module', 'label', 'type', 'description', 'power_port', - 'feed_leg', 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'inventory_items', + 'color', 'feed_leg', 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'inventory_items', 'tags', 'created', 'last_updated', ) - default_columns = ('pk', 'name', 'device', 'label', 'type', 'power_port', 'feed_leg', 'description') + default_columns = ('pk', 'name', 'device', 'label', 'type', 'color', 'power_port', 'feed_leg', 'description') class DevicePowerOutletTable(PowerOutletTable): @@ -528,11 +541,11 @@ class DevicePowerOutletTable(PowerOutletTable): class Meta(CableTerminationTable.Meta, DeviceComponentTable.Meta): model = models.PowerOutlet fields = ( - 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'power_port', 'feed_leg', 'description', - 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'tags', 'actions', + 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'color', 'power_port', 'feed_leg', + 'description', 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'tags', 'actions', ) default_columns = ( - 'pk', 'name', 'label', 'type', 'power_port', 'feed_leg', 'description', 'cable', 'connection', + 'pk', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'description', 'cable', 'connection', ) @@ -576,6 +589,9 @@ class BaseInterfaceTable(NetBoxTable): def value_ip_addresses(self, value): return ",".join([str(obj.address) for obj in value.all()]) + def value_tagged_vlans(self, value): + return ",".join([str(obj) for obj in value.all()]) + class InterfaceTable(ModularDeviceComponentTable, BaseInterfaceTable, PathEndpointTable): device = tables.Column( @@ -586,7 +602,8 @@ class InterfaceTable(ModularDeviceComponentTable, BaseInterfaceTable, PathEndpoi } ) mgmt_only = columns.BooleanColumn( - verbose_name=_('Management Only') + verbose_name=_('Management Only'), + false_mark=None ) speed_formatted = columns.TemplateColumn( template_code='{% load helpers %}{{ value|humanize_speed }}', @@ -671,7 +688,8 @@ class DeviceInterfaceTable(InterfaceTable): 'data-virtual': lambda record: "true" if record.is_virtual else "false", 'data-mark-connected': lambda record: "true" if record.mark_connected else "false", 'data-cable-status': lambda record: record.cable.status if record.cable else "", - 'data-type': lambda record: record.type + 'data-type': lambda record: record.type, + 'data-connected': lambda record: "connected" if record.mark_connected or record.cable else "disconnected" } @@ -839,7 +857,7 @@ class DeviceDeviceBayTable(DeviceBayTable): default_columns = ('pk', 'name', 'label', 'status', 'installed_device', 'description') -class ModuleBayTable(DeviceComponentTable): +class ModuleBayTable(ModularDeviceComponentTable): device = tables.Column( verbose_name=_('Device'), linkify={ @@ -847,6 +865,10 @@ class ModuleBayTable(DeviceComponentTable): 'args': [Accessor('device_id')], } ) + parent = tables.Column( + linkify=True, + verbose_name=_('Parent'), + ) installed_module = tables.Column( linkify=True, verbose_name=_('Installed Module') @@ -868,25 +890,38 @@ class ModuleBayTable(DeviceComponentTable): verbose_name=_('Module Status') ) - class Meta(DeviceComponentTable.Meta): + class Meta(ModularDeviceComponentTable.Meta): model = models.ModuleBay fields = ( - 'pk', 'id', 'name', 'device', 'label', 'position', 'installed_module', 'module_status', 'module_serial', - 'module_asset_tag', 'description', 'tags', + 'pk', 'id', 'name', 'device', 'parent', 'label', 'position', 'installed_module', 'module_status', + 'module_serial', 'module_asset_tag', 'description', 'tags', ) - default_columns = ('pk', 'name', 'device', 'label', 'installed_module', 'module_status', 'description') + default_columns = ( + 'pk', 'name', 'device', 'parent', 'label', 'installed_module', 'module_status', 'description', + ) + + def render_parent_bay(self, value): + return value.name if value else '' + + def render_installed_module(self, value): + return value.module_type if value else '' class DeviceModuleBayTable(ModuleBayTable): + name = columns.MPTTColumn( + verbose_name=_('Name'), + linkify=True, + order_by=Accessor('_name') + ) actions = columns.ActionsColumn( extra_buttons=MODULEBAY_BUTTONS ) - class Meta(DeviceComponentTable.Meta): + class Meta(ModuleBayTable.Meta): model = models.ModuleBay fields = ( - 'pk', 'id', 'name', 'label', 'position', 'installed_module', 'module_status', 'module_serial', 'module_asset_tag', - 'description', 'tags', 'actions', + 'pk', 'id', 'parent', 'name', 'label', 'position', 'installed_module', 'module_status', 'module_serial', + 'module_asset_tag', 'description', 'tags', 'actions', ) default_columns = ('pk', 'name', 'label', 'installed_module', 'module_status', 'description') @@ -913,6 +948,10 @@ class InventoryItemTable(DeviceComponentTable): ) discovered = columns.BooleanColumn( verbose_name=_('Discovered'), + false_mark=None + ) + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), ) parent = tables.Column( linkify=True, @@ -926,11 +965,11 @@ class InventoryItemTable(DeviceComponentTable): class Meta(NetBoxTable.Meta): model = models.InventoryItem fields = ( - 'pk', 'id', 'name', 'device', 'parent', 'component', 'label', 'role', 'manufacturer', 'part_id', 'serial', + 'pk', 'id', 'name', 'device', 'parent', 'component', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'description', 'discovered', 'tags', 'created', 'last_updated', ) default_columns = ( - 'pk', 'name', 'device', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', + 'pk', 'name', 'device', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', ) @@ -946,11 +985,11 @@ class DeviceInventoryItemTable(InventoryItemTable): class Meta(NetBoxTable.Meta): model = models.InventoryItem fields = ( - 'pk', 'id', 'name', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'component', + 'pk', 'id', 'name', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'component', 'description', 'discovered', 'tags', 'actions', ) default_columns = ( - 'pk', 'name', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'component', + 'pk', 'name', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'component', ) @@ -1020,7 +1059,7 @@ class VirtualDeviceContextTable(TenancyColumnsMixin, NetBoxTable): ) device = tables.TemplateColumn( verbose_name=_('Device'), - order_by=('_name',), + order_by=('device___name',), template_code=DEVICE_LINK, linkify=True ) diff --git a/netbox/dcim/tables/devicetypes.py b/netbox/dcim/tables/devicetypes.py index fad238c6e53..e8a4e35f114 100644 --- a/netbox/dcim/tables/devicetypes.py +++ b/netbox/dcim/tables/devicetypes.py @@ -1,6 +1,5 @@ -from django.utils.translation import gettext_lazy as _ import django_tables2 as tables -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from dcim import models from netbox.tables import NetBoxTable, columns @@ -86,7 +85,8 @@ class DeviceTypeTable(NetBoxTable): linkify=True ) is_full_depth = columns.BooleanColumn( - verbose_name=_('Full Depth') + verbose_name=_('Full Depth'), + false_mark=None ) comments = columns.MarkdownColumn( verbose_name=_('Comments'), @@ -98,7 +98,10 @@ class DeviceTypeTable(NetBoxTable): verbose_name=_('U Height'), template_code='{{ value|floatformat }}' ) - exclude_from_utilization = columns.BooleanColumn() + exclude_from_utilization = columns.BooleanColumn( + verbose_name=_('Exclude from utilization'), + false_mark=None + ) weight = columns.TemplateColumn( verbose_name=_('Weight'), template_code=WEIGHT, @@ -221,7 +224,8 @@ class InterfaceTemplateTable(ComponentTemplateTable): verbose_name=_('Enabled'), ) mgmt_only = columns.BooleanColumn( - verbose_name=_('Management Only') + verbose_name=_('Management Only'), + false_mark=None ) actions = columns.ActionsColumn( actions=('edit', 'delete'), diff --git a/netbox/dcim/tables/modules.py b/netbox/dcim/tables/modules.py index 0cd9e438ee9..5b06e08b28b 100644 --- a/netbox/dcim/tables/modules.py +++ b/netbox/dcim/tables/modules.py @@ -40,7 +40,7 @@ class ModuleTypeTable(NetBoxTable): class Meta(NetBoxTable.Meta): model = ModuleType fields = ( - 'pk', 'id', 'model', 'manufacturer', 'part_number', 'weight', 'description', 'comments', 'tags', + 'pk', 'id', 'model', 'manufacturer', 'part_number', 'airflow', 'weight', 'description', 'comments', 'tags', ) default_columns = ( 'pk', 'model', 'manufacturer', 'part_number', diff --git a/netbox/dcim/tables/racks.py b/netbox/dcim/tables/racks.py index 22ca3da90d3..a6b704161af 100644 --- a/netbox/dcim/tables/racks.py +++ b/netbox/dcim/tables/racks.py @@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from django_tables2.utils import Accessor -from dcim.models import Rack, RackReservation, RackRole +from dcim.models import Rack, RackReservation, RackRole, RackType from netbox.tables import NetBoxTable, columns from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from .template_code import WEIGHT @@ -11,6 +11,7 @@ __all__ = ( 'RackTable', 'RackReservationTable', 'RackRoleTable', + 'RackTypeTable', ) @@ -44,6 +45,65 @@ class RackRoleTable(NetBoxTable): default_columns = ('pk', 'name', 'rack_count', 'color', 'description') +# +# Rack Types +# + +class RackTypeTable(NetBoxTable): + model = tables.Column( + verbose_name=_('Model'), + linkify=True + ) + manufacturer = tables.Column( + verbose_name=_('Manufacturer'), + linkify=True + ) + u_height = tables.TemplateColumn( + template_code="{{ value }}U", + verbose_name=_('Height') + ) + outer_width = tables.TemplateColumn( + template_code="{{ record.outer_width }} {{ record.outer_unit }}", + verbose_name=_('Outer Width') + ) + outer_depth = tables.TemplateColumn( + template_code="{{ record.outer_depth }} {{ record.outer_unit }}", + verbose_name=_('Outer Depth') + ) + weight = columns.TemplateColumn( + verbose_name=_('Weight'), + template_code=WEIGHT, + order_by=('_abs_weight', 'weight_unit') + ) + max_weight = columns.TemplateColumn( + verbose_name=_('Max Weight'), + template_code=WEIGHT, + order_by=('_abs_max_weight', 'weight_unit') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments'), + ) + instance_count = columns.LinkedCountColumn( + viewname='dcim:rack_list', + url_params={'rack_type_id': 'pk'}, + verbose_name=_('Instances') + ) + tags = columns.TagColumn( + url_name='dcim:rack_list' + ) + + class Meta(NetBoxTable.Meta): + model = RackType + fields = ( + 'pk', 'id', 'model', 'manufacturer', 'form_factor', 'u_height', 'starting_unit', 'width', 'outer_width', + 'outer_depth', 'mounting_depth', 'airflow', 'weight', 'max_weight', 'description', 'comments', + 'instance_count', 'tags', 'created', 'last_updated', + ) + default_columns = ( + 'pk', 'model', 'manufacturer', 'type', 'u_height', 'description', 'instance_count', + ) + + # # Racks # @@ -68,6 +128,15 @@ class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): role = columns.ColoredLabelColumn( verbose_name=_('Role'), ) + manufacturer = tables.Column( + verbose_name=_('Manufacturer'), + accessor=Accessor('rack_type__manufacturer'), + linkify=True + ) + rack_type = tables.Column( + linkify=True, + verbose_name=_('Type') + ) u_height = tables.TemplateColumn( template_code="{{ value }}U", verbose_name=_('Height') @@ -113,14 +182,14 @@ class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class Meta(NetBoxTable.Meta): model = Rack fields = ( - 'pk', 'id', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'tenant_group', 'role', 'serial', - 'asset_tag', 'type', 'u_height', 'starting_unit', 'width', 'outer_width', 'outer_depth', 'mounting_depth', - 'weight', 'max_weight', 'comments', 'device_count', 'get_utilization', 'get_power_utilization', - 'description', 'contacts', 'tags', 'created', 'last_updated', + 'pk', 'id', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'tenant_group', 'role', + 'rack_type', 'serial', 'asset_tag', 'form_factor', 'u_height', 'starting_unit', 'width', 'outer_width', + 'outer_depth', 'mounting_depth', 'airflow', 'weight', 'max_weight', 'comments', 'device_count', + 'get_utilization', 'get_power_utilization', 'description', 'contacts', 'tags', 'created', 'last_updated', ) default_columns = ( - 'pk', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'role', 'u_height', 'device_count', - 'get_utilization', + 'pk', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'role', 'rack_type', 'u_height', + 'device_count', 'get_utilization', ) diff --git a/netbox/dcim/tables/sites.py b/netbox/dcim/tables/sites.py index e179ec43a87..77844f08622 100644 --- a/netbox/dcim/tables/sites.py +++ b/netbox/dcim/tables/sites.py @@ -99,6 +99,11 @@ class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): url_params={'site_id': 'pk'}, verbose_name=_('ASN Count') ) + device_count = columns.LinkedCountColumn( + viewname='dcim:device_list', + url_params={'site_id': 'pk'}, + verbose_name=_('Devices') + ) comments = columns.MarkdownColumn( verbose_name=_('Comments'), ) diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index d3134656ce6..96ab803e6a7 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -56,9 +56,13 @@ INTERFACE_FHRPGROUPS = """ INTERFACE_TAGGED_VLANS = """ {% if record.mode == 'tagged' %} + {% if value.count > 3 %} + {{ value.count }} VLANs + {% else %} {% for vlan in value.all %} {{ vlan }}
{% endfor %} + {% endif %} {% elif record.mode == 'tagged-all' %} All {% endif %} diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 52b850b244c..1b460cd591c 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -1,4 +1,3 @@ -from django.contrib.auth import get_user_model from django.test import override_settings from django.urls import reverse from django.utils.translation import gettext as _ @@ -11,15 +10,13 @@ from extras.models import ConfigTemplate from ipam.models import ASN, RIR, VLAN, VRF from netbox.api.serializers import GenericObjectSerializer from tenancy.models import Tenant +from users.models import User from utilities.testing import APITestCase, APIViewTestCases, create_test_device from virtualization.models import Cluster, ClusterType from wireless.choices import WirelessChannelChoices from wireless.models import WirelessLAN -User = get_user_model() - - class AppTest(APITestCase): def test_root(self): @@ -195,6 +192,7 @@ class LocationTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_site',) @classmethod def setUpTestData(cls): @@ -274,12 +272,58 @@ class RackRoleTest(APIViewTestCases.APIViewTestCase): RackRole.objects.bulk_create(rack_roles) +class RackTypeTest(APIViewTestCases.APIViewTestCase): + model = RackType + brief_fields = ['description', 'display', 'id', 'manufacturer', 'model', 'slug', 'url'] + bulk_update_data = { + 'description': 'new description', + } + user_permissions = ('dcim.view_manufacturer',) + + @classmethod + def setUpTestData(cls): + manufacturers = ( + Manufacturer(name='Manufacturer 1', slug='manufacturer-1'), + Manufacturer(name='Manufacturer 2', slug='manufacturer-2'), + ) + Manufacturer.objects.bulk_create(manufacturers) + + rack_types = ( + RackType(manufacturer=manufacturers[0], model='Rack Type 1', slug='rack-type-1', form_factor=RackFormFactorChoices.TYPE_CABINET,), + RackType(manufacturer=manufacturers[0], model='Rack Type 2', slug='rack-type-2', form_factor=RackFormFactorChoices.TYPE_CABINET,), + RackType(manufacturer=manufacturers[0], model='Rack Type 3', slug='rack-type-3', form_factor=RackFormFactorChoices.TYPE_CABINET,), + ) + RackType.objects.bulk_create(rack_types) + + cls.create_data = [ + { + 'manufacturer': manufacturers[1].pk, + 'model': 'Rack Type 4', + 'slug': 'rack-type-4', + 'form_factor': RackFormFactorChoices.TYPE_CABINET, + }, + { + 'manufacturer': manufacturers[1].pk, + 'model': 'Rack Type 5', + 'slug': 'rack-type-5', + 'form_factor': RackFormFactorChoices.TYPE_CABINET, + }, + { + 'manufacturer': manufacturers[1].pk, + 'model': 'Rack Type 6', + 'slug': 'rack-type-6', + 'form_factor': RackFormFactorChoices.TYPE_CABINET, + }, + ] + + class RackTest(APIViewTestCases.APIViewTestCase): model = Rack brief_fields = ['description', 'device_count', 'display', 'id', 'name', 'url'] bulk_update_data = { 'status': 'planned', } + user_permissions = ('dcim.view_site', ) @classmethod def setUpTestData(cls): @@ -368,6 +412,7 @@ class RackReservationTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_rack', 'users.view_user') @classmethod def setUpTestData(cls): @@ -447,6 +492,7 @@ class DeviceTypeTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'part_number': 'ABC123', } + user_permissions = ('dcim.view_manufacturer', ) @classmethod def setUpTestData(cls): @@ -492,6 +538,7 @@ class ModuleTypeTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'part_number': 'ABC123', } + user_permissions = ('dcim.view_manufacturer', ) @classmethod def setUpTestData(cls): @@ -663,6 +710,7 @@ class PowerOutletTemplateTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_devicetype', ) @classmethod def setUpTestData(cls): @@ -768,6 +816,7 @@ class FrontPortTemplateTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_rearporttemplate', ) @classmethod def setUpTestData(cls): @@ -905,6 +954,7 @@ class ModuleBayTemplateTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_devicetype', ) @classmethod def setUpTestData(cls): @@ -945,6 +995,7 @@ class DeviceBayTemplateTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_devicetype', ) @classmethod def setUpTestData(cls): @@ -985,6 +1036,7 @@ class InventoryItemTemplateTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_devicetype', 'dcim.view_manufacturer',) @classmethod def setUpTestData(cls): @@ -1103,6 +1155,10 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'status': 'failed', } + user_permissions = ( + 'dcim.view_site', 'dcim.view_rack', 'dcim.view_location', 'dcim.view_devicerole', 'dcim.view_devicetype', + 'extras.view_configtemplate', + ) @classmethod def setUpTestData(cls): @@ -1293,6 +1349,7 @@ class ModuleTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'serial': '1234ABCD', } + user_permissions = ('dcim.view_modulebay', 'dcim.view_moduletype', 'dcim.view_device') @classmethod def setUpTestData(cls): @@ -1314,7 +1371,8 @@ class ModuleTest(APIViewTestCases.APIViewTestCase): ModuleBay(device=device, name='Module Bay 5'), ModuleBay(device=device, name='Module Bay 6'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module(device=device, module_bay=module_bays[0], module_type=module_types[0]), @@ -1358,6 +1416,7 @@ class ConsolePortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCa 'description': 'New description', } peer_termination_type = ConsoleServerPort + user_permissions = ('dcim.view_device', ) @classmethod def setUpTestData(cls): @@ -1400,6 +1459,7 @@ class ConsoleServerPortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIView 'description': 'New description', } peer_termination_type = ConsolePort + user_permissions = ('dcim.view_device', ) @classmethod def setUpTestData(cls): @@ -1442,6 +1502,7 @@ class PowerPortTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase 'description': 'New description', } peer_termination_type = PowerOutlet + user_permissions = ('dcim.view_device', ) @classmethod def setUpTestData(cls): @@ -1481,6 +1542,7 @@ class PowerOutletTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCa 'description': 'New description', } peer_termination_type = PowerPort + user_permissions = ('dcim.view_device', ) @classmethod def setUpTestData(cls): @@ -1529,6 +1591,7 @@ class InterfaceTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase 'description': 'New description', } peer_termination_type = Interface + user_permissions = ('dcim.view_device', ) @classmethod def setUpTestData(cls): @@ -1663,6 +1726,7 @@ class FrontPortTest(APIViewTestCases.APIViewTestCase): 'description': 'New description', } peer_termination_type = Interface + user_permissions = ('dcim.view_device', 'dcim.view_rearport') @classmethod def setUpTestData(cls): @@ -1721,6 +1785,7 @@ class RearPortTest(APIViewTestCases.APIViewTestCase): 'description': 'New description', } peer_termination_type = Interface + user_permissions = ('dcim.view_device', ) @classmethod def setUpTestData(cls): @@ -1762,6 +1827,7 @@ class ModuleBayTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_device', ) @classmethod def setUpTestData(cls): @@ -1772,12 +1838,13 @@ class ModuleBayTest(APIViewTestCases.APIViewTestCase): device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1') device = Device.objects.create(device_type=device_type, role=role, name='Device 1', site=site) - device_bays = ( + module_bays = ( ModuleBay(device=device, name='Device Bay 1'), ModuleBay(device=device, name='Device Bay 2'), ModuleBay(device=device, name='Device Bay 3'), ) - ModuleBay.objects.bulk_create(device_bays) + for module_bay in module_bays: + module_bay.save() cls.create_data = [ { @@ -1801,6 +1868,7 @@ class DeviceBayTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_device', ) @classmethod def setUpTestData(cls): @@ -1864,6 +1932,7 @@ class InventoryItemTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'description': 'New description', } + user_permissions = ('dcim.view_device', 'dcim.view_manufacturer') @classmethod def setUpTestData(cls): @@ -2066,12 +2135,12 @@ class ConnectedDeviceTest(APITestCase): def test_get_connected_device(self): url = reverse('dcim-api:connected-device-list') - url_params = f'?peer_device=TestDevice1&peer_interface=eth0' + url_params = '?peer_device=TestDevice1&peer_interface=eth0' response = self.client.get(url + url_params, **self.header) self.assertHttpStatus(response, status.HTTP_200_OK) self.assertEqual(response.data['name'], 'TestDevice2') - url_params = f'?peer_device=TestDevice1&peer_interface=eth1' + url_params = '?peer_device=TestDevice1&peer_interface=eth1' response = self.client.get(url + url_params, **self.header) self.assertHttpStatus(response, status.HTTP_404_NOT_FOUND) @@ -2160,6 +2229,7 @@ class VirtualChassisTest(APIViewTestCases.APIViewTestCase): class PowerPanelTest(APIViewTestCases.APIViewTestCase): model = PowerPanel brief_fields = ['description', 'display', 'id', 'name', 'powerfeed_count', 'url'] + user_permissions = ('dcim.view_site', ) @classmethod def setUpTestData(cls): @@ -2212,6 +2282,7 @@ class PowerFeedTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'status': 'planned', } + user_permissions = ('dcim.view_powerpanel', ) @classmethod def setUpTestData(cls): diff --git a/netbox/dcim/tests/test_cablepaths.py b/netbox/dcim/tests/test_cablepaths.py index cd7b0e6d79a..f7c337bdf78 100644 --- a/netbox/dcim/tests/test_cablepaths.py +++ b/netbox/dcim/tests/test_cablepaths.py @@ -2060,6 +2060,49 @@ class CablePathTestCase(TestCase): # Test SVG generation CableTraceSVG(interface1).render() + def test_222_single_path_via_multiple_singleposition_rear_ports(self): + """ + [IF1] --C1-- [FP1] [RP1] --C2-- [IF2] + [FP2] [RP2] + """ + interface1 = Interface.objects.create(device=self.device, name='Interface 1') + interface2 = Interface.objects.create(device=self.device, name='Interface 2') + rearport1 = RearPort.objects.create(device=self.device, name='Rear Port 1', positions=1) + rearport2 = RearPort.objects.create(device=self.device, name='Rear Port 2', positions=1) + frontport1 = FrontPort.objects.create( + device=self.device, name='Front Port 1', rear_port=rearport1, rear_port_position=1 + ) + frontport2 = FrontPort.objects.create( + device=self.device, name='Front Port 2', rear_port=rearport2, rear_port_position=1 + ) + + cable1 = Cable( + a_terminations=[interface1], + b_terminations=[frontport1, frontport2] + ) + cable1.save() + self.assertEqual(CablePath.objects.count(), 1) + + cable2 = Cable( + a_terminations=[rearport1, rearport2], + b_terminations=[interface2] + ) + cable2.save() + self.assertEqual(CablePath.objects.count(), 2) + + self.assertPathExists( + (interface1, cable1, (frontport1, frontport2), (rearport1, rearport2), cable2, interface2), + is_complete=True + ) + self.assertPathExists( + (interface2, cable2, (rearport1, rearport2), (frontport1, frontport2), cable1, interface1), + is_complete=True + ) + + # Test SVG generation both directions + CableTraceSVG(interface1).render() + CableTraceSVG(interface2).render() + def test_301_create_path_via_existing_cable(self): """ [IF1] --C1-- [FP1] [RP1] --C2-- [RP2] [FP2] --C3-- [IF2] diff --git a/netbox/dcim/tests/test_filtersets.py b/netbox/dcim/tests/test_filtersets.py index df0dc7c7e4b..ae738b57f1f 100644 --- a/netbox/dcim/tests/test_filtersets.py +++ b/netbox/dcim/tests/test_filtersets.py @@ -1,4 +1,3 @@ -from django.contrib.auth import get_user_model from django.test import TestCase from circuits.models import Circuit, CircuitTermination, CircuitType, Provider @@ -6,14 +5,13 @@ from dcim.choices import * from dcim.filtersets import * from dcim.models import * from ipam.models import ASN, IPAddress, RIR, VRF -from netbox.choices import ColorChoices +from netbox.choices import ColorChoices, WeightUnitChoices from tenancy.models import Tenant, TenantGroup +from users.models import User from utilities.testing import ChangeLoggedFilterSetTests, create_test_device -from virtualization.models import Cluster, ClusterType +from virtualization.models import Cluster, ClusterType, ClusterGroup from wireless.choices import WirelessChannelChoices, WirelessRoleChoices -User = get_user_model() - class DeviceComponentFilterSetTests: @@ -32,11 +30,15 @@ class DeviceComponentFilterSetTests: params = {'device_type': [device_types[0].model, device_types[1].model]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - def test_role(self): + def test_device_role(self): role = DeviceRole.objects.all()[:2] - params = {'role_id': [role[0].pk, role[1].pk]} + params = {'device_role_id': [role[0].pk, role[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - params = {'role': [role[0].slug, role[1].slug]} + params = {'device_role': [role[0].slug, role[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_device_status(self): + params = {'device_status': ['active', 'planned']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -468,6 +470,152 @@ class RackRoleTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) +class RackTypeTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = RackType.objects.all() + filterset = RackTypeFilterSet + + @classmethod + def setUpTestData(cls): + manufacturers = ( + Manufacturer(name='Manufacturer 1', slug='manufacturer-1'), + Manufacturer(name='Manufacturer 2', slug='manufacturer-2'), + Manufacturer(name='Manufacturer 3', slug='manufacturer-3'), + ) + Manufacturer.objects.bulk_create(manufacturers) + + racks = ( + RackType( + manufacturer=manufacturers[0], + model='RackType 1', + slug='rack-type-1', + form_factor=RackFormFactorChoices.TYPE_2POST, + width=RackWidthChoices.WIDTH_19IN, + u_height=42, + starting_unit=1, + desc_units=False, + outer_width=100, + outer_depth=100, + outer_unit=RackDimensionUnitChoices.UNIT_MILLIMETER, + mounting_depth=100, + weight=10, + max_weight=1000, + weight_unit=WeightUnitChoices.UNIT_POUND, + description='foobar1', + ), + RackType( + manufacturer=manufacturers[1], + model='RackType 2', + slug='rack-type-2', + form_factor=RackFormFactorChoices.TYPE_4POST, + width=RackWidthChoices.WIDTH_21IN, + u_height=43, + starting_unit=2, + desc_units=False, + outer_width=200, + outer_depth=200, + outer_unit=RackDimensionUnitChoices.UNIT_MILLIMETER, + mounting_depth=200, + weight=20, + max_weight=2000, + weight_unit=WeightUnitChoices.UNIT_POUND, + description='foobar2', + ), + RackType( + manufacturer=manufacturers[2], + model='RackType 3', + slug='rack-type-3', + form_factor=RackFormFactorChoices.TYPE_CABINET, + width=RackWidthChoices.WIDTH_23IN, + u_height=44, + starting_unit=3, + desc_units=True, + outer_width=300, + outer_depth=300, + outer_unit=RackDimensionUnitChoices.UNIT_INCH, + mounting_depth=300, + weight=30, + max_weight=3000, + weight_unit=WeightUnitChoices.UNIT_KILOGRAM, + description='foobar3' + ), + ) + RackType.objects.bulk_create(racks) + + def test_q(self): + params = {'q': 'foobar1'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_manufacturer(self): + manufacturers = Manufacturer.objects.all()[:2] + params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_model(self): + params = {'model': ['RackType 1', 'RackType 2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_slug(self): + params = {'slug': ['rack-type-1', 'rack-type-2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_description(self): + params = {'description': ['foobar1', 'foobar2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_form_factor(self): + params = {'form_factor': [RackFormFactorChoices.TYPE_2POST, RackFormFactorChoices.TYPE_4POST]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_width(self): + params = {'width': [RackWidthChoices.WIDTH_19IN, RackWidthChoices.WIDTH_21IN]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_u_height(self): + params = {'u_height': [42, 43]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_starting_unit(self): + params = {'starting_unit': [1, 2]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_desc_units(self): + params = {'desc_units': 'true'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + params = {'desc_units': 'false'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_outer_width(self): + params = {'outer_width': [100, 200]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_outer_depth(self): + params = {'outer_depth': [100, 200]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_outer_unit(self): + self.assertEqual(RackType.objects.filter(outer_unit__isnull=False).count(), 3) + params = {'outer_unit': RackDimensionUnitChoices.UNIT_MILLIMETER} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_mounting_depth(self): + params = {'mounting_depth': [100, 200]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_weight(self): + params = {'weight': [10, 20]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_max_weight(self): + params = {'max_weight': [1000, 2000]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_weight_unit(self): + params = {'weight_unit': WeightUnitChoices.UNIT_POUND} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + class RackTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Rack.objects.all() filterset = RackFilterSet @@ -507,6 +655,53 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): for location in locations: location.save() + manufacturers = ( + Manufacturer(name='Manufacturer 1', slug='manufacturer-1'), + Manufacturer(name='Manufacturer 2', slug='manufacturer-2'), + Manufacturer(name='Manufacturer 3', slug='manufacturer-3'), + ) + Manufacturer.objects.bulk_create(manufacturers) + + rack_types = ( + RackType( + manufacturer=manufacturers[0], + model='RackType 1', + slug='rack-type-1', + form_factor=RackFormFactorChoices.TYPE_2POST, + width=RackWidthChoices.WIDTH_19IN, + u_height=42, + starting_unit=1, + desc_units=False, + outer_width=100, + outer_depth=100, + outer_unit=RackDimensionUnitChoices.UNIT_MILLIMETER, + mounting_depth=100, + weight=10, + max_weight=1000, + weight_unit=WeightUnitChoices.UNIT_POUND, + description='foobar1' + ), + RackType( + manufacturer=manufacturers[1], + model='RackType 2', + slug='rack-type-2', + form_factor=RackFormFactorChoices.TYPE_4POST, + width=RackWidthChoices.WIDTH_21IN, + u_height=43, + starting_unit=2, + desc_units=False, + outer_width=200, + outer_depth=200, + outer_unit=RackDimensionUnitChoices.UNIT_MILLIMETER, + mounting_depth=200, + weight=20, + max_weight=2000, + weight_unit=WeightUnitChoices.UNIT_POUND, + description='foobar2' + ), + ) + RackType.objects.bulk_create(rack_types) + rack_roles = ( RackRole(name='Rack Role 1', slug='rack-role-1'), RackRole(name='Rack Role 2', slug='rack-role-2'), @@ -540,7 +735,7 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): role=rack_roles[0], serial='ABC', asset_tag='1001', - type=RackTypeChoices.TYPE_2POST, + form_factor=RackFormFactorChoices.TYPE_2POST, width=RackWidthChoices.WIDTH_19IN, u_height=42, desc_units=False, @@ -550,7 +745,8 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): weight=10, max_weight=1000, weight_unit=WeightUnitChoices.UNIT_POUND, - description='foobar1' + description='foobar1', + airflow=RackAirflowChoices.FRONT_TO_REAR ), Rack( name='Rack 2', @@ -562,7 +758,7 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): role=rack_roles[1], serial='DEF', asset_tag='1002', - type=RackTypeChoices.TYPE_4POST, + form_factor=RackFormFactorChoices.TYPE_4POST, width=RackWidthChoices.WIDTH_21IN, u_height=43, desc_units=False, @@ -572,7 +768,8 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): weight=20, max_weight=2000, weight_unit=WeightUnitChoices.UNIT_POUND, - description='foobar2' + description='foobar2', + airflow=RackAirflowChoices.REAR_TO_FRONT ), Rack( name='Rack 3', @@ -584,7 +781,7 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): role=rack_roles[2], serial='GHI', asset_tag='1003', - type=RackTypeChoices.TYPE_CABINET, + form_factor=RackFormFactorChoices.TYPE_CABINET, width=RackWidthChoices.WIDTH_23IN, u_height=44, desc_units=True, @@ -596,6 +793,28 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): weight_unit=WeightUnitChoices.UNIT_KILOGRAM, description='foobar3' ), + Rack( + name='Rack 4', + facility_id='rack-4', + site=sites[2], + location=locations[2], + tenant=tenants[2], + status=RackStatusChoices.STATUS_PLANNED, + role=rack_roles[2], + rack_type=rack_types[0], + description='foobar4' + ), + Rack( + name='Rack 5', + facility_id='rack-5', + site=sites[2], + location=locations[2], + tenant=tenants[2], + status=RackStatusChoices.STATUS_PLANNED, + role=rack_roles[2], + rack_type=rack_types[1], + description='foobar5' + ), ) Rack.objects.bulk_create(racks) @@ -619,21 +838,21 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'description': ['foobar1', 'foobar2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - def test_type(self): - params = {'type': [RackTypeChoices.TYPE_2POST, RackTypeChoices.TYPE_4POST]} + def test_form_factor(self): + params = {'form_factor': [RackFormFactorChoices.TYPE_2POST, RackFormFactorChoices.TYPE_4POST]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_width(self): params = {'width': [RackWidthChoices.WIDTH_19IN, RackWidthChoices.WIDTH_21IN]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_u_height(self): params = {'u_height': [42, 43]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_starting_unit(self): params = {'starting_unit': [1]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) params = {'starting_unit': [2]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) @@ -641,7 +860,7 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'desc_units': 'true'} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) params = {'desc_units': 'false'} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_outer_width(self): params = {'outer_width': [100, 200]} @@ -652,7 +871,7 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_outer_unit(self): - self.assertEqual(Rack.objects.filter(outer_unit__isnull=False).count(), 3) + self.assertEqual(Rack.objects.filter(outer_unit__isnull=False).count(), 5) params = {'outer_unit': RackDimensionUnitChoices.UNIT_MILLIMETER} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -686,7 +905,7 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): def test_status(self): params = {'status': [RackStatusChoices.STATUS_ACTIVE, RackStatusChoices.STATUS_PLANNED]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_role(self): roles = RackRole.objects.all()[:2] @@ -727,6 +946,24 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'weight_unit': WeightUnitChoices.UNIT_POUND} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_manufacturer(self): + manufacturers = Manufacturer.objects.all()[:2] + params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_rack_type(self): + rack_types = RackType.objects.all()[:2] + params = {'rack_type_id': [rack_types[0].pk, rack_types[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'rack_type': [rack_types[0].slug, rack_types[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_airflow(self): + params = {'airflow': RackAirflowChoices.FRONT_TO_REAR} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + class RackReservationTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = RackReservation.objects.all() @@ -1149,7 +1386,8 @@ class ModuleTypeTestCase(TestCase, ChangeLoggedFilterSetTests): part_number='Part Number 1', weight=10, weight_unit=WeightUnitChoices.UNIT_POUND, - description='foobar1' + description='foobar1', + airflow=ModuleAirflowChoices.FRONT_TO_REAR ), ModuleType( manufacturer=manufacturers[1], @@ -1157,7 +1395,8 @@ class ModuleTypeTestCase(TestCase, ChangeLoggedFilterSetTests): part_number='Part Number 2', weight=20, weight_unit=WeightUnitChoices.UNIT_POUND, - description='foobar2' + description='foobar2', + airflow=ModuleAirflowChoices.REAR_TO_FRONT ), ModuleType( manufacturer=manufacturers[2], @@ -1268,6 +1507,10 @@ class ModuleTypeTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'weight_unit': WeightUnitChoices.UNIT_POUND} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_airflow(self): + params = {'airflow': RackAirflowChoices.FRONT_TO_REAR} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + class ConsolePortTemplateTestCase(TestCase, DeviceComponentTemplateFilterSetTests, ChangeLoggedFilterSetTests): queryset = ConsolePortTemplate.objects.all() @@ -1644,16 +1887,27 @@ class ModuleBayTemplateTestCase(TestCase, DeviceComponentTemplateFilterSetTests, ) DeviceType.objects.bulk_create(device_types) + module_types = ( + ModuleType(manufacturer=manufacturer, model='Module Type 1'), + ModuleType(manufacturer=manufacturer, model='Module Type 2'), + ) + ModuleType.objects.bulk_create(module_types) + ModuleBayTemplate.objects.bulk_create(( ModuleBayTemplate(device_type=device_types[0], name='Module Bay 1', description='foobar1'), - ModuleBayTemplate(device_type=device_types[1], name='Module Bay 2', description='foobar2'), - ModuleBayTemplate(device_type=device_types[2], name='Module Bay 3', description='foobar3'), + ModuleBayTemplate(device_type=device_types[1], name='Module Bay 2', description='foobar2', module_type=module_types[0]), + ModuleBayTemplate(device_type=device_types[2], name='Module Bay 3', description='foobar3', module_type=module_types[1]), )) def test_name(self): params = {'name': ['Module Bay 1', 'Module Bay 2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_module_type(self): + module_types = ModuleType.objects.all()[:2] + params = {'module_type_id': [module_types[0].pk, module_types[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + class DeviceBayTemplateTestCase(TestCase, DeviceComponentTemplateFilterSetTests, ChangeLoggedFilterSetTests): queryset = DeviceBayTemplate.objects.all() @@ -1959,10 +2213,16 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): Rack.objects.bulk_create(racks) cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') + cluster_groups = ( + ClusterGroup(name='Cluster Group 1', slug='cluster-group-1'), + ClusterGroup(name='Cluster Group 2', slug='cluster-group-2'), + ClusterGroup(name='Cluster Group 3', slug='cluster-group-3'), + ) + ClusterGroup.objects.bulk_create(cluster_groups) clusters = ( - Cluster(name='Cluster 1', type=cluster_type), - Cluster(name='Cluster 2', type=cluster_type), - Cluster(name='Cluster 3', type=cluster_type), + Cluster(name='Cluster 1', type=cluster_type, group=cluster_groups[0]), + Cluster(name='Cluster 2', type=cluster_type, group=cluster_groups[1]), + Cluster(name='Cluster 3', type=cluster_type, group=cluster_groups[2]), ) Cluster.objects.bulk_create(clusters) @@ -2076,10 +2336,8 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): FrontPort(device=devices[0], name='Front Port 1', type=PortTypeChoices.TYPE_8P8C, rear_port=rear_ports[0]), FrontPort(device=devices[1], name='Front Port 2', type=PortTypeChoices.TYPE_8P8C, rear_port=rear_ports[1]), )) - ModuleBay.objects.bulk_create(( - ModuleBay(device=devices[0], name='Module Bay 1'), - ModuleBay(device=devices[1], name='Module Bay 2'), - )) + ModuleBay.objects.create(device=devices[0], name='Module Bay 1') + ModuleBay.objects.create(device=devices[1], name='Module Bay 2') DeviceBay.objects.bulk_create(( DeviceBay(device=devices[0], name='Device Bay 1'), DeviceBay(device=devices[1], name='Device Bay 2'), @@ -2213,6 +2471,13 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'cluster_id': [clusters[0].pk, clusters[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_cluster_group(self): + cluster_groups = ClusterGroup.objects.all()[:2] + params = {'cluster_group_id': [cluster_groups[0].pk, cluster_groups[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'cluster_group': [cluster_groups[0].slug, cluster_groups[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_model(self): params = {'model': ['model-1', 'model-2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -2384,7 +2649,8 @@ class ModuleTestCase(TestCase, ChangeLoggedFilterSetTests): ModuleBay(device=devices[2], name='Module Bay 2'), ModuleBay(device=devices[2], name='Module Bay 3'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module( @@ -2575,10 +2841,10 @@ class ConsolePortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[0], role=roles[0], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), + Device(name=None, device_type=device_types[0], role=roles[0], site=sites[3], status='offline'), # For cable connections ) Device.objects.bulk_create(devices) @@ -2587,7 +2853,8 @@ class ConsolePortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF ModuleBay(device=devices[1], name='Module Bay 2'), ModuleBay(device=devices[2], name='Module Bay 3'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module(device=devices[0], module_bay=module_bays[0], module_type=module_type), @@ -2755,10 +3022,10 @@ class ConsoleServerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeL Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections ) Device.objects.bulk_create(devices) @@ -2767,7 +3034,8 @@ class ConsoleServerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeL ModuleBay(device=devices[1], name='Module Bay 2'), ModuleBay(device=devices[2], name='Module Bay 3'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module(device=devices[0], module_bay=module_bays[0], module_type=module_type), @@ -2935,10 +3203,10 @@ class PowerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections ) Device.objects.bulk_create(devices) @@ -2947,7 +3215,8 @@ class PowerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil ModuleBay(device=devices[1], name='Module Bay 2'), ModuleBay(device=devices[2], name='Module Bay 3'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module(device=devices[0], module_bay=module_bays[0], module_type=module_type), @@ -3123,10 +3392,10 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections ) Device.objects.bulk_create(devices) @@ -3135,7 +3404,8 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF ModuleBay(device=devices[1], name='Module Bay 2'), ModuleBay(device=devices[2], name='Module Bay 3'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module(device=devices[0], module_bay=module_bays[0], module_type=module_type), @@ -3151,9 +3421,9 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF PowerPort.objects.bulk_create(power_ports) power_outlets = ( - PowerOutlet(device=devices[0], module=modules[0], name='Power Outlet 1', label='A', feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A, description='First'), - PowerOutlet(device=devices[1], module=modules[1], name='Power Outlet 2', label='B', feed_leg=PowerOutletFeedLegChoices.FEED_LEG_B, description='Second'), - PowerOutlet(device=devices[2], module=modules[2], name='Power Outlet 3', label='C', feed_leg=PowerOutletFeedLegChoices.FEED_LEG_C, description='Third'), + PowerOutlet(device=devices[0], module=modules[0], name='Power Outlet 1', label='A', feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A, description='First', color='ff0000'), + PowerOutlet(device=devices[1], module=modules[1], name='Power Outlet 2', label='B', feed_leg=PowerOutletFeedLegChoices.FEED_LEG_B, description='Second', color='00ff00'), + PowerOutlet(device=devices[2], module=modules[2], name='Power Outlet 3', label='C', feed_leg=PowerOutletFeedLegChoices.FEED_LEG_C, description='Third', color='0000ff'), ) PowerOutlet.objects.bulk_create(power_outlets) @@ -3174,6 +3444,10 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF params = {'description': ['First', 'Second']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_color(self): + params = {'color': ['ff0000', '00ff00']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_feed_leg(self): params = {'feed_leg': [PowerOutletFeedLegChoices.FEED_LEG_A, PowerOutletFeedLegChoices.FEED_LEG_B]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -3321,7 +3595,8 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil rack=racks[0], virtual_chassis=virtual_chassis, vc_position=1, - vc_priority=1 + vc_priority=1, + status='active', ), Device( name='Device 1B', @@ -3332,7 +3607,8 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil rack=racks[2], virtual_chassis=virtual_chassis, vc_position=2, - vc_priority=1 + vc_priority=1, + status='planned', ), Device( name='Device 2', @@ -3340,7 +3616,8 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil role=roles[1], site=sites[1], location=locations[1], - rack=racks[1] + rack=racks[1], + status='offline', ), Device( name='Device 3', @@ -3348,14 +3625,16 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil role=roles[2], site=sites[2], location=locations[2], - rack=racks[2] + rack=racks[2], + status='offline', ), # For cable connections Device( name=None, device_type=device_types[2], role=roles[2], - site=sites[3] + site=sites[3], + status='offline', ), ) Device.objects.bulk_create(devices) @@ -3366,7 +3645,8 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil ModuleBay(device=devices[2], name='Module Bay 3'), ModuleBay(device=devices[3], name='Module Bay 4'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module(device=devices[0], module_bay=module_bays[0], module_type=module_type), @@ -3801,10 +4081,10 @@ class FrontPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections ) Device.objects.bulk_create(devices) @@ -3813,7 +4093,8 @@ class FrontPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil ModuleBay(device=devices[1], name='Module Bay 2'), ModuleBay(device=devices[2], name='Module Bay 3'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module(device=devices[0], module_bay=module_bays[0], module_type=module_type), @@ -3990,10 +4271,10 @@ class RearPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilt Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3]), # For cable connections + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), + Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections ) Device.objects.bulk_create(devices) @@ -4002,7 +4283,8 @@ class RearPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilt ModuleBay(device=devices[1], name='Module Bay 2'), ModuleBay(device=devices[2], name='Module Bay 3'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module(device=devices[0], module_bay=module_bays[0], module_type=module_type), @@ -4171,9 +4453,9 @@ class ModuleBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), ) Device.objects.bulk_create(devices) @@ -4181,8 +4463,22 @@ class ModuleBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil ModuleBay(device=devices[0], name='Module Bay 1', label='A', description='First'), ModuleBay(device=devices[1], name='Module Bay 2', label='B', description='Second'), ModuleBay(device=devices[2], name='Module Bay 3', label='C', description='Third'), + ModuleBay(device=devices[2], name='Module Bay 4', label='D', description='Fourth'), + ModuleBay(device=devices[2], name='Module Bay 5', label='E', description='Fifth'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() + + module_type = ModuleType.objects.create(manufacturer=manufacturer, model='Module Type 1') + modules = ( + Module(device=devices[0], module_bay=module_bays[0], module_type=module_type), + Module(device=devices[1], module_bay=module_bays[1], module_type=module_type), + ) + Module.objects.bulk_create(modules) + module_bays[3].module = modules[0] + module_bays[3].save() + module_bays[4].module = modules[1] + module_bays[4].save() def test_name(self): params = {'name': ['Module Bay 1', 'Module Bay 2']} @@ -4238,6 +4534,11 @@ class ModuleBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil params = {'device': [devices[0].name, devices[1].name]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_module(self): + modules = Module.objects.all()[:2] + params = {'module_id': [modules[0].pk, modules[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + class DeviceBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilterSetTests): queryset = DeviceBay.objects.all() @@ -4300,9 +4601,9 @@ class DeviceBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), + Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), + Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), ) Device.objects.bulk_create(devices) @@ -4454,9 +4755,9 @@ class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): ) inventory_items = ( - InventoryItem(device=devices[0], role=roles[0], manufacturer=manufacturers[0], name='Inventory Item 1', label='A', part_id='1001', serial='ABC', asset_tag='1001', discovered=True, description='First', component=components[0]), - InventoryItem(device=devices[1], role=roles[1], manufacturer=manufacturers[1], name='Inventory Item 2', label='B', part_id='1002', serial='DEF', asset_tag='1002', discovered=True, description='Second', component=components[1]), - InventoryItem(device=devices[2], role=roles[2], manufacturer=manufacturers[2], name='Inventory Item 3', label='C', part_id='1003', serial='GHI', asset_tag='1003', discovered=False, description='Third', component=components[2]), + InventoryItem(device=devices[0], role=roles[0], manufacturer=manufacturers[0], name='Inventory Item 1', label='A', part_id='1001', serial='ABC', asset_tag='1001', discovered=True, status=ModuleStatusChoices.STATUS_ACTIVE, description='First', component=components[0]), + InventoryItem(device=devices[1], role=roles[1], manufacturer=manufacturers[1], name='Inventory Item 2', label='B', part_id='1002', serial='DEF', asset_tag='1002', discovered=True, status=ModuleStatusChoices.STATUS_PLANNED, description='Second', component=components[1]), + InventoryItem(device=devices[2], role=roles[2], manufacturer=manufacturers[2], name='Inventory Item 3', label='C', part_id='1003', serial='GHI', asset_tag='1003', discovered=False, status=ModuleStatusChoices.STATUS_FAILED, description='Third', component=components[2]), ) for i in inventory_items: i.save() @@ -4534,11 +4835,11 @@ class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'device_type': [device_types[0].model, device_types[1].model]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) - def test_role(self): + def test_device_role(self): role = DeviceRole.objects.all()[:2] - params = {'role_id': [role[0].pk, role[1].pk]} + params = {'device_role_id': [role[0].pk, role[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) - params = {'role': [role[0].slug, role[1].slug]} + params = {'device_role': [role[0].slug, role[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_device(self): @@ -4577,6 +4878,10 @@ class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'component_type': 'dcim.interface'} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + def test_status(self): + params = {'status': [InventoryItemStatusChoices.STATUS_PLANNED, InventoryItemStatusChoices.STATUS_FAILED]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + class InventoryItemRoleTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = InventoryItemRole.objects.all() @@ -4943,6 +5248,10 @@ class CableTestCase(TestCase, ChangeLoggedFilterSetTests): def test_type(self): params = {'type': [CableTypeChoices.TYPE_CAT3, CableTypeChoices.TYPE_CAT5E]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + params = {'type__empty': 'true'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) + params = {'type__empty': 'false'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6) def test_status(self): params = {'status': [LinkStatusChoices.STATUS_CONNECTED]} diff --git a/netbox/dcim/tests/test_models.py b/netbox/dcim/tests/test_models.py index 9056a66c07f..c11badbdd43 100644 --- a/netbox/dcim/tests/test_models.py +++ b/netbox/dcim/tests/test_models.py @@ -6,6 +6,7 @@ from core.models import ObjectType from dcim.choices import * from dcim.models import * from extras.models import CustomField +from netbox.choices import WeightUnitChoices from tenancy.models import Tenant from utilities.data import drange from virtualization.models import Cluster, ClusterType @@ -74,6 +75,61 @@ class LocationTestCase(TestCase): self.assertEqual(PowerPanel.objects.get(pk=powerpanel1.pk).site, site_b) +class RackTypeTestCase(TestCase): + + @classmethod + def setUpTestData(cls): + manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') + + RackType.objects.create( + manufacturer=manufacturer, + model='RackType 1', + slug='rack-type-1', + width=11, + u_height=22, + starting_unit=3, + desc_units=True, + outer_width=444, + outer_depth=5, + outer_unit=RackDimensionUnitChoices.UNIT_MILLIMETER, + weight=66, + weight_unit=WeightUnitChoices.UNIT_POUND, + max_weight=7777, + mounting_depth=8, + ) + + def test_rack_creation(self): + rack_type = RackType.objects.first() + sites = ( + Site(name='Site 1', slug='site-1'), + ) + Site.objects.bulk_create(sites) + locations = ( + Location(name='Location 1', slug='location-1', site=sites[0]), + ) + for location in locations: + location.save() + + rack = Rack.objects.create( + name='Rack 1', + facility_id='A101', + site=sites[0], + location=locations[0], + rack_type=rack_type + ) + self.assertEqual(rack.width, rack_type.width) + self.assertEqual(rack.u_height, rack_type.u_height) + self.assertEqual(rack.starting_unit, rack_type.starting_unit) + self.assertEqual(rack.desc_units, rack_type.desc_units) + self.assertEqual(rack.outer_width, rack_type.outer_width) + self.assertEqual(rack.outer_depth, rack_type.outer_depth) + self.assertEqual(rack.outer_unit, rack_type.outer_unit) + self.assertEqual(rack.weight, rack_type.weight) + self.assertEqual(rack.weight_unit, rack_type.weight_unit) + self.assertEqual(rack.max_weight, rack_type.max_weight) + self.assertEqual(rack.mounting_depth, rack_type.mounting_depth) + + class RackTestCase(TestCase): @classmethod @@ -565,6 +621,96 @@ class DeviceTestCase(TestCase): Device(name='device1', site=sites[0], device_type=device_type, role=device_role, cluster=clusters[1]).full_clean() +class ModuleBayTestCase(TestCase): + + @classmethod + def setUpTestData(cls): + site = Site.objects.create(name='Test Site 1', slug='test-site-1') + manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') + device_type = DeviceType.objects.create( + manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1' + ) + device_role = DeviceRole.objects.create(name='Test Role 1', slug='test-role-1') + + # Create a CustomField with a default value & assign it to all component models + location = Location.objects.create(name='Location 1', slug='location-1', site=site) + rack = Rack.objects.create(name='Rack 1', site=site) + device = Device.objects.create(name='Device 1', device_type=device_type, role=device_role, site=site, location=location, rack=rack) + + module_bays = ( + ModuleBay(device=device, name='Module Bay 1', label='A', description='First'), + ModuleBay(device=device, name='Module Bay 2', label='B', description='Second'), + ModuleBay(device=device, name='Module Bay 3', label='C', description='Third'), + ) + for module_bay in module_bays: + module_bay.save() + + manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') + module_type = ModuleType.objects.create(manufacturer=manufacturer, model='Module Type 1') + modules = ( + Module(device=device, module_bay=module_bays[0], module_type=module_type), + Module(device=device, module_bay=module_bays[1], module_type=module_type), + Module(device=device, module_bay=module_bays[2], module_type=module_type), + ) + # M3 -> MB3 -> M2 -> MB2 -> M1 -> MB1 + Module.objects.bulk_create(modules) + module_bays[1].module = modules[0] + module_bays[1].clean() + module_bays[1].save() + module_bays[2].module = modules[1] + module_bays[2].clean() + module_bays[2].save() + + def test_module_bay_recursion(self): + module_bay_1 = ModuleBay.objects.get(name='Module Bay 1') + module_bay_3 = ModuleBay.objects.get(name='Module Bay 3') + module_1 = Module.objects.get(module_bay=module_bay_1) + module_3 = Module.objects.get(module_bay=module_bay_3) + + # Confirm error if ModuleBay recurses + with self.assertRaises(ValidationError): + module_bay_1.module = module_3 + module_bay_1.clean() + module_bay_1.save() + + # Confirm error if Module recurses + with self.assertRaises(ValidationError): + module_1.module_bay = module_bay_3 + module_1.clean() + module_1.save() + + def test_single_module_token(self): + device_type = DeviceType.objects.first() + device_role = DeviceRole.objects.first() + site = Site.objects.first() + location = Location.objects.first() + rack = Rack.objects.first() + + # Create DeviceType components + ConsolePortTemplate.objects.create( + device_type=device_type, + name='{module}', + label='{module}', + ) + ModuleBayTemplate.objects.create( + device_type=device_type, + name='Module Bay 1' + ) + + device = Device.objects.create( + name='Device 2', + device_type=device_type, + role=device_role, + site=site, + location=location, + rack=rack + ) + device.consoleports.first() + + def test_nested_module_token(self): + pass + + class CableTestCase(TestCase): @classmethod @@ -584,39 +730,41 @@ class CableTestCase(TestCase): device2 = Device.objects.create( device_type=devicetype, role=role, name='TestDevice2', site=site ) - interface1 = Interface.objects.create(device=device1, name='eth0') - interface2 = Interface.objects.create(device=device2, name='eth0') - interface3 = Interface.objects.create(device=device2, name='eth1') - Cable(a_terminations=[interface1], b_terminations=[interface2]).save() + interfaces = ( + Interface(device=device1, name='eth0'), + Interface(device=device2, name='eth0'), + Interface(device=device2, name='eth1'), + ) + Interface.objects.bulk_create(interfaces) + Cable(a_terminations=[interfaces[0]], b_terminations=[interfaces[1]]).save() + PowerPort.objects.create(device=device2, name='psu1') - power_port1 = PowerPort.objects.create(device=device2, name='psu1') - patch_pannel = Device.objects.create( + patch_panel = Device.objects.create( device_type=devicetype, role=role, name='TestPatchPanel', site=site ) - rear_port1 = RearPort.objects.create(device=patch_pannel, name='RP1', type='8p8c') - front_port1 = FrontPort.objects.create( - device=patch_pannel, name='FP1', type='8p8c', rear_port=rear_port1, rear_port_position=1 + rear_ports = ( + RearPort(device=patch_panel, name='RP1', type='8p8c'), + RearPort(device=patch_panel, name='RP2', type='8p8c', positions=2), + RearPort(device=patch_panel, name='RP3', type='8p8c', positions=3), + RearPort(device=patch_panel, name='RP4', type='8p8c', positions=3), ) - rear_port2 = RearPort.objects.create(device=patch_pannel, name='RP2', type='8p8c', positions=2) - front_port2 = FrontPort.objects.create( - device=patch_pannel, name='FP2', type='8p8c', rear_port=rear_port2, rear_port_position=1 - ) - rear_port3 = RearPort.objects.create(device=patch_pannel, name='RP3', type='8p8c', positions=3) - front_port3 = FrontPort.objects.create( - device=patch_pannel, name='FP3', type='8p8c', rear_port=rear_port3, rear_port_position=1 - ) - rear_port4 = RearPort.objects.create(device=patch_pannel, name='RP4', type='8p8c', positions=3) - front_port4 = FrontPort.objects.create( - device=patch_pannel, name='FP4', type='8p8c', rear_port=rear_port4, rear_port_position=1 + RearPort.objects.bulk_create(rear_ports) + front_ports = ( + FrontPort(device=patch_panel, name='FP1', type='8p8c', rear_port=rear_ports[0], rear_port_position=1), + FrontPort(device=patch_panel, name='FP2', type='8p8c', rear_port=rear_ports[1], rear_port_position=1), + FrontPort(device=patch_panel, name='FP3', type='8p8c', rear_port=rear_ports[2], rear_port_position=1), + FrontPort(device=patch_panel, name='FP4', type='8p8c', rear_port=rear_ports[3], rear_port_position=1), ) + FrontPort.objects.bulk_create(front_ports) + provider = Provider.objects.create(name='Provider 1', slug='provider-1') provider_network = ProviderNetwork.objects.create(name='Provider Network 1', provider=provider) circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') circuit1 = Circuit.objects.create(provider=provider, type=circuittype, cid='1') circuit2 = Circuit.objects.create(provider=provider, type=circuittype, cid='2') - circuittermination1 = CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='A') - circuittermination2 = CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='Z') - circuittermination3 = CircuitTermination.objects.create(circuit=circuit2, provider_network=provider_network, term_side='A') + CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='A') + CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='Z') + CircuitTermination.objects.create(circuit=circuit2, provider_network=provider_network, term_side='A') def test_cable_creation(self): """ diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py index ec85fc1d5f8..ca0db5588fb 100644 --- a/netbox/dcim/tests/test_views.py +++ b/netbox/dcim/tests/test_views.py @@ -2,7 +2,6 @@ from decimal import Decimal from zoneinfo import ZoneInfo import yaml -from django.contrib.auth import get_user_model from django.test import override_settings from django.urls import reverse from netaddr import EUI @@ -11,13 +10,12 @@ from dcim.choices import * from dcim.constants import * from dcim.models import * from ipam.models import ASN, RIR, VLAN, VRF -from netbox.choices import CSVDelimiterChoices, ImportFormatChoices +from netbox.choices import CSVDelimiterChoices, ImportFormatChoices, WeightUnitChoices from tenancy.models import Tenant +from users.models import User from utilities.testing import ViewTestCases, create_tags, create_test_device, post_data from wireless.models import WirelessLAN -User = get_user_model() - class RegionTestCase(ViewTestCases.OrganizationalObjectViewTestCase): model = Region @@ -336,6 +334,76 @@ class RackReservationTestCase(ViewTestCases.PrimaryObjectViewTestCase): } +class RackTypeTestCase(ViewTestCases.PrimaryObjectViewTestCase): + model = RackType + + @classmethod + def setUpTestData(cls): + manufacturers = ( + Manufacturer(name='Manufacturer 1', slug='manufacturer-1'), + Manufacturer(name='Manufacturer 2', slug='manufacturer-2'), + ) + Manufacturer.objects.bulk_create(manufacturers) + + rack_types = ( + RackType(manufacturer=manufacturers[0], model='RackType 1', slug='rack-type-1', form_factor=RackFormFactorChoices.TYPE_CABINET,), + RackType(manufacturer=manufacturers[0], model='RackType 2', slug='rack-type-2', form_factor=RackFormFactorChoices.TYPE_CABINET,), + RackType(manufacturer=manufacturers[0], model='RackType 3', slug='rack-type-3', form_factor=RackFormFactorChoices.TYPE_CABINET,), + ) + RackType.objects.bulk_create(rack_types) + + tags = create_tags('Alpha', 'Bravo', 'Charlie') + + cls.form_data = { + 'manufacturer': manufacturers[1].pk, + 'model': 'RackType X', + 'slug': 'rack-type-x', + 'type': RackFormFactorChoices.TYPE_CABINET, + 'width': RackWidthChoices.WIDTH_19IN, + 'u_height': 48, + 'desc_units': False, + 'outer_width': 500, + 'outer_depth': 500, + 'outer_unit': RackDimensionUnitChoices.UNIT_MILLIMETER, + 'starting_unit': 1, + 'weight': 100, + 'max_weight': 2000, + 'weight_unit': WeightUnitChoices.UNIT_POUND, + 'form_factor': RackFormFactorChoices.TYPE_CABINET, + 'comments': 'Some comments', + 'tags': [t.pk for t in tags], + } + + cls.csv_data = ( + "manufacturer,model,slug,width,u_height,weight,max_weight,weight_unit", + "Manufacturer 1,RackType 4,rack-type-4,19,42,100,2000,kg", + "Manufacturer 1,RackType 5,rack-type-5,19,42,100,2000,kg", + "Manufacturer 1,RackType 6,rack-type-6,19,42,100,2000,kg", + ) + + cls.csv_update_data = ( + "id,model", + f"{rack_types[0].pk},RackType 7", + f"{rack_types[1].pk},RackType 8", + f"{rack_types[2].pk},RackType 9", + ) + + cls.bulk_edit_data = { + 'manufacturer': manufacturers[1].pk, + 'type': RackFormFactorChoices.TYPE_4POST, + 'width': RackWidthChoices.WIDTH_23IN, + 'u_height': 49, + 'desc_units': True, + 'outer_width': 30, + 'outer_depth': 30, + 'outer_unit': RackDimensionUnitChoices.UNIT_INCH, + 'weight': 200, + 'max_weight': 4000, + 'weight_unit': WeightUnitChoices.UNIT_POUND, + 'comments': 'New comments', + } + + class RackTestCase(ViewTestCases.PrimaryObjectViewTestCase): model = Rack @@ -380,7 +448,7 @@ class RackTestCase(ViewTestCases.PrimaryObjectViewTestCase): 'role': rackroles[1].pk, 'serial': '123456', 'asset_tag': 'ABCDEF', - 'type': RackTypeChoices.TYPE_CABINET, + 'form_factor': RackFormFactorChoices.TYPE_CABINET, 'width': RackWidthChoices.WIDTH_19IN, 'u_height': 48, 'desc_units': False, @@ -416,7 +484,7 @@ class RackTestCase(ViewTestCases.PrimaryObjectViewTestCase): 'status': RackStatusChoices.STATUS_DEPRECATED, 'role': rackroles[1].pk, 'serial': '654321', - 'type': RackTypeChoices.TYPE_4POST, + 'form_factor': RackFormFactorChoices.TYPE_4POST, 'width': RackWidthChoices.WIDTH_23IN, 'u_height': 49, 'desc_units': True, @@ -1832,12 +1900,9 @@ class DeviceTestCase(ViewTestCases.PrimaryObjectViewTestCase): @override_settings(EXEMPT_VIEW_PERMISSIONS=['*']) def test_device_modulebays(self): device = Device.objects.first() - device_bays = ( - ModuleBay(device=device, name='Module Bay 1'), - ModuleBay(device=device, name='Module Bay 2'), - ModuleBay(device=device, name='Module Bay 3'), - ) - ModuleBay.objects.bulk_create(device_bays) + ModuleBay.objects.create(device=device, name='Module Bay 1') + ModuleBay.objects.create(device=device, name='Module Bay 2') + ModuleBay.objects.create(device=device, name='Module Bay 3') url = reverse('dcim:device_modulebays', kwargs={'pk': device.pk}) self.assertHttpStatus(self.client.get(url), 200) @@ -1913,7 +1978,8 @@ class ModuleTestCase( ModuleBay(device=devices[1], name='Module Bay 4'), ModuleBay(device=devices[1], name='Module Bay 5'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() modules = ( Module(device=devices[0], module_bay=module_bays[0], module_type=module_types[0]), @@ -2505,7 +2571,7 @@ class InterfaceTestCase(ViewTestCases.DeviceComponentViewTestCase): } cls.csv_data = ( - f"device,name,type,vrf.pk,poe_mode,poe_type", + "device,name,type,vrf.pk,poe_mode,poe_type", f"Device 1,Interface 4,1000base-t,{vrfs[0].pk},pse,type1-ieee802.3af", f"Device 1,Interface 5,1000base-t,{vrfs[0].pk},pse,type1-ieee802.3af", f"Device 1,Interface 6,1000base-t,{vrfs[0].pk},pse,type1-ieee802.3af", @@ -2715,7 +2781,8 @@ class ModuleBayTestCase(ViewTestCases.DeviceComponentViewTestCase): ModuleBay(device=device, name='Module Bay 2'), ModuleBay(device=device, name='Module Bay 3'), ) - ModuleBay.objects.bulk_create(module_bays) + for module_bay in module_bays: + module_bay.save() tags = create_tags('Alpha', 'Bravo', 'Charlie') @@ -2836,6 +2903,7 @@ class InventoryItemTestCase(ViewTestCases.DeviceComponentViewTestCase): 'part_id': '123456', 'serial': '123ABC', 'asset_tag': 'ABC123', + 'status': InventoryItemStatusChoices.STATUS_ACTIVE, 'description': 'An inventory item', 'tags': [t.pk for t in tags], } @@ -2849,6 +2917,7 @@ class InventoryItemTestCase(ViewTestCases.DeviceComponentViewTestCase): 'discovered': False, 'part_id': '123456', 'serial': '123ABC', + 'status': InventoryItemStatusChoices.STATUS_ACTIVE, 'description': 'An inventory item', 'tags': [t.pk for t in tags], } @@ -2860,10 +2929,10 @@ class InventoryItemTestCase(ViewTestCases.DeviceComponentViewTestCase): } cls.csv_data = ( - "device,name,parent", - "Device 1,Inventory Item 4,Inventory Item 1", - "Device 1,Inventory Item 5,Inventory Item 2", - "Device 1,Inventory Item 6,Inventory Item 3", + "device,name,parent,status", + "Device 1,Inventory Item 4,Inventory Item 1,active", + "Device 1,Inventory Item 5,Inventory Item 2,planned", + "Device 1,Inventory Item 6,Inventory Item 3,failed", ) cls.csv_update_data = ( diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index c71a0aff136..627136bf96c 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -63,6 +63,14 @@ urlpatterns = [ path('racks/delete/', views.RackBulkDeleteView.as_view(), name='rack_bulk_delete'), path('racks//', include(get_model_urls('dcim', 'rack'))), + # Rack Types + path('rack-types/', views.RackTypeListView.as_view(), name='racktype_list'), + path('rack-types/add/', views.RackTypeEditView.as_view(), name='racktype_add'), + path('rack-types/import/', views.RackTypeBulkImportView.as_view(), name='racktype_import'), + path('rack-types/edit/', views.RackTypeBulkEditView.as_view(), name='racktype_bulk_edit'), + path('rack-types/delete/', views.RackTypeBulkDeleteView.as_view(), name='racktype_bulk_delete'), + path('rack-types//', include(get_model_urls('dcim', 'racktype'))), + # Manufacturers path('manufacturers/', views.ManufacturerListView.as_view(), name='manufacturer_list'), path('manufacturers/add/', views.ManufacturerEditView.as_view(), name='manufacturer_add'), diff --git a/netbox/dcim/utils.py b/netbox/dcim/utils.py index eadd2da9694..4d42284908c 100644 --- a/netbox/dcim/utils.py +++ b/netbox/dcim/utils.py @@ -1,5 +1,3 @@ -import itertools - from django.contrib.contenttypes.models import ContentType from django.db import transaction diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 87f351e4d07..98665a7a08d 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -31,6 +31,7 @@ from utilities.views import ( GetRelatedModelsMixin, GetReturnURLMixin, ObjectPermissionRequiredMixin, ViewTab, register_model_view ) from virtualization.filtersets import VirtualMachineFilterSet +from virtualization.forms import VirtualMachineFilterForm from virtualization.models import VirtualMachine from virtualization.tables import VirtualMachineTable from . import filtersets, forms, tables @@ -379,7 +380,9 @@ class SiteGroupContactsView(ObjectContactsView): # class SiteListView(generic.ObjectListView): - queryset = Site.objects.all() + queryset = Site.objects.annotate( + device_count=count_related(Device, 'site') + ) filterset = filtersets.SiteFilterSet filterset_form = forms.SiteFilterForm table = tables.SiteTable @@ -578,6 +581,58 @@ class RackRoleBulkDeleteView(generic.BulkDeleteView): table = tables.RackRoleTable +# +# RackTypes +# + +class RackTypeListView(generic.ObjectListView): + queryset = RackType.objects.annotate( + instance_count=count_related(Rack, 'rack_type') + ) + filterset = filtersets.RackTypeFilterSet + filterset_form = forms.RackTypeFilterForm + table = tables.RackTypeTable + + +@register_model_view(RackType) +class RackTypeView(GetRelatedModelsMixin, generic.ObjectView): + queryset = RackType.objects.all() + + def get_extra_context(self, request, instance): + return { + 'related_models': self.get_related_models(request, instance), + } + + +@register_model_view(RackType, 'edit') +class RackTypeEditView(generic.ObjectEditView): + queryset = RackType.objects.all() + form = forms.RackTypeForm + + +@register_model_view(RackType, 'delete') +class RackTypeDeleteView(generic.ObjectDeleteView): + queryset = RackType.objects.all() + + +class RackTypeBulkImportView(generic.BulkImportView): + queryset = RackType.objects.all() + model_form = forms.RackTypeImportForm + + +class RackTypeBulkEditView(generic.BulkEditView): + queryset = RackType.objects.all() + filterset = filtersets.RackTypeFilterSet + table = tables.RackTypeTable + form = forms.RackTypeBulkEditForm + + +class RackTypeBulkDeleteView(generic.BulkDeleteView): + queryset = RackType.objects.all() + filterset = filtersets.RackTypeFilterSet + table = tables.RackTypeTable + + # # Racks # @@ -679,6 +734,7 @@ class RackRackReservationsView(generic.ObjectChildrenView): child_model = RackReservation table = tables.RackReservationTable filterset = filtersets.RackReservationFilterSet + filterset_form = forms.RackReservationFilterForm template_name = 'dcim/rack/reservations.html' tab = ViewTab( label=_('Reservations'), @@ -697,6 +753,7 @@ class RackNonRackedView(generic.ObjectChildrenView): child_model = Device table = tables.DeviceTable filterset = filtersets.DeviceFilterSet + filterset_form = forms.DeviceFilterForm template_name = 'dcim/rack/non_racked_devices.html' tab = ViewTab( label=_('Non-Racked Devices'), @@ -1259,6 +1316,21 @@ class ModuleTypeRearPortsView(ModuleTypeComponentsView): ) +@register_model_view(ModuleType, 'modulebays', path='module-bays') +class ModuleTypeModuleBaysView(ModuleTypeComponentsView): + child_model = ModuleBayTemplate + table = tables.ModuleBayTemplateTable + filterset = filtersets.ModuleBayTemplateFilterSet + viewname = 'dcim:moduletype_modulebays' + tab = ViewTab( + label=_('Module Bays'), + badge=lambda obj: obj.modulebaytemplates.count(), + permission='dcim.view_modulebaytemplate', + weight=570, + hide_if_empty=True + ) + + class ModuleTypeImportView(generic.BulkImportView): additional_permissions = [ 'dcim.add_moduletype', @@ -1835,6 +1907,7 @@ class DeviceConsolePortsView(DeviceComponentsView): child_model = ConsolePort table = tables.DeviceConsolePortTable filterset = filtersets.ConsolePortFilterSet + filterset_form = forms.ConsolePortFilterForm template_name = 'dcim/device/consoleports.html', tab = ViewTab( label=_('Console Ports'), @@ -1850,6 +1923,7 @@ class DeviceConsoleServerPortsView(DeviceComponentsView): child_model = ConsoleServerPort table = tables.DeviceConsoleServerPortTable filterset = filtersets.ConsoleServerPortFilterSet + filterset_form = forms.ConsoleServerPortFilterForm template_name = 'dcim/device/consoleserverports.html' tab = ViewTab( label=_('Console Server Ports'), @@ -1865,6 +1939,7 @@ class DevicePowerPortsView(DeviceComponentsView): child_model = PowerPort table = tables.DevicePowerPortTable filterset = filtersets.PowerPortFilterSet + filterset_form = forms.PowerPortFilterForm template_name = 'dcim/device/powerports.html' tab = ViewTab( label=_('Power Ports'), @@ -1880,6 +1955,7 @@ class DevicePowerOutletsView(DeviceComponentsView): child_model = PowerOutlet table = tables.DevicePowerOutletTable filterset = filtersets.PowerOutletFilterSet + filterset_form = forms.PowerOutletFilterForm template_name = 'dcim/device/poweroutlets.html' tab = ViewTab( label=_('Power Outlets'), @@ -1895,6 +1971,7 @@ class DeviceInterfacesView(DeviceComponentsView): child_model = Interface table = tables.DeviceInterfaceTable filterset = filtersets.InterfaceFilterSet + filterset_form = forms.InterfaceFilterForm template_name = 'dcim/device/interfaces.html' tab = ViewTab( label=_('Interfaces'), @@ -1916,6 +1993,7 @@ class DeviceFrontPortsView(DeviceComponentsView): child_model = FrontPort table = tables.DeviceFrontPortTable filterset = filtersets.FrontPortFilterSet + filterset_form = forms.FrontPortFilterForm template_name = 'dcim/device/frontports.html' tab = ViewTab( label=_('Front Ports'), @@ -1931,6 +2009,7 @@ class DeviceRearPortsView(DeviceComponentsView): child_model = RearPort table = tables.DeviceRearPortTable filterset = filtersets.RearPortFilterSet + filterset_form = forms.RearPortFilterForm template_name = 'dcim/device/rearports.html' tab = ViewTab( label=_('Rear Ports'), @@ -1946,6 +2025,7 @@ class DeviceModuleBaysView(DeviceComponentsView): child_model = ModuleBay table = tables.DeviceModuleBayTable filterset = filtersets.ModuleBayFilterSet + filterset_form = forms.ModuleBayFilterForm template_name = 'dcim/device/modulebays.html' actions = { **DEFAULT_ACTION_PERMISSIONS, @@ -1965,6 +2045,7 @@ class DeviceDeviceBaysView(DeviceComponentsView): child_model = DeviceBay table = tables.DeviceDeviceBayTable filterset = filtersets.DeviceBayFilterSet + filterset_form = forms.DeviceBayFilterForm template_name = 'dcim/device/devicebays.html' actions = { **DEFAULT_ACTION_PERMISSIONS, @@ -1984,6 +2065,7 @@ class DeviceInventoryView(DeviceComponentsView): child_model = InventoryItem table = tables.DeviceInventoryItemTable filterset = filtersets.InventoryItemFilterSet + filterset_form = forms.InventoryItemFilterForm template_name = 'dcim/device/inventory.html' actions = { **DEFAULT_ACTION_PERMISSIONS, @@ -2046,7 +2128,7 @@ class DeviceRenderConfigView(generic.ObjectView): try: rendered_config = config_template.render(context=context_data) except TemplateError as e: - messages.error(request, f"An error occurred while rendering the template: {e}") + messages.error(request, _("An error occurred while rendering the template: {error}").format(error=e)) rendered_config = traceback.format_exc() return { @@ -2062,6 +2144,7 @@ class DeviceVirtualMachinesView(generic.ObjectChildrenView): child_model = VirtualMachine table = VirtualMachineTable filterset = VirtualMachineFilterSet + filterset_form = VirtualMachineFilterForm tab = ViewTab( label=_('Virtual Machines'), badge=lambda obj: VirtualMachine.objects.filter(cluster=obj.cluster, device=obj).count(), @@ -2809,7 +2892,13 @@ class DeviceBayPopulateView(generic.ObjectEditView): device_bay.snapshot() device_bay.installed_device = form.cleaned_data['installed_device'] device_bay.save() - messages.success(request, "Added {} to {}.".format(device_bay.installed_device, device_bay)) + messages.success( + request, + _("Installed device {device} in bay {device_bay}.").format( + device=device_bay.installed_device, + device_bay=device_bay + ) + ) return_url = self.get_return_url(request) return redirect(return_url) @@ -2844,7 +2933,13 @@ class DeviceBayDepopulateView(generic.ObjectEditView): removed_device = device_bay.installed_device device_bay.installed_device = None device_bay.save() - messages.success(request, f"{removed_device} has been removed from {device_bay}.") + messages.success( + request, + _("Removed device {device} from bay {device_bay}.").format( + device=removed_device, + device_bay=device_bay + ) + ) return_url = self.get_return_url(request, device_bay.device) return redirect(return_url) @@ -2944,6 +3039,7 @@ class InventoryItemChildrenView(generic.ObjectChildrenView): child_model = InventoryItem table = tables.InventoryItemTable filterset = filtersets.InventoryItemFilterSet + filterset_form = forms.InventoryItemFilterForm tab = ViewTab( label=_('Children'), badge=lambda obj: obj.child_items.count(), @@ -3157,10 +3253,10 @@ class CableEditView(generic.ObjectEditView): doesn't currently provide a hook for dynamic class resolution. """ a_terminations_type = CABLE_TERMINATION_TYPES.get( - request.GET.get('a_terminations_type') or request.POST.get('a_terminations_type') + request.POST.get('a_terminations_type') or request.GET.get('a_terminations_type') ) b_terminations_type = CABLE_TERMINATION_TYPES.get( - request.GET.get('b_terminations_type') or request.POST.get('b_terminations_type') + request.POST.get('b_terminations_type') or request.GET.get('b_terminations_type') ) if obj.pk: @@ -3411,7 +3507,7 @@ class VirtualChassisAddMemberView(ObjectPermissionRequiredMixin, GetReturnURLMix membership_form.save() messages.success(request, mark_safe( - f'Added member {escape(device)}' + _('Added member {device}').format(url=device.get_absolute_url(), device=escape(device)) )) if '_addanother' in request.POST: @@ -3456,7 +3552,10 @@ class VirtualChassisRemoveMemberView(ObjectPermissionRequiredMixin, GetReturnURL # Protect master device from being removed virtual_chassis = VirtualChassis.objects.filter(master=device).first() if virtual_chassis is not None: - messages.error(request, f'Unable to remove master device {device} from the virtual chassis.') + messages.error( + request, + _('Unable to remove master device {device} from the virtual chassis.').format(device=device) + ) return redirect(device.get_absolute_url()) if form.is_valid(): @@ -3468,7 +3567,10 @@ class VirtualChassisRemoveMemberView(ObjectPermissionRequiredMixin, GetReturnURL device.vc_priority = None device.save() - msg = 'Removed {} from virtual chassis {}'.format(device, device.virtual_chassis) + msg = _('Removed {device} from virtual chassis {chassis}').format( + device=device, + chassis=device.virtual_chassis + ) messages.success(request, msg) return redirect(self.get_return_url(request, device)) diff --git a/netbox/extras/api/nested_serializers.py b/netbox/extras/api/nested_serializers.py index 3904493c08a..235cdd6d61d 100644 --- a/netbox/extras/api/nested_serializers.py +++ b/netbox/extras/api/nested_serializers.py @@ -1,3 +1,5 @@ +import warnings + from rest_framework import serializers from extras import models @@ -20,6 +22,12 @@ __all__ = [ 'NestedWebhookSerializer', ] +# TODO: Remove in v4.2 +warnings.warn( + "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", + DeprecationWarning +) + class NestedEventRuleSerializer(WritableNestedSerializer): diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index ddd13815a98..5e799b504e3 100644 --- a/netbox/extras/api/serializers.py +++ b/netbox/extras/api/serializers.py @@ -7,9 +7,9 @@ from .serializers_.dashboard import * from .serializers_.events import * from .serializers_.exporttemplates import * from .serializers_.journaling import * +from .serializers_.notifications import * from .serializers_.configcontexts import * from .serializers_.configtemplates import * from .serializers_.savedfilters import * from .serializers_.scripts import * from .serializers_.tags import * -from .nested_serializers import * diff --git a/netbox/extras/api/serializers_/attachments.py b/netbox/extras/api/serializers_/attachments.py index 0c6ce1f3ad1..fe0964eae4d 100644 --- a/netbox/extras/api/serializers_/attachments.py +++ b/netbox/extras/api/serializers_/attachments.py @@ -18,6 +18,8 @@ class ImageAttachmentSerializer(ValidatedModelSerializer): queryset=ObjectType.objects.all() ) parent = serializers.SerializerMethodField(read_only=True) + image_width = serializers.IntegerField(read_only=True) + image_height = serializers.IntegerField(read_only=True) class Meta: model = ImageAttachment diff --git a/netbox/extras/api/serializers_/configtemplates.py b/netbox/extras/api/serializers_/configtemplates.py index 30d2fb46856..c4a683c742f 100644 --- a/netbox/extras/api/serializers_/configtemplates.py +++ b/netbox/extras/api/serializers_/configtemplates.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from core.api.serializers_.data import DataFileSerializer, DataSourceSerializer from extras.models import ConfigTemplate from netbox.api.serializers import ValidatedModelSerializer diff --git a/netbox/extras/api/serializers_/customfields.py b/netbox/extras/api/serializers_/customfields.py index 9675cb173cb..a65fafc4e91 100644 --- a/netbox/extras/api/serializers_/customfields.py +++ b/netbox/extras/api/serializers_/customfields.py @@ -61,9 +61,10 @@ class CustomFieldSerializer(ValidatedModelSerializer): model = CustomField fields = [ 'id', 'url', 'display_url', 'display', 'object_types', 'type', 'related_object_type', 'data_type', - 'name', 'label', 'group_name', 'description', 'required', 'search_weight', 'filter_logic', 'ui_visible', - 'ui_editable', 'is_cloneable', 'default', 'weight', 'validation_minimum', 'validation_maximum', - 'validation_regex', 'validation_unique', 'choice_set', 'comments', 'created', 'last_updated', + 'name', 'label', 'group_name', 'description', 'required', 'unique', 'search_weight', 'filter_logic', + 'ui_visible', 'ui_editable', 'is_cloneable', 'default', 'related_object_filter', 'weight', + 'validation_minimum', 'validation_maximum', 'validation_regex', 'choice_set', 'comments', 'created', + 'last_updated', ] brief_fields = ('id', 'url', 'display', 'name', 'description') diff --git a/netbox/extras/api/serializers_/customlinks.py b/netbox/extras/api/serializers_/customlinks.py index 6391e047139..8cc4f5f77f5 100644 --- a/netbox/extras/api/serializers_/customlinks.py +++ b/netbox/extras/api/serializers_/customlinks.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from core.models import ObjectType from extras.models import CustomLink from netbox.api.fields import ContentTypeField diff --git a/netbox/extras/api/serializers_/events.py b/netbox/extras/api/serializers_/events.py index 6af30e70742..926259cf3a8 100644 --- a/netbox/extras/api/serializers_/events.py +++ b/netbox/extras/api/serializers_/events.py @@ -34,9 +34,9 @@ class EventRuleSerializer(NetBoxModelSerializer): class Meta: model = EventRule fields = [ - 'id', 'url', 'display_url', 'display', 'object_types', 'name', 'type_create', 'type_update', 'type_delete', - 'type_job_start', 'type_job_end', 'enabled', 'conditions', 'action_type', 'action_object_type', - 'action_object_id', 'action_object', 'description', 'custom_fields', 'tags', 'created', 'last_updated', + 'id', 'url', 'display_url', 'display', 'object_types', 'name', 'enabled', 'event_types', 'conditions', + 'action_type', 'action_object_type', 'action_object_id', 'action_object', 'description', 'custom_fields', + 'tags', 'created', 'last_updated', ] brief_fields = ('id', 'url', 'display', 'name', 'description') diff --git a/netbox/extras/api/serializers_/exporttemplates.py b/netbox/extras/api/serializers_/exporttemplates.py index faef9bb9ef2..11f502a02b9 100644 --- a/netbox/extras/api/serializers_/exporttemplates.py +++ b/netbox/extras/api/serializers_/exporttemplates.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from core.api.serializers_.data import DataFileSerializer, DataSourceSerializer from core.models import ObjectType from extras.models import ExportTemplate diff --git a/netbox/extras/api/serializers_/journaling.py b/netbox/extras/api/serializers_/journaling.py index 4afd3e70acc..cba56fc32fc 100644 --- a/netbox/extras/api/serializers_/journaling.py +++ b/netbox/extras/api/serializers_/journaling.py @@ -1,4 +1,3 @@ -from django.contrib.auth import get_user_model from django.core.exceptions import ObjectDoesNotExist from drf_spectacular.utils import extend_schema_field from rest_framework import serializers @@ -8,6 +7,7 @@ from extras.choices import * from extras.models import JournalEntry from netbox.api.fields import ChoiceField, ContentTypeField from netbox.api.serializers import NetBoxModelSerializer +from users.models import User from utilities.api import get_serializer_for_model __all__ = ( @@ -22,7 +22,7 @@ class JournalEntrySerializer(NetBoxModelSerializer): assigned_object = serializers.SerializerMethodField(read_only=True) created_by = serializers.PrimaryKeyRelatedField( allow_null=True, - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), required=False, default=serializers.CurrentUserDefault() ) diff --git a/netbox/extras/api/serializers_/notifications.py b/netbox/extras/api/serializers_/notifications.py new file mode 100644 index 00000000000..62e1a8d635e --- /dev/null +++ b/netbox/extras/api/serializers_/notifications.py @@ -0,0 +1,82 @@ +from drf_spectacular.utils import extend_schema_field +from rest_framework import serializers + +from core.models import ObjectType +from extras.models import Notification, NotificationGroup, Subscription +from netbox.api.fields import ContentTypeField, SerializedPKRelatedField +from netbox.api.serializers import ValidatedModelSerializer +from users.api.serializers_.users import GroupSerializer, UserSerializer +from users.models import Group, User +from utilities.api import get_serializer_for_model + +__all__ = ( + 'NotificationSerializer', + 'NotificationGroupSerializer', + 'SubscriptionSerializer', +) + + +class NotificationSerializer(ValidatedModelSerializer): + object_type = ContentTypeField( + queryset=ObjectType.objects.with_feature('notifications'), + ) + object = serializers.SerializerMethodField(read_only=True) + user = UserSerializer(nested=True) + + class Meta: + model = Notification + fields = [ + 'id', 'url', 'display', 'object_type', 'object_id', 'object', 'user', 'created', 'read', 'event_type', + ] + brief_fields = ('id', 'url', 'display', 'object_type', 'object_id', 'user', 'read', 'event_type') + + @extend_schema_field(serializers.JSONField(allow_null=True)) + def get_object(self, instance): + serializer = get_serializer_for_model(instance.object) + context = {'request': self.context['request']} + return serializer(instance.object, nested=True, context=context).data + + +class NotificationGroupSerializer(ValidatedModelSerializer): + groups = SerializedPKRelatedField( + queryset=Group.objects.all(), + serializer=GroupSerializer, + nested=True, + required=False, + many=True + ) + users = SerializedPKRelatedField( + queryset=User.objects.all(), + serializer=UserSerializer, + nested=True, + required=False, + many=True + ) + + class Meta: + model = NotificationGroup + fields = [ + 'id', 'url', 'display', 'display_url', 'name', 'description', 'groups', 'users', + ] + brief_fields = ('id', 'url', 'display', 'name', 'description') + + +class SubscriptionSerializer(ValidatedModelSerializer): + object_type = ContentTypeField( + queryset=ObjectType.objects.with_feature('notifications'), + ) + object = serializers.SerializerMethodField(read_only=True) + user = UserSerializer(nested=True) + + class Meta: + model = Subscription + fields = [ + 'id', 'url', 'display', 'object_type', 'object_id', 'object', 'user', 'created', + ] + brief_fields = ('id', 'url', 'display', 'object_type', 'object_id', 'user') + + @extend_schema_field(serializers.JSONField(allow_null=True)) + def get_object(self, instance): + serializer = get_serializer_for_model(instance.object) + context = {'request': self.context['request']} + return serializer(instance.object, nested=True, context=context).data diff --git a/netbox/extras/api/serializers_/savedfilters.py b/netbox/extras/api/serializers_/savedfilters.py index 1403037971f..fb0744e59f0 100644 --- a/netbox/extras/api/serializers_/savedfilters.py +++ b/netbox/extras/api/serializers_/savedfilters.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from core.models import ObjectType from extras.models import SavedFilter from netbox.api.fields import ContentTypeField diff --git a/netbox/extras/api/serializers_/scripts.py b/netbox/extras/api/serializers_/scripts.py index f35b1ea0fc1..897ccf96641 100644 --- a/netbox/extras/api/serializers_/scripts.py +++ b/netbox/extras/api/serializers_/scripts.py @@ -38,7 +38,7 @@ class ScriptSerializer(ValidatedModelSerializer): def get_display(self, obj): return f'{obj.name} ({obj.module})' - @extend_schema_field(serializers.CharField()) + @extend_schema_field(serializers.CharField(allow_null=True)) def get_description(self, obj): if obj.python_class: return obj.python_class().description diff --git a/netbox/extras/api/serializers_/tags.py b/netbox/extras/api/serializers_/tags.py index 946ed3c8a85..e4e62845a83 100644 --- a/netbox/extras/api/serializers_/tags.py +++ b/netbox/extras/api/serializers_/tags.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from core.models import ObjectType from extras.models import Tag from netbox.api.fields import ContentTypeField, RelatedObjectCountField diff --git a/netbox/extras/api/urls.py b/netbox/extras/api/urls.py index bc68103b707..bbcb8f0ef2b 100644 --- a/netbox/extras/api/urls.py +++ b/netbox/extras/api/urls.py @@ -15,6 +15,9 @@ router.register('custom-links', views.CustomLinkViewSet) router.register('export-templates', views.ExportTemplateViewSet) router.register('saved-filters', views.SavedFilterViewSet) router.register('bookmarks', views.BookmarkViewSet) +router.register('notifications', views.NotificationViewSet) +router.register('notification-groups', views.NotificationGroupViewSet) +router.register('subscriptions', views.SubscriptionViewSet) router.register('tags', views.TagViewSet) router.register('image-attachments', views.ImageAttachmentViewSet) router.register('journal-entries', views.JournalEntryViewSet) diff --git a/netbox/extras/api/views.py b/netbox/extras/api/views.py index 34565384b47..e4c3c7f3e0e 100644 --- a/netbox/extras/api/views.py +++ b/netbox/extras/api/views.py @@ -1,6 +1,7 @@ from django.http import Http404 from django.shortcuts import get_object_or_404 from django_rq.queues import get_connection +from drf_spectacular.utils import extend_schema, extend_schema_view from rest_framework import status from rest_framework.decorators import action from rest_framework.exceptions import PermissionDenied @@ -11,10 +12,10 @@ from rest_framework.routers import APIRootView from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet from rq import Worker -from core.models import Job, ObjectType +from core.models import ObjectType from extras import filtersets +from extras.jobs import ScriptJob from extras.models import * -from extras.scripts import run_script from netbox.api.authentication import IsAuthenticatedOrLoginNotRequired from netbox.api.features import SyncedDataMixin from netbox.api.metadata import ContentTypeMetadata @@ -140,6 +141,27 @@ class BookmarkViewSet(NetBoxModelViewSet): filterset_class = filtersets.BookmarkFilterSet +# +# Notifications & subscriptions +# + +class NotificationViewSet(NetBoxModelViewSet): + metadata_class = ContentTypeMetadata + queryset = Notification.objects.all() + serializer_class = serializers.NotificationSerializer + + +class NotificationGroupViewSet(NetBoxModelViewSet): + queryset = NotificationGroup.objects.all() + serializer_class = serializers.NotificationGroupSerializer + + +class SubscriptionViewSet(NetBoxModelViewSet): + metadata_class = ContentTypeMetadata + queryset = Subscription.objects.all() + serializer_class = serializers.SubscriptionSerializer + + # # Tags # @@ -207,9 +229,13 @@ class ConfigTemplateViewSet(SyncedDataMixin, ConfigTemplateRenderMixin, NetBoxMo # Scripts # +@extend_schema_view( + update=extend_schema(request=serializers.ScriptInputSerializer), + partial_update=extend_schema(request=serializers.ScriptInputSerializer), +) class ScriptViewSet(ModelViewSet): permission_classes = [IsAuthenticatedOrLoginNotRequired] - queryset = Script.objects.prefetch_related('jobs') + queryset = Script.objects.all() serializer_class = serializers.ScriptSerializer filterset_class = filtersets.ScriptFilterSet @@ -252,10 +278,8 @@ class ScriptViewSet(ModelViewSet): raise RQWorkerNotRunningException() if input_serializer.is_valid(): - Job.enqueue( - run_script, + ScriptJob.enqueue( instance=script, - name=script.python_class.class_name, user=request.user, data=input_serializer.data['data'], request=copy_safe_request(request), diff --git a/netbox/extras/apps.py b/netbox/extras/apps.py index c565988bcf0..21232f95fdd 100644 --- a/netbox/extras/apps.py +++ b/netbox/extras/apps.py @@ -6,7 +6,7 @@ class ExtrasConfig(AppConfig): def ready(self): from netbox.models.features import register_models - from . import dashboard, lookups, search, signals + from . import dashboard, lookups, search, signals # noqa: F401 # Register models register_models(*self.get_models()) diff --git a/netbox/extras/choices.py b/netbox/extras/choices.py index 8959ba0abf1..4525d86891c 100644 --- a/netbox/extras/choices.py +++ b/netbox/extras/choices.py @@ -156,16 +156,16 @@ class LogLevelChoices(ChoiceSet): LOG_DEBUG = 'debug' LOG_DEFAULT = 'default' - LOG_SUCCESS = 'success' LOG_INFO = 'info' + LOG_SUCCESS = 'success' LOG_WARNING = 'warning' LOG_FAILURE = 'failure' CHOICES = ( (LOG_DEBUG, _('Debug'), 'teal'), (LOG_DEFAULT, _('Default'), 'gray'), - (LOG_SUCCESS, _('Success'), 'green'), (LOG_INFO, _('Info'), 'cyan'), + (LOG_SUCCESS, _('Success'), 'green'), (LOG_WARNING, _('Warning'), 'yellow'), (LOG_FAILURE, _('Failure'), 'red'), ) @@ -173,8 +173,8 @@ class LogLevelChoices(ChoiceSet): SYSTEM_LEVELS = { LOG_DEBUG: logging.DEBUG, LOG_DEFAULT: logging.INFO, - LOG_SUCCESS: logging.INFO, LOG_INFO: logging.INFO, + LOG_SUCCESS: logging.INFO, LOG_WARNING: logging.WARNING, LOG_FAILURE: logging.ERROR, } @@ -191,35 +191,6 @@ class DurationChoices(ChoiceSet): ) -# -# Job results -# - -class JobResultStatusChoices(ChoiceSet): - - STATUS_PENDING = 'pending' - STATUS_SCHEDULED = 'scheduled' - STATUS_RUNNING = 'running' - STATUS_COMPLETED = 'completed' - STATUS_ERRORED = 'errored' - STATUS_FAILED = 'failed' - - CHOICES = ( - (STATUS_PENDING, _('Pending'), 'cyan'), - (STATUS_SCHEDULED, _('Scheduled'), 'gray'), - (STATUS_RUNNING, _('Running'), 'blue'), - (STATUS_COMPLETED, _('Completed'), 'green'), - (STATUS_ERRORED, _('Errored'), 'red'), - (STATUS_FAILED, _('Failed'), 'red'), - ) - - TERMINAL_STATE_CHOICES = ( - STATUS_COMPLETED, - STATUS_ERRORED, - STATUS_FAILED, - ) - - # # Webhooks # @@ -302,8 +273,10 @@ class EventRuleActionChoices(ChoiceSet): WEBHOOK = 'webhook' SCRIPT = 'script' + NOTIFICATION = 'notification' CHOICES = ( (WEBHOOK, _('Webhook')), (SCRIPT, _('Script')), + (NOTIFICATION, _('Notification')), ) diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 7162299e737..3bfe3b21b54 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -1,12 +1,6 @@ +from core.events import * from extras.choices import LogLevelChoices -# Events -EVENT_CREATE = 'create' -EVENT_UPDATE = 'update' -EVENT_DELETE = 'delete' -EVENT_JOB_START = 'job_start' -EVENT_JOB_END = 'job_end' - # Custom fields CUSTOMFIELD_EMPTY_VALUES = (None, '', []) @@ -14,11 +8,14 @@ CUSTOMFIELD_EMPTY_VALUES = (None, '', []) HTTP_CONTENT_TYPE_JSON = 'application/json' WEBHOOK_EVENT_TYPES = { - EVENT_CREATE: 'created', - EVENT_UPDATE: 'updated', - EVENT_DELETE: 'deleted', - EVENT_JOB_START: 'job_started', - EVENT_JOB_END: 'job_ended', + # Map registered event types to public webhook "event" equivalents + OBJECT_CREATED: 'created', + OBJECT_UPDATED: 'updated', + OBJECT_DELETED: 'deleted', + JOB_STARTED: 'job_started', + JOB_COMPLETED: 'job_ended', + JOB_FAILED: 'job_ended', + JOB_ERRORED: 'job_ended', } # Dashboard @@ -139,10 +136,10 @@ DEFAULT_DASHBOARD = [ ] LOG_LEVEL_RANK = { - LogLevelChoices.LOG_DEFAULT: 0, - LogLevelChoices.LOG_DEBUG: 1, - LogLevelChoices.LOG_SUCCESS: 2, - LogLevelChoices.LOG_INFO: 3, + LogLevelChoices.LOG_DEBUG: 0, + LogLevelChoices.LOG_DEFAULT: 1, + LogLevelChoices.LOG_INFO: 2, + LogLevelChoices.LOG_SUCCESS: 3, LogLevelChoices.LOG_WARNING: 4, LogLevelChoices.LOG_FAILURE: 5, } diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index 5327421ca1d..c56e4cd7df7 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -15,7 +15,6 @@ from django.utils.translation import gettext as _ from core.models import ObjectType from extras.choices import BookmarkOrderingChoices -from netbox.choices import ButtonColorChoices from utilities.object_types import object_type_identifier, object_type_name from utilities.permissions import get_permission_for_model from utilities.querydict import dict_to_querydict @@ -131,22 +130,6 @@ class DashboardWidget: def name(self): return f'{self.__class__.__module__.split(".")[0]}.{self.__class__.__name__}' - @property - def fg_color(self): - """ - Return the appropriate foreground (text) color for the widget's color. - """ - if self.color in ( - ButtonColorChoices.CYAN, - ButtonColorChoices.GRAY, - ButtonColorChoices.GREY, - ButtonColorChoices.TEAL, - ButtonColorChoices.WHITE, - ButtonColorChoices.YELLOW, - ): - return ButtonColorChoices.BLACK - return ButtonColorChoices.WHITE - @property def form_data(self): return { @@ -199,10 +182,13 @@ class ObjectCountsWidget(DashboardWidget): for model in get_models_from_content_types(self.config['models']): permission = get_permission_for_model(model, 'view') if request.user.has_perm(permission): - url = reverse(get_viewname(model, 'list')) + try: + url = reverse(get_viewname(model, 'list')) + except NoReverseMatch: + url = None qs = model.objects.restrict(request.user, 'view') # Apply any specified filters - if filters := self.config.get('filters'): + if url and (filters := self.config.get('filters')): params = dict_to_querydict(filters) filterset = getattr(resolve(url).func.view_class, 'filterset', None) qs = filterset(params, qs).qs @@ -251,6 +237,10 @@ class ObjectListWidget(DashboardWidget): def render(self, request): app_label, model_name = self.config['model'].split('.') model = ObjectType.objects.get_by_natural_key(app_label, model_name).model_class() + if not model: + logger.debug(f"Dashboard Widget model_class not found: {app_label}:{model_name}") + return + viewname = get_viewname(model, action='list') # Evaluate user's permission. Note that this controls only whether the HTMX element is @@ -381,17 +371,17 @@ class BookmarksWidget(DashboardWidget): if request.user.is_anonymous: bookmarks = list() else: - user_bookmarks = Bookmark.objects.filter(user=request.user) - if self.config['order_by'] == BookmarkOrderingChoices.ORDERING_ALPHABETICAL_AZ: - bookmarks = sorted(user_bookmarks, key=lambda bookmark: bookmark.__str__().lower()) - elif self.config['order_by'] == BookmarkOrderingChoices.ORDERING_ALPHABETICAL_ZA: - bookmarks = sorted(user_bookmarks, key=lambda bookmark: bookmark.__str__().lower(), reverse=True) - else: - bookmarks = user_bookmarks.order_by(self.config['order_by']) + bookmarks = Bookmark.objects.filter(user=request.user) if object_types := self.config.get('object_types'): models = get_models_from_content_types(object_types) content_types = ObjectType.objects.get_for_models(*models).values() bookmarks = bookmarks.filter(object_type__in=content_types) + if self.config['order_by'] == BookmarkOrderingChoices.ORDERING_ALPHABETICAL_AZ: + bookmarks = sorted(bookmarks, key=lambda bookmark: bookmark.__str__().lower()) + elif self.config['order_by'] == BookmarkOrderingChoices.ORDERING_ALPHABETICAL_ZA: + bookmarks = sorted(bookmarks, key=lambda bookmark: bookmark.__str__().lower(), reverse=True) + else: + bookmarks = bookmarks.order_by(self.config['order_by']) if max_items := self.config.get('max_items'): bookmarks = bookmarks[:max_items] diff --git a/netbox/extras/events.py b/netbox/extras/events.py index dae3f29cf4d..f13a3b48fdb 100644 --- a/netbox/extras/events.py +++ b/netbox/extras/events.py @@ -1,18 +1,18 @@ import logging +from collections import defaultdict from django.conf import settings -from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.utils import timezone from django.utils.module_loading import import_string from django.utils.translation import gettext as _ from django_rq import get_queue -from core.choices import ObjectChangeActionChoices -from core.models import Job +from core.events import * from netbox.config import get_config from netbox.constants import RQ_QUEUE_DEFAULT from netbox.registry import registry +from users.models import User from utilities.api import get_serializer_for_model from utilities.rqworker import get_rq_retry from utilities.serialization import serialize_object @@ -35,12 +35,12 @@ def serialize_for_event(instance): return serializer.data -def get_snapshots(instance, action): +def get_snapshots(instance, event_type): snapshots = { 'prechange': getattr(instance, '_prechange_snapshot', None), 'postchange': None, } - if action != ObjectChangeActionChoices.ACTION_DELETE: + if event_type != OBJECT_DELETED: # Use model's serialize_object() method if defined; fall back to serialize_object() utility function if hasattr(instance, 'serialize_object'): snapshots['postchange'] = instance.serialize_object() @@ -50,7 +50,7 @@ def get_snapshots(instance, action): return snapshots -def enqueue_object(queue, instance, user, request_id, action): +def enqueue_event(queue, instance, user, request_id, event_type): """ Enqueue a serialized representation of a created/updated/deleted object for the processing of events once the request has completed. @@ -65,24 +65,24 @@ def enqueue_object(queue, instance, user, request_id, action): key = f'{app_label}.{model_name}:{instance.pk}' if key in queue: queue[key]['data'] = serialize_for_event(instance) - queue[key]['snapshots']['postchange'] = get_snapshots(instance, action)['postchange'] + queue[key]['snapshots']['postchange'] = get_snapshots(instance, event_type)['postchange'] + # If the object is being deleted, update any prior "update" event to "delete" + if event_type == OBJECT_DELETED: + queue[key]['event_type'] = event_type else: queue[key] = { - 'content_type': ContentType.objects.get_for_model(instance), + 'object_type': ContentType.objects.get_for_model(instance), 'object_id': instance.pk, - 'event': action, + 'event_type': event_type, 'data': serialize_for_event(instance), - 'snapshots': get_snapshots(instance, action), + 'snapshots': get_snapshots(instance, event_type), 'username': user.username, 'request_id': request_id } -def process_event_rules(event_rules, model_name, event, data, username=None, snapshots=None, request_id=None): - if username: - user = get_user_model().objects.get(username=username) - else: - user = None +def process_event_rules(event_rules, object_type, event_type, data, username=None, snapshots=None, request_id=None): + user = User.objects.get(username=username) if username else None for event_rule in event_rules: @@ -100,8 +100,8 @@ def process_event_rules(event_rules, model_name, event, data, username=None, sna # Compile the task parameters params = { "event_rule": event_rule, - "model_name": model_name, - "event": event, + "model_name": object_type.model, + "event_type": event_type, "data": data, "snapshots": snapshots, "timestamp": timezone.now().isoformat(), @@ -125,14 +125,24 @@ def process_event_rules(event_rules, model_name, event, data, username=None, sna script = event_rule.action_object.python_class() # Enqueue a Job to record the script's execution - Job.enqueue( - "extras.scripts.run_script", + from extras.jobs import ScriptJob + ScriptJob.enqueue( instance=event_rule.action_object, name=script.name, user=user, data=data ) + # Notification groups + elif event_rule.action_type == EventRuleActionChoices.NOTIFICATION: + # Bulk-create notifications for all members of the notification group + event_rule.action_object.notify( + object_type=object_type, + object_id=data['id'], + object_repr=data.get('display'), + event_type=event_type + ) + else: raise ValueError(_("Unknown action type for an event rule: {action_type}").format( action_type=event_rule.action_type @@ -143,32 +153,29 @@ def process_event_queue(events): """ Flush a list of object representation to RQ for EventRule processing. """ - events_cache = { - 'type_create': {}, - 'type_update': {}, - 'type_delete': {}, - } + events_cache = defaultdict(dict) - for data in events: - action_flag = { - ObjectChangeActionChoices.ACTION_CREATE: 'type_create', - ObjectChangeActionChoices.ACTION_UPDATE: 'type_update', - ObjectChangeActionChoices.ACTION_DELETE: 'type_delete', - }[data['event']] - content_type = data['content_type'] + for event in events: + event_type = event['event_type'] + object_type = event['object_type'] # Cache applicable Event Rules - if content_type not in events_cache[action_flag]: - events_cache[action_flag][content_type] = EventRule.objects.filter( - **{action_flag: True}, - object_types=content_type, + if object_type not in events_cache[event_type]: + events_cache[event_type][object_type] = EventRule.objects.filter( + event_types__contains=[event['event_type']], + object_types=object_type, enabled=True ) - event_rules = events_cache[action_flag][content_type] + event_rules = events_cache[event_type][object_type] process_event_rules( - event_rules, content_type.model, data['event'], data['data'], data['username'], - snapshots=data['snapshots'], request_id=data['request_id'] + event_rules=event_rules, + object_type=object_type, + event_type=event['event_type'], + data=event['data'], + username=event['username'], + snapshots=event['snapshots'], + request_id=event['request_id'] ) diff --git a/netbox/extras/filtersets.py b/netbox/extras/filtersets.py index bf0275c2df6..4f40ce50017 100644 --- a/netbox/extras/filtersets.py +++ b/netbox/extras/filtersets.py @@ -1,5 +1,4 @@ import django_filters -from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.utils.translation import gettext as _ @@ -8,6 +7,7 @@ from core.models import DataSource, ObjectType from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup from netbox.filtersets import BaseFilterSet, ChangeLoggedModelFilterSet, NetBoxModelFilterSet from tenancy.models import Tenant, TenantGroup +from users.models import Group, User from utilities.filters import ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter from virtualization.models import Cluster, ClusterGroup, ClusterType from .choices import * @@ -26,6 +26,7 @@ __all__ = ( 'ImageAttachmentFilterSet', 'JournalEntryFilterSet', 'LocalConfigContextFilterSet', + 'NotificationGroupFilterSet', 'ObjectTypeFilterSet', 'SavedFilterFilterSet', 'ScriptFilterSet', @@ -97,6 +98,9 @@ class EventRuleFilterSet(NetBoxModelFilterSet): object_type = ContentTypeFilter( field_name='object_types' ) + event_type = MultiValueCharFilter( + method='filter_event_type' + ) action_type = django_filters.MultipleChoiceFilter( choices=EventRuleActionChoices ) @@ -106,8 +110,7 @@ class EventRuleFilterSet(NetBoxModelFilterSet): class Meta: model = EventRule fields = ( - 'id', 'name', 'type_create', 'type_update', 'type_delete', 'type_job_start', 'type_job_end', 'enabled', - 'action_type', 'description', + 'id', 'name', 'enabled', 'action_type', 'description', ) def search(self, queryset, name, value): @@ -119,6 +122,9 @@ class EventRuleFilterSet(NetBoxModelFilterSet): Q(comments__icontains=value) ) + def filter_event_type(self, queryset, name, value): + return queryset.filter(event_types__overlap=value) + class CustomFieldFilterSet(ChangeLoggedModelFilterSet): q = django_filters.CharFilter( @@ -152,9 +158,9 @@ class CustomFieldFilterSet(ChangeLoggedModelFilterSet): class Meta: model = CustomField fields = ( - 'id', 'name', 'label', 'group_name', 'required', 'search_weight', 'filter_logic', 'ui_visible', + 'id', 'name', 'label', 'group_name', 'required', 'unique', 'search_weight', 'filter_logic', 'ui_visible', 'ui_editable', 'weight', 'is_cloneable', 'description', 'validation_minimum', 'validation_maximum', - 'validation_regex', 'validation_unique', + 'validation_regex', ) def search(self, queryset, name, value): @@ -277,12 +283,12 @@ class SavedFilterFilterSet(ChangeLoggedModelFilterSet): field_name='object_types' ) user_id = django_filters.ModelMultipleChoiceFilter( - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), label=_('User (ID)'), ) user = django_filters.ModelMultipleChoiceFilter( field_name='user__username', - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), to_field_name='username', label=_('User (name)'), ) @@ -321,12 +327,12 @@ class BookmarkFilterSet(BaseFilterSet): object_type_id = MultiValueNumberFilter() object_type = ContentTypeFilter() user_id = django_filters.ModelMultipleChoiceFilter( - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), label=_('User (ID)'), ) user = django_filters.ModelMultipleChoiceFilter( field_name='user__username', - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), to_field_name='username', label=_('User (name)'), ) @@ -336,6 +342,49 @@ class BookmarkFilterSet(BaseFilterSet): fields = ('id', 'object_id') +class NotificationGroupFilterSet(ChangeLoggedModelFilterSet): + q = django_filters.CharFilter( + method='search', + label=_('Search'), + ) + user_id = django_filters.ModelMultipleChoiceFilter( + field_name='users', + queryset=User.objects.all(), + label=_('User (ID)'), + ) + user = django_filters.ModelMultipleChoiceFilter( + field_name='users__username', + queryset=User.objects.all(), + to_field_name='username', + label=_('User (name)'), + ) + group_id = django_filters.ModelMultipleChoiceFilter( + field_name='groups', + queryset=Group.objects.all(), + label=_('Group (ID)'), + ) + group = django_filters.ModelMultipleChoiceFilter( + field_name='groups__name', + queryset=Group.objects.all(), + to_field_name='name', + label=_('Group (name)'), + ) + + class Meta: + model = NotificationGroup + fields = ( + 'id', 'name', 'description', + ) + + def search(self, queryset, name, value): + if not value.strip(): + return queryset + return queryset.filter( + Q(name__icontains=value) | + Q(description__icontains=value) + ) + + class ImageAttachmentFilterSet(ChangeLoggedModelFilterSet): q = django_filters.CharFilter( method='search', @@ -360,12 +409,12 @@ class JournalEntryFilterSet(NetBoxModelFilterSet): queryset=ContentType.objects.all() ) created_by_id = django_filters.ModelMultipleChoiceFilter( - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), label=_('User (ID)'), ) created_by = django_filters.ModelMultipleChoiceFilter( field_name='created_by__username', - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), to_field_name='username', label=_('User (name)'), ) diff --git a/netbox/extras/forms/bulk_edit.py b/netbox/extras/forms/bulk_edit.py index acb564b308b..30d06683b83 100644 --- a/netbox/extras/forms/bulk_edit.py +++ b/netbox/extras/forms/bulk_edit.py @@ -3,6 +3,7 @@ from django.utils.translation import gettext_lazy as _ from extras.choices import * from extras.models import * +from netbox.events import get_event_type_choices from netbox.forms import NetBoxModelBulkEditForm from utilities.forms import BulkEditForm, add_blank_choice from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField @@ -18,6 +19,7 @@ __all__ = ( 'EventRuleBulkEditForm', 'ExportTemplateBulkEditForm', 'JournalEntryBulkEditForm', + 'NotificationGroupBulkEditForm', 'SavedFilterBulkEditForm', 'TagBulkEditForm', 'WebhookBulkEditForm', @@ -42,6 +44,11 @@ class CustomFieldBulkEditForm(BulkEditForm): required=False, widget=BulkEditNullBooleanSelect() ) + unique = forms.NullBooleanField( + label=_('Must be unique'), + required=False, + widget=BulkEditNullBooleanSelect() + ) weight = forms.IntegerField( label=_('Weight'), required=False @@ -77,19 +84,12 @@ class CustomFieldBulkEditForm(BulkEditForm): label=_('Validation regex'), required=False ) - validation_unique = forms.NullBooleanField( - label=_('Must be unique'), - required=False, - widget=BulkEditNullBooleanSelect() - ) comments = CommentField() fieldsets = ( - FieldSet('group_name', 'description', 'weight', 'choice_set', name=_('Attributes')), + FieldSet('group_name', 'description', 'weight', 'required', 'unique', 'choice_set', name=_('Attributes')), FieldSet('ui_visible', 'ui_editable', 'is_cloneable', name=_('Behavior')), - FieldSet( - 'validation_minimum', 'validation_maximum', 'validation_regex', 'validation_unique', name=_('Validation') - ), + FieldSet('validation_minimum', 'validation_maximum', 'validation_regex', name=_('Validation')), ) nullable_fields = ('group_name', 'description', 'choice_set') @@ -247,33 +247,18 @@ class EventRuleBulkEditForm(NetBoxModelBulkEditForm): required=False, widget=BulkEditNullBooleanSelect() ) - type_create = forms.NullBooleanField( - label=_('On create'), + event_types = forms.MultipleChoiceField( + choices=get_event_type_choices(), required=False, - widget=BulkEditNullBooleanSelect() + label=_('Event types') ) - type_update = forms.NullBooleanField( - label=_('On update'), - required=False, - widget=BulkEditNullBooleanSelect() - ) - type_delete = forms.NullBooleanField( - label=_('On delete'), - required=False, - widget=BulkEditNullBooleanSelect() - ) - type_job_start = forms.NullBooleanField( - label=_('On job start'), - required=False, - widget=BulkEditNullBooleanSelect() - ) - type_job_end = forms.NullBooleanField( - label=_('On job end'), - required=False, - widget=BulkEditNullBooleanSelect() + description = forms.CharField( + label=_('Description'), + max_length=200, + required=False ) - nullable_fields = ('description', 'conditions',) + nullable_fields = ('description', 'conditions') class TagBulkEditForm(BulkEditForm): @@ -343,3 +328,17 @@ class JournalEntryBulkEditForm(BulkEditForm): required=False ) comments = CommentField() + + +class NotificationGroupBulkEditForm(BulkEditForm): + pk = forms.ModelMultipleChoiceField( + queryset=NotificationGroup.objects.all(), + widget=forms.MultipleHiddenInput + ) + description = forms.CharField( + label=_('Description'), + max_length=200, + required=False + ) + + nullable_fields = ('description',) diff --git a/netbox/extras/forms/bulk_import.py b/netbox/extras/forms/bulk_import.py index cf022ba0e0c..258df826435 100644 --- a/netbox/extras/forms/bulk_import.py +++ b/netbox/extras/forms/bulk_import.py @@ -3,16 +3,18 @@ import re from django import forms from django.contrib.postgres.forms import SimpleArrayField from django.core.exceptions import ObjectDoesNotExist -from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ from core.models import ObjectType from extras.choices import * from extras.models import * +from netbox.events import get_event_type_choices from netbox.forms import NetBoxModelImportForm +from users.models import Group, User from utilities.forms import CSVModelForm from utilities.forms.fields import ( - CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVMultipleContentTypeField, SlugField, + CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVModelMultipleChoiceField, CSVMultipleChoiceField, + CSVMultipleContentTypeField, SlugField, ) __all__ = ( @@ -23,6 +25,7 @@ __all__ = ( 'EventRuleImportForm', 'ExportTemplateImportForm', 'JournalEntryImportForm', + 'NotificationGroupImportForm', 'SavedFilterImportForm', 'TagImportForm', 'WebhookImportForm', @@ -69,10 +72,9 @@ class CustomFieldImportForm(CSVModelForm): class Meta: model = CustomField fields = ( - 'name', 'label', 'group_name', 'type', 'object_types', 'related_object_type', 'required', 'description', - 'search_weight', 'filter_logic', 'default', 'choice_set', 'weight', 'validation_minimum', - 'validation_maximum', 'validation_regex', 'validation_unique', 'ui_visible', 'ui_editable', 'is_cloneable', - 'comments', + 'name', 'label', 'group_name', 'type', 'object_types', 'related_object_type', 'required', 'unique', + 'description', 'search_weight', 'filter_logic', 'default', 'choice_set', 'weight', 'validation_minimum', + 'validation_maximum', 'validation_regex', 'ui_visible', 'ui_editable', 'is_cloneable', 'comments', ) @@ -185,6 +187,11 @@ class EventRuleImportForm(NetBoxModelImportForm): queryset=ObjectType.objects.with_feature('event_rules'), help_text=_("One or more assigned object types") ) + event_types = CSVMultipleChoiceField( + choices=get_event_type_choices(), + label=_('Event types'), + help_text=_('The event type(s) which will trigger this rule') + ) action_object = forms.CharField( label=_('Action object'), required=True, @@ -194,8 +201,8 @@ class EventRuleImportForm(NetBoxModelImportForm): class Meta: model = EventRule fields = ( - 'name', 'description', 'enabled', 'conditions', 'object_types', 'type_create', 'type_update', - 'type_delete', 'type_job_start', 'type_job_end', 'action_type', 'action_object', 'comments', 'tags' + 'name', 'description', 'enabled', 'conditions', 'object_types', 'event_types', 'action_type', + 'comments', 'tags' ) def clean(self): @@ -229,9 +236,6 @@ class TagImportForm(CSVModelForm): class Meta: model = Tag fields = ('name', 'slug', 'color', 'description') - help_texts = { - 'color': mark_safe(_('RGB color in hexadecimal. Example:') + ' 00ff00'), - } class JournalEntryImportForm(NetBoxModelImportForm): @@ -250,3 +254,24 @@ class JournalEntryImportForm(NetBoxModelImportForm): fields = ( 'assigned_object_type', 'assigned_object_id', 'created_by', 'kind', 'comments', 'tags' ) + + +class NotificationGroupImportForm(CSVModelForm): + users = CSVModelMultipleChoiceField( + label=_('Users'), + queryset=User.objects.all(), + required=False, + to_field_name='username', + help_text=_('User names separated by commas, encased with double quotes') + ) + groups = CSVModelMultipleChoiceField( + label=_('Groups'), + queryset=Group.objects.all(), + required=False, + to_field_name='name', + help_text=_('Group names separated by commas, encased with double quotes') + ) + + class Meta: + model = NotificationGroup + fields = ('name', 'description', 'users', 'groups') diff --git a/netbox/extras/forms/filtersets.py b/netbox/extras/forms/filtersets.py index e29fd549dc5..05dcf96c476 100644 --- a/netbox/extras/forms/filtersets.py +++ b/netbox/extras/forms/filtersets.py @@ -1,14 +1,15 @@ from django import forms -from django.contrib.auth import get_user_model from django.utils.translation import gettext_lazy as _ from core.models import ObjectType, DataFile, DataSource from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup from extras.choices import * from extras.models import * +from netbox.events import get_event_type_choices from netbox.forms.base import NetBoxModelFilterSetForm from netbox.forms.mixins import SavedFiltersMixin from tenancy.models import Tenant, TenantGroup +from users.models import Group, User from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice from utilities.forms.fields import ( ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField, @@ -28,6 +29,7 @@ __all__ = ( 'ImageAttachmentFilterForm', 'JournalEntryFilterForm', 'LocalConfigContextFilterForm', + 'NotificationGroupFilterForm', 'SavedFilterFilterForm', 'TagFilterForm', 'WebhookFilterForm', @@ -38,12 +40,11 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm): fieldsets = ( FieldSet('q', 'filter_id'), FieldSet( - 'type', 'related_object_type_id', 'group_name', 'weight', 'required', 'choice_set_id', 'ui_visible', - 'ui_editable', 'is_cloneable', name=_('Attributes') - ), - FieldSet( - 'validation_minimum', 'validation_maximum', 'validation_regex', 'validation_unique', name=_('Validation') + 'type', 'related_object_type_id', 'group_name', 'weight', 'required', 'unique', 'choice_set_id', + name=_('Attributes') ), + FieldSet('ui_visible', 'ui_editable', 'is_cloneable', name=_('Behavior')), + FieldSet('validation_minimum', 'validation_maximum', 'validation_regex', name=_('Validation')), ) related_object_type_id = ContentTypeMultipleChoiceField( queryset=ObjectType.objects.with_feature('custom_fields'), @@ -70,6 +71,13 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm): choices=BOOLEAN_WITH_BLANK_CHOICES ) ) + unique = forms.NullBooleanField( + label=_('Must be unique'), + required=False, + widget=forms.Select( + choices=BOOLEAN_WITH_BLANK_CHOICES + ) + ) choice_set_id = DynamicModelMultipleChoiceField( queryset=CustomFieldChoiceSet.objects.all(), required=False, @@ -104,13 +112,6 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm): label=_('Validation regex'), required=False ) - validation_unique = forms.NullBooleanField( - label=_('Must be unique'), - required=False, - widget=forms.Select( - choices=BOOLEAN_WITH_BLANK_CHOICES - ) - ) class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm): @@ -272,14 +273,18 @@ class EventRuleFilterForm(NetBoxModelFilterSetForm): fieldsets = ( FieldSet('q', 'filter_id', 'tag'), - FieldSet('object_type_id', 'action_type', 'enabled', name=_('Attributes')), - FieldSet('type_create', 'type_update', 'type_delete', 'type_job_start', 'type_job_end', name=_('Events')), + FieldSet('object_type_id', 'event_type', 'action_type', 'enabled', name=_('Attributes')), ) object_type_id = ContentTypeMultipleChoiceField( queryset=ObjectType.objects.with_feature('event_rules'), required=False, label=_('Object type') ) + event_type = forms.MultipleChoiceField( + choices=get_event_type_choices, + required=False, + label=_('Event type') + ) action_type = forms.ChoiceField( choices=add_blank_choice(EventRuleActionChoices), required=False, @@ -292,41 +297,6 @@ class EventRuleFilterForm(NetBoxModelFilterSetForm): choices=BOOLEAN_WITH_BLANK_CHOICES ) ) - type_create = forms.NullBooleanField( - required=False, - widget=forms.Select( - choices=BOOLEAN_WITH_BLANK_CHOICES - ), - label=_('Object creations') - ) - type_update = forms.NullBooleanField( - required=False, - widget=forms.Select( - choices=BOOLEAN_WITH_BLANK_CHOICES - ), - label=_('Object updates') - ) - type_delete = forms.NullBooleanField( - required=False, - widget=forms.Select( - choices=BOOLEAN_WITH_BLANK_CHOICES - ), - label=_('Object deletions') - ) - type_job_start = forms.NullBooleanField( - required=False, - widget=forms.Select( - choices=BOOLEAN_WITH_BLANK_CHOICES - ), - label=_('Job starts') - ) - type_job_end = forms.NullBooleanField( - required=False, - widget=forms.Select( - choices=BOOLEAN_WITH_BLANK_CHOICES - ), - label=_('Job terminations') - ) class TagFilterForm(SavedFiltersMixin, FilterForm): @@ -481,7 +451,7 @@ class JournalEntryFilterForm(NetBoxModelFilterSetForm): widget=DateTimePicker() ) created_by_id = DynamicModelMultipleChoiceField( - queryset=get_user_model().objects.all(), + queryset=User.objects.all(), required=False, label=_('User') ) @@ -496,3 +466,16 @@ class JournalEntryFilterForm(NetBoxModelFilterSetForm): required=False ) tag = TagFilterField(model) + + +class NotificationGroupFilterForm(SavedFiltersMixin, FilterForm): + user_id = DynamicModelMultipleChoiceField( + queryset=User.objects.all(), + required=False, + label=_('User') + ) + group_id = DynamicModelMultipleChoiceField( + queryset=Group.objects.all(), + required=False, + label=_('Group') + ) diff --git a/netbox/extras/forms/model_forms.py b/netbox/extras/forms/model_forms.py index 19823e9a4f4..a45daaf7084 100644 --- a/netbox/extras/forms/model_forms.py +++ b/netbox/extras/forms/model_forms.py @@ -10,8 +10,10 @@ from core.models import ObjectType from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup from extras.choices import * from extras.models import * +from netbox.events import get_event_type_choices from netbox.forms import NetBoxModelForm from tenancy.models import Tenant, TenantGroup +from users.models import Group, User from utilities.forms import add_blank_choice, get_field_value from utilities.forms.fields import ( CommentField, ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelChoiceField, @@ -32,7 +34,9 @@ __all__ = ( 'ExportTemplateForm', 'ImageAttachmentForm', 'JournalEntryForm', + 'NotificationGroupForm', 'SavedFilterForm', + 'SubscriptionForm', 'TagForm', 'WebhookForm', ) @@ -41,32 +45,36 @@ __all__ = ( class CustomFieldForm(forms.ModelForm): object_types = ContentTypeMultipleChoiceField( label=_('Object types'), - queryset=ObjectType.objects.with_feature('custom_fields') + queryset=ObjectType.objects.with_feature('custom_fields'), + help_text=_("The type(s) of object that have this custom field") + ) + default = JSONField( + label=_('Default value'), + required=False ) related_object_type = ContentTypeChoiceField( label=_('Related object type'), queryset=ObjectType.objects.public(), - required=False, help_text=_("Type of the related object (for object/multi-object fields only)") ) + related_object_filter = JSONField( + label=_('Related object filter'), + required=False, + help_text=_('Specify query parameters as a JSON object.') + ) choice_set = DynamicModelChoiceField( - queryset=CustomFieldChoiceSet.objects.all(), - required=False + queryset=CustomFieldChoiceSet.objects.all() ) comments = CommentField() fieldsets = ( FieldSet( - 'object_types', 'name', 'label', 'group_name', 'type', 'related_object_type', 'required', 'description', + 'object_types', 'name', 'label', 'group_name', 'description', 'type', 'required', 'unique', 'default', name=_('Custom Field') ), FieldSet( 'search_weight', 'filter_logic', 'ui_visible', 'ui_editable', 'weight', 'is_cloneable', name=_('Behavior') ), - FieldSet('default', 'choice_set', name=_('Values')), - FieldSet( - 'validation_minimum', 'validation_maximum', 'validation_regex', 'validation_unique', name=_('Validation') - ), ) class Meta: @@ -83,11 +91,75 @@ class CustomFieldForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + # Mimic HTMXSelect() + self.fields['type'].widget.attrs.update({ + 'hx-get': '.', + 'hx-include': '#form_fields', + 'hx-target': '#form_fields', + }) + # Disable changing the type of a CustomField as it almost universally causes errors if custom field data # is already present. if self.instance.pk: self.fields['type'].disabled = True + field_type = get_field_value(self, 'type') + + # Adjust for text fields + if field_type in ( + CustomFieldTypeChoices.TYPE_TEXT, + CustomFieldTypeChoices.TYPE_LONGTEXT, + CustomFieldTypeChoices.TYPE_URL + ): + self.fieldsets = ( + self.fieldsets[0], + FieldSet('validation_regex', name=_('Validation')), + *self.fieldsets[1:] + ) + else: + del self.fields['validation_regex'] + + # Adjust for numeric fields + if field_type in ( + CustomFieldTypeChoices.TYPE_INTEGER, + CustomFieldTypeChoices.TYPE_DECIMAL + ): + self.fieldsets = ( + self.fieldsets[0], + FieldSet('validation_minimum', 'validation_maximum', name=_('Validation')), + *self.fieldsets[1:] + ) + else: + del self.fields['validation_minimum'] + del self.fields['validation_maximum'] + + # Adjust for object & multi-object fields + if field_type in ( + CustomFieldTypeChoices.TYPE_OBJECT, + CustomFieldTypeChoices.TYPE_MULTIOBJECT + ): + self.fieldsets = ( + self.fieldsets[0], + FieldSet('related_object_type', 'related_object_filter', name=_('Related Object')), + *self.fieldsets[1:] + ) + else: + del self.fields['related_object_type'] + del self.fields['related_object_filter'] + + # Adjust for selection & multi-select fields + if field_type in ( + CustomFieldTypeChoices.TYPE_SELECT, + CustomFieldTypeChoices.TYPE_MULTISELECT + ): + self.fieldsets = ( + self.fieldsets[0], + FieldSet('choice_set', name=_('Choices')), + *self.fieldsets[1:] + ) + else: + del self.fields['choice_set'] + class CustomFieldChoiceSetForm(forms.ModelForm): extra_choices = forms.CharField( @@ -238,6 +310,43 @@ class BookmarkForm(forms.ModelForm): fields = ('object_type', 'object_id') +class NotificationGroupForm(forms.ModelForm): + groups = DynamicModelMultipleChoiceField( + label=_('Groups'), + required=False, + queryset=Group.objects.all() + ) + users = DynamicModelMultipleChoiceField( + label=_('Users'), + required=False, + queryset=User.objects.all() + ) + + class Meta: + model = NotificationGroup + fields = ('name', 'description', 'groups', 'users') + + def clean(self): + super().clean() + + # At least one User or Group must be assigned + if not self.cleaned_data['groups'] and not self.cleaned_data['users']: + raise forms.ValidationError(_("A notification group specify at least one user or group.")) + + return self.cleaned_data + + +class SubscriptionForm(forms.ModelForm): + object_type = ContentTypeChoiceField( + label=_('Object type'), + queryset=ObjectType.objects.with_feature('notifications') + ) + + class Meta: + model = Subscription + fields = ('object_type', 'object_id') + + class WebhookForm(NetBoxModelForm): fieldsets = ( @@ -263,6 +372,10 @@ class EventRuleForm(NetBoxModelForm): label=_('Object types'), queryset=ObjectType.objects.with_feature('event_rules'), ) + event_types = forms.MultipleChoiceField( + choices=get_event_type_choices(), + label=_('Event types') + ) action_choice = forms.ChoiceField( label=_('Action choice'), choices=[] @@ -279,25 +392,16 @@ class EventRuleForm(NetBoxModelForm): fieldsets = ( FieldSet('name', 'description', 'object_types', 'enabled', 'tags', name=_('Event Rule')), - FieldSet('type_create', 'type_update', 'type_delete', 'type_job_start', 'type_job_end', name=_('Events')), - FieldSet('conditions', name=_('Conditions')), + FieldSet('event_types', 'conditions', name=_('Triggers')), FieldSet('action_type', 'action_choice', 'action_data', name=_('Action')), ) class Meta: model = EventRule fields = ( - 'object_types', 'name', 'description', 'type_create', 'type_update', 'type_delete', 'type_job_start', - 'type_job_end', 'enabled', 'conditions', 'action_type', 'action_object_type', 'action_object_id', - 'action_data', 'comments', 'tags' + 'object_types', 'name', 'description', 'enabled', 'event_types', 'conditions', 'action_type', + 'action_object_type', 'action_object_id', 'action_data', 'comments', 'tags' ) - labels = { - 'type_create': _('Creations'), - 'type_update': _('Updates'), - 'type_delete': _('Deletions'), - 'type_job_start': _('Job executions'), - 'type_job_end': _('Job terminations'), - } widgets = { 'conditions': forms.Textarea(attrs={'class': 'font-monospace'}), 'action_type': HTMXSelect(), @@ -329,6 +433,18 @@ class EventRuleForm(NetBoxModelForm): initial=initial ) + def init_notificationgroup_choice(self): + initial = None + if self.instance.action_type == EventRuleActionChoices.NOTIFICATION: + notificationgroup_id = get_field_value(self, 'action_object_id') + initial = NotificationGroup.objects.get(pk=notificationgroup_id) if notificationgroup_id else None + self.fields['action_choice'] = DynamicModelChoiceField( + label=_('Notification group'), + queryset=NotificationGroup.objects.all(), + required=True, + initial=initial + ) + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['action_object_type'].required = False @@ -341,6 +457,8 @@ class EventRuleForm(NetBoxModelForm): self.init_webhook_choice() elif action_type == EventRuleActionChoices.SCRIPT: self.init_script_choice() + elif action_type == EventRuleActionChoices.NOTIFICATION: + self.init_notificationgroup_choice() def clean(self): super().clean() @@ -357,6 +475,10 @@ class EventRuleForm(NetBoxModelForm): for_concrete_model=False ) self.cleaned_data['action_object_id'] = action_choice.id + # Notification + elif self.cleaned_data.get('action_type') == EventRuleActionChoices.NOTIFICATION: + self.cleaned_data['action_object_type'] = ObjectType.objects.get_for_model(action_choice) + self.cleaned_data['action_object_id'] = action_choice.id return self.cleaned_data diff --git a/netbox/extras/forms/reports.py b/netbox/extras/forms/reports.py index 358ee90e345..95692b3f625 100644 --- a/netbox/extras/forms/reports.py +++ b/netbox/extras/forms/reports.py @@ -31,7 +31,7 @@ class ReportForm(forms.Form): super().__init__(*args, **kwargs) # Annotate the current system time for reference - now = local_now().strftime('%Y-%m-%d %H:%M:%S') + now = local_now().strftime('%Y-%m-%d %H:%M:%S %Z') self.fields['schedule_at'].help_text += _(' (current time: {now})').format(now=now) # Remove scheduling fields if scheduling is disabled diff --git a/netbox/extras/forms/scripts.py b/netbox/extras/forms/scripts.py index ece96f5e492..331f7f01f96 100644 --- a/netbox/extras/forms/scripts.py +++ b/netbox/extras/forms/scripts.py @@ -37,7 +37,7 @@ class ScriptForm(forms.Form): super().__init__(*args, **kwargs) # Annotate the current system time for reference - now = local_now().strftime('%Y-%m-%d %H:%M:%S') + now = local_now().strftime('%Y-%m-%d %H:%M:%S %Z') self.fields['_schedule_at'].help_text += _(' (current time: {now})').format(now=now) # Remove scheduling fields if scheduling is disabled diff --git a/netbox/extras/graphql/filters.py b/netbox/extras/graphql/filters.py index 7451eef8a9f..ff2e6a0f177 100644 --- a/netbox/extras/graphql/filters.py +++ b/netbox/extras/graphql/filters.py @@ -13,6 +13,7 @@ __all__ = ( 'ExportTemplateFilter', 'ImageAttachmentFilter', 'JournalEntryFilter', + 'NotificationGroupFilter', 'SavedFilterFilter', 'TagFilter', 'WebhookFilter', @@ -67,6 +68,12 @@ class JournalEntryFilter(BaseFilterMixin): pass +@strawberry_django.filter(models.NotificationGroup, lookups=True) +@autotype_decorator(filtersets.NotificationGroupFilterSet) +class NotificationGroupFilter(BaseFilterMixin): + pass + + @strawberry_django.filter(models.SavedFilter, lookups=True) @autotype_decorator(filtersets.SavedFilterFilterSet) class SavedFilterFilter(BaseFilterMixin): diff --git a/netbox/extras/graphql/schema.py b/netbox/extras/graphql/schema.py index f7828503566..7d2d11bf169 100644 --- a/netbox/extras/graphql/schema.py +++ b/netbox/extras/graphql/schema.py @@ -3,68 +3,52 @@ from typing import List import strawberry import strawberry_django -from extras import models from .types import * -@strawberry.type +@strawberry.type(name="Query") class ExtrasQuery: - @strawberry.field - def config_context(self, id: int) -> ConfigContextType: - return models.ConfigContext.objects.get(pk=id) + config_context: ConfigContextType = strawberry_django.field() config_context_list: List[ConfigContextType] = strawberry_django.field() - @strawberry.field - def config_template(self, id: int) -> ConfigTemplateType: - return models.ConfigTemplate.objects.get(pk=id) + config_template: ConfigTemplateType = strawberry_django.field() config_template_list: List[ConfigTemplateType] = strawberry_django.field() - @strawberry.field - def custom_field(self, id: int) -> CustomFieldType: - return models.CustomField.objects.get(pk=id) + custom_field: CustomFieldType = strawberry_django.field() custom_field_list: List[CustomFieldType] = strawberry_django.field() - @strawberry.field - def custom_field_choice_set(self, id: int) -> CustomFieldChoiceSetType: - return models.CustomFieldChoiceSet.objects.get(pk=id) + custom_field_choice_set: CustomFieldChoiceSetType = strawberry_django.field() custom_field_choice_set_list: List[CustomFieldChoiceSetType] = strawberry_django.field() - @strawberry.field - def custom_link(self, id: int) -> CustomLinkType: - return models.CustomLink.objects.get(pk=id) + custom_link: CustomLinkType = strawberry_django.field() custom_link_list: List[CustomLinkType] = strawberry_django.field() - @strawberry.field - def export_template(self, id: int) -> ExportTemplateType: - return models.ExportTemplate.objects.get(pk=id) + export_template: ExportTemplateType = strawberry_django.field() export_template_list: List[ExportTemplateType] = strawberry_django.field() - @strawberry.field - def image_attachment(self, id: int) -> ImageAttachmentType: - return models.ImageAttachment.objects.get(pk=id) + image_attachment: ImageAttachmentType = strawberry_django.field() image_attachment_list: List[ImageAttachmentType] = strawberry_django.field() - @strawberry.field - def saved_filter(self, id: int) -> SavedFilterType: - return models.SavedFilter.objects.get(pk=id) + saved_filter: SavedFilterType = strawberry_django.field() saved_filter_list: List[SavedFilterType] = strawberry_django.field() - @strawberry.field - def journal_entry(self, id: int) -> JournalEntryType: - return models.JournalEntry.objects.get(pk=id) + journal_entry: JournalEntryType = strawberry_django.field() journal_entry_list: List[JournalEntryType] = strawberry_django.field() - @strawberry.field - def tag(self, id: int) -> TagType: - return models.Tag.objects.get(pk=id) + notification: NotificationType = strawberry_django.field() + notification_list: List[NotificationType] = strawberry_django.field() + + notification_group: NotificationGroupType = strawberry_django.field() + notification_group_list: List[NotificationGroupType] = strawberry_django.field() + + subscription: SubscriptionType = strawberry_django.field() + subscription_list: List[SubscriptionType] = strawberry_django.field() + + tag: TagType = strawberry_django.field() tag_list: List[TagType] = strawberry_django.field() - @strawberry.field - def webhook(self, id: int) -> WebhookType: - return models.Webhook.objects.get(pk=id) + webhook: WebhookType = strawberry_django.field() webhook_list: List[WebhookType] = strawberry_django.field() - @strawberry.field - def event_rule(self, id: int) -> EventRuleType: - return models.EventRule.objects.get(pk=id) + event_rule: EventRuleType = strawberry_django.field() event_rule_list: List[EventRuleType] = strawberry_django.field() diff --git a/netbox/extras/graphql/types.py b/netbox/extras/graphql/types.py index 1f3bfcdb913..a53c7bed3e7 100644 --- a/netbox/extras/graphql/types.py +++ b/netbox/extras/graphql/types.py @@ -18,7 +18,10 @@ __all__ = ( 'ExportTemplateType', 'ImageAttachmentType', 'JournalEntryType', + 'NotificationGroupType', + 'NotificationType', 'SavedFilterType', + 'SubscriptionType', 'TagType', 'WebhookType', ) @@ -81,7 +84,7 @@ class CustomFieldType(ObjectType): class CustomFieldChoiceSetType(ObjectType): choices_for: List[Annotated["CustomFieldType", strawberry.lazy('extras.graphql.types')]] - extra_choices: List[str] | None + extra_choices: List[List[str]] | None @strawberry_django.type( @@ -122,6 +125,23 @@ class JournalEntryType(CustomFieldsMixin, TagsMixin, ObjectType): created_by: Annotated["UserType", strawberry.lazy('users.graphql.types')] | None +@strawberry_django.type( + models.Notification, + # filters=NotificationFilter +) +class NotificationType(ObjectType): + user: Annotated["UserType", strawberry.lazy('users.graphql.types')] | None + + +@strawberry_django.type( + models.NotificationGroup, + filters=NotificationGroupFilter +) +class NotificationGroupType(ObjectType): + users: List[Annotated["UserType", strawberry.lazy('users.graphql.types')]] + groups: List[Annotated["GroupType", strawberry.lazy('users.graphql.types')]] + + @strawberry_django.type( models.SavedFilter, exclude=['content_types',], @@ -131,6 +151,14 @@ class SavedFilterType(ObjectType): user: Annotated["UserType", strawberry.lazy('users.graphql.types')] | None +@strawberry_django.type( + models.Subscription, + # filters=NotificationFilter +) +class SubscriptionType(ObjectType): + user: Annotated["UserType", strawberry.lazy('users.graphql.types')] | None + + @strawberry_django.type( models.Tag, exclude=['extras_taggeditem_items', ], diff --git a/netbox/extras/jobs.py b/netbox/extras/jobs.py new file mode 100644 index 00000000000..64a7d6a69b4 --- /dev/null +++ b/netbox/extras/jobs.py @@ -0,0 +1,107 @@ +import logging +import traceback +from contextlib import nullcontext + +from django.db import transaction +from django.utils.translation import gettext as _ + +from core.signals import clear_events +from extras.models import Script as ScriptModel +from netbox.context_managers import event_tracking +from netbox.jobs import JobRunner +from utilities.exceptions import AbortScript, AbortTransaction +from .utils import is_report + + +class ScriptJob(JobRunner): + """ + Script execution job. + + A wrapper for calling Script.run(). This performs error handling and provides a hook for committing changes. It + exists outside the Script class to ensure it cannot be overridden by a script author. + """ + + class Meta: + # An explicit job name is not set because it doesn't make sense in this context. Currently, there's no scenario + # where jobs other than this one are used. Therefore, it is hidden, resulting in a cleaner job table overview. + name = '' + + def run_script(self, script, request, data, commit): + """ + Core script execution task. We capture this within a method to allow for conditionally wrapping it with the + event_tracking context manager (which is bypassed if commit == False). + + Args: + request: The WSGI request associated with this execution (if any) + data: A dictionary of data to be passed to the script upon execution + commit: Passed through to Script.run() + """ + logger = logging.getLogger(f"netbox.scripts.{script.full_name}") + logger.info(f"Running script (commit={commit})") + + try: + try: + with transaction.atomic(): + script.output = script.run(data, commit) + if not commit: + raise AbortTransaction() + except AbortTransaction: + script.log_info(message=_("Database changes have been reverted automatically.")) + if script.failed: + logger.warning("Script failed") + raise + + except Exception as e: + if type(e) is AbortScript: + msg = _("Script aborted with error: ") + str(e) + if is_report(type(script)): + script.log_failure(message=msg) + else: + script.log_failure(msg) + logger.error(f"Script aborted with error: {e}") + + else: + stacktrace = traceback.format_exc() + script.log_failure( + message=_("An exception occurred: ") + f"`{type(e).__name__}: {e}`\n```\n{stacktrace}\n```" + ) + logger.error(f"Exception raised during script execution: {e}") + + if type(e) is not AbortTransaction: + script.log_info(message=_("Database changes have been reverted due to error.")) + + # Clear all pending events. Job termination (including setting the status) is handled by the job framework. + if request: + clear_events.send(request) + raise + + # Update the job data regardless of the execution status of the job. Successes should be reported as well as + # failures. + finally: + self.job.data = script.get_job_data() + + def run(self, data, request=None, commit=True, **kwargs): + """ + Run the script. + + Args: + job: The Job associated with this execution + data: A dictionary of data to be passed to the script upon execution + request: The WSGI request associated with this execution (if any) + commit: Passed through to Script.run() + """ + script = ScriptModel.objects.get(pk=self.job.object_id).python_class() + + # Add files to form data + if request: + files = request.FILES + for field_name, fileobj in files.items(): + data[field_name] = fileobj + + # Add the current request as a property of the script + script.request = request + + # Execute the script. If commit is True, wrap it with the event_tracking context manager to ensure we process + # change logging, event rules, etc. + with event_tracking(request) if commit else nullcontext(): + self.run_script(script, request, data, commit) diff --git a/netbox/extras/lookups.py b/netbox/extras/lookups.py index a8d89c943cf..c496cce78b9 100644 --- a/netbox/extras/lookups.py +++ b/netbox/extras/lookups.py @@ -1,4 +1,5 @@ -from django.db.models import CharField, TextField, Lookup +from django.db.models import CharField, Lookup + from .fields import CachedValueField diff --git a/netbox/extras/management/commands/housekeeping.py b/netbox/extras/management/commands/housekeeping.py index 2ba0cbd7204..ade486fc024 100644 --- a/netbox/extras/management/commands/housekeeping.py +++ b/netbox/extras/management/commands/housekeeping.py @@ -93,7 +93,10 @@ class Command(BaseCommand): # Check for new releases (if enabled) if options['verbosity']: self.stdout.write("[*] Checking for latest release") - if settings.RELEASE_CHECK_URL: + if settings.ISOLATED_DEPLOYMENT: + if options['verbosity']: + self.stdout.write("\tSkipping: ISOLATED_DEPLOYMENT is enabled") + elif settings.RELEASE_CHECK_URL: headers = { 'Accept': 'application/vnd.github.v3+json', } @@ -126,7 +129,7 @@ class Command(BaseCommand): self.stdout.write(f"\tRequest error: {exc}", self.style.ERROR) else: if options['verbosity']: - self.stdout.write(f"\tSkipping: RELEASE_CHECK_URL not set") + self.stdout.write("\tSkipping: RELEASE_CHECK_URL not set") if options['verbosity']: self.stdout.write("Finished.", self.style.SUCCESS) diff --git a/netbox/extras/management/commands/reindex.py b/netbox/extras/management/commands/reindex.py index e20fad0ceb8..21442be934d 100644 --- a/netbox/extras/management/commands/reindex.py +++ b/netbox/extras/management/commands/reindex.py @@ -66,11 +66,16 @@ class Command(BaseCommand): raise CommandError(_("No indexers found!")) self.stdout.write(f'Reindexing {len(indexers)} models.') - # Clear all cached values for the specified models (if not being lazy) + # Clear cached values for the specified models (if not being lazy) if not kwargs['lazy']: + if model_labels: + content_types = [ContentType.objects.get_for_model(model) for model in indexers.keys()] + else: + content_types = None + self.stdout.write('Clearing cached values... ', ending='') self.stdout.flush() - deleted_count = search_backend.clear() + deleted_count = search_backend.clear(object_types=content_types) self.stdout.write(f'{deleted_count} entries deleted.') # Index models @@ -91,9 +96,9 @@ class Command(BaseCommand): if i: self.stdout.write(f'{i} entries cached.') else: - self.stdout.write(f'No objects found.') + self.stdout.write('No objects found.') - msg = f'Completed.' + msg = 'Completed.' if total_count := search_backend.size: msg += f' Total entries: {total_count}' self.stdout.write(msg, self.style.SUCCESS) diff --git a/netbox/extras/management/commands/runscript.py b/netbox/extras/management/commands/runscript.py index dbfbb40d90d..d5fb435ad12 100644 --- a/netbox/extras/management/commands/runscript.py +++ b/netbox/extras/management/commands/runscript.py @@ -1,19 +1,13 @@ import json import logging import sys -import traceback import uuid -from django.contrib.auth import get_user_model from django.core.management.base import BaseCommand, CommandError -from django.db import transaction -from core.choices import JobStatusChoices -from core.models import Job +from extras.jobs import ScriptJob from extras.scripts import get_module_and_script -from extras.signals import clear_events -from netbox.context_managers import event_tracking -from utilities.exceptions import AbortTransaction +from users.models import User from utilities.request import NetBoxFakeRequest @@ -33,46 +27,6 @@ class Command(BaseCommand): parser.add_argument('script', help="Script to run") def handle(self, *args, **options): - - def _run_script(): - """ - Core script execution task. We capture this within a subfunction to allow for conditionally wrapping it with - the event_tracking context manager (which is bypassed if commit == False). - """ - try: - try: - with transaction.atomic(): - script.output = script.run(data=data, commit=commit) - if not commit: - raise AbortTransaction() - except AbortTransaction: - script.log_info("Database changes have been reverted automatically.") - clear_events.send(request) - job.data = script.get_job_data() - job.terminate() - except Exception as e: - stacktrace = traceback.format_exc() - script.log_failure( - f"An exception occurred: `{type(e).__name__}: {e}`\n```\n{stacktrace}\n```" - ) - script.log_info("Database changes have been reverted due to error.") - logger.error(f"Exception raised during script execution: {e}") - clear_events.send(request) - job.data = script.get_job_data() - job.terminate(status=JobStatusChoices.STATUS_ERRORED, error=repr(e)) - - # Print any test method results - for test_name, attrs in job.data['tests'].items(): - self.stdout.write( - "\t{}: {} success, {} info, {} warning, {} failure".format( - test_name, attrs['success'], attrs['info'], attrs['warning'], attrs['failure'] - ) - ) - - logger.info(f"Script completed in {job.duration}") - - User = get_user_model() - # Params script = options['script'] loglevel = options['loglevel'] @@ -84,8 +38,8 @@ class Command(BaseCommand): data = {} module_name, script_name = script.split('.', 1) - module, script = get_module_and_script(module_name, script_name) - script = script.python_class + module, script_obj = get_module_and_script(module_name, script_name) + script = script_obj.python_class # Take user from command line if provided and exists, other if options['user']: @@ -97,7 +51,7 @@ class Command(BaseCommand): user = User.objects.filter(is_superuser=True).order_by('pk')[0] # Setup logging to Stdout - formatter = logging.Formatter(f'[%(asctime)s][%(levelname)s] - %(message)s') + formatter = logging.Formatter('[%(asctime)s][%(levelname)s] - %(message)s') stdouthandler = logging.StreamHandler(sys.stdout) stdouthandler.setLevel(logging.DEBUG) stdouthandler.setFormatter(formatter) @@ -120,40 +74,29 @@ class Command(BaseCommand): # Initialize the script form script = script() form = script.as_form(data, None) - - # Create the job - job = Job.objects.create( - object=module, - name=script.class_name, - user=User.objects.filter(is_superuser=True).order_by('pk')[0], - job_id=uuid.uuid4() - ) - - request = NetBoxFakeRequest({ - 'META': {}, - 'POST': data, - 'GET': {}, - 'FILES': {}, - 'user': user, - 'path': '', - 'id': job.job_id - }) - - if form.is_valid(): - job.status = JobStatusChoices.STATUS_RUNNING - job.save() - - logger.info(f"Running script (commit={commit})") - script.request = request - - # Execute the script. If commit is True, wrap it with the event_tracking context manager to ensure we process - # change logging, webhooks, etc. - with event_tracking(request): - _run_script() - else: + if not form.is_valid(): logger.error('Data is not valid:') for field, errors in form.errors.get_json_data().items(): for error in errors: logger.error(f'\t{field}: {error.get("message")}') - job.status = JobStatusChoices.STATUS_ERRORED - job.save() + raise CommandError() + + # Execute the script. + job = ScriptJob.enqueue( + instance=script_obj, + user=user, + immediate=True, + data=data, + request=NetBoxFakeRequest({ + 'META': {}, + 'POST': data, + 'GET': {}, + 'FILES': {}, + 'user': user, + 'path': '', + 'id': uuid.uuid4() + }), + commit=commit, + ) + + logger.info(f"Script completed in {job.duration}") diff --git a/netbox/extras/migrations/0002_squashed_0059.py b/netbox/extras/migrations/0002_squashed_0059.py index 98bed255a54..a403a0e191f 100644 --- a/netbox/extras/migrations/0002_squashed_0059.py +++ b/netbox/extras/migrations/0002_squashed_0059.py @@ -131,10 +131,6 @@ class Migration(migrations.Migration): name='webhook', unique_together={('payload_url', 'type_create', 'type_update', 'type_delete')}, ), - migrations.AlterIndexTogether( - name='taggeditem', - index_together={('content_type', 'object_id')}, - ), migrations.AlterUniqueTogether( name='exporttemplate', unique_together={('content_type', 'name')}, diff --git a/netbox/extras/migrations/0087_squashed_0098.py b/netbox/extras/migrations/0087_squashed_0098.py index 55f276ecdbb..bbe7f79f57b 100644 --- a/netbox/extras/migrations/0087_squashed_0098.py +++ b/netbox/extras/migrations/0087_squashed_0098.py @@ -98,10 +98,9 @@ class Migration(migrations.Migration): name='object_types', field=models.ManyToManyField(blank=True, related_name='+', to='contenttypes.contenttype'), ), - migrations.RenameIndex( + migrations.AddIndex( model_name='taggeditem', - new_name='extras_tagg_content_717743_idx', - old_fields=('content_type', 'object_id'), + index=models.Index(fields=['content_type', 'object_id'], name='extras_tagg_content_717743_idx'), ), migrations.CreateModel( name='Bookmark', diff --git a/netbox/extras/migrations/0116_custom_link_button_color.py b/netbox/extras/migrations/0116_custom_link_button_color.py new file mode 100644 index 00000000000..665d73017b6 --- /dev/null +++ b/netbox/extras/migrations/0116_custom_link_button_color.py @@ -0,0 +1,25 @@ +from django.db import migrations, models + + +def update_link_buttons(apps, schema_editor): + CustomLink = apps.get_model('extras', 'CustomLink') + CustomLink.objects.filter(button_class='outline-dark').update(button_class='default') + + +class Migration(migrations.Migration): + + dependencies = [ + ('extras', '0115_convert_dashboard_widgets'), + ] + + operations = [ + migrations.AlterField( + model_name='customlink', + name='button_class', + field=models.CharField(default='default', max_length=30), + ), + migrations.RunPython( + code=update_link_buttons, + reverse_code=migrations.RunPython.noop + ), + ] diff --git a/netbox/extras/migrations/0116_move_objectchange.py b/netbox/extras/migrations/0117_move_objectchange.py similarity index 98% rename from netbox/extras/migrations/0116_move_objectchange.py rename to netbox/extras/migrations/0117_move_objectchange.py index b3833f7f89a..a69b5a7118f 100644 --- a/netbox/extras/migrations/0116_move_objectchange.py +++ b/netbox/extras/migrations/0117_move_objectchange.py @@ -28,7 +28,7 @@ def update_dashboard_widgets(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('extras', '0115_convert_dashboard_widgets'), + ('extras', '0116_custom_link_button_color'), ('core', '0011_move_objectchange'), ] diff --git a/netbox/extras/migrations/0117_customfield_uniqueness.py b/netbox/extras/migrations/0118_customfield_uniqueness.py similarity index 76% rename from netbox/extras/migrations/0117_customfield_uniqueness.py rename to netbox/extras/migrations/0118_customfield_uniqueness.py index 5d633b039d8..b7693aa24e8 100644 --- a/netbox/extras/migrations/0117_customfield_uniqueness.py +++ b/netbox/extras/migrations/0118_customfield_uniqueness.py @@ -4,13 +4,13 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('extras', '0116_move_objectchange'), + ('extras', '0117_move_objectchange'), ] operations = [ migrations.AddField( model_name='customfield', - name='validation_unique', + name='unique', field=models.BooleanField(default=False), ), ] diff --git a/netbox/extras/migrations/0119_notifications.py b/netbox/extras/migrations/0119_notifications.py new file mode 100644 index 00000000000..c266f3b6c96 --- /dev/null +++ b/netbox/extras/migrations/0119_notifications.py @@ -0,0 +1,79 @@ +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('extras', '0118_customfield_uniqueness'), + ('users', '0009_update_group_perms'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='NotificationGroup', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('name', models.CharField(max_length=100, unique=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('groups', models.ManyToManyField(blank=True, related_name='notification_groups', to='users.group')), + ('users', models.ManyToManyField(blank=True, related_name='notification_groups', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'notification group', + 'verbose_name_plural': 'notification groups', + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='Subscription', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True)), + ('object_id', models.PositiveBigIntegerField()), + ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subscriptions', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'subscription', + 'verbose_name_plural': 'subscriptions', + 'ordering': ('-created', 'user'), + }, + ), + migrations.CreateModel( + name='Notification', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True)), + ('read', models.DateTimeField(blank=True, null=True)), + ('object_id', models.PositiveBigIntegerField()), + ('event_type', models.CharField(max_length=50)), + ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype')), + ('object_repr', models.CharField(editable=False, max_length=200)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notifications', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'notification', + 'verbose_name_plural': 'notifications', + 'ordering': ('-created', 'pk'), + 'indexes': [models.Index(fields=['object_type', 'object_id'], name='extras_noti_object__be74d5_idx')], + }, + ), + migrations.AddConstraint( + model_name='notification', + constraint=models.UniqueConstraint(fields=('object_type', 'object_id', 'user'), name='extras_notification_unique_per_object_and_user'), + ), + migrations.AddIndex( + model_name='subscription', + index=models.Index(fields=['object_type', 'object_id'], name='extras_subs_object__37ef68_idx'), + ), + migrations.AddConstraint( + model_name='subscription', + constraint=models.UniqueConstraint(fields=('object_type', 'object_id', 'user'), name='extras_subscription_unique_per_object_and_user'), + ), + ] diff --git a/netbox/extras/migrations/0120_eventrule_event_types.py b/netbox/extras/migrations/0120_eventrule_event_types.py new file mode 100644 index 00000000000..f62c83e4c22 --- /dev/null +++ b/netbox/extras/migrations/0120_eventrule_event_types.py @@ -0,0 +1,75 @@ +import django.contrib.postgres.fields +from django.db import migrations, models + +from core.events import * + + +def set_event_types(apps, schema_editor): + EventRule = apps.get_model('extras', 'EventRule') + event_rules = EventRule.objects.all() + + for event_rule in event_rules: + event_rule.event_types = [] + if event_rule.type_create: + event_rule.event_types.append(OBJECT_CREATED) + if event_rule.type_update: + event_rule.event_types.append(OBJECT_UPDATED) + if event_rule.type_delete: + event_rule.event_types.append(OBJECT_DELETED) + if event_rule.type_job_start: + event_rule.event_types.append(JOB_STARTED) + if event_rule.type_job_end: + # Map type_job_end to all job termination events + event_rule.event_types.extend([JOB_COMPLETED, JOB_ERRORED, JOB_FAILED]) + + EventRule.objects.bulk_update(event_rules, ['event_types']) + + +class Migration(migrations.Migration): + + dependencies = [ + ('extras', '0119_notifications'), + ] + + operations = [ + migrations.AddField( + model_name='eventrule', + name='event_types', + field=django.contrib.postgres.fields.ArrayField( + base_field=models.CharField(max_length=50), + blank=True, + null=True, + size=None + ), + ), + migrations.RunPython( + code=set_event_types, + reverse_code=migrations.RunPython.noop + ), + migrations.AlterField( + model_name='eventrule', + name='event_types', + field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=50), size=None), + preserve_default=False, + ), + migrations.RemoveField( + model_name='eventrule', + name='type_create', + ), + migrations.RemoveField( + model_name='eventrule', + name='type_delete', + ), + migrations.RemoveField( + model_name='eventrule', + name='type_job_end', + ), + migrations.RemoveField( + model_name='eventrule', + name='type_job_start', + ), + migrations.RemoveField( + model_name='eventrule', + name='type_update', + ), + ] diff --git a/netbox/extras/migrations/0121_customfield_related_object_filter.py b/netbox/extras/migrations/0121_customfield_related_object_filter.py new file mode 100644 index 00000000000..d6e41fd7def --- /dev/null +++ b/netbox/extras/migrations/0121_customfield_related_object_filter.py @@ -0,0 +1,16 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('extras', '0120_eventrule_event_types'), + ] + + operations = [ + migrations.AddField( + model_name='customfield', + name='related_object_filter', + field=models.JSONField(blank=True, null=True), + ), + ] diff --git a/netbox/extras/models/__init__.py b/netbox/extras/models/__init__.py index 0413d1b91cd..e8572103428 100644 --- a/netbox/extras/models/__init__.py +++ b/netbox/extras/models/__init__.py @@ -2,6 +2,7 @@ from .configs import * from .customfields import * from .dashboard import * from .models import * +from .notifications import * from .scripts import * from .search import * from .staging import * diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index cee69d16b1e..8b7fc0cb637 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -21,6 +21,7 @@ from netbox.models import ChangeLoggedModel from netbox.models.features import CloningMixin, ExportTemplatesMixin from netbox.search import FieldTypes from utilities import filters +from utilities.datetime import datetime_from_timestamp from utilities.forms.fields import ( CSVChoiceField, CSVModelChoiceField, CSVModelMultipleChoiceField, CSVMultipleChoiceField, DynamicChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, DynamicMultipleChoiceField, JSONField, LaxURLField, @@ -128,7 +129,12 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): required = models.BooleanField( verbose_name=_('required'), default=False, - help_text=_("If true, this field is required when creating new objects or editing an existing object.") + help_text=_("This field is required when creating new objects or editing an existing object.") + ) + unique = models.BooleanField( + verbose_name=_('must be unique'), + default=False, + help_text=_("The value of this field must be unique for the assigned object") ) search_weight = models.PositiveSmallIntegerField( verbose_name=_('search weight'), @@ -153,6 +159,14 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): 'Default value for the field (must be a JSON value). Encapsulate strings with double quotes (e.g. "Foo").' ) ) + related_object_filter = models.JSONField( + blank=True, + null=True, + help_text=_( + 'Filter the object selection choices using a query_params dict (must be a JSON value).' + 'Encapsulate strings with double quotes (e.g. "Foo").' + ) + ) weight = models.PositiveSmallIntegerField( default=100, verbose_name=_('display weight'), @@ -180,11 +194,6 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): 'example, ^[A-Z]{3}$ will limit values to exactly three uppercase letters.' ) ) - validation_unique = models.BooleanField( - verbose_name=_('must be unique'), - default=False, - help_text=_('The value of this field must be unique for the assigned object') - ) choice_set = models.ForeignKey( to='CustomFieldChoiceSet', on_delete=models.PROTECT, @@ -220,9 +229,9 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): objects = CustomFieldManager() clone_fields = ( - 'object_types', 'type', 'related_object_type', 'group_name', 'description', 'required', 'search_weight', - 'filter_logic', 'default', 'weight', 'validation_minimum', 'validation_maximum', 'validation_regex', - 'validation_unique', 'choice_set', 'ui_visible', 'ui_editable', 'is_cloneable', + 'object_types', 'type', 'related_object_type', 'group_name', 'description', 'required', 'unique', + 'search_weight', 'filter_logic', 'default', 'weight', 'validation_minimum', 'validation_maximum', + 'validation_regex', 'choice_set', 'ui_visible', 'ui_editable', 'is_cloneable', ) class Meta: @@ -274,7 +283,7 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): """ for ct in content_types: model = ct.model_class() - instances = model.objects.exclude(**{f'custom_field_data__contains': self.name}) + instances = model.objects.exclude(**{'custom_field_data__contains': self.name}) for instance in instances: instance.custom_field_data[self.name] = self.default model.objects.bulk_update(instances, ['custom_field_data'], batch_size=100) @@ -285,11 +294,11 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): no longer assigned to a model, or because it has been deleted). """ for ct in content_types: - model = ct.model_class() - instances = model.objects.filter(custom_field_data__has_key=self.name) - for instance in instances: - del instance.custom_field_data[self.name] - model.objects.bulk_update(instances, ['custom_field_data'], batch_size=100) + if model := ct.model_class(): + instances = model.objects.filter(custom_field_data__has_key=self.name) + for instance in instances: + del instance.custom_field_data[self.name] + model.objects.bulk_update(instances, ['custom_field_data'], batch_size=100) def rename_object_data(self, old_name, new_name): """ @@ -340,9 +349,9 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): }) # Uniqueness can not be enforced for boolean fields - if self.validation_unique and self.type == CustomFieldTypeChoices.TYPE_BOOLEAN: + if self.unique and self.type == CustomFieldTypeChoices.TYPE_BOOLEAN: raise ValidationError({ - 'validation_unique': _("Uniqueness cannot be enforced for boolean fields") + 'unique': _("Uniqueness cannot be enforced for boolean fields") }) # Choice set must be set on selection fields, and *only* on selection fields @@ -363,15 +372,24 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): if self.type in (CustomFieldTypeChoices.TYPE_OBJECT, CustomFieldTypeChoices.TYPE_MULTIOBJECT): if not self.related_object_type: raise ValidationError({ - 'object_type': _("Object fields must define an object type.") + 'related_object_type': _("Object fields must define an object type.") }) elif self.related_object_type: raise ValidationError({ - 'object_type': _( - "{type} fields may not define an object type.") - .format(type=self.get_type_display()) + 'type': _("{type} fields may not define an object type.") .format(type=self.get_type_display()) }) + # Related object filter can be set only for object-type fields, and must contain a dictionary mapping (if set) + if self.related_object_filter is not None: + if self.type not in (CustomFieldTypeChoices.TYPE_OBJECT, CustomFieldTypeChoices.TYPE_MULTIOBJECT): + raise ValidationError({ + 'related_object_filter': _("A related object filter can be defined only for object fields.") + }) + if type(self.related_object_filter) is not dict: + raise ValidationError({ + 'related_object_filter': _("Filter must be defined as a dictionary mapping attributes to values.") + }) + def serialize(self, value): """ Prepare a value for storage as JSON data. @@ -501,27 +519,35 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): # JSON elif self.type == CustomFieldTypeChoices.TYPE_JSON: - field = JSONField(required=required, initial=json.dumps(initial) if initial else '') + field = JSONField(required=required, initial=json.dumps(initial) if initial else None) # Object elif self.type == CustomFieldTypeChoices.TYPE_OBJECT: model = self.related_object_type.model_class() field_class = CSVModelChoiceField if for_csv_import else DynamicModelChoiceField - field = field_class( - queryset=model.objects.all(), - required=required, - initial=initial - ) + kwargs = { + 'queryset': model.objects.all(), + 'required': required, + 'initial': initial, + } + if not for_csv_import: + kwargs['query_params'] = self.related_object_filter + + field = field_class(**kwargs) # Multiple objects elif self.type == CustomFieldTypeChoices.TYPE_MULTIOBJECT: model = self.related_object_type.model_class() field_class = CSVModelMultipleChoiceField if for_csv_import else DynamicModelMultipleChoiceField - field = field_class( - queryset=model.objects.all(), - required=required, - initial=initial, - ) + kwargs = { + 'queryset': model.objects.all(), + 'required': required, + 'initial': initial, + } + if not for_csv_import: + kwargs['query_params'] = self.related_object_filter + + field = field_class(**kwargs) # Text else: @@ -635,7 +661,7 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): raise ValidationError(_("Value must be an integer.")) if self.validation_minimum is not None and value < self.validation_minimum: raise ValidationError( - _("Value must be at least {minimum}").format(minimum=self.validation_maximum) + _("Value must be at least {minimum}").format(minimum=self.validation_minimum) ) if self.validation_maximum is not None and value > self.validation_maximum: raise ValidationError( @@ -672,12 +698,8 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): # Validate date & time elif self.type == CustomFieldTypeChoices.TYPE_DATETIME: if type(value) is not datetime: - # Work around UTC issue for Python < 3.11; see - # https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat - if type(value) is str and value.endswith('Z'): - value = f'{value[:-1]}+00:00' try: - datetime.fromisoformat(value) + datetime_from_timestamp(value) except ValueError: raise ValidationError( _("Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS).") @@ -763,6 +785,12 @@ class CustomFieldChoiceSet(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel def __str__(self): return self.name + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # Cache the initial set of choices for comparison under clean() + self._original_extra_choices = self.__dict__.get('extra_choices') + def get_absolute_url(self): return reverse('extras:customfieldchoiceset', args=[self.pk]) @@ -796,6 +824,32 @@ class CustomFieldChoiceSet(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel if not self.base_choices and not self.extra_choices: raise ValidationError(_("Must define base or extra choices.")) + # Check whether any choices have been removed. If so, check whether any of the removed + # choices are still set in custom field data for any object. + original_choices = set([ + c[0] for c in self._original_extra_choices + ]) if self._original_extra_choices else set() + current_choices = set([ + c[0] for c in self.extra_choices + ]) if self.extra_choices else set() + if removed_choices := original_choices - current_choices: + for custom_field in self.choices_for.all(): + for object_type in custom_field.object_types.all(): + model = object_type.model_class() + for choice in removed_choices: + # Form the query based on the type of custom field + if custom_field.type == CustomFieldTypeChoices.TYPE_MULTISELECT: + query_args = {f"custom_field_data__{custom_field.name}__contains": choice} + else: + query_args = {f"custom_field_data__{custom_field.name}": choice} + # Raise a ValidationError if there are any objects which still reference the removed choice + if model.objects.filter(models.Q(**query_args)).exists(): + raise ValidationError( + _( + "Cannot remove choice {choice} as there are {model} objects which reference it." + ).format(choice=choice, model=object_type) + ) + def save(self, *args, **kwargs): # Sort choices if alphabetical ordering is enforced diff --git a/netbox/extras/models/dashboard.py b/netbox/extras/models/dashboard.py index 7b9293777b0..669785cdde8 100644 --- a/netbox/extras/models/dashboard.py +++ b/netbox/extras/models/dashboard.py @@ -1,4 +1,3 @@ -from django.contrib.auth import get_user_model from django.db import models from django.utils.translation import gettext_lazy as _ @@ -11,7 +10,7 @@ __all__ = ( class Dashboard(models.Model): user = models.OneToOneField( - to=get_user_model(), + to='users.User', on_delete=models.CASCADE, related_name='dashboard' ) diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index cf439594319..d8a274c8975 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -3,6 +3,7 @@ import urllib.parse from django.conf import settings from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation +from django.contrib.postgres.fields import ArrayField from django.core.validators import ValidationError from django.db import models from django.http import HttpResponse @@ -17,6 +18,7 @@ from extras.conditions import ConditionSet from extras.constants import * from extras.utils import image_upload from netbox.config import get_config +from netbox.events import get_event_type_choices from netbox.models import ChangeLoggedModel from netbox.models.features import ( CloningMixin, CustomFieldsMixin, CustomLinksMixin, ExportTemplatesMixin, SyncedDataMixin, TagsMixin, @@ -60,30 +62,9 @@ class EventRule(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLogged max_length=200, blank=True ) - type_create = models.BooleanField( - verbose_name=_('on create'), - default=False, - help_text=_("Triggers when a matching object is created.") - ) - type_update = models.BooleanField( - verbose_name=_('on update'), - default=False, - help_text=_("Triggers when a matching object is updated.") - ) - type_delete = models.BooleanField( - verbose_name=_('on delete'), - default=False, - help_text=_("Triggers when a matching object is deleted.") - ) - type_job_start = models.BooleanField( - verbose_name=_('on job start'), - default=False, - help_text=_("Triggers when a job for a matching object is started.") - ) - type_job_end = models.BooleanField( - verbose_name=_('on job end'), - default=False, - help_text=_("Triggers when a job for a matching object terminates.") + event_types = ArrayField( + base_field=models.CharField(max_length=50, choices=get_event_type_choices), + help_text=_("The types of event which will trigger this rule.") ) enabled = models.BooleanField( verbose_name=_('enabled'), @@ -144,14 +125,6 @@ class EventRule(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLogged def clean(self): super().clean() - # At least one action type must be selected - if not any([ - self.type_create, self.type_update, self.type_delete, self.type_job_start, self.type_job_end - ]): - raise ValidationError( - _("At least one event type must be selected: create, update, delete, job start, and/or job end.") - ) - # Validate that any conditions are in the correct format if self.conditions: try: diff --git a/netbox/extras/models/notifications.py b/netbox/extras/models/notifications.py new file mode 100644 index 00000000000..7fe03147cd6 --- /dev/null +++ b/netbox/extras/models/notifications.py @@ -0,0 +1,235 @@ +from functools import cached_property + +from django.conf import settings +from django.contrib.contenttypes.fields import GenericForeignKey +from django.core.exceptions import ValidationError +from django.db import models +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ + +from core.models import ObjectType +from extras.querysets import NotificationQuerySet +from netbox.models import ChangeLoggedModel +from netbox.registry import registry +from users.models import User +from utilities.querysets import RestrictedQuerySet + +__all__ = ( + 'Notification', + 'NotificationGroup', + 'Subscription', +) + + +def get_event_type_choices(): + """ + Compile a list of choices from all registered event types + """ + return [ + (name, event.text) + for name, event in registry['event_types'].items() + ] + + +class Notification(models.Model): + """ + A notification message for a User relating to a specific object in NetBox. + """ + created = models.DateTimeField( + verbose_name=_('created'), + auto_now_add=True + ) + read = models.DateTimeField( + verbose_name=_('read'), + null=True, + blank=True + ) + user = models.ForeignKey( + to=settings.AUTH_USER_MODEL, + on_delete=models.CASCADE, + related_name='notifications' + ) + object_type = models.ForeignKey( + to='contenttypes.ContentType', + on_delete=models.PROTECT + ) + object_id = models.PositiveBigIntegerField() + object = GenericForeignKey( + ct_field='object_type', + fk_field='object_id' + ) + object_repr = models.CharField( + max_length=200, + editable=False + ) + event_type = models.CharField( + verbose_name=_('event'), + max_length=50, + choices=get_event_type_choices + ) + + objects = NotificationQuerySet.as_manager() + + class Meta: + ordering = ('-created', 'pk') + indexes = ( + models.Index(fields=('object_type', 'object_id')), + ) + constraints = ( + models.UniqueConstraint( + fields=('object_type', 'object_id', 'user'), + name='%(app_label)s_%(class)s_unique_per_object_and_user' + ), + ) + verbose_name = _('notification') + verbose_name_plural = _('notifications') + + def __str__(self): + return self.object_repr + + def get_absolute_url(self): + return reverse('account:notifications') + + def clean(self): + super().clean() + + # Validate the assigned object type + if self.object_type not in ObjectType.objects.with_feature('notifications'): + raise ValidationError( + _("Objects of this type ({type}) do not support notifications.").format(type=self.object_type) + ) + + def save(self, *args, **kwargs): + # Record a string representation of the associated object + if self.object: + self.object_repr = self.get_object_repr(self.object) + + super().save(*args, **kwargs) + + @cached_property + def event(self): + """ + Returns the registered Event which triggered this Notification. + """ + return registry['event_types'].get(self.event_type) + + @classmethod + def get_object_repr(cls, obj): + return str(obj)[:200] + + +class NotificationGroup(ChangeLoggedModel): + """ + A collection of users and/or groups to be informed for certain notifications. + """ + name = models.CharField( + verbose_name=_('name'), + max_length=100, + unique=True + ) + description = models.CharField( + verbose_name=_('description'), + max_length=200, + blank=True + ) + groups = models.ManyToManyField( + to='users.Group', + verbose_name=_('groups'), + blank=True, + related_name='notification_groups' + ) + users = models.ManyToManyField( + to='users.User', + verbose_name=_('users'), + blank=True, + related_name='notification_groups' + ) + + objects = RestrictedQuerySet.as_manager() + + class Meta: + ordering = ('name',) + verbose_name = _('notification group') + verbose_name_plural = _('notification groups') + + def __str__(self): + return self.name + + def get_absolute_url(self): + return reverse('extras:notificationgroup', args=[self.pk]) + + @cached_property + def members(self): + """ + Return all Users who belong to this notification group. + """ + return self.users.union( + User.objects.filter(groups__in=self.groups.all()) + ).order_by('username') + + def notify(self, **kwargs): + """ + Bulk-create Notifications for all members of this group. + """ + Notification.objects.bulk_create([ + Notification(user=member, **kwargs) + for member in self.members + ]) + notify.alters_data = True + + +class Subscription(models.Model): + """ + A User's subscription to a particular object, to be notified of changes. + """ + created = models.DateTimeField( + verbose_name=_('created'), + auto_now_add=True + ) + user = models.ForeignKey( + to=settings.AUTH_USER_MODEL, + on_delete=models.CASCADE, + related_name='subscriptions' + ) + object_type = models.ForeignKey( + to='contenttypes.ContentType', + on_delete=models.PROTECT + ) + object_id = models.PositiveBigIntegerField() + object = GenericForeignKey( + ct_field='object_type', + fk_field='object_id' + ) + + objects = RestrictedQuerySet.as_manager() + + class Meta: + ordering = ('-created', 'user') + indexes = ( + models.Index(fields=('object_type', 'object_id')), + ) + constraints = ( + models.UniqueConstraint( + fields=('object_type', 'object_id', 'user'), + name='%(app_label)s_%(class)s_unique_per_object_and_user' + ), + ) + verbose_name = _('subscription') + verbose_name_plural = _('subscriptions') + + def __str__(self): + if self.object: + return str(self.object) + return super().__str__() + + def get_absolute_url(self): + return reverse('account:subscriptions') + + def clean(self): + super().clean() + + # Validate the assigned object type + if self.object_type not in ObjectType.objects.with_feature('notifications'): + raise ValidationError( + _("Objects of this type ({type}) do not support notifications.").format(type=self.object_type) + ) diff --git a/netbox/extras/models/staging.py b/netbox/extras/models/staging.py index 7ffbde08965..68d37de7f53 100644 --- a/netbox/extras/models/staging.py +++ b/netbox/extras/models/staging.py @@ -1,6 +1,6 @@ import logging +import warnings -from django.contrib.auth import get_user_model from django.contrib.contenttypes.fields import GenericForeignKey from django.db import models, transaction from django.utils.translation import gettext_lazy as _ @@ -34,7 +34,7 @@ class Branch(ChangeLoggedModel): blank=True ) user = models.ForeignKey( - to=get_user_model(), + to='users.User', on_delete=models.SET_NULL, blank=True, null=True @@ -45,6 +45,13 @@ class Branch(ChangeLoggedModel): verbose_name = _('branch') verbose_name_plural = _('branches') + def __init__(self, *args, **kwargs): + warnings.warn( + 'The staged changes functionality has been deprecated and will be removed in a future release.', + DeprecationWarning + ) + super().__init__(*args, **kwargs) + def __str__(self): return f'{self.name} ({self.pk})' @@ -98,6 +105,13 @@ class StagedChange(CustomValidationMixin, EventRulesMixin, models.Model): verbose_name = _('staged change') verbose_name_plural = _('staged changes') + def __init__(self, *args, **kwargs): + warnings.warn( + 'The staged changes functionality has been deprecated and will be removed in a future release.', + DeprecationWarning + ) + super().__init__(*args, **kwargs) + def __str__(self): action = self.get_action_display() app_label, model_name = self.object_type.natural_key() diff --git a/netbox/extras/querysets.py b/netbox/extras/querysets.py index 3ee9d73e8ba..9b3722eef07 100644 --- a/netbox/extras/querysets.py +++ b/netbox/extras/querysets.py @@ -5,6 +5,12 @@ from extras.models.tags import TaggedItem from utilities.query_functions import EmptyGroupByJSONBAgg from utilities.querysets import RestrictedQuerySet +__all__ = ( + 'ConfigContextModelQuerySet', + 'ConfigContextQuerySet', + 'NotificationQuerySet', +) + class ConfigContextQuerySet(RestrictedQuerySet): @@ -145,3 +151,12 @@ class ConfigContextModelQuerySet(RestrictedQuerySet): ) return base_query + + +class NotificationQuerySet(RestrictedQuerySet): + + def unread(self): + """ + Return only unread notifications. + """ + return self.filter(read__isnull=True) diff --git a/netbox/extras/scripts.py b/netbox/extras/scripts.py index f6cc2bad002..f2bd75a1dc0 100644 --- a/netbox/extras/scripts.py +++ b/netbox/extras/scripts.py @@ -2,32 +2,23 @@ import inspect import json import logging import os -import traceback -from datetime import timedelta import yaml from django import forms from django.conf import settings from django.core.validators import RegexValidator -from django.db import transaction from django.utils import timezone from django.utils.functional import classproperty from django.utils.translation import gettext as _ -from core.choices import JobStatusChoices -from core.models import Job from extras.choices import LogLevelChoices -from extras.models import ScriptModule, Script as ScriptModel -from extras.signals import clear_events +from extras.models import ScriptModule from ipam.formfields import IPAddressFormField, IPNetworkFormField from ipam.validators import MaxPrefixLengthValidator, MinPrefixLengthValidator, prefix_validator -from netbox.context_managers import event_tracking -from utilities.exceptions import AbortScript, AbortTransaction from utilities.forms import add_blank_choice from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField from utilities.forms.widgets import DatePicker, DateTimePicker from .forms import ScriptForm -from .utils import is_report __all__ = ( @@ -48,7 +39,6 @@ __all__ = ( 'StringVar', 'TextVar', 'get_module_and_script', - 'run_script', ) @@ -564,7 +554,7 @@ class BaseScript: """ Run the report and save its results. Each test method will be executed in order. """ - self.logger.info(f"Running report") + self.logger.info("Running report") try: for test_name in self.tests: @@ -613,111 +603,3 @@ def get_module_and_script(module_name, script_name): module = ScriptModule.objects.get(file_path=f'{module_name}.py') script = module.scripts.get(name=script_name) return module, script - - -def run_script(data, job, request=None, commit=True, **kwargs): - """ - A wrapper for calling Script.run(). This performs error handling and provides a hook for committing changes. It - exists outside the Script class to ensure it cannot be overridden by a script author. - - Args: - data: A dictionary of data to be passed to the script upon execution - job: The Job associated with this execution - request: The WSGI request associated with this execution (if any) - commit: Passed through to Script.run() - """ - job.start() - - script = ScriptModel.objects.get(pk=job.object_id).python_class() - - logger = logging.getLogger(f"netbox.scripts.{script.full_name}") - logger.info(f"Running script (commit={commit})") - - # Add files to form data - if request: - files = request.FILES - for field_name, fileobj in files.items(): - data[field_name] = fileobj - - # Add the current request as a property of the script - script.request = request - - def set_job_data(script): - job.data = { - 'log': script.messages, - 'output': script.output, - 'tests': script.tests, - } - - return job - - def _run_script(job): - """ - Core script execution task. We capture this within a subfunction to allow for conditionally wrapping it with - the event_tracking context manager (which is bypassed if commit == False). - """ - try: - try: - with transaction.atomic(): - script.output = script.run(data, commit) - if not commit: - raise AbortTransaction() - except AbortTransaction: - script.log_info(message=_("Database changes have been reverted automatically.")) - if request: - clear_events.send(request) - - job.data = script.get_job_data() - if script.failed: - logger.warning(f"Script failed") - job.terminate(status=JobStatusChoices.STATUS_FAILED) - else: - job.terminate() - - except Exception as e: - if type(e) is AbortScript: - msg = _("Script aborted with error: ") + str(e) - if is_report(type(script)): - script.log_failure(message=msg) - else: - script.log_failure(msg) - - logger.error(f"Script aborted with error: {e}") - else: - stacktrace = traceback.format_exc() - script.log_failure( - message=_("An exception occurred: ") + f"`{type(e).__name__}: {e}`\n```\n{stacktrace}\n```" - ) - logger.error(f"Exception raised during script execution: {e}") - script.log_info(message=_("Database changes have been reverted due to error.")) - - job.data = script.get_job_data() - job.terminate(status=JobStatusChoices.STATUS_ERRORED, error=repr(e)) - if request: - clear_events.send(request) - - logger.info(f"Script completed in {job.duration}") - - # Execute the script. If commit is True, wrap it with the event_tracking context manager to ensure we process - # change logging, event rules, etc. - if commit: - with event_tracking(request): - _run_script(job) - else: - _run_script(job) - - # Schedule the next job if an interval has been set - if job.interval: - new_scheduled_time = job.scheduled + timedelta(minutes=job.interval) - Job.enqueue( - run_script, - instance=job.object, - name=job.name, - user=job.user, - schedule_at=new_scheduled_time, - interval=job.interval, - job_timeout=script.job_timeout, - data=data, - request=request, - commit=commit - ) diff --git a/netbox/extras/signals.py b/netbox/extras/signals.py index 53ec39cac83..10c3f73c543 100644 --- a/netbox/extras/signals.py +++ b/netbox/extras/signals.py @@ -1,188 +1,18 @@ -import importlib -import logging - from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import ImproperlyConfigured, ValidationError -from django.db.models.fields.reverse_related import ManyToManyRel from django.db.models.signals import m2m_changed, post_save, pre_delete -from django.dispatch import receiver, Signal -from django.utils.translation import gettext_lazy as _ -from django_prometheus.models import model_deletes, model_inserts, model_updates +from django.dispatch import receiver -from core.choices import ObjectChangeActionChoices -from core.models import ObjectChange, ObjectType +from core.events import * +from core.models import ObjectType from core.signals import job_end, job_start -from extras.constants import EVENT_JOB_END, EVENT_JOB_START from extras.events import process_event_rules -from extras.models import EventRule +from extras.models import EventRule, Notification, Subscription from netbox.config import get_config -from netbox.context import current_request, events_queue -from netbox.models.features import ChangeLoggingMixin +from netbox.registry import registry from netbox.signals import post_clean from utilities.exceptions import AbortRequest -from .events import enqueue_object, get_snapshots, serialize_for_event from .models import CustomField, TaggedItem -from .validators import CustomValidator - - -def run_validators(instance, validators): - """ - Run the provided iterable of validators for the instance. - """ - request = current_request.get() - for validator in validators: - - # Loading a validator class by dotted path - if type(validator) is str: - module, cls = validator.rsplit('.', 1) - validator = getattr(importlib.import_module(module), cls)() - - # Constructing a new instance on the fly from a ruleset - elif type(validator) is dict: - validator = CustomValidator(validator) - - elif not issubclass(validator.__class__, CustomValidator): - raise ImproperlyConfigured(f"Invalid value for custom validator: {validator}") - - validator(instance, request) - - -# -# Change logging/webhooks -# - -# Define a custom signal that can be sent to clear any queued events -clear_events = Signal() - - -@receiver((post_save, m2m_changed)) -def handle_changed_object(sender, instance, **kwargs): - """ - Fires when an object is created or updated. - """ - m2m_changed = False - - if not hasattr(instance, 'to_objectchange'): - return - - # Get the current request, or bail if not set - request = current_request.get() - if request is None: - return - - # Determine the type of change being made - if kwargs.get('created'): - action = ObjectChangeActionChoices.ACTION_CREATE - elif 'created' in kwargs: - action = ObjectChangeActionChoices.ACTION_UPDATE - elif kwargs.get('action') in ['post_add', 'post_remove'] and kwargs['pk_set']: - # m2m_changed with objects added or removed - m2m_changed = True - action = ObjectChangeActionChoices.ACTION_UPDATE - else: - return - - # Create/update an ObjectChange record for this change - objectchange = instance.to_objectchange(action) - # If this is a many-to-many field change, check for a previous ObjectChange instance recorded - # for this object by this request and update it - if m2m_changed and ( - prev_change := ObjectChange.objects.filter( - changed_object_type=ContentType.objects.get_for_model(instance), - changed_object_id=instance.pk, - request_id=request.id - ).first() - ): - prev_change.postchange_data = objectchange.postchange_data - prev_change.save() - elif objectchange and objectchange.has_changes: - objectchange.user = request.user - objectchange.request_id = request.id - objectchange.save() - - # Ensure that we're working with fresh M2M assignments - if m2m_changed: - instance.refresh_from_db() - - # Enqueue the object for event processing - queue = events_queue.get() - enqueue_object(queue, instance, request.user, request.id, action) - events_queue.set(queue) - - # Increment metric counters - if action == ObjectChangeActionChoices.ACTION_CREATE: - model_inserts.labels(instance._meta.model_name).inc() - elif action == ObjectChangeActionChoices.ACTION_UPDATE: - model_updates.labels(instance._meta.model_name).inc() - - -@receiver(pre_delete) -def handle_deleted_object(sender, instance, **kwargs): - """ - Fires when an object is deleted. - """ - # Run any deletion protection rules for the object. Note that this must occur prior - # to queueing any events for the object being deleted, in case a validation error is - # raised, causing the deletion to fail. - model_name = f'{sender._meta.app_label}.{sender._meta.model_name}' - validators = get_config().PROTECTION_RULES.get(model_name, []) - try: - run_validators(instance, validators) - except ValidationError as e: - raise AbortRequest( - _("Deletion is prevented by a protection rule: {message}").format(message=e) - ) - - # Get the current request, or bail if not set - request = current_request.get() - if request is None: - return - - # Record an ObjectChange if applicable - if hasattr(instance, 'to_objectchange'): - if hasattr(instance, 'snapshot') and not getattr(instance, '_prechange_snapshot', None): - instance.snapshot() - objectchange = instance.to_objectchange(ObjectChangeActionChoices.ACTION_DELETE) - objectchange.user = request.user - objectchange.request_id = request.id - objectchange.save() - - # Django does not automatically send an m2m_changed signal for the reverse direction of a - # many-to-many relationship (see https://code.djangoproject.com/ticket/17688), so we need to - # trigger one manually. We do this by checking for any reverse M2M relationships on the - # instance being deleted, and explicitly call .remove() on the remote M2M field to delete - # the association. This triggers an m2m_changed signal with the `post_remove` action type - # for the forward direction of the relationship, ensuring that the change is recorded. - for relation in instance._meta.related_objects: - if type(relation) is not ManyToManyRel: - continue - related_model = relation.related_model - related_field_name = relation.remote_field.name - if not issubclass(related_model, ChangeLoggingMixin): - # We only care about triggering the m2m_changed signal for models which support - # change logging - continue - for obj in related_model.objects.filter(**{related_field_name: instance.pk}): - obj.snapshot() # Ensure the change record includes the "before" state - getattr(obj, related_field_name).remove(instance) - - # Enqueue the object for event processing - queue = events_queue.get() - enqueue_object(queue, instance, request.user, request.id, ObjectChangeActionChoices.ACTION_DELETE) - events_queue.set(queue) - - # Increment metric counters - model_deletes.labels(instance._meta.model_name).inc() - - -@receiver(clear_events) -def clear_events_queue(sender, **kwargs): - """ - Delete any queued events (e.g. because of an aborted bulk transaction) - """ - logger = logging.getLogger('events') - logger.info(f"Clearing {len(events_queue.get())} queued events ({sender})") - events_queue.set({}) +from .utils import run_validators # @@ -268,9 +98,19 @@ def process_job_start_event_rules(sender, **kwargs): """ Process event rules for jobs starting. """ - event_rules = EventRule.objects.filter(type_job_start=True, enabled=True, object_types=sender.object_type) + event_rules = EventRule.objects.filter( + event_types__contains=[JOB_STARTED], + enabled=True, + object_types=sender.object_type + ) username = sender.user.username if sender.user else None - process_event_rules(event_rules, sender.object_type.model, EVENT_JOB_START, sender.data, username) + process_event_rules( + event_rules=event_rules, + object_type=sender.object_type, + event_type=JOB_STARTED, + data=sender.data, + username=username + ) @receiver(job_end) @@ -278,6 +118,57 @@ def process_job_end_event_rules(sender, **kwargs): """ Process event rules for jobs terminating. """ - event_rules = EventRule.objects.filter(type_job_end=True, enabled=True, object_types=sender.object_type) + event_rules = EventRule.objects.filter( + event_types__contains=[JOB_COMPLETED], + enabled=True, + object_types=sender.object_type + ) username = sender.user.username if sender.user else None - process_event_rules(event_rules, sender.object_type.model, EVENT_JOB_END, sender.data, username) + process_event_rules( + event_rules=event_rules, + object_type=sender.object_type, + event_type=JOB_COMPLETED, + data=sender.data, + username=username + ) + + +# +# Notifications +# + +@receiver((post_save, pre_delete)) +def notify_object_changed(sender, instance, **kwargs): + # Skip for newly-created objects + if kwargs.get('created'): + return + + # Determine event type + if 'created' in kwargs: + event_type = OBJECT_UPDATED + else: + event_type = OBJECT_DELETED + + # Skip unsupported object types + ct = ContentType.objects.get_for_model(instance) + if ct.model not in registry['model_features']['notifications'].get(ct.app_label, []): + return + + # Find all subscribed Users + subscribed_users = Subscription.objects.filter(object_type=ct, object_id=instance.pk).values_list('user', flat=True) + if not subscribed_users: + return + + # Delete any existing Notifications for the object + Notification.objects.filter(object_type=ct, object_id=instance.pk, user__in=subscribed_users).delete() + + # Create Notifications for Subscribers + Notification.objects.bulk_create([ + Notification( + user_id=user, + object=instance, + object_repr=Notification.get_object_repr(instance), + event_type=event_type + ) + for user in subscribed_users + ]) diff --git a/netbox/extras/tables/columns.py b/netbox/extras/tables/columns.py new file mode 100644 index 00000000000..9b6aadcbf53 --- /dev/null +++ b/netbox/extras/tables/columns.py @@ -0,0 +1,13 @@ +from django.utils.translation import gettext as _ + +from netbox.tables.columns import ActionsColumn, ActionsItem + +__all__ = ( + 'NotificationActionsColumn', +) + + +class NotificationActionsColumn(ActionsColumn): + actions = { + 'dismiss': ActionsItem(_('Dismiss'), 'trash-can-outline', 'delete', 'danger'), + } diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index d919ff1d5ba..e538c488ec0 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -6,7 +6,9 @@ from django.utils.translation import gettext_lazy as _ from extras.models import * from netbox.constants import EMPTY_TABLE_TEXT +from netbox.events import get_event_text from netbox.tables import BaseTable, NetBoxTable, columns +from .columns import NotificationActionsColumn __all__ = ( 'BookmarkTable', @@ -19,21 +21,36 @@ __all__ = ( 'ExportTemplateTable', 'ImageAttachmentTable', 'JournalEntryTable', + 'NotificationGroupTable', + 'NotificationTable', 'SavedFilterTable', 'ReportResultsTable', 'ScriptResultsTable', + 'SubscriptionTable', 'TaggedItemTable', 'TagTable', 'WebhookTable', ) -IMAGEATTACHMENT_IMAGE = ''' +IMAGEATTACHMENT_IMAGE = """ {% if record.image %} {{ record }} {% else %} — {% endif %} -''' +""" + +NOTIFICATION_ICON = """ + +""" + +NOTIFICATION_LINK = """ +{% if not record.event.destructive %} + {{ record.object_repr }} +{% else %} + {{ record.object_repr }} +{% endif %} +""" class CustomFieldTable(NetBoxTable): @@ -45,7 +62,12 @@ class CustomFieldTable(NetBoxTable): verbose_name=_('Object Types') ) required = columns.BooleanColumn( - verbose_name=_('Required') + verbose_name=_('Required'), + false_mark=None + ) + unique = columns.BooleanColumn( + verbose_name=_('Validate Uniqueness'), + false_mark=None ) ui_visible = columns.ChoiceFieldColumn( verbose_name=_('Visible') @@ -70,6 +92,7 @@ class CustomFieldTable(NetBoxTable): ) is_cloneable = columns.BooleanColumn( verbose_name=_('Is Cloneable'), + false_mark=None ) validation_minimum = tables.Column( verbose_name=_('Minimum Value'), @@ -80,19 +103,18 @@ class CustomFieldTable(NetBoxTable): validation_regex = tables.Column( verbose_name=_('Validation Regex'), ) - validation_unique = columns.BooleanColumn( - verbose_name=_('Validate Uniqueness'), - ) class Meta(NetBoxTable.Meta): model = CustomField fields = ( 'pk', 'id', 'name', 'object_types', 'label', 'type', 'related_object_type', 'group_name', 'required', - 'default', 'description', 'search_weight', 'filter_logic', 'ui_visible', 'ui_editable', 'is_cloneable', - 'weight', 'choice_set', 'choices', 'validation_minimum', 'validation_maximum', 'validation_regex', - 'validation_unique', 'comments', 'created', 'last_updated', + 'unique', 'default', 'description', 'search_weight', 'filter_logic', 'ui_visible', 'ui_editable', + 'is_cloneable', 'weight', 'choice_set', 'choices', 'validation_minimum', 'validation_maximum', + 'validation_regex', 'comments', 'created', 'last_updated', + ) + default_columns = ( + 'pk', 'name', 'object_types', 'label', 'group_name', 'type', 'required', 'unique', 'description', ) - default_columns = ('pk', 'name', 'object_types', 'label', 'group_name', 'type', 'required', 'description') class CustomFieldChoiceSetTable(NetBoxTable): @@ -116,6 +138,7 @@ class CustomFieldChoiceSetTable(NetBoxTable): ) order_alphabetically = columns.BooleanColumn( verbose_name=_('Order Alphabetically'), + false_mark=None ) class Meta(NetBoxTable.Meta): @@ -140,6 +163,7 @@ class CustomLinkTable(NetBoxTable): ) new_window = columns.BooleanColumn( verbose_name=_('New Window'), + false_mark=None ) class Meta(NetBoxTable.Meta): @@ -161,6 +185,7 @@ class ExportTemplateTable(NetBoxTable): ) as_attachment = columns.BooleanColumn( verbose_name=_('As Attachment'), + false_mark=None ) data_source = tables.Column( verbose_name=_('Data Source'), @@ -229,6 +254,7 @@ class SavedFilterTable(NetBoxTable): ) shared = columns.BooleanColumn( verbose_name=_('Shared'), + false_mark=None ) def value_parameters(self, value): @@ -263,6 +289,90 @@ class BookmarkTable(NetBoxTable): default_columns = ('object', 'object_type', 'created') +class SubscriptionTable(NetBoxTable): + object_type = columns.ContentTypeColumn( + verbose_name=_('Object Type'), + ) + object = tables.Column( + verbose_name=_('Object'), + linkify=True, + orderable=False + ) + user = tables.Column( + verbose_name=_('User'), + linkify=True + ) + actions = columns.ActionsColumn( + actions=('delete',) + ) + + class Meta(NetBoxTable.Meta): + model = Subscription + fields = ('pk', 'object', 'object_type', 'created', 'user') + default_columns = ('object', 'object_type', 'created') + + +class NotificationTable(NetBoxTable): + icon = columns.TemplateColumn( + template_code=NOTIFICATION_ICON, + accessor=tables.A('event'), + attrs={ + 'td': {'class': 'w-1'}, + 'th': {'class': 'w-1'}, + }, + verbose_name='' + ) + object_type = columns.ContentTypeColumn( + verbose_name=_('Object Type'), + ) + object = columns.TemplateColumn( + verbose_name=_('Object'), + template_code=NOTIFICATION_LINK, + orderable=False + ) + created = columns.DateTimeColumn( + timespec='minutes', + verbose_name=_('Created'), + ) + read = columns.DateTimeColumn( + timespec='minutes', + verbose_name=_('Read'), + ) + user = tables.Column( + verbose_name=_('User'), + linkify=True + ) + actions = NotificationActionsColumn( + actions=('dismiss',) + ) + + class Meta(NetBoxTable.Meta): + model = Notification + fields = ('pk', 'icon', 'object', 'object_type', 'event_type', 'created', 'read', 'user') + default_columns = ('icon', 'object', 'object_type', 'event_type', 'created') + row_attrs = { + 'data-read': lambda record: bool(record.read), + } + + +class NotificationGroupTable(NetBoxTable): + name = tables.Column( + linkify=True, + verbose_name=_('Name') + ) + users = columns.ManyToManyColumn( + linkify_item=True + ) + groups = columns.ManyToManyColumn( + linkify_item=True + ) + + class Meta(NetBoxTable.Meta): + model = NotificationGroup + fields = ('pk', 'name', 'description', 'groups', 'users') + default_columns = ('name', 'description', 'groups', 'users') + + class WebhookTable(NetBoxTable): name = tables.Column( verbose_name=_('Name'), @@ -304,20 +414,10 @@ class EventRuleTable(NetBoxTable): enabled = columns.BooleanColumn( verbose_name=_('Enabled'), ) - type_create = columns.BooleanColumn( - verbose_name=_('Create') - ) - type_update = columns.BooleanColumn( - verbose_name=_('Update') - ) - type_delete = columns.BooleanColumn( - verbose_name=_('Delete') - ) - type_job_start = columns.BooleanColumn( - verbose_name=_('Job Start') - ) - type_job_end = columns.BooleanColumn( - verbose_name=_('Job End') + event_types = columns.ArrayColumn( + verbose_name=_('Event Types'), + func=get_event_text, + orderable=False ) tags = columns.TagColumn( url_name='extras:webhook_list' @@ -327,12 +427,10 @@ class EventRuleTable(NetBoxTable): model = EventRule fields = ( 'pk', 'id', 'name', 'enabled', 'description', 'action_type', 'action_object', 'object_types', - 'type_create', 'type_update', 'type_delete', 'type_job_start', 'type_job_end', 'tags', 'created', - 'last_updated', + 'event_types', 'tags', 'created', 'last_updated', ) default_columns = ( - 'pk', 'name', 'enabled', 'action_type', 'action_object', 'object_types', 'type_create', 'type_update', - 'type_delete', 'type_job_start', 'type_job_end', + 'pk', 'name', 'enabled', 'action_type', 'action_object', 'object_types', 'event_types', ) diff --git a/netbox/extras/templatetags/custom_links.py b/netbox/extras/templatetags/custom_links.py index dd28a816010..4aeaaa6b15a 100644 --- a/netbox/extras/templatetags/custom_links.py +++ b/netbox/extras/templatetags/custom_links.py @@ -4,6 +4,7 @@ from django.utils.safestring import mark_safe from core.models import ObjectType from extras.models import CustomLink +from netbox.choices import ButtonColorChoices register = template.Library() @@ -59,10 +60,11 @@ def custom_links(context, obj): # Add non-grouped links else: + button_class = 'outline-secondary' if cl.button_class == ButtonColorChoices.DEFAULT else cl.button_class try: if rendered := cl.render(link_context): template_code += LINK_BUTTON.format( - rendered['link'], rendered['link_target'], cl.button_class, rendered['text'] + rendered['link'], rendered['link_target'], button_class, rendered['text'] ) except Exception as e: template_code += f'' \ diff --git a/netbox/extras/tests/test_api.py b/netbox/extras/tests/test_api.py index 5d243ae1a9d..63baf44d30e 100644 --- a/netbox/extras/tests/test_api.py +++ b/netbox/extras/tests/test_api.py @@ -1,21 +1,20 @@ import datetime -from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.urls import reverse from django.utils.timezone import make_aware from rest_framework import status from core.choices import ManagedFileRootPathChoices +from core.events import * from core.models import ObjectType from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Rack, Location, RackRole, Site from extras.choices import * from extras.models import * from extras.scripts import BooleanVar, IntegerVar, Script as PythonClass, StringVar +from users.models import Group, User from utilities.testing import APITestCase, APIViewTestCases -User = get_user_model() - class AppTest(APITestCase): @@ -113,9 +112,9 @@ class EventRuleTest(APIViewTestCases.APIViewTestCase): Webhook.objects.bulk_create(webhooks) event_rules = ( - EventRule(name='EventRule 1', type_create=True, action_object=webhooks[0]), - EventRule(name='EventRule 2', type_create=True, action_object=webhooks[1]), - EventRule(name='EventRule 3', type_create=True, action_object=webhooks[2]), + EventRule(name='EventRule 1', event_types=[OBJECT_CREATED], action_object=webhooks[0]), + EventRule(name='EventRule 2', event_types=[OBJECT_CREATED], action_object=webhooks[1]), + EventRule(name='EventRule 3', event_types=[OBJECT_CREATED], action_object=webhooks[2]), ) EventRule.objects.bulk_create(event_rules) @@ -123,7 +122,7 @@ class EventRuleTest(APIViewTestCases.APIViewTestCase): { 'name': 'EventRule 4', 'object_types': ['dcim.device', 'dcim.devicetype'], - 'type_create': True, + 'event_types': [OBJECT_CREATED], 'action_type': EventRuleActionChoices.WEBHOOK, 'action_object_type': 'extras.webhook', 'action_object_id': webhooks[3].pk, @@ -131,7 +130,7 @@ class EventRuleTest(APIViewTestCases.APIViewTestCase): { 'name': 'EventRule 5', 'object_types': ['dcim.device', 'dcim.devicetype'], - 'type_create': True, + 'event_types': [OBJECT_CREATED], 'action_type': EventRuleActionChoices.WEBHOOK, 'action_object_type': 'extras.webhook', 'action_object_id': webhooks[4].pk, @@ -139,7 +138,7 @@ class EventRuleTest(APIViewTestCases.APIViewTestCase): { 'name': 'EventRule 6', 'object_types': ['dcim.device', 'dcim.devicetype'], - 'type_create': True, + 'event_types': [OBJECT_CREATED], 'action_type': EventRuleActionChoices.WEBHOOK, 'action_object_type': 'extras.webhook', 'action_object_id': webhooks[5].pk, @@ -244,9 +243,18 @@ class CustomFieldChoiceSetTest(APIViewTestCases.APIViewTestCase): @classmethod def setUpTestData(cls): choice_sets = ( - CustomFieldChoiceSet(name='Choice Set 1', extra_choices=['1A', '1B', '1C', '1D', '1E']), - CustomFieldChoiceSet(name='Choice Set 2', extra_choices=['2A', '2B', '2C', '2D', '2E']), - CustomFieldChoiceSet(name='Choice Set 3', extra_choices=['3A', '3B', '3C', '3D', '3E']), + CustomFieldChoiceSet( + name='Choice Set 1', + extra_choices=[['1A', '1A'], ['1B', '1B'], ['1C', '1C'], ['1D', '1D'], ['1E', '1E']], + ), + CustomFieldChoiceSet( + name='Choice Set 2', + extra_choices=[['2A', '2A'], ['2B', '2B'], ['2C', '2C'], ['2D', '2D'], ['2E', '2E']], + ), + CustomFieldChoiceSet( + name='Choice Set 3', + extra_choices=[['3A', '3A'], ['3B', '3B'], ['3C', '3C'], ['3D', '3D'], ['3E', '3E']], + ), ) CustomFieldChoiceSet.objects.bulk_create(choice_sets) @@ -784,7 +792,6 @@ class ScriptTest(APITestCase): super().setUp() # Monkey-patch the Script model to return our TestScriptClass above - from extras.api.views import ScriptViewSet Script.python_class = self.python_class def test_get_script(self): @@ -890,3 +897,196 @@ class ObjectTypeTest(APITestCase): url = reverse('extras-api:objecttype-detail', kwargs={'pk': object_type.pk}) self.assertHttpStatus(self.client.get(url, **self.header), status.HTTP_200_OK) + + +class SubscriptionTest(APIViewTestCases.APIViewTestCase): + model = Subscription + brief_fields = ['display', 'id', 'object_id', 'object_type', 'url', 'user'] + + @classmethod + def setUpTestData(cls): + users = ( + User(username='User 1'), + User(username='User 2'), + User(username='User 3'), + User(username='User 4'), + ) + User.objects.bulk_create(users) + sites = ( + Site(name='Site 1', slug='site-1'), + Site(name='Site 2', slug='site-2'), + Site(name='Site 3', slug='site-3'), + ) + Site.objects.bulk_create(sites) + + subscriptions = ( + Subscription( + object=sites[0], + user=users[0], + ), + Subscription( + object=sites[1], + user=users[1], + ), + Subscription( + object=sites[2], + user=users[2], + ), + ) + Subscription.objects.bulk_create(subscriptions) + + cls.create_data = [ + { + 'object_type': 'dcim.site', + 'object_id': sites[0].pk, + 'user': users[3].pk, + }, + { + 'object_type': 'dcim.site', + 'object_id': sites[1].pk, + 'user': users[3].pk, + }, + { + 'object_type': 'dcim.site', + 'object_id': sites[2].pk, + 'user': users[3].pk, + }, + ] + + +class NotificationGroupTest(APIViewTestCases.APIViewTestCase): + model = NotificationGroup + brief_fields = ['description', 'display', 'id', 'name', 'url'] + create_data = [ + { + 'object_types': ['dcim.site'], + 'name': 'Custom Link 4', + 'enabled': True, + 'link_text': 'Link 4', + 'link_url': 'http://example.com/?4', + }, + { + 'object_types': ['dcim.site'], + 'name': 'Custom Link 5', + 'enabled': True, + 'link_text': 'Link 5', + 'link_url': 'http://example.com/?5', + }, + { + 'object_types': ['dcim.site'], + 'name': 'Custom Link 6', + 'enabled': False, + 'link_text': 'Link 6', + 'link_url': 'http://example.com/?6', + }, + ] + bulk_update_data = { + 'description': 'New description', + } + + @classmethod + def setUpTestData(cls): + users = ( + User(username='User 1'), + User(username='User 2'), + User(username='User 3'), + ) + User.objects.bulk_create(users) + groups = ( + Group(name='Group 1'), + Group(name='Group 2'), + Group(name='Group 3'), + ) + Group.objects.bulk_create(groups) + + notification_groups = ( + NotificationGroup(name='Notification Group 1'), + NotificationGroup(name='Notification Group 2'), + NotificationGroup(name='Notification Group 3'), + ) + NotificationGroup.objects.bulk_create(notification_groups) + for i, notification_group in enumerate(notification_groups): + notification_group.users.add(users[i]) + notification_group.groups.add(groups[i]) + + cls.create_data = [ + { + 'name': 'Notification Group 4', + 'description': 'Foo', + 'users': [users[0].pk], + 'groups': [groups[0].pk], + }, + { + 'name': 'Notification Group 5', + 'description': 'Bar', + 'users': [users[1].pk], + 'groups': [groups[1].pk], + }, + { + 'name': 'Notification Group 6', + 'description': 'Baz', + 'users': [users[2].pk], + 'groups': [groups[2].pk], + }, + ] + + +class NotificationTest(APIViewTestCases.APIViewTestCase): + model = Notification + brief_fields = ['display', 'event_type', 'id', 'object_id', 'object_type', 'read', 'url', 'user'] + + @classmethod + def setUpTestData(cls): + users = ( + User(username='User 1'), + User(username='User 2'), + User(username='User 3'), + User(username='User 4'), + ) + User.objects.bulk_create(users) + sites = ( + Site(name='Site 1', slug='site-1'), + Site(name='Site 2', slug='site-2'), + Site(name='Site 3', slug='site-3'), + ) + Site.objects.bulk_create(sites) + + notifications = ( + Notification( + object=sites[0], + event_type=OBJECT_CREATED, + user=users[0], + ), + Notification( + object=sites[1], + event_type=OBJECT_UPDATED, + user=users[1], + ), + Notification( + object=sites[2], + event_type=OBJECT_DELETED, + user=users[2], + ), + ) + Notification.objects.bulk_create(notifications) + + cls.create_data = [ + { + 'object_type': 'dcim.site', + 'object_id': sites[0].pk, + 'user': users[3].pk, + 'event_type': OBJECT_CREATED, + }, + { + 'object_type': 'dcim.site', + 'object_id': sites[1].pk, + 'user': users[3].pk, + 'event_type': OBJECT_UPDATED, + }, + { + 'object_type': 'dcim.site', + 'object_id': sites[2].pk, + 'user': users[3].pk, + 'event_type': OBJECT_DELETED, + }, + ] diff --git a/netbox/extras/tests/test_conditions.py b/netbox/extras/tests/test_conditions.py index dd528b918dc..dfe460f99d1 100644 --- a/netbox/extras/tests/test_conditions.py +++ b/netbox/extras/tests/test_conditions.py @@ -1,6 +1,7 @@ from django.contrib.contenttypes.models import ContentType from django.test import TestCase +from core.events import * from dcim.choices import SiteStatusChoices from dcim.models import Site from extras.conditions import Condition, ConditionSet @@ -230,8 +231,7 @@ class ConditionSetTest(TestCase): """ event_rule = EventRule( name='Event Rule 1', - type_create=True, - type_update=True, + event_types=[OBJECT_CREATED, OBJECT_UPDATED], conditions={ 'attr': 'status.value', 'value': 'active', @@ -251,8 +251,7 @@ class ConditionSetTest(TestCase): """ event_rule = EventRule( name='Event Rule 1', - type_create=True, - type_update=True, + event_types=[OBJECT_CREATED, OBJECT_UPDATED], conditions={ "attr": "status.value", "value": ["planned", "staging"], @@ -273,8 +272,7 @@ class ConditionSetTest(TestCase): """ event_rule = EventRule( name='Event Rule 1', - type_create=True, - type_update=True, + event_types=[OBJECT_CREATED, OBJECT_UPDATED], conditions={ "attr": "status.value", "value": ["planned", "staging"], @@ -300,8 +298,7 @@ class ConditionSetTest(TestCase): webhook = Webhook.objects.create(name='Webhook 100', payload_url='http://example.com/?1', http_method='POST') form = EventRuleForm({ "name": "Event Rule 1", - "type_create": True, - "type_update": True, + "event_types": [OBJECT_CREATED, OBJECT_UPDATED], "action_object_type": ct.pk, "action_type": "webhook", "action_choice": webhook.pk, diff --git a/netbox/extras/tests/test_customfields.py b/netbox/extras/tests/test_customfields.py index 009ae8798a2..2bc9b5accef 100644 --- a/netbox/extras/tests/test_customfields.py +++ b/netbox/extras/tests/test_customfields.py @@ -343,6 +343,74 @@ class CustomFieldTest(TestCase): instance.refresh_from_db() self.assertIsNone(instance.custom_field_data.get(cf.name)) + def test_remove_selected_choice(self): + """ + Removing a ChoiceSet choice that is referenced by an object should raise + a ValidationError exception. + """ + CHOICES = ( + ('a', 'Option A'), + ('b', 'Option B'), + ('c', 'Option C'), + ('d', 'Option D'), + ) + + # Create a set of custom field choices + choice_set = CustomFieldChoiceSet.objects.create( + name='Custom Field Choice Set 1', + extra_choices=CHOICES + ) + + # Create a select custom field + cf = CustomField.objects.create( + name='select_field', + type=CustomFieldTypeChoices.TYPE_SELECT, + required=False, + choice_set=choice_set + ) + cf.object_types.set([self.object_type]) + + # Create a multi-select custom field + cf_multiselect = CustomField.objects.create( + name='multiselect_field', + type=CustomFieldTypeChoices.TYPE_MULTISELECT, + required=False, + choice_set=choice_set + ) + cf_multiselect.object_types.set([self.object_type]) + + # Assign a choice for both custom fields on an object + instance = Site.objects.first() + instance.custom_field_data[cf.name] = 'a' + instance.custom_field_data[cf_multiselect.name] = ['b', 'c'] + instance.save() + + # Attempting to delete a selected choice should fail + with self.assertRaises(ValidationError): + choice_set.extra_choices = ( + ('b', 'Option B'), + ('c', 'Option C'), + ('d', 'Option D'), + ) + choice_set.full_clean() + + # Attempting to delete either of the multi-select choices should fail + with self.assertRaises(ValidationError): + choice_set.extra_choices = ( + ('a', 'Option A'), + ('b', 'Option B'), + ('d', 'Option D'), + ) + choice_set.full_clean() + + # Removing a non-selected choice should succeed + choice_set.extra_choices = ( + ('a', 'Option A'), + ('b', 'Option B'), + ('c', 'Option C'), + ) + choice_set.full_clean() + def test_object_field(self): value = VLAN.objects.create(name='VLAN 1', vid=1).pk @@ -1143,7 +1211,7 @@ class CustomFieldAPITest(APITestCase): def test_uniqueness_validation(self): # Create a unique custom field cf_text = CustomField.objects.get(name='text_field') - cf_text.validation_unique = True + cf_text.unique = True cf_text.save() # Set a value on site 1 diff --git a/netbox/extras/tests/test_customvalidators.py b/netbox/extras/tests/test_customvalidators.py index 217fddd184c..9f85b4913d0 100644 --- a/netbox/extras/tests/test_customvalidators.py +++ b/netbox/extras/tests/test_customvalidators.py @@ -14,7 +14,7 @@ from utilities.request import NetBoxFakeRequest class MyValidator(CustomValidator): - def validate(self, instance): + def validate(self, instance, request): if instance.name != 'foo': self.fail("Name must be foo!") @@ -162,7 +162,7 @@ class CustomValidatorTest(TestCase): Site(name='abcdef123', slug='abcdef123').clean() @override_settings(CUSTOM_VALIDATORS={'dcim.site': [region_validator]}) - def test_valid(self): + def test_related_object(self): region1 = Region(name='Foo', slug='foo') region1.save() region2 = Region(name='Bar', slug='bar') diff --git a/netbox/extras/tests/test_event_rules.py b/netbox/extras/tests/test_event_rules.py index 39b896616de..7f7b0b81f31 100644 --- a/netbox/extras/tests/test_event_rules.py +++ b/netbox/extras/tests/test_event_rules.py @@ -9,12 +9,12 @@ from django.urls import reverse from requests import Session from rest_framework import status -from core.choices import ObjectChangeActionChoices +from core.events import * from core.models import ObjectType from dcim.choices import SiteStatusChoices from dcim.models import Site from extras.choices import EventRuleActionChoices -from extras.events import enqueue_object, flush_events, serialize_for_event +from extras.events import enqueue_event, flush_events, serialize_for_event from extras.models import EventRule, Tag, Webhook from extras.webhooks import generate_signature, send_webhook from netbox.context_managers import event_tracking @@ -46,22 +46,22 @@ class EventRuleTest(APITestCase): webhook_type = ObjectType.objects.get(app_label='extras', model='webhook') event_rules = EventRule.objects.bulk_create(( EventRule( - name='Webhook Event 1', - type_create=True, + name='Event Rule 1', + event_types=[OBJECT_CREATED], action_type=EventRuleActionChoices.WEBHOOK, action_object_type=webhook_type, action_object_id=webhooks[0].id ), EventRule( - name='Webhook Event 2', - type_update=True, + name='Event Rule 2', + event_types=[OBJECT_UPDATED], action_type=EventRuleActionChoices.WEBHOOK, action_object_type=webhook_type, action_object_id=webhooks[0].id ), EventRule( - name='Webhook Event 3', - type_delete=True, + name='Event Rule 3', + event_types=[OBJECT_DELETED], action_type=EventRuleActionChoices.WEBHOOK, action_object_type=webhook_type, action_object_id=webhooks[0].id @@ -82,8 +82,7 @@ class EventRuleTest(APITestCase): """ event_rule = EventRule( name='Event Rule 1', - type_create=True, - type_update=True, + event_types=[OBJECT_CREATED, OBJECT_UPDATED], conditions={ 'and': [ { @@ -131,8 +130,8 @@ class EventRuleTest(APITestCase): # Verify that a background task was queued for the new object self.assertEqual(self.queue.count, 1) job = self.queue.jobs[0] - self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(type_create=True)) - self.assertEqual(job.kwargs['event'], ObjectChangeActionChoices.ACTION_CREATE) + self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(name='Event Rule 1')) + self.assertEqual(job.kwargs['event_type'], OBJECT_CREATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], response.data['id']) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data['tags'])) @@ -181,8 +180,8 @@ class EventRuleTest(APITestCase): # Verify that a background task was queued for each new object self.assertEqual(self.queue.count, 3) for i, job in enumerate(self.queue.jobs): - self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(type_create=True)) - self.assertEqual(job.kwargs['event'], ObjectChangeActionChoices.ACTION_CREATE) + self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(name='Event Rule 1')) + self.assertEqual(job.kwargs['event_type'], OBJECT_CREATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], response.data[i]['id']) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data[i]['tags'])) @@ -212,8 +211,8 @@ class EventRuleTest(APITestCase): # Verify that a background task was queued for the updated object self.assertEqual(self.queue.count, 1) job = self.queue.jobs[0] - self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(type_update=True)) - self.assertEqual(job.kwargs['event'], ObjectChangeActionChoices.ACTION_UPDATE) + self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(name='Event Rule 2')) + self.assertEqual(job.kwargs['event_type'], OBJECT_UPDATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], site.pk) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data['tags'])) @@ -268,8 +267,8 @@ class EventRuleTest(APITestCase): # Verify that a background task was queued for each updated object self.assertEqual(self.queue.count, 3) for i, job in enumerate(self.queue.jobs): - self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(type_update=True)) - self.assertEqual(job.kwargs['event'], ObjectChangeActionChoices.ACTION_UPDATE) + self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(name='Event Rule 2')) + self.assertEqual(job.kwargs['event_type'], OBJECT_UPDATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], data[i]['id']) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data[i]['tags'])) @@ -294,8 +293,8 @@ class EventRuleTest(APITestCase): # Verify that a task was queued for the deleted object self.assertEqual(self.queue.count, 1) job = self.queue.jobs[0] - self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(type_delete=True)) - self.assertEqual(job.kwargs['event'], ObjectChangeActionChoices.ACTION_DELETE) + self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(name='Event Rule 3')) + self.assertEqual(job.kwargs['event_type'], OBJECT_DELETED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], site.pk) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], 'Site 1') @@ -327,8 +326,8 @@ class EventRuleTest(APITestCase): # Verify that a background task was queued for each deleted object self.assertEqual(self.queue.count, 3) for i, job in enumerate(self.queue.jobs): - self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(type_delete=True)) - self.assertEqual(job.kwargs['event'], ObjectChangeActionChoices.ACTION_DELETE) + self.assertEqual(job.kwargs['event_rule'], EventRule.objects.get(name='Event Rule 3')) + self.assertEqual(job.kwargs['event_type'], OBJECT_DELETED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], sites[i].pk) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], sites[i].name) @@ -342,7 +341,7 @@ class EventRuleTest(APITestCase): A dummy implementation of Session.send() to be used for testing. Always returns a 200 HTTP response. """ - event = EventRule.objects.get(type_create=True) + event = EventRule.objects.get(name='Event Rule 1') webhook = event.action_object signature = generate_signature(request.body, webhook.secret) @@ -365,12 +364,12 @@ class EventRuleTest(APITestCase): # Enqueue a webhook for processing webhooks_queue = {} site = Site.objects.create(name='Site 1', slug='site-1') - enqueue_object( + enqueue_event( webhooks_queue, instance=site, user=self.user, request_id=request_id, - action=ObjectChangeActionChoices.ACTION_CREATE + event_type=OBJECT_CREATED ) flush_events(list(webhooks_queue.values())) @@ -378,7 +377,7 @@ class EventRuleTest(APITestCase): job = self.queue.jobs[0] # Patch the Session object with our dummy_send() method, then process the webhook for sending - with patch.object(Session, 'send', dummy_send) as mock_send: + with patch.object(Session, 'send', dummy_send): send_webhook(**job.kwargs) def test_duplicate_triggers(self): @@ -391,13 +390,36 @@ class EventRuleTest(APITestCase): request.id = uuid.uuid4() request.user = self.user - self.assertEqual(self.queue.count, 0, msg="Unexpected jobs found in queue") - + # Test create & update with event_tracking(request): site = Site(name='Site 1', slug='site-1') site.save() - - # Save the site a second time + site.description = 'foo' site.save() - self.assertEqual(self.queue.count, 1, msg="Duplicate jobs found in queue") + job = self.queue.get_jobs()[0] + self.assertEqual(job.kwargs['event_type'], OBJECT_CREATED) + self.queue.empty() + + # Test multiple updates + site = Site.objects.create(name='Site 2', slug='site-2') + with event_tracking(request): + site.description = 'foo' + site.save() + site.description = 'bar' + site.save() + self.assertEqual(self.queue.count, 1, msg="Duplicate jobs found in queue") + job = self.queue.get_jobs()[0] + self.assertEqual(job.kwargs['event_type'], OBJECT_UPDATED) + self.queue.empty() + + # Test update & delete + site = Site.objects.create(name='Site 3', slug='site-3') + with event_tracking(request): + site.description = 'foo' + site.save() + site.delete() + self.assertEqual(self.queue.count, 1, msg="Duplicate jobs found in queue") + job = self.queue.get_jobs()[0] + self.assertEqual(job.kwargs['event_type'], OBJECT_DELETED) + self.queue.empty() diff --git a/netbox/extras/tests/test_filtersets.py b/netbox/extras/tests/test_filtersets.py index 5c737f7cfe5..9048d5fd979 100644 --- a/netbox/extras/tests/test_filtersets.py +++ b/netbox/extras/tests/test_filtersets.py @@ -1,12 +1,12 @@ import uuid from datetime import datetime, timezone -from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.test import TestCase from circuits.models import Provider from core.choices import ManagedFileRootPathChoices, ObjectChangeActionChoices +from core.events import * from core.models import ObjectChange, ObjectType from dcim.filtersets import SiteFilterSet from dcim.models import DeviceRole, DeviceType, Manufacturer, Platform, Rack, Region, Site, SiteGroup @@ -15,17 +15,15 @@ from extras.choices import * from extras.filtersets import * from extras.models import * from tenancy.models import Tenant, TenantGroup +from users.models import Group, User from utilities.testing import BaseFilterSetTests, ChangeLoggedFilterSetTests, create_tags from virtualization.models import Cluster, ClusterGroup, ClusterType -User = get_user_model() - - class CustomFieldTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = CustomField.objects.all() filterset = CustomFieldFilterSet - ignore_fields = ('default',) + ignore_fields = ('default', 'related_object_filter') @classmethod def setUpTestData(cls): @@ -254,7 +252,7 @@ class WebhookTestCase(TestCase, BaseFilterSetTests): class EventRuleTestCase(TestCase, BaseFilterSetTests): queryset = EventRule.objects.all() filterset = EventRuleFilterSet - ignore_fields = ('action_data', 'conditions') + ignore_fields = ('action_data', 'conditions', 'event_types') @classmethod def setUpTestData(cls): @@ -295,11 +293,7 @@ class EventRuleTestCase(TestCase, BaseFilterSetTests): name='Event Rule 1', action_object=webhooks[0], enabled=True, - type_create=True, - type_update=False, - type_delete=False, - type_job_start=False, - type_job_end=False, + event_types=[OBJECT_CREATED], action_type=EventRuleActionChoices.WEBHOOK, description='foobar1' ), @@ -307,11 +301,7 @@ class EventRuleTestCase(TestCase, BaseFilterSetTests): name='Event Rule 2', action_object=webhooks[1], enabled=True, - type_create=False, - type_update=True, - type_delete=False, - type_job_start=False, - type_job_end=False, + event_types=[OBJECT_UPDATED], action_type=EventRuleActionChoices.WEBHOOK, description='foobar2' ), @@ -319,11 +309,7 @@ class EventRuleTestCase(TestCase, BaseFilterSetTests): name='Event Rule 3', action_object=webhooks[2], enabled=False, - type_create=False, - type_update=False, - type_delete=True, - type_job_start=False, - type_job_end=False, + event_types=[OBJECT_DELETED], action_type=EventRuleActionChoices.WEBHOOK, description='foobar3' ), @@ -331,22 +317,14 @@ class EventRuleTestCase(TestCase, BaseFilterSetTests): name='Event Rule 4', action_object=scripts[0], enabled=False, - type_create=False, - type_update=False, - type_delete=False, - type_job_start=True, - type_job_end=False, + event_types=[JOB_STARTED], action_type=EventRuleActionChoices.SCRIPT, ), EventRule( name='Event Rule 5', action_object=scripts[1], enabled=False, - type_create=False, - type_update=False, - type_delete=False, - type_job_start=False, - type_job_end=True, + event_types=[JOB_COMPLETED], action_type=EventRuleActionChoices.SCRIPT, ), ) @@ -387,25 +365,9 @@ class EventRuleTestCase(TestCase, BaseFilterSetTests): params = {'enabled': False} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) - def test_type_create(self): - params = {'type_create': True} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) - - def test_type_update(self): - params = {'type_update': True} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) - - def test_type_delete(self): - params = {'type_delete': True} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) - - def test_type_job_start(self): - params = {'type_job_start': True} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) - - def test_type_job_end(self): - params = {'type_job_end': True} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + def test_event_type(self): + params = {'event_type': [OBJECT_CREATED, OBJECT_UPDATED]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) class CustomLinkTestCase(TestCase, ChangeLoggedFilterSetTests): @@ -1136,6 +1098,8 @@ class TagTestCase(TestCase, ChangeLoggedFilterSetTests): 'asnrange', 'cable', 'circuit', + 'circuitgroup', + 'circuitgroupassignment', 'circuittermination', 'circuittype', 'cluster', @@ -1187,6 +1151,7 @@ class TagTestCase(TestCase, ChangeLoggedFilterSetTests): 'rack', 'rackreservation', 'rackrole', + 'racktype', 'rearport', 'region', 'rir', @@ -1370,3 +1335,65 @@ class ChangeLoggedFilterSetTestCase(TestCase): params = {'modified_by_request': self.create_update_request_id} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.queryset.count(), 4) + + +class NotificationGroupTestCase(TestCase, BaseFilterSetTests): + queryset = NotificationGroup.objects.all() + filterset = NotificationGroupFilterSet + + @classmethod + def setUpTestData(cls): + users = ( + User(username='User 1'), + User(username='User 2'), + User(username='User 3'), + ) + User.objects.bulk_create(users) + + groups = ( + Group(name='Group 1'), + Group(name='Group 2'), + Group(name='Group 3'), + ) + Group.objects.bulk_create(groups) + + sites = ( + Site(name='Site 1', slug='site-1'), + Site(name='Site 2', slug='site-2'), + Site(name='Site 3', slug='site-3'), + ) + Site.objects.bulk_create(sites) + + tenants = ( + Tenant(name='Tenant 1', slug='tenant-1'), + Tenant(name='Tenant 2', slug='tenant-2'), + Tenant(name='Tenant 3', slug='tenant-3'), + ) + Tenant.objects.bulk_create(tenants) + + notification_groups = ( + NotificationGroup(name='Notification Group 1'), + NotificationGroup(name='Notification Group 2'), + NotificationGroup(name='Notification Group 3'), + ) + NotificationGroup.objects.bulk_create(notification_groups) + notification_groups[0].users.add(users[0]) + notification_groups[1].users.add(users[1]) + notification_groups[2].users.add(users[2]) + notification_groups[0].groups.add(groups[0]) + notification_groups[1].groups.add(groups[1]) + notification_groups[2].groups.add(groups[2]) + + def test_user(self): + users = User.objects.filter(username__startswith='User') + params = {'user': [users[0].username, users[1].username]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'user_id': [users[0].pk, users[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_group(self): + groups = Group.objects.all() + params = {'group': [groups[0].name, groups[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'group_id': [groups[0].pk, groups[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) diff --git a/netbox/extras/tests/test_models.py b/netbox/extras/tests/test_models.py index c92a1bc548a..188a06a3f29 100644 --- a/netbox/extras/tests/test_models.py +++ b/netbox/extras/tests/test_models.py @@ -49,11 +49,11 @@ class ConfigContextTest(TestCase): sitegroup = SiteGroup.objects.create(name='Site Group') site = Site.objects.create(name='Site 1', slug='site-1', region=region, group=sitegroup) location = Location.objects.create(name='Location 1', slug='location-1', site=site) - platform = Platform.objects.create(name='Platform') + Platform.objects.create(name='Platform') tenantgroup = TenantGroup.objects.create(name='Tenant Group') - tenant = Tenant.objects.create(name='Tenant', group=tenantgroup) - tag1 = Tag.objects.create(name='Tag', slug='tag') - tag2 = Tag.objects.create(name='Tag2', slug='tag2') + Tenant.objects.create(name='Tenant', group=tenantgroup) + Tag.objects.create(name='Tag', slug='tag') + Tag.objects.create(name='Tag2', slug='tag2') Device.objects.create( name='Device 1', diff --git a/netbox/extras/tests/test_views.py b/netbox/extras/tests/test_views.py index cbede195b4c..5d82fae4ca8 100644 --- a/netbox/extras/tests/test_views.py +++ b/netbox/extras/tests/test_views.py @@ -1,15 +1,14 @@ -from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.urls import reverse +from core.events import * from core.models import ObjectType from dcim.models import DeviceType, Manufacturer, Site from extras.choices import * from extras.models import * +from users.models import Group, User from utilities.testing import ViewTestCases, TestCase -User = get_user_model() - class CustomFieldTestCase(ViewTestCases.PrimaryObjectViewTestCase): model = CustomField @@ -396,9 +395,9 @@ class EventRulesTestCase(ViewTestCases.PrimaryObjectViewTestCase): site_type = ObjectType.objects.get_for_model(Site) event_rules = ( - EventRule(name='EventRule 1', type_create=True, action_object=webhooks[0]), - EventRule(name='EventRule 2', type_create=True, action_object=webhooks[1]), - EventRule(name='EventRule 3', type_create=True, action_object=webhooks[2]), + EventRule(name='EventRule 1', event_types=[OBJECT_CREATED], action_object=webhooks[0]), + EventRule(name='EventRule 2', event_types=[OBJECT_CREATED], action_object=webhooks[1]), + EventRule(name='EventRule 3', event_types=[OBJECT_CREATED], action_object=webhooks[2]), ) for event in event_rules: event.save() @@ -408,9 +407,7 @@ class EventRulesTestCase(ViewTestCases.PrimaryObjectViewTestCase): cls.form_data = { 'name': 'Event X', 'object_types': [site_type.pk], - 'type_create': False, - 'type_update': True, - 'type_delete': True, + 'event_types': [OBJECT_UPDATED, OBJECT_DELETED], 'conditions': None, 'action_type': 'webhook', 'action_object_type': webhook_ct.pk, @@ -420,8 +417,8 @@ class EventRulesTestCase(ViewTestCases.PrimaryObjectViewTestCase): } cls.csv_data = ( - "name,object_types,type_create,action_type,action_object", - "Webhook 4,dcim.site,True,webhook,Webhook 1", + 'name,object_types,event_types,action_type,action_object', + f'Webhook 4,dcim.site,"{OBJECT_CREATED},{OBJECT_UPDATED}",webhook,Webhook 1', ) cls.csv_update_data = ( @@ -432,7 +429,7 @@ class EventRulesTestCase(ViewTestCases.PrimaryObjectViewTestCase): ) cls.bulk_edit_data = { - 'type_update': True, + 'description': 'New description', } @@ -620,3 +617,166 @@ class CustomLinkTest(TestCase): response = self.client.get(site.get_absolute_url(), follow=True) self.assertEqual(response.status_code, 200) self.assertIn(f'FOO {site.name} BAR', str(response.content)) + + +class SubscriptionTestCase( + ViewTestCases.CreateObjectViewTestCase, + ViewTestCases.DeleteObjectViewTestCase, + ViewTestCases.ListObjectsViewTestCase, + ViewTestCases.BulkDeleteObjectsViewTestCase +): + model = Subscription + + @classmethod + def setUpTestData(cls): + site_ct = ContentType.objects.get_for_model(Site) + sites = ( + Site(name='Site 1', slug='site-1'), + Site(name='Site 2', slug='site-2'), + Site(name='Site 3', slug='site-3'), + Site(name='Site 4', slug='site-4'), + ) + Site.objects.bulk_create(sites) + + cls.form_data = { + 'object_type': site_ct.pk, + 'object_id': sites[3].pk, + } + + def setUp(self): + super().setUp() + + sites = Site.objects.all() + user = self.user + + subscriptions = ( + Subscription(object=sites[0], user=user), + Subscription(object=sites[1], user=user), + Subscription(object=sites[2], user=user), + ) + Subscription.objects.bulk_create(subscriptions) + + def _get_url(self, action, instance=None): + if action == 'list': + return reverse('account:subscriptions') + return super()._get_url(action, instance) + + def test_list_objects_anonymous(self): + self.client.logout() + url = reverse('account:subscriptions') + login_url = reverse('login') + self.assertRedirects(self.client.get(url), f'{login_url}?next={url}') + + def test_list_objects_with_permission(self): + return + + def test_list_objects_with_constrained_permission(self): + return + + +class NotificationGroupTestCase(ViewTestCases.PrimaryObjectViewTestCase): + model = NotificationGroup + + @classmethod + def setUpTestData(cls): + users = ( + User(username='User 1'), + User(username='User 2'), + User(username='User 3'), + ) + User.objects.bulk_create(users) + groups = ( + Group(name='Group 1'), + Group(name='Group 2'), + Group(name='Group 3'), + ) + Group.objects.bulk_create(groups) + + notification_groups = ( + NotificationGroup(name='Notification Group 1'), + NotificationGroup(name='Notification Group 2'), + NotificationGroup(name='Notification Group 3'), + ) + NotificationGroup.objects.bulk_create(notification_groups) + for i, notification_group in enumerate(notification_groups): + notification_group.users.add(users[i]) + notification_group.groups.add(groups[i]) + + cls.form_data = { + 'name': 'Notification Group X', + 'description': 'Blah', + 'users': [users[0].pk, users[1].pk], + 'groups': [groups[0].pk, groups[1].pk], + } + + cls.csv_data = ( + 'name,description,users,groups', + 'Notification Group 4,Foo,"User 1,User 2","Group 1,Group 2"', + 'Notification Group 5,Bar,"User 1,User 2","Group 1,Group 2"', + 'Notification Group 6,Baz,"User 1,User 2","Group 1,Group 2"', + ) + + cls.csv_update_data = ( + "id,name", + f"{notification_groups[0].pk},Notification Group 7", + f"{notification_groups[1].pk},Notification Group 8", + f"{notification_groups[2].pk},Notification Group 9", + ) + + cls.bulk_edit_data = { + 'description': 'New description', + } + + +class NotificationTestCase( + ViewTestCases.DeleteObjectViewTestCase, + ViewTestCases.ListObjectsViewTestCase, + ViewTestCases.BulkDeleteObjectsViewTestCase +): + model = Notification + + @classmethod + def setUpTestData(cls): + site_ct = ContentType.objects.get_for_model(Site) + sites = ( + Site(name='Site 1', slug='site-1'), + Site(name='Site 2', slug='site-2'), + Site(name='Site 3', slug='site-3'), + Site(name='Site 4', slug='site-4'), + ) + Site.objects.bulk_create(sites) + + cls.form_data = { + 'object_type': site_ct.pk, + 'object_id': sites[3].pk, + } + + def setUp(self): + super().setUp() + + sites = Site.objects.all() + user = self.user + + notifications = ( + Notification(object=sites[0], user=user), + Notification(object=sites[1], user=user), + Notification(object=sites[2], user=user), + ) + Notification.objects.bulk_create(notifications) + + def _get_url(self, action, instance=None): + if action == 'list': + return reverse('account:notifications') + return super()._get_url(action, instance) + + def test_list_objects_anonymous(self): + self.client.logout() + url = reverse('account:notifications') + login_url = reverse('login') + self.assertRedirects(self.client.get(url), f'{login_url}?next={url}') + + def test_list_objects_with_permission(self): + return + + def test_list_objects_with_constrained_permission(self): + return diff --git a/netbox/extras/urls.py b/netbox/extras/urls.py index f2e11e71ee8..b13af1db9c3 100644 --- a/netbox/extras/urls.py +++ b/netbox/extras/urls.py @@ -53,6 +53,24 @@ urlpatterns = [ path('bookmarks/delete/', views.BookmarkBulkDeleteView.as_view(), name='bookmark_bulk_delete'), path('bookmarks//', include(get_model_urls('extras', 'bookmark'))), + # Notification groups + path('notification-groups/', views.NotificationGroupListView.as_view(), name='notificationgroup_list'), + path('notification-groups/add/', views.NotificationGroupEditView.as_view(), name='notificationgroup_add'), + path('notification-groups/import/', views.NotificationGroupBulkImportView.as_view(), name='notificationgroup_import'), + path('notification-groups/edit/', views.NotificationGroupBulkEditView.as_view(), name='notificationgroup_bulk_edit'), + path('notification-groups/delete/', views.NotificationGroupBulkDeleteView.as_view(), name='notificationgroup_bulk_delete'), + path('notification-groups//', include(get_model_urls('extras', 'notificationgroup'))), + + # Notifications + path('notifications/', views.NotificationsView.as_view(), name='notifications'), + path('notifications/delete/', views.NotificationBulkDeleteView.as_view(), name='notification_bulk_delete'), + path('notifications//', include(get_model_urls('extras', 'notification'))), + + # Subscriptions + path('subscriptions/add/', views.SubscriptionCreateView.as_view(), name='subscription_add'), + path('subscriptions/delete/', views.SubscriptionBulkDeleteView.as_view(), name='subscription_bulk_delete'), + path('subscriptions//', include(get_model_urls('extras', 'subscription'))), + # Webhooks path('webhooks/', views.WebhookListView.as_view(), name='webhook_list'), path('webhooks/add/', views.WebhookEditView.as_view(), name='webhook_add'), @@ -121,11 +139,6 @@ urlpatterns = [ path('scripts//jobs/', views.ScriptJobsView.as_view(), name='script_jobs'), path('script-modules//', include(get_model_urls('extras', 'scriptmodule'))), - # Redirects for legacy script URLs - # TODO: Remove in NetBox v4.1 - path('scripts///', views.LegacyScriptRedirectView.as_view()), - path('scripts////', views.LegacyScriptRedirectView.as_view()), - # Markdown path('render/markdown/', views.RenderMarkdownView.as_view(), name="render_markdown"), ] diff --git a/netbox/extras/utils.py b/netbox/extras/utils.py index e67b9b50c79..28d2e13f07b 100644 --- a/netbox/extras/utils.py +++ b/netbox/extras/utils.py @@ -1,5 +1,19 @@ +import importlib + +from django.core.exceptions import ImproperlyConfigured from taggit.managers import _TaggableManager +from netbox.context import current_request +from .validators import CustomValidator + +__all__ = ( + 'image_upload', + 'is_report', + 'is_script', + 'is_taggable', + 'run_validators', +) + def is_taggable(obj): """ @@ -48,3 +62,25 @@ def is_report(obj): return issubclass(obj, Report) and obj != Report except TypeError: return False + + +def run_validators(instance, validators): + """ + Run the provided iterable of CustomValidators for the instance. + """ + request = current_request.get() + for validator in validators: + + # Loading a validator class by dotted path + if type(validator) is str: + module, cls = validator.rsplit('.', 1) + validator = getattr(importlib.import_module(module), cls)() + + # Constructing a new instance on the fly from a ruleset + elif type(validator) is dict: + validator = CustomValidator(validator) + + elif not issubclass(validator.__class__, CustomValidator): + raise ImproperlyConfigured(f"Invalid value for custom validator: {validator}") + + validator(instance, request) diff --git a/netbox/extras/validators.py b/netbox/extras/validators.py index 082f87d642d..306acf01bb8 100644 --- a/netbox/extras/validators.py +++ b/netbox/extras/validators.py @@ -1,4 +1,3 @@ -import inspect import operator from django.core import validators @@ -123,13 +122,7 @@ class CustomValidator: ) # Execute custom validation logic (if any) - # TODO: Remove in v4.1 - # Inspect the validate() method, which may have been overridden, to determine - # whether we should pass the request (maintains backward compatibility for pre-v4.0) - if 'request' in inspect.signature(self.validate).parameters: - self.validate(instance, request) - else: - self.validate(instance) + self.validate(instance, request) @staticmethod def _get_request_attr(request, name): diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 4d33324055f..3218422605c 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -6,6 +6,8 @@ from django.db.models import Count, Q from django.http import HttpResponseBadRequest, HttpResponseForbidden, HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse +from django.utils import timezone +from django.utils.module_loading import import_string from django.utils.translation import gettext as _ from django.views.generic import View @@ -33,7 +35,6 @@ from virtualization.models import VirtualMachine from . import filtersets, forms, tables from .constants import LOG_LEVEL_RANK from .models import * -from .scripts import run_script from .tables import ReportResultsTable, ScriptResultsTable @@ -356,6 +357,144 @@ class BookmarkBulkDeleteView(generic.BulkDeleteView): return Bookmark.objects.filter(user=request.user) +# +# Notification groups +# + +class NotificationGroupListView(generic.ObjectListView): + queryset = NotificationGroup.objects.all() + filterset = filtersets.NotificationGroupFilterSet + filterset_form = forms.NotificationGroupFilterForm + table = tables.NotificationGroupTable + + +@register_model_view(NotificationGroup) +class NotificationGroupView(generic.ObjectView): + queryset = NotificationGroup.objects.all() + + +@register_model_view(NotificationGroup, 'edit') +class NotificationGroupEditView(generic.ObjectEditView): + queryset = NotificationGroup.objects.all() + form = forms.NotificationGroupForm + + +@register_model_view(NotificationGroup, 'delete') +class NotificationGroupDeleteView(generic.ObjectDeleteView): + queryset = NotificationGroup.objects.all() + + +class NotificationGroupBulkImportView(generic.BulkImportView): + queryset = NotificationGroup.objects.all() + model_form = forms.NotificationGroupImportForm + + +class NotificationGroupBulkEditView(generic.BulkEditView): + queryset = NotificationGroup.objects.all() + filterset = filtersets.NotificationGroupFilterSet + table = tables.NotificationGroupTable + form = forms.NotificationGroupBulkEditForm + + +class NotificationGroupBulkDeleteView(generic.BulkDeleteView): + queryset = NotificationGroup.objects.all() + filterset = filtersets.NotificationGroupFilterSet + table = tables.NotificationGroupTable + + +# +# Notifications +# + +class NotificationsView(LoginRequiredMixin, View): + """ + HTMX-only user-specific notifications list. + """ + def get(self, request): + return render(request, 'htmx/notifications.html', { + 'notifications': request.user.notifications.unread(), + 'total_count': request.user.notifications.count(), + }) + + +@register_model_view(Notification, 'read') +class NotificationReadView(LoginRequiredMixin, View): + """ + Mark the Notification read and redirect the user to its attached object. + """ + def get(self, request, pk): + # Mark the Notification as read + notification = get_object_or_404(request.user.notifications, pk=pk) + notification.read = timezone.now() + notification.save() + + # Redirect to the object if it has a URL (deleted objects will not) + if hasattr(notification.object, 'get_absolute_url'): + return redirect(notification.object.get_absolute_url()) + + return redirect('account:notifications') + + +@register_model_view(Notification, 'dismiss') +class NotificationDismissView(LoginRequiredMixin, View): + """ + A convenience view which allows deleting notifications with one click. + """ + def get(self, request, pk): + notification = get_object_or_404(request.user.notifications, pk=pk) + notification.delete() + + if htmx_partial(request): + return render(request, 'htmx/notifications.html', { + 'notifications': request.user.notifications.unread()[:10], + }) + + return redirect('account:notifications') + + +@register_model_view(Notification, 'delete') +class NotificationDeleteView(generic.ObjectDeleteView): + + def get_queryset(self, request): + return Notification.objects.filter(user=request.user) + + +class NotificationBulkDeleteView(generic.BulkDeleteView): + table = tables.NotificationTable + + def get_queryset(self, request): + return Notification.objects.filter(user=request.user) + + +# +# Subscriptions +# + +class SubscriptionCreateView(generic.ObjectEditView): + form = forms.SubscriptionForm + + def get_queryset(self, request): + return Subscription.objects.filter(user=request.user) + + def alter_object(self, obj, request, url_args, url_kwargs): + obj.user = request.user + return obj + + +@register_model_view(Subscription, 'delete') +class SubscriptionDeleteView(generic.ObjectDeleteView): + + def get_queryset(self, request): + return Subscription.objects.filter(user=request.user) + + +class SubscriptionBulkDeleteView(generic.BulkDeleteView): + table = tables.SubscriptionTable + + def get_queryset(self, request): + return Subscription.objects.filter(user=request.user) + + # # Webhooks # @@ -1032,10 +1171,9 @@ class ScriptView(BaseScriptView): if not get_workers_for_queue('default'): messages.error(request, _("Unable to run script: RQ worker process not running.")) elif form.is_valid(): - job = Job.enqueue( - run_script, + ScriptJob = import_string("extras.jobs.ScriptJob") + job = ScriptJob.enqueue( instance=script, - name=script_class.class_name, user=request.user, schedule_at=form.cleaned_data.pop('_schedule_at'), interval=form.cleaned_data.pop('_interval'), @@ -1091,25 +1229,6 @@ class ScriptJobsView(BaseScriptView): }) -class LegacyScriptRedirectView(ContentTypePermissionRequiredMixin, View): - """ - Redirect legacy (pre-v4.0) script URLs. Examples: - /extras/scripts/// --> /extras/scripts// - /extras/scripts///source/ --> /extras/scripts//source/ - /extras/scripts///jobs/ --> /extras/scripts//jobs/ - """ - def get_required_permission(self): - return 'extras.view_script' - - def get(self, request, module, name, path=''): - module = get_object_or_404(ScriptModule.objects.restrict(request.user), file_path__regex=f"^{module}\\.") - script = get_object_or_404(Script.objects.all(), module=module, name=name) - - url = reverse('extras:script', kwargs={'pk': script.pk}) - - return redirect(f'{url}{path}') - - class ScriptResultView(TableMixin, generic.ObjectView): queryset = Job.objects.all() @@ -1122,7 +1241,10 @@ class ScriptResultView(TableMixin, generic.ObjectView): table = None index = 0 - log_threshold = LOG_LEVEL_RANK.get(request.GET.get('log_threshold', LogLevelChoices.LOG_DEFAULT)) + try: + log_threshold = LOG_LEVEL_RANK[request.GET.get('log_threshold', LogLevelChoices.LOG_DEBUG)] + except KeyError: + log_threshold = LOG_LEVEL_RANK[LogLevelChoices.LOG_DEBUG] if job.data: if 'log' in job.data: @@ -1179,12 +1301,16 @@ class ScriptResultView(TableMixin, generic.ObjectView): if job.completed: table = self.get_table(job, request, bulk_actions=False) + log_threshold = request.GET.get('log_threshold', LogLevelChoices.LOG_DEBUG) + if log_threshold not in LOG_LEVEL_RANK: + log_threshold = LogLevelChoices.LOG_DEBUG + context = { 'script': job.object, 'job': job, 'table': table, 'log_levels': dict(LogLevelChoices), - 'log_threshold': request.GET.get('log_threshold', LogLevelChoices.LOG_DEFAULT) + 'log_threshold': log_threshold, } if job.data and 'log' in job.data: @@ -1199,6 +1325,9 @@ class ScriptResultView(TableMixin, generic.ObjectView): # If this is an HTMX request, return only the result HTML if htmx_partial(request): + if request.GET.get('log'): + # If log=True, render only the log table + return render(request, 'htmx/table.html', context) response = render(request, 'extras/htmx/script_result.html', context) if job.completed or not job.started: response.status_code = 286 diff --git a/netbox/extras/webhooks.py b/netbox/extras/webhooks.py index 53ec161d783..889c97ac27b 100644 --- a/netbox/extras/webhooks.py +++ b/netbox/extras/webhooks.py @@ -25,7 +25,7 @@ def generate_signature(request_body, secret): @job('default') -def send_webhook(event_rule, model_name, event, data, timestamp, username, request_id=None, snapshots=None): +def send_webhook(event_rule, model_name, event_type, data, timestamp, username, request_id=None, snapshots=None): """ Make a POST request to the defined Webhook """ @@ -33,7 +33,7 @@ def send_webhook(event_rule, model_name, event, data, timestamp, username, reque # Prepare context data for headers & body templates context = { - 'event': WEBHOOK_EVENT_TYPES[event], + 'event': WEBHOOK_EVENT_TYPES.get(event_type, event_type), 'timestamp': timestamp, 'model': model_name, 'username': username, diff --git a/netbox/ipam/api/nested_serializers.py b/netbox/ipam/api/nested_serializers.py index 95b5ab11df0..8b10f29dfa1 100644 --- a/netbox/ipam/api/nested_serializers.py +++ b/netbox/ipam/api/nested_serializers.py @@ -1,3 +1,5 @@ +import warnings + from drf_spectacular.utils import extend_schema_serializer from rest_framework import serializers @@ -5,6 +7,7 @@ from ipam import models from netbox.api.fields import RelatedObjectCountField from netbox.api.serializers import WritableNestedSerializer from .field_serializers import IPAddressField +from .serializers_.nested import NestedIPAddressSerializer __all__ = [ 'NestedAggregateSerializer', @@ -25,6 +28,12 @@ __all__ = [ 'NestedVRFSerializer', ] +# TODO: Remove in v4.2 +warnings.warn( + "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", + DeprecationWarning +) + # # ASN ranges @@ -177,19 +186,6 @@ class NestedIPRangeSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display_url', 'display', 'family', 'start_address', 'end_address'] -# -# IP addresses -# - -class NestedIPAddressSerializer(WritableNestedSerializer): - family = serializers.IntegerField(read_only=True) - address = IPAddressField() - - class Meta: - model = models.IPAddress - fields = ['id', 'url', 'display_url', 'display', 'family', 'address'] - - # # Services # diff --git a/netbox/ipam/api/serializers.py b/netbox/ipam/api/serializers.py index 1f5f210288b..0bdfc538533 100644 --- a/netbox/ipam/api/serializers.py +++ b/netbox/ipam/api/serializers.py @@ -5,4 +5,3 @@ from .serializers_.vlans import * from .serializers_.ip import * from .serializers_.fhrpgroups import * from .serializers_.services import * -from .nested_serializers import * diff --git a/netbox/ipam/api/serializers_/ip.py b/netbox/ipam/api/serializers_/ip.py index 73fd0906442..535ffcec1bb 100644 --- a/netbox/ipam/api/serializers_/ip.py +++ b/netbox/ipam/api/serializers_/ip.py @@ -11,11 +11,11 @@ from netbox.api.serializers import NetBoxModelSerializer from tenancy.api.serializers_.tenants import TenantSerializer from utilities.api import get_serializer_for_model from .asns import RIRSerializer +from .nested import NestedIPAddressSerializer from .roles import RoleSerializer from .vlans import VLANSerializer from .vrfs import VRFSerializer from ..field_serializers import IPAddressField, IPNetworkField -from ..nested_serializers import * __all__ = ( 'AggregateSerializer', diff --git a/netbox/ipam/api/serializers_/nested.py b/netbox/ipam/api/serializers_/nested.py new file mode 100644 index 00000000000..5297565bb9b --- /dev/null +++ b/netbox/ipam/api/serializers_/nested.py @@ -0,0 +1,18 @@ +from rest_framework import serializers + +from ipam import models +from netbox.api.serializers import WritableNestedSerializer +from ..field_serializers import IPAddressField + +__all__ = ( + 'NestedIPAddressSerializer', +) + + +class NestedIPAddressSerializer(WritableNestedSerializer): + family = serializers.IntegerField(read_only=True) + address = IPAddressField() + + class Meta: + model = models.IPAddress + fields = ['id', 'url', 'display_url', 'display', 'family', 'address'] diff --git a/netbox/ipam/api/serializers_/roles.py b/netbox/ipam/api/serializers_/roles.py index 9a97a8570e4..99fd6f4705a 100644 --- a/netbox/ipam/api/serializers_/roles.py +++ b/netbox/ipam/api/serializers_/roles.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from ipam.models import Role from netbox.api.fields import RelatedObjectCountField from netbox.api.serializers import NetBoxModelSerializer diff --git a/netbox/ipam/api/serializers_/services.py b/netbox/ipam/api/serializers_/services.py index e0b2014f622..61b330d012b 100644 --- a/netbox/ipam/api/serializers_/services.py +++ b/netbox/ipam/api/serializers_/services.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from dcim.api.serializers_.devices import DeviceSerializer from ipam.choices import * from ipam.models import IPAddress, Service, ServiceTemplate diff --git a/netbox/ipam/api/serializers_/vlans.py b/netbox/ipam/api/serializers_/vlans.py index 5525545a86f..608fcf0b47b 100644 --- a/netbox/ipam/api/serializers_/vlans.py +++ b/netbox/ipam/api/serializers_/vlans.py @@ -6,7 +6,7 @@ from dcim.api.serializers_.sites import SiteSerializer from ipam.choices import * from ipam.constants import VLANGROUP_SCOPE_TYPES from ipam.models import VLAN, VLANGroup -from netbox.api.fields import ChoiceField, ContentTypeField, RelatedObjectCountField +from netbox.api.fields import ChoiceField, ContentTypeField, IntegerRangeSerializer, RelatedObjectCountField from netbox.api.serializers import NetBoxModelSerializer from tenancy.api.serializers_.tenants import TenantSerializer from utilities.api import get_serializer_for_model @@ -32,6 +32,7 @@ class VLANGroupSerializer(NetBoxModelSerializer): ) scope_id = serializers.IntegerField(allow_null=True, required=False, default=None) scope = serializers.SerializerMethodField(read_only=True) + vid_ranges = IntegerRangeSerializer(many=True, required=False) utilization = serializers.CharField(read_only=True) # Related object counts @@ -40,8 +41,8 @@ class VLANGroupSerializer(NetBoxModelSerializer): class Meta: model = VLANGroup fields = [ - 'id', 'url', 'display_url', 'display', 'name', 'slug', 'scope_type', 'scope_id', 'scope', 'min_vid', - 'max_vid', 'description', 'tags', 'custom_fields', 'created', 'last_updated', 'vlan_count', 'utilization' + 'id', 'url', 'display_url', 'display', 'name', 'slug', 'scope_type', 'scope_id', 'scope', 'vid_ranges', + 'description', 'tags', 'custom_fields', 'created', 'last_updated', 'vlan_count', 'utilization' ] brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'vlan_count') validators = [] diff --git a/netbox/ipam/api/serializers_/vrfs.py b/netbox/ipam/api/serializers_/vrfs.py index ad54dc09557..a23909108c1 100644 --- a/netbox/ipam/api/serializers_/vrfs.py +++ b/netbox/ipam/api/serializers_/vrfs.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from ipam.models import RouteTarget, VRF from netbox.api.fields import RelatedObjectCountField, SerializedPKRelatedField from netbox.api.serializers import NetBoxModelSerializer diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index cac90bb873e..ffd4d5b7de1 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -186,13 +186,13 @@ class AvailableObjectsView(ObjectValidationMixin, APIView): """ Return the parent object. """ - raise NotImplemented() + raise NotImplementedError() def get_available_objects(self, parent, limit=None): """ Return all available objects for the parent. """ - raise NotImplemented() + raise NotImplementedError() def get_extra_context(self, parent): """ @@ -250,7 +250,7 @@ class AvailableObjectsView(ObjectValidationMixin, APIView): # Determine if the requested number of objects is available if not self.check_sufficient_available(serializer.validated_data, available_objects): return Response( - {"detail": f"Insufficient resources are available to satisfy the request"}, + {"detail": "Insufficient resources are available to satisfy the request"}, status=status.HTTP_409_CONFLICT ) diff --git a/netbox/ipam/apps.py b/netbox/ipam/apps.py index 244ec7d6d0e..c118d5464fd 100644 --- a/netbox/ipam/apps.py +++ b/netbox/ipam/apps.py @@ -7,7 +7,7 @@ class IPAMConfig(AppConfig): def ready(self): from netbox.models.features import register_models - from . import signals, search + from . import signals, search # noqa: F401 # Register models register_models(*self.get_models()) diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 5cdfac34ed3..894219c646a 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -458,7 +458,7 @@ class PrefixFilterSet(NetBoxModelFilterSet, TenancyFilterSet): return queryset.filter( Q(vrf=vrf) | Q(vrf__export_targets__in=vrf.import_targets.all()) - ) + ).distinct() class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet): @@ -738,7 +738,7 @@ class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet): return queryset.filter( Q(vrf=vrf) | Q(vrf__export_targets__in=vrf.import_targets.all()) - ) + ).distinct() def filter_device(self, queryset, name, value): devices = Device.objects.filter(**{'{}__in'.format(name): value}) @@ -911,10 +911,13 @@ class VLANGroupFilterSet(OrganizationalModelFilterSet): cluster = django_filters.NumberFilter( method='filter_scope' ) + contains_vid = django_filters.NumberFilter( + method='filter_contains_vid' + ) class Meta: model = VLANGroup - fields = ('id', 'name', 'slug', 'min_vid', 'max_vid', 'description', 'scope_id') + fields = ('id', 'name', 'slug', 'description', 'scope_id') def search(self, queryset, name, value): if not value.strip(): @@ -932,6 +935,21 @@ class VLANGroupFilterSet(OrganizationalModelFilterSet): scope_id=value ) + def filter_contains_vid(self, queryset, name, value): + """ + Return all VLANGroups which contain the given VLAN ID. + """ + table_name = VLANGroup._meta.db_table + # TODO: See if this can be optimized without compromising queryset integrity + # Expand VLAN ID ranges to query by integer + groups = VLANGroup.objects.raw( + f'SELECT id FROM {table_name}, unnest(vid_ranges) vid_range WHERE %s <@ vid_range', + params=(value,) + ) + return queryset.filter( + pk__in=[g.id for g in groups] + ) + class VLANFilterSet(NetBoxModelFilterSet, TenancyFilterSet): region_id = TreeNodeMultipleChoiceFilter( @@ -1017,6 +1035,16 @@ class VLANFilterSet(NetBoxModelFilterSet, TenancyFilterSet): to_field_name='identifier', label=_('L2VPN'), ) + interface_id = django_filters.ModelChoiceFilter( + queryset=Interface.objects.all(), + method='filter_interface_id', + label=_('Assigned interface') + ) + vminterface_id = django_filters.ModelChoiceFilter( + queryset=VMInterface.objects.all(), + method='filter_vminterface_id', + label=_('Assigned VM interface') + ) class Meta: model = VLAN @@ -1044,6 +1072,22 @@ class VLANFilterSet(NetBoxModelFilterSet, TenancyFilterSet): def get_for_virtualmachine(self, queryset, name, value): return queryset.get_for_virtualmachine(value) + def filter_interface_id(self, queryset, name, value): + if value is None: + return queryset.none() + return queryset.filter( + Q(interfaces_as_tagged=value) | + Q(interfaces_as_untagged=value) + ) + + def filter_vminterface_id(self, queryset, name, value): + if value is None: + return queryset.none() + return queryset.filter( + Q(vminterfaces_as_tagged=value) | + Q(vminterfaces_as_untagged=value) + ) + class ServiceTemplateFilterSet(NetBoxModelFilterSet): port = NumericArrayFilter( diff --git a/netbox/ipam/forms/bulk_edit.py b/netbox/ipam/forms/bulk_edit.py index c7f64ab1d87..f4a7eabb7da 100644 --- a/netbox/ipam/forms/bulk_edit.py +++ b/netbox/ipam/forms/bulk_edit.py @@ -12,6 +12,7 @@ from tenancy.models import Tenant from utilities.forms import add_blank_choice from utilities.forms.fields import ( CommentField, ContentTypeChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, NumericArrayField, + NumericRangeArrayField, ) from utilities.forms.rendering import FieldSet from utilities.forms.widgets import BulkEditNullBooleanSelect @@ -221,6 +222,19 @@ class PrefixBulkEditForm(NetBoxModelBulkEditForm): 'group_id': '$site_group', } ) + vlan_group = DynamicModelChoiceField( + queryset=VLANGroup.objects.all(), + required=False, + label=_('VLAN Group') + ) + vlan = DynamicModelChoiceField( + queryset=VLAN.objects.all(), + required=False, + label=_('VLAN'), + query_params={ + 'group_id': '$vlan_group', + } + ) vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), required=False, @@ -269,9 +283,10 @@ class PrefixBulkEditForm(NetBoxModelBulkEditForm): FieldSet('tenant', 'status', 'role', 'description'), FieldSet('region', 'site_group', 'site', name=_('Site')), FieldSet('vrf', 'prefix_length', 'is_pool', 'mark_utilized', name=_('Addressing')), + FieldSet('vlan_group', 'vlan', name=_('VLAN Assignment')), ) nullable_fields = ( - 'site', 'vrf', 'tenant', 'role', 'description', 'comments', + 'site', 'vlan', 'vrf', 'tenant', 'role', 'description', 'comments', ) @@ -408,18 +423,6 @@ class FHRPGroupBulkEditForm(NetBoxModelBulkEditForm): class VLANGroupBulkEditForm(NetBoxModelBulkEditForm): - min_vid = forms.IntegerField( - min_value=VLAN_VID_MIN, - max_value=VLAN_VID_MAX, - required=False, - label=_('Minimum child VLAN VID') - ) - max_vid = forms.IntegerField( - min_value=VLAN_VID_MIN, - max_value=VLAN_VID_MAX, - required=False, - label=_('Maximum child VLAN VID') - ) description = forms.CharField( label=_('Description'), max_length=200, @@ -483,10 +486,14 @@ class VLANGroupBulkEditForm(NetBoxModelBulkEditForm): 'group_id': '$clustergroup', } ) + vid_ranges = NumericRangeArrayField( + label=_('VLAN ID ranges'), + required=False + ) model = VLANGroup fieldsets = ( - FieldSet('site', 'min_vid', 'max_vid', 'description'), + FieldSet('site', 'vid_ranges', 'description'), FieldSet( 'scope_type', 'region', 'sitegroup', 'site', 'location', 'rack', 'clustergroup', 'cluster', name=_('Scope') ), diff --git a/netbox/ipam/forms/bulk_import.py b/netbox/ipam/forms/bulk_import.py index bfff1f4f4f4..dea250c7921 100644 --- a/netbox/ipam/forms/bulk_import.py +++ b/netbox/ipam/forms/bulk_import.py @@ -9,7 +9,8 @@ from ipam.models import * from netbox.forms import NetBoxModelImportForm from tenancy.models import Tenant from utilities.forms.fields import ( - CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVModelMultipleChoiceField, SlugField + CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVModelMultipleChoiceField, SlugField, + NumericRangeArrayField, ) from virtualization.models import VirtualMachine, VMInterface @@ -411,22 +412,13 @@ class VLANGroupImportForm(NetBoxModelImportForm): required=False, label=_('Scope type (app & model)') ) - min_vid = forms.IntegerField( - min_value=VLAN_VID_MIN, - max_value=VLAN_VID_MAX, - required=False, - label=_('Minimum child VLAN VID (default: {minimum})').format(minimum=VLAN_VID_MIN) - ) - max_vid = forms.IntegerField( - min_value=VLAN_VID_MIN, - max_value=VLAN_VID_MAX, - required=False, - label=_('Maximum child VLAN VID (default: {maximum})').format(maximum=VLAN_VID_MIN) + vid_ranges = NumericRangeArrayField( + required=False ) class Meta: model = VLANGroup - fields = ('name', 'slug', 'scope_type', 'scope_id', 'min_vid', 'max_vid', 'description', 'tags') + fields = ('name', 'slug', 'scope_type', 'scope_id', 'vid_ranges', 'description', 'tags') labels = { 'scope_id': 'Scope ID', } diff --git a/netbox/ipam/forms/filtersets.py b/netbox/ipam/forms/filtersets.py index 80fb0422656..a326943217d 100644 --- a/netbox/ipam/forms/filtersets.py +++ b/netbox/ipam/forms/filtersets.py @@ -413,7 +413,7 @@ class VLANGroupFilterForm(NetBoxModelFilterSetForm): FieldSet('q', 'filter_id', 'tag'), FieldSet('region', 'sitegroup', 'site', 'location', 'rack', name=_('Location')), FieldSet('cluster_group', 'cluster', name=_('Cluster')), - FieldSet('min_vid', 'max_vid', name=_('VLAN ID')), + FieldSet('contains_vid', name=_('VLANs')), ) model = VLANGroup region = DynamicModelMultipleChoiceField( @@ -441,18 +441,6 @@ class VLANGroupFilterForm(NetBoxModelFilterSetForm): required=False, label=_('Rack') ) - min_vid = forms.IntegerField( - required=False, - min_value=VLAN_VID_MIN, - max_value=VLAN_VID_MAX, - label=_('Minimum VID') - ) - max_vid = forms.IntegerField( - required=False, - min_value=VLAN_VID_MIN, - max_value=VLAN_VID_MAX, - label=_('Maximum VID') - ) cluster = DynamicModelMultipleChoiceField( queryset=Cluster.objects.all(), required=False, @@ -463,6 +451,11 @@ class VLANGroupFilterForm(NetBoxModelFilterSetForm): required=False, label=_('Cluster group') ) + contains_vid = forms.IntegerField( + min_value=0, + required=False, + label=_('Contains VLAN ID') + ) tag = TagFilterField(model) diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py index 4e405a0355f..156e7c43562 100644 --- a/netbox/ipam/forms/model_forms.py +++ b/netbox/ipam/forms/model_forms.py @@ -1,9 +1,9 @@ from django import forms from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import ValidationError +from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.utils.translation import gettext_lazy as _ -from dcim.models import Device, Interface, Location, Rack, Region, Site, SiteGroup +from dcim.models import Device, Interface, Site from ipam.choices import * from ipam.constants import * from ipam.formfields import IPNetworkFormField @@ -14,11 +14,13 @@ from utilities.exceptions import PermissionsViolation from utilities.forms import add_blank_choice from utilities.forms.fields import ( CommentField, ContentTypeChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, NumericArrayField, - SlugField, + NumericRangeArrayField, SlugField ) from utilities.forms.rendering import FieldSet, InlineFields, ObjectAttribute, TabbedGroups -from utilities.forms.widgets import DatePicker -from virtualization.models import Cluster, ClusterGroup, VirtualMachine, VMInterface +from utilities.forms.utils import get_field_value +from utilities.forms.widgets import DatePicker, HTMXSelect +from utilities.templatetags.builtins.filters import bettertitle +from virtualization.models import VirtualMachine, VMInterface __all__ = ( 'AggregateForm', @@ -562,91 +564,34 @@ class FHRPGroupAssignmentForm(forms.ModelForm): class VLANGroupForm(NetBoxModelForm): - scope_type = ContentTypeChoiceField( - label=_('Scope type'), - queryset=ContentType.objects.filter(model__in=VLANGROUP_SCOPE_TYPES), - required=False - ) - region = DynamicModelChoiceField( - label=_('Region'), - queryset=Region.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - } - ) - sitegroup = DynamicModelChoiceField( - queryset=SiteGroup.objects.all(), - required=False, - initial_params={ - 'sites': '$site' - }, - label=_('Site group') - ) - site = DynamicModelChoiceField( - label=_('Site'), - queryset=Site.objects.all(), - required=False, - initial_params={ - 'locations': '$location' - }, - query_params={ - 'region_id': '$region', - 'group_id': '$sitegroup', - } - ) - location = DynamicModelChoiceField( - label=_('Location'), - queryset=Location.objects.all(), - required=False, - initial_params={ - 'racks': '$rack' - }, - query_params={ - 'site_id': '$site', - } - ) - rack = DynamicModelChoiceField( - label=_('Rack'), - queryset=Rack.objects.all(), - required=False, - query_params={ - 'site_id': '$site', - 'location_id': '$location', - } - ) - clustergroup = DynamicModelChoiceField( - queryset=ClusterGroup.objects.all(), - required=False, - initial_params={ - 'clusters': '$cluster' - }, - label=_('Cluster group') - ) - cluster = DynamicModelChoiceField( - label=_('Cluster'), - queryset=Cluster.objects.all(), - required=False, - query_params={ - 'group_id': '$clustergroup', - } - ) slug = SlugField() + vid_ranges = NumericRangeArrayField( + label=_('VLAN IDs') + ) + scope_type = ContentTypeChoiceField( + queryset=ContentType.objects.filter(model__in=VLANGROUP_SCOPE_TYPES), + widget=HTMXSelect(), + required=False, + label=_('Scope type') + ) + scope = DynamicModelChoiceField( + label=_('Scope'), + queryset=Site.objects.none(), # Initial queryset + required=False, + disabled=True, + selector=True + ) fieldsets = ( FieldSet('name', 'slug', 'description', 'tags', name=_('VLAN Group')), - FieldSet('min_vid', 'max_vid', name=_('Child VLANs')), - FieldSet( - 'scope_type', 'region', 'sitegroup', 'site', 'location', 'rack', 'clustergroup', 'cluster', - name=_('Scope') - ), + FieldSet('vid_ranges', name=_('Child VLANs')), + FieldSet('scope_type', 'scope', name=_('Scope')), ) class Meta: model = VLANGroup fields = [ - 'name', 'slug', 'description', 'scope_type', 'region', 'sitegroup', 'site', 'location', 'rack', - 'clustergroup', 'cluster', 'min_vid', 'max_vid', 'tags', + 'name', 'slug', 'description', 'vid_ranges', 'scope_type', 'tags', ] def __init__(self, *args, **kwargs): @@ -654,21 +599,30 @@ class VLANGroupForm(NetBoxModelForm): initial = kwargs.get('initial', {}) if instance is not None and instance.scope: - initial[instance.scope_type.model] = instance.scope - + initial['scope'] = instance.scope kwargs['initial'] = initial super().__init__(*args, **kwargs) + if scope_type_id := get_field_value(self, 'scope_type'): + try: + scope_type = ContentType.objects.get(pk=scope_type_id) + model = scope_type.model_class() + self.fields['scope'].queryset = model.objects.all() + self.fields['scope'].widget.attrs['selector'] = model._meta.label_lower + self.fields['scope'].disabled = False + self.fields['scope'].label = _(bettertitle(model._meta.verbose_name)) + except ObjectDoesNotExist: + pass + + if self.instance and scope_type_id != self.instance.scope_type_id: + self.initial['scope'] = None + def clean(self): super().clean() - # Assign scope based on scope_type - if self.cleaned_data.get('scope_type'): - scope_field = self.cleaned_data['scope_type'].model - self.instance.scope = self.cleaned_data.get(scope_field) - else: - self.instance.scope_id = None + # Assign the selected scope (if any) + self.instance.scope = self.cleaned_data.get('scope') class VLANForm(TenancyForm, NetBoxModelForm): diff --git a/netbox/ipam/graphql/mixins.py b/netbox/ipam/graphql/mixins.py index 73cc60ec413..692741871f8 100644 --- a/netbox/ipam/graphql/mixins.py +++ b/netbox/ipam/graphql/mixins.py @@ -1,7 +1,6 @@ from typing import Annotated, List import strawberry -import strawberry_django __all__ = ( 'IPAddressesMixin', @@ -11,9 +10,9 @@ __all__ = ( @strawberry.type class IPAddressesMixin: - ip_addresses: List[Annotated["IPAddressType", strawberry.lazy('ipam.graphql.types')]] + ip_addresses: List[Annotated["IPAddressType", strawberry.lazy('ipam.graphql.types')]] # noqa: F821 @strawberry.type class VLANGroupsMixin: - vlan_groups: List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]] + vlan_groups: List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]] # noqa: F821 diff --git a/netbox/ipam/graphql/schema.py b/netbox/ipam/graphql/schema.py index c02788c3a79..072f8cbcd46 100644 --- a/netbox/ipam/graphql/schema.py +++ b/netbox/ipam/graphql/schema.py @@ -3,88 +3,55 @@ from typing import List import strawberry import strawberry_django -from ipam import models from .types import * -@strawberry.type +@strawberry.type(name="Query") class IPAMQuery: - @strawberry.field - def asn(self, id: int) -> ASNType: - return models.ASN.objects.get(pk=id) + asn: ASNType = strawberry_django.field() asn_list: List[ASNType] = strawberry_django.field() - @strawberry.field - def asn_range(self, id: int) -> ASNRangeType: - return models.ASNRange.objects.get(pk=id) + asn_range: ASNRangeType = strawberry_django.field() asn_range_list: List[ASNRangeType] = strawberry_django.field() - @strawberry.field - def aggregate(self, id: int) -> AggregateType: - return models.Aggregate.objects.get(pk=id) + aggregate: AggregateType = strawberry_django.field() aggregate_list: List[AggregateType] = strawberry_django.field() - @strawberry.field - def ip_address(self, id: int) -> IPAddressType: - return models.IPAddress.objects.get(pk=id) + ip_address: IPAddressType = strawberry_django.field() ip_address_list: List[IPAddressType] = strawberry_django.field() - @strawberry.field - def ip_range(self, id: int) -> IPRangeType: - return models.IPRange.objects.get(pk=id) + ip_range: IPRangeType = strawberry_django.field() ip_range_list: List[IPRangeType] = strawberry_django.field() - @strawberry.field - def prefix(self, id: int) -> PrefixType: - return models.Prefix.objects.get(pk=id) + prefix: PrefixType = strawberry_django.field() prefix_list: List[PrefixType] = strawberry_django.field() - @strawberry.field - def rir(self, id: int) -> RIRType: - return models.RIR.objects.get(pk=id) + rir: RIRType = strawberry_django.field() rir_list: List[RIRType] = strawberry_django.field() - @strawberry.field - def role(self, id: int) -> RoleType: - return models.Role.objects.get(pk=id) + role: RoleType = strawberry_django.field() role_list: List[RoleType] = strawberry_django.field() - @strawberry.field - def route_target(self, id: int) -> RouteTargetType: - return models.RouteTarget.objects.get(pk=id) + route_target: RouteTargetType = strawberry_django.field() route_target_list: List[RouteTargetType] = strawberry_django.field() - @strawberry.field - def service(self, id: int) -> ServiceType: - return models.Service.objects.get(pk=id) + service: ServiceType = strawberry_django.field() service_list: List[ServiceType] = strawberry_django.field() - @strawberry.field - def service_template(self, id: int) -> ServiceTemplateType: - return models.ServiceTemplate.objects.get(pk=id) + service_template: ServiceTemplateType = strawberry_django.field() service_template_list: List[ServiceTemplateType] = strawberry_django.field() - @strawberry.field - def fhrp_group(self, id: int) -> FHRPGroupType: - return models.FHRPGroup.objects.get(pk=id) + fhrp_group: FHRPGroupType = strawberry_django.field() fhrp_group_list: List[FHRPGroupType] = strawberry_django.field() - @strawberry.field - def fhrp_group_assignment(self, id: int) -> FHRPGroupAssignmentType: - return models.FHRPGroupAssignment.objects.get(pk=id) + fhrp_group_assignment: FHRPGroupAssignmentType = strawberry_django.field() fhrp_group_assignment_list: List[FHRPGroupAssignmentType] = strawberry_django.field() - @strawberry.field - def vlan(self, id: int) -> VLANType: - return models.VLAN.objects.get(pk=id) + vlan: VLANType = strawberry_django.field() vlan_list: List[VLANType] = strawberry_django.field() - @strawberry.field - def vlan_group(self, id: int) -> VLANGroupType: - return models.VLANGroup.objects.get(pk=id) + vlan_group: VLANGroupType = strawberry_django.field() vlan_group_list: List[VLANGroupType] = strawberry_django.field() - @strawberry.field - def vrf(self, id: int) -> VRFType: - return models.VRF.objects.get(pk=id) + vrf: VRFType = strawberry_django.field() vrf_list: List[VRFType] = strawberry_django.field() diff --git a/netbox/ipam/graphql/types.py b/netbox/ipam/graphql/types.py index 36e09eaac25..46d45816e73 100644 --- a/netbox/ipam/graphql/types.py +++ b/netbox/ipam/graphql/types.py @@ -251,6 +251,7 @@ class VLANType(NetBoxObjectType): class VLANGroupType(OrganizationalObjectType): vlans: List[VLANType] + vid_ranges: List[str] @strawberry_django.field def scope(self) -> Annotated[Union[ diff --git a/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py b/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py new file mode 100644 index 00000000000..b01941401ff --- /dev/null +++ b/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py @@ -0,0 +1,55 @@ +import django.contrib.postgres.fields +import django.contrib.postgres.fields.ranges +from django.db import migrations, models +from django.db.backends.postgresql.psycopg_any import NumericRange + +import ipam.models.vlans + + +def set_vid_ranges(apps, schema_editor): + """ + Convert the min_vid & max_vid fields to a range in the new vid_ranges ArrayField. + """ + VLANGroup = apps.get_model('ipam', 'VLANGroup') + for group in VLANGroup.objects.all(): + group.vid_ranges = [ + NumericRange(group.min_vid, group.max_vid, bounds='[]') + ] + group._total_vlan_ids = group.max_vid - group.min_vid + 1 + group.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('ipam', '0069_gfk_indexes'), + ] + + operations = [ + migrations.AddField( + model_name='vlangroup', + name='vid_ranges', + field=django.contrib.postgres.fields.ArrayField( + base_field=django.contrib.postgres.fields.ranges.IntegerRangeField(), + default=ipam.models.vlans.default_vid_ranges, + size=None + ), + ), + migrations.AddField( + model_name='vlangroup', + name='_total_vlan_ids', + field=models.PositiveBigIntegerField(default=4094), + ), + migrations.RunPython( + code=set_vid_ranges, + reverse_code=migrations.RunPython.noop + ), + migrations.RemoveField( + model_name='vlangroup', + name='max_vid', + ), + migrations.RemoveField( + model_name='vlangroup', + name='min_vid', + ), + ] diff --git a/netbox/ipam/models/asns.py b/netbox/ipam/models/asns.py index ba483a74533..eb47426b231 100644 --- a/netbox/ipam/models/asns.py +++ b/netbox/ipam/models/asns.py @@ -1,6 +1,5 @@ from django.core.exceptions import ValidationError from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from ipam.fields import ASNField @@ -54,9 +53,6 @@ class ASNRange(OrganizationalModel): def __str__(self): return f'{self.name} ({self.range_as_string()})' - def get_absolute_url(self): - return reverse('ipam:asnrange', args=[self.pk]) - @property def range(self): return range(self.start, self.end + 1) @@ -128,9 +124,6 @@ class ASN(PrimaryModel): def __str__(self): return f'AS{self.asn_with_asdot}' - def get_absolute_url(self): - return reverse('ipam:asn', args=[self.pk]) - @property def asn_asdot(self): """ @@ -149,3 +142,7 @@ class ASN(PrimaryModel): return f'{self.asn} ({self.asn // 65536}.{self.asn % 65536})' else: return self.asn + + @property + def prefixed_name(self): + return f'AS{self.asn_with_asdot}' diff --git a/netbox/ipam/models/fhrp.py b/netbox/ipam/models/fhrp.py index c3a7084b61b..28bb37ef371 100644 --- a/netbox/ipam/models/fhrp.py +++ b/netbox/ipam/models/fhrp.py @@ -1,7 +1,6 @@ from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from ipam.choices import * @@ -71,9 +70,6 @@ class FHRPGroup(PrimaryModel): return name - def get_absolute_url(self): - return reverse('ipam:fhrpgroup', args=[self.pk]) - class FHRPGroupAssignment(ChangeLoggedModel): interface_type = models.ForeignKey( diff --git a/netbox/ipam/models/ip.py b/netbox/ipam/models/ip.py index 0b8e3a8dfc8..a540b5810ce 100644 --- a/netbox/ipam/models/ip.py +++ b/netbox/ipam/models/ip.py @@ -4,7 +4,6 @@ from django.core.exceptions import ValidationError from django.db import models from django.db.models import F from django.db.models.functions import Cast -from django.urls import reverse from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ @@ -71,9 +70,6 @@ class RIR(OrganizationalModel): verbose_name = _('RIR') verbose_name_plural = _('RIRs') - def get_absolute_url(self): - return reverse('ipam:rir', args=[self.pk]) - class Aggregate(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): """ @@ -118,9 +114,6 @@ class Aggregate(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): def __str__(self): return str(self.prefix) - def get_absolute_url(self): - return reverse('ipam:aggregate', args=[self.pk]) - def clean(self): super().clean() @@ -203,9 +196,6 @@ class Role(OrganizationalModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('ipam:role', args=[self.pk]) - class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): """ @@ -303,9 +293,6 @@ class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): def __str__(self): return str(self.prefix) - def get_absolute_url(self): - return reverse('ipam:prefix', args=[self.pk]) - def clean(self): super().clean() @@ -551,9 +538,6 @@ class IPRange(ContactsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('ipam:iprange', args=[self.pk]) - def clean(self): super().clean() @@ -798,9 +782,6 @@ class IPAddress(ContactsMixin, PrimaryModel): self._original_assigned_object_id = self.__dict__.get('assigned_object_id') self._original_assigned_object_type_id = self.__dict__.get('assigned_object_type_id') - def get_absolute_url(self): - return reverse('ipam:ipaddress', args=[self.pk]) - def get_duplicates(self): return IPAddress.objects.filter( vrf=self.vrf, diff --git a/netbox/ipam/models/services.py b/netbox/ipam/models/services.py index 71f34c66c32..bb4049781b7 100644 --- a/netbox/ipam/models/services.py +++ b/netbox/ipam/models/services.py @@ -2,7 +2,6 @@ from django.contrib.postgres.fields import ArrayField from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from ipam.choices import * @@ -59,9 +58,6 @@ class ServiceTemplate(ServiceBase, PrimaryModel): verbose_name = _('service template') verbose_name_plural = _('service templates') - def get_absolute_url(self): - return reverse('ipam:servicetemplate', args=[self.pk]) - class Service(ContactsMixin, ServiceBase, PrimaryModel): """ @@ -102,9 +98,6 @@ class Service(ContactsMixin, ServiceBase, PrimaryModel): verbose_name = _('service') verbose_name_plural = _('services') - def get_absolute_url(self): - return reverse('ipam:service', args=[self.pk]) - @property def parent(self): return self.device or self.virtual_machine diff --git a/netbox/ipam/models/vlans.py b/netbox/ipam/models/vlans.py index 7434bd0b449..23f7c41c7e8 100644 --- a/netbox/ipam/models/vlans.py +++ b/netbox/ipam/models/vlans.py @@ -1,8 +1,9 @@ from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation +from django.contrib.postgres.fields import ArrayField, IntegerRangeField from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models -from django.urls import reverse +from django.db.backends.postgresql.psycopg_any import NumericRange from django.utils.translation import gettext_lazy as _ from dcim.models import Interface @@ -10,6 +11,7 @@ from ipam.choices import * from ipam.constants import * from ipam.querysets import VLANQuerySet, VLANGroupQuerySet from netbox.models import OrganizationalModel, PrimaryModel +from utilities.data import check_ranges_overlap, ranges_to_string from virtualization.models import VMInterface __all__ = ( @@ -18,9 +20,16 @@ __all__ = ( ) +def default_vid_ranges(): + return [ + NumericRange(VLAN_VID_MIN, VLAN_VID_MAX, bounds='[]') + ] + + class VLANGroup(OrganizationalModel): """ - A VLAN group is an arbitrary collection of VLANs within which VLAN IDs and names must be unique. + A VLAN group is an arbitrary collection of VLANs within which VLAN IDs and names must be unique. Each group must + define one or more ranges of valid VLAN IDs, and may be assigned a specific scope. """ name = models.CharField( verbose_name=_('name'), @@ -45,23 +54,13 @@ class VLANGroup(OrganizationalModel): ct_field='scope_type', fk_field='scope_id' ) - min_vid = models.PositiveSmallIntegerField( - verbose_name=_('minimum VLAN ID'), - default=VLAN_VID_MIN, - validators=( - MinValueValidator(VLAN_VID_MIN), - MaxValueValidator(VLAN_VID_MAX) - ), - help_text=_('Lowest permissible ID of a child VLAN') + vid_ranges = ArrayField( + IntegerRangeField(), + verbose_name=_('VLAN ID ranges'), + default=default_vid_ranges ) - max_vid = models.PositiveSmallIntegerField( - verbose_name=_('maximum VLAN ID'), - default=VLAN_VID_MAX, - validators=( - MinValueValidator(VLAN_VID_MIN), - MaxValueValidator(VLAN_VID_MAX) - ), - help_text=_('Highest permissible ID of a child VLAN') + _total_vlan_ids = models.PositiveBigIntegerField( + default=VLAN_VID_MAX - VLAN_VID_MIN + 1 ) objects = VLANGroupQuerySet.as_manager() @@ -84,9 +83,6 @@ class VLANGroup(OrganizationalModel): verbose_name = _('VLAN group') verbose_name_plural = _('VLAN groups') - def get_absolute_url(self): - return reverse('ipam:vlangroup', args=[self.pk]) - def clean(self): super().clean() @@ -96,17 +92,33 @@ class VLANGroup(OrganizationalModel): if self.scope_id and not self.scope_type: raise ValidationError(_("Cannot set scope_id without scope_type.")) - # Validate min/max child VID limits - if self.max_vid < self.min_vid: - raise ValidationError({ - 'max_vid': _("Maximum child VID must be greater than or equal to minimum child VID") - }) + # Validate VID ranges + if self.vid_ranges and check_ranges_overlap(self.vid_ranges): + raise ValidationError({'vid_ranges': _("Ranges cannot overlap.")}) + for vid_range in self.vid_ranges: + if vid_range.lower > vid_range.upper: + raise ValidationError({ + 'vid_ranges': _( + "Maximum child VID must be greater than or equal to minimum child VID ({value})" + ).format(value=vid_range) + }) + + def save(self, *args, **kwargs): + self._total_vlan_ids = 0 + for vid_range in self.vid_ranges: + self._total_vlan_ids += vid_range.upper - vid_range.lower + 1 + + super().save(*args, **kwargs) def get_available_vids(self): """ Return all available VLANs within this group. """ - available_vlans = {vid for vid in range(self.min_vid, self.max_vid + 1)} + available_vlans = set() + for vlan_range in self.vid_ranges: + available_vlans = available_vlans.union({ + vid for vid in range(vlan_range.lower, vlan_range.upper) + }) available_vlans -= set(VLAN.objects.filter(group=self).values_list('vid', flat=True)) return sorted(available_vlans) @@ -126,6 +138,10 @@ class VLANGroup(OrganizationalModel): """ return VLAN.objects.filter(group=self).order_by('vid') + @property + def vid_ranges_list(self): + return ranges_to_string(self.vid_ranges) + class VLAN(PrimaryModel): """ @@ -217,9 +233,6 @@ class VLAN(PrimaryModel): def __str__(self): return f'{self.name} ({self.vid})' - def get_absolute_url(self): - return reverse('ipam:vlan', args=[self.pk]) - def clean(self): super().clean() @@ -231,13 +244,14 @@ class VLAN(PrimaryModel): ).format(group=self.group, scope=self.group.scope, site=self.site) ) - # Validate group min/max VIDs - if self.group and not self.group.min_vid <= self.vid <= self.group.max_vid: - raise ValidationError({ - 'vid': _( - "VID must be between {minimum} and {maximum} for VLANs in group {group}" - ).format(minimum=self.group.min_vid, maximum=self.group.max_vid, group=self.group) - }) + # Check that the VLAN ID is permitted in the assigned group (if any) + if self.group: + if not any([self.vid in r for r in self.group.vid_ranges]): + raise ValidationError({ + 'vid': _( + "VID must be in ranges {ranges} for VLANs in group {group}" + ).format(ranges=ranges_to_string(self.group.vid_ranges), group=self.group) + }) def get_status_color(self): return VLANStatusChoices.colors.get(self.status) diff --git a/netbox/ipam/models/vrfs.py b/netbox/ipam/models/vrfs.py index 1f9b928f588..26afb7927ca 100644 --- a/netbox/ipam/models/vrfs.py +++ b/netbox/ipam/models/vrfs.py @@ -1,11 +1,9 @@ from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from ipam.constants import * from netbox.models import PrimaryModel - __all__ = ( 'RouteTarget', 'VRF', @@ -67,9 +65,6 @@ class VRF(PrimaryModel): return f'{self.name} ({self.rd})' return self.name - def get_absolute_url(self): - return reverse('ipam:vrf', args=[self.pk]) - class RouteTarget(PrimaryModel): """ @@ -96,6 +91,3 @@ class RouteTarget(PrimaryModel): def __str__(self): return self.name - - def get_absolute_url(self): - return reverse('ipam:routetarget', args=[self.pk]) diff --git a/netbox/ipam/querysets.py b/netbox/ipam/querysets.py index a3f37fe3ca6..771e9b3b9d4 100644 --- a/netbox/ipam/querysets.py +++ b/netbox/ipam/querysets.py @@ -9,6 +9,7 @@ from utilities.querysets import RestrictedQuerySet __all__ = ( 'ASNRangeQuerySet', 'PrefixQuerySet', + 'VLANGroupQuerySet', 'VLANQuerySet', ) @@ -63,7 +64,7 @@ class VLANGroupQuerySet(RestrictedQuerySet): return self.annotate( vlan_count=count_related(VLAN, 'group'), - utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2) + utilization=Round(F('vlan_count') * 100.0 / F('_total_vlan_ids'), 2) ) diff --git a/netbox/ipam/search.py b/netbox/ipam/search.py index a1cddbb1a8e..16a8eba3c51 100644 --- a/netbox/ipam/search.py +++ b/netbox/ipam/search.py @@ -19,6 +19,7 @@ class ASNIndex(SearchIndex): model = models.ASN fields = ( ('asn', 100), + ('prefixed_name', 110), ('description', 500), ) display_attrs = ('rir', 'tenant', 'description') @@ -28,6 +29,7 @@ class ASNIndex(SearchIndex): class ASNRangeIndex(SearchIndex): model = models.ASNRange fields = ( + ('name', 100), ('description', 500), ) display_attrs = ('rir', 'tenant', 'description') @@ -154,9 +156,8 @@ class VLANGroupIndex(SearchIndex): ('name', 100), ('slug', 110), ('description', 500), - ('max_vid', 2000), ) - display_attrs = ('scope_type', 'min_vid', 'max_vid', 'description') + display_attrs = ('scope_type', 'description') @register_search diff --git a/netbox/ipam/tables/ip.py b/netbox/ipam/tables/ip.py index 10dea3a9283..8ec7a596725 100644 --- a/netbox/ipam/tables/ip.py +++ b/netbox/ipam/tables/ip.py @@ -51,7 +51,7 @@ IPADDRESS_LINK = """ {% if record.pk %} {{ record.address }} {% elif perms.ipam.add_ipaddress %} - {% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available + {% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available {% else %} {% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available {% endif %} @@ -86,7 +86,8 @@ class RIRTable(NetBoxTable): linkify=True ) is_private = columns.BooleanColumn( - verbose_name=_('Private') + verbose_name=_('Private'), + false_mark=None ) aggregate_count = columns.LinkedCountColumn( viewname='ipam:aggregate_list', @@ -258,10 +259,12 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): linkify=True ) is_pool = columns.BooleanColumn( - verbose_name=_('Pool') + verbose_name=_('Pool'), + false_mark=None ) mark_utilized = columns.BooleanColumn( - verbose_name=_('Marked Utilized') + verbose_name=_('Marked Utilized'), + false_mark=None ) utilization = PrefixUtilizationColumn( verbose_name=_('Utilization'), @@ -314,7 +317,8 @@ class IPRangeTable(TenancyColumnsMixin, NetBoxTable): linkify=True ) mark_utilized = columns.BooleanColumn( - verbose_name=_('Marked Utilized') + verbose_name=_('Marked Utilized'), + false_mark=None ) utilization = columns.UtilizationColumn( verbose_name=_('Utilization'), @@ -386,7 +390,8 @@ class IPAddressTable(TenancyColumnsMixin, NetBoxTable): assigned = columns.BooleanColumn( accessor='assigned_object_id', linkify=lambda record: record.assigned_object.get_absolute_url(), - verbose_name=_('Assigned') + verbose_name=_('Assigned'), + false_mark=None ) comments = columns.MarkdownColumn( verbose_name=_('Comments'), diff --git a/netbox/ipam/tables/vlans.py b/netbox/ipam/tables/vlans.py index 11de0381c4b..5387ce24ce8 100644 --- a/netbox/ipam/tables/vlans.py +++ b/netbox/ipam/tables/vlans.py @@ -72,6 +72,10 @@ class VLANGroupTable(NetBoxTable): linkify=True, orderable=False ) + vid_ranges_list = tables.Column( + verbose_name=_('VID Ranges'), + orderable=False + ) vlan_count = columns.LinkedCountColumn( viewname='ipam:vlan_list', url_params={'group_id': 'pk'}, @@ -91,7 +95,7 @@ class VLANGroupTable(NetBoxTable): class Meta(NetBoxTable.Meta): model = VLANGroup fields = ( - 'pk', 'id', 'name', 'scope_type', 'scope', 'min_vid', 'max_vid', 'vlan_count', 'slug', 'description', + 'pk', 'id', 'name', 'scope_type', 'scope', 'vid_ranges_list', 'vlan_count', 'slug', 'description', 'tags', 'created', 'last_updated', 'actions', 'utilization', ) default_columns = ('pk', 'name', 'scope_type', 'scope', 'vlan_count', 'utilization', 'description') @@ -211,6 +215,7 @@ class InterfaceVLANTable(NetBoxTable): ) tagged = columns.BooleanColumn( verbose_name=_('Tagged'), + false_mark=None ) site = tables.Column( verbose_name=_('Site'), diff --git a/netbox/ipam/tables/vrfs.py b/netbox/ipam/tables/vrfs.py index 174b9918951..5fd9cbfb610 100644 --- a/netbox/ipam/tables/vrfs.py +++ b/netbox/ipam/tables/vrfs.py @@ -30,7 +30,8 @@ class VRFTable(TenancyColumnsMixin, NetBoxTable): verbose_name=_('RD') ) enforce_unique = columns.BooleanColumn( - verbose_name=_('Unique') + verbose_name=_('Unique'), + false_mark=None ) import_targets = columns.TemplateColumn( verbose_name=_('Import Targets'), diff --git a/netbox/ipam/tests/test_api.py b/netbox/ipam/tests/test_api.py index 2cf7a2f1c80..1d2cdf1b714 100644 --- a/netbox/ipam/tests/test_api.py +++ b/netbox/ipam/tests/test_api.py @@ -8,6 +8,7 @@ from dcim.models import Device, DeviceRole, DeviceType, Interface, Manufacturer, from ipam.choices import * from ipam.models import * from tenancy.models import Tenant +from utilities.data import string_to_ranges from utilities.testing import APITestCase, APIViewTestCases, create_test_device, disable_warnings @@ -699,8 +700,6 @@ class IPAddressTest(APIViewTestCases.APIViewTestCase): device1.primary_ip4 = ip_addresses[0] device1.save() - ip2 = ip_addresses[1] - url = reverse('ipam-api:ipaddress-detail', kwargs={'pk': ip1.pk}) self.add_permissions('ipam.change_ipaddress') @@ -767,6 +766,7 @@ class FHRPGroupAssignmentTest(APIViewTestCases.APIViewTestCase): bulk_update_data = { 'priority': 100, } + user_permissions = ('ipam.view_fhrpgroup', ) @classmethod def setUpTestData(cls): @@ -882,8 +882,7 @@ class VLANGroupTest(APIViewTestCases.APIViewTestCase): vlangroup = VLANGroup.objects.create( name='VLAN Group X', slug='vlan-group-x', - min_vid=MIN_VID, - max_vid=MAX_VID + vid_ranges=string_to_ranges(f"{MIN_VID}-{MAX_VID}") ) # Create a set of VLANs within the group diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py index 8f07a241a19..4e38b14503b 100644 --- a/netbox/ipam/tests/test_filtersets.py +++ b/netbox/ipam/tests/test_filtersets.py @@ -1,4 +1,5 @@ from django.contrib.contenttypes.models import ContentType +from django.db.backends.postgresql.psycopg_any import NumericRange from django.test import TestCase from netaddr import IPNetwork @@ -1465,6 +1466,7 @@ class FHRPGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests): class VLANGroupTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = VLANGroup.objects.all() filterset = VLANGroupFilterSet + ignore_fields = ('vid_ranges',) @classmethod def setUpTestData(cls): @@ -1494,14 +1496,55 @@ class VLANGroupTestCase(TestCase, ChangeLoggedFilterSetTests): cluster.save() vlan_groups = ( - VLANGroup(name='VLAN Group 1', slug='vlan-group-1', scope=region, description='foobar1'), - VLANGroup(name='VLAN Group 2', slug='vlan-group-2', scope=sitegroup, description='foobar2'), - VLANGroup(name='VLAN Group 3', slug='vlan-group-3', scope=site, description='foobar3'), - VLANGroup(name='VLAN Group 4', slug='vlan-group-4', scope=location), - VLANGroup(name='VLAN Group 5', slug='vlan-group-5', scope=rack), - VLANGroup(name='VLAN Group 6', slug='vlan-group-6', scope=clustergroup), - VLANGroup(name='VLAN Group 7', slug='vlan-group-7', scope=cluster), - VLANGroup(name='VLAN Group 8', slug='vlan-group-8'), + VLANGroup( + name='VLAN Group 1', + slug='vlan-group-1', + vid_ranges=[NumericRange(1, 11), NumericRange(100, 200)], + scope=region, + description='foobar1' + ), + VLANGroup( + name='VLAN Group 2', + slug='vlan-group-2', + vid_ranges=[NumericRange(1, 11), NumericRange(200, 300)], + scope=sitegroup, + description='foobar2' + ), + VLANGroup( + name='VLAN Group 3', + slug='vlan-group-3', + vid_ranges=[NumericRange(1, 11), NumericRange(300, 400)], + scope=site, + description='foobar3' + ), + VLANGroup( + name='VLAN Group 4', + slug='vlan-group-4', + vid_ranges=[NumericRange(1, 11), NumericRange(400, 500)], + scope=location + ), + VLANGroup( + name='VLAN Group 5', + slug='vlan-group-5', + vid_ranges=[NumericRange(1, 11), NumericRange(500, 600)], + scope=rack + ), + VLANGroup( + name='VLAN Group 6', + slug='vlan-group-6', + vid_ranges=[NumericRange(1, 11), NumericRange(600, 700)], + scope=clustergroup + ), + VLANGroup( + name='VLAN Group 7', + slug='vlan-group-7', + vid_ranges=[NumericRange(1, 11), NumericRange(700, 800)], + scope=cluster + ), + VLANGroup( + name='VLAN Group 8', + slug='vlan-group-8' + ), ) VLANGroup.objects.bulk_create(vlan_groups) @@ -1521,6 +1564,12 @@ class VLANGroupTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'description': ['foobar1', 'foobar2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_contains_vid(self): + params = {'contains_vid': 123} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'contains_vid': 1} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) + def test_region(self): params = {'region': Region.objects.first().pk} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) @@ -1609,6 +1658,13 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): ) Device.objects.bulk_create(devices) + interfaces = ( + Interface(device=devices[0], name='Interface 1', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[1], name='Interface 2', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[2], name='Interface 3', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + ) + Interface.objects.bulk_create(interfaces) + cluster_groups = ( ClusterGroup(name='Cluster Group 1', slug='cluster-group-1'), ClusterGroup(name='Cluster Group 2', slug='cluster-group-2'), @@ -1631,6 +1687,13 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): ) VirtualMachine.objects.bulk_create(virtual_machines) + vm_interfaces = ( + VMInterface(virtual_machine=virtual_machines[0], name='VM Interface 1'), + VMInterface(virtual_machine=virtual_machines[1], name='VM Interface 2'), + VMInterface(virtual_machine=virtual_machines[2], name='VM Interface 3'), + ) + VMInterface.objects.bulk_create(vm_interfaces) + groups = ( # Scoped VLAN groups VLANGroup(name='Region 1', slug='region-1', scope=regions[0]), @@ -1724,6 +1787,22 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): ) VLAN.objects.bulk_create(vlans) + # Assign VLANs to device interfaces + interfaces[0].untagged_vlan = vlans[0] + interfaces[0].tagged_vlans.add(vlans[1]) + interfaces[1].untagged_vlan = vlans[2] + interfaces[1].tagged_vlans.add(vlans[3]) + interfaces[2].untagged_vlan = vlans[4] + interfaces[2].tagged_vlans.add(vlans[5]) + + # Assign VLANs to VM interfaces + vm_interfaces[0].untagged_vlan = vlans[0] + vm_interfaces[0].tagged_vlans.add(vlans[1]) + vm_interfaces[1].untagged_vlan = vlans[2] + vm_interfaces[1].tagged_vlans.add(vlans[3]) + vm_interfaces[2].untagged_vlan = vlans[4] + vm_interfaces[2].tagged_vlans.add(vlans[5]) + def test_q(self): params = {'q': 'foobar1'} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) @@ -1808,6 +1887,16 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'available_at_site': site_id} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) # 4 scoped + 1 global group + 1 global + def test_interface(self): + interface_id = Interface.objects.first().pk + params = {'interface_id': interface_id} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_vminterface(self): + vminterface_id = VMInterface.objects.first().pk + params = {'vminterface_id': vminterface_id} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + class ServiceTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ServiceTemplate.objects.all() diff --git a/netbox/ipam/tests/test_models.py b/netbox/ipam/tests/test_models.py index d0f42e8a6bb..8a5d918a9f2 100644 --- a/netbox/ipam/tests/test_models.py +++ b/netbox/ipam/tests/test_models.py @@ -1,6 +1,7 @@ from django.core.exceptions import ValidationError from django.test import TestCase, override_settings from netaddr import IPNetwork, IPSet +from utilities.data import string_to_ranges from ipam.choices import * from ipam.models import * @@ -509,8 +510,7 @@ class TestVLANGroup(TestCase): vlangroup = VLANGroup.objects.create( name='VLAN Group 1', slug='vlan-group-1', - min_vid=100, - max_vid=199 + vid_ranges=string_to_ranges('100-199'), ) VLAN.objects.bulk_create(( VLAN(name='VLAN 100', vid=100, group=vlangroup), @@ -533,3 +533,27 @@ class TestVLANGroup(TestCase): VLAN.objects.create(name='VLAN 104', vid=104, group=vlangroup) self.assertEqual(vlangroup.get_next_available_vid(), 105) + + def test_vid_validation(self): + vlangroup = VLANGroup.objects.first() + + vlan = VLAN(vid=1, name='VLAN 1', group=vlangroup) + with self.assertRaises(ValidationError): + vlan.full_clean() + + vlan = VLAN(vid=109, name='VLAN 109', group=vlangroup) + vlan.full_clean() + + def test_overlapping_vlan(self): + vlangroup = VLANGroup( + name='VLAN Group 1', + slug='vlan-group-1', + vid_ranges=string_to_ranges('2-4,3-5'), + ) + with self.assertRaises(ValidationError): + vlangroup.full_clean() + + # make sure single vlan range works + vlangroup.vid_ranges = string_to_ranges('2-2') + vlangroup.full_clean() + vlangroup.save() diff --git a/netbox/ipam/tests/test_views.py b/netbox/ipam/tests/test_views.py index bc42341ba37..95b31187886 100644 --- a/netbox/ipam/tests/test_views.py +++ b/netbox/ipam/tests/test_views.py @@ -50,7 +50,7 @@ class ASNRangeTestCase(ViewTestCases.PrimaryObjectViewTestCase): } cls.csv_data = ( - f"name,slug,rir,tenant,start,end,description", + "name,slug,rir,tenant,start,end,description", f"ASN Range 4,asn-range-4,{rirs[1].name},{tenants[1].name},400,499,Fourth range", f"ASN Range 5,asn-range-5,{rirs[1].name},{tenants[1].name},500,599,Fifth range", f"ASN Range 6,asn-range-6,{rirs[1].name},{tenants[1].name},600,699,Sixth range", @@ -764,21 +764,20 @@ class VLANGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase): cls.form_data = { 'name': 'VLAN Group X', 'slug': 'vlan-group-x', - 'min_vid': 1, - 'max_vid': 4094, 'description': 'A new VLAN group', + 'vid_ranges': '100-199,300-399', 'tags': [t.pk for t in tags], } cls.csv_data = ( - f"name,slug,scope_type,scope_id,description", - f"VLAN Group 4,vlan-group-4,,,Fourth VLAN group", + "name,slug,scope_type,scope_id,description", + "VLAN Group 4,vlan-group-4,,,Fourth VLAN group", f"VLAN Group 5,vlan-group-5,dcim.site,{sites[0].pk},Fifth VLAN group", f"VLAN Group 6,vlan-group-6,dcim.site,{sites[1].pk},Sixth VLAN group", ) cls.csv_update_data = ( - f"id,name,description", + "id,name,description", f"{vlan_groups[0].pk},VLAN Group 7,Fourth VLAN group7", f"{vlan_groups[1].pk},VLAN Group 8,Fifth VLAN group8", f"{vlan_groups[2].pk},VLAN Group 9,Sixth VLAN group9", diff --git a/netbox/ipam/utils.py b/netbox/ipam/utils.py index 21b90fbcd46..3297abd8fb4 100644 --- a/netbox/ipam/utils.py +++ b/netbox/ipam/utils.py @@ -90,44 +90,58 @@ def add_available_ipaddresses(prefix, ipaddress_list, is_pool=False): return output -def add_available_vlans(vlans, vlan_group=None): +def available_vlans_from_range(vlans, vlan_group, vid_range): """ Create fake records for all gaps between used VLANs """ - min_vid = vlan_group.min_vid if vlan_group else VLAN_VID_MIN - max_vid = vlan_group.max_vid if vlan_group else VLAN_VID_MAX + min_vid = int(vid_range.lower) if vid_range else VLAN_VID_MIN + max_vid = int(vid_range.upper) if vid_range else VLAN_VID_MAX if not vlans: return [{ 'vid': min_vid, 'vlan_group': vlan_group, - 'available': max_vid - min_vid + 1 + 'available': max_vid - min_vid }] - prev_vid = max_vid + prev_vid = min_vid - 1 new_vlans = [] for vlan in vlans: + + # Ignore VIDs outside the range + if not min_vid <= vlan.vid < max_vid: + continue + + # Annotate any available VIDs between the previous (or minimum) VID + # and the current VID if vlan.vid - prev_vid > 1: new_vlans.append({ 'vid': prev_vid + 1, 'vlan_group': vlan_group, 'available': vlan.vid - prev_vid - 1, }) + prev_vid = vlan.vid - if vlans[0].vid > min_vid: - new_vlans.append({ - 'vid': min_vid, - 'vlan_group': vlan_group, - 'available': vlans[0].vid - min_vid, - }) + # Annotate any remaining available VLANs if prev_vid < max_vid: new_vlans.append({ 'vid': prev_vid + 1, 'vlan_group': vlan_group, - 'available': max_vid - prev_vid, + 'available': max_vid - prev_vid - 1, }) + return new_vlans + + +def add_available_vlans(vlans, vlan_group): + """ + Create fake records for all gaps between used VLANs + """ + new_vlans = [] + for vid_range in vlan_group.vid_ranges: + new_vlans.extend(available_vlans_from_range(vlans, vlan_group, vid_range)) + vlans = list(vlans) + new_vlans vlans.sort(key=lambda v: v.vid if type(v) is VLAN else v['vid']) diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 12c86c53315..67d56f15e77 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -7,6 +7,7 @@ from django.utils.translation import gettext as _ from circuits.models import Provider from dcim.filtersets import InterfaceFilterSet +from dcim.forms import InterfaceFilterForm from dcim.models import Interface, Site from netbox.views import generic from tenancy.views import ObjectContactsView @@ -14,6 +15,7 @@ from utilities.query import count_related from utilities.tables import get_table_ordering from utilities.views import GetRelatedModelsMixin, ViewTab, register_model_view from virtualization.filtersets import VMInterfaceFilterSet +from virtualization.forms import VMInterfaceFilterForm from virtualization.models import VMInterface from . import filtersets, forms, tables from .choices import PrefixStatusChoices @@ -206,6 +208,7 @@ class ASNRangeASNsView(generic.ObjectChildrenView): child_model = ASN table = tables.ASNTable filterset = filtersets.ASNFilterSet + filterset_form = forms.ASNFilterForm tab = ViewTab( label=_('ASNs'), badge=lambda x: x.get_child_asns().count(), @@ -337,6 +340,7 @@ class AggregatePrefixesView(generic.ObjectChildrenView): child_model = Prefix table = tables.PrefixTable filterset = filtersets.PrefixFilterSet + filterset_form = forms.PrefixFilterForm template_name = 'ipam/aggregate/prefixes.html' tab = ViewTab( label=_('Prefixes'), @@ -523,6 +527,7 @@ class PrefixPrefixesView(generic.ObjectChildrenView): child_model = Prefix table = tables.PrefixTable filterset = filtersets.PrefixFilterSet + filterset_form = forms.PrefixFilterForm template_name = 'ipam/prefix/prefixes.html' tab = ViewTab( label=_('Child Prefixes'), @@ -558,6 +563,7 @@ class PrefixIPRangesView(generic.ObjectChildrenView): child_model = IPRange table = tables.IPRangeTable filterset = filtersets.IPRangeFilterSet + filterset_form = forms.IPRangeFilterForm template_name = 'ipam/prefix/ip_ranges.html' tab = ViewTab( label=_('Child Ranges'), @@ -584,6 +590,7 @@ class PrefixIPAddressesView(generic.ObjectChildrenView): child_model = IPAddress table = tables.IPAddressTable filterset = filtersets.IPAddressFilterSet + filterset_form = forms.IPAddressFilterForm template_name = 'ipam/prefix/ip_addresses.html' tab = ViewTab( label=_('IP Addresses'), @@ -683,6 +690,7 @@ class IPRangeIPAddressesView(generic.ObjectChildrenView): child_model = IPAddress table = tables.IPAddressTable filterset = filtersets.IPAddressFilterSet + filterset_form = forms.IPRangeFilterForm template_name = 'ipam/iprange/ip_addresses.html' tab = ViewTab( label=_('IP Addresses'), @@ -885,6 +893,7 @@ class IPAddressRelatedIPsView(generic.ObjectChildrenView): child_model = IPAddress table = tables.IPAddressTable filterset = filtersets.IPAddressFilterSet + filterset_form = forms.IPAddressFilterForm tab = ViewTab( label=_('Related IPs'), badge=lambda x: x.get_related_ips().count(), @@ -906,7 +915,7 @@ class IPAddressContactsView(ObjectContactsView): # class VLANGroupListView(generic.ObjectListView): - queryset = VLANGroup.objects.annotate_utilization().prefetch_related('tags') + queryset = VLANGroup.objects.annotate_utilization() filterset = filtersets.VLANGroupFilterSet filterset_form = forms.VLANGroupFilterForm table = tables.VLANGroupTable @@ -914,7 +923,7 @@ class VLANGroupListView(generic.ObjectListView): @register_model_view(VLANGroup) class VLANGroupView(GetRelatedModelsMixin, generic.ObjectView): - queryset = VLANGroup.objects.annotate_utilization().prefetch_related('tags') + queryset = VLANGroup.objects.annotate_utilization() def get_extra_context(self, request, instance): return { @@ -957,6 +966,7 @@ class VLANGroupVLANsView(generic.ObjectChildrenView): child_model = VLAN table = tables.VLANTable filterset = filtersets.VLANFilterSet + filterset_form = forms.VLANFilterForm tab = ViewTab( label=_('VLANs'), badge=lambda x: x.get_child_vlans().count(), @@ -1112,6 +1122,7 @@ class VLANInterfacesView(generic.ObjectChildrenView): child_model = Interface table = tables.VLANDevicesTable filterset = InterfaceFilterSet + filterset_form = InterfaceFilterForm tab = ViewTab( label=_('Device Interfaces'), badge=lambda x: x.get_interfaces().count(), @@ -1129,6 +1140,7 @@ class VLANVMInterfacesView(generic.ObjectChildrenView): child_model = VMInterface table = tables.VLANVirtualMachinesTable filterset = VMInterfaceFilterSet + filterset_form = VMInterfaceFilterForm tab = ViewTab( label=_('VM Interfaces'), badge=lambda x: x.get_vminterfaces().count(), diff --git a/netbox/netbox/admin.py b/netbox/netbox/admin.py deleted file mode 100644 index cdfacc1418a..00000000000 --- a/netbox/netbox/admin.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.conf import settings -from django.contrib.admin import site as admin_site -from taggit.models import Tag - - -# Override default AdminSite attributes so we can avoid creating and -# registering our own class -admin_site.site_header = 'NetBox Administration' -admin_site.site_title = 'NetBox' -admin_site.site_url = '/{}'.format(settings.BASE_PATH) -admin_site.index_template = 'admin/index.html' - -# Unregister the unused stock Tag model provided by django-taggit -admin_site.unregister(Tag) diff --git a/netbox/netbox/api/fields.py b/netbox/netbox/api/fields.py index 08ffd0bc45d..e7d1ef5745b 100644 --- a/netbox/netbox/api/fields.py +++ b/netbox/netbox/api/fields.py @@ -1,4 +1,5 @@ from django.core.exceptions import ObjectDoesNotExist +from django.db.backends.postgresql.psycopg_any import NumericRange from django.utils.translation import gettext as _ from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema_field @@ -11,6 +12,7 @@ __all__ = ( 'ChoiceField', 'ContentTypeField', 'IPNetworkSerializer', + 'IntegerRangeSerializer', 'RelatedObjectCountField', 'SerializedPKRelatedField', ) @@ -154,3 +156,19 @@ class RelatedObjectCountField(serializers.ReadOnlyField): self.relation = relation super().__init__(**kwargs) + + +class IntegerRangeSerializer(serializers.Serializer): + """ + Represents a range of integers. + """ + def to_internal_value(self, data): + if not isinstance(data, (list, tuple)) or len(data) != 2: + raise ValidationError(_("Ranges must be specified in the form (lower, upper).")) + if type(data[0]) is not int or type(data[1]) is not int: + raise ValidationError(_("Range boundaries must be defined as integers.")) + + return NumericRange(data[0], data[1], bounds='[]') + + def to_representation(self, instance): + return instance.lower, instance.upper - 1 diff --git a/netbox/netbox/api/serializers/fields.py b/netbox/netbox/api/serializers/fields.py index 4fee3604376..74782bddfcf 100644 --- a/netbox/netbox/api/serializers/fields.py +++ b/netbox/netbox/api/serializers/fields.py @@ -1,5 +1,8 @@ +from django.utils.translation import gettext_lazy as _ from rest_framework import serializers +from utilities.views import get_viewname + __all__ = ( 'NetBoxAPIHyperlinkedIdentityField', 'NetBoxURLHyperlinkedIdentityField', @@ -30,12 +33,10 @@ class BaseNetBoxHyperlinkedIdentityField(serializers.HyperlinkedIdentityField): lookup_value = getattr(obj, self.lookup_field) kwargs = {self.lookup_url_kwarg: lookup_value} - model_name = self.parent.Meta.model._meta.model_name - app_name = self.parent.Meta.model._meta.app_label - view_name = self.get_view_name(app_name, model_name) + view_name = self.get_view_name(obj) return self.reverse(view_name, kwargs=kwargs, request=request, format=format) - def get_view_name(self, app_name, model_name): + def get_view_name(self, model): raise NotImplementedError(_('{class_name} must implement get_view_name()').format( class_name=self.__class__.__name__ )) @@ -43,11 +44,11 @@ class BaseNetBoxHyperlinkedIdentityField(serializers.HyperlinkedIdentityField): class NetBoxAPIHyperlinkedIdentityField(BaseNetBoxHyperlinkedIdentityField): - def get_view_name(self, app_name, model_name): - return f'{app_name}-api:{model_name}-detail' + def get_view_name(self, model): + return get_viewname(model=model, action='detail', rest_api=True) class NetBoxURLHyperlinkedIdentityField(BaseNetBoxHyperlinkedIdentityField): - def get_view_name(self, app_name, model_name): - return f'{app_name}:{model_name}' + def get_view_name(self, model): + return get_viewname(model=model) diff --git a/netbox/netbox/api/serializers/nested.py b/netbox/netbox/api/serializers/nested.py index af4ae35cbed..4a5fc621452 100644 --- a/netbox/netbox/api/serializers/nested.py +++ b/netbox/netbox/api/serializers/nested.py @@ -1,5 +1,3 @@ -from rest_framework import serializers - from extras.models import Tag from utilities.api import get_related_object_by_attrs from .base import BaseModelSerializer @@ -21,7 +19,7 @@ class WritableNestedSerializer(BaseModelSerializer): return get_related_object_by_attrs(queryset, data) -# Declared here for use by PrimaryModelSerializer, but should be imported from extras.api.nested_serializers +# Declared here for use by PrimaryModelSerializer class NestedTagSerializer(WritableNestedSerializer): class Meta: diff --git a/netbox/netbox/authentication/__init__.py b/netbox/netbox/authentication/__init__.py index 55fd91d4d56..f80454f9998 100644 --- a/netbox/netbox/authentication/__init__.py +++ b/netbox/netbox/authentication/__init__.py @@ -2,7 +2,6 @@ import logging from collections import defaultdict from django.conf import settings -from django.contrib.auth import get_user_model from django.contrib.auth.backends import ModelBackend, RemoteUserBackend as _RemoteUserBackend from django.contrib.auth.models import AnonymousUser from django.core.exceptions import ImproperlyConfigured @@ -10,23 +9,21 @@ from django.db.models import Q from django.utils.translation import gettext_lazy as _ from users.constants import CONSTRAINT_TOKEN_USER -from users.models import Group, ObjectPermission +from users.models import Group, ObjectPermission, User from utilities.permissions import ( permission_is_exempt, qs_filter_from_constraints, resolve_permission, resolve_permission_type, ) from .misc import _mirror_groups -UserModel = get_user_model() - AUTH_BACKEND_ATTRS = { # backend name: title, MDI icon name 'amazon': ('Amazon AWS', 'aws'), 'apple': ('Apple', 'apple'), 'auth0': ('Auth0', None), - 'azuread-oauth2': ('Microsoft Azure AD', 'microsoft'), - 'azuread-b2c-oauth2': ('Microsoft Azure AD', 'microsoft'), - 'azuread-tenant-oauth2': ('Microsoft Azure AD', 'microsoft'), - 'azuread-v2-tenant-oauth2': ('Microsoft Azure AD', 'microsoft'), + 'entraid-oauth2': ('Microsoft Entra ID', 'microsoft'), + 'entraid-b2c-oauth2': ('Microsoft Entra ID', 'microsoft'), + 'entraid-tenant-oauth2': ('Microsoft Entra ID', 'microsoft'), + 'entraid-v2-tenant-oauth2': ('Microsoft Entra ID', 'microsoft'), 'bitbucket': ('BitBucket', 'bitbucket'), 'bitbucket-oauth2': ('BitBucket', 'bitbucket'), 'digitalocean': ('DigitalOcean', 'digital-ocean'), @@ -49,12 +46,15 @@ AUTH_BACKEND_ATTRS = { 'okta-openidconnect': ('Okta (OIDC)', None), 'salesforce-oauth2': ('Salesforce', 'salesforce'), } +# Override with potential user configuration +AUTH_BACKEND_ATTRS.update(getattr(settings, 'SOCIAL_AUTH_BACKEND_ATTRS', {})) def get_auth_backend_display(name): """ - Return the user-friendly name and icon name for a remote authentication backend, if known. Defaults to the - raw backend name and no icon. + Return the user-friendly name and icon name for a remote authentication backend, if + known. Obtained from the defaults dictionary AUTH_BACKEND_ATTRS, overridden by the + setting `SOCIAL_AUTH_BACKEND_ATTRS`. Defaults to the raw backend name and no icon. """ return AUTH_BACKEND_ATTRS.get(name, (name, None)) @@ -215,15 +215,15 @@ class RemoteUserBackend(_RemoteUserBackend): # instead we use get_or_create when creating unknown users since it has # built-in safeguards for multiple threads. if self.create_unknown_user: - user, created = UserModel._default_manager.get_or_create(**{ - UserModel.USERNAME_FIELD: username + user, created = User._default_manager.get_or_create(**{ + User.USERNAME_FIELD: username }) if created: user = self.configure_user(request, user) else: try: - user = UserModel._default_manager.get_by_natural_key(username) - except UserModel.DoesNotExist: + user = User._default_manager.get_by_natural_key(username) + except User.DoesNotExist: pass if self.user_can_authenticate(user): if settings.REMOTE_AUTH_GROUP_SYNC_ENABLED: diff --git a/netbox/netbox/choices.py b/netbox/netbox/choices.py index fe941056fc0..5c3110745ff 100644 --- a/netbox/netbox/choices.py +++ b/netbox/netbox/choices.py @@ -7,8 +7,10 @@ __all__ = ( 'ButtonColorChoices', 'ColorChoices', 'CSVDelimiterChoices', + 'DistanceUnitChoices', 'ImportFormatChoices', 'ImportMethodChoices', + 'WeightUnitChoices', ) @@ -81,10 +83,7 @@ class ColorChoices(ChoiceSet): # class ButtonColorChoices(ChoiceSet): - """ - Map standard button color choices to Bootstrap 3 button classes - """ - DEFAULT = 'outline-dark' + DEFAULT = 'default' BLUE = 'blue' INDIGO = 'indigo' PURPLE = 'purple' @@ -160,3 +159,39 @@ class CSVDelimiterChoices(ChoiceSet): (SEMICOLON, _('Semicolon')), (TAB, _('Tab')), ] + + +class DistanceUnitChoices(ChoiceSet): + + # Metric + UNIT_KILOMETER = 'km' + UNIT_METER = 'm' + + # Imperial + UNIT_MILE = 'mi' + UNIT_FOOT = 'ft' + + CHOICES = ( + (UNIT_KILOMETER, _('Kilometers')), + (UNIT_METER, _('Meters')), + (UNIT_MILE, _('Miles')), + (UNIT_FOOT, _('Feet')), + ) + + +class WeightUnitChoices(ChoiceSet): + + # Metric + UNIT_KILOGRAM = 'kg' + UNIT_GRAM = 'g' + + # Imperial + UNIT_POUND = 'lb' + UNIT_OUNCE = 'oz' + + CHOICES = ( + (UNIT_KILOGRAM, _('Kilograms')), + (UNIT_GRAM, _('Grams')), + (UNIT_POUND, _('Pounds')), + (UNIT_OUNCE, _('Ounces')), + ) diff --git a/netbox/netbox/config/__init__.py b/netbox/netbox/config/__init__.py index 1c16d6769a9..23108f1d28c 100644 --- a/netbox/netbox/config/__init__.py +++ b/netbox/netbox/config/__init__.py @@ -85,7 +85,7 @@ class Config: logger.debug("Loaded configuration data from database") except DatabaseError: # The database may not be available yet (e.g. when running a management command) - logger.warning(f"Skipping config initialization (database unavailable)") + logger.warning("Skipping config initialization (database unavailable)") return revision.activate() diff --git a/netbox/netbox/configuration_testing.py b/netbox/netbox/configuration_testing.py index 346cd89d20f..cec05cabbf6 100644 --- a/netbox/netbox/configuration_testing.py +++ b/netbox/netbox/configuration_testing.py @@ -39,8 +39,6 @@ REDIS = { SECRET_KEY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' -DJANGO_ADMIN_ENABLED = True - DEFAULT_PERMISSIONS = {} LOGGING = { diff --git a/netbox/netbox/constants.py b/netbox/netbox/constants.py index e797f4f295e..b8c679ec04a 100644 --- a/netbox/netbox/constants.py +++ b/netbox/netbox/constants.py @@ -1,7 +1,3 @@ -# Prefix for nested serializers -# TODO: Remove in v4.1 -NESTED_SERIALIZER_PREFIX = 'Nested' - # RQ queue names RQ_QUEUE_DEFAULT = 'default' RQ_QUEUE_HIGH = 'high' @@ -27,6 +23,9 @@ ADVISORY_LOCK_KEYS = { 'wirelesslangroup': 105600, 'inventoryitem': 105700, 'inventoryitemtemplate': 105800, + + # Jobs + 'job-schedules': 110100, } # Default view action permission mapping diff --git a/netbox/netbox/data_backends.py b/netbox/netbox/data_backends.py index d5bab75c1a8..e3a3de4d17f 100644 --- a/netbox/netbox/data_backends.py +++ b/netbox/netbox/data_backends.py @@ -50,4 +50,4 @@ class DataBackend: 2. Yields the local path at which data has been replicated 3. Performs any necessary cleanup """ - raise NotImplemented() + raise NotImplementedError() diff --git a/netbox/netbox/events.py b/netbox/netbox/events.py new file mode 100644 index 00000000000..e48c3281512 --- /dev/null +++ b/netbox/netbox/events.py @@ -0,0 +1,79 @@ +from dataclasses import dataclass + +from netbox.registry import registry + +EVENT_TYPE_KIND_INFO = 'info' +EVENT_TYPE_KIND_SUCCESS = 'success' +EVENT_TYPE_KIND_WARNING = 'warning' +EVENT_TYPE_KIND_DANGER = 'danger' + +__all__ = ( + 'EVENT_TYPE_KIND_DANGER', + 'EVENT_TYPE_KIND_INFO', + 'EVENT_TYPE_KIND_SUCCESS', + 'EVENT_TYPE_KIND_WARNING', + 'EventType', + 'get_event_type', + 'get_event_type_choices', + 'get_event_text', +) + + +def get_event_type(name): + return registry['event_types'].get(name) + + +def get_event_text(name): + if event := registry['event_types'].get(name): + return event.text + return '' + + +def get_event_type_choices(): + return [ + (event.name, event.text) for event in registry['event_types'].values() + ] + + +@dataclass +class EventType: + """ + A type of event which can occur in NetBox. Event rules can be defined to automatically + perform some action in response to an event. + + Args: + name: The unique name under which the event is registered. + text: The human-friendly event name. This should support translation. + kind: The event's classification (info, success, warning, or danger). The default type is info. + destructive: Indicates that the associated object was destroyed as a result of the event (default: False). + """ + name: str + text: str + kind: str = EVENT_TYPE_KIND_INFO + destructive: bool = False + + def __str__(self): + return self.text + + def register(self): + if self.name in registry['event_types']: + raise Exception(f"An event type named {self.name} has already been registered!") + registry['event_types'][self.name] = self + + @property + def color(self): + return { + EVENT_TYPE_KIND_INFO: 'blue', + EVENT_TYPE_KIND_SUCCESS: 'green', + EVENT_TYPE_KIND_WARNING: 'orange', + EVENT_TYPE_KIND_DANGER: 'red', + }.get(self.kind) + + @property + def icon(self): + return { + EVENT_TYPE_KIND_INFO: 'mdi mdi-information', + EVENT_TYPE_KIND_SUCCESS: 'mdi mdi-check-circle', + EVENT_TYPE_KIND_WARNING: 'mdi mdi-alert-box', + EVENT_TYPE_KIND_DANGER: 'mdi mdi-alert-octagon', + }.get(self.kind) diff --git a/netbox/netbox/filtersets.py b/netbox/netbox/filtersets.py index ac43fe57f44..637a40bf114 100644 --- a/netbox/netbox/filtersets.py +++ b/netbox/netbox/filtersets.py @@ -133,7 +133,7 @@ class BaseFilterSet(django_filters.FilterSet): django_filters.ModelChoiceFilter, django_filters.ModelMultipleChoiceFilter, TagFilter - )) or existing_filter.extra.get('choices'): + )): # These filter types support only negation return FILTER_NEGATION_LOOKUP_MAP @@ -172,6 +172,7 @@ class BaseFilterSet(django_filters.FilterSet): # Create new filters for each lookup expression in the map for lookup_name, lookup_expr in lookup_map.items(): new_filter_name = f'{existing_filter_name}__{lookup_name}' + existing_filter_extra = deepcopy(existing_filter.extra) try: if existing_filter_name in cls.declared_filters: @@ -179,14 +180,18 @@ class BaseFilterSet(django_filters.FilterSet): # create the new filter with the same type because there is no guarantee the defined type # is the same as the default type for the field resolve_field(field, lookup_expr) # Will raise FieldLookupError if the lookup is invalid - filter_cls = django_filters.BooleanFilter if lookup_expr == 'empty' else type(existing_filter) + filter_cls = type(existing_filter) + if lookup_expr == 'empty': + filter_cls = django_filters.BooleanFilter + for param_to_remove in ('choices', 'null_value'): + existing_filter_extra.pop(param_to_remove, None) new_filter = filter_cls( field_name=field_name, lookup_expr=lookup_expr, label=existing_filter.label, exclude=existing_filter.exclude, distinct=existing_filter.distinct, - **existing_filter.extra + **existing_filter_extra ) elif hasattr(existing_filter, 'custom_field'): # Filter is for a custom field diff --git a/netbox/netbox/forms/__init__.py b/netbox/netbox/forms/__init__.py index fa82689a5de..f88fb18bc92 100644 --- a/netbox/netbox/forms/__init__.py +++ b/netbox/netbox/forms/__init__.py @@ -1,7 +1,7 @@ import re from django import forms -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from netbox.search import LookupTypes from netbox.search.backends import search_backend @@ -36,7 +36,8 @@ class SearchForm(forms.Form): lookup = forms.ChoiceField( choices=LOOKUP_CHOICES, initial=LookupTypes.PARTIAL, - required=False + required=False, + label=_('Lookup') ) def __init__(self, *args, **kwargs): diff --git a/netbox/netbox/forms/base.py b/netbox/netbox/forms/base.py index d59f61ef9b9..74ac4b0e005 100644 --- a/netbox/netbox/forms/base.py +++ b/netbox/netbox/forms/base.py @@ -60,6 +60,8 @@ class NetBoxModelForm(CheckLastUpdatedMixin, CustomFieldsMixin, TagsMixin, forms if value in self.fields[cf_name].empty_values: self.instance.custom_field_data[key] = None else: + if customfield.type == CustomFieldTypeChoices.TYPE_JSON and type(value) is str: + value = json.loads(value) self.instance.custom_field_data[key] = customfield.serialize(value) return super().clean() diff --git a/netbox/netbox/graphql/filter_mixins.py b/netbox/netbox/graphql/filter_mixins.py index 5075e9aa282..2044a1ddeeb 100644 --- a/netbox/netbox/graphql/filter_mixins.py +++ b/netbox/netbox/graphql/filter_mixins.py @@ -1,4 +1,4 @@ -from functools import partial, partialmethod, wraps +from functools import partialmethod from typing import List import django_filters @@ -6,6 +6,7 @@ import strawberry import strawberry_django from django.core.exceptions import FieldDoesNotExist from strawberry import auto + from ipam.fields import ASNField from netbox.graphql.scalars import BigInt from utilities.fields import ColorField, CounterCacheField @@ -47,7 +48,7 @@ def map_strawberry_type(field): pass elif isinstance(field, NumericArrayFilter): should_create_function = True - attr_type = int + attr_type = int | None elif isinstance(field, TreeNodeMultipleChoiceFilter): should_create_function = True attr_type = List[str] | None @@ -108,8 +109,7 @@ def map_strawberry_type(field): elif issubclass(type(field), django_filters.TypedMultipleChoiceFilter): pass elif issubclass(type(field), django_filters.MultipleChoiceFilter): - should_create_function = True - attr_type = List[str] | None + attr_type = str | None elif issubclass(type(field), django_filters.TypedChoiceFilter): pass elif issubclass(type(field), django_filters.ChoiceFilter): @@ -201,4 +201,9 @@ def autotype_decorator(filterset): class BaseFilterMixin: def filter_by_filterset(self, queryset, key): - return self.filterset(data={key: getattr(self, key)}, queryset=queryset).qs + filterset = self.filterset(data={key: getattr(self, key)}, queryset=queryset) + if not filterset.is_valid(): + # We could raise validation error but strawberry logs it all to the + # console i.e. raise ValidationError(f"{k}: {v[0]}") + return filterset.qs.none() + return filterset.qs diff --git a/netbox/netbox/graphql/schema.py b/netbox/netbox/graphql/schema.py index 2b4c83405bb..a7609c9d206 100644 --- a/netbox/netbox/graphql/schema.py +++ b/netbox/netbox/graphql/schema.py @@ -1,5 +1,7 @@ import strawberry +from django.conf import settings from strawberry_django.optimizer import DjangoOptimizerExtension +from strawberry.extensions import MaxAliasesLimiter from strawberry.schema.config import StrawberryConfig from circuits.graphql.schema import CircuitsQuery @@ -36,6 +38,7 @@ schema = strawberry.Schema( query=Query, config=StrawberryConfig(auto_camel_case=False), extensions=[ - DjangoOptimizerExtension, + DjangoOptimizerExtension(prefetch_custom_queryset=True), + MaxAliasesLimiter(max_alias_count=settings.GRAPHQL_MAX_ALIASES), ] ) diff --git a/netbox/netbox/graphql/views.py b/netbox/netbox/graphql/views.py index b347d71b42a..85a01f02501 100644 --- a/netbox/netbox/graphql/views.py +++ b/netbox/netbox/graphql/views.py @@ -1,10 +1,6 @@ -import json - from django.conf import settings from django.contrib.auth.views import redirect_to_login from django.http import HttpResponseNotFound, HttpResponseForbidden -from django.http import HttpResponse -from django.template import loader from django.urls import reverse from django.views.decorators.csrf import csrf_exempt from rest_framework.exceptions import AuthenticationFailed @@ -46,9 +42,3 @@ class NetBoxGraphQLView(GraphQLView): return HttpResponseForbidden("No credentials provided.") return super().dispatch(request, *args, **kwargs) - - def render_graphql_ide(self, request): - template = loader.get_template("graphiql.html") - context = {"SUBSCRIPTION_ENABLED": json.dumps(self.subscriptions_enabled)} - - return HttpResponse(template.render(context, request)) diff --git a/netbox/netbox/jobs.py b/netbox/netbox/jobs.py new file mode 100644 index 00000000000..087c2489687 --- /dev/null +++ b/netbox/netbox/jobs.py @@ -0,0 +1,134 @@ +import logging +from abc import ABC, abstractmethod +from datetime import timedelta + +from django.utils.functional import classproperty +from django_pglocks import advisory_lock +from rq.timeouts import JobTimeoutException + +from core.choices import JobStatusChoices +from core.models import Job, ObjectType +from netbox.constants import ADVISORY_LOCK_KEYS + +__all__ = ( + 'JobRunner', +) + + +class JobRunner(ABC): + """ + Background Job helper class. + + This class handles the execution of a background job. It is responsible for maintaining its state, reporting errors, + and scheduling recurring jobs. + """ + + class Meta: + pass + + def __init__(self, job): + """ + Args: + job: The specific `Job` this `JobRunner` is executing. + """ + self.job = job + + @classproperty + def name(cls): + return getattr(cls.Meta, 'name', cls.__name__) + + @abstractmethod + def run(self, *args, **kwargs): + """ + Run the job. + + A `JobRunner` class needs to implement this method to execute all commands of the job. + """ + pass + + @classmethod + def handle(cls, job, *args, **kwargs): + """ + Handle the execution of a `Job`. + + This method is called by the Job Scheduler to handle the execution of all job commands. It will maintain the + job's metadata and handle errors. For periodic jobs, a new job is automatically scheduled using its `interval`. + """ + try: + job.start() + cls(job).run(*args, **kwargs) + job.terminate() + + except Exception as e: + job.terminate(status=JobStatusChoices.STATUS_ERRORED, error=repr(e)) + if type(e) is JobTimeoutException: + logging.error(e) + + # If the executed job is a periodic job, schedule its next execution at the specified interval. + finally: + if job.interval: + new_scheduled_time = (job.scheduled or job.started) + timedelta(minutes=job.interval) + cls.enqueue( + instance=job.object, + user=job.user, + schedule_at=new_scheduled_time, + interval=job.interval, + **kwargs, + ) + + @classmethod + def get_jobs(cls, instance=None): + """ + Get all jobs of this `JobRunner` related to a specific instance. + """ + jobs = Job.objects.filter(name=cls.name) + + if instance: + object_type = ObjectType.objects.get_for_model(instance, for_concrete_model=False) + jobs = jobs.filter( + object_type=object_type, + object_id=instance.pk, + ) + + return jobs + + @classmethod + def enqueue(cls, *args, **kwargs): + """ + Enqueue a new `Job`. + + This method is a wrapper of `Job.enqueue()` using `handle()` as function callback. See its documentation for + parameters. + """ + name = kwargs.pop('name', None) or cls.name + return Job.enqueue(cls.handle, name=name, *args, **kwargs) + + @classmethod + @advisory_lock(ADVISORY_LOCK_KEYS['job-schedules']) + def enqueue_once(cls, instance=None, schedule_at=None, interval=None, *args, **kwargs): + """ + Enqueue a new `Job` once, i.e. skip duplicate jobs. + + Like `enqueue()`, this method adds a new `Job` to the job queue. However, if there's already a job of this + class scheduled for `instance`, the existing job will be updated if necessary. This ensures that a particular + schedule is only set up once at any given time, i.e. multiple calls to this method are idempotent. + + Note that this does not forbid running additional jobs with the `enqueue()` method, e.g. to schedule an + immediate synchronization job in addition to a periodic synchronization schedule. + + For additional parameters see `enqueue()`. + + Args: + instance: The NetBox object to which this job pertains (optional) + schedule_at: Schedule the job to be executed at the passed date and time + interval: Recurrence interval (in minutes) + """ + job = cls.get_jobs(instance).filter(status__in=JobStatusChoices.ENQUEUED_STATE_CHOICES).first() + if job: + # If the job parameters haven't changed, don't schedule a new job and keep the current schedule. Otherwise, + # delete the existing job and schedule a new job instead. + if (schedule_at and job.scheduled == schedule_at) and (job.interval == interval): + return job + job.delete() + + return cls.enqueue(instance=instance, schedule_at=schedule_at, interval=interval, *args, **kwargs) diff --git a/netbox/netbox/middleware.py b/netbox/netbox/middleware.py index 3d94734eee9..8012965a46f 100644 --- a/netbox/netbox/middleware.py +++ b/netbox/netbox/middleware.py @@ -36,6 +36,11 @@ class CoreMiddleware: with event_tracking(request): response = self.get_response(request) + # Check if language cookie should be renewed + if request.user.is_authenticated and settings.SESSION_SAVE_EVERY_REQUEST: + if language := request.user.config.get('locale.language'): + response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language, max_age=request.session.get_expiry_age()) + # Attach the unique request ID as an HTTP header. response['X-Request-ID'] = request.id diff --git a/netbox/netbox/models/__init__.py b/netbox/netbox/models/__init__.py index 2c262b25867..b1f7cfd4891 100644 --- a/netbox/netbox/models/__init__.py +++ b/netbox/netbox/models/__init__.py @@ -3,6 +3,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.core.exceptions import ObjectDoesNotExist from django.core.validators import ValidationError from django.db import models +from django.urls import reverse from django.utils.translation import gettext_lazy as _ from mptt.models import MPTTModel, TreeForeignKey @@ -29,6 +30,7 @@ class NetBoxFeatureSet( CustomValidationMixin, ExportTemplatesMixin, JournalingMixin, + NotificationsMixin, TagsMixin, EventRulesMixin ): @@ -39,6 +41,9 @@ class NetBoxFeatureSet( def docs_url(self): return f'{settings.STATIC_URL}docs/models/{self._meta.app_label}/{self._meta.model_name}/' + def get_absolute_url(self): + return reverse(f'{self._meta.app_label}:{self._meta.model_name}', args=[self.pk]) + # # Base model classes @@ -161,7 +166,7 @@ class NestedGroupModel(NetBoxFeatureSet, MPTTModel): super().clean() # An MPTT model cannot be its own parent - if self.pk and self.parent and self.parent in self.get_descendants(include_self=True): + if not self._state.adding and self.parent and self.parent in self.get_descendants(include_self=True): raise ValidationError({ "parent": "Cannot assign self or child {type} as parent.".format(type=self._meta.verbose_name) }) diff --git a/netbox/netbox/models/features.py b/netbox/netbox/models/features.py index 0393bf25dfd..a972277705c 100644 --- a/netbox/netbox/models/features.py +++ b/netbox/netbox/models/features.py @@ -34,6 +34,7 @@ __all__ = ( 'ImageAttachmentsMixin', 'JobsMixin', 'JournalingMixin', + 'NotificationsMixin', 'SyncedDataMixin', 'TagsMixin', 'register_models', @@ -287,8 +288,8 @@ class CustomFieldsMixin(models.Model): )) # Validate uniqueness if enforced - if custom_fields[field_name].validation_unique and value not in CUSTOMFIELD_EMPTY_VALUES: - if self._meta.model.objects.filter(**{ + if custom_fields[field_name].unique and value not in CUSTOMFIELD_EMPTY_VALUES: + if self._meta.model.objects.exclude(pk=self.pk).filter(**{ f'custom_field_data__{field_name}': value }).exists(): raise ValidationError(_("Custom field '{name}' must have a unique value.").format( @@ -377,6 +378,20 @@ class BookmarksMixin(models.Model): abstract = True +class NotificationsMixin(models.Model): + """ + Enables support for user notifications. + """ + subscriptions = GenericRelation( + to='extras.Subscription', + content_type_field='object_type', + object_id_field='object_id' + ) + + class Meta: + abstract = True + + class JobsMixin(models.Model): """ Enables support for job results. @@ -393,14 +408,9 @@ class JobsMixin(models.Model): def get_latest_jobs(self): """ - Return a dictionary mapping of the most recent jobs for this instance. + Return a list of the most recent jobs for this instance. """ - return { - job.name: job - for job in self.jobs.filter( - status__in=JobStatusChoices.TERMINAL_STATE_CHOICES - ).order_by('name', '-created').distinct('name').defer('data') - } + return self.jobs.filter(status__in=JobStatusChoices.TERMINAL_STATE_CHOICES).order_by('-created').defer('data') class JournalingMixin(models.Model): @@ -582,13 +592,14 @@ FEATURES_MAP = { 'custom_fields': CustomFieldsMixin, 'custom_links': CustomLinksMixin, 'custom_validation': CustomValidationMixin, + 'event_rules': EventRulesMixin, 'export_templates': ExportTemplatesMixin, 'image_attachments': ImageAttachmentsMixin, 'jobs': JobsMixin, 'journaling': JournalingMixin, + 'notifications': NotificationsMixin, 'synced_data': SyncedDataMixin, 'tags': TagsMixin, - 'event_rules': EventRulesMixin, } registry['model_features'].update({ diff --git a/netbox/netbox/models/mixins.py b/netbox/netbox/models/mixins.py new file mode 100644 index 00000000000..804e0b71ada --- /dev/null +++ b/netbox/netbox/models/mixins.py @@ -0,0 +1,97 @@ +from django.core.exceptions import ValidationError +from django.db import models +from django.utils.translation import gettext_lazy as _ +from netbox.choices import * +from utilities.conversion import to_grams, to_meters + +__all__ = ( + 'DistanceMixin', + 'WeightMixin', +) + + +class WeightMixin(models.Model): + weight = models.DecimalField( + verbose_name=_('weight'), + max_digits=8, + decimal_places=2, + blank=True, + null=True + ) + weight_unit = models.CharField( + verbose_name=_('weight unit'), + max_length=50, + choices=WeightUnitChoices, + blank=True, + ) + # Stores the normalized weight (in grams) for database ordering + _abs_weight = models.PositiveBigIntegerField( + blank=True, + null=True + ) + + class Meta: + abstract = True + + def save(self, *args, **kwargs): + + # Store the given weight (if any) in grams for use in database ordering + if self.weight and self.weight_unit: + self._abs_weight = to_grams(self.weight, self.weight_unit) + else: + self._abs_weight = None + + super().save(*args, **kwargs) + + def clean(self): + super().clean() + + # Validate weight and weight_unit + if self.weight and not self.weight_unit: + raise ValidationError(_("Must specify a unit when setting a weight")) + + +class DistanceMixin(models.Model): + distance = models.DecimalField( + verbose_name=_('distance'), + max_digits=8, + decimal_places=2, + blank=True, + null=True + ) + distance_unit = models.CharField( + verbose_name=_('distance unit'), + max_length=50, + choices=DistanceUnitChoices, + blank=True, + ) + # Stores the normalized distance (in meters) for database ordering + _abs_distance = models.DecimalField( + max_digits=10, + decimal_places=4, + blank=True, + null=True + ) + + class Meta: + abstract = True + + def save(self, *args, **kwargs): + # Store the given distance (if any) in meters for use in database ordering + if self.distance is not None and self.distance_unit: + self._abs_distance = to_meters(self.distance, self.distance_unit) + else: + self._abs_distance = None + + # Clear distance_unit if no distance is defined + if self.distance is None: + self.distance_unit = '' + + super().save(*args, **kwargs) + + def clean(self): + super().clean() + + # Validate distance and distance_unit + if self.distance and not self.distance_unit: + raise ValidationError(_("Must specify a unit when setting a distance")) diff --git a/netbox/netbox/navigation/menu.py b/netbox/netbox/navigation/menu.py index 6db7ac14ca8..9d8ffaaf897 100644 --- a/netbox/netbox/navigation/menu.py +++ b/netbox/netbox/navigation/menu.py @@ -20,19 +20,6 @@ ORGANIZATION_MENU = Menu( get_model_item('dcim', 'location', _('Locations')), ), ), - MenuGroup( - label=_('Racks'), - items=( - get_model_item('dcim', 'rack', _('Racks')), - get_model_item('dcim', 'rackrole', _('Rack Roles')), - get_model_item('dcim', 'rackreservation', _('Reservations')), - MenuItem( - link='dcim:rack_elevation_list', - link_text=_('Elevations'), - permissions=['dcim.view_rack'] - ), - ), - ), MenuGroup( label=_('Tenancy'), items=( @@ -52,6 +39,32 @@ ORGANIZATION_MENU = Menu( ), ) +RACKS_MENU = Menu( + label=_('Racks'), + icon_class='mdi mdi-door-sliding', + groups=( + MenuGroup( + label=_('Racks'), + items=( + get_model_item('dcim', 'rack', _('Racks')), + get_model_item('dcim', 'rackrole', _('Rack Roles')), + get_model_item('dcim', 'rackreservation', _('Reservations')), + MenuItem( + link='dcim:rack_elevation_list', + link_text=_('Elevations'), + permissions=['dcim.view_rack'] + ), + ), + ), + MenuGroup( + label=_('Rack Types'), + items=( + get_model_item('dcim', 'racktype', _('Rack Types')), + ), + ), + ), +) + DEVICES_MENU = Menu( label=_('Devices'), icon_class='mdi mdi-server', @@ -258,6 +271,8 @@ CIRCUITS_MENU = Menu( items=( get_model_item('circuits', 'circuit', _('Circuits')), get_model_item('circuits', 'circuittype', _('Circuit Types')), + get_model_item('circuits', 'circuitgroup', _('Circuit Groups')), + get_model_item('circuits', 'circuitgroupassignment', _('Group Assignments')), get_model_item('circuits', 'circuittermination', _('Circuit Terminations')), ), ), @@ -355,6 +370,7 @@ OPERATIONS_MENU = Menu( MenuGroup( label=_('Logging'), items=( + get_model_item('extras', 'notificationgroup', _('Notification Groups')), get_model_item('extras', 'journalentry', _('Journal Entries'), actions=['import']), get_model_item('core', 'objectchange', _('Change Log'), actions=[]), ), @@ -370,57 +386,57 @@ ADMIN_MENU = Menu( label=_('Authentication'), items=( MenuItem( - link=f'users:user_list', + link='users:user_list', link_text=_('Users'), auth_required=True, - permissions=[f'users.view_user'], + permissions=['users.view_user'], buttons=( MenuItemButton( - link=f'users:user_add', + link='users:user_add', title='Add', icon_class='mdi mdi-plus-thick', - permissions=[f'users.add_user'] + permissions=['users.add_user'] ), MenuItemButton( - link=f'users:user_import', + link='users:user_import', title='Import', icon_class='mdi mdi-upload', - permissions=[f'users.add_user'] + permissions=['users.add_user'] ) ) ), MenuItem( - link=f'users:group_list', + link='users:group_list', link_text=_('Groups'), auth_required=True, - permissions=[f'users.view_group'], + permissions=['users.view_group'], buttons=( MenuItemButton( - link=f'users:group_add', + link='users:group_add', title='Add', icon_class='mdi mdi-plus-thick', - permissions=[f'users.add_group'] + permissions=['users.add_group'] ), MenuItemButton( - link=f'users:group_import', + link='users:group_import', title='Import', icon_class='mdi mdi-upload', - permissions=[f'users.add_group'] + permissions=['users.add_group'] ) ) ), MenuItem( - link=f'users:token_list', + link='users:token_list', link_text=_('API Tokens'), auth_required=True, - permissions=[f'users.view_token'], + permissions=['users.view_token'], buttons=get_model_buttons('users', 'token') ), MenuItem( - link=f'users:objectpermission_list', + link='users:objectpermission_list', link_text=_('Permissions'), auth_required=True, - permissions=[f'users.view_objectpermission'], + permissions=['users.view_objectpermission'], buttons=get_model_buttons('users', 'objectpermission', actions=['add']) ), ), @@ -433,6 +449,11 @@ ADMIN_MENU = Menu( link_text=_('System'), auth_required=True ), + MenuItem( + link='core:plugin_list', + link_text=_('Plugins'), + auth_required=True + ), MenuItem( link='core:configrevision_list', link_text=_('Configuration History'), @@ -451,6 +472,7 @@ ADMIN_MENU = Menu( MENUS = [ ORGANIZATION_MENU, + RACKS_MENU, DEVICES_MENU, CONNECTIONS_MENU, WIRELESS_MENU, @@ -462,16 +484,13 @@ MENUS = [ PROVISIONING_MENU, CUSTOMIZATION_MENU, OPERATIONS_MENU, - ADMIN_MENU, ] -# -# Add plugin menus -# - +# Add top-level plugin menus for menu in registry['plugins']['menus']: MENUS.append(menu) +# Add the default "plugins" menu if registry['plugins']['menu_items']: # Build the default plugins menu @@ -485,3 +504,6 @@ if registry['plugins']['menu_items']: groups=groups ) MENUS.append(plugins_menu) + +# Add the admin menu last +MENUS.append(ADMIN_MENU) diff --git a/netbox/netbox/plugins/templates.py b/netbox/netbox/plugins/templates.py index 5fa1959b8a7..e1f4b7a47d1 100644 --- a/netbox/netbox/plugins/templates.py +++ b/netbox/netbox/plugins/templates.py @@ -38,6 +38,10 @@ class PluginTemplateExtension: return get_template(template_name).render({**self.context, **extra_context}) + # + # Global methods + # + def navbar(self): """ Content that will be rendered inside the top navigation menu. Content should be returned as an HTML @@ -45,6 +49,37 @@ class PluginTemplateExtension: """ raise NotImplementedError + # + # Object list views + # + + def list_buttons(self): + """ + Buttons that will be rendered and added to the existing list of buttons on the list view. Content + should be returned as an HTML string. Note that content does not need to be marked as safe because this is + automatically handled. + """ + raise NotImplementedError + + # + # Object detail views + # + + def buttons(self): + """ + Buttons that will be rendered and added to the existing list of buttons on the detail page view. Content + should be returned as an HTML string. Note that content does not need to be marked as safe because this is + automatically handled. + """ + raise NotImplementedError + + def alerts(self): + """ + Arbitrary content to be inserted at the top of an object's detail view. Content should be returned as an + HTML string. Note that content does not need to be marked as safe because this is automatically handled. + """ + raise NotImplementedError + def left_page(self): """ Content that will be rendered on the left of the detail page view. Content should be returned as an @@ -65,19 +100,3 @@ class PluginTemplateExtension: HTML string. Note that content does not need to be marked as safe because this is automatically handled. """ raise NotImplementedError - - def buttons(self): - """ - Buttons that will be rendered and added to the existing list of buttons on the detail page view. Content - should be returned as an HTML string. Note that content does not need to be marked as safe because this is - automatically handled. - """ - raise NotImplementedError - - def list_buttons(self): - """ - Buttons that will be rendered and added to the existing list of buttons on the list view. Content - should be returned as an HTML string. Note that content does not need to be marked as safe because this is - automatically handled. - """ - raise NotImplementedError diff --git a/netbox/netbox/plugins/urls.py b/netbox/netbox/plugins/urls.py index 075bda81182..7a9f30c7eff 100644 --- a/netbox/netbox/plugins/urls.py +++ b/netbox/netbox/plugins/urls.py @@ -3,13 +3,11 @@ from importlib import import_module from django.apps import apps from django.conf import settings from django.conf.urls import include -from django.contrib.admin.views.decorators import staff_member_required from django.urls import path from django.utils.module_loading import import_string, module_has_submodule from . import views -# Initialize URL base, API, and admin URL patterns for plugins plugin_patterns = [] plugin_api_patterns = [ path('', views.PluginsAPIRootView.as_view(), name='api-root'), diff --git a/netbox/netbox/plugins/views.py b/netbox/netbox/plugins/views.py index 777a4c69e4d..6a10f2e2c0e 100644 --- a/netbox/netbox/plugins/views.py +++ b/netbox/netbox/plugins/views.py @@ -2,9 +2,7 @@ from collections import OrderedDict from django.apps import apps from django.conf import settings -from django.shortcuts import render from django.urls.exceptions import NoReverseMatch -from django.views.generic import View from drf_spectacular.utils import extend_schema from rest_framework import permissions from rest_framework.response import Response diff --git a/netbox/netbox/preferences.py b/netbox/netbox/preferences.py index d911aabb08e..4fdb7e31fe7 100644 --- a/netbox/netbox/preferences.py +++ b/netbox/netbox/preferences.py @@ -1,5 +1,5 @@ from django.conf import settings -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from netbox.registry import registry from users.preferences import UserPreference diff --git a/netbox/netbox/registry.py b/netbox/netbox/registry.py index d783647ec8b..0920cbccf96 100644 --- a/netbox/netbox/registry.py +++ b/netbox/netbox/registry.py @@ -25,6 +25,7 @@ registry = Registry({ 'counter_fields': collections.defaultdict(dict), 'data_backends': dict(), 'denormalized_fields': collections.defaultdict(list), + 'event_types': dict(), 'model_features': dict(), 'models': collections.defaultdict(set), 'plugins': dict(), diff --git a/netbox/netbox/search/backends.py b/netbox/netbox/search/backends.py index 227a79205e1..12243e9b64e 100644 --- a/netbox/netbox/search/backends.py +++ b/netbox/netbox/search/backends.py @@ -8,6 +8,7 @@ from django.db.models.fields.related import ForeignKey from django.db.models.functions import window from django.db.models.signals import post_delete, post_save from django.utils.module_loading import import_string +from django.utils.translation import gettext_lazy as _ import netaddr from netaddr.core import AddrFormatError @@ -39,7 +40,7 @@ class SearchBackend: # Organize choices by category categories = defaultdict(dict) for label, idx in registry['search'].items(): - categories[idx.get_category()][label] = title(idx.model._meta.verbose_name) + categories[idx.get_category()][label] = _(title(idx.model._meta.verbose_name)) # Compile a nested tuple of choices for form rendering results = ( diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 42ae8cb3eb7..2b057b9ab99 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -5,14 +5,12 @@ import os import platform import sys import warnings -from urllib.parse import urlencode, urlsplit +from urllib.parse import urlencode -import django import requests from django.contrib.messages import constants as messages from django.core.exceptions import ImproperlyConfigured, ValidationError from django.core.validators import URLValidator -from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from netbox.config import PARAMS as CONFIG_PARAMS @@ -21,7 +19,6 @@ from netbox.plugins import PluginConfig from utilities.release import load_release_data from utilities.string import trailing_slash - # # Environment setup # @@ -63,7 +60,17 @@ for parameter in ('ALLOWED_HOSTS', 'DATABASE', 'SECRET_KEY', 'REDIS'): ADMINS = getattr(configuration, 'ADMINS', []) ALLOW_TOKEN_RETRIEVAL = getattr(configuration, 'ALLOW_TOKEN_RETRIEVAL', True) ALLOWED_HOSTS = getattr(configuration, 'ALLOWED_HOSTS') # Required -AUTH_PASSWORD_VALIDATORS = getattr(configuration, 'AUTH_PASSWORD_VALIDATORS', []) +AUTH_PASSWORD_VALIDATORS = getattr(configuration, 'AUTH_PASSWORD_VALIDATORS', [ + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + "OPTIONS": { + "min_length": 12, + }, + }, + { + "NAME": "utilities.password_validation.AlphanumericPasswordValidator", + }, +]) BASE_PATH = trailing_slash(getattr(configuration, 'BASE_PATH', '')) CHANGELOG_SKIP_EMPTY_CHANGES = getattr(configuration, 'CHANGELOG_SKIP_EMPTY_CHANGES', True) CENSUS_REPORTING_ENABLED = getattr(configuration, 'CENSUS_REPORTING_ENABLED', True) @@ -84,6 +91,16 @@ DEFAULT_PERMISSIONS = getattr(configuration, 'DEFAULT_PERMISSIONS', { 'extras.add_bookmark': ({'user': '$user'},), 'extras.change_bookmark': ({'user': '$user'},), 'extras.delete_bookmark': ({'user': '$user'},), + # Permit users to manage their own notifications + 'extras.view_notification': ({'user': '$user'},), + 'extras.add_notification': ({'user': '$user'},), + 'extras.change_notification': ({'user': '$user'},), + 'extras.delete_notification': ({'user': '$user'},), + # Permit users to manage their own subscriptions + 'extras.view_subscription': ({'user': '$user'},), + 'extras.add_subscription': ({'user': '$user'},), + 'extras.change_subscription': ({'user': '$user'},), + 'extras.delete_subscription': ({'user': '$user'},), # Permit users to manage their own API tokens 'users.view_token': ({'user': '$user'},), 'users.add_token': ({'user': '$user'},), @@ -91,7 +108,6 @@ DEFAULT_PERMISSIONS = getattr(configuration, 'DEFAULT_PERMISSIONS', { 'users.delete_token': ({'user': '$user'},), }) DEVELOPER = getattr(configuration, 'DEVELOPER', False) -DJANGO_ADMIN_ENABLED = getattr(configuration, 'DJANGO_ADMIN_ENABLED', False) DOCS_ROOT = getattr(configuration, 'DOCS_ROOT', os.path.join(os.path.dirname(BASE_DIR), 'docs')) EMAIL = getattr(configuration, 'EMAIL', {}) EVENTS_PIPELINE = getattr(configuration, 'EVENTS_PIPELINE', ( @@ -100,8 +116,10 @@ EVENTS_PIPELINE = getattr(configuration, 'EVENTS_PIPELINE', ( EXEMPT_VIEW_PERMISSIONS = getattr(configuration, 'EXEMPT_VIEW_PERMISSIONS', []) FIELD_CHOICES = getattr(configuration, 'FIELD_CHOICES', {}) FILE_UPLOAD_MAX_MEMORY_SIZE = getattr(configuration, 'FILE_UPLOAD_MAX_MEMORY_SIZE', 2621440) +GRAPHQL_MAX_ALIASES = getattr(configuration, 'GRAPHQL_MAX_ALIASES', 10) HTTP_PROXIES = getattr(configuration, 'HTTP_PROXIES', None) INTERNAL_IPS = getattr(configuration, 'INTERNAL_IPS', ('127.0.0.1', '::1')) +ISOLATED_DEPLOYMENT = getattr(configuration, 'ISOLATED_DEPLOYMENT', False) JINJA2_FILTERS = getattr(configuration, 'JINJA2_FILTERS', {}) LANGUAGE_CODE = getattr(configuration, 'DEFAULT_LANGUAGE', 'en-us') LANGUAGE_COOKIE_PATH = CSRF_COOKIE_PATH @@ -149,6 +167,7 @@ SECURE_SSL_REDIRECT = getattr(configuration, 'SECURE_SSL_REDIRECT', False) SENTRY_DSN = getattr(configuration, 'SENTRY_DSN', None) SENTRY_ENABLED = getattr(configuration, 'SENTRY_ENABLED', False) SENTRY_SAMPLE_RATE = getattr(configuration, 'SENTRY_SAMPLE_RATE', 1.0) +SENTRY_SEND_DEFAULT_PII = getattr(configuration, 'SENTRY_SEND_DEFAULT_PII', False) SENTRY_TAGS = getattr(configuration, 'SENTRY_TAGS', {}) SENTRY_TRACES_SAMPLE_RATE = getattr(configuration, 'SENTRY_TRACES_SAMPLE_RATE', 0) SESSION_COOKIE_NAME = getattr(configuration, 'SESSION_COOKIE_NAME', 'sessionid') @@ -178,7 +197,7 @@ if len(SECRET_KEY) < 50: if RELEASE_CHECK_URL: try: URLValidator()(RELEASE_CHECK_URL) - except ValidationError as e: + except ValidationError: raise ImproperlyConfigured( "RELEASE_CHECK_URL must be a valid URL. Example: https://api.github.com/repos/netbox-community/netbox" ) @@ -227,6 +246,23 @@ if STORAGE_BACKEND is not None: return globals().get(name, default) storages.utils.setting = _setting + # django-storage-swift + elif STORAGE_BACKEND == 'swift.storage.SwiftStorage': + try: + import swift.utils # noqa: F401 + except ModuleNotFoundError as e: + if getattr(e, 'name') == 'swift': + raise ImproperlyConfigured( + f"STORAGE_BACKEND is set to {STORAGE_BACKEND} but django-storage-swift is not present. " + "It can be installed by running 'pip install django-storage-swift'." + ) + raise e + + # Load all SWIFT_* settings from the user configuration + for param, value in STORAGE_CONFIG.items(): + if param.startswith('SWIFT_'): + globals()[param] = value + if STORAGE_CONFIG and STORAGE_BACKEND is None: warnings.warn( "STORAGE_CONFIG has been set in configuration.py but STORAGE_BACKEND is not defined. STORAGE_CONFIG will be " @@ -334,7 +370,6 @@ SERVER_EMAIL = EMAIL.get('FROM_EMAIL') # INSTALLED_APPS = [ - 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', @@ -372,12 +407,9 @@ INSTALLED_APPS = [ ] if not DEBUG: INSTALLED_APPS.remove('debug_toolbar') -if not DJANGO_ADMIN_ENABLED: - INSTALLED_APPS.remove('django.contrib.admin') # Middleware MIDDLEWARE = [ - "strawberry_django.middlewares.debug_toolbar.DebugToolbarMiddleware", 'corsheaders.middleware.CorsMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', @@ -392,6 +424,13 @@ MIDDLEWARE = [ 'netbox.middleware.CoreMiddleware', 'netbox.middleware.MaintenanceModeMiddleware', ] + +if DEBUG: + MIDDLEWARE = [ + "strawberry_django.middlewares.debug_toolbar.DebugToolbarMiddleware", + *MIDDLEWARE, + ] + if METRICS_ENABLED: # If metrics are enabled, add the before & after Prometheus middleware MIDDLEWARE = [ @@ -504,7 +543,6 @@ EXEMPT_EXCLUDE_MODELS = ( # All URLs starting with a string listed here are exempt from maintenance mode enforcement MAINTENANCE_EXEMPT_PATHS = ( - f'/{BASE_PATH}admin/', f'/{BASE_PATH}extras/config-revisions/', # Allow modifying the configuration LOGIN_URL, LOGIN_REDIRECT_URL, @@ -529,7 +567,7 @@ if SENTRY_ENABLED: release=RELEASE.full_version, sample_rate=SENTRY_SAMPLE_RATE, traces_sample_rate=SENTRY_TRACES_SAMPLE_RATE, - send_default_pii=True, + send_default_pii=SENTRY_SEND_DEFAULT_PII, http_proxy=HTTP_PROXIES.get('http') if HTTP_PROXIES else None, https_proxy=HTTP_PROXIES.get('https') if HTTP_PROXIES else None ) @@ -550,7 +588,7 @@ CENSUS_PARAMS = { 'python_version': sys.version.split()[0], 'deployment_id': DEPLOYMENT_ID, } -if CENSUS_REPORTING_ENABLED and not DEBUG and 'test' not in sys.argv: +if CENSUS_REPORTING_ENABLED and not ISOLATED_DEPLOYMENT and not DEBUG and 'test' not in sys.argv: try: # Report anonymous census data requests.get(f'{CENSUS_URL}?{urlencode(CENSUS_PARAMS)}', timeout=3, proxies=HTTP_PROXIES) @@ -714,11 +752,16 @@ RQ_QUEUES.update({ # Supported translation languages LANGUAGES = ( + ('cs', _('Czech')), + ('da', _('Danish')), ('de', _('German')), ('en', _('English')), ('es', _('Spanish')), ('fr', _('French')), + ('it', _('Italian')), ('ja', _('Japanese')), + ('nl', _('Dutch')), + ('pl', _('Polish')), ('pt', _('Portuguese')), ('ru', _('Russian')), ('tr', _('Turkish')), @@ -733,6 +776,7 @@ LOCALE_PATHS = ( # Strawberry (GraphQL) # STRAWBERRY_DJANGO = { + "DEFAULT_PK_FIELD_NAME": "id", "TYPE_DESCRIPTION_FROM_MODEL_DOCSTRING": True, "USE_DEPRECATED_FILTERS": True, } @@ -741,6 +785,8 @@ STRAWBERRY_DJANGO = { # Plugins # +PLUGIN_CATALOG_URL = 'https://api.netbox.oss.netboxlabs.com/v1/plugins' + # Register any configured plugins for plugin_name in PLUGINS: try: diff --git a/netbox/netbox/staging.py b/netbox/netbox/staging.py index 4d37fb7ada4..e6b94640302 100644 --- a/netbox/netbox/staging.py +++ b/netbox/netbox/staging.py @@ -80,7 +80,7 @@ class checkout: Create Change instances for all actions stored in the queue. """ if not self.queue: - logger.debug(f"No queued changes; aborting") + logger.debug("No queued changes; aborting") return logger.debug(f"Processing {len(self.queue)} queued changes") diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index 2576f70e597..ee142039669 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -35,6 +35,7 @@ __all__ = ( 'ContentTypesColumn', 'CustomFieldColumn', 'CustomLinkColumn', + 'DistanceColumn', 'DurationColumn', 'LinkedCountColumn', 'MarkdownColumn', @@ -173,6 +174,7 @@ class ToggleColumn(tables.CheckBoxColumn): kwargs['attrs'] = { 'th': { 'class': 'w-1', + 'aria-label': _('Select all'), }, 'td': { 'class': 'w-1', @@ -194,14 +196,23 @@ class BooleanColumn(tables.Column): Custom implementation of BooleanColumn to render a nicely-formatted checkmark or X icon instead of a Unicode character. """ + TRUE_MARK = mark_safe('') + FALSE_MARK = mark_safe('') + EMPTY_MARK = mark_safe('') # Placeholder + + def __init__(self, *args, true_mark=TRUE_MARK, false_mark=FALSE_MARK, **kwargs): + self.true_mark = true_mark + self.false_mark = false_mark + super().__init__(*args, **kwargs) + def render(self, value): - if value: - rendered = '' - elif value is None: - rendered = '' - else: - rendered = '' - return mark_safe(rendered) + if value is None: + return self.EMPTY_MARK + if value and self.true_mark: + return self.true_mark + if not value and self.false_mark: + return self.false_mark + return self.EMPTY_MARK def value(self, value): return str(value) @@ -249,7 +260,7 @@ class ActionsColumn(tables.Column): def render(self, record, table, **kwargs): # Skip dummy records (e.g. available VLANs) or those with no actions - if not getattr(record, 'pk', None) or not self.actions: + if not getattr(record, 'pk', None) or not (self.actions or self.extra_buttons): return '' model = table.Meta.model @@ -275,7 +286,7 @@ class ActionsColumn(tables.Column): if len(self.actions) == 1 or (self.split_actions and idx == 0): dropdown_class = attrs.css_class button = ( - f'' + f'' f'' ) @@ -321,19 +332,26 @@ class ActionsColumn(tables.Column): class ChoiceFieldColumn(tables.Column): """ Render a model's static ChoiceField with its value from `get_FOO_display()` as a colored badge. Background color is - set by the instance's get_FOO_color() method, if defined. + set by the instance's get_FOO_color() method, if defined, or can be overridden by a "color" callable. """ DEFAULT_BG_COLOR = 'secondary' + def __init__(self, *args, color=None, **kwargs): + super().__init__(*args, **kwargs) + self.color = color + def render(self, record, bound_column, value): if value in self.empty_values: return self.default - # Determine the background color to use (try calling object.get_FOO_color()) - try: - bg_color = getattr(record, f'get_{bound_column.name}_color')() or self.DEFAULT_BG_COLOR - except AttributeError: - bg_color = self.DEFAULT_BG_COLOR + # Determine the background color to use (use "color" callable if given, else try calling object.get_FOO_color()) + if self.color: + bg_color = self.color(record) + else: + try: + bg_color = getattr(record, f'get_{bound_column.name}_color')() or self.DEFAULT_BG_COLOR + except AttributeError: + bg_color = self.DEFAULT_BG_COLOR return mark_safe(f'{value}') @@ -674,3 +692,16 @@ class ChoicesColumn(tables.Column): value.append(f'({omitted_count} more)') return ', '.join(value) + + +class DistanceColumn(TemplateColumn): + """ + Distance with template code for formatting + """ + template_code = """ + {% load helpers %} + {% if record.distance %}{{ record.distance|floatformat:"-2" }} {{ record.distance_unit }}{% endif %} + """ + + def __init__(self, template_code=template_code, order_by='_abs_distance', **kwargs): + super().__init__(template_code=template_code, order_by=order_by, **kwargs) diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index 00e08d4c491..c23c1fa140e 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -6,6 +6,7 @@ from django.contrib.auth.models import AnonymousUser from django.contrib.contenttypes.fields import GenericForeignKey from django.core.exceptions import FieldDoesNotExist from django.db.models.fields.related import RelatedField +from django.db.models.fields.reverse_related import ManyToOneRel from django.urls import reverse from django.urls.exceptions import NoReverseMatch from django.utils.safestring import mark_safe @@ -103,7 +104,7 @@ class BaseTable(tables.Table): field = model._meta.get_field(field_name) except FieldDoesNotExist: break - if isinstance(field, RelatedField): + if isinstance(field, (RelatedField, ManyToOneRel)): # Follow ForeignKeys to the related model prefetch_path.append(field_name) model = field.remote_field.model diff --git a/netbox/netbox/tests/dummy_plugin/admin.py b/netbox/netbox/tests/dummy_plugin/admin.py deleted file mode 100644 index 83bc22ad8f5..00000000000 --- a/netbox/netbox/tests/dummy_plugin/admin.py +++ /dev/null @@ -1,9 +0,0 @@ -from django.contrib import admin - -from netbox.admin import admin_site -from .models import DummyModel - - -@admin.register(DummyModel, site=admin_site) -class DummyModelAdmin(admin.ModelAdmin): - list_display = ('name', 'number') diff --git a/netbox/netbox/tests/dummy_plugin/graphql.py b/netbox/netbox/tests/dummy_plugin/graphql.py index 2651f4e9ea9..a8bbfcea202 100644 --- a/netbox/netbox/tests/dummy_plugin/graphql.py +++ b/netbox/netbox/tests/dummy_plugin/graphql.py @@ -13,11 +13,9 @@ class DummyModelType: pass -@strawberry.type +@strawberry.type(name="Query") class DummyQuery: - @strawberry.field - def dummymodel(self, id: int) -> DummyModelType: - return None + dummymodel: DummyModelType = strawberry_django.field() dummymodel_list: List[DummyModelType] = strawberry_django.field() diff --git a/netbox/netbox/tests/dummy_plugin/template_content.py b/netbox/netbox/tests/dummy_plugin/template_content.py index b7157e37014..e9a6b9da1ce 100644 --- a/netbox/netbox/tests/dummy_plugin/template_content.py +++ b/netbox/netbox/tests/dummy_plugin/template_content.py @@ -10,6 +10,12 @@ class GlobalContent(PluginTemplateExtension): class SiteContent(PluginTemplateExtension): models = ['dcim.site'] + def buttons(self): + return "SITE CONTENT - BUTTONS" + + def alerts(self): + return "SITE CONTENT - ALERTS" + def left_page(self): return "SITE CONTENT - LEFT PAGE" @@ -19,9 +25,6 @@ class SiteContent(PluginTemplateExtension): def full_width_page(self): return "SITE CONTENT - FULL WIDTH PAGE" - def buttons(self): - return "SITE CONTENT - BUTTONS" - def list_buttons(self): return "SITE CONTENT - LIST BUTTONS" diff --git a/netbox/netbox/tests/dummy_plugin/views.py b/netbox/netbox/tests/dummy_plugin/views.py index f6cf6a5c5c2..82f250fc1eb 100644 --- a/netbox/netbox/tests/dummy_plugin/views.py +++ b/netbox/netbox/tests/dummy_plugin/views.py @@ -8,7 +8,7 @@ from dcim.models import Site from utilities.views import register_model_view from .models import DummyModel # Trigger registration of custom column -from .tables import mycol +from .tables import mycol # noqa: F401 class DummyModelsView(View): @@ -21,7 +21,7 @@ class DummyModelsView(View): class DummyModelAddView(View): def get(self, request): - return HttpResponse(f"Create an instance") + return HttpResponse("Create an instance") def post(self, request): instance = DummyModel( @@ -29,7 +29,7 @@ class DummyModelAddView(View): number=random.randint(1, 100000) ) instance.save() - return HttpResponse(f"Instance created") + return HttpResponse("Instance created") @register_model_view(Site, 'extra', path='other-stuff') diff --git a/netbox/netbox/tests/test_authentication.py b/netbox/netbox/tests/test_authentication.py index 6e049dcafa8..ae6d3f4c299 100644 --- a/netbox/netbox/tests/test_authentication.py +++ b/netbox/netbox/tests/test_authentication.py @@ -1,7 +1,6 @@ import datetime from django.conf import settings -from django.contrib.auth import get_user_model from django.test import Client from django.test.utils import override_settings from django.urls import reverse @@ -11,14 +10,11 @@ from rest_framework.test import APIClient from core.models import ObjectType from dcim.models import Site from ipam.models import Prefix -from users.models import Group, ObjectPermission, Token +from users.models import Group, ObjectPermission, Token, User from utilities.testing import TestCase from utilities.testing.api import APITestCase -User = get_user_model() - - class TokenAuthenticationTestCase(APITestCase): @override_settings(LOGIN_REQUIRED=True, EXEMPT_VIEW_PERMISSIONS=['*']) @@ -110,7 +106,7 @@ class ExternalAuthenticationTestCase(TestCase): self.assertEqual(settings.REMOTE_AUTH_HEADER, 'HTTP_REMOTE_USER') # Client should not be authenticated - response = self.client.get(reverse('home'), follow=True, **headers) + self.client.get(reverse('home'), follow=True, **headers) self.assertNotIn('_auth_user_id', self.client.session) @override_settings( diff --git a/netbox/netbox/tests/test_graphql.py b/netbox/netbox/tests/test_graphql.py index 2cf9ee87b9d..b04d42d2447 100644 --- a/netbox/netbox/tests/test_graphql.py +++ b/netbox/netbox/tests/test_graphql.py @@ -1,7 +1,14 @@ +import json + from django.test import override_settings from django.urls import reverse +from rest_framework import status -from utilities.testing import disable_warnings, TestCase +from core.models import ObjectType +from dcim.choices import LocationStatusChoices +from dcim.models import Site, Location +from users.models import ObjectPermission +from utilities.testing import disable_warnings, APITestCase, TestCase class GraphQLTestCase(TestCase): @@ -34,3 +41,88 @@ class GraphQLTestCase(TestCase): response = self.client.get(url, **header) with disable_warnings('django.request'): self.assertHttpStatus(response, 302) # Redirect to login page + + +class GraphQLAPITestCase(APITestCase): + + @override_settings(LOGIN_REQUIRED=True) + def test_graphql_filter_objects(self): + """ + Test the operation of filters for GraphQL API requests. + """ + sites = ( + Site(name='Site 1', slug='site-1'), + Site(name='Site 2', slug='site-2'), + Site(name='Site 3', slug='site-3'), + ) + Site.objects.bulk_create(sites) + Location.objects.create( + site=sites[0], + name='Location 1', + slug='location-1', + status=LocationStatusChoices.STATUS_PLANNED + ), + Location.objects.create( + site=sites[1], + name='Location 2', + slug='location-2', + status=LocationStatusChoices.STATUS_STAGING + ), + Location.objects.create( + site=sites[1], + name='Location 3', + slug='location-3', + status=LocationStatusChoices.STATUS_ACTIVE + ), + + # Add object-level permission + obj_perm = ObjectPermission( + name='Test permission', + actions=['view'] + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Location)) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Site)) + + url = reverse('graphql') + + # A valid request should return the filtered list + query = '{location_list(filters: {site_id: "' + str(sites[0].pk) + '"}) {id site {id}}}' + response = self.client.post(url, data={'query': query}, format="json", **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertNotIn('errors', data) + self.assertEqual(len(data['data']['location_list']), 1) + self.assertIsNotNone(data['data']['location_list'][0]['site']) + + # Test OR logic + query = """{ + location_list( filters: { + status: \"""" + LocationStatusChoices.STATUS_PLANNED + """\", + OR: {status: \"""" + LocationStatusChoices.STATUS_STAGING + """\"} + }) { + id site {id} + } + }""" + response = self.client.post(url, data={'query': query}, format="json", **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertNotIn('errors', data) + self.assertEqual(len(data['data']['location_list']), 2) + + # An invalid request should return an empty list + query = '{location_list(filters: {site_id: "99999"}) {id site {id}}}' # Invalid site ID + response = self.client.post(url, data={'query': query}, format="json", **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertEqual(len(data['data']['location_list']), 0) + + # Removing the permissions from location should result in an empty locations list + obj_perm.object_types.remove(ObjectType.objects.get_for_model(Location)) + query = '{site(id: ' + str(sites[0].pk) + ') {id locations {id}}}' + response = self.client.post(url, data={'query': query}, format="json", **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + data = json.loads(response.content) + self.assertNotIn('errors', data) + self.assertEqual(len(data['data']['site']['locations']), 0) diff --git a/netbox/netbox/tests/test_import.py b/netbox/netbox/tests/test_import.py index f382d011201..16711ef7268 100644 --- a/netbox/netbox/tests/test_import.py +++ b/netbox/netbox/tests/test_import.py @@ -2,6 +2,7 @@ from django.test import override_settings from core.models import ObjectType from dcim.models import * +from extras.models import CustomField from netbox.choices import CSVDelimiterChoices, ImportFormatChoices from users.models import ObjectPermission from utilities.testing import ModelViewTestCase, create_tags @@ -76,7 +77,6 @@ class CSVImportTestCase(ModelViewTestCase): self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302) regions = Region.objects.all() self.assertEqual(regions.count(), 4) - region = Region.objects.get(slug="region-4") self.assertEqual( list(regions[0].tags.values_list('name', flat=True)), ['Alpha', 'Bravo'] @@ -116,3 +116,28 @@ class CSVImportTestCase(ModelViewTestCase): # Test POST with permission self.assertHttpStatus(self.client.post(self._get_url('import'), data), 200) self.assertEqual(Region.objects.count(), 0) + + @override_settings(EXEMPT_VIEW_PERMISSIONS=['*']) + def test_custom_field_defaults(self): + self.add_permissions('dcim.add_region') + csv_data = [ + 'name,slug,description', + 'Region 1,region-1,abc', + ] + data = { + 'format': ImportFormatChoices.CSV, + 'data': self._get_csv_data(csv_data), + 'csv_delimiter': CSVDelimiterChoices.AUTO, + } + + cf = CustomField.objects.create( + name='tcf', + type='text', + required=False, + default='def-cf-text' + ) + cf.object_types.set([ObjectType.objects.get_for_model(self.model)]) + + self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302) + region = Region.objects.get(slug='region-1') + self.assertEqual(region.cf['tcf'], 'def-cf-text') diff --git a/netbox/netbox/tests/test_jobs.py b/netbox/netbox/tests/test_jobs.py new file mode 100644 index 00000000000..cb3024038ae --- /dev/null +++ b/netbox/netbox/tests/test_jobs.py @@ -0,0 +1,129 @@ +from datetime import timedelta + +from django.test import TestCase +from django.utils import timezone +from django_rq import get_queue + +from ..jobs import * +from core.models import Job +from core.choices import JobStatusChoices + + +class TestJobRunner(JobRunner): + def run(self, *args, **kwargs): + pass + + +class JobRunnerTestCase(TestCase): + def tearDown(self): + super().tearDown() + + # Clear all queues after running each test + get_queue('default').connection.flushall() + get_queue('high').connection.flushall() + get_queue('low').connection.flushall() + + @staticmethod + def get_schedule_at(offset=1): + # Schedule jobs a week in advance to avoid accidentally running jobs on worker nodes used for testing. + return timezone.now() + timedelta(weeks=offset) + + +class JobRunnerTest(JobRunnerTestCase): + """ + Test internal logic of `JobRunner`. + """ + + def test_name_default(self): + self.assertEqual(TestJobRunner.name, TestJobRunner.__name__) + + def test_name_set(self): + class NamedJobRunner(TestJobRunner): + class Meta: + name = 'TestName' + + self.assertEqual(NamedJobRunner.name, 'TestName') + + def test_handle(self): + job = TestJobRunner.enqueue(immediate=True) + + self.assertEqual(job.status, JobStatusChoices.STATUS_COMPLETED) + + def test_handle_errored(self): + class ErroredJobRunner(TestJobRunner): + EXP = Exception('Test error') + + def run(self, *args, **kwargs): + raise self.EXP + + job = ErroredJobRunner.enqueue(immediate=True) + + self.assertEqual(job.status, JobStatusChoices.STATUS_ERRORED) + self.assertEqual(job.error, repr(ErroredJobRunner.EXP)) + + +class EnqueueTest(JobRunnerTestCase): + """ + Test enqueuing of `JobRunner`. + """ + + def test_enqueue(self): + instance = Job() + for i in range(1, 3): + job = TestJobRunner.enqueue(instance, schedule_at=self.get_schedule_at()) + + self.assertIsInstance(job, Job) + self.assertEqual(TestJobRunner.get_jobs(instance).count(), i) + + def test_enqueue_once(self): + job = TestJobRunner.enqueue_once(instance=Job(), schedule_at=self.get_schedule_at()) + + self.assertIsInstance(job, Job) + self.assertEqual(job.name, TestJobRunner.__name__) + + def test_enqueue_once_twice_same(self): + instance = Job() + schedule_at = self.get_schedule_at() + job1 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at) + job2 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at) + + self.assertEqual(job1, job2) + self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1) + + def test_enqueue_once_twice_different_schedule_at(self): + instance = Job() + job1 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at()) + job2 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at(2)) + + self.assertNotEqual(job1, job2) + self.assertRaises(Job.DoesNotExist, job1.refresh_from_db) + self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1) + + def test_enqueue_once_twice_different_interval(self): + instance = Job() + schedule_at = self.get_schedule_at() + job1 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at) + job2 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at, interval=60) + + self.assertNotEqual(job1, job2) + self.assertEqual(job1.interval, None) + self.assertEqual(job2.interval, 60) + self.assertRaises(Job.DoesNotExist, job1.refresh_from_db) + self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1) + + def test_enqueue_once_with_enqueue(self): + instance = Job() + job1 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at(2)) + job2 = TestJobRunner.enqueue(instance, schedule_at=self.get_schedule_at()) + + self.assertNotEqual(job1, job2) + self.assertEqual(TestJobRunner.get_jobs(instance).count(), 2) + + def test_enqueue_once_after_enqueue(self): + instance = Job() + job1 = TestJobRunner.enqueue(instance, schedule_at=self.get_schedule_at()) + job2 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at(2)) + + self.assertNotEqual(job1, job2) + self.assertRaises(Job.DoesNotExist, job1.refresh_from_db) + self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1) diff --git a/netbox/netbox/tests/test_plugins.py b/netbox/netbox/tests/test_plugins.py index 351fef9e2db..ba44378c5ce 100644 --- a/netbox/netbox/tests/test_plugins.py +++ b/netbox/netbox/tests/test_plugins.py @@ -36,12 +36,6 @@ class PluginTest(TestCase): instance.delete() self.assertIsNone(instance.pk) - def test_admin(self): - - # Test admin view URL resolution - url = reverse('admin:dummy_plugin_dummymodel_add') - self.assertEqual(url, '/admin/dummy_plugin/dummymodel/add/') - @override_settings(LOGIN_REQUIRED=False) def test_views(self): diff --git a/netbox/netbox/urls.py b/netbox/netbox/urls.py index b0175ec043d..08c9a46a82a 100644 --- a/netbox/netbox/urls.py +++ b/netbox/netbox/urls.py @@ -77,11 +77,6 @@ _patterns = [ path('api/plugins/', include((plugin_api_patterns, 'plugins-api'))), ] -# Django admin UI -if settings.DJANGO_ADMIN_ENABLED: - from .admin import admin_site - _patterns.append(path('admin/', admin_site.urls)) - # django-debug-toolbar if settings.DEBUG: import debug_toolbar diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index 4e0e9cbdd91..d8c4c5e27d5 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -4,11 +4,12 @@ from copy import deepcopy from django.contrib import messages from django.contrib.contenttypes.fields import GenericRel +from django.contrib.contenttypes.models import ContentType from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist, ValidationError from django.db import transaction, IntegrityError from django.db.models import ManyToManyField, ProtectedError, RestrictedError from django.db.models.fields.reverse_related import ManyToManyRel -from django.forms import HiddenInput, ModelMultipleChoiceField, MultipleHiddenInput +from django.forms import ModelMultipleChoiceField, MultipleHiddenInput from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.template.loader import render_to_string @@ -16,10 +17,12 @@ from django.urls import reverse from django.utils.safestring import mark_safe from django.utils.translation import gettext as _ from django_tables2.export import TableExport +from mptt.models import MPTTModel from core.models import ObjectType -from extras.models import ExportTemplate -from extras.signals import clear_events +from core.signals import clear_events +from extras.choices import CustomFieldUIEditableChoices +from extras.models import CustomField, ExportTemplate from utilities.error_handlers import handle_protectederror from utilities.exceptions import AbortRequest, AbortTransaction, PermissionsViolation from utilities.forms import BulkRenameForm, ConfirmationForm, restrict_form_fields @@ -107,7 +110,13 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin): try: return template.render_to_response(self.queryset) except Exception as e: - messages.error(request, f"There was an error rendering the selected export template ({template.name}): {e}") + messages.error( + request, + _("There was an error rendering the selected export template ({template}): {error}").format( + template=template.name, + error=e + ) + ) # Strip the `export` param and redirect user to the filtered objects list query_params = request.GET.copy() query_params.pop('export') @@ -196,6 +205,8 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin): return render(request, 'htmx/table.html', { 'table': table, 'filter_chits': filter_chits, + 'model': model, + 'actions': actions, }) context = { @@ -435,6 +446,17 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView): if instance.pk and hasattr(instance, 'snapshot'): instance.snapshot() + else: + # For newly created objects, apply any default custom field values + custom_fields = CustomField.objects.filter( + object_types=ContentType.objects.get_for_model(self.queryset.model), + ui_editable=CustomFieldUIEditableChoices.YES + ) + for cf in custom_fields: + field_name = f'cf_{cf.name}' + if field_name not in record: + record[field_name] = cf.default + # Instantiate the model form for the object model_form_kwargs = { 'data': record, @@ -619,6 +641,10 @@ class BulkEditView(GetReturnURLMixin, BaseMultiObjectView): if form.cleaned_data.get('remove_tags', None): obj.tags.remove(*form.cleaned_data['remove_tags']) + # Rebuild the tree for MPTT models + if issubclass(self.queryset.model, MPTTModel): + self.queryset.model.objects.rebuild() + return updated_objects # @@ -694,7 +720,10 @@ class BulkEditView(GetReturnURLMixin, BaseMultiObjectView): # Retrieve objects being edited table = self.table(self.queryset.filter(pk__in=pk_list), orderable=False) if not table.rows: - messages.warning(request, "No {} were selected.".format(model._meta.verbose_name_plural)) + messages.warning( + request, + _("No {object_type} were selected.").format(object_type=model._meta.verbose_name_plural) + ) return redirect(self.get_return_url(request)) return render(request, self.template_name, { @@ -771,8 +800,13 @@ class BulkRenameView(GetReturnURLMixin, BaseMultiObjectView): if self.queryset.filter(pk__in=renamed_pks).count() != len(selected_objects): raise PermissionsViolation - model_name = self.queryset.model._meta.verbose_name_plural - messages.success(request, f"Renamed {len(selected_objects)} {model_name}") + messages.success( + request, + _("Renamed {count} {object_type}").format( + count=len(selected_objects), + object_type=self.queryset.model._meta.verbose_name_plural + ) + ) return redirect(self.get_return_url(request)) except (AbortRequest, PermissionsViolation) as e: @@ -864,7 +898,10 @@ class BulkDeleteView(GetReturnURLMixin, BaseMultiObjectView): messages.error(request, mark_safe(e.message)) return redirect(self.get_return_url(request)) - msg = f"Deleted {deleted_count} {model._meta.verbose_name_plural}" + msg = _("Deleted {count} {object_type}").format( + count=deleted_count, + object_type=model._meta.verbose_name_plural + ) logger.info(msg) messages.success(request, msg) return redirect(self.get_return_url(request)) @@ -881,7 +918,10 @@ class BulkDeleteView(GetReturnURLMixin, BaseMultiObjectView): # Retrieve objects being deleted table = self.table(self.queryset.filter(pk__in=pk_list), orderable=False) if not table.rows: - messages.warning(request, "No {} were selected for deletion.".format(model._meta.verbose_name_plural)) + messages.warning( + request, + _("No {object_type} were selected.").format(object_type=model._meta.verbose_name_plural) + ) return redirect(self.get_return_url(request)) return render(request, self.template_name, { @@ -926,7 +966,10 @@ class BulkComponentCreateView(GetReturnURLMixin, BaseMultiObjectView): selected_objects = self.parent_model.objects.filter(pk__in=pk_list) if not selected_objects: - messages.warning(request, "No {} were selected.".format(self.parent_model._meta.verbose_name_plural)) + messages.warning( + request, + _("No {object_type} were selected.").format(object_type=self.parent_model._meta.verbose_name_plural) + ) return redirect(self.get_return_url(request)) table = self.table(selected_objects, orderable=False) diff --git a/netbox/netbox/views/generic/feature_views.py b/netbox/netbox/views/generic/feature_views.py index 821d87e170c..451c9c01d2a 100644 --- a/netbox/netbox/views/generic/feature_views.py +++ b/netbox/netbox/views/generic/feature_views.py @@ -38,7 +38,7 @@ class ObjectChangeLogView(ConditionalLoginRequiredMixin, View): base_template = None tab = ViewTab( label=_('Changelog'), - permission='extras.view_objectchange', + permission='core.view_objectchange', weight=10000 ) @@ -204,11 +204,14 @@ class ObjectSyncDataView(LoginRequiredMixin, View): obj = get_object_or_404(qs, **kwargs) if not obj.data_file: - messages.error(request, f"Unable to synchronize data: No data file set.") + messages.error(request, _("Unable to synchronize data: No data file set.")) return redirect(obj.get_absolute_url()) obj.sync(save=True) - messages.success(request, f"Synchronized data for {model._meta.verbose_name} {obj}.") + messages.success(request, _("Synchronized data for {object_type} {object}.").format( + object_type=model._meta.verbose_name, + object=obj + )) return redirect(obj.get_absolute_url()) @@ -230,7 +233,9 @@ class BulkSyncDataView(GetReturnURLMixin, BaseMultiObjectView): for obj in selected_objects: obj.sync(save=True) - model_name = self.queryset.model._meta.verbose_name_plural - messages.success(request, f"Synced {len(selected_objects)} {model_name}") + messages.success(request, _("Synced {count} {object_type}").format( + count=len(selected_objects), + object_type=self.queryset.model._meta.verbose_name_plural + )) return redirect(self.get_return_url(request)) diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index 243ae2547d8..0686e52b7df 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -13,7 +13,7 @@ from django.utils.html import escape from django.utils.safestring import mark_safe from django.utils.translation import gettext as _ -from extras.signals import clear_events +from core.signals import clear_events from utilities.error_handlers import handle_protectederror from utilities.exceptions import AbortRequest, PermissionsViolation from utilities.forms import ConfirmationForm, restrict_form_fields @@ -87,12 +87,14 @@ class ObjectChildrenView(ObjectView, ActionsMixin, TableMixin): child_model: The model class which represents the child objects table: The django-tables2 Table class used to render the child objects list filterset: A django-filter FilterSet that is applied to the queryset + filterset_form: The form class used to render filter options actions: A mapping of supported actions to their required permissions. When adding custom actions, bulk action names must be prefixed with `bulk_`. (See ActionsMixin.) """ child_model = None table = None filterset = None + filterset_form = None template_name = 'generic/object_children.html' def get_children(self, request, parent): @@ -144,14 +146,17 @@ class ObjectChildrenView(ObjectView, ActionsMixin, TableMixin): return render(request, 'htmx/table.html', { 'object': instance, 'table': table, + 'model': self.child_model, }) return render(request, self.get_template_name(), { 'object': instance, + 'model': self.child_model, 'child_model': self.child_model, 'base_template': f'{instance._meta.app_label}/{instance._meta.model_name}.html', 'table': table, 'table_config': f'{table.name}_config', + 'filter_form': self.filterset_form(request.GET) if self.filterset_form else None, 'actions': actions, 'tab': self.tab, 'return_url': request.get_full_path(), @@ -231,6 +236,8 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): # If this is an HTMX request, return only the rendered form HTML if htmx_partial(request): return render(request, self.htmx_template_name, { + 'model': model, + 'object': obj, 'form': form, }) @@ -285,6 +292,7 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): msg = f'{msg} {obj}' messages.success(request, msg) + # If adding another object, redirect back to the edit form if '_addanother' in request.POST: redirect_url = request.path @@ -300,6 +308,12 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): return_url = self.get_return_url(request, obj) + # If the object has been created or edited via HTMX, return an HTMX redirect to the object view + if request.htmx: + return HttpResponse(headers={ + 'HX-Location': return_url, + }) + return redirect(return_url) except (AbortRequest, PermissionsViolation) as e: diff --git a/netbox/project-static/dist/graphiql.css b/netbox/project-static/dist/graphiql.css deleted file mode 100644 index 3db5b848aa0..00000000000 --- a/netbox/project-static/dist/graphiql.css +++ /dev/null @@ -1,13 +0,0 @@ -@font-face{font-family:Roboto;font-style:italic;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:italic;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAByUAA4AAAAANagAABw8AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmobllYcNgZgAIIEEQwKw3y2PwuCEAABNgIkA4QcBCAFgwoHIBvkLKOipNV2jiiCjQMF4peCvzqwwRj5aGHyaBhljLHOdnTs2BiTuV25u1Hu0SDvNTVqKC5bf7FJY/2tfvWUhxyhsU9yefhvf/C/596ZO/MENLIS7fkLWag/SRVe3dEZrMT5e53l+5IMzCtYQMlmeYFA9gLZC4DVXbgFmj6TOlVKwipFmaK64Wlu/+5ueYNtbESZjQXaZAxjCCpRNoKjU6Id+aFFMKYyaoQxYtAywMYxqhTQ/vBPdI/vedmZTYC+6udyoVIBzj3aX1+exrsHsGWqXShK7WrWx5UudbrMrsCMRWlnesTTrfK6WAaWgf9eG2zfRQtUtE5SVEBVcvpT/E3C9vzUkmry11e6UhpapxbAcjihCQ9h0pP85adnbZG95a9SXK7putfXuvdKSmuEBK3SrxW0G+IsC2qNBweGwAAA72iOhQUwFtv+RXfa4Civ8G7GmqvL12C2mdRFYfNNEQkiEkQGCUf/fQ3XR7QxxALR33neIsGoATgNo+Tnh8SQEAYDadAAadICadMF6dED6TMAGTIEmbYAWbIB2fIAQTBgNDAaAhIwUlANYu/+nhEI//XZ3YTwvzvlDQj/t9vfhjB07cLuNmghakaABHRAR+8TEKsSkPJSBLB9SgfNQbNsb65Ft/i3F+VVc22uDZ3drmVx0HTFEzceQoeaob2ub5N1b1Wv1u1zTauP629yC/koi6cUl8nPYD04sq1Xx/dt4S2hvWjdbbkJrb/N53Dytwms3YYAtvGISlYGi22i7hA3SiY8i7pqqDGbIjPCHmuAp/1ZRIhXIMtKvrugCkXk9foEJQb0jPh64OmxaDhwTnywcUbLvY2vnhErvnsQ395nLAGmiDZn7yaGCNUYl3ViPFFTqJ893pqiIh5uSgw3rSisulmk17dQxZQR+Z7mNlqqTeZpidXQ0hYH4nkdBYLwB0E93DvRZtCh3/p7g+hL+3jEJQ6YFS8EbDsuhWcrNCDB4hD0jl/gEcvYD2uI7fkNjSXo+Fnj05VQxjZL/f+VHl1rHAL7rkBT7Ro6mLJOtbs7JCSxzfLXS4kiEsRUM1WWJyUl/+8SfW/2q9rjgV7PhUmKT0BQSFhEVExcQg0SjVGrTr0GjZo0a9GqDYuTwStq16Vbrz79ho0YN2HGnHmLlghKlq1Zt2FLRdWOXfsOHDlx6todL19vhHoj1jKyOUwijQmx9Um2IJ3zmfrkkEchzyfQzp2GLvSin0eQLTSn0hvVlu0BB5sfNe64BacVXzFf13xvWQ/1k/DVKGSbNibAN6wCd2gvuGaVhPGDjYv1Ddk8pkmNtUn2dWR6CR1XjKsaH1v60ATd2HzhH6QBWqEqH2VU45V06zzHIMsdlh+mVeKNGW8zV3Cwh4Yp+Poq0IpQJkxcUxmyJZivBEfF/bvuyF5ktMbL1KmHowzDGdQzqFsoMI2l5yb/Mhy9LA2+CR1NGqYhUCjRFHKn/JAZW/xalh4YzWKBxoQ8jTYiVnEN35lsSrZpwyyAKxpX++ShUTdGMIoRiDCqRpmDcwNmcjMYcQyEmRFiVDZ/aIkJ28KseV6yRemKM4Yc8igwr3C7oZO7gF70Y4T3gAM+vgOnuMI94+PmZUetuOaUwDE2Zk4HmrsbIVEc8hCwm+434zDzCXC3uQpXuWxPZHAMx3AlOy5wMOjk/BGFE1zjTsTHqH/mB9zByQDlHbBCQBusqViRUrrohyFjtZv5kHGCuxUSXAtQ0mxLhpEctVyUr3MWwlcH09pQfHQtmWiPNdJru8CD9kiqQT0NG+iNsW7FRCPw2zGNNU/tdkqcSUVaa5hbBjO/75gu8dU7DFlflR8IbyxrohMwUSYcM2YyfO2kPFiGi0UJNBi18mfmjmA8QwCC4YMAOwPO+hFPiTJUDYs2V41MK5i3OZAIBNpsvhVpedleOyz2oq1iJRXfL/2LpkfvwuRy9K7MR25PPozoePJNbP4ACRCYKAfRGJmbBtGUZw4mYtzCMChq8m46zauZSs+5UGBGkFNqgTF0ipgsCRhPTUlFRAL0xHSkNCRRmqR5UXlUGJ9yI1gVNIhGlYOubXpAL6Pl1Tg13AYp0moAAEiytlk0oPszgSjqxAopBXE8iBWIhFLtlecRCdGuV5Z217mwciu/8r/cDzy2xeqR+3xjSiIC5bFyEKR59x+2/9jyC4AOXmBkSg789rcDynw/A3gH4OI7qwNe6GlA3lw4vLz+o0Mvk32he5vwv0yM2lRgeUnel3WyWbbJyfnpAnOskhFLs0rWzYyclDnvjH+JbEFb/dP6549hLSiG158G7v60u0zzmeE3y3Z/5OcltVUQVhLhPUfD7wNWrVpUI4Joc52QKCnoXuD0diWlpO3JyMrJ21cQCfPBxeC74MHYesiZcxcuZfdxo67cuzYG5fRBLFZ5hQdsaaz10GHqR2DszyDdANJRhnOFu/VI9ACmFT2CTXuPlpoPxG2CT4U9Ag8as699fI2AYrsvpXgBkqkG5R4daD1fFKDBHDi2tCNIOGhSIQlQ2KfS3Ge3TjCQKCl1i5CGAgtYnBuj98X5HTnNToAg+PPbBadQNYUksig3QEkJJ0lD1LqglfNxpx7X+TJjEqihDJtmXh++5rmF84nyF84lHnshMJZg2x1FHt8ZGDEi+1H9AVtVbjA0bityQi5j80dWNoc7TlT9P559D+CMOVJ5K4QwWZBZYk/5opa90NBvwJ2ngFH5MbrmhNHmxy0VQs9IUYSmy4u4WUJpGOKY+1M1laVT+WqVbNCX5Y9/G8O2qZjconuBk+uey0/7AU5OyNHADjXwBTfnYWEOigvIUED/iQIvB1bY3zghjd1CWGtPPhNKHG5oPb4tkSwLR0w2XjmjHvvhaWWOHHp2UwqMSadTsdRiBxEfWHjTBzk///7VfmNtjHwn6dXhHeLooL/5i2UNp1/Pss2IViOFleEbVasODTurQba/4ohhk0stUgGTsJserYfZyyuxUD8Mb1jpJQIbS/u6/kWY4KlvfGIUvBhQvIeSWZybh8IUJKM4y6hz+ZpJw34lKTKwWc4XBwrP6mc4Bf5ErLFkUtiigesa8L7RwBw6UDc/BLnuwfODrKmg0ySAa+3QF8uNh71Pnw8VNU6lY+vDUSLPBdAFOxRRvEWtpezH+LFPmF2+KXkgkhCioAUHQ9pndnp21MDWYJ02UC1BVCvFcWBzMnWa9Ao7ocgZFMSwCbyA8xijQp4wvzQn5LfP4diNz1UVyN0vY0kkZd4dp7tFjs4NMou4+Ja4MDxCk0d4MfgZQ9nAd2HyHxIuZ5QH/yVb/U1I8bFZMMxovqxotGJ/fb+AK+r5CnFWitF5bPrIV4tZuxJdD6b8zFdy6wP9SPfOBzB4Nw8Vb/3jbd+XZ7OCWr1I/kkgHPhfymTnrj5Z4uSMQMrvD+2H35Jcpy7mOUhkZg46bVeNx7IslIKMLg7e0fM/QWQJjdD8MMIGj7hTDOo5RVB1BXLSYCGcXhCUpRR46DOyHPmRYI83G5+MnTBnONsUpiAp4COMFMHCkKIZAe9gCzY08X37u2c4noW6RHqsTS/dHM70fiBaUQjTbaMOV86y340qD2RUV4WcXH8HEfKY6ki10byVWCuEyMiyNx9vom+1ZJtx313Tr3QyS/oQrPmg/sqIP0HeNdN9tXWsaTH7cM3jxKVVX3HDGtEHjOJ0JXbam7ybiSqYtn0fcXX0qKDzp0M22iHXDiYoF/eoNOa5Dcdi0ZjfXfPi24ETZnsbrSFypmCWFyMWz6sFkTSFxkKiWVZm0ls8RvhkbZFbOoRCGRHuZPvyklU/o44qKxMBL7Vv5ArHDLCve0pS7xbyh90IP453DoWDbzSQV1UQD09R1e2lzlCjpCtHmFl2c80jP/2FkmDRIrI23CYtVAdZYEextEdF0UiRTC1Wyhu/KLa6modmMTf46cW5/NPi129KA2pRTVTD1vHDr2QfQ5ji4wQ1LlGfHs8s8Yl7d9v5AMvhI06XABYvFarjuUDyEhcg0OXo/SyLgCN9/qYtfoL9HpwSGpZTe1ph2LsUHKcMcMrB8KdWyWdSvcvX7LbYVhNcyPw14+LWMivSdhBdnUz2k/S4FeaB7Moig6DHIWQ3iWs3bwRg1gDQKdW7Q6SNH8FGwoLA2/PYJMQcNaF67dVz8cVhOpEFgBPzJPaPyEH1mL8bN/+RuYe1wFYnvI1D2JiW7IMPwUm4wNESaVPKCaMMcHyUchsY/Y7At949v/XrDvWUAU79TbeWWgPA8FaVB46MNVOBLuOVu+jLXUgT0jdMes1DvW4n3IZ8kQcFtGCwrlDYeFZs4BT9+GP8b8Wxymc394GN5zmU5cId/MIf+g7lcNrTYIf23SSqdoEly3a30ncLMOh34c4gj5/YLKy3hkPBGtb5HFYbIkRW1hKWkasHtEJlHC8/KaKK2Vh++ttUJAJ5w47cKzUBq2Nfsz8lIfWYn4rbV+kBwPKo/VHNHRoDoqV5arNU7/aFpVO5WiDzdSY1muIbkRGEXACgb4DWTJah8fi/Ac1KuTpgR1FY2e5J1fdnhP2QKld1UnPcoK0XbKx8n9C5pQtwbypvT4spRRKgZxx8OLFC/sVYPSCdJ9pau1pDl6AEa4oJFxCsQ1I6GDehMoTHJxdayGGMZQeo/bFMKIupZrz1czSo4N4g2ROMLjiCb3QBIt4gJTKk5ucQRZGhcCnSMECogtVx6uiZ11Ip4V1hSB4SlXrFQstu0AWid92GS3NVsiXBaUqAaykQV5L4xyq33u1rVyFXXEZqocu5QMHxmISQR88ozguHNDSkKKn6fSEKmRLLvLVK5PivfZ17yTzRSx7YFm4aBb1MvPSXnC5Dy03/fy4+HomEXiVa/pBII99nk+ZThvVccFpED+9YR9gSZltfaSK74y+akrx9Yh2RWPi1SLYKnD4gTy+OwXeE+sE8xMHXlsil6rwvAnTviMQ6JBt59AnzinKRizmb4pJ1FclB3DKscCcSc5FIuP4tqN9Mvh2zh6c6Z45vwCV8ryqFiqDOOiT9OYAY15wsoMuQ1r5Zor7E5aCdVvK1+7IzsW5YR6/0VlNXuAIa5iNZleAi65aTPZTIBAtPtsR8froOr9D8LFUl9VPjrlXJd6CQKk/f0bZ983wErg9W16NS0kfPI/7n9lmr+5EqNzUAyRJLyZyvve3kvTzRlwf5uyVzRYt1lH11ol4BUPoOJvZvyQNiLol/jAsONQ+R/MtTghBfKCUZ8k4BuORgRBeYnyOpA/10WhlZhtZAGeA4AVb9GVeDCPiV7gOmJbRf51sL93vAA9DCIrVLqn/D3DcEZd+DanLJCZIR0UnhkB9cusenVH3jVKVcA2DgVs5n0BboOodNxt42rh7Tvq9+c6cvPPml1+Hux+QHw48wK3/aYBWlnI0Yhec7sLfUG0McLsKZmJacAxXg/BjH/pAe6MCOLFCbaJ07vo8qkbfQFrx2rc04uX9Btg4xlspmhGHvT+xEpD0THnx543DaAMS9LJaKJPsFpnoiQH7paPUtT941O1XQCxY/kuuoLdtmJ+RZ2dU7+fxNqJ/73wrVB7FNKdRA8i3/SH8EmDXTAIOTvb0M+oy8mZbtM2xpMGrFa3uQGC5nrsOx8Ksdga/qyVto8Uq5+oC+wqmGZejVdUivLBN6dtK54ZTzS6BXQiszfH4YDIEZEbWR0rJtaUopwmfpA4WLNhsNQHxTLjVU0sMvyg8BZnZOvJOOy6eceBfg61B3mWMA3SQ1z4y8hV6rGYw8gyUcPT7eWlZ2u8QEBmcycu6w61nsTJj9fWsYeqykj+hVcsuLd8srZcxrSrXG/PtHsLX/UFp9uKSXxJ20kCAoAKqLprvUAinuruE+6D1m4SOlktqPspx3W1fgXdCwe3zc9QyoB/k2QaivBXj31BQ/RBuK2HTulhElUNI9JCQV8xBgOTBs5rxqeFUJaabazq/PUL8MMM9zKAJl///FT5SFqkuIlsuxFlI5KpH4EvHO/2X8Ex6ACIc1YcYjuw81MlKee/tATydl2BewDtr2akedaOd2CsDJiDUqbHjqniuBki11v1Z6c0YpWL/1ddU2ftlM+h0SJY9S+IyilF2AqO7o4uwRb5CtzhotIPURl66t5cFgJfk7UXxtTS0MluRbZRqLxKU4QB/LjZM/kpJ+bbU8aY2Cczoc+B1wuchRbYM+QAPTskKjlnrDVry2u1xxN5wPDx/2rwLruJw77DGyjNlCHzGSgrFJAtb2I8e3Vki8ulJ4wvoy49MTQnU4hs7mh8E7MDlKrae2bV2cVDwa8gkjFgTINVq+r1RwsCZKqBDRZwtZ2FWaGv9YL1iepfR9BPu6caVx2fFIBWYGr/r3AFDK3RGlCNdk9CUhCRh+kUp5HdgzdgL/ARsLd/l7zuBSsW6GnPdaeVou+/xhIfLzn+QL0FgvnQV/Krh6mMLtvuUP44+Yld26vuulhnxhCTySndpae9XTkar9vNtuR6+0ooFSPQcXZnuD9u/F5qJvFL/wHH9EHjic/AeymjPB9v6/PhAn4PwwKXLrmqXtG3sxEdDLuAuLlISTxltNt5Z8VXGVvrde3iWdaGPoGaOvc7qv+nRp2aPMrECYW66Y5gKfg8O8c25A0XBdl0KrJDug0hsBKiT+sQAgAG9TiLHELMF5MznLYOQsNnms9AW0+P6IzhrgetcKZRD1bE1tYYW0TyAs2Rw1kY6fwS0C0MQqEKP0gioS/1gW2J3q4hT1Z92js+ml6KaiKHNhperJD6onuWeEm+AROOyHhpa2liI4/nIwjDHANR/w8hr4Kjq6vNr9oinYpIlr2sSybpqolpbaPATAvrPvebwpQdfe4oIlFG9DNXkOKGk/H1dAZdCLYuJdYvbLC4brtf0xDOwVz/QOM0+4DBLWYtkcgJizrltDzlCKA3pWOr8T1AClbKDGP8Yj8Y9xCWHErVrERx9TSWChoKEzhtH5FziYmcDliWAKolptHwRaacfeTUkVuqnAkeEmc+PQ14auNNhUqsDOFuuXv+6RlLPdO1DwfZ2D1rjubBZ2jRY2UBLZTRDvrmzWHgO+XEaXaPcsZDOEX8yFXODHRTcVjDi9PHcYgxPiYlt0U3ElSi+2VEh3ARvdGeaQ+hpmD/fCgPFGBhDC6tNKzhAL77Vuw89FRzXMhIzWm1VwGWX6yrog6T8hXIMySea7V6dpKqFaqAOsS/lWgtvwmiCWaioIhMpaFLhq6pLnTq2jNebgRMkEMX3/Tn8ov3NdNyBXHuOi9CIRuqmIyx0NdBgqVFOXBdpVhtG+6z2gp1DdO+ma/ce5B06cNaak5mJvwdFr7RSrgCLm2OccBG/qgnJvzHtBGgYKjpewyXGuvIgAVN00zX6oSE3939eDlz42q+7+DxQiDbUoGy3+1sbrQOmFahUs3Xur1qFIV4nLKPP8dQsEWPNnIQ54WYdmfB43CKL5DCvStIV5nYkk7w7zvlD63YBNz6vtIbYX/XI5IDqElrdZ3wA34CJ7+zqCJ0Ydq75d+ffOoz2YYkTwAX+/HGAdr0fbICzME47KoyRFdjg+6c4TYOayrDG6cbWJiEIaE5i/yGzCBuTg4SFMAPQi7NIwGgHA0GDHNnnTfQYS8V75t5C7mHaxYpsLRpvg5RHnhMRiWkcUqsHpZZr9IvSL8erFPdb8czvMsrGX0Kxf1TX4s0Tj8xYmyAZwyvk7uArFO4FdlbUyh+H4rFokE0nqplUS6Gtl7jfVpiF7DOlrk8n7Yze+IdBlGEepsWlwCeL1lOCA4Upurs1TYOetfczd//5kwWKILZRzR9G2ApAdw+932VyHBZjebbKzO9dAu1UGMWWI4CN0v/yGa6g14oN5WqryMEGRHUZO96gEGo7H9LL/gWJMw0NCEiFrsbGxHd1UoMNwk/M4MN7Umwn0aQXm0piI7sHTrqugDMXeRC+gBhaWVhhwIV+km8HVy8l/o+kRIVFbVWBFFLmXxejgr5fH3JCwXMC0vPgX7JFu3KeCj8+qQdhQSietxoPP9WxlGFBjU/381EONsYr37q4p564r38NPojXpbtY/5VB50sGsGA30deQRHKf7/1RKM+fZcbPHQPVgwWTL+iZOqh2vBO7JOUyFeCa6iZ2I5L4ipRCY1OKel+lIApL/kpSMP08u6G81eIm3N3Q2gEzg645UGyXUnoDNi4LNoZs3Je3W8a+8lBN6Srh7VlKaOWczln229HkONsY/c42vHx/O61xCYi6F/PivnTc6CFT7vGTyeAYPT2VsCqctEr2Taxcdo+AwuPv2jTZsQD0gRsSmhEDRUHWYpBs9rd047ZDhOoUQ6VU0TXz23S4ejgYjdzxacYE8QAj5L2MDwgsBEyG2ULa7nHU5IDuF3xdcvgZHQnXRFsuSGRq07MSViehY5AHS8eFBGYCuuYXaInFw3ZDsyx02iBbO3SMKqL0ivrMi8CwJA4r30qWKqJ0lmn83/+7LxufUN+CHkcP7HuXyaYP2ew0K+ktPpamLbe9sfrHO4XEjYEtJgMrxQGl3t5UHqJxPa9LscGSgW0pG2FiuZgd5MpgyRAqX4SSVUpGp+5FNWqIQdhGxeIRIvFHCrG4opZIqlXhJqZVYaZRW6cUQ2JW+wpfNKbOyKLvYSBkSh1dVsanTTzH7UlZljFxlbedWxbSLMjXtozEDuzUM/YHgXaR71KKEqkq7DBXfpy2MR/73rWbis1r9L34CtoD8aiXKg/xi1dQJulRekf39iD6Vx/gY1lahv1zFHVlQDlYV799g1atSPJmVH3Edz3hxBe569cpyQ1WqDG/zzHJn61ETK1k+jI9u8uGX4j6a5lcR+MatEf0hNKzKrm/y9GRzfNPnS2YaZkNprrMmZ10+E0PfBfyvjV/y5fHZfCz4oP81+1wrrUg/+D1lFtXUqcoMNEjf9BaV0b1dWkL6W0QDoPgHTpSZuEp5V2du1Sxpxg4MIMc3YRYCukUTn7Lf02OjOfGbVKEBwLs/6vYCPk9nvvjd8u8PonFjwchgAAnU6/5nACOmSjP/33wHQK9bbvXAuafkJNLvoMyMJzOMXTn7w8oHT8G+tuqcM+T5B+zt7ZbZOpoFVKfCN/iHEcKXq5+zlvrZin9m0c9oSI8XfpxiaFDUEQf/VEXJ0fdv5+OPtII6Vgmfz8hvqsJ+8OnqOP5YRufnpvy18u2myM28hv0SsW+ZeDglQpsiv9HRPtPev3jTWyW7Vn6sFnLvBLmd83Jf4GdS0+rYv791zp+YnHOK44M5Rsipjfj9EyXnD99EoOc4eiKjbTswE47+yzh8C1uuZ4rqg2s6uwz09RCcD8YuVWcNTlU1XJvcbBxNw+Dx5r6bF69v7ZRdQSc2NdJ4ggQ/2FxfvAJWql6fEhG0Gq9nsSaonu6B7IUhefSlFPyEjTqgnnQPmuh0gD9RVETvOlkIAXVCPVEP1BUhIKs+F0S1PvfNmTN7fVs/4A2zMSJVvF1OYCbpR2yW4VAeAZwHtGsRpTlguXXGPTocdyWuFQl7w+I+912r2oif5T9p4ORga1as2udVh1FL3V7tKq7Zm8o37rRNQHG2wWbvkFv2VFO2x2bXYZgSqjEVS4Z97jSzaHP4SGH/SO+UsRizZw2ynQnUmnrN2ISPbOaFSCI30qo2NKkjpqSLqhZNGeXX7lpBJ2Xb6Xmv4R5L8vhPLgmPTJHFwEEsg7i+2i0AAAA=) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:italic;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAAMwAA4AAAAABZgAAALdAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoI4ghsLEAABNgIkAxwEIAWDCgcgG3YEyI7DdHsjE9IUV+CFDh74vPL9/MmgO0un0soqjWt7En2kQoCMtXsRxyxkMqP9iO6NfSiUaLJuoRIKnhI0+ImbcWOB5XOAFVmCgxZQQmuBJRhZtsUCXm/492Dyuk2YZJdkdApZeOzyEQgKOwDgRjASBEEBVmAlgACtOHEhpjLyyrACMAB0vaLa6cAw5bc5bvhA2uwO7zXAyKPmkYNnAJgBxLEMDxFLqVBPI6EQ/daTr/QOAgfCngRoZc4UZiL623qCkf/oHVsfRCOuAIbJyF4ajQQKQLmQhNBAA4aygH9b19Xw4iAC8DkKM6WrYw/ABMAOWEAamA7sgBWACgAUSlc3SCmlc95o45idYD92Qt/+5gF19v3FALtB9+7dq/h6/Ljyu/zzYfnngwdlHxO+k39nOcO/e7nPf2vCoo3HVlmNTdnWwW3JZffuVU6cQX14kb3qUGOOJ+mjP9iMeb1Nivq5gXpJUWm+cmVK56e6PjI2uce23hHlG48vyDvym5/5q+wbkjq90rN+z53D6zXqmVUPVshZoVtrZgc4vleS1NNrni6VR8I/vTrpzpPwu1+1Pel4xBIzK16W3KcLNnVGl2RGZHbPXBAvhw4M02Ci/t0BBfw/p79XS9V7CKAMF0++DK9rtI/7MXvGATjz0TEA4K4oef476t9dS555BAoLBYCA6ei/FSzVgvg/cIR45gpTaLWeLiB+oa4xJuTks7r7/xwCmCzlpoJKALCDQmkyEsCsN0mELUADghGsGgAF6c9IXkabDYyqg6WMkZd9z7BT5gaphhhqnOH66aOvkTQhggQLpsk0xBB9DNSLJttgPQTQJBtoIE0JEY2wb+1lhF6GG62XngKUGKLFECMNkW2kZgP10+M31GZUwfojwkU0uAcQkISKFNtqGMlau3vIjjRUjMANjYkDNKeouYh7CRBmuD4CHQgHG6GXET8oT7ZU6QqUStddiABBJPSv6P315AAA) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:italic;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Roboto;font-style:italic;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:italic;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:italic;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:italic;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:italic;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:italic;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAANUAA4AAAAABbwAAAMBAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoI0ghgLEAABNgIkAxwEIAWDMgcgG5sECK4GbGM62A+KOMNGmZWUwcdhKI9l4Sh/WwYP/3af9w0W4ERa2bOg405uoSptTooGKkF8HniO5b+Iojvye4dReBbNtVHwcLQTG2gBzQfYOqjJ/XYU/jItwgxa4I3czM4Fj9LAAnlHz+dzgSO71Jqn2QML8H66dROj0qAFLYnRhtm0b89/erW/v8l/LA6we9gCizDBtQzSf4EtkcwDT6RtmgYEQXnDKGQslZyX/CkQSFgBAE4ERggEAgmwACwQgADMsONAJKVkFWEBgAJgwMz1NlLWec3G+jtZu+rXO1i7rx/sZi0AEwB5WVY28FUE1CORQAjvtSPftAwCQQjGAbTUfm4qwrvbNmDEf5pjR4JoxElAiYiMWjQyIAEy4EBGAA4UNKCgIMC7a5Cej2sCAA+SMEEyYA2AMQBWgCmQAObACrAAQAUAJCSDMEDmo7CztfXoRGu7SUeVdbvosOq6N6PHnZ2yf9l3eXPj/q2qXdkjBL+qrix1cYsqzItOvXfRPaMXkUvPeFWoxr7tZB8gfxIhMauBapmSUhO8d3O8wUt0MoI7UAxLzt0/zhCwJnVHrsPYXenm8suPeLYORWqn/3wwK6Qp+frDiYGvxHSXFzoXfpihfmlODl9oFbOqKa8nXbZgd6axNivh4JS8xEZKChij/nuDBPx/MrxQA/WBACCtK44947xa66g/k0YcALjxaesDuBuQP/7x/3bTwmQACVMkAAQYd/7HYBqK1H97hriqWIzlN7cD8Qu1mY6Ql7eR9v8qAcCY/apKqAgArEBCCmOEAExoJiOUENTgBAI3NSBhwSjIbLboV0Blo3PIiN06hxVFfmrr0WtMvzYtWg3SBPDjz58mVY8eLTrpNOm6NfKhidepk6ZAbgbym+oG6PoN0zXxUaBHgx6Demiy6Zq0GdIl3aB6ndo04r7WvSV0/Qa0Nd2+yKcNFCrSvh/6dNKO3xV33aBeEXxNZKTyQUaverfOR49+LZno1XUboBt4oSzpEiXLUSjZDgF8+JHBMIY0KQAA) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:italic;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Roboto;font-style:italic;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:italic;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:italic;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAALsAA4AAAAABWAAAAKbAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoIYgXsLEAABNgIkAxwEIAWCdAcgG0AEAB6HcYyyEjO2Dy0eKLv4XvfsrGs+wIhEBOHOERRRTI2158fc/aln0WYmSJq8uTRSIgUyIVMqpfa/7uYHCqzWDuHREj0f5UuuL+ZAokTaYgiIs5sF5aUutjO7QhBlgMaYvCAIIqqoCggoq0+HjRlX70MGclDLyR3Z8fb0q/ectzCv30obmLesvO5hBhRhcp7kToaLpaRXpL0htKmb5C3rIgzUIwA1fnqrhHSbqXhA3v+sK1wRtcWuhdyg9E5tGXERkaAhroCGeNqCnJxAm6m1Sb58SICvFhXFWnVAAWQoYRjYADJUQQqIYm0uSZKkfpYv1sv21dm9b7kWbV6i3BQ2Z/sOf/hl+ezXH88LRz75pnLuq4/MO/Zx+eyHc3x9VDn3yfx9n1ILyusq3ps75y90fVZ657PJ2iXgF+odHbvzv7Lrm+uTsPR0WJqYcelN7180rHDDnbeWbrx0QHht49uXjCzffOsd5RsvGvHe4yF5o+Ej97/ZMP62+Z+3Wz/08CtZ/FezhpdvG/nb6PMhC9vNvHFx3Du9X47etewROuONg4L0v2eI+L9X7dt0evq+gNihfvWttiuWK4f8VmxWBM/+WK8b8F6Y9evfLf57r9SjuA2URBAobPm/Smni3y3+n1TqgQEACsl5awAI/5AetjNp65A+/38vDAUXaayPL4CMKHYkEFC0DlfIlbAMegyqlmGU2eSTO58TTHX2xLyWvlczc/wY7eDo5WxlYenKyMvNg9Go5MAatqis2Jty2oytLaPupFxOlsgFObsjM05dBxMHVwcMbeFma4xFh8jZxUr2e62Th09I7Bd96I2RI3gzYzqKcsHjqZzGjsamlojTwdmCy9bKFNm7IBcudRU5BU09BQ5eTm5coMaMAw==) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAChwAA4AAAAATeAAACgaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoFOG5JCHDYGYACCWBEMCvI82x4Lg1oAATYCJAOHMAQgBYMAByAbcT9FB2LYOAAQlrxDFMHGgYhg7wv+LxPMMdTZwdcAokVZdtu6RLW2UUDAMvAbzZ4j0u2S99aGde5X9nYZLo8RBVE8cz/ziI9IIx2hsU9yf6C5/bvdgpElUiKlIGkMA6ENkDRIGSmVI0aPDP0gFj1qoiBp0GVi0dYXJuYUHnju5981VVmCjIc7w3k0B1KTz2Y/Cgf0o2mPp/+Wsb87U/V613FQAqHQIQuFClkirPwW+afv362q6gMtVf/DsOf2cg0vvM3O4NPdzA4j3mvSUAnMZjCdnkUeRGKpRucwnAmqcD3gCWVZxcs/tQMPwPr2Toq7D0ZhBA+fWm5pLolxQRiTsrNzhdLu/v/ZTNsd76xPmzX9ECsMPVdARctFOfu1b6TZ0Qr2zs9a7YHAJCkso86kM+kMVIWLhlmS7ehCzFWK3kWXdCna1C1wmaJt0sbWSrOImtKwHO4R5x9/Su4Fx+oN7ec3pBJ8N1JXHSbD5btBxdL64RmbEBAY3Hq/9fdh7HIECcLYaYizzkJYsIKwYQtlxx7CBRnCjRvEFd4QAYIhwoRDRIqGiBMHkSgFIlMWRJ48iAIFEFddhfhPKUSZMoibbkJUqoaga4RgeAPx3nuIFasQ6z5CIDAAOAEIw0DYuAAAoZeanZz9sN0XZ6xB/jMlyAfkvwe5eYP8n8shfiAPWX0N8gNeCG6CIFtiqJtf9GvxXgISaYUFoBbxXMhQubGvc726uLHg5rjExJR0Tx3ZrOKw5Wn/QhIIl5GeLXqGlHXOU+EEm1DHutZHMAYTy4QF+DDhMBH8epbUgFiWLMcX9MywrBWln49cqDPvQ4V3wayqvCnfluUTUl0J7HbL755hb8JZNZvW55+vesv6HJ231QTzFndzWbOdc8i2zl2YaW7Qf5NqnzZydd7kCi/4mZFannpkiTG74hVPfJrDMXEFG0XiGV61ZftA1KS6oDHeeAP3jKIKTrQnWVM/au+s0gpuLGx6JGRpNknnE/R87HG7/X3q08E1N5tZM1rsYm4z4/l9NPux8A3c1CCHpdjQ7GTZ6Lb13GlycjkCAkpX5OMRbE4ySW9DY+dXaipDaJs3ojPG4jQ/aul0PNNO51SvCq6551maBRVcYsmllFGX/glWV19TjO7W3L3u11JrD3rUY4OGjJkwacq0GbPmvPDaG8tWrCEgeZ6Fl3mRjOJz+b4qtOU62xDRPocXYTmKlaIsl2epAu8rtRw7L/FFcIsiuSjuRVssxZY8dyswUqnarhsKj2STBSYvm/IxFWK6bhORl6dRzBZloWj9pVgrLy4FcbpuoTJbEKXehkPylYVNXj6Wb9t1n8Lw8kmoR3TWRE4W8wgJf3vfKTaK9qJs3V3zptL4Qpy1mTyS2OS5Z8GxKIkvxOTlXpzcKkQXpWTHE/MpxWrZvMuXX6GGromqNB7X5SGirfclgrSaKMJaUd6UZ7oCYbzulpx2Vfj0rZF6IkS4yRViSjiVE/o2lcf6/ifqxImwExxRu+P52JE0d9ZMFobyQsa5E8tBMibGQEbJ/86R+2jx8unUVlZtz6lB4/101XTo1O3hfeW83xYwNOkYEHAcMEwBdQr4nQYiJyBwAS5k4OEK7NyBnSewCwIuwcAjBRAZwCcTuGQBjyrgVw1E9cCtAXg1AocmILoLXJqBx33AaAG8VsB4AHgdgNMp2cYr2CoT4PIYeAwCYghQY4CaAIJJEDYFRNMgbAaIZkHYHBC9AE6vQcgb4PMesJZB0AoIWZPsJRtbDaN3CDgTY2BxI3zm40jcJ2+Agh52HAmVLY5u0AJ1mAYevFW9Hk5cWVXWGnpmBBLiEKpMwhTCt8CtbQ8RAdLHwZ9a7CAeIc2s4OtgYDG2Pjpxwqk1ijOjkDHF0R8pTV6VVGVVWSnLGhvATnDnaPTa7RscwG2qCZBqXEJvuR+HcK9aeg4AjD+aG4NunCsw8A/AfZUcIA05AgBsu4wM0lAHMzYpiIoxYEMGQpb77cLCRF3iH0poycnN1KYpHZnI07zLdhEcbwX2DsAuQk5AIpOa/NwKPc3pzGSe5X2+F4Pj2zvgzzPwZwYA/BkCfx6DP8vgzzvwJwsAQhaAHAAtegAuAXABQANQDIAO4AiSZRUqmVQTrBfltWpcdOk3unyJA0dOv7a+s8u15o7o6rhy487DmvX64r/wssZM/16UaG+9qzZPLQZVrDjxEiRK8sqiZDQpunXVnvIneqRKo5Ofeia9dv1wN3yQ7bmPbrgJgcEGEwR4AAB8AgDIC4AFwF0EQp8Azk0kx9snDfPj2QmX1DwUzSr3I4rZnsxV4KazY0KQuDQbrywA7HwxcI2zw1xZJWHD5VmoyqDaKJyscpqjkz68f7LUJy6TZMjXsyGBTFpTFyxonNXoVAXBK+0RqSefAlovCIp7zRt82uqT0UeNC68eabzREGvrdZ4TXocmmhWkYD1RsgYezAYhPBKxSIn4L5uSmEH33PYFeM6NZWmoZWzp0TlTuLIqS+esrdvL7Nr7to4j9KKuj2+9hmHQ2OKiv3OXFts0bnPXvEqCGte/dZxZlK2+x2IMVoKF7B+O5qvBIc79qe2ZIEetij/Rwrm+btakPVN9/M1ilf/npsR0YlRrBCW4YSK+CmBFQujrC3m+S8Ju4LHpH4nkYnJysgUVZxSJlOEfwx0uD7/GUZVIIPF5RdEjGmu8ReZm/0Af7uv5obkxNwuXvMKEb9rW1YbViRmrKxkPVLHPjRCrUuB8wyfx31SJC6Nswq2GEtXJdqucBTyVVflWFI9zuqybkrG4M4ci584piF0xKvC7dDZutTg/3uCJCYrLhUseQJkfkHC2z5f4odJxAoxLNLxC90Y6jrVmk8BeFvnl7t3h02X1SWGkYoNSa9v6o4H4GMjKTE/0XLrT4JTxJ63l9bQdeBsVy3Qi6aWJAGq/sGaSew6pnQIp0OzUgzA0ZmkKQKmtrRNiMBEVtmfeMNGBreSPDRm+vvA2zXhCBe2aS5P7KP6IJJSe6LBqz5Ei56TaOnWHeMhXMl445QWnFZOTK803ANrivZFmoBgL63JZ9voy6IknS+56R+f1DWvsvzpzWB19DIVc8mhfy6E5YI9dnpv9XEuRKw5QatQBLigNO8rTPRAhL1ec03hBwiMZFPTqL6H1E8/2X26SPWgBVUSts8n7TTMBJnmS17rjY3dML++JaWooj3xhV5mDb/e6xR3zRy5FfTvPH36NYQnfQbWiBzQOhBQ5NNFlU3ZY8czbQpnpgWi8Bxd3AwmPyNunMbt7pGj8G3WPuemhnnQlaZ/XfHpFTPbEoXsrmVvI0fu0cbgtWw41hmEIFPMty575POf9RhrpscIm4jKmFha8ldjdERqNKyPqlpb5Yx5lYIPBpkfcNt06HruzrseKVty0SzgorGALbNwvz73l6DSgh9lhy2KT0YjMaVMpauc79mWKtENlDTy3TB2zK78JVdAuz2w0NxmcWeZ0qlUa9vL2OCOdWSGZlmkf3HPSIYY7a0S3/otI0hwP2NMc3nI11Yw9k91we3kEECrWpHCdgDlKgVPNtLWLhKGF7ZcohA1gH5q3RQuqQ9w7NZqlbv+7Q/1JSsRXVky4J1YD2CPfs4lhm3aRb+QksBZc9Vpr2pq+7e74y7VGwdNegL6iDqZspLMjt1Jnr8RJxqWejmg8fkGF2cv10t+bZuJfdfXPvbXIcnSO+jdgneHNNkGGrihbmX3tuFWAEnFZT8yqnElEyFDQS3jJ53msXUKaLu4COb31KjLUCrih9oZ+oCV2U1jMFR+7uoOwQr9Bt92PkKHU0+XtBzRHBaRjrQ8Ozo1y3CQFhrEGQiXh6c+Yk3OS0PGjp1kWoJsDDYDyY76UIooOLWxMbUjT5MpGtDmhdDPZeE/yZN6kAJsENoaioZ5z9T6yMnd4KpCjOCpsYhmKimZZ+fN/YMfwcGHb1NT++2n6XSxcXVa/7cv+z7yc67dNKC1uT3ly6Y4N2FzcuokbcsdWvL64c91urT0+S6b5Y9NoJtq1FUS2QwazKM5dkkAXKnwc2dalH0j3pZVp7m0ibj1VOxm7aGk9cUJ1swGfbRL3K1/xsqijM9l37rdPcj1YUsMhGj22xTLFtjLevfZzfUhAaH1sl06a5+KxUWpZ5NA6lwq5AYkMHJNyzWTEcMzt9QSBF4I/CnlM8mQnAD0w0wsUUvbYpS5zi9z53h46FDv09lxT+YJVojc2chBiJIEjP9H1EnHf9yVWXllTdsCXgLOYk7njJJRI7JaqdR+PaAxBj4Ixj3iVnFNCGAC5ZsgD8e2siOrkW3FY9TOPfWXUmyzb8TLyQhRynZg28M31dCzs9s3yYP161d7Nj6uDvmW1UuX/42VRsAIlj+oMsGJZnUf7cGq0+lWhln14YqScT09o6NNdhLFMLPs6Rt/oMIJoYsJ+05ZQ0851tewu+ahpupMSENXDo1YamhshBb24benKkLp/2j7Bhwb5F8LHMN5mGnOeJedx7kuL1Sk58BTb1HRQH8Xjjccj/qw26c1yh6jVaDNjR3aTh/qjFmumg2K/pX94qWuvDJo1ip02Q2eQ02g6RRnbLeCtwrRLt2ZpjZJWHntwl3JkNfTJtiRwpF2S2XLbrM26mbBffNrpp+pyqeXm21xNN9Lt9yvk83Yn4ZYadaZZaBh5yyzmagub0aLuwO0yDo5dK/mrhwGp878QcWE8cXe0tM5dntMa6UQkrkSHFYGqUlwYKhXuHOL24SIK3ADReAvoQTmilsrUuhnkg3XH9oLaiObS8RGrr9mvNYY7Ww4Zegzpa24s529xTe+Qx1uq9GD2CEH4GR3bxE15VZk5T4U1CO8QjVBO8RXNKNgUNy6YLDxnJxCQCAWZYem0Lu+Z7QMtFGGZPvsoB8V9FtqJWcSe87O7a6ap2WYfFcU+wDH6UDd7wBH4EgzD/ucIX7qNIg6piAMKN4wTzh65pEwDw+6X0AhennNwVN1KK9SSIOvGWJINZbCRJatm7MDs7guh9X3YX41sFTkHMEOpE3lHeGvvbe7FiXxh8V3PT8+uZHxF1uM/1fwoLypKFiiF40Hpto87R9oAx7g7dj/fFizigJWSkfIXcIy/jhmOLLjJAhyDBbv7GeIG9uJa9sanxm9F48WXXVrE5y6Lxr1N+X8ZsHjfvFCgx19/765gffEJmLKcLzbkr3flpxfpwhwLu9WK1FS0AfLB+msHrqrm/s53p7HLA8t/lnvGEkGx4I46l9yD6SeLCoeFjgjJ9yy2TcuB31+zu6KSiddE/4lKFlwTA/Qfh2FwRE35eHtaA7T9X2Rs7eDqbOVlqcu8GFoycj7m4buHmPr1fEVbPkyjCdXw91hiSoqDrZG9JRxusAv3Qs+uoK6hjcNuoUvEvajYD4Li8pOtt7jWFdQ+LNw+LJYODQoMaj2Yyf1eU+2t9wpXZgIeXnH4+yS2PvygvrVZSW0LLTJImtCLLwqL7YALAmuSsluSd6L/vcvKWPwqhnHpZU++Xhpe7UlLiNZ1fnaFXf+ma2QGb/QkP4ESGA3CvX1haa2XsOm9zI4AZ3vHfON4HBPwwAQz+Zsx/5ZSC1/yirGvs92K/LOcVrzCr/Zvi606ret76qP2isxHlPCMLoD5cTL3KUEbOc6ngQuB3DZypoKc8N3u5SIqvvzahfez9mbXjL29nriZrL1InzYecPO2Gnr6Yfr6rvr6YXr6Q2rCf1dBq5Kz6UYThAZAArfV9wdWslrajLf9NN6rcv0SAsNXLdQ9KOIpYOYs+Dfjlu6ZeSsaY7Dp+o3PdRuPjO0c3S/YBV3Q2+TPZ7X1v/FLSqANInOfMR/THrClXy2jpV058sSk0vDQ1ImDcW2kFNLIdJ8HEu5odNLeTKN5jUxN46H2SQb6UCCBSWKCNNZ8WWDfd6mSyN/PM5Nh/gt8TqWzp2TfCrdNlz+rZVZmeGxajyhwyzY8iz+4Rcw/gAIHWlapTaXyTaXUVr1TJkmmJnogn7zz5aHSn6OysajSDlKFy1PKRLwMsfcb8TfohyzfWmYBjnEdtHr0E4Rzuqs3//7GbAurbYuGsUL/FxY5gH7bYf2D69lPYkV8WMBF+vjvj4gg7yhzSkSQ4w84qdt7Ui9L2e5xjjAp/lEx8+jf/bytoxSzi46BZ04cdTrlNdgwPY0pOBFt6+4Sf0FvqxRtH50n3AVtOVJivnjVeAX2nb/Al4j3AlhJbU6xCeYUuptdA4ifmeuOEjoJYL4VUh7CCqG7BuvstiK01GjYOZU5s5yLLzip363aLUAkwcG+PS4FwbG+eUF2rPDE9g33rN+Cz/vI4ZXeByhKcfTYvn2rv0t++kZ3R7EcS+MiaHdi3KKy/dLrhu5wwkkcQ6/zXArfuH4EueHcPOONYy0/FNPgJrjIdibf0B0JsiU4eqktEKd2DcHN1j0/xaTut6lcIt9964FDBoOP+eyz04yUkpMTBLOVUp6nY7cVGTiOFVibYE1Bekzo1cZypWoQnU1UvvXZN2o4eUzwxxdEpdmf059flOKy04P9MmKjEPB4JlBWnFxwnb6EW8CMYQhPGUu3Mgsz+MpYIp/lCFv3eKrzD8FY1GT2YY5qxs99WKE10JoNWwjbIg2BvsW9+HvMe3E/m5XdNazwSt9qgmqZtcHbNUqWqKe2Kuig/Ca2EWZ72nU7ijYZo9GjloHXvLb0Qi9cuuhpqW9uZ+jc2HT/DpKk52Bqec7X7OhWzv+t7cNvykEDS9oibc1UT3/91QRWXVQ9k8RkeCs37afhqjWPwkkDEokZpiEQwc9D/8Q4DcOC5uwm9cRlgXH4pyyI8qiRmGNKo5XKk1NMkgbwMVsqW5gkZm9lLxOOoRQnCpNi96QB3jK9HIQ8X2/MDZ5hngnzvOzjQhbmZEL8uy/J/XbulX7VH4d7YYnE3OXw+aL7hQpXRxsAaYEMm1BP8xXX4MZhj6BX7CossdKIPy9T8qIG3X3bQ1ccQsNs3WOucaRa11hxJcZkg48QA1n4+XlmxacioGJjcuvLPPIXG+oe7+gVGBeOItgQnwTyZV8qBQXHOVIzPH7+snvQKcsta7Rt7lVvE7MpyMrbyMrNO6jpW1OQnbf5qUuj7yMoa5FkD/3oxSyPNzYszzxCv5Aa6xo1mZqyMhXUz3aurhdtXDxtERDTN29h7y6SYCupcz7Nb9NfsY9u9H5A3lZv3jnfGUtofT/2Zz3hVr4mZvh+pqv54kUElAksov9mnnx7h7Ys451CQ+xeiolF10UR06Kz/C6Ge+DMlzFu4U3D5JBZzF+BlzcGmCQmHFanU+nv6MHZtXhpN8a2NI6Bl/Kwqv4BS8IOIr0idh7CP8QLSWvi90k/ynt/knGiZFEyVLt78t8zzZXIqv0NvKcH5a/S99a1qKn8HhOrmp+Q0/vvR2gJca8yZ/QR7hBhkpifQndfAONyxb/o12fYp8EsHyQu1C/H85IFy56aE+KLiQlg+WDe/nrBE5myHBi6XjMNCc3IeN/0KKfgi29CL/t5u2eQgXvMu0B1CAxEDmBub1WoUJx8MVEdSZ6FMsrQ73yb5HrZndrlS1aLSFqJSqkzYGL1gsXmBQVgovylE4+s185AEQMKtMimNUwS83mlwLNvQi/7eLtnkf57W/UdfRCi+huk5CrjmOQVuWtQ6DP7REtA9B3ffRy2//rZ1ta1KRiy91Vdi2uJCrdbESqNkV6OnAiE1Gg3pnraYBovUf9mfskku5DwVUER4gQE/z0aZOQl0S7y6kdFlrlzmO2eZyfri7cbpw7GoC7eObrncuMPFLUg/jE1tFug7RNmfqKQkFdb9J4d5c8rmeIQFioWFGYfB4sgRrFqBl/tNR3MmMN8kb5A4+r5svtyq+V/wrMuwot7n9mxB282LxMXu4jPHmyAmfztaNZSauELflH2DWf6Pl5NK1oSUEG++3gn5fGkIjwpiflXXl1JKuSJB574pEJwThcPFPdb+q5VV1oc+RhZELVC5KOEk3y+Se1lcMF7XwFnAWdK90WZSX034Uct0rKVw7zlkrPCy6Q/VO+FPGfIuix1gLomyxuEkbCR46OMH13gQNCGLCdFgYWbiP8WLus8cDlCNunb5JnBRFaknCpOjy52exLM5F+82tsl6dfm+1DylcIi38vX8g8lvNt8Oi7vj72L5hcsdl+8fzXh4l1zSec2ZzPp83eLEm0azKQ928DckDGx+QteCS9+/T21FFgWWLY08f82Oie9uMWaHHNyy4oTiHPLclL3a0nYToGggFhP6bv0PU3GKk324alfgp6evDTZVx/3GnIPmfmJLUToWuzzrPVQdwpvBP0K446XyzD6c2x2taXfOdclt6d55g3ah46/XO3sNb0UEr0dbRmif87BH7xGPo2A1yBtoWeVyFbu1LRrlSZnlSb7+HSbkKcnb0pdJ9J31l98MnIeWanvqqMBa5E2QLkU2xJrsCoOqrGiDqORZoUfpebJkD/uM1I7Rr/4mjJFoKQcJNk2WPJ7Mmtedwm0Nj/faXAT5sKYV5qlZmRfSZRG/HmRmh/d7+7XEbZiF0y5EBjfVbPrdkyHP3INLj2WrjOOla29f7zpbZY03ShWjj7sIUM3iZeltxnWLxXK0U9TpWpBtUiaygD4LAveDHgFosJCX17JpvJ6Xjm4OywdlGgKESASBoo2r5K6oYjkb6EP0kXCFvokfyjqTgLVb0zrII+HwR7WAaryaqpyaouC1sEeDk4h7jaB6vqq++XUjL/bhLg7OGVkByV7eVUt/MUSJ1RVZDnGroqYpPZpi5NVZS9YZotbXpei0gqadBools6GzmjFnW6KxWClThJfRs9EuVw0MmHorFocedIodeKavr7coNpsEG9eMwYGeweVl5ACQ12DfuWD6G6kwOCkUa8yKGvjZDG+wwMcrl5WM7NZln9PwD6dK7Gbn3ygVb5J/p1+EhJGofmQU4oiDtJ/6t0/FZaTGYMcYqmZFwXF+pJBH8P/zbfYi+Ln4hF+QTug+UoIwgTci7dE3yvxbQNv5fGbuDtx3RFFupFvT8YUG/F6RfqSL7jLnA8FH+LtGlkdDUFOohIT2hNTmnuQSGu2Lgo/fJzksPkVU0QKt+js8ISeGSRh3bBoOhdfUpxtNsAkDTGnO0isEJ/lOLHf5+RG+cZFX0b1iXW/+K/83yFxNzA1IOkgNoe0n9YdaC5tPl+/RdpinB8sHVSYaAIdl4CGANan533zrhn15IPMNsnvaqCF1EfVb4UV96UyfJSaVFLw1Ro6ICZgmeHo0ev9ORabHgLCKnvP9TmEhRYXABb6J2N6U8oLZy3HM92BKKB7pzCGsA/7+rL9Q3rW659MfYiCZ7ZHQkVxSewIM6wqjEnKBIcAoTfNRgVGDzr3NdRoYx4ON0Xvfnsrc8495m1329MX+GZ12rsRg9Gvn7TaerZ08QPyHcN2AlcCRZNc51yMb2cT5xud6BesHRpvw5lc/o58bcrh3JV9J7F6ky846CPMUwVRplX/jcaczC58H9nZslFY3PVvPHw2ruAM74XNbHq4t4tLbZT3UZq6Bin8CojOfXLue9h3WTZ+lbXMEFBeczoAfPfCt3t7e1+2VEUwIwoEMIsnVUFknjGHXDU7bOSL3Vcu500ki1YP1fN91EnEn/ixfGUb92sDXo/DNtPLgAubXp7Rwt89CYxzW+egLl6So5yvsoGTCUl5Gx6/qdiMJ64iy5N/J0NYUvzjWwXHHouo2ljtO1oiUjVLb2nNVGos2EW4WQZsMmTjJE/tkZGF7rt1hmp9egpPVaTu+fhItf33qDC76RU8FZgT+y0wJRMvkfy4oLbI44BkH36rMzbcqMadljj6+ZX8oqiw1wglAwoD2AI78obYB96101gMXZfcUfzFxbP/Gzwh+iMUCxwbjDk3Kna+b3B2aK9NCdplXf/GCBkOy0xKZ2tcaI/TRrdJBcRCGTGxMX8Bt/6gu7/WkME1oHM8quNarBcUORARJLHR24uC5vbHVYa53A99dKIfry2pnw1QEOrT9Qk+5f3k5jEJRg3I6TmZpk1h37z+f6y6WFNDrb++0pS/CFvc/Zyva1qqvf0hHPi27DeWB3cojEGR5xs9/eJrHzLeucc8TGQ50WI9KTlU18JrSXmZ9XBAP8ytLxNKwrtGRBfWH/UIbXxMW/KIfBjPdE5N8oksiPUq/i+hIKcODpNLhYbi512+7HNw7GzqmOCfDxjNKbxSdF5qaEh6bgQGgj7tZs1OCP76gNESYq2edkC807DRiKn0M4nT25IOe0cRA3R2688oxmwYrxyTkxYSmpVHAXDgYl/S7i13Dddj3kXMznrqByPxrWgN2n1i7pPwBdVWTAJSHf3zXVImoNatV5pH299g2Rcbzhl5JAZTH4/foNSGZRkE4vRh5fJ4dT4k+oROc9mNu/4C3MzY6j/y9nEscpZNx0TTFQlsQe9U/p/Rtthl5WHEHamh/HielF6F3q0i1B73i4rxADXej8h5s4uIUzaGihbp1nzanywSy4aOrm92lWFuBhASTGLvrCJdPW1oYvHoDq5HcARZqjzYZNp2AFcHxXbQM5ELcUH+H4WEMT2qXzCYl8NvltzeG2GItPF6MvnpxVMJZw4fCiOYlDMwjKTAmKQQaC6B5ncz2aeuWJKl0MfSS+Fkrwv5N+rNGDpIj1xnvZvHc2ujhDP2h2JwZlUNkGBd1Qu6IUs3RaS4iM7729JKkVMjQRQ2j9fcu3a9zjawPE0+4Ue9h1ahHbpPv+9yUxxA3JAq6u83iZm9/Y+7QT04hMjvxitczazHWCHx0Rvwbh4szpENL7jfRK+h908MfhIyP8DARCEl/isDUTE9A93QBucqGQa2Z5yO+yMxzWhlTXyWmkd9f0fL7kB7HrH17FCX9IvGiqHGgPrtDkYHk8TsZnQzZxELCzcjB4RciclFG0+MfxSzV36IODf0JaaGEvgToUOwXrC0RASp52n6T0K4rOFNyoXjD5L175T1rXZBa+/6jWgkIQkTjCnUGt2WZ/Cfh/NIetzYhi9cbDyHGOghRuH87h8lMhAL9OZ0U8vabrWfklejfr1Lz+90OqnS5XIkPSi9q0K6pOAhSGot9YzHjfdQrPtl/h+4Tm6LQ8FY0Fmb5wVEC8INezN6rXitLciGDohLIiYYzT9R9nFflGgMHh39utkT1okPBPWqW2vMf7SGOEdWQmY3xvMWl+56318u21C1+EqXftUXxKu/PNPbw/9evBMSnVsbRH6u2Tr0qOyOP2jMpJTRy0DPvz5gANOuGXXeh0itYTM35i4mZI0Rh/wvXzIrMgrg6tc5Ft2MA/k547d9f+C/pfFj+uNHfx+9fXM4ip832R9/5o3vN1k36+h1HtfHbpV+B+oU2/TWdDm9/NFQ38IfNrAl+W1OjNHHBlmD8/R5JtUnvf3M//lW5xp9rXSrtI/eJ+XFXSbh/CX7lDgcay5KKSz8r/BWigrj6cExAXLqXGZlctEBFNAOfFq0d+EfsudKbiGdnsDbxjlMHidz87VlAsiDAgAowG5EAjkOBMBi43YGxC5VC8LVHSYDTSF72TR4B98KQFUNnBu9bWDVqLqBBlM2A5tJtQyUpnGps1TIwDyjygbWkR40UBuiiNgqNapBBppK2QxsBtUy0GTKbuDmqKaBXXalLQPcqlBapxzRDqjYlCvArZ0ykckejp0LfoNytNdMgBmEIaBoYP2oRgCNyGPwIBMROUaopwpSWFOEW+jpLdGVnfdUwaAwNhuAcrTjaPmqfPAOkr9zyzlAcGTntoaHhZ0KjZec8vHAjSBlI0LkZd3Nbsxu5BiGzXpSdphKitsIviMHKc+yEKfZQAS+5PAgEuEixbxUcUowoJPwK3g7JDgpNl4PwhNSJaISZqO8EMgji2CEQASJ5XOxrQiUI6fNsG4GqkJQFFaQk1JNsY6o0w/LyLKlagbkUI52BDcmR1DjxkOjmqimjokeBBCSNCUQCQZtv7eEnEH0sGLQRUcJTL1NhXV+LFXSYZrTBiJ6sIEkcsCcbgS3AKLK2QbCQw+O8GBCYB/HyQorBMRou3LDnttx7iHJ9XbFWIaUWeVzOJ87eVak2sZtlSobxyQ9aNwGNGmVQFUMn2jURsfnXUuje922d73Cg8CcLrdHb2Wiz9U0kRvPoemdRYvLEwCFF7WLSw6tb5HlPid8ldxxOAbJfgdzPySlycbOlRw9PaSQvCQ0Mk+UiCyRIgokmzQQp/KK6FC5qHlBmYuaFfQV60CKvpf1pa7k6HMyqHWdThqL+6bnHZ91TtcCTsdGqAhhKTJ68UEDgJsEzS/ZUhXeFtivYe1NgK10irns4O4aM+736WHfPqYXKbHtdfbSOfty1ofj+ch4OH5uC4Kc/qkM0pfTfARJuY4c70kYELZrD0mAn/T5UuFfJa6zJFzan84/XSUNM2Jsf98BoV8Gkx1MUs4p3AG2t/awSoYjtmeL/bGS89LFzp8xj0d23Fcj1nvEdH9O7BJxlkv3dcxupbgk/iMawOZ6Wx5CIJqxPbrvT5VcGDDXc0w4YV2R9g2J2aiF1yneO8jmEmWRPNdxZ0f2xyzOR5zXt+dCGxdDF1EbU49O/b07sgH2Fa2dAHrpI6UAP1jskAMdd0a/W0fxACpXSRhl2NN3nFP3zZB80c+3ojSRQyRZnMW7X/jSb1f79uhllIyYoQD0fwCc96dwYs9CAGCaT8+yPv3NeI7+YxO7AwBA3zvfMwCA+ZDlf7/l/p9/2N+DARBhAAAggLC+OAGIKypwncREdW9XnyKZXD1G5AqQE4la4e8R7qEpbJPCQ0/5QmaC5t23l1TKSylvEaLWLkWNeZLs1KdZJRAl2WLjP0CfSZyRZA7nS6UreX+fJ0wOcTk56uIZLfSUYgpYnNhQpaUzCDdIx5lzh5mvO4SzwLQ1CltLpexwpGmyS4DcnuN9XpI8YSQj7GyuocVPTkrIDNo3v4p2btsTd07x9L3vFstU6pgLiMd+uxRdGwRo5QSJy/PLntBTPweVzWdxXZXw0FC+fsmJNMXzK81Gckoq84rjReXyDMtQ6hgI8TC5+u45xT47fAHL3SrB+t8opVL/LVd5dpQVdhcazmOogMLQRGdLaaRR7xKEZ5Zkx+b37bec7pebOtlTRKsVjo3iDoUruaZ6QY99loyVzjbqKPPIjss9QilGpJY6lQaQ72/ZecWpIeISLKQ0SSNHOL17tDJyEyF7FKl0N5k2KU0q6mgrrDjaoiqcCDlNZZEqdvb0DhmkdTbh/e5BKSGkSgDL2eQ5ixzHytEqOpAoJjkuZD2kN2V011+Fc0N4seCQ/WxKJ9PdDGojfkyp9DiZs11uFZXe7rE/eDejhQSiYI17g52PezDzhzd3LHDeEU9EDzHEeUFEERvEAkWIMOLJvzmCiDSiin1DFPGdF+dNIHaIFf9G7BFrPvd8iygiXogn4t7nNyKLGFbML6XjL0dPUH8QT54F8Uec+dygDuVK2Ll5Z0xgf22w3/foXorBbtQ71C3UkzuAAPgkhzAzOKEETlaCacHf74qNOxQSJQKAI4ClbRHiHLfF4BZRi6ZrsbQtjjyawEOrf6zcrA3Q5y8ARRAvHjyFkKZBjboJSjPmzwA+3HZsyg+ZqjjpEJ+4ZbYMFoVbX3ATJKx4rlQdz5/Lk4T40s4mS15C+eYIj4nn43KM2AaDBPOSfiBE9VRNh+hg9T9kun8VZFYLAUgOGDW8oOqygCrI1J7dqPIXxEP4REtkbvyQRfCz3hmm9BkyY9VJFYi8GlTvmHaWXAE=) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAAMAAA4AAAAABWwAAAKuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoIYgXkLEAABNgIkAxwEIAWDAAcgG0oEAB6D426JQgSiDJGrY+EepR5ejwf4/fWd+/C1EBKYZDS7sRFxHTf9uCJn/m9Of4qsOwRQBbqEex0QSbKziM9Pj42dA85/tYTLU84Cj+f+PIAlq3AtV5GCrQWUqr11TNFedSEUjKs7rSju46fX7RWCSHFAeYQcQRBEKIqiAgIKlGZBdO5a3w4akEBWj6orkgSzThrq5iF0WjfiKGe7e/0dAHkwOR8nW+GblHR72hyEGmzEl02NcDPu9oBKt35NVVBcoyEuIJNhau72SE3EHkhapkdqCiZGhBhliQWUJVETSCQCNfr8o/boWoBjI3miLHqQC4ojH22AaUBxFAUpIBJlJeIVGIvLFI6PlFi4hGYVs0brZ4ZZlT0rbz1SLT+50xlW3X269vh2x+CpO/n7bw02ebvIys0wMkpteMHUIq4PGfxCRBdKjxXGaDRIc42rK+a/qgeebsfBvjGMiQ14cnJjW8fSe6fHlr2NIrgbeH2jS+k9X+md9WJP/5IvZ8LRg1cQ3gz+dJMePnr2/6ZSiy3c9rHc87Zj4tqOx0WLe1U0VR2OOEt9kq4gV/r/NBEyVbPvpL70poCoTunu3LVVZ4nW3xWV8gAKP5VqBMD10Pruq+7/52x5c4B8EQjkzs5oyJ/1JzxT0mgEACA3XjUZACFDut7UuAEqPZepikCuTcprJBVAcSJREzIBeaYSC4kSGAs2BJU5IFLcQjt+sxNAqr55kwOx947iBrvVCRYwpBuDQusVLFWyFCmCVcEwCg8JVsPPK1GwEjxesNZJv6dyHtID6dYP8UnUCvPAemHBGiA+jD6CVgilD8+tWyfSPRiYXwVJDNNkydPUzvrRmeBZvFdArqSTDSCJ3ALcvDp0JBHWjTK8pb0Qvx7N35CkXo0yFRq1qZAgVaJkYiA7H3AA) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAA2QAA4AAAAAHpwAAA05AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGjQbhlocNgZgAIEAEQwKpyCiAguCFgABNgIkA4QoBCAFgwAHIBvzGSMD9YOxSif4qwPz0HjxoHC9VRNbrMu/12kLLcb/5dFJkAyh0DCYQABqQVD7hmAGzfIo/4k/8899o8ALZ4VCytZgim8X1vbXSKk3P7+/99yvLGmCnpXn1FfyhvB+f5FagPgStyR8kP87bfntzf9vCnc4PA/hUOgM9tZ3O7ENQqEEaozVJgy1CWz36yYeaBRQZEFQSKmFVAH8X01TKv3d/p/dz00uqGnOCfsA5ILCOgsLIdKmyIp0bqWzlFZZCAmvpUEHN4DDYAAgAZDElqjeg6N0eSgukSleVCbzvyIQgwsAAGlsmHB+SKQIJMsvQgyAA+BAAALYpKlzDK29MyjOWJmF4grDGCgeV5WHIrQ9ZR7cEJdwAIAABsDgMwRaIwD5JAVwBn0qhE3bhzqZED5wH9ChbwNV0I/Gbp7Y8MvXnHL8+34hgHxO8x7nho4BIfruwvrFlXJejpEXr95QP5TKdnycP82rfo+/2cIHccrW0TMwMjEzb9GyVes2IdH/CXRWWWoABZK/QyHXnNr4t92jdch8kcaXGAOXvZup6l10nhMX0N8CsFLyssunnZMSac8IgwZAgqUFmUGzUj8AiaSwIQA3qBLkFg5fAuVllk8PQATTamBesoC+kDLBQjVbbxgUSZJkSXanLIgvQOsTs6yhL9IgrpAAUB3Pzx6vAjA6hXjSSo4rD6lWA2NtUJnQk/6SwASgu6ozQBLoOwDgZQWMJCSBGZHt8OQQOEffex8JDxgkMfISH/kSimD/c/9L//ukv/R/gAzyEC/5UAsN+b/3v/C/Kl+UzgQ0M/eZw//1erjoYYUbC+5fXXwxAzuriHEqlgb9H270mw0AZLrcCoBxDOCVAdEVYPEAAHG3XLofczKvYcmEVkXI0Pi76yaAs3tnYQ7udZFZMXmincQeacG0eexkHk5jx4xx0drpYq2EkW487uIKpW4VLtxFl9sZ7nGRueLdMWN8/HD925L4kb8r3mXjiLfHOqKcTmOI0d3wjPEifTtO2xh7/MTL67a8mxebU+qlW/MeXmjWNPXalne+KSZesOf/T/Ey5bYt7y7h2OXEPHshwxnRh1axnsJ0s9ioQLWFS8XqjowxcmB+iMA4jGKGxnuyiQi0YFvWD9DVVp1Mm89Tu0hTA40TfCidkFVhx2b0D/DZ/h6wUlKuFXHcPJ0XL4JzRczTkvE2YTqO3LS+9k/0aSU6zBKp0PodOK0dPYA0pTRZlaUcLk8X628YDcOg9Uo1i63iArYw58MJ97UvQCAgRvUGt134eMzpzPt+OuaJ4Btax4S7MlXeW5ftLl0o2RKrSgVqt0q7yKD0fhTmvVIthpIjLNPUhm0HNKspGd+lN273ov6JSROz8bmfV2hK78GgOqRwzjYMAcNqaJWgbJw1D+657xwJbNHsBuZl1kiO7ZB5msExOrcIeXk7Z9FQreio2YzPnL3VN3FIK4RL4osobCD9ggo3q7E0cnxZ31HbKVAa835F+/XOWPzl0xj8BWM0hX9+/Wc6SrFyL/NsC4TyTq4x/L09+tYPGGjtZqI5MlC+SJPiwxrjsHdb+Thl2Epcd/+vp9ug4uDZVju3bG8EYuWq3bVlVvjuE8Ba+QmY3lx9vgTy/b0Gofx7mQpONs5bpun7u6vvz6WqOPuJv1hP3T9PAnrY9Nlm0fn76P9v9PNW7t3Pcn3/wGV7e/TT8cXltSWcxfej/+f6CK1/ygpaM9q/ZAUdykzcUblQCZKCpw47hSPATHuNITHdbXubcgfAxqdLtZs6eriY+5qpfm4VWbfdYtz8w+3o/fcX8zb3GoOB8Zq/jk7JznZsruVgBuqnfbhXcM/fviP4XwIbl+3BfdPH518VefG8Y/zGyKUaU/erTqqMmjANWobd86e88P841rwxL//uWYzhtseW+XV99G8+09MSKrtc9rapf+cxOp907Amfih2UACa8LPuSokvXzM3QzpUtVSuQoRUA9TO+G2femllx44mxvbC0jP54e1bVU19h8wXub7Nmv+XsmGovWIgdkT8LCu/s3TtxbeXo3p5tn6eP/4Uojbd+LnsHb+xvrjD621c7ex6XeL71dNu2EH39lLZRe0tIEFYSEeEF96BO2sH/NquRqsax+vSx92PRy6L/ZJjb/xs8+aX8S5gad2uitfBFr/qP+s3IoT85baY95uSYlOa/Ytz75H2z4fOdSwptxOv+49EYZfww9tOtmRUPZ1VAhXoN7sqyXu2VVnEsNSZ8P/rj3VmVj8MK0MdKI7oKZvF2f7/bvlbHSaixJ5vP9lrsb/2YN55aPlzUjsIXuyN8Q7nimbWkahVMfdJH8eKP7CtL6yvql5zEYQtQaN3d8f/Vcw+vKGk9VFsnQzcAgRLDHvQfX+qSObFnub9iMwIFg+r3b6rSucz3rYpntCyEnFd3ZWmAq8alBpZhx/3R691SsV49bTxN3HpWombNDO2aftqaGVo1QNHTMxp7G0FhgXT6N35ZJRzbBZGsUy63lr5C8T5HN4TuSAExeTd+YH9/9tvCpsKzYkX+uPq/rREl9l7MO2edTuj7w8g2jee2u/YG7+1ajUJQSxHvt2wMlwm3RyRUnCR9ZuXb1JEJVI7Cn/hnLkQKl7JDS6buVWzZXqnI6CqccXPiWkVVbumsmDO+Mnfs1ngUFrCjuK7H1nePKtRtpdu/MYvK8jvWeUCyQenqNQzkil2NVpG10J7Fllwsnb9tMq4uUq9MNYWHQsNWev4Xl9IYn2+rVJ0yNQO6CsUWuPTb+2nLTqyZk7govUdsvY7+miIzaub3r0rD6rkzvTNx/y7l/PWTwtHcEz/LFf5jX8U5d3b/tHP20zOtt8fe7101+BRGBjgAhTi8QSspgoNPBIhMjNdypAwRnEv/opY4rCEZ1avIvEaUVGuHgh33F3Z8Cm4fAcJ7/IIIbMseP1eFakWCwKLyIoEXQ+rJ2EFsPRLJuSESKdhLAlpK/TciFXuIQkutd9VOs/qwotPqn+SZiF2VtN+9ZCC2nms9HU9JtEcifdRHTp+UNklk4AlJaxkjITLxHK18TeYY6cy8S4sGFjeaiFYKke/ABq6aYkAjEvg2qYsEng6px2M2KfdIxFejJJIxlXi15AohkYJZJK6lVH0jUjGT6LXUKlftNKuPMDqt6kmeidhVKFWC8a9UpR4qg1iMjBBrPLTWKP4ASOkGd4CNqjjBBFBPE2/U/4BPIGEED6kBRc5Rj6cxKHKJejwtQJGL1ONpDopcoh5PC1Bw0fKLWKm5axKZGEYnJCGjxBobQDOpnYpPascmkSCoSU4k8HpIPR7nSLJHIr4NJd0vsAF0xOv0d2lh/gkAvASSlm2cz9GCl5TKaO/8giAZwzXWOqSZ1E6lNTs2YiWcnnQghtfpTxDNL5I6jQlo/RiiHTqGGFIEVr4Oj/QZarT0GMY3R1UEH7H1WVUZ6guPIaA6f1MmEinTgKBgwxc6EABM0AO2Ex+bDxBVFSNa6xD7Le7qEcBYqCR0M2CMFe8xTof4nBLECB1i38Ub4AD8nJKGw6yDcS4BfOZyAQkYrc2v2G9ef1k6UyCnyRG1FTKAn8oEeHSRg7pOjrI591BlLXtYPUe4P2wTrGRCJMHgGoyiYItyiLJIWpI3l6WMZyDuImg2cQMBo4kZ5AS8PjGAqWWmQyFyGpXg4g0ShFtt7NiUCTqPKsZ0kY2Milysnlbpyx6GO/eHbYOVsp8k/AQY3r4LAPosx3PvOuoSMEbqU1GJOEP3IwpmsYoG5mKuxI3QXYdkpmaYDgXJzEhXhXTcyQRkUuSgbpOxNnKvykX2kHqO5KK2CVYycRINLSN7lcSezEhAMAmZlI+Jb8wMMinMzDmxvBvjevE5AWPEuIl952WfKzqTL6dRvFRS0IwIXvGGboTIUCrLxCNmzmESjZnBi+DlUObP/FzAcJhudo7LP7cwIzNBBd8o8Q3G5r98WAIQACPV93vL+zZnt+JrS4wFAMDeZ96CAJBHZqEPaZ/zrA6WcABWGAAAAlRf0wFY+6iYWQXbhQfds1kBuoKR+c2LJvDxLAQNCD+JLHQXMhjHH0Cxr8GMIIpwC7TmGWjA9dHEIMA4XoQGPAwj2FM4jK8wkL9FA4MeC0QeWvImNBDtGMc/IZo9Q5AlYBi7xGjgszLwmZFNYSFDYRgnwGhOoA2SAMNys7VQL2z0W2+4vYHx9BqDXjfj1ugPea5ucWPFs6H+EsseGAvWvYTE9NkW6fk6jBSjMbk9aBBgZLwY3+JIydwi3aazol0qmhOThVn3YulgxbpovJwf0WAQBJhtgUgHnAgAuMBgNLgQwKI7O0o8ALQHkk5iPegGl5ErsvKKHLqQ4cuWgL+rdWnqnzqByCKjEEiqtK62TpaYtkkwwFnYuNt4r5r2ckFlc07MjiLa2LgNI9NT2Ztmoa/ghUClirT9YgdFw1lsQihjPdvUi0SZgnJ4J2qzp2dk5mvl0aLpGkhmliiaahGjremZmNuvKn9Mk0BG2Cx3vMLwns9H0bJn26p1B06ta7hoaLMbzEz39gYAAA==) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fira Code;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff;base64,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) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Fira Code;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff;base64,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) format("woff");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Fira Code;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff;base64,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) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Fira Code;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff;base64,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) format("woff");unicode-range:U+0370-03FF}@font-face{font-family:Fira Code;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff;base64,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) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fira Code;font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff;base64,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) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.graphiql-container *{box-sizing:border-box;font-variant-ligatures:none}.graphiql-container,.CodeMirror-info,.CodeMirror-lint-tooltip,.graphiql-dialog,.graphiql-dialog-overlay,.graphiql-tooltip,[data-radix-popper-content-wrapper]{--color-primary: 320, 95%, 43%;--color-secondary: 242, 51%, 61%;--color-tertiary: 188, 100%, 36%;--color-info: 208, 100%, 46%;--color-success: 158, 60%, 42%;--color-warning: 36, 100%, 41%;--color-error: 13, 93%, 58%;--color-neutral: 219, 28%, 32%;--color-base: 219, 28%, 100%;--alpha-secondary: .76;--alpha-tertiary: .5;--alpha-background-heavy: .15;--alpha-background-medium: .1;--alpha-background-light: .07;--font-family: "Roboto", sans-serif;--font-family-mono: "Fira Code", monospace;--font-size-hint:.75rem;--font-size-inline-code:.8125rem;--font-size-body:.9375rem;--font-size-h4:1.125rem;--font-size-h3:1.375rem;--font-size-h2:1.8125rem;--font-weight-regular: 400;--font-weight-medium: 500;--line-height: 1.5;--px-2: 2px;--px-4: 4px;--px-6: 6px;--px-8: 8px;--px-10: 10px;--px-12: 12px;--px-16: 16px;--px-20: 20px;--px-24: 24px;--border-radius-2: 2px;--border-radius-4: 4px;--border-radius-8: 8px;--border-radius-12: 12px;--popover-box-shadow: 0px 6px 20px rgba(59, 76, 106, .13), 0px 1.34018px 4.46726px rgba(59, 76, 106, .0774939), 0px .399006px 1.33002px rgba(59, 76, 106, .0525061);--popover-border: none;--sidebar-width: 60px;--toolbar-width: 40px;--session-header-height: 51px}@media (prefers-color-scheme: dark){body:not(.graphiql-light) .graphiql-container,body:not(.graphiql-light) .CodeMirror-info,body:not(.graphiql-light) .CodeMirror-lint-tooltip,body:not(.graphiql-light) .graphiql-dialog,body:not(.graphiql-light) .graphiql-dialog-overlay,body:not(.graphiql-light) .graphiql-tooltip,body:not(.graphiql-light) [data-radix-popper-content-wrapper]{--color-primary: 338, 100%, 67%;--color-secondary: 243, 100%, 77%;--color-tertiary: 188, 100%, 44%;--color-info: 208, 100%, 72%;--color-success: 158, 100%, 42%;--color-warning: 30, 100%, 80%;--color-error: 13, 100%, 58%;--color-neutral: 219, 29%, 78%;--color-base: 219, 29%, 18%;--popover-box-shadow: none;--popover-border: 1px solid hsl(var(--color-neutral))}}body.graphiql-dark .graphiql-container,body.graphiql-dark .CodeMirror-info,body.graphiql-dark .CodeMirror-lint-tooltip,body.graphiql-dark .graphiql-dialog,body.graphiql-dark .graphiql-dialog-overlay,body.graphiql-dark .graphiql-tooltip,body.graphiql-dark [data-radix-popper-content-wrapper]{--color-primary: 338, 100%, 67%;--color-secondary: 243, 100%, 77%;--color-tertiary: 188, 100%, 44%;--color-info: 208, 100%, 72%;--color-success: 158, 100%, 42%;--color-warning: 30, 100%, 80%;--color-error: 13, 100%, 58%;--color-neutral: 219, 29%, 78%;--color-base: 219, 29%, 18%;--popover-box-shadow: none;--popover-border: 1px solid hsl(var(--color-neutral))}.graphiql-container,.CodeMirror-info,.CodeMirror-lint-tooltip,.graphiql-dialog,.graphiql-container:is(button),.CodeMirror-info:is(button),.CodeMirror-lint-tooltip:is(button),.graphiql-dialog:is(button){color:hsla(var(--color-neutral),1);font-family:var(--font-family);font-size:var(--font-size-body);font-weight:var(----font-weight-regular);line-height:var(--line-height)}.graphiql-container input,.CodeMirror-info input,.CodeMirror-lint-tooltip input,.graphiql-dialog input{color:hsla(var(--color-neutral),1);font-family:var(--font-family);font-size:var(--font-size-caption)}.graphiql-container input::placeholder,.CodeMirror-info input::placeholder,.CodeMirror-lint-tooltip input::placeholder,.graphiql-dialog input::placeholder{color:hsla(var(--color-neutral),var(--alpha-secondary))}.graphiql-container a,.CodeMirror-info a,.CodeMirror-lint-tooltip a,.graphiql-dialog a{color:hsl(var(--color-primary))}.graphiql-container a:focus,.CodeMirror-info a:focus,.CodeMirror-lint-tooltip a:focus,.graphiql-dialog a:focus{outline:hsl(var(--color-primary)) auto 1px}.graphiql-un-styled,button.graphiql-un-styled{all:unset;border-radius:var(--border-radius-4);cursor:pointer}:is(.graphiql-un-styled,button.graphiql-un-styled):hover{background-color:hsla(var(--color-neutral),var(--alpha-background-light))}:is(.graphiql-un-styled,button.graphiql-un-styled):active{background-color:hsla(var(--color-neutral),var(--alpha-background-medium))}:is(.graphiql-un-styled,button.graphiql-un-styled):focus{outline:hsla(var(--color-neutral),var(--alpha-background-heavy)) auto 1px}.graphiql-button,button.graphiql-button{background-color:hsla(var(--color-neutral),var(--alpha-background-light));border:none;border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),1);cursor:pointer;font-size:var(--font-size-body);padding:var(--px-8) var(--px-12)}:is(.graphiql-button,button.graphiql-button):hover,:is(.graphiql-button,button.graphiql-button):active{background-color:hsla(var(--color-neutral),var(--alpha-background-medium))}:is(.graphiql-button,button.graphiql-button):focus{outline:hsla(var(--color-neutral),var(--alpha-background-heavy)) auto 1px}.graphiql-button-success:is(.graphiql-button,button.graphiql-button){background-color:hsla(var(--color-success),var(--alpha-background-heavy))}.graphiql-button-error:is(.graphiql-button,button.graphiql-button){background-color:hsla(var(--color-error),var(--alpha-background-heavy))}.graphiql-button-group{background-color:hsla(var(--color-neutral),var(--alpha-background-light));border-radius:calc(var(--border-radius-4) + var(--px-4));display:flex;padding:var(--px-4)}.graphiql-button-group>button.graphiql-button{background-color:transparent}.graphiql-button-group>button.graphiql-button:hover{background-color:hsla(var(--color-neutral),var(--alpha-background-light))}.graphiql-button-group>button.graphiql-button.active{background-color:hsl(var(--color-base));cursor:default}.graphiql-button-group>*+*{margin-left:var(--px-8)}.graphiql-dialog-overlay{position:fixed;inset:0;background-color:hsla(var(--color-neutral),var(--alpha-background-heavy));z-index:10}.graphiql-dialog{background-color:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-12);box-shadow:var(--popover-box-shadow);margin:0;max-height:80vh;max-width:80vw;overflow:auto;padding:0;width:unset;transform:translate(-50%,-50%);top:50%;left:50%;position:fixed;z-index:10}.graphiql-dialog-close>svg{color:hsla(var(--color-neutral),var(--alpha-secondary));display:block;height:var(--px-12);padding:var(--px-12);width:var(--px-12)}.graphiql-dropdown-content{background-color:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-8);box-shadow:var(--popover-box-shadow);font-size:inherit;max-width:250px;padding:var(--px-4);font-family:var(--font-family);color:hsl(var(--color-neutral));max-height:min(calc(var(--radix-dropdown-menu-content-available-height) - 10px),400px);overflow-y:scroll}.graphiql-dropdown-item{border-radius:var(--border-radius-4);font-size:inherit;margin:var(--px-4);overflow:hidden;padding:var(--px-6) var(--px-8);text-overflow:ellipsis;white-space:nowrap;outline:none;cursor:pointer;line-height:var(--line-height)}.graphiql-dropdown-item[data-selected],.graphiql-dropdown-item[data-current-nav],.graphiql-dropdown-item:hover{background-color:hsla(var(--color-neutral),var(--alpha-background-light));color:inherit}.graphiql-dropdown-item:not(:first-child){margin-top:0}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) blockquote{margin-left:0;margin-right:0;padding-left:var(--px-8)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) code,:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) pre{border-radius:var(--border-radius-4);font-family:var(--font-family-mono);font-size:var(--font-size-inline-code)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) code{padding:var(--px-2)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) pre{overflow:auto;padding:var(--px-6) var(--px-8)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) pre code{background-color:initial;border-radius:0;padding:0}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ol,:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ul{padding-left:var(--px-16)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ol{list-style-type:decimal}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ul{list-style-type:disc}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) img{border-radius:var(--border-radius-4);max-height:120px;max-width:100%}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation)>:first-child{margin-top:0}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation)>:last-child{margin-bottom:0}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) a{color:hsl(var(--color-primary));text-decoration:none}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) a:hover{text-decoration:underline}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) blockquote{border-left:1.5px solid hsla(var(--color-neutral),var(--alpha-tertiary))}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) code,:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) pre{background-color:hsla(var(--color-neutral),var(--alpha-background-light));color:hsla(var(--color-neutral),1)}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description)>*{margin:var(--px-12) 0}:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) a{color:hsl(var(--color-warning));text-decoration:underline}:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) blockquote{border-left:1.5px solid hsl(var(--color-warning))}:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) code,:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) pre{background-color:hsla(var(--color-warning),var(--alpha-background-heavy))}:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation)>*{margin:var(--px-8) 0}.graphiql-markdown-preview>:not(:first-child){display:none}.CodeMirror-hint-information-deprecation,.CodeMirror-info .info-deprecation{background-color:hsla(var(--color-warning),var(--alpha-background-light));border:1px solid hsl(var(--color-warning));border-radius:var(--border-radius-4);color:hsl(var(--color-warning));margin-top:var(--px-12);padding:var(--px-6) var(--px-8)}.CodeMirror-hint-information-deprecation-label,.CodeMirror-info .info-deprecation-label{font-size:var(--font-size-hint);font-weight:var(--font-weight-medium)}.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation-reason{margin-top:var(--px-6)}.graphiql-spinner{height:56px;margin:auto;margin-top:var(--px-16);width:56px}.graphiql-spinner:after{animation:rotation .8s linear 0s infinite;border:4px solid transparent;border-radius:100%;border-top:4px solid hsla(var(--color-neutral),var(--alpha-tertiary));content:"";display:inline-block;height:46px;vertical-align:middle;width:46px}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.graphiql-tooltip{background:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-4);box-shadow:var(--popover-box-shadow);color:hsl(var(--color-neutral));font-size:inherit;padding:var(--px-4) var(--px-6);font-family:var(--font-family)}.graphiql-tabs{display:flex;align-items:center;overflow-x:auto;padding:var(--px-12)}.graphiql-tabs>:not(:first-child){margin-left:var(--px-12)}.graphiql-tab{align-items:stretch;border-radius:var(--border-radius-8);color:hsla(var(--color-neutral),var(--alpha-secondary));display:flex}.graphiql-tab>button.graphiql-tab-close{visibility:hidden}.graphiql-tab.graphiql-tab-active>button.graphiql-tab-close,.graphiql-tab:hover>button.graphiql-tab-close,.graphiql-tab:focus-within>button.graphiql-tab-close{visibility:unset}.graphiql-tab.graphiql-tab-active{background-color:hsla(var(--color-neutral),var(--alpha-background-heavy));color:hsla(var(--color-neutral),1)}button.graphiql-tab-button{padding:var(--px-4) 0 var(--px-4) var(--px-8)}button.graphiql-tab-close{align-items:center;display:flex;padding:var(--px-4) var(--px-8)}button.graphiql-tab-close>svg{height:var(--px-8);width:var(--px-8)}.graphiql-history-header{font-size:var(--font-size-h2);font-weight:var(--font-weight-medium);display:flex;justify-content:space-between;align-items:center}.graphiql-history-header button{font-size:var(--font-size-inline-code);padding:var(--px-6) var(--px-10)}.graphiql-history-items{margin:var(--px-16) 0 0;list-style:none;padding:0}.graphiql-history-item{border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));display:flex;font-size:var(--font-size-inline-code);font-family:var(--font-family-mono);height:34px}.graphiql-history-item:hover{color:hsla(var(--color-neutral),1);background-color:hsla(var(--color-neutral),var(--alpha-background-light))}.graphiql-history-item:not(:first-child){margin-top:var(--px-4)}.graphiql-history-item.editable{background-color:hsla(var(--color-primary),var(--alpha-background-medium))}.graphiql-history-item.editable>input{background:transparent;border:none;flex:1;margin:0;outline:none;padding:0 var(--px-10);width:100%}.graphiql-history-item.editable>input::placeholder{color:hsla(var(--color-neutral),var(--alpha-secondary))}.graphiql-history-item.editable>button{color:hsl(var(--color-primary));padding:0 var(--px-10)}.graphiql-history-item.editable>button:active{background-color:hsla(var(--color-primary),var(--alpha-background-heavy))}.graphiql-history-item.editable>button:focus{outline:hsl(var(--color-primary)) auto 1px}.graphiql-history-item.editable>button>svg{display:block}button.graphiql-history-item-label{flex:1;padding:var(--px-8) var(--px-10);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}button.graphiql-history-item-action{align-items:center;color:hsla(var(--color-neutral),var(--alpha-secondary));display:flex;padding:var(--px-8) var(--px-6)}button.graphiql-history-item-action:hover{color:hsla(var(--color-neutral),1)}button.graphiql-history-item-action>svg{height:14px;width:14px}.graphiql-history-item-spacer{height:var(--px-16)}.graphiql-doc-explorer-default-value{color:hsl(var(--color-success))}a.graphiql-doc-explorer-type-name{color:hsl(var(--color-warning));text-decoration:none}a.graphiql-doc-explorer-type-name:hover{text-decoration:underline}a.graphiql-doc-explorer-type-name:focus{outline:hsl(var(--color-warning)) auto 1px}.graphiql-doc-explorer-argument>*+*{margin-top:var(--px-12)}.graphiql-doc-explorer-argument-name{color:hsl(var(--color-secondary))}.graphiql-doc-explorer-argument-deprecation{background-color:hsla(var(--color-warning),var(--alpha-background-light));border:1px solid hsl(var(--color-warning));border-radius:var(--border-radius-4);color:hsl(var(--color-warning));padding:var(--px-8)}.graphiql-doc-explorer-argument-deprecation-label{font-size:var(--font-size-hint);font-weight:var(--font-weight-medium)}.graphiql-doc-explorer-deprecation{background-color:hsla(var(--color-warning),var(--alpha-background-light));border:1px solid hsl(var(--color-warning));border-radius:var(--px-4);color:hsl(var(--color-warning));padding:var(--px-8)}.graphiql-doc-explorer-deprecation-label{font-size:var(--font-size-hint);font-weight:var(--font-weight-medium)}.graphiql-doc-explorer-directive{color:hsl(var(--color-secondary))}.graphiql-doc-explorer-section-title{align-items:center;display:flex;font-size:var(--font-size-hint);font-weight:var(--font-weight-medium);line-height:1}.graphiql-doc-explorer-section-title>svg{height:var(--px-16);margin-right:var(--px-8);width:var(--px-16)}.graphiql-doc-explorer-section-content{margin-left:var(--px-8);margin-top:var(--px-16)}.graphiql-doc-explorer-section-content>*+*{margin-top:var(--px-16)}.graphiql-doc-explorer-root-type{color:hsl(var(--color-info))}.graphiql-doc-explorer-search{color:hsla(var(--color-neutral),var(--alpha-secondary))}.graphiql-doc-explorer-search:not([data-state="idle"]){border:var(--popover-border);border-radius:var(--border-radius-4);box-shadow:var(--popover-box-shadow);color:hsla(var(--color-neutral),1)}.graphiql-doc-explorer-search:not([data-state="idle"]) .graphiql-doc-explorer-search-input{background:hsl(var(--color-base))}.graphiql-doc-explorer-search-input{align-items:center;background-color:hsla(var(--color-neutral),var(--alpha-background-light));border-radius:var(--border-radius-4);display:flex;padding:var(--px-8) var(--px-12)}.graphiql-doc-explorer-search [role=combobox]{border:none;background-color:transparent;margin-left:var(--px-4);width:100%}.graphiql-doc-explorer-search [role=combobox]:focus{outline:none}.graphiql-doc-explorer-search [role=listbox]{background-color:hsl(var(--color-base));border:none;border-bottom-left-radius:var(--border-radius-4);border-bottom-right-radius:var(--border-radius-4);border-top:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));max-height:400px;overflow-y:auto;margin:0;font-size:var(--font-size-body);padding:var(--px-4);position:relative}.graphiql-doc-explorer-search [role=option]{border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));overflow-x:hidden;padding:var(--px-8) var(--px-12);text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.graphiql-doc-explorer-search [role=option][data-headlessui-state=active]{background-color:hsla(var(--color-neutral),var(--alpha-background-light))}.graphiql-doc-explorer-search [role=option]:hover{background-color:hsla(var(--color-neutral),var(--alpha-background-medium))}.graphiql-doc-explorer-search [role=option][data-headlessui-state=active]:hover{background-color:hsla(var(--color-neutral),var(--alpha-background-heavy))}:is(.graphiql-doc-explorer-search [role="option"])+:is(.graphiql-doc-explorer-search [role="option"]){margin-top:var(--px-4)}.graphiql-doc-explorer-search-type{color:hsl(var(--color-info))}.graphiql-doc-explorer-search-field{color:hsl(var(--color-warning))}.graphiql-doc-explorer-search-argument{color:hsl(var(--color-secondary))}.graphiql-doc-explorer-search-divider{color:hsla(var(--color-neutral),var(--alpha-secondary));font-size:var(--font-size-hint);font-weight:var(--font-weight-medium);margin-top:var(--px-8);padding:var(--px-8) var(--px-12)}.graphiql-doc-explorer-search-empty{color:hsla(var(--color-neutral),var(--alpha-secondary));padding:var(--px-8) var(--px-12)}a.graphiql-doc-explorer-field-name{color:hsl(var(--color-info));text-decoration:none}a.graphiql-doc-explorer-field-name:hover{text-decoration:underline}a.graphiql-doc-explorer-field-name:focus{outline:hsl(var(--color-info)) auto 1px}.graphiql-doc-explorer-item>:not(:first-child){margin-top:var(--px-12)}.graphiql-doc-explorer-argument-multiple{margin-left:var(--px-8)}.graphiql-doc-explorer-enum-value{color:hsl(var(--color-info))}.graphiql-doc-explorer-header{display:flex;justify-content:space-between;position:relative}.graphiql-doc-explorer-header:focus-within .graphiql-doc-explorer-title{visibility:hidden}.graphiql-doc-explorer-header:focus-within .graphiql-doc-explorer-back:not(:focus){color:transparent}.graphiql-doc-explorer-header-content{display:flex;flex-direction:column;min-width:0}.graphiql-doc-explorer-search{position:absolute;right:0;top:0}.graphiql-doc-explorer-search:focus-within{left:0}.graphiql-doc-explorer-search [role=combobox]{height:24px;width:4ch}.graphiql-doc-explorer-search [role=combobox]:focus{width:100%}a.graphiql-doc-explorer-back{align-items:center;color:hsla(var(--color-neutral),var(--alpha-secondary));display:flex;text-decoration:none}a.graphiql-doc-explorer-back:hover{text-decoration:underline}a.graphiql-doc-explorer-back:focus{outline:hsla(var(--color-neutral),var(--alpha-secondary)) auto 1px}a.graphiql-doc-explorer-back:focus+.graphiql-doc-explorer-title{visibility:unset}a.graphiql-doc-explorer-back>svg{height:var(--px-8);margin-right:var(--px-8);width:var(--px-8)}.graphiql-doc-explorer-title{font-weight:var(--font-weight-medium);font-size:var(--font-size-h2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.graphiql-doc-explorer-title:not(:first-child){font-size:var(--font-size-h3);margin-top:var(--px-8)}.graphiql-doc-explorer-content>*{color:hsla(var(--color-neutral),var(--alpha-secondary));margin-top:var(--px-20)}.graphiql-doc-explorer-error{background-color:hsla(var(--color-error),var(--alpha-background-heavy));border:1px solid hsl(var(--color-error));border-radius:var(--border-radius-8);color:hsl(var(--color-error));padding:var(--px-8) var(--px-12)}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;inset:-50px 0 0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error,.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;inset:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors,.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.graphiql-container .CodeMirror{height:100%;position:absolute;width:100%}.graphiql-container .CodeMirror{font-family:var(--font-family-mono)}.graphiql-container .CodeMirror,.graphiql-container .CodeMirror-gutters{background:none;background-color:var(--editor-background, hsl(var(--color-base)))}.graphiql-container .CodeMirror-linenumber{padding:0}.graphiql-container .CodeMirror-gutters{border:none}.cm-s-graphiql{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.cm-s-graphiql .cm-keyword{color:hsl(var(--color-primary))}.cm-s-graphiql .cm-def{color:hsl(var(--color-tertiary))}.cm-s-graphiql .cm-punctuation{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.cm-s-graphiql .cm-variable{color:hsl(var(--color-secondary))}.cm-s-graphiql .cm-atom{color:hsl(var(--color-tertiary))}.cm-s-graphiql .cm-number{color:hsl(var(--color-success))}.cm-s-graphiql .cm-string{color:hsl(var(--color-warning))}.cm-s-graphiql .cm-builtin{color:hsl(var(--color-success))}.cm-s-graphiql .cm-string-2{color:hsl(var(--color-secondary))}.cm-s-graphiql .cm-attribute,.cm-s-graphiql .cm-meta{color:hsl(var(--color-tertiary))}.cm-s-graphiql .cm-property{color:hsl(var(--color-info))}.cm-s-graphiql .cm-qualifier{color:hsl(var(--color-secondary))}.cm-s-graphiql .cm-comment{color:hsla(var(--color-neutral),var(--alpha-secondary))}.cm-s-graphiql .cm-ws{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.cm-s-graphiql .cm-invalidchar{color:hsl(var(--color-error))}.cm-s-graphiql .CodeMirror-cursor{border-left:2px solid hsla(var(--color-neutral),var(--alpha-secondary))}.cm-s-graphiql .CodeMirror-linenumber{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.graphiql-container div.CodeMirror span.CodeMirror-matchingbracket,.graphiql-container div.CodeMirror span.CodeMirror-nonmatchingbracket{color:hsl(var(--color-warning))}.graphiql-container .CodeMirror-selected,.graphiql-container .CodeMirror-focused .CodeMirror-selected{background:hsla(var(--color-neutral),var(--alpha-background-heavy))}.graphiql-container .CodeMirror-dialog{background:inherit;color:inherit;left:0;right:0;overflow:hidden;padding:var(--px-2) var(--px-6);position:absolute;z-index:6}.graphiql-container .CodeMirror-dialog-top{border-bottom:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));padding-bottom:var(--px-12);top:0}.graphiql-container .CodeMirror-dialog-bottom{border-top:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));bottom:0;padding-top:var(--px-12)}.graphiql-container .CodeMirror-search-hint{display:none}.graphiql-container .CodeMirror-dialog input{border:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));border-radius:var(--border-radius-4);padding:var(--px-4)}.graphiql-container .CodeMirror-dialog input:focus{outline:hsl(var(--color-primary)) solid 2px}.graphiql-container .cm-searching{background-color:hsla(var(--color-warning),var(--alpha-background-light));padding-bottom:1.5px;padding-top:.5px}.CodeMirror-foldmarker{color:#00f;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.7em}.CodeMirror-foldgutter-open,.CodeMirror-foldgutter-folded{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25be"}.CodeMirror-foldgutter-folded:after{content:"\25b8"}.CodeMirror-foldgutter{width:var(--px-12)}.CodeMirror-foldmarker{background-color:hsl(var(--color-info));border-radius:var(--border-radius-4);color:hsl(var(--color-base));font-family:inherit;margin:0 var(--px-4);padding:0 var(--px-8);text-shadow:none}.CodeMirror-foldgutter-open,.CodeMirror-foldgutter-folded{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.CodeMirror-foldgutter-open:after,.CodeMirror-foldgutter-folded:after{margin:0 var(--px-2)}.graphiql-editor{height:100%;position:relative;width:100%}.graphiql-editor.hidden{left:-9999px;position:absolute;top:-9999px;visibility:hidden}.CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:#ffd;border:1px solid black;border-radius:4px;color:#000;font-family:monospace;font-size:10pt;overflow:hidden;padding:2px 5px;position:fixed;white-space:pre;white-space:pre-wrap;z-index:100;max-width:600px;opacity:0;transition:opacity .4s;-moz-transition:opacity .4s;-webkit-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s}.CodeMirror-lint-mark{background-position:left bottom;background-repeat:repeat-x}.CodeMirror-lint-mark-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=)}.CodeMirror-lint-mark-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==)}.CodeMirror-lint-marker{background-position:center center;background-repeat:no-repeat;cursor:pointer;display:inline-block;height:16px;width:16px;vertical-align:middle;position:relative}.CodeMirror-lint-message{padding-left:18px;background-position:top left;background-repeat:no-repeat}.CodeMirror-lint-marker-warning,.CodeMirror-lint-message-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=)}.CodeMirror-lint-marker-error,.CodeMirror-lint-message-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=)}.CodeMirror-lint-marker-multiple{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:right bottom;width:100%;height:100%}.CodeMirror-lint-line-error{background-color:#b74c5114}.CodeMirror-lint-line-warning{background-color:#ffd3001a}.CodeMirror-lint-mark-error,.CodeMirror-lint-mark-warning{background-repeat:repeat-x;background-size:10px 3px;background-position:0 95%}.cm-s-graphiql .CodeMirror-lint-mark-error{color:hsl(var(--color-error))}.CodeMirror-lint-mark-error{background-image:linear-gradient(45deg,transparent 65%,hsl(var(--color-error)) 80%,transparent 90%),linear-gradient(135deg,transparent 5%,hsl(var(--color-error)) 15%,transparent 25%),linear-gradient(135deg,transparent 45%,hsl(var(--color-error)) 55%,transparent 65%),linear-gradient(45deg,transparent 25%,hsl(var(--color-error)) 35%,transparent 50%)}.cm-s-graphiql .CodeMirror-lint-mark-warning{color:hsl(var(--color-warning))}.CodeMirror-lint-mark-warning{background-image:linear-gradient(45deg,transparent 65%,hsl(var(--color-warning)) 80%,transparent 90%),linear-gradient(135deg,transparent 5%,hsl(var(--color-warning)) 15%,transparent 25%),linear-gradient(135deg,transparent 45%,hsl(var(--color-warning)) 55%,transparent 65%),linear-gradient(45deg,transparent 25%,hsl(var(--color-warning)) 35%,transparent 50%)}.CodeMirror-lint-tooltip{background-color:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-8);box-shadow:var(--popover-box-shadow);font-size:var(--font-size-body);font-family:var(--font-family);max-width:600px;overflow:hidden;padding:var(--px-12)}.CodeMirror-lint-message-error,.CodeMirror-lint-message-warning{background-image:none;padding:0}.CodeMirror-lint-message-error{color:hsl(var(--color-error))}.CodeMirror-lint-message-warning{color:hsl(var(--color-warning))}.CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px rgba(0,0,0,.2);-moz-box-shadow:2px 3px 5px rgba(0,0,0,.2);box-shadow:2px 3px 5px #0003;border-radius:3px;border:1px solid silver;background:white;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;white-space:pre;color:#000;cursor:pointer}li.CodeMirror-hint-active{background:#08f;color:#fff}.CodeMirror-hints{background:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-8);box-shadow:var(--popover-box-shadow);display:grid;font-family:var(--font-family);font-size:var(--font-size-body);grid-template-columns:auto fit-content(300px);max-height:264px;padding:0}.CodeMirror-hint{border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));grid-column:1 / 2;margin:var(--px-4);padding:var(--px-6) var(--px-8)!important}.CodeMirror-hint:not(:first-child){margin-top:0}li.CodeMirror-hint-active{background:hsla(var(--color-primary),var(--alpha-background-medium));color:hsl(var(--color-primary))}.CodeMirror-hint-information{border-left:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));grid-column:2 / 3;grid-row:1 / 99999;max-height:264px;overflow:auto;padding:var(--px-12)}.CodeMirror-hint-information-header{display:flex;align-items:baseline}.CodeMirror-hint-information-field-name{font-size:var(--font-size-h4);font-weight:var(--font-weight-medium)}.CodeMirror-hint-information-type-name-pill{border:1px solid hsla(var(--color-neutral),var(--alpha-tertiary));border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));margin-left:var(--px-6);padding:var(--px-4)}.CodeMirror-hint-information-type-name{color:inherit;text-decoration:none}.CodeMirror-hint-information-type-name:hover{text-decoration:underline dotted}.CodeMirror-hint-information-description{color:hsla(var(--color-neutral),var(--alpha-secondary));margin-top:var(--px-12)}.CodeMirror-info{background-color:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-8);box-shadow:var(--popover-box-shadow);color:hsla(var(--color-neutral),1);max-height:300px;max-width:400px;opacity:0;overflow:auto;padding:var(--px-12);position:fixed;transition:opacity .15s;z-index:10}.CodeMirror-info a{color:inherit;text-decoration:none}.CodeMirror-info a:hover{text-decoration:underline dotted}.CodeMirror-info .CodeMirror-info-header{display:flex;align-items:baseline}.CodeMirror-info .CodeMirror-info-header>.type-name,.CodeMirror-info .CodeMirror-info-header>.field-name,.CodeMirror-info .CodeMirror-info-header>.arg-name,.CodeMirror-info .CodeMirror-info-header>.directive-name,.CodeMirror-info .CodeMirror-info-header>.enum-value{font-size:var(--font-size-h4);font-weight:var(--font-weight-medium)}.CodeMirror-info .type-name-pill{border:1px solid hsla(var(--color-neutral),var(--alpha-tertiary));border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));margin-left:var(--px-6);padding:var(--px-4)}.CodeMirror-info .info-description{color:hsla(var(--color-neutral),var(--alpha-secondary));margin-top:var(--px-12);overflow:hidden}.CodeMirror-jump-token{text-decoration:underline dotted;cursor:pointer}.auto-inserted-leaf.cm-property{animation-duration:6s;animation-name:insertionFade;border-radius:var(--border-radius-4);padding:var(--px-2)}@keyframes insertionFade{0%,to{background-color:none}15%,85%{background-color:hsla(var(--color-warning),var(--alpha-background-light))}}button.graphiql-toolbar-button{display:flex;align-items:center;justify-content:center;height:var(--toolbar-width);width:var(--toolbar-width)}button.graphiql-toolbar-button.error{background:hsla(var(--color-error),var(--alpha-background-heavy))}.graphiql-execute-button-wrapper{position:relative}button.graphiql-execute-button{background-color:hsl(var(--color-primary));border:none;border-radius:var(--border-radius-8);cursor:pointer;height:var(--toolbar-width);padding:0;width:var(--toolbar-width)}button.graphiql-execute-button:hover{background-color:hsla(var(--color-primary),.9)}button.graphiql-execute-button:active{background-color:hsla(var(--color-primary),.8)}button.graphiql-execute-button:focus{outline:hsla(var(--color-primary),.8) auto 1px}button.graphiql-execute-button>svg{color:#fff;display:block;height:var(--px-16);margin:auto;width:var(--px-16)}button.graphiql-toolbar-menu{display:block;height:var(--toolbar-width);width:var(--toolbar-width)}.graphiql-container{background-color:hsl(var(--color-base));display:flex;height:100%;margin:0;overflow:hidden;width:100%}.graphiql-container .graphiql-sidebar{display:flex;flex-direction:column;justify-content:space-between;padding:var(--px-8);width:var(--sidebar-width)}.graphiql-container .graphiql-sidebar .graphiql-sidebar-section{display:flex;flex-direction:column;gap:var(--px-8)}.graphiql-container .graphiql-sidebar button{display:flex;align-items:center;justify-content:center;color:hsla(var(--color-neutral),var(--alpha-secondary));height:calc(var(--sidebar-width) - (2 * var(--px-8)));width:calc(var(--sidebar-width) - (2 * var(--px-8)))}.graphiql-container .graphiql-sidebar button.active{color:hsla(var(--color-neutral),1)}.graphiql-container .graphiql-sidebar button:not(:first-child){margin-top:var(--px-4)}.graphiql-container .graphiql-sidebar button>svg{height:var(--px-20);width:var(--px-20)}.graphiql-container .graphiql-main{display:flex;flex:1;min-width:0}.graphiql-container .graphiql-sessions{background-color:hsla(var(--color-neutral),var(--alpha-background-light));border-radius:calc(var(--border-radius-12) + var(--px-8));display:flex;flex-direction:column;flex:1;max-height:100%;margin:var(--px-16);margin-left:0;min-width:0}.graphiql-container .graphiql-session-header{align-items:center;display:flex;justify-content:space-between;height:var(--session-header-height)}button.graphiql-tab-add{height:100%;padding:var(--px-4)}button.graphiql-tab-add>svg{color:hsla(var(--color-neutral),var(--alpha-secondary));display:block;height:var(--px-16);width:var(--px-16)}.graphiql-container .graphiql-session-header-right{align-items:center;display:flex}.graphiql-container .graphiql-logo{color:hsla(var(--color-neutral),var(--alpha-secondary));font-size:var(--font-size-h4);font-weight:var(--font-weight-medium);padding:var(--px-12) var(--px-16)}.graphiql-container .graphiql-logo .graphiql-logo-link{color:hsla(var(--color-neutral),var(--alpha-secondary));text-decoration:none}.graphiql-container .graphiql-session{display:flex;flex:1;padding:0 var(--px-8) var(--px-8)}.graphiql-container .graphiql-editors{background-color:hsl(var(--color-base));border-radius:calc(var(--border-radius-12));box-shadow:var(--popover-box-shadow);display:flex;flex:1;flex-direction:column}.graphiql-container .graphiql-editors.full-height{margin-top:calc(var(--px-8) - var(--session-header-height))}.graphiql-container .graphiql-query-editor{border-bottom:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));padding:var(--px-16);column-gap:var(--px-16);display:flex;width:100%}.graphiql-container .graphiql-toolbar{width:var(--toolbar-width)}.graphiql-container .graphiql-toolbar>*+*{margin-top:var(--px-8)}.graphiql-toolbar-icon{color:hsla(var(--color-neutral),var(--alpha-tertiary));display:block;height:calc(var(--toolbar-width) - (var(--px-8) * 2));width:calc(var(--toolbar-width) - (var(--px-8) * 2))}.graphiql-container .graphiql-editor-tools{cursor:row-resize;display:flex;width:100%;column-gap:var(--px-8);padding:var(--px-8)}.graphiql-container .graphiql-editor-tools button{color:hsla(var(--color-neutral),var(--alpha-secondary))}.graphiql-container .graphiql-editor-tools button.active{color:hsla(var(--color-neutral),1)}.graphiql-container .graphiql-editor-tools>button:not(.graphiql-toggle-editor-tools){padding:var(--px-8) var(--px-12)}.graphiql-container .graphiql-editor-tools .graphiql-toggle-editor-tools{margin-left:auto}.graphiql-container .graphiql-editor-tool{flex:1;padding:var(--px-16)}.graphiql-container .graphiql-toolbar,.graphiql-container .graphiql-editor-tools,.graphiql-container .graphiql-editor-tool{position:relative}.graphiql-container .graphiql-response{--editor-background: transparent;display:flex;width:100%;flex-direction:column}.graphiql-container .graphiql-response .result-window{position:relative;flex:1}.graphiql-container .graphiql-footer{border-top:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy))}.graphiql-container .graphiql-plugin{border-left:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));flex:1;overflow-y:auto;padding:var(--px-16)}.graphiql-horizontal-drag-bar{width:var(--px-12);cursor:col-resize}.graphiql-horizontal-drag-bar:hover:after{border:var(--px-2) solid hsla(var(--color-neutral),var(--alpha-background-heavy));border-radius:var(--border-radius-2);content:"";display:block;height:25%;margin:0 auto;position:relative;top:37.5%;width:0}.graphiql-container .graphiql-chevron-icon{color:hsla(var(--color-neutral),var(--alpha-tertiary));display:block;height:var(--px-12);margin:var(--px-12);width:var(--px-12)}.graphiql-spin{animation:spin .8s linear 0s infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.graphiql-dialog .graphiql-dialog-header{align-items:center;display:flex;justify-content:space-between;padding:var(--px-24)}.graphiql-dialog .graphiql-dialog-title{font-size:var(--font-size-h3);font-weight:var(--font-weight-medium);margin:0}.graphiql-dialog .graphiql-dialog-section{align-items:center;border-top:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));display:flex;justify-content:space-between;padding:var(--px-24)}.graphiql-dialog .graphiql-dialog-section>:not(:first-child){margin-left:var(--px-24)}.graphiql-dialog .graphiql-dialog-section-title{font-size:var(--font-size-h4);font-weight:var(--font-weight-medium)}.graphiql-dialog .graphiql-dialog-section-caption{color:hsla(var(--color-neutral),var(--alpha-secondary))}.graphiql-dialog .graphiql-warning-text{color:hsl(var(--color-warning));font-weight:var(--font-weight-medium)}.graphiql-dialog .graphiql-table{border-collapse:collapse;width:100%}.graphiql-dialog .graphiql-table :is(th,td){border:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));padding:var(--px-8) var(--px-12)}.graphiql-dialog .graphiql-key{background-color:hsla(var(--color-neutral),var(--alpha-background-medium));border-radius:var(--border-radius-4);padding:var(--px-4)}.graphiql-container svg{pointer-events:none}.docExplorerWrap{height:unset!important;min-width:unset!important;width:unset!important}.doc-explorer-title{font-size:var(--font-size-h2);font-weight:var(--font-weight-medium)}.doc-explorer-rhs{display:none}.graphiql-explorer-root{font-family:var(--font-family-mono)!important;font-size:var(--font-size-body)!important;padding:0!important}.graphiql-explorer-root>div:first-child{padding-left:var(--px-8);overflow:hidden!important}.graphiql-explorer-root input{background:hsl(var(--color-base))}.graphiql-explorer-root select{background-color:hsl(var(--color-base));border:1px solid hsla(var(--color-neutral),var(--alpha-secondary));border-radius:var(--border-radius-4);color:hsl(var(--color-neutral));margin:0 var(--px-4);padding:var(--px-4) var(--px-6)} -/*!********************************************************************************************!*\ - !*** css ../../../node_modules/css-loader/dist/cjs.js!../../graphiql-react/dist/style.css ***! - \********************************************************************************************/ -/*!*********************************************************************************************!*\ - !*** css ../../../node_modules/css-loader/dist/cjs.js!../../graphiql-react/font/roboto.css ***! - \*********************************************************************************************/ -/*!************************************************************************************************!*\ - !*** css ../../../node_modules/css-loader/dist/cjs.js!../../graphiql-react/font/fira-code.css ***! - \************************************************************************************************/ -/*!*********************************************************************************************************************!*\ - !*** css ../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./style.css ***! - \*********************************************************************************************************************/ diff --git a/netbox/project-static/dist/graphiql.js b/netbox/project-static/dist/graphiql.js deleted file mode 100644 index 1b6949d0288..00000000000 --- a/netbox/project-static/dist/graphiql.js +++ /dev/null @@ -1,346 +0,0 @@ -(()=>{var HB=Object.create;var U0=Object.defineProperty;var zB=Object.getOwnPropertyDescriptor;var WB=Object.getOwnPropertyNames;var YB=Object.getPrototypeOf,JB=Object.prototype.hasOwnProperty;var XB=e=>U0(e,"__esModule",{value:!0});var tx=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,r)=>(typeof require!="undefined"?require:t)[r]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var G=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ZB=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of WB(t))!JB.call(e,n)&&n!=="default"&&U0(e,n,{get:()=>t[n],enumerable:!(r=zB(t,n))||r.enumerable});return e},Ee=e=>ZB(XB(U0(e!=null?HB(YB(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var G0=G((Oie,nx)=>{"use strict";var rx=Object.getOwnPropertySymbols,$B=Object.prototype.hasOwnProperty,eK=Object.prototype.propertyIsEnumerable;function tK(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function rK(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;var n=Object.getOwnPropertyNames(t).map(function(o){return t[o]});if(n.join("")!=="0123456789")return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach(function(o){i[o]=o}),Object.keys(Object.assign({},i)).join("")==="abcdefghijklmnopqrst"}catch(o){return!1}}nx.exports=rK()?Object.assign:function(e,t){for(var r,n=tK(e),i,o=1;o{"use strict";var Q0=G0(),ml=60103,ix=60106;Et.Fragment=60107;Et.StrictMode=60108;Et.Profiler=60114;var ax=60109,ox=60110,ux=60112;Et.Suspense=60113;var sx=60115,lx=60116;typeof Symbol=="function"&&Symbol.for&&(Mi=Symbol.for,ml=Mi("react.element"),ix=Mi("react.portal"),Et.Fragment=Mi("react.fragment"),Et.StrictMode=Mi("react.strict_mode"),Et.Profiler=Mi("react.profiler"),ax=Mi("react.provider"),ox=Mi("react.context"),ux=Mi("react.forward_ref"),Et.Suspense=Mi("react.suspense"),sx=Mi("react.memo"),lx=Mi("react.lazy"));var Mi,cx=typeof Symbol=="function"&&Symbol.iterator;function nK(e){return e===null||typeof e!="object"?null:(e=cx&&e[cx]||e["@@iterator"],typeof e=="function"?e:null)}function If(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r{"use strict";Tx.exports=bx()});var wx=G(qt=>{"use strict";var bl,Af,Bh,Y0;typeof performance=="object"&&typeof performance.now=="function"?(_x=performance,qt.unstable_now=function(){return _x.now()}):(J0=Date,Ex=J0.now(),qt.unstable_now=function(){return J0.now()-Ex});var _x,J0,Ex;typeof window=="undefined"||typeof MessageChannel!="function"?(Tl=null,X0=null,Z0=function(){if(Tl!==null)try{var e=qt.unstable_now();Tl(!0,e),Tl=null}catch(t){throw setTimeout(Z0,0),t}},bl=function(e){Tl!==null?setTimeout(bl,0,e):(Tl=e,setTimeout(Z0,0))},Af=function(e,t){X0=setTimeout(e,t)},Bh=function(){clearTimeout(X0)},qt.unstable_shouldYield=function(){return!1},Y0=qt.unstable_forceFrameRate=function(){}):(Sx=window.setTimeout,kx=window.clearTimeout,typeof console!="undefined"&&(Ox=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof Ox!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),Rf=!1,jf=null,Kh=-1,$0=5,eb=0,qt.unstable_shouldYield=function(){return qt.unstable_now()>=eb},Y0=function(){},qt.unstable_forceFrameRate=function(e){0>e||125>>1,i=e[n];if(i!==void 0&&0Wh(s,r))d!==void 0&&0>Wh(d,s)?(e[n]=d,e[l]=r,n=l):(e[n]=s,e[o]=r,n=o);else if(d!==void 0&&0>Wh(d,r))e[n]=d,e[l]=r,n=l;else break e}}return t}return null}function Wh(e,t){var r=e.sortIndex-t.sortIndex;return r!==0?r:e.id-t.id}var La=[],Ho=[],sK=1,qi=null,An=3,Yh=!1,$u=!1,Pf=!1;function nb(e){for(var t=ha(Ho);t!==null;){if(t.callback===null)zh(Ho);else if(t.startTime<=e)zh(Ho),t.sortIndex=t.expirationTime,rb(La,t);else break;t=ha(Ho)}}function ib(e){if(Pf=!1,nb(e),!$u)if(ha(La)!==null)$u=!0,bl(ab);else{var t=ha(Ho);t!==null&&Af(ib,t.startTime-e)}}function ab(e,t){$u=!1,Pf&&(Pf=!1,Bh()),Yh=!0;var r=An;try{for(nb(t),qi=ha(La);qi!==null&&(!(qi.expirationTime>t)||e&&!qt.unstable_shouldYield());){var n=qi.callback;if(typeof n=="function"){qi.callback=null,An=qi.priorityLevel;var i=n(qi.expirationTime<=t);t=qt.unstable_now(),typeof i=="function"?qi.callback=i:qi===ha(La)&&zh(La),nb(t)}else zh(La);qi=ha(La)}if(qi!==null)var o=!0;else{var s=ha(Ho);s!==null&&Af(ib,s.startTime-t),o=!1}return o}finally{qi=null,An=r,Yh=!1}}var lK=Y0;qt.unstable_IdlePriority=5;qt.unstable_ImmediatePriority=1;qt.unstable_LowPriority=4;qt.unstable_NormalPriority=3;qt.unstable_Profiling=null;qt.unstable_UserBlockingPriority=2;qt.unstable_cancelCallback=function(e){e.callback=null};qt.unstable_continueExecution=function(){$u||Yh||($u=!0,bl(ab))};qt.unstable_getCurrentPriorityLevel=function(){return An};qt.unstable_getFirstCallbackNode=function(){return ha(La)};qt.unstable_next=function(e){switch(An){case 1:case 2:case 3:var t=3;break;default:t=An}var r=An;An=t;try{return e()}finally{An=r}};qt.unstable_pauseExecution=function(){};qt.unstable_requestPaint=lK;qt.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=An;An=e;try{return t()}finally{An=r}};qt.unstable_scheduleCallback=function(e,t,r){var n=qt.unstable_now();switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0n?(e.sortIndex=r,rb(Ho,e),ha(La)===null&&e===ha(Ho)&&(Pf?Bh():Pf=!0,Af(ib,r-n))):(e.sortIndex=i,rb(La,e),$u||Yh||($u=!0,bl(ab))),e};qt.unstable_wrapCallback=function(e){var t=An;return function(){var r=An;An=t;try{return e.apply(this,arguments)}finally{An=r}}}});var Dx=G((xie,Nx)=>{"use strict";Nx.exports=wx()});var h1=G(Ki=>{"use strict";var Jh=zt(),cr=G0(),ln=Dx();function ye(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;rt}return!1}function $n(e,t,r,n,i,o,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=i,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var yn={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){yn[e]=new $n(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];yn[t]=new $n(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){yn[e]=new $n(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){yn[e]=new $n(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){yn[e]=new $n(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){yn[e]=new $n(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){yn[e]=new $n(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){yn[e]=new $n(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){yn[e]=new $n(e,5,!1,e.toLowerCase(),null,!1,!1)});var ob=/[\-:]([a-z])/g;function ub(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ob,ub);yn[t]=new $n(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ob,ub);yn[t]=new $n(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ob,ub);yn[t]=new $n(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){yn[e]=new $n(e,1,!1,e.toLowerCase(),null,!1,!1)});yn.xlinkHref=new $n("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){yn[e]=new $n(e,1,!1,e.toLowerCase(),null,!0,!0)});function sb(e,t,r,n){var i=yn.hasOwnProperty(t)?yn[t]:null,o=i!==null?i.type===0:n?!1:!(!(2l||i[s]!==o[l])return` -`+i[s].replace(" at new "," at ");while(1<=s&&0<=l);break}}}finally{yb=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Gf(e):""}function hK(e){switch(e.tag){case 5:return Gf(e.type);case 16:return Gf("Lazy");case 13:return Gf("Suspense");case 19:return Gf("SuspenseList");case 0:case 2:case 15:return e=ev(e.type,!1),e;case 11:return e=ev(e.type.render,!1),e;case 22:return e=ev(e.type._render,!1),e;case 1:return e=ev(e.type,!0),e;default:return""}}function El(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case zo:return"Fragment";case rs:return"Portal";case qf:return"Profiler";case lb:return"StrictMode";case Vf:return"Suspense";case Zh:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case fb:return(e.displayName||"Context")+".Consumer";case cb:return(e._context.displayName||"Context")+".Provider";case Xh:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case $h:return El(e.type);case pb:return El(e._render);case db:t=e._payload,e=e._init;try{return El(e(t))}catch(r){}}return null}function Wo(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function jx(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function vK(e){var t=jx(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r!="undefined"&&typeof r.get=="function"&&typeof r.set=="function"){var i=r.get,o=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(s){n=""+s,o.call(this,s)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(s){n=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function tv(e){e._valueTracker||(e._valueTracker=vK(e))}function Px(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=jx(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function rv(e){if(e=e||(typeof document!="undefined"?document:void 0),typeof e=="undefined")return null;try{return e.activeElement||e.body}catch(t){return e.body}}function bb(e,t){var r=t.checked;return cr({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r!=null?r:e._wrapperState.initialChecked})}function Fx(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=Wo(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Mx(e,t){t=t.checked,t!=null&&sb(e,"checked",t,!1)}function Tb(e,t){Mx(e,t);var r=Wo(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?_b(e,t.type,r):t.hasOwnProperty("defaultValue")&&_b(e,t.type,Wo(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function qx(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function _b(e,t,r){(t!=="number"||rv(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}function gK(e){var t="";return Jh.Children.forEach(e,function(r){r!=null&&(t+=r)}),t}function Eb(e,t){return e=cr({children:void 0},t),(t=gK(t.children))&&(e.children=t),e}function Sl(e,t,r,n){if(e=e.options,t){t={};for(var i=0;i=r.length))throw Error(ye(93));r=r[0]}t=r}t==null&&(t=""),r=t}e._wrapperState={initialValue:Wo(r)}}function Ux(e,t){var r=Wo(t.value),n=Wo(t.defaultValue);r!=null&&(r=""+r,r!==e.value&&(e.value=r),t.defaultValue==null&&e.defaultValue!==r&&(e.defaultValue=r)),n!=null&&(e.defaultValue=""+n)}function Gx(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var kb={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Qx(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Ob(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?Qx(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var nv,Bx=function(e){return typeof MSApp!="undefined"&&MSApp.execUnsafeLocalFunction?function(t,r,n,i){MSApp.execUnsafeLocalFunction(function(){return e(t,r,n,i)})}:e}(function(e,t){if(e.namespaceURI!==kb.svg||"innerHTML"in e)e.innerHTML=t;else{for(nv=nv||document.createElement("div"),nv.innerHTML=""+t.valueOf().toString()+"",t=nv.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Qf(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Bf={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},mK=["Webkit","ms","Moz","O"];Object.keys(Bf).forEach(function(e){mK.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Bf[t]=Bf[e]})});function Kx(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Bf.hasOwnProperty(e)&&Bf[e]?(""+t).trim():t+"px"}function Hx(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,i=Kx(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,i):e[r]=i}}var yK=cr({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function wb(e,t){if(t){if(yK[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(ye(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(ye(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(ye(61))}if(t.style!=null&&typeof t.style!="object")throw Error(ye(62))}}function Nb(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Db(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var xb=null,kl=null,Ol=null;function zx(e){if(e=sd(e)){if(typeof xb!="function")throw Error(ye(280));var t=e.stateNode;t&&(t=kv(t),xb(e.stateNode,e.type,t))}}function Wx(e){kl?Ol?Ol.push(e):Ol=[e]:kl=e}function Yx(){if(kl){var e=kl,t=Ol;if(Ol=kl=null,zx(e),t)for(e=0;en?0:1<r;r++)t.push(e);return t}function cv(e,t,r){e.pendingLanes|=t;var n=t-1;e.suspendedLanes&=n,e.pingedLanes&=n,e=e.eventTimes,t=31-Zo(t),e[t]=r}var Zo=Math.clz32?Math.clz32:RK,IK=Math.log,AK=Math.LN2;function RK(e){return e===0?32:31-(IK(e)/AK|0)|0}var jK=ln.unstable_UserBlockingPriority,PK=ln.unstable_runWithPriority,fv=!0;function FK(e,t,r,n){ns||Lb();var i=Qb,o=ns;ns=!0;try{Jx(i,e,t,r,n)}finally{(ns=o)||Ab()}}function MK(e,t,r,n){PK(jK,Qb.bind(null,e,t,r,n))}function Qb(e,t,r,n){if(fv){var i;if((i=(t&4)==0)&&0=td),EC=String.fromCharCode(32),SC=!1;function kC(e,t){switch(e){case"keyup":return u3.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function OC(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ll=!1;function l3(e,t){switch(e){case"compositionend":return OC(t);case"keypress":return t.which!==32?null:(SC=!0,EC);case"textInput":return e=t.data,e===EC&&SC?null:e;default:return null}}function c3(e,t){if(Ll)return e==="compositionend"||!Xb&&kC(e,t)?(e=gC(),dv=Kb=$o=null,Ll=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=LC(r)}}function AC(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?AC(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function RC(){for(var e=window,t=rv();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch(n){r=!1}if(r)e=t.contentWindow;else break;t=rv(e.document)}return t}function $b(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var T3=vo&&"documentMode"in document&&11>=document.documentMode,Il=null,eT=null,ad=null,tT=!1;function jC(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;tT||Il==null||Il!==rv(n)||(n=Il,"selectionStart"in n&&$b(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),ad&&id(ad,n)||(ad=n,n=Tv(eT,"onSelect"),0Fl||(e.current=sT[Fl],sT[Fl]=null,Fl--)}function _r(e,t){Fl++,sT[Fl]=e.current,e.current=t}var ru={},Rn=tu(ru),ci=tu(!1),os=ru;function Ml(e,t){var r=e.type.contextTypes;if(!r)return ru;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in r)i[o]=t[o];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function fi(e){return e=e.childContextTypes,e!=null}function Ov(){or(ci),or(Rn)}function JC(e,t,r){if(Rn.current!==ru)throw Error(ye(168));_r(Rn,t),_r(ci,r)}function XC(e,t,r){var n=e.stateNode;if(e=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var i in n)if(!(i in e))throw Error(ye(108,El(t)||"Unknown",i));return cr({},r,n)}function wv(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ru,os=Rn.current,_r(Rn,e),_r(ci,ci.current),!0}function ZC(e,t,r){var n=e.stateNode;if(!n)throw Error(ye(169));r?(e=XC(e,t,os),n.__reactInternalMemoizedMergedChildContext=e,or(ci),or(Rn),_r(Rn,e)):or(ci),_r(ci,r)}var lT=null,us=null,S3=ln.unstable_runWithPriority,cT=ln.unstable_scheduleCallback,fT=ln.unstable_cancelCallback,k3=ln.unstable_shouldYield,$C=ln.unstable_requestPaint,dT=ln.unstable_now,O3=ln.unstable_getCurrentPriorityLevel,Nv=ln.unstable_ImmediatePriority,eL=ln.unstable_UserBlockingPriority,tL=ln.unstable_NormalPriority,rL=ln.unstable_LowPriority,nL=ln.unstable_IdlePriority,pT={},w3=$C!==void 0?$C:function(){},go=null,Dv=null,hT=!1,iL=dT(),jn=1e4>iL?dT:function(){return dT()-iL};function ql(){switch(O3()){case Nv:return 99;case eL:return 98;case tL:return 97;case rL:return 96;case nL:return 95;default:throw Error(ye(332))}}function aL(e){switch(e){case 99:return Nv;case 98:return eL;case 97:return tL;case 96:return rL;case 95:return nL;default:throw Error(ye(332))}}function ss(e,t){return e=aL(e),S3(e,t)}function ld(e,t,r){return e=aL(e),cT(e,t,r)}function Aa(){if(Dv!==null){var e=Dv;Dv=null,fT(e)}oL()}function oL(){if(!hT&&go!==null){hT=!0;var e=0;try{var t=go;ss(99,function(){for(;eR?(M=O,O=null):M=O.sibling;var q=b(T,O,m[R],w);if(q===null){O===null&&(O=M);break}e&&O&&q.alternate===null&&t(T,O),S=o(q,S,R),L===null?x=q:L.sibling=q,L=q,O=M}if(R===m.length)return r(T,O),x;if(O===null){for(;RR?(M=O,O=null):M=O.sibling;var z=b(T,O,q.value,w);if(z===null){O===null&&(O=M);break}e&&O&&z.alternate===null&&t(T,O),S=o(z,S,R),L===null?x=z:L.sibling=z,L=z,O=M}if(q.done)return r(T,O),x;if(O===null){for(;!q.done;R++,q=m.next())q=y(T,q.value,w),q!==null&&(S=o(q,S,R),L===null?x=q:L.sibling=q,L=q);return x}for(O=n(T,O);!q.done;R++,q=m.next())q=D(O,T,R,q.value,w),q!==null&&(e&&q.alternate!==null&&O.delete(q.key===null?R:q.key),S=o(q,S,R),L===null?x=q:L.sibling=q,L=q);return e&&O.forEach(function(B){return t(T,B)}),x}return function(T,S,m,w){var x=typeof m=="object"&&m!==null&&m.type===zo&&m.key===null;x&&(m=m.props.children);var L=typeof m=="object"&&m!==null;if(L)switch(m.$$typeof){case Mf:e:{for(L=m.key,x=S;x!==null;){if(x.key===L){switch(x.tag){case 7:if(m.type===zo){r(T,x.sibling),S=i(x,m.props.children),S.return=T,T=S;break e}break;default:if(x.elementType===m.type){r(T,x.sibling),S=i(x,m.props),S.ref=fd(T,x,m),S.return=T,T=S;break e}}r(T,x);break}else t(T,x);x=x.sibling}m.type===zo?(S=Yl(m.props.children,T.mode,w,m.key),S.return=T,T=S):(w=$v(m.type,m.key,m.props,null,T.mode,w),w.ref=fd(T,S,m),w.return=T,T=w)}return s(T);case rs:e:{for(x=m.key;S!==null;){if(S.key===x)if(S.tag===4&&S.stateNode.containerInfo===m.containerInfo&&S.stateNode.implementation===m.implementation){r(T,S.sibling),S=i(S,m.children||[]),S.return=T,T=S;break e}else{r(T,S);break}else t(T,S);S=S.sibling}S=t_(m,T.mode,w),S.return=T,T=S}return s(T)}if(typeof m=="string"||typeof m=="number")return m=""+m,S!==null&&S.tag===6?(r(T,S.sibling),S=i(S,m),S.return=T,T=S):(r(T,S),S=e_(m,T.mode,w),S.return=T,T=S),s(T);if(Rv(m))return _(T,S,m,w);if(Uf(m))return k(T,S,m,w);if(L&&jv(T,m),typeof m=="undefined"&&!x)switch(T.tag){case 1:case 22:case 0:case 11:case 15:throw Error(ye(152,El(T.type)||"Component"))}return r(T,S)}}var Pv=vL(!0),gL=vL(!1),dd={},Ra=tu(dd),pd=tu(dd),hd=tu(dd);function ls(e){if(e===dd)throw Error(ye(174));return e}function bT(e,t){switch(_r(hd,t),_r(pd,e),_r(Ra,dd),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Ob(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Ob(t,e)}or(Ra),_r(Ra,t)}function Gl(){or(Ra),or(pd),or(hd)}function mL(e){ls(hd.current);var t=ls(Ra.current),r=Ob(t,e.type);t!==r&&(_r(pd,e),_r(Ra,r))}function TT(e){pd.current===e&&(or(Ra),or(pd))}var Er=tu(0);function Fv(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if((t.flags&64)!=0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var mo=null,ou=null,ja=!1;function yL(e,t){var r=Bi(5,null,null,0);r.elementType="DELETED",r.type="DELETED",r.stateNode=t,r.return=e,r.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=r,e.lastEffect=r):e.firstEffect=e.lastEffect=r}function bL(e,t){switch(e.tag){case 5:var r=e.type;return t=t.nodeType!==1||r.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function _T(e){if(ja){var t=ou;if(t){var r=t;if(!bL(e,t)){if(t=Rl(r.nextSibling),!t||!bL(e,t)){e.flags=e.flags&-1025|2,ja=!1,mo=e;return}yL(mo,r)}mo=e,ou=Rl(t.firstChild)}else e.flags=e.flags&-1025|2,ja=!1,mo=e}}function TL(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;mo=e}function Mv(e){if(e!==mo)return!1;if(!ja)return TL(e),ja=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!aT(t,e.memoizedProps))for(t=ou;t;)yL(e,t),t=Rl(t.nextSibling);if(TL(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(ye(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var r=e.data;if(r==="/$"){if(t===0){ou=Rl(e.nextSibling);break e}t--}else r!=="$"&&r!=="$!"&&r!=="$?"||t++}e=e.nextSibling}ou=null}}else ou=mo?Rl(e.stateNode.nextSibling):null;return!0}function ET(){ou=mo=null,ja=!1}var Ql=[];function ST(){for(var e=0;eo))throw Error(ye(301));o+=1,bn=Pn=null,t.updateQueue=null,vd.current=L3,e=r(n,i)}while(md)}if(vd.current=Qv,t=Pn!==null&&Pn.next!==null,gd=0,bn=Pn=Dr=null,qv=!1,t)throw Error(ye(300));return e}function cs(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return bn===null?Dr.memoizedState=bn=e:bn=bn.next=e,bn}function fs(){if(Pn===null){var e=Dr.alternate;e=e!==null?e.memoizedState:null}else e=Pn.next;var t=bn===null?Dr.memoizedState:bn.next;if(t!==null)bn=t,Pn=e;else{if(e===null)throw Error(ye(310));Pn=e,e={memoizedState:Pn.memoizedState,baseState:Pn.baseState,baseQueue:Pn.baseQueue,queue:Pn.queue,next:null},bn===null?Dr.memoizedState=bn=e:bn=bn.next=e}return bn}function Pa(e,t){return typeof t=="function"?t(e):t}function yd(e){var t=fs(),r=t.queue;if(r===null)throw Error(ye(311));r.lastRenderedReducer=e;var n=Pn,i=n.baseQueue,o=r.pending;if(o!==null){if(i!==null){var s=i.next;i.next=o.next,o.next=s}n.baseQueue=i=o,r.pending=null}if(i!==null){i=i.next,n=n.baseState;var l=s=o=null,d=i;do{var h=d.lane;if((gd&h)===h)l!==null&&(l=l.next={lane:0,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null}),n=d.eagerReducer===e?d.eagerState:e(n,d.action);else{var v={lane:h,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null};l===null?(s=l=v,o=n):l=l.next=v,Dr.lanes|=h,Ed|=h}d=d.next}while(d!==null&&d!==i);l===null?o=n:l.next=s,Vi(n,t.memoizedState)||(ga=!0),t.memoizedState=n,t.baseState=o,t.baseQueue=l,r.lastRenderedState=n}return[t.memoizedState,r.dispatch]}function bd(e){var t=fs(),r=t.queue;if(r===null)throw Error(ye(311));r.lastRenderedReducer=e;var n=r.dispatch,i=r.pending,o=t.memoizedState;if(i!==null){r.pending=null;var s=i=i.next;do o=e(o,s.action),s=s.next;while(s!==i);Vi(o,t.memoizedState)||(ga=!0),t.memoizedState=o,t.baseQueue===null&&(t.baseState=o),r.lastRenderedState=o}return[o,n]}function _L(e,t,r){var n=t._getVersion;n=n(t._source);var i=t._workInProgressVersionPrimary;if(i!==null?e=i===n:(e=e.mutableReadLanes,(e=(gd&e)===e)&&(t._workInProgressVersionPrimary=n,Ql.push(t))),e)return r(t._source);throw Ql.push(t),Error(ye(350))}function EL(e,t,r,n){var i=ei;if(i===null)throw Error(ye(349));var o=t._getVersion,s=o(t._source),l=vd.current,d=l.useState(function(){return _L(i,t,r)}),h=d[1],v=d[0];d=bn;var y=e.memoizedState,b=y.refs,D=b.getSnapshot,_=y.source;y=y.subscribe;var k=Dr;return e.memoizedState={refs:b,source:t,subscribe:n},l.useEffect(function(){b.getSnapshot=r,b.setSnapshot=h;var T=o(t._source);if(!Vi(s,T)){T=r(t._source),Vi(v,T)||(h(T),T=su(k),i.mutableReadLanes|=T&i.pendingLanes),T=i.mutableReadLanes,i.entangledLanes|=T;for(var S=i.entanglements,m=T;0r?98:r,function(){e(!0)}),ss(97<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=s.createElement(r,{is:n.is}):(e=s.createElement(r),r==="select"&&(s=e,n.multiple?s.multiple=!0:n.size&&(s.size=n.size))):e=s.createElementNS(e,r),e[eu]=t,e[Sv]=n,QL(e,t,!1,!1),t.stateNode=e,s=Nb(r,n),r){case"dialog":ar("cancel",e),ar("close",e),i=n;break;case"iframe":case"object":case"embed":ar("load",e),i=n;break;case"video":case"audio":for(i=0;iKT&&(t.flags|=64,o=!0,_d(n,!1),t.lanes=33554432)}else{if(!o)if(e=Fv(s),e!==null){if(t.flags|=64,o=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),_d(n,!0),n.tail===null&&n.tailMode==="hidden"&&!s.alternate&&!ja)return t=t.lastEffect=n.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*jn()-n.renderingStartTime>KT&&r!==1073741824&&(t.flags|=64,o=!0,_d(n,!1),t.lanes=33554432);n.isBackwards?(s.sibling=t.child,t.child=s):(r=n.last,r!==null?r.sibling=s:t.child=s,n.last=s)}return n.tail!==null?(r=n.tail,n.rendering=r,n.tail=r.sibling,n.lastEffect=t.lastEffect,n.renderingStartTime=jn(),r.sibling=null,t=Er.current,_r(Er,o?t&1|2:t&1),r):null;case 23:case 24:return XT(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&n.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(ye(156,t.tag))}function R3(e){switch(e.tag){case 1:fi(e.type)&&Ov();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(Gl(),or(ci),or(Rn),ST(),t=e.flags,(t&64)!=0)throw Error(ye(285));return e.flags=t&-4097|64,e;case 5:return TT(e),null;case 13:return or(Er),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return or(Er),null;case 4:return Gl(),null;case 10:return gT(e),null;case 23:case 24:return XT(),null;default:return null}}function jT(e,t){try{var r="",n=t;do r+=hK(n),n=n.return;while(n);var i=r}catch(o){i=` -Error generating stack: `+o.message+` -`+o.stack}return{value:e,source:t,stack:i}}function PT(e,t){try{console.error(t.value)}catch(r){setTimeout(function(){throw r})}}var j3=typeof WeakMap=="function"?WeakMap:Map;function HL(e,t,r){r=iu(-1,r),r.tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){zv||(zv=!0,HT=n),PT(e,t)},r}function zL(e,t,r){r=iu(-1,r),r.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var i=t.value;r.payload=function(){return PT(e,t),n(i)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(r.callback=function(){typeof n!="function"&&(Fa===null?Fa=new Set([this]):Fa.add(this),PT(e,t));var s=t.stack;this.componentDidCatch(t.value,{componentStack:s!==null?s:""})}),r}var P3=typeof WeakSet=="function"?WeakSet:Set;function WL(e){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(r){fu(e,r)}else t.current=null}function F3(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(t.flags&256&&e!==null){var r=e.memoizedProps,n=e.memoizedState;e=t.stateNode,t=e.getSnapshotBeforeUpdate(t.elementType===t.type?r:va(t.type,r),n),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:t.flags&256&&oT(t.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(ye(163))}function M3(e,t,r){switch(r.tag){case 0:case 11:case 15:case 22:if(t=r.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{if((e.tag&3)==3){var n=e.create;e.destroy=n()}e=e.next}while(e!==t)}if(t=r.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{var i=e;n=i.next,i=i.tag,(i&4)!=0&&(i&1)!=0&&(l1(r,e),H3(r,e)),e=n}while(e!==t)}return;case 1:e=r.stateNode,r.flags&4&&(t===null?e.componentDidMount():(n=r.elementType===r.type?t.memoizedProps:va(r.type,t.memoizedProps),e.componentDidUpdate(n,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),t=r.updateQueue,t!==null&&cL(r,t,e);return;case 3:if(t=r.updateQueue,t!==null){if(e=null,r.child!==null)switch(r.child.tag){case 5:e=r.child.stateNode;break;case 1:e=r.child.stateNode}cL(r,t,e)}return;case 5:e=r.stateNode,t===null&&r.flags&4&&KC(r.type,r.memoizedProps)&&e.focus();return;case 6:return;case 4:return;case 12:return;case 13:r.memoizedState===null&&(r=r.alternate,r!==null&&(r=r.memoizedState,r!==null&&(r=r.dehydrated,r!==null&&sC(r))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(ye(163))}function YL(e,t){for(var r=e;;){if(r.tag===5){var n=r.stateNode;if(t)n=n.style,typeof n.setProperty=="function"?n.setProperty("display","none","important"):n.display="none";else{n=r.stateNode;var i=r.memoizedProps.style;i=i!=null&&i.hasOwnProperty("display")?i.display:null,n.style.display=Kx("display",i)}}else if(r.tag===6)r.stateNode.nodeValue=t?"":r.memoizedProps;else if((r.tag!==23&&r.tag!==24||r.memoizedState===null||r===e)&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===e)break;for(;r.sibling===null;){if(r.return===null||r.return===e)return;r=r.return}r.sibling.return=r.return,r=r.sibling}}function JL(e,t){if(us&&typeof us.onCommitFiberUnmount=="function")try{us.onCommitFiberUnmount(lT,t)}catch(o){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(e=t.updateQueue,e!==null&&(e=e.lastEffect,e!==null)){var r=e=e.next;do{var n=r,i=n.destroy;if(n=n.tag,i!==void 0)if((n&4)!=0)l1(t,r);else{n=t;try{i()}catch(o){fu(n,o)}}r=r.next}while(r!==e)}break;case 1:if(WL(t),e=t.stateNode,typeof e.componentWillUnmount=="function")try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(o){fu(t,o)}break;case 5:WL(t);break;case 4:e1(e,t)}}function XL(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function ZL(e){return e.tag===5||e.tag===3||e.tag===4}function $L(e){e:{for(var t=e.return;t!==null;){if(ZL(t))break e;t=t.return}throw Error(ye(160))}var r=t;switch(t=r.stateNode,r.tag){case 5:var n=!1;break;case 3:t=t.containerInfo,n=!0;break;case 4:t=t.containerInfo,n=!0;break;default:throw Error(ye(161))}r.flags&16&&(Qf(t,""),r.flags&=-17);e:t:for(r=e;;){for(;r.sibling===null;){if(r.return===null||ZL(r.return)){r=null;break e}r=r.return}for(r.sibling.return=r.return,r=r.sibling;r.tag!==5&&r.tag!==6&&r.tag!==18;){if(r.flags&2||r.child===null||r.tag===4)continue t;r.child.return=r,r=r.child}if(!(r.flags&2)){r=r.stateNode;break e}}n?FT(e,r,t):MT(e,r,t)}function FT(e,t,r){var n=e.tag,i=n===5||n===6;if(i)e=i?e.stateNode:e.stateNode.instance,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=_v));else if(n!==4&&(e=e.child,e!==null))for(FT(e,t,r),e=e.sibling;e!==null;)FT(e,t,r),e=e.sibling}function MT(e,t,r){var n=e.tag,i=n===5||n===6;if(i)e=i?e.stateNode:e.stateNode.instance,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(MT(e,t,r),e=e.sibling;e!==null;)MT(e,t,r),e=e.sibling}function e1(e,t){for(var r=t,n=!1,i,o;;){if(!n){n=r.return;e:for(;;){if(n===null)throw Error(ye(160));switch(i=n.stateNode,n.tag){case 5:o=!1;break e;case 3:i=i.containerInfo,o=!0;break e;case 4:i=i.containerInfo,o=!0;break e}n=n.return}n=!0}if(r.tag===5||r.tag===6){e:for(var s=e,l=r,d=l;;)if(JL(s,d),d.child!==null&&d.tag!==4)d.child.return=d,d=d.child;else{if(d===l)break e;for(;d.sibling===null;){if(d.return===null||d.return===l)break e;d=d.return}d.sibling.return=d.return,d=d.sibling}o?(s=i,l=r.stateNode,s.nodeType===8?s.parentNode.removeChild(l):s.removeChild(l)):i.removeChild(r.stateNode)}else if(r.tag===4){if(r.child!==null){i=r.stateNode.containerInfo,o=!0,r.child.return=r,r=r.child;continue}}else if(JL(e,r),r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return;r=r.return,r.tag===4&&(n=!1)}r.sibling.return=r.return,r=r.sibling}}function qT(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var n=r=r.next;do(n.tag&3)==3&&(e=n.destroy,n.destroy=void 0,e!==void 0&&e()),n=n.next;while(n!==r)}return;case 1:return;case 5:if(r=t.stateNode,r!=null){n=t.memoizedProps;var i=e!==null?e.memoizedProps:n;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,o!==null){for(r[Sv]=n,e==="input"&&n.type==="radio"&&n.name!=null&&Mx(r,n),Nb(e,i),t=Nb(e,n),i=0;ii&&(i=s),r&=~o}if(r=i,r=jn()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*V3(r/1960))-r,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}Tn!==5&&(Tn=2),d=jT(d,l),b=s;do{switch(b.tag){case 3:o=d,b.flags|=4096,t&=-t,b.lanes|=t;var L=HL(b,o,t);lL(b,L);break e;case 1:o=d;var O=b.type,R=b.stateNode;if((b.flags&64)==0&&(typeof O.getDerivedStateFromError=="function"||R!==null&&typeof R.componentDidCatch=="function"&&(Fa===null||!Fa.has(R)))){b.flags|=4096,t&=-t,b.lanes|=t;var M=zL(b,o,t);lL(b,M);break e}}b=b.return}while(b!==null)}s1(r)}catch(q){t=q,Jr===r&&r!==null&&(Jr=r=r.return);continue}break}while(1)}function o1(){var e=Kv.current;return Kv.current=Qv,e===null?Qv:e}function Nd(e,t){var r=tt;tt|=16;var n=o1();ei===e&&Fn===t||Wl(e,t);do try{G3();break}catch(i){a1(e,i)}while(1);if(vT(),tt=r,Kv.current=n,Jr!==null)throw Error(ye(261));return ei=null,Fn=0,Tn}function G3(){for(;Jr!==null;)u1(Jr)}function Q3(){for(;Jr!==null&&!k3();)u1(Jr)}function u1(e){var t=f1(e.alternate,e,ds);e.memoizedProps=e.pendingProps,t===null?s1(e):Jr=t,VT.current=null}function s1(e){var t=e;do{var r=t.alternate;if(e=t.return,(t.flags&2048)==0){if(r=A3(r,t,ds),r!==null){Jr=r;return}if(r=t,r.tag!==24&&r.tag!==23||r.memoizedState===null||(ds&1073741824)!=0||(r.mode&4)==0){for(var n=0,i=r.child;i!==null;)n|=i.lanes|i.childLanes,i=i.sibling;r.childLanes=n}e!==null&&(e.flags&2048)==0&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1s&&(l=s,s=L,L=l),l=IC(m,L),o=IC(m,s),l&&o&&(x.rangeCount!==1||x.anchorNode!==l.node||x.anchorOffset!==l.offset||x.focusNode!==o.node||x.focusOffset!==o.offset)&&(w=w.createRange(),w.setStart(l.node,l.offset),x.removeAllRanges(),L>s?(x.addRange(w),x.extend(o.node,o.offset)):(w.setEnd(o.node,o.offset),x.addRange(w)))))),w=[],x=m;x=x.parentNode;)x.nodeType===1&&w.push({element:x,left:x.scrollLeft,top:x.scrollTop});for(typeof m.focus=="function"&&m.focus(),m=0;mjn()-BT?Wl(e,0):GT|=r),Qi(e,t)}function Y3(e,t){var r=e.stateNode;r!==null&&r.delete(t),t=0,t===0&&(t=e.mode,(t&2)==0?t=1:(t&4)==0?t=ql()===99?1:2:(To===0&&(To=Bl),t=xl(62914560&~To),t===0&&(t=4194304))),r=wi(),e=Xv(e,t),e!==null&&(cv(e,t,r),Qi(e,r))}var f1;f1=function(e,t,r){var n=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||ci.current)ga=!0;else if((r&n)!=0)ga=(e.flags&16384)!=0;else{switch(ga=!1,t.tag){case 3:PL(t),ET();break;case 5:mL(t);break;case 1:fi(t.type)&&wv(t);break;case 4:bT(t,t.stateNode.containerInfo);break;case 10:n=t.memoizedProps.value;var i=t.type._context;_r(xv,i._currentValue),i._currentValue=n;break;case 13:if(t.memoizedState!==null)return(r&t.child.childLanes)!=0?FL(e,t,r):(_r(Er,Er.current&1),t=yo(e,t,r),t!==null?t.sibling:null);_r(Er,Er.current&1);break;case 19:if(n=(r&t.childLanes)!=0,(e.flags&64)!=0){if(n)return GL(e,t,r);t.flags|=64}if(i=t.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),_r(Er,Er.current),n)break;return null;case 23:case 24:return t.lanes=0,CT(e,t,r)}return yo(e,t,r)}else ga=!1;switch(t.lanes=0,t.tag){case 2:if(n=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=Ml(t,Rn.current),Ul(t,r),i=OT(null,t,n,e,i,r),t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,fi(n)){var o=!0;wv(t)}else o=!1;t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,mT(t);var s=n.getDerivedStateFromProps;typeof s=="function"&&Iv(t,n,s,e),i.updater=Av,t.stateNode=i,i._reactInternals=t,yT(t,n,e,r),t=IT(null,t,n,!0,o,r)}else t.tag=0,pi(null,t,i,r),t=t.child;return t;case 16:i=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=i._init,i=o(i._payload),t.type=i,o=t.tag=X3(i),e=va(i,e),o){case 0:t=LT(null,t,i,e,r);break e;case 1:t=jL(null,t,i,e,r);break e;case 11:t=LL(null,t,i,e,r);break e;case 14:t=IL(null,t,i,va(i.type,e),n,r);break e}throw Error(ye(306,i,""))}return t;case 0:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:va(n,i),LT(e,t,n,i,r);case 1:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:va(n,i),jL(e,t,n,i,r);case 3:if(PL(t),n=t.updateQueue,e===null||n===null)throw Error(ye(282));if(n=t.pendingProps,i=t.memoizedState,i=i!==null?i.element:null,sL(e,t),cd(t,n,null,r),n=t.memoizedState.element,n===i)ET(),t=yo(e,t,r);else{if(i=t.stateNode,(o=i.hydrate)&&(ou=Rl(t.stateNode.containerInfo.firstChild),mo=t,o=ja=!0),o){if(e=i.mutableSourceEagerHydrationData,e!=null)for(i=0;i{"use strict";function v1(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__=="undefined"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(v1)}catch(e){console.error(e)}}v1(),g1.exports=h1()});var m1=G(Jl=>{"use strict";Object.defineProperty(Jl,"__esModule",{value:!0});Jl.versionInfo=Jl.version=void 0;var iH="15.5.0";Jl.version=iH;var aH=Object.freeze({major:15,minor:5,patch:0,preReleaseTag:null});Jl.versionInfo=aH});var rg=G(o_=>{"use strict";Object.defineProperty(o_,"__esModule",{value:!0});o_.default=oH;function oH(e){return typeof(e==null?void 0:e.then)=="function"}});var Ma=G(u_=>{"use strict";Object.defineProperty(u_,"__esModule",{value:!0});u_.default=uH;function ng(e){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ng=function(r){return typeof r}:ng=function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},ng(e)}function uH(e){return ng(e)=="object"&&e!==null}});var qa=G(pu=>{"use strict";Object.defineProperty(pu,"__esModule",{value:!0});pu.SYMBOL_TO_STRING_TAG=pu.SYMBOL_ASYNC_ITERATOR=pu.SYMBOL_ITERATOR=void 0;var sH=typeof Symbol=="function"&&Symbol.iterator!=null?Symbol.iterator:"@@iterator";pu.SYMBOL_ITERATOR=sH;var lH=typeof Symbol=="function"&&Symbol.asyncIterator!=null?Symbol.asyncIterator:"@@asyncIterator";pu.SYMBOL_ASYNC_ITERATOR=lH;var cH=typeof Symbol=="function"&&Symbol.toStringTag!=null?Symbol.toStringTag:"@@toStringTag";pu.SYMBOL_TO_STRING_TAG=cH});var ig=G(s_=>{"use strict";Object.defineProperty(s_,"__esModule",{value:!0});s_.getLocation=fH;function fH(e,t){for(var r=/\r\n|[\n\r]/g,n=1,i=t+1,o;(o=r.exec(e.body))&&o.index{"use strict";Object.defineProperty(og,"__esModule",{value:!0});og.printLocation=pH;og.printSourceLocation=y1;var dH=ig();function pH(e){return y1(e.source,(0,dH.getLocation)(e.source,e.start))}function y1(e,t){var r=e.locationOffset.column-1,n=ag(r)+e.body,i=t.line-1,o=e.locationOffset.line-1,s=t.line+o,l=t.line===1?r:0,d=t.column+l,h="".concat(e.name,":").concat(s,":").concat(d,` -`),v=n.split(/\r\n|[\n\r]/g),y=v[i];if(y.length>120){for(var b=Math.floor(d/80),D=d%80,_=[],k=0;k{"use strict";function ug(e){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ug=function(r){return typeof r}:ug=function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},ug(e)}Object.defineProperty(Rd,"__esModule",{value:!0});Rd.printError=O1;Rd.GraphQLError=void 0;var vH=mH(Ma()),gH=qa(),T1=ig(),_1=l_();function mH(e){return e&&e.__esModule?e:{default:e}}function yH(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function E1(e,t){for(var r=0;r{"use strict";Object.defineProperty(f_,"__esModule",{value:!0});f_.syntaxError=OH;var kH=Je();function OH(e,t,r){return new kH.GraphQLError("Syntax Error: ".concat(r),void 0,e,[t])}});var Jt=G(cg=>{"use strict";Object.defineProperty(cg,"__esModule",{value:!0});cg.Kind=void 0;var wH=Object.freeze({NAME:"Name",DOCUMENT:"Document",OPERATION_DEFINITION:"OperationDefinition",VARIABLE_DEFINITION:"VariableDefinition",SELECTION_SET:"SelectionSet",FIELD:"Field",ARGUMENT:"Argument",FRAGMENT_SPREAD:"FragmentSpread",INLINE_FRAGMENT:"InlineFragment",FRAGMENT_DEFINITION:"FragmentDefinition",VARIABLE:"Variable",INT:"IntValue",FLOAT:"FloatValue",STRING:"StringValue",BOOLEAN:"BooleanValue",NULL:"NullValue",ENUM:"EnumValue",LIST:"ListValue",OBJECT:"ObjectValue",OBJECT_FIELD:"ObjectField",DIRECTIVE:"Directive",NAMED_TYPE:"NamedType",LIST_TYPE:"ListType",NON_NULL_TYPE:"NonNullType",SCHEMA_DEFINITION:"SchemaDefinition",OPERATION_TYPE_DEFINITION:"OperationTypeDefinition",SCALAR_TYPE_DEFINITION:"ScalarTypeDefinition",OBJECT_TYPE_DEFINITION:"ObjectTypeDefinition",FIELD_DEFINITION:"FieldDefinition",INPUT_VALUE_DEFINITION:"InputValueDefinition",INTERFACE_TYPE_DEFINITION:"InterfaceTypeDefinition",UNION_TYPE_DEFINITION:"UnionTypeDefinition",ENUM_TYPE_DEFINITION:"EnumTypeDefinition",ENUM_VALUE_DEFINITION:"EnumValueDefinition",INPUT_OBJECT_TYPE_DEFINITION:"InputObjectTypeDefinition",DIRECTIVE_DEFINITION:"DirectiveDefinition",SCHEMA_EXTENSION:"SchemaExtension",SCALAR_TYPE_EXTENSION:"ScalarTypeExtension",OBJECT_TYPE_EXTENSION:"ObjectTypeExtension",INTERFACE_TYPE_EXTENSION:"InterfaceTypeExtension",UNION_TYPE_EXTENSION:"UnionTypeExtension",ENUM_TYPE_EXTENSION:"EnumTypeExtension",INPUT_OBJECT_TYPE_EXTENSION:"InputObjectTypeExtension"});cg.Kind=wH});var _n=G(d_=>{"use strict";Object.defineProperty(d_,"__esModule",{value:!0});d_.default=NH;function NH(e,t){var r=Boolean(e);if(!r)throw new Error(t!=null?t:"Unexpected invariant triggered.")}});var p_=G(fg=>{"use strict";Object.defineProperty(fg,"__esModule",{value:!0});fg.default=void 0;var DH=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):void 0,xH=DH;fg.default=xH});var dg=G(h_=>{"use strict";Object.defineProperty(h_,"__esModule",{value:!0});h_.default=LH;var CH=N1(_n()),w1=N1(p_());function N1(e){return e&&e.__esModule?e:{default:e}}function LH(e){var t=e.prototype.toJSON;typeof t=="function"||(0,CH.default)(0),e.prototype.inspect=t,w1.default&&(e.prototype[w1.default]=t)}});var Xl=G(hs=>{"use strict";Object.defineProperty(hs,"__esModule",{value:!0});hs.isNode=AH;hs.Token=hs.Location=void 0;var D1=IH(dg());function IH(e){return e&&e.__esModule?e:{default:e}}var x1=function(){function e(r,n,i){this.start=r.start,this.end=n.end,this.startToken=r,this.endToken=n,this.source=i}var t=e.prototype;return t.toJSON=function(){return{start:this.start,end:this.end}},e}();hs.Location=x1;(0,D1.default)(x1);var C1=function(){function e(r,n,i,o,s,l,d){this.kind=r,this.start=n,this.end=i,this.line=o,this.column=s,this.value=d,this.prev=l,this.next=null}var t=e.prototype;return t.toJSON=function(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}},e}();hs.Token=C1;(0,D1.default)(C1);function AH(e){return e!=null&&typeof e.kind=="string"}});var Zl=G(pg=>{"use strict";Object.defineProperty(pg,"__esModule",{value:!0});pg.TokenKind=void 0;var RH=Object.freeze({SOF:"",EOF:"",BANG:"!",DOLLAR:"$",AMP:"&",PAREN_L:"(",PAREN_R:")",SPREAD:"...",COLON:":",EQUALS:"=",AT:"@",BRACKET_L:"[",BRACKET_R:"]",BRACE_L:"{",PIPE:"|",BRACE_R:"}",NAME:"Name",INT:"Int",FLOAT:"Float",STRING:"String",BLOCK_STRING:"BlockString",COMMENT:"Comment"});pg.TokenKind=RH});var jt=G(v_=>{"use strict";Object.defineProperty(v_,"__esModule",{value:!0});v_.default=MH;var jH=PH(p_());function PH(e){return e&&e.__esModule?e:{default:e}}function hg(e){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?hg=function(r){return typeof r}:hg=function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},hg(e)}var FH=10,L1=2;function MH(e){return vg(e,[])}function vg(e,t){switch(hg(e)){case"string":return JSON.stringify(e);case"function":return e.name?"[function ".concat(e.name,"]"):"[function]";case"object":return e===null?"null":qH(e,t);default:return String(e)}}function qH(e,t){if(t.indexOf(e)!==-1)return"[Circular]";var r=[].concat(t,[e]),n=GH(e);if(n!==void 0){var i=n.call(e);if(i!==e)return typeof i=="string"?i:vg(i,r)}else if(Array.isArray(e))return UH(e,r);return VH(e,r)}function VH(e,t){var r=Object.keys(e);if(r.length===0)return"{}";if(t.length>L1)return"["+QH(e)+"]";var n=r.map(function(i){var o=vg(e[i],t);return i+": "+o});return"{ "+n.join(", ")+" }"}function UH(e,t){if(e.length===0)return"[]";if(t.length>L1)return"[Array]";for(var r=Math.min(FH,e.length),n=e.length-r,i=[],o=0;o1&&i.push("... ".concat(n," more items")),"["+i.join(", ")+"]"}function GH(e){var t=e[String(jH.default)];if(typeof t=="function")return t;if(typeof e.inspect=="function")return e.inspect}function QH(e){var t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if(t==="Object"&&typeof e.constructor=="function"){var r=e.constructor.name;if(typeof r=="string"&&r!=="")return r}return t}});var Hi=G(g_=>{"use strict";Object.defineProperty(g_,"__esModule",{value:!0});g_.default=BH;function BH(e,t){var r=Boolean(e);if(!r)throw new Error(t)}});var jd=G(gg=>{"use strict";Object.defineProperty(gg,"__esModule",{value:!0});gg.default=void 0;var KH=function(t,r){return t instanceof r};gg.default=KH});var mg=G(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.isSource=JH;Pd.Source=void 0;var HH=qa(),zH=y_(jt()),m_=y_(Hi()),WH=y_(jd());function y_(e){return e&&e.__esModule?e:{default:e}}function I1(e,t){for(var r=0;r1&&arguments[1]!==void 0?arguments[1]:"GraphQL request",n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{line:1,column:1};typeof t=="string"||(0,m_.default)(0,"Body must be a string. Received: ".concat((0,zH.default)(t),".")),this.body=t,this.name=r,this.locationOffset=n,this.locationOffset.line>0||(0,m_.default)(0,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||(0,m_.default)(0,"column in locationOffset is 1-indexed and must be positive.")}return YH(e,[{key:HH.SYMBOL_TO_STRING_TAG,get:function(){return"Source"}}]),e}();Pd.Source=A1;function JH(e){return(0,WH.default)(e,A1)}});var $l=G(yg=>{"use strict";Object.defineProperty(yg,"__esModule",{value:!0});yg.DirectiveLocation=void 0;var XH=Object.freeze({QUERY:"QUERY",MUTATION:"MUTATION",SUBSCRIPTION:"SUBSCRIPTION",FIELD:"FIELD",FRAGMENT_DEFINITION:"FRAGMENT_DEFINITION",FRAGMENT_SPREAD:"FRAGMENT_SPREAD",INLINE_FRAGMENT:"INLINE_FRAGMENT",VARIABLE_DEFINITION:"VARIABLE_DEFINITION",SCHEMA:"SCHEMA",SCALAR:"SCALAR",OBJECT:"OBJECT",FIELD_DEFINITION:"FIELD_DEFINITION",ARGUMENT_DEFINITION:"ARGUMENT_DEFINITION",INTERFACE:"INTERFACE",UNION:"UNION",ENUM:"ENUM",ENUM_VALUE:"ENUM_VALUE",INPUT_OBJECT:"INPUT_OBJECT",INPUT_FIELD_DEFINITION:"INPUT_FIELD_DEFINITION"});yg.DirectiveLocation=XH});var ec=G(Fd=>{"use strict";Object.defineProperty(Fd,"__esModule",{value:!0});Fd.dedentBlockStringValue=ZH;Fd.getBlockStringIndentation=j1;Fd.printBlockString=$H;function ZH(e){var t=e.split(/\r\n|[\n\r]/g),r=j1(e);if(r!==0)for(var n=1;ni&&R1(t[o-1]);)--o;return t.slice(i,o).join(` -`)}function R1(e){for(var t=0;t1&&arguments[1]!==void 0?arguments[1]:"",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=e.indexOf(` -`)===-1,i=e[0]===" "||e[0]===" ",o=e[e.length-1]==='"',s=e[e.length-1]==="\\",l=!n||o||s||r,d="";return l&&!(n&&i)&&(d+=` -`+t),d+=t?e.replace(/\n/g,` -`+t):e,l&&(d+=` -`),'"""'+d.replace(/"""/g,'\\"""')+'"""'}});var Tg=G(Md=>{"use strict";Object.defineProperty(Md,"__esModule",{value:!0});Md.isPunctuatorTokenKind=rz;Md.Lexer=void 0;var Va=lg(),xr=Xl(),dt=Zl(),ez=ec(),tz=function(){function e(r){var n=new xr.Token(dt.TokenKind.SOF,0,0,0,0,null);this.source=r,this.lastToken=n,this.token=n,this.line=1,this.lineStart=0}var t=e.prototype;return t.advance=function(){this.lastToken=this.token;var n=this.token=this.lookahead();return n},t.lookahead=function(){var n=this.token;if(n.kind!==dt.TokenKind.EOF)do{var i;n=(i=n.next)!==null&&i!==void 0?i:n.next=nz(this,n)}while(n.kind===dt.TokenKind.COMMENT);return n},e}();Md.Lexer=tz;function rz(e){return e===dt.TokenKind.BANG||e===dt.TokenKind.DOLLAR||e===dt.TokenKind.AMP||e===dt.TokenKind.PAREN_L||e===dt.TokenKind.PAREN_R||e===dt.TokenKind.SPREAD||e===dt.TokenKind.COLON||e===dt.TokenKind.EQUALS||e===dt.TokenKind.AT||e===dt.TokenKind.BRACKET_L||e===dt.TokenKind.BRACKET_R||e===dt.TokenKind.BRACE_L||e===dt.TokenKind.PIPE||e===dt.TokenKind.BRACE_R}function vs(e){return isNaN(e)?dt.TokenKind.EOF:e<127?JSON.stringify(String.fromCharCode(e)):'"\\u'.concat(("00"+e.toString(16).toUpperCase()).slice(-4),'"')}function nz(e,t){for(var r=e.source,n=r.body,i=n.length,o=t.end;o31||s===9));return new xr.Token(dt.TokenKind.COMMENT,t,l,r,n,i,o.slice(t+1,l))}function oz(e,t,r,n,i,o){var s=e.body,l=r,d=t,h=!1;if(l===45&&(l=s.charCodeAt(++d)),l===48){if(l=s.charCodeAt(++d),l>=48&&l<=57)throw(0,Va.syntaxError)(e,d,"Invalid number, unexpected digit after 0: ".concat(vs(l),"."))}else d=b_(e,d,l),l=s.charCodeAt(d);if(l===46&&(h=!0,l=s.charCodeAt(++d),d=b_(e,d,l),l=s.charCodeAt(d)),(l===69||l===101)&&(h=!0,l=s.charCodeAt(++d),(l===43||l===45)&&(l=s.charCodeAt(++d)),d=b_(e,d,l),l=s.charCodeAt(d)),l===46||fz(l))throw(0,Va.syntaxError)(e,d,"Invalid number, expected digit but got: ".concat(vs(l),"."));return new xr.Token(h?dt.TokenKind.FLOAT:dt.TokenKind.INT,t,d,n,i,o,s.slice(t,d))}function b_(e,t,r){var n=e.body,i=t,o=r;if(o>=48&&o<=57){do o=n.charCodeAt(++i);while(o>=48&&o<=57);return i}throw(0,Va.syntaxError)(e,i,"Invalid number, expected digit but got: ".concat(vs(o),"."))}function uz(e,t,r,n,i){for(var o=e.body,s=t+1,l=s,d=0,h="";s=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1}function cz(e,t,r,n,i){for(var o=e.body,s=o.length,l=t+1,d=0;l!==s&&!isNaN(d=o.charCodeAt(l))&&(d===95||d>=48&&d<=57||d>=65&&d<=90||d>=97&&d<=122);)++l;return new xr.Token(dt.TokenKind.NAME,t,l,r,n,i,o.slice(t,l))}function fz(e){return e===95||e>=65&&e<=90||e>=97&&e<=122}});var tc=G(gs=>{"use strict";Object.defineProperty(gs,"__esModule",{value:!0});gs.parse=hz;gs.parseValue=vz;gs.parseType=gz;gs.Parser=void 0;var T_=lg(),$e=Jt(),dz=Xl(),De=Zl(),P1=mg(),pz=$l(),F1=Tg();function hz(e,t){var r=new _g(e,t);return r.parseDocument()}function vz(e,t){var r=new _g(e,t);r.expectToken(De.TokenKind.SOF);var n=r.parseValueLiteral(!1);return r.expectToken(De.TokenKind.EOF),n}function gz(e,t){var r=new _g(e,t);r.expectToken(De.TokenKind.SOF);var n=r.parseTypeReference();return r.expectToken(De.TokenKind.EOF),n}var _g=function(){function e(r,n){var i=(0,P1.isSource)(r)?r:new P1.Source(r);this._lexer=new F1.Lexer(i),this._options=n}var t=e.prototype;return t.parseName=function(){var n=this.expectToken(De.TokenKind.NAME);return{kind:$e.Kind.NAME,value:n.value,loc:this.loc(n)}},t.parseDocument=function(){var n=this._lexer.token;return{kind:$e.Kind.DOCUMENT,definitions:this.many(De.TokenKind.SOF,this.parseDefinition,De.TokenKind.EOF),loc:this.loc(n)}},t.parseDefinition=function(){if(this.peek(De.TokenKind.NAME))switch(this._lexer.token.value){case"query":case"mutation":case"subscription":return this.parseOperationDefinition();case"fragment":return this.parseFragmentDefinition();case"schema":case"scalar":case"type":case"interface":case"union":case"enum":case"input":case"directive":return this.parseTypeSystemDefinition();case"extend":return this.parseTypeSystemExtension()}else{if(this.peek(De.TokenKind.BRACE_L))return this.parseOperationDefinition();if(this.peekDescription())return this.parseTypeSystemDefinition()}throw this.unexpected()},t.parseOperationDefinition=function(){var n=this._lexer.token;if(this.peek(De.TokenKind.BRACE_L))return{kind:$e.Kind.OPERATION_DEFINITION,operation:"query",name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet(),loc:this.loc(n)};var i=this.parseOperationType(),o;return this.peek(De.TokenKind.NAME)&&(o=this.parseName()),{kind:$e.Kind.OPERATION_DEFINITION,operation:i,name:o,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet(),loc:this.loc(n)}},t.parseOperationType=function(){var n=this.expectToken(De.TokenKind.NAME);switch(n.value){case"query":return"query";case"mutation":return"mutation";case"subscription":return"subscription"}throw this.unexpected(n)},t.parseVariableDefinitions=function(){return this.optionalMany(De.TokenKind.PAREN_L,this.parseVariableDefinition,De.TokenKind.PAREN_R)},t.parseVariableDefinition=function(){var n=this._lexer.token;return{kind:$e.Kind.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(De.TokenKind.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(De.TokenKind.EQUALS)?this.parseValueLiteral(!0):void 0,directives:this.parseDirectives(!0),loc:this.loc(n)}},t.parseVariable=function(){var n=this._lexer.token;return this.expectToken(De.TokenKind.DOLLAR),{kind:$e.Kind.VARIABLE,name:this.parseName(),loc:this.loc(n)}},t.parseSelectionSet=function(){var n=this._lexer.token;return{kind:$e.Kind.SELECTION_SET,selections:this.many(De.TokenKind.BRACE_L,this.parseSelection,De.TokenKind.BRACE_R),loc:this.loc(n)}},t.parseSelection=function(){return this.peek(De.TokenKind.SPREAD)?this.parseFragment():this.parseField()},t.parseField=function(){var n=this._lexer.token,i=this.parseName(),o,s;return this.expectOptionalToken(De.TokenKind.COLON)?(o=i,s=this.parseName()):s=i,{kind:$e.Kind.FIELD,alias:o,name:s,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(De.TokenKind.BRACE_L)?this.parseSelectionSet():void 0,loc:this.loc(n)}},t.parseArguments=function(n){var i=n?this.parseConstArgument:this.parseArgument;return this.optionalMany(De.TokenKind.PAREN_L,i,De.TokenKind.PAREN_R)},t.parseArgument=function(){var n=this._lexer.token,i=this.parseName();return this.expectToken(De.TokenKind.COLON),{kind:$e.Kind.ARGUMENT,name:i,value:this.parseValueLiteral(!1),loc:this.loc(n)}},t.parseConstArgument=function(){var n=this._lexer.token;return{kind:$e.Kind.ARGUMENT,name:this.parseName(),value:(this.expectToken(De.TokenKind.COLON),this.parseValueLiteral(!0)),loc:this.loc(n)}},t.parseFragment=function(){var n=this._lexer.token;this.expectToken(De.TokenKind.SPREAD);var i=this.expectOptionalKeyword("on");return!i&&this.peek(De.TokenKind.NAME)?{kind:$e.Kind.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1),loc:this.loc(n)}:{kind:$e.Kind.INLINE_FRAGMENT,typeCondition:i?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet(),loc:this.loc(n)}},t.parseFragmentDefinition=function(){var n,i=this._lexer.token;return this.expectKeyword("fragment"),((n=this._options)===null||n===void 0?void 0:n.experimentalFragmentVariables)===!0?{kind:$e.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet(),loc:this.loc(i)}:{kind:$e.Kind.FRAGMENT_DEFINITION,name:this.parseFragmentName(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet(),loc:this.loc(i)}},t.parseFragmentName=function(){if(this._lexer.token.value==="on")throw this.unexpected();return this.parseName()},t.parseValueLiteral=function(n){var i=this._lexer.token;switch(i.kind){case De.TokenKind.BRACKET_L:return this.parseList(n);case De.TokenKind.BRACE_L:return this.parseObject(n);case De.TokenKind.INT:return this._lexer.advance(),{kind:$e.Kind.INT,value:i.value,loc:this.loc(i)};case De.TokenKind.FLOAT:return this._lexer.advance(),{kind:$e.Kind.FLOAT,value:i.value,loc:this.loc(i)};case De.TokenKind.STRING:case De.TokenKind.BLOCK_STRING:return this.parseStringLiteral();case De.TokenKind.NAME:switch(this._lexer.advance(),i.value){case"true":return{kind:$e.Kind.BOOLEAN,value:!0,loc:this.loc(i)};case"false":return{kind:$e.Kind.BOOLEAN,value:!1,loc:this.loc(i)};case"null":return{kind:$e.Kind.NULL,loc:this.loc(i)};default:return{kind:$e.Kind.ENUM,value:i.value,loc:this.loc(i)}}case De.TokenKind.DOLLAR:if(!n)return this.parseVariable();break}throw this.unexpected()},t.parseStringLiteral=function(){var n=this._lexer.token;return this._lexer.advance(),{kind:$e.Kind.STRING,value:n.value,block:n.kind===De.TokenKind.BLOCK_STRING,loc:this.loc(n)}},t.parseList=function(n){var i=this,o=this._lexer.token,s=function(){return i.parseValueLiteral(n)};return{kind:$e.Kind.LIST,values:this.any(De.TokenKind.BRACKET_L,s,De.TokenKind.BRACKET_R),loc:this.loc(o)}},t.parseObject=function(n){var i=this,o=this._lexer.token,s=function(){return i.parseObjectField(n)};return{kind:$e.Kind.OBJECT,fields:this.any(De.TokenKind.BRACE_L,s,De.TokenKind.BRACE_R),loc:this.loc(o)}},t.parseObjectField=function(n){var i=this._lexer.token,o=this.parseName();return this.expectToken(De.TokenKind.COLON),{kind:$e.Kind.OBJECT_FIELD,name:o,value:this.parseValueLiteral(n),loc:this.loc(i)}},t.parseDirectives=function(n){for(var i=[];this.peek(De.TokenKind.AT);)i.push(this.parseDirective(n));return i},t.parseDirective=function(n){var i=this._lexer.token;return this.expectToken(De.TokenKind.AT),{kind:$e.Kind.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(n),loc:this.loc(i)}},t.parseTypeReference=function(){var n=this._lexer.token,i;return this.expectOptionalToken(De.TokenKind.BRACKET_L)?(i=this.parseTypeReference(),this.expectToken(De.TokenKind.BRACKET_R),i={kind:$e.Kind.LIST_TYPE,type:i,loc:this.loc(n)}):i=this.parseNamedType(),this.expectOptionalToken(De.TokenKind.BANG)?{kind:$e.Kind.NON_NULL_TYPE,type:i,loc:this.loc(n)}:i},t.parseNamedType=function(){var n=this._lexer.token;return{kind:$e.Kind.NAMED_TYPE,name:this.parseName(),loc:this.loc(n)}},t.parseTypeSystemDefinition=function(){var n=this.peekDescription()?this._lexer.lookahead():this._lexer.token;if(n.kind===De.TokenKind.NAME)switch(n.value){case"schema":return this.parseSchemaDefinition();case"scalar":return this.parseScalarTypeDefinition();case"type":return this.parseObjectTypeDefinition();case"interface":return this.parseInterfaceTypeDefinition();case"union":return this.parseUnionTypeDefinition();case"enum":return this.parseEnumTypeDefinition();case"input":return this.parseInputObjectTypeDefinition();case"directive":return this.parseDirectiveDefinition()}throw this.unexpected(n)},t.peekDescription=function(){return this.peek(De.TokenKind.STRING)||this.peek(De.TokenKind.BLOCK_STRING)},t.parseDescription=function(){if(this.peekDescription())return this.parseStringLiteral()},t.parseSchemaDefinition=function(){var n=this._lexer.token,i=this.parseDescription();this.expectKeyword("schema");var o=this.parseDirectives(!0),s=this.many(De.TokenKind.BRACE_L,this.parseOperationTypeDefinition,De.TokenKind.BRACE_R);return{kind:$e.Kind.SCHEMA_DEFINITION,description:i,directives:o,operationTypes:s,loc:this.loc(n)}},t.parseOperationTypeDefinition=function(){var n=this._lexer.token,i=this.parseOperationType();this.expectToken(De.TokenKind.COLON);var o=this.parseNamedType();return{kind:$e.Kind.OPERATION_TYPE_DEFINITION,operation:i,type:o,loc:this.loc(n)}},t.parseScalarTypeDefinition=function(){var n=this._lexer.token,i=this.parseDescription();this.expectKeyword("scalar");var o=this.parseName(),s=this.parseDirectives(!0);return{kind:$e.Kind.SCALAR_TYPE_DEFINITION,description:i,name:o,directives:s,loc:this.loc(n)}},t.parseObjectTypeDefinition=function(){var n=this._lexer.token,i=this.parseDescription();this.expectKeyword("type");var o=this.parseName(),s=this.parseImplementsInterfaces(),l=this.parseDirectives(!0),d=this.parseFieldsDefinition();return{kind:$e.Kind.OBJECT_TYPE_DEFINITION,description:i,name:o,interfaces:s,directives:l,fields:d,loc:this.loc(n)}},t.parseImplementsInterfaces=function(){var n;if(!this.expectOptionalKeyword("implements"))return[];if(((n=this._options)===null||n===void 0?void 0:n.allowLegacySDLImplementsInterfaces)===!0){var i=[];this.expectOptionalToken(De.TokenKind.AMP);do i.push(this.parseNamedType());while(this.expectOptionalToken(De.TokenKind.AMP)||this.peek(De.TokenKind.NAME));return i}return this.delimitedMany(De.TokenKind.AMP,this.parseNamedType)},t.parseFieldsDefinition=function(){var n;return((n=this._options)===null||n===void 0?void 0:n.allowLegacySDLEmptyFields)===!0&&this.peek(De.TokenKind.BRACE_L)&&this._lexer.lookahead().kind===De.TokenKind.BRACE_R?(this._lexer.advance(),this._lexer.advance(),[]):this.optionalMany(De.TokenKind.BRACE_L,this.parseFieldDefinition,De.TokenKind.BRACE_R)},t.parseFieldDefinition=function(){var n=this._lexer.token,i=this.parseDescription(),o=this.parseName(),s=this.parseArgumentDefs();this.expectToken(De.TokenKind.COLON);var l=this.parseTypeReference(),d=this.parseDirectives(!0);return{kind:$e.Kind.FIELD_DEFINITION,description:i,name:o,arguments:s,type:l,directives:d,loc:this.loc(n)}},t.parseArgumentDefs=function(){return this.optionalMany(De.TokenKind.PAREN_L,this.parseInputValueDef,De.TokenKind.PAREN_R)},t.parseInputValueDef=function(){var n=this._lexer.token,i=this.parseDescription(),o=this.parseName();this.expectToken(De.TokenKind.COLON);var s=this.parseTypeReference(),l;this.expectOptionalToken(De.TokenKind.EQUALS)&&(l=this.parseValueLiteral(!0));var d=this.parseDirectives(!0);return{kind:$e.Kind.INPUT_VALUE_DEFINITION,description:i,name:o,type:s,defaultValue:l,directives:d,loc:this.loc(n)}},t.parseInterfaceTypeDefinition=function(){var n=this._lexer.token,i=this.parseDescription();this.expectKeyword("interface");var o=this.parseName(),s=this.parseImplementsInterfaces(),l=this.parseDirectives(!0),d=this.parseFieldsDefinition();return{kind:$e.Kind.INTERFACE_TYPE_DEFINITION,description:i,name:o,interfaces:s,directives:l,fields:d,loc:this.loc(n)}},t.parseUnionTypeDefinition=function(){var n=this._lexer.token,i=this.parseDescription();this.expectKeyword("union");var o=this.parseName(),s=this.parseDirectives(!0),l=this.parseUnionMemberTypes();return{kind:$e.Kind.UNION_TYPE_DEFINITION,description:i,name:o,directives:s,types:l,loc:this.loc(n)}},t.parseUnionMemberTypes=function(){return this.expectOptionalToken(De.TokenKind.EQUALS)?this.delimitedMany(De.TokenKind.PIPE,this.parseNamedType):[]},t.parseEnumTypeDefinition=function(){var n=this._lexer.token,i=this.parseDescription();this.expectKeyword("enum");var o=this.parseName(),s=this.parseDirectives(!0),l=this.parseEnumValuesDefinition();return{kind:$e.Kind.ENUM_TYPE_DEFINITION,description:i,name:o,directives:s,values:l,loc:this.loc(n)}},t.parseEnumValuesDefinition=function(){return this.optionalMany(De.TokenKind.BRACE_L,this.parseEnumValueDefinition,De.TokenKind.BRACE_R)},t.parseEnumValueDefinition=function(){var n=this._lexer.token,i=this.parseDescription(),o=this.parseName(),s=this.parseDirectives(!0);return{kind:$e.Kind.ENUM_VALUE_DEFINITION,description:i,name:o,directives:s,loc:this.loc(n)}},t.parseInputObjectTypeDefinition=function(){var n=this._lexer.token,i=this.parseDescription();this.expectKeyword("input");var o=this.parseName(),s=this.parseDirectives(!0),l=this.parseInputFieldsDefinition();return{kind:$e.Kind.INPUT_OBJECT_TYPE_DEFINITION,description:i,name:o,directives:s,fields:l,loc:this.loc(n)}},t.parseInputFieldsDefinition=function(){return this.optionalMany(De.TokenKind.BRACE_L,this.parseInputValueDef,De.TokenKind.BRACE_R)},t.parseTypeSystemExtension=function(){var n=this._lexer.lookahead();if(n.kind===De.TokenKind.NAME)switch(n.value){case"schema":return this.parseSchemaExtension();case"scalar":return this.parseScalarTypeExtension();case"type":return this.parseObjectTypeExtension();case"interface":return this.parseInterfaceTypeExtension();case"union":return this.parseUnionTypeExtension();case"enum":return this.parseEnumTypeExtension();case"input":return this.parseInputObjectTypeExtension()}throw this.unexpected(n)},t.parseSchemaExtension=function(){var n=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("schema");var i=this.parseDirectives(!0),o=this.optionalMany(De.TokenKind.BRACE_L,this.parseOperationTypeDefinition,De.TokenKind.BRACE_R);if(i.length===0&&o.length===0)throw this.unexpected();return{kind:$e.Kind.SCHEMA_EXTENSION,directives:i,operationTypes:o,loc:this.loc(n)}},t.parseScalarTypeExtension=function(){var n=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("scalar");var i=this.parseName(),o=this.parseDirectives(!0);if(o.length===0)throw this.unexpected();return{kind:$e.Kind.SCALAR_TYPE_EXTENSION,name:i,directives:o,loc:this.loc(n)}},t.parseObjectTypeExtension=function(){var n=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("type");var i=this.parseName(),o=this.parseImplementsInterfaces(),s=this.parseDirectives(!0),l=this.parseFieldsDefinition();if(o.length===0&&s.length===0&&l.length===0)throw this.unexpected();return{kind:$e.Kind.OBJECT_TYPE_EXTENSION,name:i,interfaces:o,directives:s,fields:l,loc:this.loc(n)}},t.parseInterfaceTypeExtension=function(){var n=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("interface");var i=this.parseName(),o=this.parseImplementsInterfaces(),s=this.parseDirectives(!0),l=this.parseFieldsDefinition();if(o.length===0&&s.length===0&&l.length===0)throw this.unexpected();return{kind:$e.Kind.INTERFACE_TYPE_EXTENSION,name:i,interfaces:o,directives:s,fields:l,loc:this.loc(n)}},t.parseUnionTypeExtension=function(){var n=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("union");var i=this.parseName(),o=this.parseDirectives(!0),s=this.parseUnionMemberTypes();if(o.length===0&&s.length===0)throw this.unexpected();return{kind:$e.Kind.UNION_TYPE_EXTENSION,name:i,directives:o,types:s,loc:this.loc(n)}},t.parseEnumTypeExtension=function(){var n=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("enum");var i=this.parseName(),o=this.parseDirectives(!0),s=this.parseEnumValuesDefinition();if(o.length===0&&s.length===0)throw this.unexpected();return{kind:$e.Kind.ENUM_TYPE_EXTENSION,name:i,directives:o,values:s,loc:this.loc(n)}},t.parseInputObjectTypeExtension=function(){var n=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("input");var i=this.parseName(),o=this.parseDirectives(!0),s=this.parseInputFieldsDefinition();if(o.length===0&&s.length===0)throw this.unexpected();return{kind:$e.Kind.INPUT_OBJECT_TYPE_EXTENSION,name:i,directives:o,fields:s,loc:this.loc(n)}},t.parseDirectiveDefinition=function(){var n=this._lexer.token,i=this.parseDescription();this.expectKeyword("directive"),this.expectToken(De.TokenKind.AT);var o=this.parseName(),s=this.parseArgumentDefs(),l=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");var d=this.parseDirectiveLocations();return{kind:$e.Kind.DIRECTIVE_DEFINITION,description:i,name:o,arguments:s,repeatable:l,locations:d,loc:this.loc(n)}},t.parseDirectiveLocations=function(){return this.delimitedMany(De.TokenKind.PIPE,this.parseDirectiveLocation)},t.parseDirectiveLocation=function(){var n=this._lexer.token,i=this.parseName();if(pz.DirectiveLocation[i.value]!==void 0)return i;throw this.unexpected(n)},t.loc=function(n){var i;if(((i=this._options)===null||i===void 0?void 0:i.noLocation)!==!0)return new dz.Location(n,this._lexer.lastToken,this._lexer.source)},t.peek=function(n){return this._lexer.token.kind===n},t.expectToken=function(n){var i=this._lexer.token;if(i.kind===n)return this._lexer.advance(),i;throw(0,T_.syntaxError)(this._lexer.source,i.start,"Expected ".concat(M1(n),", found ").concat(__(i),"."))},t.expectOptionalToken=function(n){var i=this._lexer.token;if(i.kind===n)return this._lexer.advance(),i},t.expectKeyword=function(n){var i=this._lexer.token;if(i.kind===De.TokenKind.NAME&&i.value===n)this._lexer.advance();else throw(0,T_.syntaxError)(this._lexer.source,i.start,'Expected "'.concat(n,'", found ').concat(__(i),"."))},t.expectOptionalKeyword=function(n){var i=this._lexer.token;return i.kind===De.TokenKind.NAME&&i.value===n?(this._lexer.advance(),!0):!1},t.unexpected=function(n){var i=n!=null?n:this._lexer.token;return(0,T_.syntaxError)(this._lexer.source,i.start,"Unexpected ".concat(__(i),"."))},t.any=function(n,i,o){this.expectToken(n);for(var s=[];!this.expectOptionalToken(o);)s.push(i.call(this));return s},t.optionalMany=function(n,i,o){if(this.expectOptionalToken(n)){var s=[];do s.push(i.call(this));while(!this.expectOptionalToken(o));return s}return[]},t.many=function(n,i,o){this.expectToken(n);var s=[];do s.push(i.call(this));while(!this.expectOptionalToken(o));return s},t.delimitedMany=function(n,i){this.expectOptionalToken(n);var o=[];do o.push(i.call(this));while(this.expectOptionalToken(n));return o},e}();gs.Parser=_g;function __(e){var t=e.value;return M1(e.kind)+(t!=null?' "'.concat(t,'"'):"")}function M1(e){return(0,F1.isPunctuatorTokenKind)(e)?'"'.concat(e,'"'):e}});var hu=G(_o=>{"use strict";Object.defineProperty(_o,"__esModule",{value:!0});_o.visit=bz;_o.visitInParallel=Tz;_o.getVisitFn=Eg;_o.BREAK=_o.QueryDocumentKeys=void 0;var mz=yz(jt()),q1=Xl();function yz(e){return e&&e.__esModule?e:{default:e}}var V1={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]};_o.QueryDocumentKeys=V1;var rc=Object.freeze({});_o.BREAK=rc;function bz(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:V1,n=void 0,i=Array.isArray(e),o=[e],s=-1,l=[],d=void 0,h=void 0,v=void 0,y=[],b=[],D=e;do{s++;var _=s===o.length,k=_&&l.length!==0;if(_){if(h=b.length===0?void 0:y[y.length-1],d=v,v=b.pop(),k){if(i)d=d.slice();else{for(var T={},S=0,m=Object.keys(d);S{"use strict";Object.defineProperty(Sg,"__esModule",{value:!0});Sg.default=void 0;var _z=Array.prototype.find?function(e,t){return Array.prototype.find.call(e,t)}:function(e,t){for(var r=0;r{"use strict";Object.defineProperty(kg,"__esModule",{value:!0});kg.default=void 0;var Sz=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},kz=Sz;kg.default=kz});var qd=G(E_=>{"use strict";Object.defineProperty(E_,"__esModule",{value:!0});E_.locatedError=Dz;var Oz=Nz(jt()),wz=Je();function Nz(e){return e&&e.__esModule?e:{default:e}}function Dz(e,t,r){var n,i=e instanceof Error?e:new Error("Unexpected error value: "+(0,Oz.default)(e));return Array.isArray(i.path)?i:new wz.GraphQLError(i.message,(n=i.nodes)!==null&&n!==void 0?n:t,i.source,i.positions,r,i)}});var S_=G(Og=>{"use strict";Object.defineProperty(Og,"__esModule",{value:!0});Og.assertValidName=Iz;Og.isValidNameError=G1;var xz=Cz(Hi()),U1=Je();function Cz(e){return e&&e.__esModule?e:{default:e}}var Lz=/^[_a-zA-Z][_a-zA-Z0-9]*$/;function Iz(e){var t=G1(e);if(t)throw t;return e}function G1(e){if(typeof e=="string"||(0,xz.default)(0,"Expected name to be a string."),e.length>1&&e[0]==="_"&&e[1]==="_")return new U1.GraphQLError('Name "'.concat(e,'" must not begin with "__", which is reserved by GraphQL introspection.'));if(!Lz.test(e))return new U1.GraphQLError('Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "'.concat(e,'" does not.'))}});var ic=G(wg=>{"use strict";Object.defineProperty(wg,"__esModule",{value:!0});wg.default=void 0;var Az=Object.entries||function(e){return Object.keys(e).map(function(t){return[t,e[t]]})},Rz=Az;wg.default=Rz});var vu=G(k_=>{"use strict";Object.defineProperty(k_,"__esModule",{value:!0});k_.default=jz;function jz(e,t){return e.reduce(function(r,n){return r[t(n)]=n,r},Object.create(null))}});var w_=G(O_=>{"use strict";Object.defineProperty(O_,"__esModule",{value:!0});O_.default=Mz;var Pz=Fz(ic());function Fz(e){return e&&e.__esModule?e:{default:e}}function Mz(e,t){for(var r=Object.create(null),n=0,i=(0,Pz.default)(e);n{"use strict";Object.defineProperty(N_,"__esModule",{value:!0});N_.default=Uz;var qz=Vz(ic());function Vz(e){return e&&e.__esModule?e:{default:e}}function Uz(e){if(Object.getPrototypeOf(e)===null)return e;for(var t=Object.create(null),r=0,n=(0,qz.default)(e);r{"use strict";Object.defineProperty(D_,"__esModule",{value:!0});D_.default=Gz;function Gz(e,t,r){return e.reduce(function(n,i){return n[t(i)]=r(i),n},Object.create(null))}});var gu=G(x_=>{"use strict";Object.defineProperty(x_,"__esModule",{value:!0});x_.default=Bz;var Qz=5;function Bz(e,t){var r=typeof e=="string"?[e,t]:[void 0,e],n=r[0],i=r[1],o=" Did you mean ";n&&(o+=n+" ");var s=i.map(function(h){return'"'.concat(h,'"')});switch(s.length){case 0:return"";case 1:return o+s[0]+"?";case 2:return o+s[0]+" or "+s[1]+"?"}var l=s.slice(0,Qz),d=l.pop();return o+l.join(", ")+", or "+d+"?"}});var Q1=G(C_=>{"use strict";Object.defineProperty(C_,"__esModule",{value:!0});C_.default=Kz;function Kz(e){return e}});var Ud=G(I_=>{"use strict";Object.defineProperty(I_,"__esModule",{value:!0});I_.default=Hz;function Hz(e,t){for(var r=0,n=0;r0);var l=0;do++n,l=l*10+o-L_,o=t.charCodeAt(n);while(Dg(o)&&l>0);if(sl)return 1}else{if(io)return 1;++r,++n}}return e.length-t.length}var L_=48,zz=57;function Dg(e){return!isNaN(e)&&L_<=e&&e<=zz}});var mu=G(A_=>{"use strict";Object.defineProperty(A_,"__esModule",{value:!0});A_.default=Jz;var Wz=Yz(Ud());function Yz(e){return e&&e.__esModule?e:{default:e}}function Jz(e,t){for(var r=Object.create(null),n=new Xz(e),i=Math.floor(e.length*.4)+1,o=0;oi)){for(var y=this._rows,b=0;b<=v;b++)y[0][b]=b;for(var D=1;D<=h;D++){for(var _=y[(D-1)%3],k=y[D%3],T=k[0]=D,S=1;S<=v;S++){var m=s[D-1]===l[S-1]?0:1,w=Math.min(_[S]+1,k[S-1]+1,_[S-1]+m);if(D>1&&S>1&&s[D-1]===l[S-2]&&s[D-2]===l[S-1]){var x=y[(D-2)%3][S-2];w=Math.min(w,x+1)}wi)return}var L=y[h%3][v];return L<=i?L:void 0}},e}();function B1(e){for(var t=e.length,r=new Array(t),n=0;n{"use strict";Object.defineProperty(R_,"__esModule",{value:!0});R_.print=eW;var Zz=hu(),$z=ec();function eW(e){return(0,Zz.visit)(e,{leave:rW})}var tW=80,rW={Name:function(t){return t.value},Variable:function(t){return"$"+t.name},Document:function(t){return je(t.definitions,` - -`)+` -`},OperationDefinition:function(t){var r=t.operation,n=t.name,i=yr("(",je(t.variableDefinitions,", "),")"),o=je(t.directives," "),s=t.selectionSet;return!n&&!o&&!i&&r==="query"?s:je([r,je([n,i]),o,s]," ")},VariableDefinition:function(t){var r=t.variable,n=t.type,i=t.defaultValue,o=t.directives;return r+": "+n+yr(" = ",i)+yr(" ",je(o," "))},SelectionSet:function(t){var r=t.selections;return ya(r)},Field:function(t){var r=t.alias,n=t.name,i=t.arguments,o=t.directives,s=t.selectionSet,l=yr("",r,": ")+n,d=l+yr("(",je(i,", "),")");return d.length>tW&&(d=l+yr(`( -`,xg(je(i,` -`)),` -)`)),je([d,je(o," "),s]," ")},Argument:function(t){var r=t.name,n=t.value;return r+": "+n},FragmentSpread:function(t){var r=t.name,n=t.directives;return"..."+r+yr(" ",je(n," "))},InlineFragment:function(t){var r=t.typeCondition,n=t.directives,i=t.selectionSet;return je(["...",yr("on ",r),je(n," "),i]," ")},FragmentDefinition:function(t){var r=t.name,n=t.typeCondition,i=t.variableDefinitions,o=t.directives,s=t.selectionSet;return"fragment ".concat(r).concat(yr("(",je(i,", "),")")," ")+"on ".concat(n," ").concat(yr("",je(o," ")," "))+s},IntValue:function(t){var r=t.value;return r},FloatValue:function(t){var r=t.value;return r},StringValue:function(t,r){var n=t.value,i=t.block;return i?(0,$z.printBlockString)(n,r==="description"?"":" "):JSON.stringify(n)},BooleanValue:function(t){var r=t.value;return r?"true":"false"},NullValue:function(){return"null"},EnumValue:function(t){var r=t.value;return r},ListValue:function(t){var r=t.values;return"["+je(r,", ")+"]"},ObjectValue:function(t){var r=t.fields;return"{"+je(r,", ")+"}"},ObjectField:function(t){var r=t.name,n=t.value;return r+": "+n},Directive:function(t){var r=t.name,n=t.arguments;return"@"+r+yr("(",je(n,", "),")")},NamedType:function(t){var r=t.name;return r},ListType:function(t){var r=t.type;return"["+r+"]"},NonNullType:function(t){var r=t.type;return r+"!"},SchemaDefinition:ma(function(e){var t=e.directives,r=e.operationTypes;return je(["schema",je(t," "),ya(r)]," ")}),OperationTypeDefinition:function(t){var r=t.operation,n=t.type;return r+": "+n},ScalarTypeDefinition:ma(function(e){var t=e.name,r=e.directives;return je(["scalar",t,je(r," ")]," ")}),ObjectTypeDefinition:ma(function(e){var t=e.name,r=e.interfaces,n=e.directives,i=e.fields;return je(["type",t,yr("implements ",je(r," & ")),je(n," "),ya(i)]," ")}),FieldDefinition:ma(function(e){var t=e.name,r=e.arguments,n=e.type,i=e.directives;return t+(K1(r)?yr(`( -`,xg(je(r,` -`)),` -)`):yr("(",je(r,", "),")"))+": "+n+yr(" ",je(i," "))}),InputValueDefinition:ma(function(e){var t=e.name,r=e.type,n=e.defaultValue,i=e.directives;return je([t+": "+r,yr("= ",n),je(i," ")]," ")}),InterfaceTypeDefinition:ma(function(e){var t=e.name,r=e.interfaces,n=e.directives,i=e.fields;return je(["interface",t,yr("implements ",je(r," & ")),je(n," "),ya(i)]," ")}),UnionTypeDefinition:ma(function(e){var t=e.name,r=e.directives,n=e.types;return je(["union",t,je(r," "),n&&n.length!==0?"= "+je(n," | "):""]," ")}),EnumTypeDefinition:ma(function(e){var t=e.name,r=e.directives,n=e.values;return je(["enum",t,je(r," "),ya(n)]," ")}),EnumValueDefinition:ma(function(e){var t=e.name,r=e.directives;return je([t,je(r," ")]," ")}),InputObjectTypeDefinition:ma(function(e){var t=e.name,r=e.directives,n=e.fields;return je(["input",t,je(r," "),ya(n)]," ")}),DirectiveDefinition:ma(function(e){var t=e.name,r=e.arguments,n=e.repeatable,i=e.locations;return"directive @"+t+(K1(r)?yr(`( -`,xg(je(r,` -`)),` -)`):yr("(",je(r,", "),")"))+(n?" repeatable":"")+" on "+je(i," | ")}),SchemaExtension:function(t){var r=t.directives,n=t.operationTypes;return je(["extend schema",je(r," "),ya(n)]," ")},ScalarTypeExtension:function(t){var r=t.name,n=t.directives;return je(["extend scalar",r,je(n," ")]," ")},ObjectTypeExtension:function(t){var r=t.name,n=t.interfaces,i=t.directives,o=t.fields;return je(["extend type",r,yr("implements ",je(n," & ")),je(i," "),ya(o)]," ")},InterfaceTypeExtension:function(t){var r=t.name,n=t.interfaces,i=t.directives,o=t.fields;return je(["extend interface",r,yr("implements ",je(n," & ")),je(i," "),ya(o)]," ")},UnionTypeExtension:function(t){var r=t.name,n=t.directives,i=t.types;return je(["extend union",r,je(n," "),i&&i.length!==0?"= "+je(i," | "):""]," ")},EnumTypeExtension:function(t){var r=t.name,n=t.directives,i=t.values;return je(["extend enum",r,je(n," "),ya(i)]," ")},InputObjectTypeExtension:function(t){var r=t.name,n=t.directives,i=t.fields;return je(["extend input",r,je(n," "),ya(i)]," ")}};function ma(e){return function(t){return je([t.description,e(t)],` -`)}}function je(e){var t,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return(t=e==null?void 0:e.filter(function(n){return n}).join(r))!==null&&t!==void 0?t:""}function ya(e){return yr(`{ -`,xg(je(e,` -`)),` -}`)}function yr(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"";return t!=null&&t!==""?e+t+r:""}function xg(e){return yr(" ",e.replace(/\n/g,` - `))}function nW(e){return e.indexOf(` -`)!==-1}function K1(e){return e!=null&&e.some(nW)}});var M_=G(F_=>{"use strict";Object.defineProperty(F_,"__esModule",{value:!0});F_.valueFromASTUntyped=P_;var iW=j_(jt()),aW=j_(_n()),oW=j_(Vd()),Eo=Jt();function j_(e){return e&&e.__esModule?e:{default:e}}function P_(e,t){switch(e.kind){case Eo.Kind.NULL:return null;case Eo.Kind.INT:return parseInt(e.value,10);case Eo.Kind.FLOAT:return parseFloat(e.value);case Eo.Kind.STRING:case Eo.Kind.ENUM:case Eo.Kind.BOOLEAN:return e.value;case Eo.Kind.LIST:return e.values.map(function(r){return P_(r,t)});case Eo.Kind.OBJECT:return(0,oW.default)(e.fields,function(r){return r.name.value},function(r){return P_(r.value,t)});case Eo.Kind.VARIABLE:return t==null?void 0:t[e.name.value]}(0,aW.default)(0,"Unexpected value node: "+(0,iW.default)(e))}});var bt=G(Be=>{"use strict";Object.defineProperty(Be,"__esModule",{value:!0});Be.isType=q_;Be.assertType=X1;Be.isScalarType=ms;Be.assertScalarType=pW;Be.isObjectType=oc;Be.assertObjectType=hW;Be.isInterfaceType=ys;Be.assertInterfaceType=vW;Be.isUnionType=bs;Be.assertUnionType=gW;Be.isEnumType=Ts;Be.assertEnumType=mW;Be.isInputObjectType=Qd;Be.assertInputObjectType=yW;Be.isListType=Lg;Be.assertListType=bW;Be.isNonNullType=_u;Be.assertNonNullType=TW;Be.isInputType=V_;Be.assertInputType=_W;Be.isOutputType=U_;Be.assertOutputType=EW;Be.isLeafType=Z1;Be.assertLeafType=SW;Be.isCompositeType=$1;Be.assertCompositeType=kW;Be.isAbstractType=eI;Be.assertAbstractType=OW;Be.GraphQLList=Eu;Be.GraphQLNonNull=Su;Be.isWrappingType=Bd;Be.assertWrappingType=wW;Be.isNullableType=tI;Be.assertNullableType=rI;Be.getNullableType=NW;Be.isNamedType=nI;Be.assertNamedType=DW;Be.getNamedType=xW;Be.argsToArgsConfig=uI;Be.isRequiredArgument=CW;Be.isRequiredInputField=RW;Be.GraphQLInputObjectType=Be.GraphQLEnumType=Be.GraphQLUnionType=Be.GraphQLInterfaceType=Be.GraphQLObjectType=Be.GraphQLScalarType=void 0;var H1=Di(ic()),yu=qa(),ur=Di(jt()),uW=Di(vu()),Cg=Di(w_()),Ua=Di(Ng()),fr=Di(Hi()),z1=Di(Vd()),bu=Di(jd()),sW=Di(gu()),lW=Di(Ma()),W1=Di(Q1()),Tu=Di(dg()),cW=Di(mu()),Gd=Je(),fW=Jt(),Y1=hi(),dW=M_();function Di(e){return e&&e.__esModule?e:{default:e}}function J1(e,t){for(var r=0;r0?e:void 0}var G_=function(){function e(r){var n,i,o,s=(n=r.parseValue)!==null&&n!==void 0?n:W1.default;this.name=r.name,this.description=r.description,this.specifiedByUrl=r.specifiedByUrl,this.serialize=(i=r.serialize)!==null&&i!==void 0?i:W1.default,this.parseValue=s,this.parseLiteral=(o=r.parseLiteral)!==null&&o!==void 0?o:function(l,d){return s((0,dW.valueFromASTUntyped)(l,d))},this.extensions=r.extensions&&(0,Ua.default)(r.extensions),this.astNode=r.astNode,this.extensionASTNodes=uc(r.extensionASTNodes),typeof r.name=="string"||(0,fr.default)(0,"Must provide name."),r.specifiedByUrl==null||typeof r.specifiedByUrl=="string"||(0,fr.default)(0,"".concat(this.name,' must provide "specifiedByUrl" as a string, ')+"but got: ".concat((0,ur.default)(r.specifiedByUrl),".")),r.serialize==null||typeof r.serialize=="function"||(0,fr.default)(0,"".concat(this.name,' must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.')),r.parseLiteral&&(typeof r.parseValue=="function"&&typeof r.parseLiteral=="function"||(0,fr.default)(0,"".concat(this.name,' must provide both "parseValue" and "parseLiteral" functions.')))}var t=e.prototype;return t.toConfig=function(){var n;return{name:this.name,description:this.description,specifiedByUrl:this.specifiedByUrl,serialize:this.serialize,parseValue:this.parseValue,parseLiteral:this.parseLiteral,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:(n=this.extensionASTNodes)!==null&&n!==void 0?n:[]}},t.toString=function(){return this.name},t.toJSON=function(){return this.toString()},ac(e,[{key:yu.SYMBOL_TO_STRING_TAG,get:function(){return"GraphQLScalarType"}}]),e}();Be.GraphQLScalarType=G_;(0,Tu.default)(G_);var Q_=function(){function e(r){this.name=r.name,this.description=r.description,this.isTypeOf=r.isTypeOf,this.extensions=r.extensions&&(0,Ua.default)(r.extensions),this.astNode=r.astNode,this.extensionASTNodes=uc(r.extensionASTNodes),this._fields=aI.bind(void 0,r),this._interfaces=iI.bind(void 0,r),typeof r.name=="string"||(0,fr.default)(0,"Must provide name."),r.isTypeOf==null||typeof r.isTypeOf=="function"||(0,fr.default)(0,"".concat(this.name,' must provide "isTypeOf" as a function, ')+"but got: ".concat((0,ur.default)(r.isTypeOf),"."))}var t=e.prototype;return t.getFields=function(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields},t.getInterfaces=function(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces},t.toConfig=function(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:oI(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes||[]}},t.toString=function(){return this.name},t.toJSON=function(){return this.toString()},ac(e,[{key:yu.SYMBOL_TO_STRING_TAG,get:function(){return"GraphQLObjectType"}}]),e}();Be.GraphQLObjectType=Q_;(0,Tu.default)(Q_);function iI(e){var t,r=(t=Ig(e.interfaces))!==null&&t!==void 0?t:[];return Array.isArray(r)||(0,fr.default)(0,"".concat(e.name," interfaces must be an Array or a function which returns an Array.")),r}function aI(e){var t=Ig(e.fields);return sc(t)||(0,fr.default)(0,"".concat(e.name," fields must be an object with field names as keys or a function which returns such an object.")),(0,Cg.default)(t,function(r,n){var i;sc(r)||(0,fr.default)(0,"".concat(e.name,".").concat(n," field config must be an object.")),!("isDeprecated"in r)||(0,fr.default)(0,"".concat(e.name,".").concat(n,' should provide "deprecationReason" instead of "isDeprecated".')),r.resolve==null||typeof r.resolve=="function"||(0,fr.default)(0,"".concat(e.name,".").concat(n," field resolver must be a function if ")+"provided, but got: ".concat((0,ur.default)(r.resolve),"."));var o=(i=r.args)!==null&&i!==void 0?i:{};sc(o)||(0,fr.default)(0,"".concat(e.name,".").concat(n," args must be an object with argument names as keys."));var s=(0,H1.default)(o).map(function(l){var d=l[0],h=l[1];return{name:d,description:h.description,type:h.type,defaultValue:h.defaultValue,deprecationReason:h.deprecationReason,extensions:h.extensions&&(0,Ua.default)(h.extensions),astNode:h.astNode}});return{name:n,description:r.description,type:r.type,args:s,resolve:r.resolve,subscribe:r.subscribe,isDeprecated:r.deprecationReason!=null,deprecationReason:r.deprecationReason,extensions:r.extensions&&(0,Ua.default)(r.extensions),astNode:r.astNode}})}function sc(e){return(0,lW.default)(e)&&!Array.isArray(e)}function oI(e){return(0,Cg.default)(e,function(t){return{description:t.description,type:t.type,args:uI(t.args),resolve:t.resolve,subscribe:t.subscribe,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}})}function uI(e){return(0,z1.default)(e,function(t){return t.name},function(t){return{description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:t.extensions,astNode:t.astNode}})}function CW(e){return _u(e.type)&&e.defaultValue===void 0}var B_=function(){function e(r){this.name=r.name,this.description=r.description,this.resolveType=r.resolveType,this.extensions=r.extensions&&(0,Ua.default)(r.extensions),this.astNode=r.astNode,this.extensionASTNodes=uc(r.extensionASTNodes),this._fields=aI.bind(void 0,r),this._interfaces=iI.bind(void 0,r),typeof r.name=="string"||(0,fr.default)(0,"Must provide name."),r.resolveType==null||typeof r.resolveType=="function"||(0,fr.default)(0,"".concat(this.name,' must provide "resolveType" as a function, ')+"but got: ".concat((0,ur.default)(r.resolveType),"."))}var t=e.prototype;return t.getFields=function(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields},t.getInterfaces=function(){return typeof this._interfaces=="function"&&(this._interfaces=this._interfaces()),this._interfaces},t.toConfig=function(){var n;return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:oI(this.getFields()),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:(n=this.extensionASTNodes)!==null&&n!==void 0?n:[]}},t.toString=function(){return this.name},t.toJSON=function(){return this.toString()},ac(e,[{key:yu.SYMBOL_TO_STRING_TAG,get:function(){return"GraphQLInterfaceType"}}]),e}();Be.GraphQLInterfaceType=B_;(0,Tu.default)(B_);var K_=function(){function e(r){this.name=r.name,this.description=r.description,this.resolveType=r.resolveType,this.extensions=r.extensions&&(0,Ua.default)(r.extensions),this.astNode=r.astNode,this.extensionASTNodes=uc(r.extensionASTNodes),this._types=LW.bind(void 0,r),typeof r.name=="string"||(0,fr.default)(0,"Must provide name."),r.resolveType==null||typeof r.resolveType=="function"||(0,fr.default)(0,"".concat(this.name,' must provide "resolveType" as a function, ')+"but got: ".concat((0,ur.default)(r.resolveType),"."))}var t=e.prototype;return t.getTypes=function(){return typeof this._types=="function"&&(this._types=this._types()),this._types},t.toConfig=function(){var n;return{name:this.name,description:this.description,types:this.getTypes(),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:(n=this.extensionASTNodes)!==null&&n!==void 0?n:[]}},t.toString=function(){return this.name},t.toJSON=function(){return this.toString()},ac(e,[{key:yu.SYMBOL_TO_STRING_TAG,get:function(){return"GraphQLUnionType"}}]),e}();Be.GraphQLUnionType=K_;(0,Tu.default)(K_);function LW(e){var t=Ig(e.types);return Array.isArray(t)||(0,fr.default)(0,"Must provide Array of types or a function which returns such an array for Union ".concat(e.name,".")),t}var H_=function(){function e(r){this.name=r.name,this.description=r.description,this.extensions=r.extensions&&(0,Ua.default)(r.extensions),this.astNode=r.astNode,this.extensionASTNodes=uc(r.extensionASTNodes),this._values=IW(this.name,r.values),this._valueLookup=new Map(this._values.map(function(n){return[n.value,n]})),this._nameLookup=(0,uW.default)(this._values,function(n){return n.name}),typeof r.name=="string"||(0,fr.default)(0,"Must provide name.")}var t=e.prototype;return t.getValues=function(){return this._values},t.getValue=function(n){return this._nameLookup[n]},t.serialize=function(n){var i=this._valueLookup.get(n);if(i===void 0)throw new Gd.GraphQLError('Enum "'.concat(this.name,'" cannot represent value: ').concat((0,ur.default)(n)));return i.name},t.parseValue=function(n){if(typeof n!="string"){var i=(0,ur.default)(n);throw new Gd.GraphQLError('Enum "'.concat(this.name,'" cannot represent non-string value: ').concat(i,".")+Ag(this,i))}var o=this.getValue(n);if(o==null)throw new Gd.GraphQLError('Value "'.concat(n,'" does not exist in "').concat(this.name,'" enum.')+Ag(this,n));return o.value},t.parseLiteral=function(n,i){if(n.kind!==fW.Kind.ENUM){var o=(0,Y1.print)(n);throw new Gd.GraphQLError('Enum "'.concat(this.name,'" cannot represent non-enum value: ').concat(o,".")+Ag(this,o),n)}var s=this.getValue(n.value);if(s==null){var l=(0,Y1.print)(n);throw new Gd.GraphQLError('Value "'.concat(l,'" does not exist in "').concat(this.name,'" enum.')+Ag(this,l),n)}return s.value},t.toConfig=function(){var n,i=(0,z1.default)(this.getValues(),function(o){return o.name},function(o){return{description:o.description,value:o.value,deprecationReason:o.deprecationReason,extensions:o.extensions,astNode:o.astNode}});return{name:this.name,description:this.description,values:i,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:(n=this.extensionASTNodes)!==null&&n!==void 0?n:[]}},t.toString=function(){return this.name},t.toJSON=function(){return this.toString()},ac(e,[{key:yu.SYMBOL_TO_STRING_TAG,get:function(){return"GraphQLEnumType"}}]),e}();Be.GraphQLEnumType=H_;(0,Tu.default)(H_);function Ag(e,t){var r=e.getValues().map(function(i){return i.name}),n=(0,cW.default)(t,r);return(0,sW.default)("the enum value",n)}function IW(e,t){return sc(t)||(0,fr.default)(0,"".concat(e," values must be an object with value names as keys.")),(0,H1.default)(t).map(function(r){var n=r[0],i=r[1];return sc(i)||(0,fr.default)(0,"".concat(e,".").concat(n,' must refer to an object with a "value" key ')+"representing an internal value but got: ".concat((0,ur.default)(i),".")),!("isDeprecated"in i)||(0,fr.default)(0,"".concat(e,".").concat(n,' should provide "deprecationReason" instead of "isDeprecated".')),{name:n,description:i.description,value:i.value!==void 0?i.value:n,isDeprecated:i.deprecationReason!=null,deprecationReason:i.deprecationReason,extensions:i.extensions&&(0,Ua.default)(i.extensions),astNode:i.astNode}})}var z_=function(){function e(r){this.name=r.name,this.description=r.description,this.extensions=r.extensions&&(0,Ua.default)(r.extensions),this.astNode=r.astNode,this.extensionASTNodes=uc(r.extensionASTNodes),this._fields=AW.bind(void 0,r),typeof r.name=="string"||(0,fr.default)(0,"Must provide name.")}var t=e.prototype;return t.getFields=function(){return typeof this._fields=="function"&&(this._fields=this._fields()),this._fields},t.toConfig=function(){var n,i=(0,Cg.default)(this.getFields(),function(o){return{description:o.description,type:o.type,defaultValue:o.defaultValue,extensions:o.extensions,astNode:o.astNode}});return{name:this.name,description:this.description,fields:i,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:(n=this.extensionASTNodes)!==null&&n!==void 0?n:[]}},t.toString=function(){return this.name},t.toJSON=function(){return this.toString()},ac(e,[{key:yu.SYMBOL_TO_STRING_TAG,get:function(){return"GraphQLInputObjectType"}}]),e}();Be.GraphQLInputObjectType=z_;(0,Tu.default)(z_);function AW(e){var t=Ig(e.fields);return sc(t)||(0,fr.default)(0,"".concat(e.name," fields must be an object with field names as keys or a function which returns such an object.")),(0,Cg.default)(t,function(r,n){return!("resolve"in r)||(0,fr.default)(0,"".concat(e.name,".").concat(n," field has a resolve property, but Input Types cannot define resolvers.")),{name:n,description:r.description,type:r.type,defaultValue:r.defaultValue,deprecationReason:r.deprecationReason,extensions:r.extensions&&(0,Ua.default)(r.extensions),astNode:r.astNode}})}function RW(e){return _u(e.type)&&e.defaultValue===void 0}});var Hd=G(Kd=>{"use strict";Object.defineProperty(Kd,"__esModule",{value:!0});Kd.isEqualType=W_;Kd.isTypeSubTypeOf=Rg;Kd.doTypesOverlap=jW;var Mn=bt();function W_(e,t){return e===t?!0:(0,Mn.isNonNullType)(e)&&(0,Mn.isNonNullType)(t)||(0,Mn.isListType)(e)&&(0,Mn.isListType)(t)?W_(e.ofType,t.ofType):!1}function Rg(e,t,r){return t===r?!0:(0,Mn.isNonNullType)(r)?(0,Mn.isNonNullType)(t)?Rg(e,t.ofType,r.ofType):!1:(0,Mn.isNonNullType)(t)?Rg(e,t.ofType,r):(0,Mn.isListType)(r)?(0,Mn.isListType)(t)?Rg(e,t.ofType,r.ofType):!1:(0,Mn.isListType)(t)?!1:(0,Mn.isAbstractType)(r)&&((0,Mn.isInterfaceType)(t)||(0,Mn.isObjectType)(t))&&e.isSubType(r,t)}function jW(e,t,r){return t===r?!0:(0,Mn.isAbstractType)(t)?(0,Mn.isAbstractType)(r)?e.getPossibleTypes(t).some(function(n){return e.isSubType(r,n)}):e.isSubType(t,r):(0,Mn.isAbstractType)(r)?e.isSubType(r,t):!1}});var Y_=G(jg=>{"use strict";Object.defineProperty(jg,"__esModule",{value:!0});jg.default=void 0;var PW=qa(),FW=Array.from||function(e,t,r){if(e==null)throw new TypeError("Array.from requires an array-like object - not null or undefined");var n=e[PW.SYMBOL_ITERATOR];if(typeof n=="function"){for(var i=n.call(e),o=[],s,l=0;!(s=i.next()).done;++l)if(o.push(t.call(r,s.value,l)),l>9999999)throw new TypeError("Near-infinite iteration.");return o}var d=e.length;if(typeof d=="number"&&d>=0&&d%1==0){for(var h=[],v=0;v{"use strict";Object.defineProperty(Pg,"__esModule",{value:!0});Pg.default=void 0;var qW=Number.isFinite||function(e){return typeof e=="number"&&isFinite(e)},VW=qW;Pg.default=VW});var Mg=G(X_=>{"use strict";Object.defineProperty(X_,"__esModule",{value:!0});X_.default=GW;var UW=qa();function Fg(e){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Fg=function(r){return typeof r}:Fg=function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},Fg(e)}function GW(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:function(v){return v};if(e==null||Fg(e)!=="object")return null;if(Array.isArray(e))return e.map(t);var r=e[UW.SYMBOL_ITERATOR];if(typeof r=="function"){for(var n=r.call(e),i=[],o,s=0;!(o=n.next()).done;++s)i.push(t(o.value,s));return i}var l=e.length;if(typeof l=="number"&&l>=0&&l%1==0){for(var d=[],h=0;h{"use strict";Object.defineProperty(qg,"__esModule",{value:!0});qg.default=void 0;var QW=Number.isInteger||function(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e},BW=QW;qg.default=BW});var Ga=G(ti=>{"use strict";Object.defineProperty(ti,"__esModule",{value:!0});ti.isSpecifiedScalarType=t4;ti.specifiedScalarTypes=ti.GraphQLID=ti.GraphQLBoolean=ti.GraphQLString=ti.GraphQLFloat=ti.GraphQLInt=void 0;var Vg=Gg(J_()),Ug=Gg(sI()),ba=Gg(jt()),lI=Gg(Ma()),_s=Jt(),zd=hi(),cn=Je(),Wd=bt();function Gg(e){return e&&e.__esModule?e:{default:e}}var Z_=2147483647,$_=-2147483648;function KW(e){var t=Yd(e);if(typeof t=="boolean")return t?1:0;var r=t;if(typeof t=="string"&&t!==""&&(r=Number(t)),!(0,Ug.default)(r))throw new cn.GraphQLError("Int cannot represent non-integer value: ".concat((0,ba.default)(t)));if(r>Z_||r<$_)throw new cn.GraphQLError("Int cannot represent non 32-bit signed integer value: "+(0,ba.default)(t));return r}function HW(e){if(!(0,Ug.default)(e))throw new cn.GraphQLError("Int cannot represent non-integer value: ".concat((0,ba.default)(e)));if(e>Z_||e<$_)throw new cn.GraphQLError("Int cannot represent non 32-bit signed integer value: ".concat(e));return e}var cI=new Wd.GraphQLScalarType({name:"Int",description:"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",serialize:KW,parseValue:HW,parseLiteral:function(t){if(t.kind!==_s.Kind.INT)throw new cn.GraphQLError("Int cannot represent non-integer value: ".concat((0,zd.print)(t)),t);var r=parseInt(t.value,10);if(r>Z_||r<$_)throw new cn.GraphQLError("Int cannot represent non 32-bit signed integer value: ".concat(t.value),t);return r}});ti.GraphQLInt=cI;function zW(e){var t=Yd(e);if(typeof t=="boolean")return t?1:0;var r=t;if(typeof t=="string"&&t!==""&&(r=Number(t)),!(0,Vg.default)(r))throw new cn.GraphQLError("Float cannot represent non numeric value: ".concat((0,ba.default)(t)));return r}function WW(e){if(!(0,Vg.default)(e))throw new cn.GraphQLError("Float cannot represent non numeric value: ".concat((0,ba.default)(e)));return e}var fI=new Wd.GraphQLScalarType({name:"Float",description:"The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).",serialize:zW,parseValue:WW,parseLiteral:function(t){if(t.kind!==_s.Kind.FLOAT&&t.kind!==_s.Kind.INT)throw new cn.GraphQLError("Float cannot represent non numeric value: ".concat((0,zd.print)(t)),t);return parseFloat(t.value)}});ti.GraphQLFloat=fI;function Yd(e){if((0,lI.default)(e)){if(typeof e.valueOf=="function"){var t=e.valueOf();if(!(0,lI.default)(t))return t}if(typeof e.toJSON=="function")return e.toJSON()}return e}function YW(e){var t=Yd(e);if(typeof t=="string")return t;if(typeof t=="boolean")return t?"true":"false";if((0,Vg.default)(t))return t.toString();throw new cn.GraphQLError("String cannot represent value: ".concat((0,ba.default)(e)))}function JW(e){if(typeof e!="string")throw new cn.GraphQLError("String cannot represent a non string value: ".concat((0,ba.default)(e)));return e}var dI=new Wd.GraphQLScalarType({name:"String",description:"The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.",serialize:YW,parseValue:JW,parseLiteral:function(t){if(t.kind!==_s.Kind.STRING)throw new cn.GraphQLError("String cannot represent a non string value: ".concat((0,zd.print)(t)),t);return t.value}});ti.GraphQLString=dI;function XW(e){var t=Yd(e);if(typeof t=="boolean")return t;if((0,Vg.default)(t))return t!==0;throw new cn.GraphQLError("Boolean cannot represent a non boolean value: ".concat((0,ba.default)(t)))}function ZW(e){if(typeof e!="boolean")throw new cn.GraphQLError("Boolean cannot represent a non boolean value: ".concat((0,ba.default)(e)));return e}var pI=new Wd.GraphQLScalarType({name:"Boolean",description:"The `Boolean` scalar type represents `true` or `false`.",serialize:XW,parseValue:ZW,parseLiteral:function(t){if(t.kind!==_s.Kind.BOOLEAN)throw new cn.GraphQLError("Boolean cannot represent a non boolean value: ".concat((0,zd.print)(t)),t);return t.value}});ti.GraphQLBoolean=pI;function $W(e){var t=Yd(e);if(typeof t=="string")return t;if((0,Ug.default)(t))return String(t);throw new cn.GraphQLError("ID cannot represent value: ".concat((0,ba.default)(e)))}function e4(e){if(typeof e=="string")return e;if((0,Ug.default)(e))return e.toString();throw new cn.GraphQLError("ID cannot represent value: ".concat((0,ba.default)(e)))}var hI=new Wd.GraphQLScalarType({name:"ID",description:'The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID.',serialize:$W,parseValue:e4,parseLiteral:function(t){if(t.kind!==_s.Kind.STRING&&t.kind!==_s.Kind.INT)throw new cn.GraphQLError("ID cannot represent a non-string and non-integer value: "+(0,zd.print)(t),t);return t.value}});ti.GraphQLID=hI;var vI=Object.freeze([dI,cI,fI,pI,hI]);ti.specifiedScalarTypes=vI;function t4(e){return vI.some(function(t){var r=t.name;return e.name===r})}});var Zd=G(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.astFromValue=Xd;var r4=lc(J_()),n4=lc(Ni()),gI=lc(jt()),i4=lc(_n()),a4=lc(Ma()),o4=lc(Mg()),zi=Jt(),u4=Ga(),Jd=bt();function lc(e){return e&&e.__esModule?e:{default:e}}function Xd(e,t){if((0,Jd.isNonNullType)(t)){var r=Xd(e,t.ofType);return(r==null?void 0:r.kind)===zi.Kind.NULL?null:r}if(e===null)return{kind:zi.Kind.NULL};if(e===void 0)return null;if((0,Jd.isListType)(t)){var n=t.ofType,i=(0,o4.default)(e);if(i!=null){for(var o=[],s=0;s{"use strict";Object.defineProperty(Gt,"__esModule",{value:!0});Gt.isIntrospectionType=v4;Gt.introspectionTypes=Gt.TypeNameMetaFieldDef=Gt.TypeMetaFieldDef=Gt.SchemaMetaFieldDef=Gt.__TypeKind=Gt.TypeKind=Gt.__EnumValue=Gt.__InputValue=Gt.__Field=Gt.__Type=Gt.__DirectiveLocation=Gt.__Directive=Gt.__Schema=void 0;var tE=rE(Ni()),s4=rE(jt()),l4=rE(_n()),c4=hi(),Xr=$l(),f4=Zd(),$t=Ga(),Pe=bt();function rE(e){return e&&e.__esModule?e:{default:e}}var nE=new Pe.GraphQLObjectType({name:"__Schema",description:"A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",fields:function(){return{description:{type:$t.GraphQLString,resolve:function(r){return r.description}},types:{description:"A list of all types supported by this server.",type:new Pe.GraphQLNonNull(new Pe.GraphQLList(new Pe.GraphQLNonNull(Wi))),resolve:function(r){return(0,tE.default)(r.getTypeMap())}},queryType:{description:"The type that query operations will be rooted at.",type:new Pe.GraphQLNonNull(Wi),resolve:function(r){return r.getQueryType()}},mutationType:{description:"If this server supports mutation, the type that mutation operations will be rooted at.",type:Wi,resolve:function(r){return r.getMutationType()}},subscriptionType:{description:"If this server support subscription, the type that subscription operations will be rooted at.",type:Wi,resolve:function(r){return r.getSubscriptionType()}},directives:{description:"A list of all directives supported by this server.",type:new Pe.GraphQLNonNull(new Pe.GraphQLList(new Pe.GraphQLNonNull(iE))),resolve:function(r){return r.getDirectives()}}}}});Gt.__Schema=nE;var iE=new Pe.GraphQLObjectType({name:"__Directive",description:`A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document. - -In some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.`,fields:function(){return{name:{type:new Pe.GraphQLNonNull($t.GraphQLString),resolve:function(r){return r.name}},description:{type:$t.GraphQLString,resolve:function(r){return r.description}},isRepeatable:{type:new Pe.GraphQLNonNull($t.GraphQLBoolean),resolve:function(r){return r.isRepeatable}},locations:{type:new Pe.GraphQLNonNull(new Pe.GraphQLList(new Pe.GraphQLNonNull(aE))),resolve:function(r){return r.locations}},args:{type:new Pe.GraphQLNonNull(new Pe.GraphQLList(new Pe.GraphQLNonNull($d))),resolve:function(r){return r.args}}}}});Gt.__Directive=iE;var aE=new Pe.GraphQLEnumType({name:"__DirectiveLocation",description:"A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",values:{QUERY:{value:Xr.DirectiveLocation.QUERY,description:"Location adjacent to a query operation."},MUTATION:{value:Xr.DirectiveLocation.MUTATION,description:"Location adjacent to a mutation operation."},SUBSCRIPTION:{value:Xr.DirectiveLocation.SUBSCRIPTION,description:"Location adjacent to a subscription operation."},FIELD:{value:Xr.DirectiveLocation.FIELD,description:"Location adjacent to a field."},FRAGMENT_DEFINITION:{value:Xr.DirectiveLocation.FRAGMENT_DEFINITION,description:"Location adjacent to a fragment definition."},FRAGMENT_SPREAD:{value:Xr.DirectiveLocation.FRAGMENT_SPREAD,description:"Location adjacent to a fragment spread."},INLINE_FRAGMENT:{value:Xr.DirectiveLocation.INLINE_FRAGMENT,description:"Location adjacent to an inline fragment."},VARIABLE_DEFINITION:{value:Xr.DirectiveLocation.VARIABLE_DEFINITION,description:"Location adjacent to a variable definition."},SCHEMA:{value:Xr.DirectiveLocation.SCHEMA,description:"Location adjacent to a schema definition."},SCALAR:{value:Xr.DirectiveLocation.SCALAR,description:"Location adjacent to a scalar definition."},OBJECT:{value:Xr.DirectiveLocation.OBJECT,description:"Location adjacent to an object type definition."},FIELD_DEFINITION:{value:Xr.DirectiveLocation.FIELD_DEFINITION,description:"Location adjacent to a field definition."},ARGUMENT_DEFINITION:{value:Xr.DirectiveLocation.ARGUMENT_DEFINITION,description:"Location adjacent to an argument definition."},INTERFACE:{value:Xr.DirectiveLocation.INTERFACE,description:"Location adjacent to an interface definition."},UNION:{value:Xr.DirectiveLocation.UNION,description:"Location adjacent to a union definition."},ENUM:{value:Xr.DirectiveLocation.ENUM,description:"Location adjacent to an enum definition."},ENUM_VALUE:{value:Xr.DirectiveLocation.ENUM_VALUE,description:"Location adjacent to an enum value definition."},INPUT_OBJECT:{value:Xr.DirectiveLocation.INPUT_OBJECT,description:"Location adjacent to an input object type definition."},INPUT_FIELD_DEFINITION:{value:Xr.DirectiveLocation.INPUT_FIELD_DEFINITION,description:"Location adjacent to an input object field definition."}}});Gt.__DirectiveLocation=aE;var Wi=new Pe.GraphQLObjectType({name:"__Type",description:"The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByUrl`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",fields:function(){return{kind:{type:new Pe.GraphQLNonNull(sE),resolve:function(r){if((0,Pe.isScalarType)(r))return En.SCALAR;if((0,Pe.isObjectType)(r))return En.OBJECT;if((0,Pe.isInterfaceType)(r))return En.INTERFACE;if((0,Pe.isUnionType)(r))return En.UNION;if((0,Pe.isEnumType)(r))return En.ENUM;if((0,Pe.isInputObjectType)(r))return En.INPUT_OBJECT;if((0,Pe.isListType)(r))return En.LIST;if((0,Pe.isNonNullType)(r))return En.NON_NULL;(0,l4.default)(0,'Unexpected type: "'.concat((0,s4.default)(r),'".'))}},name:{type:$t.GraphQLString,resolve:function(r){return r.name!==void 0?r.name:void 0}},description:{type:$t.GraphQLString,resolve:function(r){return r.description!==void 0?r.description:void 0}},specifiedByUrl:{type:$t.GraphQLString,resolve:function(r){return r.specifiedByUrl!==void 0?r.specifiedByUrl:void 0}},fields:{type:new Pe.GraphQLList(new Pe.GraphQLNonNull(oE)),args:{includeDeprecated:{type:$t.GraphQLBoolean,defaultValue:!1}},resolve:function(r,n){var i=n.includeDeprecated;if((0,Pe.isObjectType)(r)||(0,Pe.isInterfaceType)(r)){var o=(0,tE.default)(r.getFields());return i?o:o.filter(function(s){return s.deprecationReason==null})}}},interfaces:{type:new Pe.GraphQLList(new Pe.GraphQLNonNull(Wi)),resolve:function(r){if((0,Pe.isObjectType)(r)||(0,Pe.isInterfaceType)(r))return r.getInterfaces()}},possibleTypes:{type:new Pe.GraphQLList(new Pe.GraphQLNonNull(Wi)),resolve:function(r,n,i,o){var s=o.schema;if((0,Pe.isAbstractType)(r))return s.getPossibleTypes(r)}},enumValues:{type:new Pe.GraphQLList(new Pe.GraphQLNonNull(uE)),args:{includeDeprecated:{type:$t.GraphQLBoolean,defaultValue:!1}},resolve:function(r,n){var i=n.includeDeprecated;if((0,Pe.isEnumType)(r)){var o=r.getValues();return i?o:o.filter(function(s){return s.deprecationReason==null})}}},inputFields:{type:new Pe.GraphQLList(new Pe.GraphQLNonNull($d)),args:{includeDeprecated:{type:$t.GraphQLBoolean,defaultValue:!1}},resolve:function(r,n){var i=n.includeDeprecated;if((0,Pe.isInputObjectType)(r)){var o=(0,tE.default)(r.getFields());return i?o:o.filter(function(s){return s.deprecationReason==null})}}},ofType:{type:Wi,resolve:function(r){return r.ofType!==void 0?r.ofType:void 0}}}}});Gt.__Type=Wi;var oE=new Pe.GraphQLObjectType({name:"__Field",description:"Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",fields:function(){return{name:{type:new Pe.GraphQLNonNull($t.GraphQLString),resolve:function(r){return r.name}},description:{type:$t.GraphQLString,resolve:function(r){return r.description}},args:{type:new Pe.GraphQLNonNull(new Pe.GraphQLList(new Pe.GraphQLNonNull($d))),args:{includeDeprecated:{type:$t.GraphQLBoolean,defaultValue:!1}},resolve:function(r,n){var i=n.includeDeprecated;return i?r.args:r.args.filter(function(o){return o.deprecationReason==null})}},type:{type:new Pe.GraphQLNonNull(Wi),resolve:function(r){return r.type}},isDeprecated:{type:new Pe.GraphQLNonNull($t.GraphQLBoolean),resolve:function(r){return r.deprecationReason!=null}},deprecationReason:{type:$t.GraphQLString,resolve:function(r){return r.deprecationReason}}}}});Gt.__Field=oE;var $d=new Pe.GraphQLObjectType({name:"__InputValue",description:"Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",fields:function(){return{name:{type:new Pe.GraphQLNonNull($t.GraphQLString),resolve:function(r){return r.name}},description:{type:$t.GraphQLString,resolve:function(r){return r.description}},type:{type:new Pe.GraphQLNonNull(Wi),resolve:function(r){return r.type}},defaultValue:{type:$t.GraphQLString,description:"A GraphQL-formatted string representing the default value for this input value.",resolve:function(r){var n=r.type,i=r.defaultValue,o=(0,f4.astFromValue)(i,n);return o?(0,c4.print)(o):null}},isDeprecated:{type:new Pe.GraphQLNonNull($t.GraphQLBoolean),resolve:function(r){return r.deprecationReason!=null}},deprecationReason:{type:$t.GraphQLString,resolve:function(r){return r.deprecationReason}}}}});Gt.__InputValue=$d;var uE=new Pe.GraphQLObjectType({name:"__EnumValue",description:"One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",fields:function(){return{name:{type:new Pe.GraphQLNonNull($t.GraphQLString),resolve:function(r){return r.name}},description:{type:$t.GraphQLString,resolve:function(r){return r.description}},isDeprecated:{type:new Pe.GraphQLNonNull($t.GraphQLBoolean),resolve:function(r){return r.deprecationReason!=null}},deprecationReason:{type:$t.GraphQLString,resolve:function(r){return r.deprecationReason}}}}});Gt.__EnumValue=uE;var En=Object.freeze({SCALAR:"SCALAR",OBJECT:"OBJECT",INTERFACE:"INTERFACE",UNION:"UNION",ENUM:"ENUM",INPUT_OBJECT:"INPUT_OBJECT",LIST:"LIST",NON_NULL:"NON_NULL"});Gt.TypeKind=En;var sE=new Pe.GraphQLEnumType({name:"__TypeKind",description:"An enum describing what kind of type a given `__Type` is.",values:{SCALAR:{value:En.SCALAR,description:"Indicates this type is a scalar."},OBJECT:{value:En.OBJECT,description:"Indicates this type is an object. `fields` and `interfaces` are valid fields."},INTERFACE:{value:En.INTERFACE,description:"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields."},UNION:{value:En.UNION,description:"Indicates this type is a union. `possibleTypes` is a valid field."},ENUM:{value:En.ENUM,description:"Indicates this type is an enum. `enumValues` is a valid field."},INPUT_OBJECT:{value:En.INPUT_OBJECT,description:"Indicates this type is an input object. `inputFields` is a valid field."},LIST:{value:En.LIST,description:"Indicates this type is a list. `ofType` is a valid field."},NON_NULL:{value:En.NON_NULL,description:"Indicates this type is a non-null. `ofType` is a valid field."}}});Gt.__TypeKind=sE;var d4={name:"__schema",type:new Pe.GraphQLNonNull(nE),description:"Access the current type schema of this server.",args:[],resolve:function(t,r,n,i){var o=i.schema;return o},isDeprecated:!1,deprecationReason:void 0,extensions:void 0,astNode:void 0};Gt.SchemaMetaFieldDef=d4;var p4={name:"__type",type:Wi,description:"Request the type information of a single type.",args:[{name:"name",description:void 0,type:new Pe.GraphQLNonNull($t.GraphQLString),defaultValue:void 0,deprecationReason:void 0,extensions:void 0,astNode:void 0}],resolve:function(t,r,n,i){var o=r.name,s=i.schema;return s.getType(o)},isDeprecated:!1,deprecationReason:void 0,extensions:void 0,astNode:void 0};Gt.TypeMetaFieldDef=p4;var h4={name:"__typename",type:new Pe.GraphQLNonNull($t.GraphQLString),description:"The name of the current Object type at runtime.",args:[],resolve:function(t,r,n,i){var o=i.parentType;return o.name},isDeprecated:!1,deprecationReason:void 0,extensions:void 0,astNode:void 0};Gt.TypeNameMetaFieldDef=h4;var yI=Object.freeze([nE,iE,aE,Wi,oE,$d,uE,sE]);Gt.introspectionTypes=yI;function v4(e){return yI.some(function(t){var r=t.name;return e.name===r})}});var gi=G(Zr=>{"use strict";Object.defineProperty(Zr,"__esModule",{value:!0});Zr.isDirective=_I;Zr.assertDirective=S4;Zr.isSpecifiedDirective=k4;Zr.specifiedDirectives=Zr.GraphQLSpecifiedByDirective=Zr.GraphQLDeprecatedDirective=Zr.DEFAULT_DEPRECATION_REASON=Zr.GraphQLSkipDirective=Zr.GraphQLIncludeDirective=Zr.GraphQLDirective=void 0;var g4=Es(ic()),m4=qa(),y4=Es(jt()),bI=Es(Ng()),lE=Es(Hi()),b4=Es(jd()),T4=Es(Ma()),_4=Es(dg()),Ta=$l(),Qg=Ga(),Bg=bt();function Es(e){return e&&e.__esModule?e:{default:e}}function TI(e,t){for(var r=0;r{"use strict";Object.defineProperty(cc,"__esModule",{value:!0});cc.isSchema=CI;cc.assertSchema=A4;cc.GraphQLSchema=void 0;var O4=ku(nc()),w4=ku(Y_()),cE=ku(Ni()),N4=qa(),fE=ku(jt()),D4=ku(Ng()),Kg=ku(Hi()),x4=ku(jd()),C4=ku(Ma()),L4=vi(),DI=gi(),_a=bt();function ku(e){return e&&e.__esModule?e:{default:e}}function xI(e,t){for(var r=0;r{"use strict";Object.defineProperty(Hg,"__esModule",{value:!0});Hg.validateSchema=jI;Hg.assertValidSchema=q4;var II=dE(nc()),ep=dE(Ni()),qn=dE(jt()),R4=Je(),j4=qd(),P4=S_(),AI=Hd(),F4=ks(),M4=vi(),RI=gi(),Cr=bt();function dE(e){return e&&e.__esModule?e:{default:e}}function jI(e){if((0,F4.assertSchema)(e),e.__validationErrors)return e.__validationErrors;var t=new V4(e);U4(t),G4(t),Q4(t);var r=t.getErrors();return e.__validationErrors=r,r}function q4(e){var t=jI(e);if(t.length!==0)throw new Error(t.map(function(r){return r.message}).join(` - -`))}var V4=function(){function e(r){this._errors=[],this.schema=r}var t=e.prototype;return t.reportError=function(n,i){var o=Array.isArray(i)?i.filter(Boolean):i;this.addError(new R4.GraphQLError(n,o))},t.addError=function(n){this._errors.push(n)},t.getErrors=function(){return this._errors},e}();function U4(e){var t=e.schema,r=t.getQueryType();if(!r)e.reportError("Query root type must be provided.",t.astNode);else if(!(0,Cr.isObjectType)(r)){var n;e.reportError("Query root type must be Object type, it cannot be ".concat((0,qn.default)(r),"."),(n=pE(t,"query"))!==null&&n!==void 0?n:r.astNode)}var i=t.getMutationType();if(i&&!(0,Cr.isObjectType)(i)){var o;e.reportError("Mutation root type must be Object type if provided, it cannot be "+"".concat((0,qn.default)(i),"."),(o=pE(t,"mutation"))!==null&&o!==void 0?o:i.astNode)}var s=t.getSubscriptionType();if(s&&!(0,Cr.isObjectType)(s)){var l;e.reportError("Subscription root type must be Object type if provided, it cannot be "+"".concat((0,qn.default)(s),"."),(l=pE(t,"subscription"))!==null&&l!==void 0?l:s.astNode)}}function pE(e,t){for(var r=hE(e,function(o){return o.operationTypes}),n=0;n{"use strict";Object.defineProperty(yE,"__esModule",{value:!0});yE.typeFromAST=mE;var J4=VI(jt()),X4=VI(_n()),gE=Jt(),qI=bt();function VI(e){return e&&e.__esModule?e:{default:e}}function mE(e,t){var r;if(t.kind===gE.Kind.LIST_TYPE)return r=mE(e,t.type),r&&new qI.GraphQLList(r);if(t.kind===gE.Kind.NON_NULL_TYPE)return r=mE(e,t.type),r&&new qI.GraphQLNonNull(r);if(t.kind===gE.Kind.NAMED_TYPE)return e.getType(t.name.value);(0,X4.default)(0,"Unexpected type node: "+(0,J4.default)(t))}});var zg=G(np=>{"use strict";Object.defineProperty(np,"__esModule",{value:!0});np.visitWithTypeInfo=n5;np.TypeInfo=void 0;var Z4=e5(nc()),Sr=Jt(),$4=Xl(),UI=hu(),kr=bt(),dc=vi(),GI=Qa();function e5(e){return e&&e.__esModule?e:{default:e}}var t5=function(){function e(r,n,i){this._schema=r,this._typeStack=[],this._parentTypeStack=[],this._inputTypeStack=[],this._fieldDefStack=[],this._defaultValueStack=[],this._directive=null,this._argument=null,this._enumValue=null,this._getFieldDef=n!=null?n:r5,i&&((0,kr.isInputType)(i)&&this._inputTypeStack.push(i),(0,kr.isCompositeType)(i)&&this._parentTypeStack.push(i),(0,kr.isOutputType)(i)&&this._typeStack.push(i))}var t=e.prototype;return t.getType=function(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]},t.getParentType=function(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]},t.getInputType=function(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]},t.getParentInputType=function(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]},t.getFieldDef=function(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]},t.getDefaultValue=function(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]},t.getDirective=function(){return this._directive},t.getArgument=function(){return this._argument},t.getEnumValue=function(){return this._enumValue},t.enter=function(n){var i=this._schema;switch(n.kind){case Sr.Kind.SELECTION_SET:{var o=(0,kr.getNamedType)(this.getType());this._parentTypeStack.push((0,kr.isCompositeType)(o)?o:void 0);break}case Sr.Kind.FIELD:{var s=this.getParentType(),l,d;s&&(l=this._getFieldDef(i,s,n),l&&(d=l.type)),this._fieldDefStack.push(l),this._typeStack.push((0,kr.isOutputType)(d)?d:void 0);break}case Sr.Kind.DIRECTIVE:this._directive=i.getDirective(n.name.value);break;case Sr.Kind.OPERATION_DEFINITION:{var h;switch(n.operation){case"query":h=i.getQueryType();break;case"mutation":h=i.getMutationType();break;case"subscription":h=i.getSubscriptionType();break}this._typeStack.push((0,kr.isObjectType)(h)?h:void 0);break}case Sr.Kind.INLINE_FRAGMENT:case Sr.Kind.FRAGMENT_DEFINITION:{var v=n.typeCondition,y=v?(0,GI.typeFromAST)(i,v):(0,kr.getNamedType)(this.getType());this._typeStack.push((0,kr.isOutputType)(y)?y:void 0);break}case Sr.Kind.VARIABLE_DEFINITION:{var b=(0,GI.typeFromAST)(i,n.type);this._inputTypeStack.push((0,kr.isInputType)(b)?b:void 0);break}case Sr.Kind.ARGUMENT:{var D,_,k,T=(D=this.getDirective())!==null&&D!==void 0?D:this.getFieldDef();T&&(_=(0,Z4.default)(T.args,function(M){return M.name===n.name.value}),_&&(k=_.type)),this._argument=_,this._defaultValueStack.push(_?_.defaultValue:void 0),this._inputTypeStack.push((0,kr.isInputType)(k)?k:void 0);break}case Sr.Kind.LIST:{var S=(0,kr.getNullableType)(this.getInputType()),m=(0,kr.isListType)(S)?S.ofType:S;this._defaultValueStack.push(void 0),this._inputTypeStack.push((0,kr.isInputType)(m)?m:void 0);break}case Sr.Kind.OBJECT_FIELD:{var w=(0,kr.getNamedType)(this.getInputType()),x,L;(0,kr.isInputObjectType)(w)&&(L=w.getFields()[n.name.value],L&&(x=L.type)),this._defaultValueStack.push(L?L.defaultValue:void 0),this._inputTypeStack.push((0,kr.isInputType)(x)?x:void 0);break}case Sr.Kind.ENUM:{var O=(0,kr.getNamedType)(this.getInputType()),R;(0,kr.isEnumType)(O)&&(R=O.getValue(n.value)),this._enumValue=R;break}}},t.leave=function(n){switch(n.kind){case Sr.Kind.SELECTION_SET:this._parentTypeStack.pop();break;case Sr.Kind.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case Sr.Kind.DIRECTIVE:this._directive=null;break;case Sr.Kind.OPERATION_DEFINITION:case Sr.Kind.INLINE_FRAGMENT:case Sr.Kind.FRAGMENT_DEFINITION:this._typeStack.pop();break;case Sr.Kind.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case Sr.Kind.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Sr.Kind.LIST:case Sr.Kind.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case Sr.Kind.ENUM:this._enumValue=null;break}},e}();np.TypeInfo=t5;function r5(e,t,r){var n=r.name.value;if(n===dc.SchemaMetaFieldDef.name&&e.getQueryType()===t)return dc.SchemaMetaFieldDef;if(n===dc.TypeMetaFieldDef.name&&e.getQueryType()===t)return dc.TypeMetaFieldDef;if(n===dc.TypeNameMetaFieldDef.name&&(0,kr.isCompositeType)(t))return dc.TypeNameMetaFieldDef;if((0,kr.isObjectType)(t)||(0,kr.isInterfaceType)(t))return t.getFields()[n]}function n5(e,t){return{enter:function(n){e.enter(n);var i=(0,UI.getVisitFn)(t,n.kind,!1);if(i){var o=i.apply(t,arguments);return o!==void 0&&(e.leave(n),(0,$4.isNode)(o)&&e.enter(o)),o}},leave:function(n){var i=(0,UI.getVisitFn)(t,n.kind,!0),o;return i&&(o=i.apply(t,arguments)),e.leave(n),o}}}});var ws=G(Sa=>{"use strict";Object.defineProperty(Sa,"__esModule",{value:!0});Sa.isDefinitionNode=i5;Sa.isExecutableDefinitionNode=QI;Sa.isSelectionNode=a5;Sa.isValueNode=o5;Sa.isTypeNode=u5;Sa.isTypeSystemDefinitionNode=BI;Sa.isTypeDefinitionNode=KI;Sa.isTypeSystemExtensionNode=HI;Sa.isTypeExtensionNode=zI;var Dt=Jt();function i5(e){return QI(e)||BI(e)||HI(e)}function QI(e){return e.kind===Dt.Kind.OPERATION_DEFINITION||e.kind===Dt.Kind.FRAGMENT_DEFINITION}function a5(e){return e.kind===Dt.Kind.FIELD||e.kind===Dt.Kind.FRAGMENT_SPREAD||e.kind===Dt.Kind.INLINE_FRAGMENT}function o5(e){return e.kind===Dt.Kind.VARIABLE||e.kind===Dt.Kind.INT||e.kind===Dt.Kind.FLOAT||e.kind===Dt.Kind.STRING||e.kind===Dt.Kind.BOOLEAN||e.kind===Dt.Kind.NULL||e.kind===Dt.Kind.ENUM||e.kind===Dt.Kind.LIST||e.kind===Dt.Kind.OBJECT}function u5(e){return e.kind===Dt.Kind.NAMED_TYPE||e.kind===Dt.Kind.LIST_TYPE||e.kind===Dt.Kind.NON_NULL_TYPE}function BI(e){return e.kind===Dt.Kind.SCHEMA_DEFINITION||KI(e)||e.kind===Dt.Kind.DIRECTIVE_DEFINITION}function KI(e){return e.kind===Dt.Kind.SCALAR_TYPE_DEFINITION||e.kind===Dt.Kind.OBJECT_TYPE_DEFINITION||e.kind===Dt.Kind.INTERFACE_TYPE_DEFINITION||e.kind===Dt.Kind.UNION_TYPE_DEFINITION||e.kind===Dt.Kind.ENUM_TYPE_DEFINITION||e.kind===Dt.Kind.INPUT_OBJECT_TYPE_DEFINITION}function HI(e){return e.kind===Dt.Kind.SCHEMA_EXTENSION||zI(e)}function zI(e){return e.kind===Dt.Kind.SCALAR_TYPE_EXTENSION||e.kind===Dt.Kind.OBJECT_TYPE_EXTENSION||e.kind===Dt.Kind.INTERFACE_TYPE_EXTENSION||e.kind===Dt.Kind.UNION_TYPE_EXTENSION||e.kind===Dt.Kind.ENUM_TYPE_EXTENSION||e.kind===Dt.Kind.INPUT_OBJECT_TYPE_EXTENSION}});var TE=G(bE=>{"use strict";Object.defineProperty(bE,"__esModule",{value:!0});bE.ExecutableDefinitionsRule=c5;var s5=Je(),WI=Jt(),l5=ws();function c5(e){return{Document:function(r){for(var n=0,i=r.definitions;n{"use strict";Object.defineProperty(_E,"__esModule",{value:!0});_E.UniqueOperationNamesRule=d5;var f5=Je();function d5(e){var t=Object.create(null);return{OperationDefinition:function(n){var i=n.name;return i&&(t[i.value]?e.reportError(new f5.GraphQLError('There can be only one operation named "'.concat(i.value,'".'),[t[i.value],i])):t[i.value]=i),!1},FragmentDefinition:function(){return!1}}}});var kE=G(SE=>{"use strict";Object.defineProperty(SE,"__esModule",{value:!0});SE.LoneAnonymousOperationRule=v5;var p5=Je(),h5=Jt();function v5(e){var t=0;return{Document:function(n){t=n.definitions.filter(function(i){return i.kind===h5.Kind.OPERATION_DEFINITION}).length},OperationDefinition:function(n){!n.name&&t>1&&e.reportError(new p5.GraphQLError("This anonymous operation must be the only defined operation.",n))}}}});var wE=G(OE=>{"use strict";Object.defineProperty(OE,"__esModule",{value:!0});OE.SingleFieldSubscriptionsRule=m5;var g5=Je();function m5(e){return{OperationDefinition:function(r){r.operation==="subscription"&&r.selectionSet.selections.length!==1&&e.reportError(new g5.GraphQLError(r.name?'Subscription "'.concat(r.name.value,'" must select only one top level field.'):"Anonymous Subscription must select only one top level field.",r.selectionSet.selections.slice(1)))}}}});var xE=G(DE=>{"use strict";Object.defineProperty(DE,"__esModule",{value:!0});DE.KnownTypeNamesRule=S5;var y5=YI(gu()),b5=YI(mu()),T5=Je(),NE=ws(),_5=Ga(),E5=vi();function YI(e){return e&&e.__esModule?e:{default:e}}function S5(e){for(var t=e.getSchema(),r=t?t.getTypeMap():Object.create(null),n=Object.create(null),i=0,o=e.getDocument().definitions;i{"use strict";Object.defineProperty(CE,"__esModule",{value:!0});CE.FragmentsOnCompositeTypesRule=w5;var XI=Je(),ZI=hi(),$I=bt(),eA=Qa();function w5(e){return{InlineFragment:function(r){var n=r.typeCondition;if(n){var i=(0,eA.typeFromAST)(e.getSchema(),n);if(i&&!(0,$I.isCompositeType)(i)){var o=(0,ZI.print)(n);e.reportError(new XI.GraphQLError('Fragment cannot condition on non composite type "'.concat(o,'".'),n))}}},FragmentDefinition:function(r){var n=(0,eA.typeFromAST)(e.getSchema(),r.typeCondition);if(n&&!(0,$I.isCompositeType)(n)){var i=(0,ZI.print)(r.typeCondition);e.reportError(new XI.GraphQLError('Fragment "'.concat(r.name.value,'" cannot condition on non composite type "').concat(i,'".'),r.typeCondition))}}}}});var AE=G(IE=>{"use strict";Object.defineProperty(IE,"__esModule",{value:!0});IE.VariablesAreInputTypesRule=L5;var N5=Je(),D5=hi(),x5=bt(),C5=Qa();function L5(e){return{VariableDefinition:function(r){var n=(0,C5.typeFromAST)(e.getSchema(),r.type);if(n&&!(0,x5.isInputType)(n)){var i=r.variable.name.value,o=(0,D5.print)(r.type);e.reportError(new N5.GraphQLError('Variable "$'.concat(i,'" cannot be non-input type "').concat(o,'".'),r.type))}}}}});var jE=G(RE=>{"use strict";Object.defineProperty(RE,"__esModule",{value:!0});RE.ScalarLeafsRule=A5;var tA=I5(jt()),rA=Je(),nA=bt();function I5(e){return e&&e.__esModule?e:{default:e}}function A5(e){return{Field:function(r){var n=e.getType(),i=r.selectionSet;if(n){if((0,nA.isLeafType)((0,nA.getNamedType)(n))){if(i){var o=r.name.value,s=(0,tA.default)(n);e.reportError(new rA.GraphQLError('Field "'.concat(o,'" must not have a selection since type "').concat(s,'" has no subfields.'),i))}}else if(!i){var l=r.name.value,d=(0,tA.default)(n);e.reportError(new rA.GraphQLError('Field "'.concat(l,'" of type "').concat(d,'" must have a selection of subfields. Did you mean "').concat(l,' { ... }"?'),r))}}}}}});var FE=G(PE=>{"use strict";Object.defineProperty(PE,"__esModule",{value:!0});PE.FieldsOnCorrectTypeRule=M5;var R5=Wg(Y_()),iA=Wg(gu()),j5=Wg(mu()),P5=Wg(Ud()),F5=Je(),ip=bt();function Wg(e){return e&&e.__esModule?e:{default:e}}function M5(e){return{Field:function(r){var n=e.getParentType();if(n){var i=e.getFieldDef();if(!i){var o=e.getSchema(),s=r.name.value,l=(0,iA.default)("to use an inline fragment on",q5(o,n,s));l===""&&(l=(0,iA.default)(V5(n,s))),e.reportError(new F5.GraphQLError('Cannot query field "'.concat(s,'" on type "').concat(n.name,'".')+l,r))}}}}}function q5(e,t,r){if(!(0,ip.isAbstractType)(t))return[];for(var n=new Set,i=Object.create(null),o=0,s=e.getPossibleTypes(t);o{"use strict";Object.defineProperty(ME,"__esModule",{value:!0});ME.UniqueFragmentNamesRule=G5;var U5=Je();function G5(e){var t=Object.create(null);return{OperationDefinition:function(){return!1},FragmentDefinition:function(n){var i=n.name.value;return t[i]?e.reportError(new U5.GraphQLError('There can be only one fragment named "'.concat(i,'".'),[t[i],n.name])):t[i]=n.name,!1}}}});var UE=G(VE=>{"use strict";Object.defineProperty(VE,"__esModule",{value:!0});VE.KnownFragmentNamesRule=B5;var Q5=Je();function B5(e){return{FragmentSpread:function(r){var n=r.name.value,i=e.getFragment(n);i||e.reportError(new Q5.GraphQLError('Unknown fragment "'.concat(n,'".'),r.name))}}}});var QE=G(GE=>{"use strict";Object.defineProperty(GE,"__esModule",{value:!0});GE.NoUnusedFragmentsRule=H5;var K5=Je();function H5(e){var t=[],r=[];return{OperationDefinition:function(i){return t.push(i),!1},FragmentDefinition:function(i){return r.push(i),!1},Document:{leave:function(){for(var i=Object.create(null),o=0;o{"use strict";Object.defineProperty(KE,"__esModule",{value:!0});KE.PossibleFragmentSpreadsRule=Y5;var Yg=W5(jt()),aA=Je(),BE=bt(),z5=Qa(),oA=Hd();function W5(e){return e&&e.__esModule?e:{default:e}}function Y5(e){return{InlineFragment:function(r){var n=e.getType(),i=e.getParentType();if((0,BE.isCompositeType)(n)&&(0,BE.isCompositeType)(i)&&!(0,oA.doTypesOverlap)(e.getSchema(),n,i)){var o=(0,Yg.default)(i),s=(0,Yg.default)(n);e.reportError(new aA.GraphQLError('Fragment cannot be spread here as objects of type "'.concat(o,'" can never be of type "').concat(s,'".'),r))}},FragmentSpread:function(r){var n=r.name.value,i=J5(e,n),o=e.getParentType();if(i&&o&&!(0,oA.doTypesOverlap)(e.getSchema(),i,o)){var s=(0,Yg.default)(o),l=(0,Yg.default)(i);e.reportError(new aA.GraphQLError('Fragment "'.concat(n,'" cannot be spread here as objects of type "').concat(s,'" can never be of type "').concat(l,'".'),r))}}}}function J5(e,t){var r=e.getFragment(t);if(r){var n=(0,z5.typeFromAST)(e.getSchema(),r.typeCondition);if((0,BE.isCompositeType)(n))return n}}});var WE=G(zE=>{"use strict";Object.defineProperty(zE,"__esModule",{value:!0});zE.NoFragmentCyclesRule=Z5;var X5=Je();function Z5(e){var t=Object.create(null),r=[],n=Object.create(null);return{OperationDefinition:function(){return!1},FragmentDefinition:function(s){return i(s),!1}};function i(o){if(!t[o.name.value]){var s=o.name.value;t[s]=!0;var l=e.getFragmentSpreads(o.selectionSet);if(l.length!==0){n[s]=r.length;for(var d=0;d{"use strict";Object.defineProperty(YE,"__esModule",{value:!0});YE.UniqueVariableNamesRule=e6;var $5=Je();function e6(e){var t=Object.create(null);return{OperationDefinition:function(){t=Object.create(null)},VariableDefinition:function(n){var i=n.variable.name.value;t[i]?e.reportError(new $5.GraphQLError('There can be only one variable named "$'.concat(i,'".'),[t[i],n.variable.name])):t[i]=n.variable.name}}}});var ZE=G(XE=>{"use strict";Object.defineProperty(XE,"__esModule",{value:!0});XE.NoUndefinedVariablesRule=r6;var t6=Je();function r6(e){var t=Object.create(null);return{OperationDefinition:{enter:function(){t=Object.create(null)},leave:function(n){for(var i=e.getRecursiveVariableUsages(n),o=0;o{"use strict";Object.defineProperty($E,"__esModule",{value:!0});$E.NoUnusedVariablesRule=i6;var n6=Je();function i6(e){var t=[];return{OperationDefinition:{enter:function(){t=[]},leave:function(n){for(var i=Object.create(null),o=e.getRecursiveVariableUsages(n),s=0;s{"use strict";Object.defineProperty(tS,"__esModule",{value:!0});tS.KnownDirectivesRule=u6;var a6=lA(jt()),uA=lA(_n()),sA=Je(),sr=Jt(),$r=$l(),o6=gi();function lA(e){return e&&e.__esModule?e:{default:e}}function u6(e){for(var t=Object.create(null),r=e.getSchema(),n=r?r.getDirectives():o6.specifiedDirectives,i=0;i{"use strict";Object.defineProperty(iS,"__esModule",{value:!0});iS.UniqueDirectivesPerLocationRule=d6;var c6=Je(),nS=Jt(),cA=ws(),f6=gi();function d6(e){for(var t=Object.create(null),r=e.getSchema(),n=r?r.getDirectives():f6.specifiedDirectives,i=0;i{"use strict";Object.defineProperty(Jg,"__esModule",{value:!0});Jg.KnownArgumentNamesRule=g6;Jg.KnownArgumentNamesOnDirectivesRule=mA;var fA=hA(gu()),dA=hA(mu()),pA=Je(),p6=Jt(),h6=gi();function hA(e){return e&&e.__esModule?e:{default:e}}function vA(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function gA(e){for(var t=1;t{"use strict";Object.defineProperty(uS,"__esModule",{value:!0});uS.UniqueArgumentNamesRule=y6;var m6=Je();function y6(e){var t=Object.create(null);return{Field:function(){t=Object.create(null)},Directive:function(){t=Object.create(null)},Argument:function(n){var i=n.name.value;return t[i]?e.reportError(new m6.GraphQLError('There can be only one argument named "'.concat(i,'".'),[t[i],n.name])):t[i]=n.name,!1}}}});var cS=G(lS=>{"use strict";Object.defineProperty(lS,"__esModule",{value:!0});lS.ValuesOfCorrectTypeRule=S6;var b6=op(Ni()),T6=op(vu()),ap=op(jt()),_6=op(gu()),E6=op(mu()),Ns=Je(),Xg=hi(),Ba=bt();function op(e){return e&&e.__esModule?e:{default:e}}function S6(e){return{ListValue:function(r){var n=(0,Ba.getNullableType)(e.getParentInputType());if(!(0,Ba.isListType)(n))return Ds(e,r),!1},ObjectValue:function(r){var n=(0,Ba.getNamedType)(e.getInputType());if(!(0,Ba.isInputObjectType)(n))return Ds(e,r),!1;for(var i=(0,T6.default)(r.fields,function(v){return v.name.value}),o=0,s=(0,b6.default)(n.getFields());o{"use strict";Object.defineProperty($g,"__esModule",{value:!0});$g.ProvidedRequiredArgumentsRule=N6;$g.ProvidedRequiredArgumentsOnDirectivesRule=kA;var yA=_A(jt()),Zg=_A(vu()),bA=Je(),TA=Jt(),k6=hi(),O6=gi(),fS=bt();function _A(e){return e&&e.__esModule?e:{default:e}}function EA(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function SA(e){for(var t=1;t{"use strict";Object.defineProperty(pS,"__esModule",{value:!0});pS.VariablesInAllowedPositionRule=A6;var OA=I6(jt()),x6=Je(),C6=Jt(),wA=bt(),L6=Qa(),NA=Hd();function I6(e){return e&&e.__esModule?e:{default:e}}function A6(e){var t=Object.create(null);return{OperationDefinition:{enter:function(){t=Object.create(null)},leave:function(n){for(var i=e.getRecursiveVariableUsages(n),o=0;o{"use strict";Object.defineProperty(TS,"__esModule",{value:!0});TS.OverlappingFieldsCanBeMergedRule=M6;var j6=gS(nc()),P6=gS(ic()),DA=gS(jt()),F6=Je(),vS=Jt(),xA=hi(),mi=bt(),CA=Qa();function gS(e){return e&&e.__esModule?e:{default:e}}function LA(e){return Array.isArray(e)?e.map(function(t){var r=t[0],n=t[1];return'subfields "'.concat(r,'" conflict because ')+LA(n)}).join(" and "):e}function M6(e){var t=new K6,r=new Map;return{SelectionSet:function(i){for(var o=q6(e,r,t,e.getParentType(),i),s=0;s1)for(var v=0;v0)return[[t,e.map(function(i){var o=i[0];return o})],e.reduce(function(i,o){var s=o[1];return i.concat(s)},[r]),e.reduce(function(i,o){var s=o[2];return i.concat(s)},[n])]}var K6=function(){function e(){this._data=Object.create(null)}var t=e.prototype;return t.has=function(n,i,o){var s=this._data[n],l=s&&s[i];return l===void 0?!1:o===!1?l===!1:!0},t.add=function(n,i,o){this._pairSetAdd(n,i,o),this._pairSetAdd(i,n,o)},t._pairSetAdd=function(n,i,o){var s=this._data[n];s||(s=Object.create(null),this._data[n]=s),s[i]=o},e}()});var SS=G(ES=>{"use strict";Object.defineProperty(ES,"__esModule",{value:!0});ES.UniqueInputFieldNamesRule=z6;var H6=Je();function z6(e){var t=[],r=Object.create(null);return{ObjectValue:{enter:function(){t.push(r),r=Object.create(null)},leave:function(){r=t.pop()}},ObjectField:function(i){var o=i.name.value;r[o]?e.reportError(new H6.GraphQLError('There can be only one input field named "'.concat(o,'".'),[r[o],i.name])):r[o]=i.name}}}});var OS=G(kS=>{"use strict";Object.defineProperty(kS,"__esModule",{value:!0});kS.LoneSchemaDefinitionRule=W6;var RA=Je();function W6(e){var t,r,n,i=e.getSchema(),o=(t=(r=(n=i==null?void 0:i.astNode)!==null&&n!==void 0?n:i==null?void 0:i.getQueryType())!==null&&r!==void 0?r:i==null?void 0:i.getMutationType())!==null&&t!==void 0?t:i==null?void 0:i.getSubscriptionType(),s=0;return{SchemaDefinition:function(d){if(o){e.reportError(new RA.GraphQLError("Cannot define a new schema within a schema extension.",d));return}s>0&&e.reportError(new RA.GraphQLError("Must provide only one schema definition.",d)),++s}}}});var NS=G(wS=>{"use strict";Object.defineProperty(wS,"__esModule",{value:!0});wS.UniqueOperationTypesRule=Y6;var jA=Je();function Y6(e){var t=e.getSchema(),r=Object.create(null),n=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(o){for(var s,l=(s=o.operationTypes)!==null&&s!==void 0?s:[],d=0;d{"use strict";Object.defineProperty(DS,"__esModule",{value:!0});DS.UniqueTypeNamesRule=J6;var PA=Je();function J6(e){var t=Object.create(null),r=e.getSchema();return{ScalarTypeDefinition:n,ObjectTypeDefinition:n,InterfaceTypeDefinition:n,UnionTypeDefinition:n,EnumTypeDefinition:n,InputObjectTypeDefinition:n};function n(i){var o=i.name.value;if(r!=null&&r.getType(o)){e.reportError(new PA.GraphQLError('Type "'.concat(o,'" already exists in the schema. It cannot also be defined in this type definition.'),i.name));return}return t[o]?e.reportError(new PA.GraphQLError('There can be only one type named "'.concat(o,'".'),[t[o],i.name])):t[o]=i.name,!1}}});var LS=G(CS=>{"use strict";Object.defineProperty(CS,"__esModule",{value:!0});CS.UniqueEnumValueNamesRule=Z6;var FA=Je(),X6=bt();function Z6(e){var t=e.getSchema(),r=t?t.getTypeMap():Object.create(null),n=Object.create(null);return{EnumTypeDefinition:i,EnumTypeExtension:i};function i(o){var s,l=o.name.value;n[l]||(n[l]=Object.create(null));for(var d=(s=o.values)!==null&&s!==void 0?s:[],h=n[l],v=0;v{"use strict";Object.defineProperty(AS,"__esModule",{value:!0});AS.UniqueFieldDefinitionNamesRule=$6;var MA=Je(),IS=bt();function $6(e){var t=e.getSchema(),r=t?t.getTypeMap():Object.create(null),n=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(o){var s,l=o.name.value;n[l]||(n[l]=Object.create(null));for(var d=(s=o.fields)!==null&&s!==void 0?s:[],h=n[l],v=0;v{"use strict";Object.defineProperty(jS,"__esModule",{value:!0});jS.UniqueDirectiveNamesRule=t9;var qA=Je();function t9(e){var t=Object.create(null),r=e.getSchema();return{DirectiveDefinition:function(i){var o=i.name.value;if(r!=null&&r.getDirective(o)){e.reportError(new qA.GraphQLError('Directive "@'.concat(o,'" already exists in the schema. It cannot be redefined.'),i.name));return}return t[o]?e.reportError(new qA.GraphQLError('There can be only one directive named "@'.concat(o,'".'),[t[o],i.name])):t[o]=i.name,!1}}}});var MS=G(FS=>{"use strict";Object.defineProperty(FS,"__esModule",{value:!0});FS.PossibleTypeExtensionsRule=a9;var VA=nm(jt()),UA=nm(_n()),r9=nm(gu()),n9=nm(mu()),GA=Je(),dr=Jt(),i9=ws(),pc=bt(),Ou;function nm(e){return e&&e.__esModule?e:{default:e}}function hc(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a9(e){for(var t=e.getSchema(),r=Object.create(null),n=0,i=e.getDocument().definitions;n{"use strict";Object.defineProperty(vc,"__esModule",{value:!0});vc.specifiedSDLRules=vc.specifiedRules=void 0;var l9=TE(),c9=EE(),f9=kE(),d9=wE(),QA=xE(),p9=LE(),h9=AE(),v9=jE(),g9=FE(),m9=qE(),y9=UE(),b9=QE(),T9=HE(),_9=WE(),E9=JE(),S9=ZE(),k9=eS(),BA=rS(),KA=aS(),HA=oS(),zA=sS(),O9=cS(),WA=dS(),w9=hS(),N9=_S(),YA=SS(),D9=OS(),x9=NS(),C9=xS(),L9=LS(),I9=RS(),A9=PS(),R9=MS(),j9=Object.freeze([l9.ExecutableDefinitionsRule,c9.UniqueOperationNamesRule,f9.LoneAnonymousOperationRule,d9.SingleFieldSubscriptionsRule,QA.KnownTypeNamesRule,p9.FragmentsOnCompositeTypesRule,h9.VariablesAreInputTypesRule,v9.ScalarLeafsRule,g9.FieldsOnCorrectTypeRule,m9.UniqueFragmentNamesRule,y9.KnownFragmentNamesRule,b9.NoUnusedFragmentsRule,T9.PossibleFragmentSpreadsRule,_9.NoFragmentCyclesRule,E9.UniqueVariableNamesRule,S9.NoUndefinedVariablesRule,k9.NoUnusedVariablesRule,BA.KnownDirectivesRule,KA.UniqueDirectivesPerLocationRule,HA.KnownArgumentNamesRule,zA.UniqueArgumentNamesRule,O9.ValuesOfCorrectTypeRule,WA.ProvidedRequiredArgumentsRule,w9.VariablesInAllowedPositionRule,N9.OverlappingFieldsCanBeMergedRule,YA.UniqueInputFieldNamesRule]);vc.specifiedRules=j9;var P9=Object.freeze([D9.LoneSchemaDefinitionRule,x9.UniqueOperationTypesRule,C9.UniqueTypeNamesRule,L9.UniqueEnumValueNamesRule,I9.UniqueFieldDefinitionNamesRule,A9.UniqueDirectiveNamesRule,QA.KnownTypeNamesRule,BA.KnownDirectivesRule,KA.UniqueDirectivesPerLocationRule,R9.PossibleTypeExtensionsRule,HA.KnownArgumentNamesOnDirectivesRule,zA.UniqueArgumentNamesRule,YA.UniqueInputFieldNamesRule,WA.ProvidedRequiredArgumentsOnDirectivesRule]);vc.specifiedSDLRules=P9});var US=G(wu=>{"use strict";Object.defineProperty(wu,"__esModule",{value:!0});wu.ValidationContext=wu.SDLValidationContext=wu.ASTValidationContext=void 0;var JA=Jt(),F9=hu(),XA=zg();function ZA(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var VS=function(){function e(r,n){this._ast=r,this._fragments=void 0,this._fragmentSpreads=new Map,this._recursivelyReferencedFragments=new Map,this._onError=n}var t=e.prototype;return t.reportError=function(n){this._onError(n)},t.getDocument=function(){return this._ast},t.getFragment=function(n){var i=this._fragments;return i||(this._fragments=i=this.getDocument().definitions.reduce(function(o,s){return s.kind===JA.Kind.FRAGMENT_DEFINITION&&(o[s.name.value]=s),o},Object.create(null))),i[n]},t.getFragmentSpreads=function(n){var i=this._fragmentSpreads.get(n);if(!i){i=[];for(var o=[n];o.length!==0;)for(var s=o.pop(),l=0,d=s.selections;l{"use strict";Object.defineProperty(gc,"__esModule",{value:!0});gc.validate=B9;gc.validateSDL=GS;gc.assertValidSDL=K9;gc.assertValidSDLExtension=H9;var V9=Q9(Hi()),U9=Je(),im=hu(),G9=rp(),$A=zg(),eR=qS(),tR=US();function Q9(e){return e&&e.__esModule?e:{default:e}}function B9(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:eR.specifiedRules,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:new $A.TypeInfo(e),i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{maxErrors:void 0};t||(0,V9.default)(0,"Must provide document."),(0,G9.assertValidSchema)(e);var o=Object.freeze({}),s=[],l=new tR.ValidationContext(e,t,n,function(h){if(i.maxErrors!=null&&s.length>=i.maxErrors)throw s.push(new U9.GraphQLError("Too many validation errors, error limit reached. Validation aborted.")),o;s.push(h)}),d=(0,im.visitInParallel)(r.map(function(h){return h(l)}));try{(0,im.visit)(t,(0,$A.visitWithTypeInfo)(n,d))}catch(h){if(h!==o)throw h}return s}function GS(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:eR.specifiedSDLRules,n=[],i=new tR.SDLValidationContext(e,t,function(s){n.push(s)}),o=r.map(function(s){return s(i)});return(0,im.visit)(e,(0,im.visitInParallel)(o)),n}function K9(e){var t=GS(e);if(t.length!==0)throw new Error(t.map(function(r){return r.message}).join(` - -`))}function H9(e,t){var r=GS(e,t);if(r.length!==0)throw new Error(r.map(function(n){return n.message}).join(` - -`))}});var rR=G(QS=>{"use strict";Object.defineProperty(QS,"__esModule",{value:!0});QS.default=z9;function z9(e){var t;return function(n,i,o){t||(t=new WeakMap);var s=t.get(n),l;if(s){if(l=s.get(i),l){var d=l.get(o);if(d!==void 0)return d}}else s=new WeakMap,t.set(n,s);l||(l=new WeakMap,s.set(i,l));var h=e(n,i,o);return l.set(o,h),h}}});var nR=G(BS=>{"use strict";Object.defineProperty(BS,"__esModule",{value:!0});BS.default=J9;var W9=Y9(rg());function Y9(e){return e&&e.__esModule?e:{default:e}}function J9(e,t,r){return e.reduce(function(n,i){return(0,W9.default)(n)?n.then(function(o){return t(o,i)}):t(n,i)},r)}});var iR=G(KS=>{"use strict";Object.defineProperty(KS,"__esModule",{value:!0});KS.default=X9;function X9(e){var t=Object.keys(e),r=t.map(function(n){return e[n]});return Promise.all(r).then(function(n){return n.reduce(function(i,o,s){return i[t[s]]=o,i},Object.create(null))})}});var up=G(am=>{"use strict";Object.defineProperty(am,"__esModule",{value:!0});am.addPath=Z9;am.pathToArray=$9;function Z9(e,t,r){return{prev:e,key:t,typename:r}}function $9(e){for(var t=[],r=e;r;)t.push(r.key),r=r.prev;return t.reverse()}});var um=G(HS=>{"use strict";Object.defineProperty(HS,"__esModule",{value:!0});HS.getOperationRootType=e8;var om=Je();function e8(e,t){if(t.operation==="query"){var r=e.getQueryType();if(!r)throw new om.GraphQLError("Schema does not define the required query root type.",t);return r}if(t.operation==="mutation"){var n=e.getMutationType();if(!n)throw new om.GraphQLError("Schema is not configured for mutations.",t);return n}if(t.operation==="subscription"){var i=e.getSubscriptionType();if(!i)throw new om.GraphQLError("Schema is not configured for subscriptions.",t);return i}throw new om.GraphQLError("Can only have query, mutation and subscription operations.",t)}});var WS=G(zS=>{"use strict";Object.defineProperty(zS,"__esModule",{value:!0});zS.default=t8;function t8(e){return e.map(function(t){return typeof t=="number"?"["+t.toString()+"]":"."+t}).join("")}});var lp=G(YS=>{"use strict";Object.defineProperty(YS,"__esModule",{value:!0});YS.valueFromAST=sp;var r8=sm(Ni()),n8=sm(vu()),i8=sm(jt()),a8=sm(_n()),yc=Jt(),xs=bt();function sm(e){return e&&e.__esModule?e:{default:e}}function sp(e,t,r){if(!!e){if(e.kind===yc.Kind.VARIABLE){var n=e.name.value;if(r==null||r[n]===void 0)return;var i=r[n];return i===null&&(0,xs.isNonNullType)(t)?void 0:i}if((0,xs.isNonNullType)(t))return e.kind===yc.Kind.NULL?void 0:sp(e,t.ofType,r);if(e.kind===yc.Kind.NULL)return null;if((0,xs.isListType)(t)){var o=t.ofType;if(e.kind===yc.Kind.LIST){for(var s=[],l=0,d=e.values;l{"use strict";Object.defineProperty(JS,"__esModule",{value:!0});JS.coerceInputValue=p8;var o8=Nu(Ni()),lm=Nu(jt()),u8=Nu(_n()),s8=Nu(gu()),l8=Nu(Ma()),c8=Nu(Mg()),f8=Nu(mu()),d8=Nu(WS()),So=up(),Cs=Je(),cp=bt();function Nu(e){return e&&e.__esModule?e:{default:e}}function p8(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:h8;return fp(e,t,r)}function h8(e,t,r){var n="Invalid value "+(0,lm.default)(t);throw e.length>0&&(n+=' at "value'.concat((0,d8.default)(e),'"')),r.message=n+": "+r.message,r}function fp(e,t,r,n){if((0,cp.isNonNullType)(t)){if(e!=null)return fp(e,t.ofType,r,n);r((0,So.pathToArray)(n),e,new Cs.GraphQLError('Expected non-nullable type "'.concat((0,lm.default)(t),'" not to be null.')));return}if(e==null)return null;if((0,cp.isListType)(t)){var i=t.ofType,o=(0,c8.default)(e,function(m,w){var x=(0,So.addPath)(n,w,void 0);return fp(m,i,r,x)});return o!=null?o:[fp(e,i,r,n)]}if((0,cp.isInputObjectType)(t)){if(!(0,l8.default)(e)){r((0,So.pathToArray)(n),e,new Cs.GraphQLError('Expected type "'.concat(t.name,'" to be an object.')));return}for(var s={},l=t.getFields(),d=0,h=(0,o8.default)(l);d{"use strict";Object.defineProperty(dp,"__esModule",{value:!0});dp.getVariableValues=T8;dp.getArgumentValues=lR;dp.getDirectiveValues=E8;var v8=cm(nc()),g8=cm(vu()),bc=cm(jt()),m8=cm(WS()),ko=Je(),oR=Jt(),uR=hi(),Tc=bt(),y8=Qa(),sR=lp(),b8=XS();function cm(e){return e&&e.__esModule?e:{default:e}}function T8(e,t,r,n){var i=[],o=n==null?void 0:n.maxErrors;try{var s=_8(e,t,r,function(l){if(o!=null&&i.length>=o)throw new ko.GraphQLError("Too many errors processing variables, error limit reached. Execution aborted.");i.push(l)});if(i.length===0)return{coerced:s}}catch(l){i.push(l)}return{errors:i}}function _8(e,t,r,n){for(var i={},o=function(h){var v=t[h],y=v.variable.name.value,b=(0,y8.typeFromAST)(e,v.type);if(!(0,Tc.isInputType)(b)){var D=(0,uR.print)(v.type);return n(new ko.GraphQLError('Variable "$'.concat(y,'" expected value of type "').concat(D,'" which cannot be used as an input type.'),v.type)),"continue"}if(!cR(r,y)){if(v.defaultValue)i[y]=(0,sR.valueFromAST)(v.defaultValue,b);else if((0,Tc.isNonNullType)(b)){var _=(0,bc.default)(b);n(new ko.GraphQLError('Variable "$'.concat(y,'" of required type "').concat(_,'" was not provided.'),v))}return"continue"}var k=r[y];if(k===null&&(0,Tc.isNonNullType)(b)){var T=(0,bc.default)(b);return n(new ko.GraphQLError('Variable "$'.concat(y,'" of non-null type "').concat(T,'" must not be null.'),v)),"continue"}i[y]=(0,b8.coerceInputValue)(k,b,function(S,m,w){var x='Variable "$'.concat(y,'" got invalid value ')+(0,bc.default)(m);S.length>0&&(x+=' at "'.concat(y).concat((0,m8.default)(S),'"')),n(new ko.GraphQLError(x+"; "+w.message,v,void 0,void 0,void 0,w.originalError))})},s=0;s{"use strict";Object.defineProperty(xi,"__esModule",{value:!0});xi.execute=L8;xi.executeSync=I8;xi.assertValidExecutionArguments=hR;xi.buildExecutionContext=vR;xi.collectFields=vp;xi.buildResolveInfo=bR;xi.getFieldDef=OR;xi.defaultFieldResolver=xi.defaultTypeResolver=void 0;var _c=wo(jt()),S8=wo(rR()),k8=wo(_n()),fR=wo(Hi()),Yi=wo(rg()),ZS=wo(Ma()),O8=wo(Mg()),w8=wo(nR()),N8=wo(iR()),Ls=up(),Ka=Je(),fm=qd(),hp=Jt(),D8=rp(),Ec=vi(),dR=gi(),Oo=bt(),x8=Qa(),C8=um(),dm=pp();function wo(e){return e&&e.__esModule?e:{default:e}}function L8(e,t,r,n,i,o,s,l){return arguments.length===1?$S(e):$S({schema:e,document:t,rootValue:r,contextValue:n,variableValues:i,operationName:o,fieldResolver:s,typeResolver:l})}function I8(e){var t=$S(e);if((0,Yi.default)(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function $S(e){var t=e.schema,r=e.document,n=e.rootValue,i=e.contextValue,o=e.variableValues,s=e.operationName,l=e.fieldResolver,d=e.typeResolver;hR(t,r,o);var h=vR(t,r,n,i,o,s,l,d);if(Array.isArray(h))return{errors:h};var v=A8(h,h.operation,n);return pR(h,v)}function pR(e,t){return(0,Yi.default)(t)?t.then(function(r){return pR(e,r)}):e.errors.length===0?{data:t}:{errors:e.errors,data:t}}function hR(e,t,r){t||(0,fR.default)(0,"Must provide document."),(0,D8.assertValidSchema)(e),r==null||(0,ZS.default)(r)||(0,fR.default)(0,"Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.")}function vR(e,t,r,n,i,o,s,l){for(var d,h,v,y=Object.create(null),b=0,D=t.definitions;b{"use strict";Object.defineProperty(vm,"__esModule",{value:!0});vm.graphql=z8;vm.graphqlSync=W8;var U8=H8(rg()),G8=tc(),Q8=mc(),B8=rp(),K8=mp();function H8(e){return e&&e.__esModule?e:{default:e}}function z8(e,t,r,n,i,o,s,l){var d=arguments;return new Promise(function(h){return h(d.length===1?hm(e):hm({schema:e,source:t,rootValue:r,contextValue:n,variableValues:i,operationName:o,fieldResolver:s,typeResolver:l}))})}function W8(e,t,r,n,i,o,s,l){var d=arguments.length===1?hm(e):hm({schema:e,source:t,rootValue:r,contextValue:n,variableValues:i,operationName:o,fieldResolver:s,typeResolver:l});if((0,U8.default)(d))throw new Error("GraphQL execution failed to complete synchronously.");return d}function hm(e){var t=e.schema,r=e.source,n=e.rootValue,i=e.contextValue,o=e.variableValues,s=e.operationName,l=e.fieldResolver,d=e.typeResolver,h=(0,B8.validateSchema)(t);if(h.length>0)return{errors:h};var v;try{v=(0,G8.parse)(r)}catch(b){return{errors:[b]}}var y=(0,Q8.validate)(t,v);return y.length>0?{errors:y}:(0,K8.execute)({schema:t,document:v,rootValue:n,contextValue:i,variableValues:o,operationName:s,fieldResolver:l,typeResolver:d})}});var DR=G(Se=>{"use strict";Object.defineProperty(Se,"__esModule",{value:!0});Object.defineProperty(Se,"isSchema",{enumerable:!0,get:function(){return rk.isSchema}});Object.defineProperty(Se,"assertSchema",{enumerable:!0,get:function(){return rk.assertSchema}});Object.defineProperty(Se,"GraphQLSchema",{enumerable:!0,get:function(){return rk.GraphQLSchema}});Object.defineProperty(Se,"isType",{enumerable:!0,get:function(){return rt.isType}});Object.defineProperty(Se,"isScalarType",{enumerable:!0,get:function(){return rt.isScalarType}});Object.defineProperty(Se,"isObjectType",{enumerable:!0,get:function(){return rt.isObjectType}});Object.defineProperty(Se,"isInterfaceType",{enumerable:!0,get:function(){return rt.isInterfaceType}});Object.defineProperty(Se,"isUnionType",{enumerable:!0,get:function(){return rt.isUnionType}});Object.defineProperty(Se,"isEnumType",{enumerable:!0,get:function(){return rt.isEnumType}});Object.defineProperty(Se,"isInputObjectType",{enumerable:!0,get:function(){return rt.isInputObjectType}});Object.defineProperty(Se,"isListType",{enumerable:!0,get:function(){return rt.isListType}});Object.defineProperty(Se,"isNonNullType",{enumerable:!0,get:function(){return rt.isNonNullType}});Object.defineProperty(Se,"isInputType",{enumerable:!0,get:function(){return rt.isInputType}});Object.defineProperty(Se,"isOutputType",{enumerable:!0,get:function(){return rt.isOutputType}});Object.defineProperty(Se,"isLeafType",{enumerable:!0,get:function(){return rt.isLeafType}});Object.defineProperty(Se,"isCompositeType",{enumerable:!0,get:function(){return rt.isCompositeType}});Object.defineProperty(Se,"isAbstractType",{enumerable:!0,get:function(){return rt.isAbstractType}});Object.defineProperty(Se,"isWrappingType",{enumerable:!0,get:function(){return rt.isWrappingType}});Object.defineProperty(Se,"isNullableType",{enumerable:!0,get:function(){return rt.isNullableType}});Object.defineProperty(Se,"isNamedType",{enumerable:!0,get:function(){return rt.isNamedType}});Object.defineProperty(Se,"isRequiredArgument",{enumerable:!0,get:function(){return rt.isRequiredArgument}});Object.defineProperty(Se,"isRequiredInputField",{enumerable:!0,get:function(){return rt.isRequiredInputField}});Object.defineProperty(Se,"assertType",{enumerable:!0,get:function(){return rt.assertType}});Object.defineProperty(Se,"assertScalarType",{enumerable:!0,get:function(){return rt.assertScalarType}});Object.defineProperty(Se,"assertObjectType",{enumerable:!0,get:function(){return rt.assertObjectType}});Object.defineProperty(Se,"assertInterfaceType",{enumerable:!0,get:function(){return rt.assertInterfaceType}});Object.defineProperty(Se,"assertUnionType",{enumerable:!0,get:function(){return rt.assertUnionType}});Object.defineProperty(Se,"assertEnumType",{enumerable:!0,get:function(){return rt.assertEnumType}});Object.defineProperty(Se,"assertInputObjectType",{enumerable:!0,get:function(){return rt.assertInputObjectType}});Object.defineProperty(Se,"assertListType",{enumerable:!0,get:function(){return rt.assertListType}});Object.defineProperty(Se,"assertNonNullType",{enumerable:!0,get:function(){return rt.assertNonNullType}});Object.defineProperty(Se,"assertInputType",{enumerable:!0,get:function(){return rt.assertInputType}});Object.defineProperty(Se,"assertOutputType",{enumerable:!0,get:function(){return rt.assertOutputType}});Object.defineProperty(Se,"assertLeafType",{enumerable:!0,get:function(){return rt.assertLeafType}});Object.defineProperty(Se,"assertCompositeType",{enumerable:!0,get:function(){return rt.assertCompositeType}});Object.defineProperty(Se,"assertAbstractType",{enumerable:!0,get:function(){return rt.assertAbstractType}});Object.defineProperty(Se,"assertWrappingType",{enumerable:!0,get:function(){return rt.assertWrappingType}});Object.defineProperty(Se,"assertNullableType",{enumerable:!0,get:function(){return rt.assertNullableType}});Object.defineProperty(Se,"assertNamedType",{enumerable:!0,get:function(){return rt.assertNamedType}});Object.defineProperty(Se,"getNullableType",{enumerable:!0,get:function(){return rt.getNullableType}});Object.defineProperty(Se,"getNamedType",{enumerable:!0,get:function(){return rt.getNamedType}});Object.defineProperty(Se,"GraphQLScalarType",{enumerable:!0,get:function(){return rt.GraphQLScalarType}});Object.defineProperty(Se,"GraphQLObjectType",{enumerable:!0,get:function(){return rt.GraphQLObjectType}});Object.defineProperty(Se,"GraphQLInterfaceType",{enumerable:!0,get:function(){return rt.GraphQLInterfaceType}});Object.defineProperty(Se,"GraphQLUnionType",{enumerable:!0,get:function(){return rt.GraphQLUnionType}});Object.defineProperty(Se,"GraphQLEnumType",{enumerable:!0,get:function(){return rt.GraphQLEnumType}});Object.defineProperty(Se,"GraphQLInputObjectType",{enumerable:!0,get:function(){return rt.GraphQLInputObjectType}});Object.defineProperty(Se,"GraphQLList",{enumerable:!0,get:function(){return rt.GraphQLList}});Object.defineProperty(Se,"GraphQLNonNull",{enumerable:!0,get:function(){return rt.GraphQLNonNull}});Object.defineProperty(Se,"isDirective",{enumerable:!0,get:function(){return Ha.isDirective}});Object.defineProperty(Se,"assertDirective",{enumerable:!0,get:function(){return Ha.assertDirective}});Object.defineProperty(Se,"GraphQLDirective",{enumerable:!0,get:function(){return Ha.GraphQLDirective}});Object.defineProperty(Se,"isSpecifiedDirective",{enumerable:!0,get:function(){return Ha.isSpecifiedDirective}});Object.defineProperty(Se,"specifiedDirectives",{enumerable:!0,get:function(){return Ha.specifiedDirectives}});Object.defineProperty(Se,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return Ha.GraphQLIncludeDirective}});Object.defineProperty(Se,"GraphQLSkipDirective",{enumerable:!0,get:function(){return Ha.GraphQLSkipDirective}});Object.defineProperty(Se,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return Ha.GraphQLDeprecatedDirective}});Object.defineProperty(Se,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return Ha.GraphQLSpecifiedByDirective}});Object.defineProperty(Se,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return Ha.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(Se,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Is.isSpecifiedScalarType}});Object.defineProperty(Se,"specifiedScalarTypes",{enumerable:!0,get:function(){return Is.specifiedScalarTypes}});Object.defineProperty(Se,"GraphQLInt",{enumerable:!0,get:function(){return Is.GraphQLInt}});Object.defineProperty(Se,"GraphQLFloat",{enumerable:!0,get:function(){return Is.GraphQLFloat}});Object.defineProperty(Se,"GraphQLString",{enumerable:!0,get:function(){return Is.GraphQLString}});Object.defineProperty(Se,"GraphQLBoolean",{enumerable:!0,get:function(){return Is.GraphQLBoolean}});Object.defineProperty(Se,"GraphQLID",{enumerable:!0,get:function(){return Is.GraphQLID}});Object.defineProperty(Se,"isIntrospectionType",{enumerable:!0,get:function(){return yi.isIntrospectionType}});Object.defineProperty(Se,"introspectionTypes",{enumerable:!0,get:function(){return yi.introspectionTypes}});Object.defineProperty(Se,"__Schema",{enumerable:!0,get:function(){return yi.__Schema}});Object.defineProperty(Se,"__Directive",{enumerable:!0,get:function(){return yi.__Directive}});Object.defineProperty(Se,"__DirectiveLocation",{enumerable:!0,get:function(){return yi.__DirectiveLocation}});Object.defineProperty(Se,"__Type",{enumerable:!0,get:function(){return yi.__Type}});Object.defineProperty(Se,"__Field",{enumerable:!0,get:function(){return yi.__Field}});Object.defineProperty(Se,"__InputValue",{enumerable:!0,get:function(){return yi.__InputValue}});Object.defineProperty(Se,"__EnumValue",{enumerable:!0,get:function(){return yi.__EnumValue}});Object.defineProperty(Se,"__TypeKind",{enumerable:!0,get:function(){return yi.__TypeKind}});Object.defineProperty(Se,"TypeKind",{enumerable:!0,get:function(){return yi.TypeKind}});Object.defineProperty(Se,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return yi.SchemaMetaFieldDef}});Object.defineProperty(Se,"TypeMetaFieldDef",{enumerable:!0,get:function(){return yi.TypeMetaFieldDef}});Object.defineProperty(Se,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return yi.TypeNameMetaFieldDef}});Object.defineProperty(Se,"validateSchema",{enumerable:!0,get:function(){return NR.validateSchema}});Object.defineProperty(Se,"assertValidSchema",{enumerable:!0,get:function(){return NR.assertValidSchema}});var rk=ks(),rt=bt(),Ha=gi(),Is=Ga(),yi=vi(),NR=rp()});var LR=G(Qt=>{"use strict";Object.defineProperty(Qt,"__esModule",{value:!0});Object.defineProperty(Qt,"Source",{enumerable:!0,get:function(){return Y8.Source}});Object.defineProperty(Qt,"getLocation",{enumerable:!0,get:function(){return J8.getLocation}});Object.defineProperty(Qt,"printLocation",{enumerable:!0,get:function(){return xR.printLocation}});Object.defineProperty(Qt,"printSourceLocation",{enumerable:!0,get:function(){return xR.printSourceLocation}});Object.defineProperty(Qt,"Kind",{enumerable:!0,get:function(){return X8.Kind}});Object.defineProperty(Qt,"TokenKind",{enumerable:!0,get:function(){return Z8.TokenKind}});Object.defineProperty(Qt,"Lexer",{enumerable:!0,get:function(){return $8.Lexer}});Object.defineProperty(Qt,"parse",{enumerable:!0,get:function(){return nk.parse}});Object.defineProperty(Qt,"parseValue",{enumerable:!0,get:function(){return nk.parseValue}});Object.defineProperty(Qt,"parseType",{enumerable:!0,get:function(){return nk.parseType}});Object.defineProperty(Qt,"print",{enumerable:!0,get:function(){return eY.print}});Object.defineProperty(Qt,"visit",{enumerable:!0,get:function(){return gm.visit}});Object.defineProperty(Qt,"visitInParallel",{enumerable:!0,get:function(){return gm.visitInParallel}});Object.defineProperty(Qt,"getVisitFn",{enumerable:!0,get:function(){return gm.getVisitFn}});Object.defineProperty(Qt,"BREAK",{enumerable:!0,get:function(){return gm.BREAK}});Object.defineProperty(Qt,"Location",{enumerable:!0,get:function(){return CR.Location}});Object.defineProperty(Qt,"Token",{enumerable:!0,get:function(){return CR.Token}});Object.defineProperty(Qt,"isDefinitionNode",{enumerable:!0,get:function(){return No.isDefinitionNode}});Object.defineProperty(Qt,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return No.isExecutableDefinitionNode}});Object.defineProperty(Qt,"isSelectionNode",{enumerable:!0,get:function(){return No.isSelectionNode}});Object.defineProperty(Qt,"isValueNode",{enumerable:!0,get:function(){return No.isValueNode}});Object.defineProperty(Qt,"isTypeNode",{enumerable:!0,get:function(){return No.isTypeNode}});Object.defineProperty(Qt,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return No.isTypeSystemDefinitionNode}});Object.defineProperty(Qt,"isTypeDefinitionNode",{enumerable:!0,get:function(){return No.isTypeDefinitionNode}});Object.defineProperty(Qt,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return No.isTypeSystemExtensionNode}});Object.defineProperty(Qt,"isTypeExtensionNode",{enumerable:!0,get:function(){return No.isTypeExtensionNode}});Object.defineProperty(Qt,"DirectiveLocation",{enumerable:!0,get:function(){return tY.DirectiveLocation}});var Y8=mg(),J8=ig(),xR=l_(),X8=Jt(),Z8=Zl(),$8=Tg(),nk=tc(),eY=hi(),gm=hu(),CR=Xl(),No=ws(),tY=$l()});var IR=G(Du=>{"use strict";Object.defineProperty(Du,"__esModule",{value:!0});Object.defineProperty(Du,"responsePathAsArray",{enumerable:!0,get:function(){return rY.pathToArray}});Object.defineProperty(Du,"execute",{enumerable:!0,get:function(){return mm.execute}});Object.defineProperty(Du,"executeSync",{enumerable:!0,get:function(){return mm.executeSync}});Object.defineProperty(Du,"defaultFieldResolver",{enumerable:!0,get:function(){return mm.defaultFieldResolver}});Object.defineProperty(Du,"defaultTypeResolver",{enumerable:!0,get:function(){return mm.defaultTypeResolver}});Object.defineProperty(Du,"getDirectiveValues",{enumerable:!0,get:function(){return nY.getDirectiveValues}});var rY=up(),mm=mp(),nY=pp()});var AR=G(ik=>{"use strict";Object.defineProperty(ik,"__esModule",{value:!0});ik.default=aY;var iY=qa();function aY(e){return typeof(e==null?void 0:e[iY.SYMBOL_ASYNC_ITERATOR])=="function"}});var FR=G(ak=>{"use strict";Object.defineProperty(ak,"__esModule",{value:!0});ak.default=uY;var RR=qa();function oY(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function uY(e,t,r){var n=e[RR.SYMBOL_ASYNC_ITERATOR],i=n.call(e),o,s;typeof i.return=="function"&&(o=i.return,s=function(y){var b=function(){return Promise.reject(y)};return o.call(i).then(b,b)});function l(v){return v.done?v:jR(v.value,t).then(PR,s)}var d;if(r){var h=r;d=function(y){return jR(y,h).then(PR,s)}}return oY({next:function(){return i.next().then(l,d)},return:function(){return o?o.call(i).then(l,d):Promise.resolve({value:void 0,done:!0})},throw:function(y){return typeof i.throw=="function"?i.throw(y).then(l,d):Promise.reject(y).catch(s)}},RR.SYMBOL_ASYNC_ITERATOR,function(){return this})}function jR(e,t){return new Promise(function(r){return r(t(e))})}function PR(e){return{value:e,done:!1}}});var BR=G(ym=>{"use strict";Object.defineProperty(ym,"__esModule",{value:!0});ym.subscribe=dY;ym.createSourceEventStream=QR;var sY=uk(jt()),MR=uk(AR()),ok=up(),qR=Je(),VR=qd(),lY=pp(),Sc=mp(),cY=um(),fY=uk(FR());function uk(e){return e&&e.__esModule?e:{default:e}}function dY(e,t,r,n,i,o,s,l){return arguments.length===1?GR(e):GR({schema:e,document:t,rootValue:r,contextValue:n,variableValues:i,operationName:o,fieldResolver:s,subscribeFieldResolver:l})}function UR(e){if(e instanceof qR.GraphQLError)return{errors:[e]};throw e}function GR(e){var t=e.schema,r=e.document,n=e.rootValue,i=e.contextValue,o=e.variableValues,s=e.operationName,l=e.fieldResolver,d=e.subscribeFieldResolver,h=QR(t,r,n,i,o,s,d),v=function(b){return(0,Sc.execute)({schema:t,document:r,rootValue:b,contextValue:i,variableValues:o,operationName:s,fieldResolver:l})};return h.then(function(y){return(0,MR.default)(y)?(0,fY.default)(y,v,UR):y})}function QR(e,t,r,n,i,o,s){return(0,Sc.assertValidExecutionArguments)(e,t,i),new Promise(function(l){var d=(0,Sc.buildExecutionContext)(e,t,r,n,i,o,s);l(Array.isArray(d)?{errors:d}:pY(d))}).catch(UR)}function pY(e){var t=e.schema,r=e.operation,n=e.variableValues,i=e.rootValue,o=(0,cY.getOperationRootType)(t,r),s=(0,Sc.collectFields)(e,o,r.selectionSet,Object.create(null),Object.create(null)),l=Object.keys(s),d=l[0],h=s[d],v=h[0],y=v.name.value,b=(0,Sc.getFieldDef)(t,o,y);if(!b)throw new qR.GraphQLError('The subscription field "'.concat(y,'" is not defined.'),h);var D=(0,ok.addPath)(void 0,d,o.name),_=(0,Sc.buildResolveInfo)(e,b,h,o,D);return new Promise(function(k){var T,S=(0,lY.getArgumentValues)(b,h[0],n),m=e.contextValue,w=(T=b.subscribe)!==null&&T!==void 0?T:e.fieldResolver;k(w(i,S,m,_))}).then(function(k){if(k instanceof Error)throw(0,VR.locatedError)(k,h,(0,ok.pathToArray)(D));if(!(0,MR.default)(k))throw new Error("Subscription field must return Async Iterable. "+"Received: ".concat((0,sY.default)(k),"."));return k},function(k){throw(0,VR.locatedError)(k,h,(0,ok.pathToArray)(D))})}});var HR=G(bm=>{"use strict";Object.defineProperty(bm,"__esModule",{value:!0});Object.defineProperty(bm,"subscribe",{enumerable:!0,get:function(){return KR.subscribe}});Object.defineProperty(bm,"createSourceEventStream",{enumerable:!0,get:function(){return KR.createSourceEventStream}});var KR=BR()});var fk=G(ck=>{"use strict";Object.defineProperty(ck,"__esModule",{value:!0});ck.NoDeprecatedCustomRule=vY;var sk=hY(_n()),yp=Je(),lk=bt();function hY(e){return e&&e.__esModule?e:{default:e}}function vY(e){return{Field:function(r){var n=e.getFieldDef(),i=n==null?void 0:n.deprecationReason;if(n&&i!=null){var o=e.getParentType();o!=null||(0,sk.default)(0),e.reportError(new yp.GraphQLError("The field ".concat(o.name,".").concat(n.name," is deprecated. ").concat(i),r))}},Argument:function(r){var n=e.getArgument(),i=n==null?void 0:n.deprecationReason;if(n&&i!=null){var o=e.getDirective();if(o!=null)e.reportError(new yp.GraphQLError('Directive "@'.concat(o.name,'" argument "').concat(n.name,'" is deprecated. ').concat(i),r));else{var s=e.getParentType(),l=e.getFieldDef();s!=null&&l!=null||(0,sk.default)(0),e.reportError(new yp.GraphQLError('Field "'.concat(s.name,".").concat(l.name,'" argument "').concat(n.name,'" is deprecated. ').concat(i),r))}}},ObjectField:function(r){var n=(0,lk.getNamedType)(e.getParentInputType());if((0,lk.isInputObjectType)(n)){var i=n.getFields()[r.name.value],o=i==null?void 0:i.deprecationReason;o!=null&&e.reportError(new yp.GraphQLError("The input field ".concat(n.name,".").concat(i.name," is deprecated. ").concat(o),r))}},EnumValue:function(r){var n=e.getEnumValue(),i=n==null?void 0:n.deprecationReason;if(n&&i!=null){var o=(0,lk.getNamedType)(e.getInputType());o!=null||(0,sk.default)(0),e.reportError(new yp.GraphQLError('The enum value "'.concat(o.name,".").concat(n.name,'" is deprecated. ').concat(i),r))}}}}});var zR=G(dk=>{"use strict";Object.defineProperty(dk,"__esModule",{value:!0});dk.NoSchemaIntrospectionCustomRule=bY;var gY=Je(),mY=bt(),yY=vi();function bY(e){return{Field:function(r){var n=(0,mY.getNamedType)(e.getType());n&&(0,yY.isIntrospectionType)(n)&&e.reportError(new gY.GraphQLError('GraphQL introspection has been disabled, but the requested query contained the field "'.concat(r.name.value,'".'),r))}}}});var WR=G(ft=>{"use strict";Object.defineProperty(ft,"__esModule",{value:!0});Object.defineProperty(ft,"validate",{enumerable:!0,get:function(){return TY.validate}});Object.defineProperty(ft,"ValidationContext",{enumerable:!0,get:function(){return _Y.ValidationContext}});Object.defineProperty(ft,"specifiedRules",{enumerable:!0,get:function(){return EY.specifiedRules}});Object.defineProperty(ft,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return SY.ExecutableDefinitionsRule}});Object.defineProperty(ft,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return kY.FieldsOnCorrectTypeRule}});Object.defineProperty(ft,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return OY.FragmentsOnCompositeTypesRule}});Object.defineProperty(ft,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return wY.KnownArgumentNamesRule}});Object.defineProperty(ft,"KnownDirectivesRule",{enumerable:!0,get:function(){return NY.KnownDirectivesRule}});Object.defineProperty(ft,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return DY.KnownFragmentNamesRule}});Object.defineProperty(ft,"KnownTypeNamesRule",{enumerable:!0,get:function(){return xY.KnownTypeNamesRule}});Object.defineProperty(ft,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return CY.LoneAnonymousOperationRule}});Object.defineProperty(ft,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return LY.NoFragmentCyclesRule}});Object.defineProperty(ft,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return IY.NoUndefinedVariablesRule}});Object.defineProperty(ft,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return AY.NoUnusedFragmentsRule}});Object.defineProperty(ft,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return RY.NoUnusedVariablesRule}});Object.defineProperty(ft,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return jY.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(ft,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return PY.PossibleFragmentSpreadsRule}});Object.defineProperty(ft,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return FY.ProvidedRequiredArgumentsRule}});Object.defineProperty(ft,"ScalarLeafsRule",{enumerable:!0,get:function(){return MY.ScalarLeafsRule}});Object.defineProperty(ft,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return qY.SingleFieldSubscriptionsRule}});Object.defineProperty(ft,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return VY.UniqueArgumentNamesRule}});Object.defineProperty(ft,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return UY.UniqueDirectivesPerLocationRule}});Object.defineProperty(ft,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return GY.UniqueFragmentNamesRule}});Object.defineProperty(ft,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return QY.UniqueInputFieldNamesRule}});Object.defineProperty(ft,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return BY.UniqueOperationNamesRule}});Object.defineProperty(ft,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return KY.UniqueVariableNamesRule}});Object.defineProperty(ft,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return HY.ValuesOfCorrectTypeRule}});Object.defineProperty(ft,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return zY.VariablesAreInputTypesRule}});Object.defineProperty(ft,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return WY.VariablesInAllowedPositionRule}});Object.defineProperty(ft,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return YY.LoneSchemaDefinitionRule}});Object.defineProperty(ft,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return JY.UniqueOperationTypesRule}});Object.defineProperty(ft,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return XY.UniqueTypeNamesRule}});Object.defineProperty(ft,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return ZY.UniqueEnumValueNamesRule}});Object.defineProperty(ft,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return $Y.UniqueFieldDefinitionNamesRule}});Object.defineProperty(ft,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return e7.UniqueDirectiveNamesRule}});Object.defineProperty(ft,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return t7.PossibleTypeExtensionsRule}});Object.defineProperty(ft,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return r7.NoDeprecatedCustomRule}});Object.defineProperty(ft,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return n7.NoSchemaIntrospectionCustomRule}});var TY=mc(),_Y=US(),EY=qS(),SY=TE(),kY=FE(),OY=LE(),wY=oS(),NY=rS(),DY=UE(),xY=xE(),CY=kE(),LY=WE(),IY=ZE(),AY=QE(),RY=eS(),jY=_S(),PY=HE(),FY=dS(),MY=jE(),qY=wE(),VY=sS(),UY=aS(),GY=qE(),QY=SS(),BY=EE(),KY=JE(),HY=cS(),zY=AE(),WY=hS(),YY=OS(),JY=NS(),XY=xS(),ZY=LS(),$Y=RS(),e7=PS(),t7=MS(),r7=fk(),n7=zR()});var YR=G(pk=>{"use strict";Object.defineProperty(pk,"__esModule",{value:!0});pk.formatError=o7;var i7=a7(Hi());function a7(e){return e&&e.__esModule?e:{default:e}}function o7(e){var t;e||(0,i7.default)(0,"Received null or undefined error.");var r=(t=e.message)!==null&&t!==void 0?t:"An unknown error occurred.",n=e.locations,i=e.path,o=e.extensions;return o?{message:r,locations:n,path:i,extensions:o}:{message:r,locations:n,path:i}}});var XR=G(As=>{"use strict";Object.defineProperty(As,"__esModule",{value:!0});Object.defineProperty(As,"GraphQLError",{enumerable:!0,get:function(){return JR.GraphQLError}});Object.defineProperty(As,"printError",{enumerable:!0,get:function(){return JR.printError}});Object.defineProperty(As,"syntaxError",{enumerable:!0,get:function(){return u7.syntaxError}});Object.defineProperty(As,"locatedError",{enumerable:!0,get:function(){return s7.locatedError}});Object.defineProperty(As,"formatError",{enumerable:!0,get:function(){return l7.formatError}});var JR=Je(),u7=lg(),s7=qd(),l7=YR()});var vk=G(hk=>{"use strict";Object.defineProperty(hk,"__esModule",{value:!0});hk.getIntrospectionQuery=d7;function ZR(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function c7(e){for(var t=1;t{"use strict";Object.defineProperty(gk,"__esModule",{value:!0});gk.getOperationAST=h7;var p7=Jt();function h7(e,t){for(var r=null,n=0,i=e.definitions;n{"use strict";Object.defineProperty(yk,"__esModule",{value:!0});yk.introspectionFromSchema=E7;var v7=b7(_n()),g7=tc(),m7=mp(),y7=vk();function b7(e){return e&&e.__esModule?e:{default:e}}function $R(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function T7(e){for(var t=1;t{"use strict";Object.defineProperty(bk,"__esModule",{value:!0});bk.buildClientSchema=C7;var S7=bp(Ni()),Ci=bp(jt()),k7=bp(Hi()),Tm=bp(Vd()),tj=bp(Ma()),O7=tc(),w7=ks(),N7=gi(),D7=Ga(),za=vi(),Li=bt(),x7=lp();function bp(e){return e&&e.__esModule?e:{default:e}}function C7(e,t){(0,tj.default)(e)&&(0,tj.default)(e.__schema)||(0,k7.default)(0,'Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: '.concat((0,Ci.default)(e),"."));for(var r=e.__schema,n=(0,Tm.default)(r.types,function(Q){return Q.name},function(Q){return k(Q)}),i=0,o=[].concat(D7.specifiedScalarTypes,za.introspectionTypes);i{"use strict";Object.defineProperty(_p,"__esModule",{value:!0});_p.extendSchema=M7;_p.extendSchemaImpl=dj;_p.getDescription=Rs;var L7=kc(Ni()),I7=kc(vu()),nj=kc(jt()),Tp=kc(w_()),ij=kc(_n()),A7=kc(Hi()),Ji=Jt(),R7=Zl(),j7=ec(),aj=ws(),P7=mc(),oj=pp(),uj=ks(),sj=Ga(),lj=vi(),_m=gi(),pr=bt(),cj=lp();function kc(e){return e&&e.__esModule?e:{default:e}}function fj(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function xt(e){for(var t=1;t0?r.reverse().join(` -`):void 0}}});var mj=G(Sm=>{"use strict";Object.defineProperty(Sm,"__esModule",{value:!0});Sm.buildASTSchema=gj;Sm.buildSchema=z7;var V7=H7(Hi()),U7=Jt(),G7=tc(),Q7=mc(),B7=ks(),vj=gi(),K7=Tk();function H7(e){return e&&e.__esModule?e:{default:e}}function gj(e,t){e!=null&&e.kind===U7.Kind.DOCUMENT||(0,V7.default)(0,"Must provide valid Document AST."),(t==null?void 0:t.assumeValid)!==!0&&(t==null?void 0:t.assumeValidSDL)!==!0&&(0,Q7.assertValidSDL)(e);var r={description:void 0,types:[],directives:[],extensions:void 0,extensionASTNodes:[],assumeValid:!1},n=(0,K7.extendSchemaImpl)(r,e,t);if(n.astNode==null)for(var i=0,o=n.types;i{"use strict";Object.defineProperty(Sk,"__esModule",{value:!0});Sk.lexicographicSortSchema=nJ;var W7=Ep(Ni()),Y7=Ep(jt()),J7=Ep(_n()),X7=Ep(Vd()),Z7=Ep(Ud()),$7=ks(),eJ=gi(),tJ=vi(),ri=bt();function Ep(e){return e&&e.__esModule?e:{default:e}}function yj(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Mr(e){for(var t=1;t{"use strict";Object.defineProperty(Sp,"__esModule",{value:!0});Sp.printSchema=oJ;Sp.printIntrospectionSchema=uJ;Sp.printType=Sj;var kk=xk(Ni()),iJ=xk(jt()),Tj=xk(_n()),Ok=hi(),aJ=ec(),_j=vi(),wk=Ga(),Nk=gi(),Oc=bt(),Dk=Zd();function xk(e){return e&&e.__esModule?e:{default:e}}function oJ(e,t){return Ej(e,function(r){return!(0,Nk.isSpecifiedDirective)(r)},sJ,t)}function uJ(e,t){return Ej(e,Nk.isSpecifiedDirective,_j.isIntrospectionType,t)}function sJ(e){return!(0,wk.isSpecifiedScalarType)(e)&&!(0,_j.isIntrospectionType)(e)}function Ej(e,t,r,n){var i=e.getDirectives().filter(t),o=(0,kk.default)(e.getTypeMap()).filter(r);return[lJ(e)].concat(i.map(function(s){return mJ(s,n)}),o.map(function(s){return Sj(s,n)})).filter(Boolean).join(` - -`)+` -`}function lJ(e){if(!(e.description==null&&cJ(e))){var t=[],r=e.getQueryType();r&&t.push(" query: ".concat(r.name));var n=e.getMutationType();n&&t.push(" mutation: ".concat(n.name));var i=e.getSubscriptionType();return i&&t.push(" subscription: ".concat(i.name)),Xi({},e)+`schema { -`.concat(t.join(` -`),` -}`)}}function cJ(e){var t=e.getQueryType();if(t&&t.name!=="Query")return!1;var r=e.getMutationType();if(r&&r.name!=="Mutation")return!1;var n=e.getSubscriptionType();return!(n&&n.name!=="Subscription")}function Sj(e,t){if((0,Oc.isScalarType)(e))return fJ(e,t);if((0,Oc.isObjectType)(e))return dJ(e,t);if((0,Oc.isInterfaceType)(e))return pJ(e,t);if((0,Oc.isUnionType)(e))return hJ(e,t);if((0,Oc.isEnumType)(e))return vJ(e,t);if((0,Oc.isInputObjectType)(e))return gJ(e,t);(0,Tj.default)(0,"Unexpected type: "+(0,iJ.default)(e))}function fJ(e,t){return Xi(t,e)+"scalar ".concat(e.name)+yJ(e)}function kj(e){var t=e.getInterfaces();return t.length?" implements "+t.map(function(r){return r.name}).join(" & "):""}function dJ(e,t){return Xi(t,e)+"type ".concat(e.name)+kj(e)+Oj(t,e)}function pJ(e,t){return Xi(t,e)+"interface ".concat(e.name)+kj(e)+Oj(t,e)}function hJ(e,t){var r=e.getTypes(),n=r.length?" = "+r.join(" | "):"";return Xi(t,e)+"union "+e.name+n}function vJ(e,t){var r=e.getValues().map(function(n,i){return Xi(t,n," ",!i)+" "+n.name+Ik(n.deprecationReason)});return Xi(t,e)+"enum ".concat(e.name)+Ck(r)}function gJ(e,t){var r=(0,kk.default)(e.getFields()).map(function(n,i){return Xi(t,n," ",!i)+" "+Lk(n)});return Xi(t,e)+"input ".concat(e.name)+Ck(r)}function Oj(e,t){var r=(0,kk.default)(t.getFields()).map(function(n,i){return Xi(e,n," ",!i)+" "+n.name+wj(e,n.args," ")+": "+String(n.type)+Ik(n.deprecationReason)});return Ck(r)}function Ck(e){return e.length!==0?` { -`+e.join(` -`)+` -}`:""}function wj(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"";return t.length===0?"":t.every(function(n){return!n.description})?"("+t.map(Lk).join(", ")+")":`( -`+t.map(function(n,i){return Xi(e,n," "+r,!i)+" "+r+Lk(n)}).join(` -`)+` -`+r+")"}function Lk(e){var t=(0,Dk.astFromValue)(e.defaultValue,e.type),r=e.name+": "+String(e.type);return t&&(r+=" = ".concat((0,Ok.print)(t))),r+Ik(e.deprecationReason)}function mJ(e,t){return Xi(t,e)+"directive @"+e.name+wj(t,e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}function Ik(e){if(e==null)return"";var t=(0,Dk.astFromValue)(e,wk.GraphQLString);return t&&e!==Nk.DEFAULT_DEPRECATION_REASON?" @deprecated(reason: "+(0,Ok.print)(t)+")":" @deprecated"}function yJ(e){if(e.specifiedByUrl==null)return"";var t=e.specifiedByUrl,r=(0,Dk.astFromValue)(t,wk.GraphQLString);return r||(0,Tj.default)(0,"Unexpected null value returned from `astFromValue` for specifiedByUrl")," @specifiedBy(url: "+(0,Ok.print)(r)+")"}function Xi(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"",n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=t.description;if(i==null)return"";if((e==null?void 0:e.commentDescriptions)===!0)return bJ(i,r,n);var o=i.length>70,s=(0,aJ.printBlockString)(i,"",o),l=r&&!n?` -`+r:r;return l+s.replace(/\n/g,` -`+r)+` -`}function bJ(e,t,r){var n=t&&!r?` -`:"",i=e.split(` -`).map(function(o){return t+(o!==""?"# "+o:"#")}).join(` -`);return n+i+` -`}});var Dj=G(Ak=>{"use strict";Object.defineProperty(Ak,"__esModule",{value:!0});Ak.concatAST=TJ;function TJ(e){for(var t=[],r=0;r{"use strict";Object.defineProperty(Rk,"__esModule",{value:!0});Rk.separateOperations=EJ;var Om=Jt(),_J=hu();function EJ(e){for(var t=[],r=Object.create(null),n=0,i=e.definitions;n{"use strict";Object.defineProperty(Pk,"__esModule",{value:!0});Pk.stripIgnoredCharacters=SJ;var Ij=mg(),jk=Zl(),Aj=Tg(),Rj=ec();function SJ(e){for(var t=(0,Ij.isSource)(e)?e:new Ij.Source(e),r=t.body,n=new Aj.Lexer(t),i="",o=!1;n.advance().kind!==jk.TokenKind.EOF;){var s=n.token,l=s.kind,d=!(0,Aj.isPunctuatorTokenKind)(s.kind);o&&(d||s.kind===jk.TokenKind.SPREAD)&&(i+=" ");var h=r.slice(s.start,s.end);l===jk.TokenKind.BLOCK_STRING?i+=kJ(h):i+=h,o=d}return i}function kJ(e){var t=e.slice(3,-3),r=(0,Rj.dedentBlockStringValue)(t);(0,Rj.getBlockStringIndentation)(r)>0&&(r=` -`+r);var n=r[r.length-1],i=n==='"'&&r.slice(-4)!=='\\"""';return(i||n==="\\")&&(r+=` -`),'"""'+r+'"""'}});var Kj=G(xu=>{"use strict";Object.defineProperty(xu,"__esModule",{value:!0});xu.findBreakingChanges=IJ;xu.findDangerousChanges=AJ;xu.DangerousChangeType=xu.BreakingChangeType=void 0;var wc=kp(Ni()),Pj=kp(vu()),OJ=kp(jt()),Fj=kp(_n()),wJ=kp(Ud()),NJ=hi(),DJ=hu(),xJ=Ga(),Ct=bt(),CJ=Zd();function kp(e){return e&&e.__esModule?e:{default:e}}function Mj(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function qj(e){for(var t=1;t{"use strict";Object.defineProperty(Fk,"__esModule",{value:!0});Fk.findDeprecatedUsages=GJ;var VJ=mc(),UJ=fk();function GJ(e,t){return(0,VJ.validate)(e,t,[UJ.NoDeprecatedCustomRule])}});var Xj=G(yt=>{"use strict";Object.defineProperty(yt,"__esModule",{value:!0});Object.defineProperty(yt,"getIntrospectionQuery",{enumerable:!0,get:function(){return QJ.getIntrospectionQuery}});Object.defineProperty(yt,"getOperationAST",{enumerable:!0,get:function(){return BJ.getOperationAST}});Object.defineProperty(yt,"getOperationRootType",{enumerable:!0,get:function(){return KJ.getOperationRootType}});Object.defineProperty(yt,"introspectionFromSchema",{enumerable:!0,get:function(){return HJ.introspectionFromSchema}});Object.defineProperty(yt,"buildClientSchema",{enumerable:!0,get:function(){return zJ.buildClientSchema}});Object.defineProperty(yt,"buildASTSchema",{enumerable:!0,get:function(){return zj.buildASTSchema}});Object.defineProperty(yt,"buildSchema",{enumerable:!0,get:function(){return zj.buildSchema}});Object.defineProperty(yt,"extendSchema",{enumerable:!0,get:function(){return Wj.extendSchema}});Object.defineProperty(yt,"getDescription",{enumerable:!0,get:function(){return Wj.getDescription}});Object.defineProperty(yt,"lexicographicSortSchema",{enumerable:!0,get:function(){return WJ.lexicographicSortSchema}});Object.defineProperty(yt,"printSchema",{enumerable:!0,get:function(){return Mk.printSchema}});Object.defineProperty(yt,"printType",{enumerable:!0,get:function(){return Mk.printType}});Object.defineProperty(yt,"printIntrospectionSchema",{enumerable:!0,get:function(){return Mk.printIntrospectionSchema}});Object.defineProperty(yt,"typeFromAST",{enumerable:!0,get:function(){return YJ.typeFromAST}});Object.defineProperty(yt,"valueFromAST",{enumerable:!0,get:function(){return JJ.valueFromAST}});Object.defineProperty(yt,"valueFromASTUntyped",{enumerable:!0,get:function(){return XJ.valueFromASTUntyped}});Object.defineProperty(yt,"astFromValue",{enumerable:!0,get:function(){return ZJ.astFromValue}});Object.defineProperty(yt,"TypeInfo",{enumerable:!0,get:function(){return Yj.TypeInfo}});Object.defineProperty(yt,"visitWithTypeInfo",{enumerable:!0,get:function(){return Yj.visitWithTypeInfo}});Object.defineProperty(yt,"coerceInputValue",{enumerable:!0,get:function(){return $J.coerceInputValue}});Object.defineProperty(yt,"concatAST",{enumerable:!0,get:function(){return eX.concatAST}});Object.defineProperty(yt,"separateOperations",{enumerable:!0,get:function(){return tX.separateOperations}});Object.defineProperty(yt,"stripIgnoredCharacters",{enumerable:!0,get:function(){return rX.stripIgnoredCharacters}});Object.defineProperty(yt,"isEqualType",{enumerable:!0,get:function(){return qk.isEqualType}});Object.defineProperty(yt,"isTypeSubTypeOf",{enumerable:!0,get:function(){return qk.isTypeSubTypeOf}});Object.defineProperty(yt,"doTypesOverlap",{enumerable:!0,get:function(){return qk.doTypesOverlap}});Object.defineProperty(yt,"assertValidName",{enumerable:!0,get:function(){return Jj.assertValidName}});Object.defineProperty(yt,"isValidNameError",{enumerable:!0,get:function(){return Jj.isValidNameError}});Object.defineProperty(yt,"BreakingChangeType",{enumerable:!0,get:function(){return wm.BreakingChangeType}});Object.defineProperty(yt,"DangerousChangeType",{enumerable:!0,get:function(){return wm.DangerousChangeType}});Object.defineProperty(yt,"findBreakingChanges",{enumerable:!0,get:function(){return wm.findBreakingChanges}});Object.defineProperty(yt,"findDangerousChanges",{enumerable:!0,get:function(){return wm.findDangerousChanges}});Object.defineProperty(yt,"findDeprecatedUsages",{enumerable:!0,get:function(){return nX.findDeprecatedUsages}});var QJ=vk(),BJ=mk(),KJ=um(),HJ=ej(),zJ=rj(),zj=mj(),Wj=Tk(),WJ=bj(),Mk=Nj(),YJ=Qa(),JJ=lp(),XJ=M_(),ZJ=Zd(),Yj=zg(),$J=XS(),eX=Dj(),tX=Lj(),rX=jj(),qk=Hd(),Jj=S_(),wm=Kj(),nX=Hj()});var ht=G(Z=>{"use strict";Object.defineProperty(Z,"__esModule",{value:!0});Object.defineProperty(Z,"version",{enumerable:!0,get:function(){return Zj.version}});Object.defineProperty(Z,"versionInfo",{enumerable:!0,get:function(){return Zj.versionInfo}});Object.defineProperty(Z,"graphql",{enumerable:!0,get:function(){return $j.graphql}});Object.defineProperty(Z,"graphqlSync",{enumerable:!0,get:function(){return $j.graphqlSync}});Object.defineProperty(Z,"GraphQLSchema",{enumerable:!0,get:function(){return Oe.GraphQLSchema}});Object.defineProperty(Z,"GraphQLDirective",{enumerable:!0,get:function(){return Oe.GraphQLDirective}});Object.defineProperty(Z,"GraphQLScalarType",{enumerable:!0,get:function(){return Oe.GraphQLScalarType}});Object.defineProperty(Z,"GraphQLObjectType",{enumerable:!0,get:function(){return Oe.GraphQLObjectType}});Object.defineProperty(Z,"GraphQLInterfaceType",{enumerable:!0,get:function(){return Oe.GraphQLInterfaceType}});Object.defineProperty(Z,"GraphQLUnionType",{enumerable:!0,get:function(){return Oe.GraphQLUnionType}});Object.defineProperty(Z,"GraphQLEnumType",{enumerable:!0,get:function(){return Oe.GraphQLEnumType}});Object.defineProperty(Z,"GraphQLInputObjectType",{enumerable:!0,get:function(){return Oe.GraphQLInputObjectType}});Object.defineProperty(Z,"GraphQLList",{enumerable:!0,get:function(){return Oe.GraphQLList}});Object.defineProperty(Z,"GraphQLNonNull",{enumerable:!0,get:function(){return Oe.GraphQLNonNull}});Object.defineProperty(Z,"specifiedScalarTypes",{enumerable:!0,get:function(){return Oe.specifiedScalarTypes}});Object.defineProperty(Z,"GraphQLInt",{enumerable:!0,get:function(){return Oe.GraphQLInt}});Object.defineProperty(Z,"GraphQLFloat",{enumerable:!0,get:function(){return Oe.GraphQLFloat}});Object.defineProperty(Z,"GraphQLString",{enumerable:!0,get:function(){return Oe.GraphQLString}});Object.defineProperty(Z,"GraphQLBoolean",{enumerable:!0,get:function(){return Oe.GraphQLBoolean}});Object.defineProperty(Z,"GraphQLID",{enumerable:!0,get:function(){return Oe.GraphQLID}});Object.defineProperty(Z,"specifiedDirectives",{enumerable:!0,get:function(){return Oe.specifiedDirectives}});Object.defineProperty(Z,"GraphQLIncludeDirective",{enumerable:!0,get:function(){return Oe.GraphQLIncludeDirective}});Object.defineProperty(Z,"GraphQLSkipDirective",{enumerable:!0,get:function(){return Oe.GraphQLSkipDirective}});Object.defineProperty(Z,"GraphQLDeprecatedDirective",{enumerable:!0,get:function(){return Oe.GraphQLDeprecatedDirective}});Object.defineProperty(Z,"GraphQLSpecifiedByDirective",{enumerable:!0,get:function(){return Oe.GraphQLSpecifiedByDirective}});Object.defineProperty(Z,"TypeKind",{enumerable:!0,get:function(){return Oe.TypeKind}});Object.defineProperty(Z,"DEFAULT_DEPRECATION_REASON",{enumerable:!0,get:function(){return Oe.DEFAULT_DEPRECATION_REASON}});Object.defineProperty(Z,"introspectionTypes",{enumerable:!0,get:function(){return Oe.introspectionTypes}});Object.defineProperty(Z,"__Schema",{enumerable:!0,get:function(){return Oe.__Schema}});Object.defineProperty(Z,"__Directive",{enumerable:!0,get:function(){return Oe.__Directive}});Object.defineProperty(Z,"__DirectiveLocation",{enumerable:!0,get:function(){return Oe.__DirectiveLocation}});Object.defineProperty(Z,"__Type",{enumerable:!0,get:function(){return Oe.__Type}});Object.defineProperty(Z,"__Field",{enumerable:!0,get:function(){return Oe.__Field}});Object.defineProperty(Z,"__InputValue",{enumerable:!0,get:function(){return Oe.__InputValue}});Object.defineProperty(Z,"__EnumValue",{enumerable:!0,get:function(){return Oe.__EnumValue}});Object.defineProperty(Z,"__TypeKind",{enumerable:!0,get:function(){return Oe.__TypeKind}});Object.defineProperty(Z,"SchemaMetaFieldDef",{enumerable:!0,get:function(){return Oe.SchemaMetaFieldDef}});Object.defineProperty(Z,"TypeMetaFieldDef",{enumerable:!0,get:function(){return Oe.TypeMetaFieldDef}});Object.defineProperty(Z,"TypeNameMetaFieldDef",{enumerable:!0,get:function(){return Oe.TypeNameMetaFieldDef}});Object.defineProperty(Z,"isSchema",{enumerable:!0,get:function(){return Oe.isSchema}});Object.defineProperty(Z,"isDirective",{enumerable:!0,get:function(){return Oe.isDirective}});Object.defineProperty(Z,"isType",{enumerable:!0,get:function(){return Oe.isType}});Object.defineProperty(Z,"isScalarType",{enumerable:!0,get:function(){return Oe.isScalarType}});Object.defineProperty(Z,"isObjectType",{enumerable:!0,get:function(){return Oe.isObjectType}});Object.defineProperty(Z,"isInterfaceType",{enumerable:!0,get:function(){return Oe.isInterfaceType}});Object.defineProperty(Z,"isUnionType",{enumerable:!0,get:function(){return Oe.isUnionType}});Object.defineProperty(Z,"isEnumType",{enumerable:!0,get:function(){return Oe.isEnumType}});Object.defineProperty(Z,"isInputObjectType",{enumerable:!0,get:function(){return Oe.isInputObjectType}});Object.defineProperty(Z,"isListType",{enumerable:!0,get:function(){return Oe.isListType}});Object.defineProperty(Z,"isNonNullType",{enumerable:!0,get:function(){return Oe.isNonNullType}});Object.defineProperty(Z,"isInputType",{enumerable:!0,get:function(){return Oe.isInputType}});Object.defineProperty(Z,"isOutputType",{enumerable:!0,get:function(){return Oe.isOutputType}});Object.defineProperty(Z,"isLeafType",{enumerable:!0,get:function(){return Oe.isLeafType}});Object.defineProperty(Z,"isCompositeType",{enumerable:!0,get:function(){return Oe.isCompositeType}});Object.defineProperty(Z,"isAbstractType",{enumerable:!0,get:function(){return Oe.isAbstractType}});Object.defineProperty(Z,"isWrappingType",{enumerable:!0,get:function(){return Oe.isWrappingType}});Object.defineProperty(Z,"isNullableType",{enumerable:!0,get:function(){return Oe.isNullableType}});Object.defineProperty(Z,"isNamedType",{enumerable:!0,get:function(){return Oe.isNamedType}});Object.defineProperty(Z,"isRequiredArgument",{enumerable:!0,get:function(){return Oe.isRequiredArgument}});Object.defineProperty(Z,"isRequiredInputField",{enumerable:!0,get:function(){return Oe.isRequiredInputField}});Object.defineProperty(Z,"isSpecifiedScalarType",{enumerable:!0,get:function(){return Oe.isSpecifiedScalarType}});Object.defineProperty(Z,"isIntrospectionType",{enumerable:!0,get:function(){return Oe.isIntrospectionType}});Object.defineProperty(Z,"isSpecifiedDirective",{enumerable:!0,get:function(){return Oe.isSpecifiedDirective}});Object.defineProperty(Z,"assertSchema",{enumerable:!0,get:function(){return Oe.assertSchema}});Object.defineProperty(Z,"assertDirective",{enumerable:!0,get:function(){return Oe.assertDirective}});Object.defineProperty(Z,"assertType",{enumerable:!0,get:function(){return Oe.assertType}});Object.defineProperty(Z,"assertScalarType",{enumerable:!0,get:function(){return Oe.assertScalarType}});Object.defineProperty(Z,"assertObjectType",{enumerable:!0,get:function(){return Oe.assertObjectType}});Object.defineProperty(Z,"assertInterfaceType",{enumerable:!0,get:function(){return Oe.assertInterfaceType}});Object.defineProperty(Z,"assertUnionType",{enumerable:!0,get:function(){return Oe.assertUnionType}});Object.defineProperty(Z,"assertEnumType",{enumerable:!0,get:function(){return Oe.assertEnumType}});Object.defineProperty(Z,"assertInputObjectType",{enumerable:!0,get:function(){return Oe.assertInputObjectType}});Object.defineProperty(Z,"assertListType",{enumerable:!0,get:function(){return Oe.assertListType}});Object.defineProperty(Z,"assertNonNullType",{enumerable:!0,get:function(){return Oe.assertNonNullType}});Object.defineProperty(Z,"assertInputType",{enumerable:!0,get:function(){return Oe.assertInputType}});Object.defineProperty(Z,"assertOutputType",{enumerable:!0,get:function(){return Oe.assertOutputType}});Object.defineProperty(Z,"assertLeafType",{enumerable:!0,get:function(){return Oe.assertLeafType}});Object.defineProperty(Z,"assertCompositeType",{enumerable:!0,get:function(){return Oe.assertCompositeType}});Object.defineProperty(Z,"assertAbstractType",{enumerable:!0,get:function(){return Oe.assertAbstractType}});Object.defineProperty(Z,"assertWrappingType",{enumerable:!0,get:function(){return Oe.assertWrappingType}});Object.defineProperty(Z,"assertNullableType",{enumerable:!0,get:function(){return Oe.assertNullableType}});Object.defineProperty(Z,"assertNamedType",{enumerable:!0,get:function(){return Oe.assertNamedType}});Object.defineProperty(Z,"getNullableType",{enumerable:!0,get:function(){return Oe.getNullableType}});Object.defineProperty(Z,"getNamedType",{enumerable:!0,get:function(){return Oe.getNamedType}});Object.defineProperty(Z,"validateSchema",{enumerable:!0,get:function(){return Oe.validateSchema}});Object.defineProperty(Z,"assertValidSchema",{enumerable:!0,get:function(){return Oe.assertValidSchema}});Object.defineProperty(Z,"Token",{enumerable:!0,get:function(){return Xt.Token}});Object.defineProperty(Z,"Source",{enumerable:!0,get:function(){return Xt.Source}});Object.defineProperty(Z,"Location",{enumerable:!0,get:function(){return Xt.Location}});Object.defineProperty(Z,"getLocation",{enumerable:!0,get:function(){return Xt.getLocation}});Object.defineProperty(Z,"printLocation",{enumerable:!0,get:function(){return Xt.printLocation}});Object.defineProperty(Z,"printSourceLocation",{enumerable:!0,get:function(){return Xt.printSourceLocation}});Object.defineProperty(Z,"Lexer",{enumerable:!0,get:function(){return Xt.Lexer}});Object.defineProperty(Z,"TokenKind",{enumerable:!0,get:function(){return Xt.TokenKind}});Object.defineProperty(Z,"parse",{enumerable:!0,get:function(){return Xt.parse}});Object.defineProperty(Z,"parseValue",{enumerable:!0,get:function(){return Xt.parseValue}});Object.defineProperty(Z,"parseType",{enumerable:!0,get:function(){return Xt.parseType}});Object.defineProperty(Z,"print",{enumerable:!0,get:function(){return Xt.print}});Object.defineProperty(Z,"visit",{enumerable:!0,get:function(){return Xt.visit}});Object.defineProperty(Z,"visitInParallel",{enumerable:!0,get:function(){return Xt.visitInParallel}});Object.defineProperty(Z,"getVisitFn",{enumerable:!0,get:function(){return Xt.getVisitFn}});Object.defineProperty(Z,"BREAK",{enumerable:!0,get:function(){return Xt.BREAK}});Object.defineProperty(Z,"Kind",{enumerable:!0,get:function(){return Xt.Kind}});Object.defineProperty(Z,"DirectiveLocation",{enumerable:!0,get:function(){return Xt.DirectiveLocation}});Object.defineProperty(Z,"isDefinitionNode",{enumerable:!0,get:function(){return Xt.isDefinitionNode}});Object.defineProperty(Z,"isExecutableDefinitionNode",{enumerable:!0,get:function(){return Xt.isExecutableDefinitionNode}});Object.defineProperty(Z,"isSelectionNode",{enumerable:!0,get:function(){return Xt.isSelectionNode}});Object.defineProperty(Z,"isValueNode",{enumerable:!0,get:function(){return Xt.isValueNode}});Object.defineProperty(Z,"isTypeNode",{enumerable:!0,get:function(){return Xt.isTypeNode}});Object.defineProperty(Z,"isTypeSystemDefinitionNode",{enumerable:!0,get:function(){return Xt.isTypeSystemDefinitionNode}});Object.defineProperty(Z,"isTypeDefinitionNode",{enumerable:!0,get:function(){return Xt.isTypeDefinitionNode}});Object.defineProperty(Z,"isTypeSystemExtensionNode",{enumerable:!0,get:function(){return Xt.isTypeSystemExtensionNode}});Object.defineProperty(Z,"isTypeExtensionNode",{enumerable:!0,get:function(){return Xt.isTypeExtensionNode}});Object.defineProperty(Z,"execute",{enumerable:!0,get:function(){return Nc.execute}});Object.defineProperty(Z,"executeSync",{enumerable:!0,get:function(){return Nc.executeSync}});Object.defineProperty(Z,"defaultFieldResolver",{enumerable:!0,get:function(){return Nc.defaultFieldResolver}});Object.defineProperty(Z,"defaultTypeResolver",{enumerable:!0,get:function(){return Nc.defaultTypeResolver}});Object.defineProperty(Z,"responsePathAsArray",{enumerable:!0,get:function(){return Nc.responsePathAsArray}});Object.defineProperty(Z,"getDirectiveValues",{enumerable:!0,get:function(){return Nc.getDirectiveValues}});Object.defineProperty(Z,"subscribe",{enumerable:!0,get:function(){return eP.subscribe}});Object.defineProperty(Z,"createSourceEventStream",{enumerable:!0,get:function(){return eP.createSourceEventStream}});Object.defineProperty(Z,"validate",{enumerable:!0,get:function(){return pt.validate}});Object.defineProperty(Z,"ValidationContext",{enumerable:!0,get:function(){return pt.ValidationContext}});Object.defineProperty(Z,"specifiedRules",{enumerable:!0,get:function(){return pt.specifiedRules}});Object.defineProperty(Z,"ExecutableDefinitionsRule",{enumerable:!0,get:function(){return pt.ExecutableDefinitionsRule}});Object.defineProperty(Z,"FieldsOnCorrectTypeRule",{enumerable:!0,get:function(){return pt.FieldsOnCorrectTypeRule}});Object.defineProperty(Z,"FragmentsOnCompositeTypesRule",{enumerable:!0,get:function(){return pt.FragmentsOnCompositeTypesRule}});Object.defineProperty(Z,"KnownArgumentNamesRule",{enumerable:!0,get:function(){return pt.KnownArgumentNamesRule}});Object.defineProperty(Z,"KnownDirectivesRule",{enumerable:!0,get:function(){return pt.KnownDirectivesRule}});Object.defineProperty(Z,"KnownFragmentNamesRule",{enumerable:!0,get:function(){return pt.KnownFragmentNamesRule}});Object.defineProperty(Z,"KnownTypeNamesRule",{enumerable:!0,get:function(){return pt.KnownTypeNamesRule}});Object.defineProperty(Z,"LoneAnonymousOperationRule",{enumerable:!0,get:function(){return pt.LoneAnonymousOperationRule}});Object.defineProperty(Z,"NoFragmentCyclesRule",{enumerable:!0,get:function(){return pt.NoFragmentCyclesRule}});Object.defineProperty(Z,"NoUndefinedVariablesRule",{enumerable:!0,get:function(){return pt.NoUndefinedVariablesRule}});Object.defineProperty(Z,"NoUnusedFragmentsRule",{enumerable:!0,get:function(){return pt.NoUnusedFragmentsRule}});Object.defineProperty(Z,"NoUnusedVariablesRule",{enumerable:!0,get:function(){return pt.NoUnusedVariablesRule}});Object.defineProperty(Z,"OverlappingFieldsCanBeMergedRule",{enumerable:!0,get:function(){return pt.OverlappingFieldsCanBeMergedRule}});Object.defineProperty(Z,"PossibleFragmentSpreadsRule",{enumerable:!0,get:function(){return pt.PossibleFragmentSpreadsRule}});Object.defineProperty(Z,"ProvidedRequiredArgumentsRule",{enumerable:!0,get:function(){return pt.ProvidedRequiredArgumentsRule}});Object.defineProperty(Z,"ScalarLeafsRule",{enumerable:!0,get:function(){return pt.ScalarLeafsRule}});Object.defineProperty(Z,"SingleFieldSubscriptionsRule",{enumerable:!0,get:function(){return pt.SingleFieldSubscriptionsRule}});Object.defineProperty(Z,"UniqueArgumentNamesRule",{enumerable:!0,get:function(){return pt.UniqueArgumentNamesRule}});Object.defineProperty(Z,"UniqueDirectivesPerLocationRule",{enumerable:!0,get:function(){return pt.UniqueDirectivesPerLocationRule}});Object.defineProperty(Z,"UniqueFragmentNamesRule",{enumerable:!0,get:function(){return pt.UniqueFragmentNamesRule}});Object.defineProperty(Z,"UniqueInputFieldNamesRule",{enumerable:!0,get:function(){return pt.UniqueInputFieldNamesRule}});Object.defineProperty(Z,"UniqueOperationNamesRule",{enumerable:!0,get:function(){return pt.UniqueOperationNamesRule}});Object.defineProperty(Z,"UniqueVariableNamesRule",{enumerable:!0,get:function(){return pt.UniqueVariableNamesRule}});Object.defineProperty(Z,"ValuesOfCorrectTypeRule",{enumerable:!0,get:function(){return pt.ValuesOfCorrectTypeRule}});Object.defineProperty(Z,"VariablesAreInputTypesRule",{enumerable:!0,get:function(){return pt.VariablesAreInputTypesRule}});Object.defineProperty(Z,"VariablesInAllowedPositionRule",{enumerable:!0,get:function(){return pt.VariablesInAllowedPositionRule}});Object.defineProperty(Z,"LoneSchemaDefinitionRule",{enumerable:!0,get:function(){return pt.LoneSchemaDefinitionRule}});Object.defineProperty(Z,"UniqueOperationTypesRule",{enumerable:!0,get:function(){return pt.UniqueOperationTypesRule}});Object.defineProperty(Z,"UniqueTypeNamesRule",{enumerable:!0,get:function(){return pt.UniqueTypeNamesRule}});Object.defineProperty(Z,"UniqueEnumValueNamesRule",{enumerable:!0,get:function(){return pt.UniqueEnumValueNamesRule}});Object.defineProperty(Z,"UniqueFieldDefinitionNamesRule",{enumerable:!0,get:function(){return pt.UniqueFieldDefinitionNamesRule}});Object.defineProperty(Z,"UniqueDirectiveNamesRule",{enumerable:!0,get:function(){return pt.UniqueDirectiveNamesRule}});Object.defineProperty(Z,"PossibleTypeExtensionsRule",{enumerable:!0,get:function(){return pt.PossibleTypeExtensionsRule}});Object.defineProperty(Z,"NoDeprecatedCustomRule",{enumerable:!0,get:function(){return pt.NoDeprecatedCustomRule}});Object.defineProperty(Z,"NoSchemaIntrospectionCustomRule",{enumerable:!0,get:function(){return pt.NoSchemaIntrospectionCustomRule}});Object.defineProperty(Z,"GraphQLError",{enumerable:!0,get:function(){return Np.GraphQLError}});Object.defineProperty(Z,"syntaxError",{enumerable:!0,get:function(){return Np.syntaxError}});Object.defineProperty(Z,"locatedError",{enumerable:!0,get:function(){return Np.locatedError}});Object.defineProperty(Z,"printError",{enumerable:!0,get:function(){return Np.printError}});Object.defineProperty(Z,"formatError",{enumerable:!0,get:function(){return Np.formatError}});Object.defineProperty(Z,"getIntrospectionQuery",{enumerable:!0,get:function(){return St.getIntrospectionQuery}});Object.defineProperty(Z,"getOperationAST",{enumerable:!0,get:function(){return St.getOperationAST}});Object.defineProperty(Z,"getOperationRootType",{enumerable:!0,get:function(){return St.getOperationRootType}});Object.defineProperty(Z,"introspectionFromSchema",{enumerable:!0,get:function(){return St.introspectionFromSchema}});Object.defineProperty(Z,"buildClientSchema",{enumerable:!0,get:function(){return St.buildClientSchema}});Object.defineProperty(Z,"buildASTSchema",{enumerable:!0,get:function(){return St.buildASTSchema}});Object.defineProperty(Z,"buildSchema",{enumerable:!0,get:function(){return St.buildSchema}});Object.defineProperty(Z,"getDescription",{enumerable:!0,get:function(){return St.getDescription}});Object.defineProperty(Z,"extendSchema",{enumerable:!0,get:function(){return St.extendSchema}});Object.defineProperty(Z,"lexicographicSortSchema",{enumerable:!0,get:function(){return St.lexicographicSortSchema}});Object.defineProperty(Z,"printSchema",{enumerable:!0,get:function(){return St.printSchema}});Object.defineProperty(Z,"printType",{enumerable:!0,get:function(){return St.printType}});Object.defineProperty(Z,"printIntrospectionSchema",{enumerable:!0,get:function(){return St.printIntrospectionSchema}});Object.defineProperty(Z,"typeFromAST",{enumerable:!0,get:function(){return St.typeFromAST}});Object.defineProperty(Z,"valueFromAST",{enumerable:!0,get:function(){return St.valueFromAST}});Object.defineProperty(Z,"valueFromASTUntyped",{enumerable:!0,get:function(){return St.valueFromASTUntyped}});Object.defineProperty(Z,"astFromValue",{enumerable:!0,get:function(){return St.astFromValue}});Object.defineProperty(Z,"TypeInfo",{enumerable:!0,get:function(){return St.TypeInfo}});Object.defineProperty(Z,"visitWithTypeInfo",{enumerable:!0,get:function(){return St.visitWithTypeInfo}});Object.defineProperty(Z,"coerceInputValue",{enumerable:!0,get:function(){return St.coerceInputValue}});Object.defineProperty(Z,"concatAST",{enumerable:!0,get:function(){return St.concatAST}});Object.defineProperty(Z,"separateOperations",{enumerable:!0,get:function(){return St.separateOperations}});Object.defineProperty(Z,"stripIgnoredCharacters",{enumerable:!0,get:function(){return St.stripIgnoredCharacters}});Object.defineProperty(Z,"isEqualType",{enumerable:!0,get:function(){return St.isEqualType}});Object.defineProperty(Z,"isTypeSubTypeOf",{enumerable:!0,get:function(){return St.isTypeSubTypeOf}});Object.defineProperty(Z,"doTypesOverlap",{enumerable:!0,get:function(){return St.doTypesOverlap}});Object.defineProperty(Z,"assertValidName",{enumerable:!0,get:function(){return St.assertValidName}});Object.defineProperty(Z,"isValidNameError",{enumerable:!0,get:function(){return St.isValidNameError}});Object.defineProperty(Z,"BreakingChangeType",{enumerable:!0,get:function(){return St.BreakingChangeType}});Object.defineProperty(Z,"DangerousChangeType",{enumerable:!0,get:function(){return St.DangerousChangeType}});Object.defineProperty(Z,"findBreakingChanges",{enumerable:!0,get:function(){return St.findBreakingChanges}});Object.defineProperty(Z,"findDangerousChanges",{enumerable:!0,get:function(){return St.findDangerousChanges}});Object.defineProperty(Z,"findDeprecatedUsages",{enumerable:!0,get:function(){return St.findDeprecatedUsages}});var Zj=m1(),$j=wR(),Oe=DR(),Xt=LR(),Nc=IR(),eP=HR(),pt=WR(),Np=XR(),St=Xj()});var rP=G((Xoe,tP)=>{tP.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,r=[],n=0;n{"use strict";var iX=rP(),nP={"text/plain":"Text","text/html":"Url",default:"Text"},aX="Copy to clipboard: #{key}, Enter";function oX(e){var t=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}function uX(e,t){var r,n,i,o,s,l,d=!1;t||(t={}),r=t.debug||!1;try{i=iX(),o=document.createRange(),s=document.getSelection(),l=document.createElement("span"),l.textContent=e,l.style.all="unset",l.style.position="fixed",l.style.top=0,l.style.clip="rect(0, 0, 0, 0)",l.style.whiteSpace="pre",l.style.webkitUserSelect="text",l.style.MozUserSelect="text",l.style.msUserSelect="text",l.style.userSelect="text",l.addEventListener("copy",function(v){if(v.stopPropagation(),t.format)if(v.preventDefault(),typeof v.clipboardData=="undefined"){r&&console.warn("unable to use e.clipboardData"),r&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var y=nP[t.format]||nP.default;window.clipboardData.setData(y,e)}else v.clipboardData.clearData(),v.clipboardData.setData(t.format,e);t.onCopy&&(v.preventDefault(),t.onCopy(v.clipboardData))}),document.body.appendChild(l),o.selectNodeContents(l),s.addRange(o);var h=document.execCommand("copy");if(!h)throw new Error("copy command was unsuccessful");d=!0}catch(v){r&&console.error("unable to copy using execCommand: ",v),r&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),d=!0}catch(y){r&&console.error("unable to copy using clipboardData: ",y),r&&console.error("falling back to prompt"),n=oX("message"in t?t.message:aX),window.prompt(n,e)}}finally{s&&(typeof s.removeRange=="function"?s.removeRange(o):s.removeAllRanges()),l&&document.body.removeChild(l),i()}return d}iP.exports=uX});var Xk=G((Oue,Fm)=>{"use strict";function aF(e,t){if(e!=null)return e;var r=new Error(t!==void 0?t:"Got unexpected "+e);throw r.framesToPop=1,r}Fm.exports=aF;Fm.exports.default=aF;Object.defineProperty(Fm.exports,"__esModule",{value:!0})});var pF=G((Nse,xX)=>{xX.exports={Aacute:"\xC1",aacute:"\xE1",Abreve:"\u0102",abreve:"\u0103",ac:"\u223E",acd:"\u223F",acE:"\u223E\u0333",Acirc:"\xC2",acirc:"\xE2",acute:"\xB4",Acy:"\u0410",acy:"\u0430",AElig:"\xC6",aelig:"\xE6",af:"\u2061",Afr:"\u{1D504}",afr:"\u{1D51E}",Agrave:"\xC0",agrave:"\xE0",alefsym:"\u2135",aleph:"\u2135",Alpha:"\u0391",alpha:"\u03B1",Amacr:"\u0100",amacr:"\u0101",amalg:"\u2A3F",amp:"&",AMP:"&",andand:"\u2A55",And:"\u2A53",and:"\u2227",andd:"\u2A5C",andslope:"\u2A58",andv:"\u2A5A",ang:"\u2220",ange:"\u29A4",angle:"\u2220",angmsdaa:"\u29A8",angmsdab:"\u29A9",angmsdac:"\u29AA",angmsdad:"\u29AB",angmsdae:"\u29AC",angmsdaf:"\u29AD",angmsdag:"\u29AE",angmsdah:"\u29AF",angmsd:"\u2221",angrt:"\u221F",angrtvb:"\u22BE",angrtvbd:"\u299D",angsph:"\u2222",angst:"\xC5",angzarr:"\u237C",Aogon:"\u0104",aogon:"\u0105",Aopf:"\u{1D538}",aopf:"\u{1D552}",apacir:"\u2A6F",ap:"\u2248",apE:"\u2A70",ape:"\u224A",apid:"\u224B",apos:"'",ApplyFunction:"\u2061",approx:"\u2248",approxeq:"\u224A",Aring:"\xC5",aring:"\xE5",Ascr:"\u{1D49C}",ascr:"\u{1D4B6}",Assign:"\u2254",ast:"*",asymp:"\u2248",asympeq:"\u224D",Atilde:"\xC3",atilde:"\xE3",Auml:"\xC4",auml:"\xE4",awconint:"\u2233",awint:"\u2A11",backcong:"\u224C",backepsilon:"\u03F6",backprime:"\u2035",backsim:"\u223D",backsimeq:"\u22CD",Backslash:"\u2216",Barv:"\u2AE7",barvee:"\u22BD",barwed:"\u2305",Barwed:"\u2306",barwedge:"\u2305",bbrk:"\u23B5",bbrktbrk:"\u23B6",bcong:"\u224C",Bcy:"\u0411",bcy:"\u0431",bdquo:"\u201E",becaus:"\u2235",because:"\u2235",Because:"\u2235",bemptyv:"\u29B0",bepsi:"\u03F6",bernou:"\u212C",Bernoullis:"\u212C",Beta:"\u0392",beta:"\u03B2",beth:"\u2136",between:"\u226C",Bfr:"\u{1D505}",bfr:"\u{1D51F}",bigcap:"\u22C2",bigcirc:"\u25EF",bigcup:"\u22C3",bigodot:"\u2A00",bigoplus:"\u2A01",bigotimes:"\u2A02",bigsqcup:"\u2A06",bigstar:"\u2605",bigtriangledown:"\u25BD",bigtriangleup:"\u25B3",biguplus:"\u2A04",bigvee:"\u22C1",bigwedge:"\u22C0",bkarow:"\u290D",blacklozenge:"\u29EB",blacksquare:"\u25AA",blacktriangle:"\u25B4",blacktriangledown:"\u25BE",blacktriangleleft:"\u25C2",blacktriangleright:"\u25B8",blank:"\u2423",blk12:"\u2592",blk14:"\u2591",blk34:"\u2593",block:"\u2588",bne:"=\u20E5",bnequiv:"\u2261\u20E5",bNot:"\u2AED",bnot:"\u2310",Bopf:"\u{1D539}",bopf:"\u{1D553}",bot:"\u22A5",bottom:"\u22A5",bowtie:"\u22C8",boxbox:"\u29C9",boxdl:"\u2510",boxdL:"\u2555",boxDl:"\u2556",boxDL:"\u2557",boxdr:"\u250C",boxdR:"\u2552",boxDr:"\u2553",boxDR:"\u2554",boxh:"\u2500",boxH:"\u2550",boxhd:"\u252C",boxHd:"\u2564",boxhD:"\u2565",boxHD:"\u2566",boxhu:"\u2534",boxHu:"\u2567",boxhU:"\u2568",boxHU:"\u2569",boxminus:"\u229F",boxplus:"\u229E",boxtimes:"\u22A0",boxul:"\u2518",boxuL:"\u255B",boxUl:"\u255C",boxUL:"\u255D",boxur:"\u2514",boxuR:"\u2558",boxUr:"\u2559",boxUR:"\u255A",boxv:"\u2502",boxV:"\u2551",boxvh:"\u253C",boxvH:"\u256A",boxVh:"\u256B",boxVH:"\u256C",boxvl:"\u2524",boxvL:"\u2561",boxVl:"\u2562",boxVL:"\u2563",boxvr:"\u251C",boxvR:"\u255E",boxVr:"\u255F",boxVR:"\u2560",bprime:"\u2035",breve:"\u02D8",Breve:"\u02D8",brvbar:"\xA6",bscr:"\u{1D4B7}",Bscr:"\u212C",bsemi:"\u204F",bsim:"\u223D",bsime:"\u22CD",bsolb:"\u29C5",bsol:"\\",bsolhsub:"\u27C8",bull:"\u2022",bullet:"\u2022",bump:"\u224E",bumpE:"\u2AAE",bumpe:"\u224F",Bumpeq:"\u224E",bumpeq:"\u224F",Cacute:"\u0106",cacute:"\u0107",capand:"\u2A44",capbrcup:"\u2A49",capcap:"\u2A4B",cap:"\u2229",Cap:"\u22D2",capcup:"\u2A47",capdot:"\u2A40",CapitalDifferentialD:"\u2145",caps:"\u2229\uFE00",caret:"\u2041",caron:"\u02C7",Cayleys:"\u212D",ccaps:"\u2A4D",Ccaron:"\u010C",ccaron:"\u010D",Ccedil:"\xC7",ccedil:"\xE7",Ccirc:"\u0108",ccirc:"\u0109",Cconint:"\u2230",ccups:"\u2A4C",ccupssm:"\u2A50",Cdot:"\u010A",cdot:"\u010B",cedil:"\xB8",Cedilla:"\xB8",cemptyv:"\u29B2",cent:"\xA2",centerdot:"\xB7",CenterDot:"\xB7",cfr:"\u{1D520}",Cfr:"\u212D",CHcy:"\u0427",chcy:"\u0447",check:"\u2713",checkmark:"\u2713",Chi:"\u03A7",chi:"\u03C7",circ:"\u02C6",circeq:"\u2257",circlearrowleft:"\u21BA",circlearrowright:"\u21BB",circledast:"\u229B",circledcirc:"\u229A",circleddash:"\u229D",CircleDot:"\u2299",circledR:"\xAE",circledS:"\u24C8",CircleMinus:"\u2296",CirclePlus:"\u2295",CircleTimes:"\u2297",cir:"\u25CB",cirE:"\u29C3",cire:"\u2257",cirfnint:"\u2A10",cirmid:"\u2AEF",cirscir:"\u29C2",ClockwiseContourIntegral:"\u2232",CloseCurlyDoubleQuote:"\u201D",CloseCurlyQuote:"\u2019",clubs:"\u2663",clubsuit:"\u2663",colon:":",Colon:"\u2237",Colone:"\u2A74",colone:"\u2254",coloneq:"\u2254",comma:",",commat:"@",comp:"\u2201",compfn:"\u2218",complement:"\u2201",complexes:"\u2102",cong:"\u2245",congdot:"\u2A6D",Congruent:"\u2261",conint:"\u222E",Conint:"\u222F",ContourIntegral:"\u222E",copf:"\u{1D554}",Copf:"\u2102",coprod:"\u2210",Coproduct:"\u2210",copy:"\xA9",COPY:"\xA9",copysr:"\u2117",CounterClockwiseContourIntegral:"\u2233",crarr:"\u21B5",cross:"\u2717",Cross:"\u2A2F",Cscr:"\u{1D49E}",cscr:"\u{1D4B8}",csub:"\u2ACF",csube:"\u2AD1",csup:"\u2AD0",csupe:"\u2AD2",ctdot:"\u22EF",cudarrl:"\u2938",cudarrr:"\u2935",cuepr:"\u22DE",cuesc:"\u22DF",cularr:"\u21B6",cularrp:"\u293D",cupbrcap:"\u2A48",cupcap:"\u2A46",CupCap:"\u224D",cup:"\u222A",Cup:"\u22D3",cupcup:"\u2A4A",cupdot:"\u228D",cupor:"\u2A45",cups:"\u222A\uFE00",curarr:"\u21B7",curarrm:"\u293C",curlyeqprec:"\u22DE",curlyeqsucc:"\u22DF",curlyvee:"\u22CE",curlywedge:"\u22CF",curren:"\xA4",curvearrowleft:"\u21B6",curvearrowright:"\u21B7",cuvee:"\u22CE",cuwed:"\u22CF",cwconint:"\u2232",cwint:"\u2231",cylcty:"\u232D",dagger:"\u2020",Dagger:"\u2021",daleth:"\u2138",darr:"\u2193",Darr:"\u21A1",dArr:"\u21D3",dash:"\u2010",Dashv:"\u2AE4",dashv:"\u22A3",dbkarow:"\u290F",dblac:"\u02DD",Dcaron:"\u010E",dcaron:"\u010F",Dcy:"\u0414",dcy:"\u0434",ddagger:"\u2021",ddarr:"\u21CA",DD:"\u2145",dd:"\u2146",DDotrahd:"\u2911",ddotseq:"\u2A77",deg:"\xB0",Del:"\u2207",Delta:"\u0394",delta:"\u03B4",demptyv:"\u29B1",dfisht:"\u297F",Dfr:"\u{1D507}",dfr:"\u{1D521}",dHar:"\u2965",dharl:"\u21C3",dharr:"\u21C2",DiacriticalAcute:"\xB4",DiacriticalDot:"\u02D9",DiacriticalDoubleAcute:"\u02DD",DiacriticalGrave:"`",DiacriticalTilde:"\u02DC",diam:"\u22C4",diamond:"\u22C4",Diamond:"\u22C4",diamondsuit:"\u2666",diams:"\u2666",die:"\xA8",DifferentialD:"\u2146",digamma:"\u03DD",disin:"\u22F2",div:"\xF7",divide:"\xF7",divideontimes:"\u22C7",divonx:"\u22C7",DJcy:"\u0402",djcy:"\u0452",dlcorn:"\u231E",dlcrop:"\u230D",dollar:"$",Dopf:"\u{1D53B}",dopf:"\u{1D555}",Dot:"\xA8",dot:"\u02D9",DotDot:"\u20DC",doteq:"\u2250",doteqdot:"\u2251",DotEqual:"\u2250",dotminus:"\u2238",dotplus:"\u2214",dotsquare:"\u22A1",doublebarwedge:"\u2306",DoubleContourIntegral:"\u222F",DoubleDot:"\xA8",DoubleDownArrow:"\u21D3",DoubleLeftArrow:"\u21D0",DoubleLeftRightArrow:"\u21D4",DoubleLeftTee:"\u2AE4",DoubleLongLeftArrow:"\u27F8",DoubleLongLeftRightArrow:"\u27FA",DoubleLongRightArrow:"\u27F9",DoubleRightArrow:"\u21D2",DoubleRightTee:"\u22A8",DoubleUpArrow:"\u21D1",DoubleUpDownArrow:"\u21D5",DoubleVerticalBar:"\u2225",DownArrowBar:"\u2913",downarrow:"\u2193",DownArrow:"\u2193",Downarrow:"\u21D3",DownArrowUpArrow:"\u21F5",DownBreve:"\u0311",downdownarrows:"\u21CA",downharpoonleft:"\u21C3",downharpoonright:"\u21C2",DownLeftRightVector:"\u2950",DownLeftTeeVector:"\u295E",DownLeftVectorBar:"\u2956",DownLeftVector:"\u21BD",DownRightTeeVector:"\u295F",DownRightVectorBar:"\u2957",DownRightVector:"\u21C1",DownTeeArrow:"\u21A7",DownTee:"\u22A4",drbkarow:"\u2910",drcorn:"\u231F",drcrop:"\u230C",Dscr:"\u{1D49F}",dscr:"\u{1D4B9}",DScy:"\u0405",dscy:"\u0455",dsol:"\u29F6",Dstrok:"\u0110",dstrok:"\u0111",dtdot:"\u22F1",dtri:"\u25BF",dtrif:"\u25BE",duarr:"\u21F5",duhar:"\u296F",dwangle:"\u29A6",DZcy:"\u040F",dzcy:"\u045F",dzigrarr:"\u27FF",Eacute:"\xC9",eacute:"\xE9",easter:"\u2A6E",Ecaron:"\u011A",ecaron:"\u011B",Ecirc:"\xCA",ecirc:"\xEA",ecir:"\u2256",ecolon:"\u2255",Ecy:"\u042D",ecy:"\u044D",eDDot:"\u2A77",Edot:"\u0116",edot:"\u0117",eDot:"\u2251",ee:"\u2147",efDot:"\u2252",Efr:"\u{1D508}",efr:"\u{1D522}",eg:"\u2A9A",Egrave:"\xC8",egrave:"\xE8",egs:"\u2A96",egsdot:"\u2A98",el:"\u2A99",Element:"\u2208",elinters:"\u23E7",ell:"\u2113",els:"\u2A95",elsdot:"\u2A97",Emacr:"\u0112",emacr:"\u0113",empty:"\u2205",emptyset:"\u2205",EmptySmallSquare:"\u25FB",emptyv:"\u2205",EmptyVerySmallSquare:"\u25AB",emsp13:"\u2004",emsp14:"\u2005",emsp:"\u2003",ENG:"\u014A",eng:"\u014B",ensp:"\u2002",Eogon:"\u0118",eogon:"\u0119",Eopf:"\u{1D53C}",eopf:"\u{1D556}",epar:"\u22D5",eparsl:"\u29E3",eplus:"\u2A71",epsi:"\u03B5",Epsilon:"\u0395",epsilon:"\u03B5",epsiv:"\u03F5",eqcirc:"\u2256",eqcolon:"\u2255",eqsim:"\u2242",eqslantgtr:"\u2A96",eqslantless:"\u2A95",Equal:"\u2A75",equals:"=",EqualTilde:"\u2242",equest:"\u225F",Equilibrium:"\u21CC",equiv:"\u2261",equivDD:"\u2A78",eqvparsl:"\u29E5",erarr:"\u2971",erDot:"\u2253",escr:"\u212F",Escr:"\u2130",esdot:"\u2250",Esim:"\u2A73",esim:"\u2242",Eta:"\u0397",eta:"\u03B7",ETH:"\xD0",eth:"\xF0",Euml:"\xCB",euml:"\xEB",euro:"\u20AC",excl:"!",exist:"\u2203",Exists:"\u2203",expectation:"\u2130",exponentiale:"\u2147",ExponentialE:"\u2147",fallingdotseq:"\u2252",Fcy:"\u0424",fcy:"\u0444",female:"\u2640",ffilig:"\uFB03",fflig:"\uFB00",ffllig:"\uFB04",Ffr:"\u{1D509}",ffr:"\u{1D523}",filig:"\uFB01",FilledSmallSquare:"\u25FC",FilledVerySmallSquare:"\u25AA",fjlig:"fj",flat:"\u266D",fllig:"\uFB02",fltns:"\u25B1",fnof:"\u0192",Fopf:"\u{1D53D}",fopf:"\u{1D557}",forall:"\u2200",ForAll:"\u2200",fork:"\u22D4",forkv:"\u2AD9",Fouriertrf:"\u2131",fpartint:"\u2A0D",frac12:"\xBD",frac13:"\u2153",frac14:"\xBC",frac15:"\u2155",frac16:"\u2159",frac18:"\u215B",frac23:"\u2154",frac25:"\u2156",frac34:"\xBE",frac35:"\u2157",frac38:"\u215C",frac45:"\u2158",frac56:"\u215A",frac58:"\u215D",frac78:"\u215E",frasl:"\u2044",frown:"\u2322",fscr:"\u{1D4BB}",Fscr:"\u2131",gacute:"\u01F5",Gamma:"\u0393",gamma:"\u03B3",Gammad:"\u03DC",gammad:"\u03DD",gap:"\u2A86",Gbreve:"\u011E",gbreve:"\u011F",Gcedil:"\u0122",Gcirc:"\u011C",gcirc:"\u011D",Gcy:"\u0413",gcy:"\u0433",Gdot:"\u0120",gdot:"\u0121",ge:"\u2265",gE:"\u2267",gEl:"\u2A8C",gel:"\u22DB",geq:"\u2265",geqq:"\u2267",geqslant:"\u2A7E",gescc:"\u2AA9",ges:"\u2A7E",gesdot:"\u2A80",gesdoto:"\u2A82",gesdotol:"\u2A84",gesl:"\u22DB\uFE00",gesles:"\u2A94",Gfr:"\u{1D50A}",gfr:"\u{1D524}",gg:"\u226B",Gg:"\u22D9",ggg:"\u22D9",gimel:"\u2137",GJcy:"\u0403",gjcy:"\u0453",gla:"\u2AA5",gl:"\u2277",glE:"\u2A92",glj:"\u2AA4",gnap:"\u2A8A",gnapprox:"\u2A8A",gne:"\u2A88",gnE:"\u2269",gneq:"\u2A88",gneqq:"\u2269",gnsim:"\u22E7",Gopf:"\u{1D53E}",gopf:"\u{1D558}",grave:"`",GreaterEqual:"\u2265",GreaterEqualLess:"\u22DB",GreaterFullEqual:"\u2267",GreaterGreater:"\u2AA2",GreaterLess:"\u2277",GreaterSlantEqual:"\u2A7E",GreaterTilde:"\u2273",Gscr:"\u{1D4A2}",gscr:"\u210A",gsim:"\u2273",gsime:"\u2A8E",gsiml:"\u2A90",gtcc:"\u2AA7",gtcir:"\u2A7A",gt:">",GT:">",Gt:"\u226B",gtdot:"\u22D7",gtlPar:"\u2995",gtquest:"\u2A7C",gtrapprox:"\u2A86",gtrarr:"\u2978",gtrdot:"\u22D7",gtreqless:"\u22DB",gtreqqless:"\u2A8C",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\uFE00",gvnE:"\u2269\uFE00",Hacek:"\u02C7",hairsp:"\u200A",half:"\xBD",hamilt:"\u210B",HARDcy:"\u042A",hardcy:"\u044A",harrcir:"\u2948",harr:"\u2194",hArr:"\u21D4",harrw:"\u21AD",Hat:"^",hbar:"\u210F",Hcirc:"\u0124",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22B9",hfr:"\u{1D525}",Hfr:"\u210C",HilbertSpace:"\u210B",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21FF",homtht:"\u223B",hookleftarrow:"\u21A9",hookrightarrow:"\u21AA",hopf:"\u{1D559}",Hopf:"\u210D",horbar:"\u2015",HorizontalLine:"\u2500",hscr:"\u{1D4BD}",Hscr:"\u210B",hslash:"\u210F",Hstrok:"\u0126",hstrok:"\u0127",HumpDownHump:"\u224E",HumpEqual:"\u224F",hybull:"\u2043",hyphen:"\u2010",Iacute:"\xCD",iacute:"\xED",ic:"\u2063",Icirc:"\xCE",icirc:"\xEE",Icy:"\u0418",icy:"\u0438",Idot:"\u0130",IEcy:"\u0415",iecy:"\u0435",iexcl:"\xA1",iff:"\u21D4",ifr:"\u{1D526}",Ifr:"\u2111",Igrave:"\xCC",igrave:"\xEC",ii:"\u2148",iiiint:"\u2A0C",iiint:"\u222D",iinfin:"\u29DC",iiota:"\u2129",IJlig:"\u0132",ijlig:"\u0133",Imacr:"\u012A",imacr:"\u012B",image:"\u2111",ImaginaryI:"\u2148",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",Im:"\u2111",imof:"\u22B7",imped:"\u01B5",Implies:"\u21D2",incare:"\u2105",in:"\u2208",infin:"\u221E",infintie:"\u29DD",inodot:"\u0131",intcal:"\u22BA",int:"\u222B",Int:"\u222C",integers:"\u2124",Integral:"\u222B",intercal:"\u22BA",Intersection:"\u22C2",intlarhk:"\u2A17",intprod:"\u2A3C",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",IOcy:"\u0401",iocy:"\u0451",Iogon:"\u012E",iogon:"\u012F",Iopf:"\u{1D540}",iopf:"\u{1D55A}",Iota:"\u0399",iota:"\u03B9",iprod:"\u2A3C",iquest:"\xBF",iscr:"\u{1D4BE}",Iscr:"\u2110",isin:"\u2208",isindot:"\u22F5",isinE:"\u22F9",isins:"\u22F4",isinsv:"\u22F3",isinv:"\u2208",it:"\u2062",Itilde:"\u0128",itilde:"\u0129",Iukcy:"\u0406",iukcy:"\u0456",Iuml:"\xCF",iuml:"\xEF",Jcirc:"\u0134",jcirc:"\u0135",Jcy:"\u0419",jcy:"\u0439",Jfr:"\u{1D50D}",jfr:"\u{1D527}",jmath:"\u0237",Jopf:"\u{1D541}",jopf:"\u{1D55B}",Jscr:"\u{1D4A5}",jscr:"\u{1D4BF}",Jsercy:"\u0408",jsercy:"\u0458",Jukcy:"\u0404",jukcy:"\u0454",Kappa:"\u039A",kappa:"\u03BA",kappav:"\u03F0",Kcedil:"\u0136",kcedil:"\u0137",Kcy:"\u041A",kcy:"\u043A",Kfr:"\u{1D50E}",kfr:"\u{1D528}",kgreen:"\u0138",KHcy:"\u0425",khcy:"\u0445",KJcy:"\u040C",kjcy:"\u045C",Kopf:"\u{1D542}",kopf:"\u{1D55C}",Kscr:"\u{1D4A6}",kscr:"\u{1D4C0}",lAarr:"\u21DA",Lacute:"\u0139",lacute:"\u013A",laemptyv:"\u29B4",lagran:"\u2112",Lambda:"\u039B",lambda:"\u03BB",lang:"\u27E8",Lang:"\u27EA",langd:"\u2991",langle:"\u27E8",lap:"\u2A85",Laplacetrf:"\u2112",laquo:"\xAB",larrb:"\u21E4",larrbfs:"\u291F",larr:"\u2190",Larr:"\u219E",lArr:"\u21D0",larrfs:"\u291D",larrhk:"\u21A9",larrlp:"\u21AB",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21A2",latail:"\u2919",lAtail:"\u291B",lat:"\u2AAB",late:"\u2AAD",lates:"\u2AAD\uFE00",lbarr:"\u290C",lBarr:"\u290E",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298B",lbrksld:"\u298F",lbrkslu:"\u298D",Lcaron:"\u013D",lcaron:"\u013E",Lcedil:"\u013B",lcedil:"\u013C",lceil:"\u2308",lcub:"{",Lcy:"\u041B",lcy:"\u043B",ldca:"\u2936",ldquo:"\u201C",ldquor:"\u201E",ldrdhar:"\u2967",ldrushar:"\u294B",ldsh:"\u21B2",le:"\u2264",lE:"\u2266",LeftAngleBracket:"\u27E8",LeftArrowBar:"\u21E4",leftarrow:"\u2190",LeftArrow:"\u2190",Leftarrow:"\u21D0",LeftArrowRightArrow:"\u21C6",leftarrowtail:"\u21A2",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27E6",LeftDownTeeVector:"\u2961",LeftDownVectorBar:"\u2959",LeftDownVector:"\u21C3",LeftFloor:"\u230A",leftharpoondown:"\u21BD",leftharpoonup:"\u21BC",leftleftarrows:"\u21C7",leftrightarrow:"\u2194",LeftRightArrow:"\u2194",Leftrightarrow:"\u21D4",leftrightarrows:"\u21C6",leftrightharpoons:"\u21CB",leftrightsquigarrow:"\u21AD",LeftRightVector:"\u294E",LeftTeeArrow:"\u21A4",LeftTee:"\u22A3",LeftTeeVector:"\u295A",leftthreetimes:"\u22CB",LeftTriangleBar:"\u29CF",LeftTriangle:"\u22B2",LeftTriangleEqual:"\u22B4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVectorBar:"\u2958",LeftUpVector:"\u21BF",LeftVectorBar:"\u2952",LeftVector:"\u21BC",lEg:"\u2A8B",leg:"\u22DA",leq:"\u2264",leqq:"\u2266",leqslant:"\u2A7D",lescc:"\u2AA8",les:"\u2A7D",lesdot:"\u2A7F",lesdoto:"\u2A81",lesdotor:"\u2A83",lesg:"\u22DA\uFE00",lesges:"\u2A93",lessapprox:"\u2A85",lessdot:"\u22D6",lesseqgtr:"\u22DA",lesseqqgtr:"\u2A8B",LessEqualGreater:"\u22DA",LessFullEqual:"\u2266",LessGreater:"\u2276",lessgtr:"\u2276",LessLess:"\u2AA1",lesssim:"\u2272",LessSlantEqual:"\u2A7D",LessTilde:"\u2272",lfisht:"\u297C",lfloor:"\u230A",Lfr:"\u{1D50F}",lfr:"\u{1D529}",lg:"\u2276",lgE:"\u2A91",lHar:"\u2962",lhard:"\u21BD",lharu:"\u21BC",lharul:"\u296A",lhblk:"\u2584",LJcy:"\u0409",ljcy:"\u0459",llarr:"\u21C7",ll:"\u226A",Ll:"\u22D8",llcorner:"\u231E",Lleftarrow:"\u21DA",llhard:"\u296B",lltri:"\u25FA",Lmidot:"\u013F",lmidot:"\u0140",lmoustache:"\u23B0",lmoust:"\u23B0",lnap:"\u2A89",lnapprox:"\u2A89",lne:"\u2A87",lnE:"\u2268",lneq:"\u2A87",lneqq:"\u2268",lnsim:"\u22E6",loang:"\u27EC",loarr:"\u21FD",lobrk:"\u27E6",longleftarrow:"\u27F5",LongLeftArrow:"\u27F5",Longleftarrow:"\u27F8",longleftrightarrow:"\u27F7",LongLeftRightArrow:"\u27F7",Longleftrightarrow:"\u27FA",longmapsto:"\u27FC",longrightarrow:"\u27F6",LongRightArrow:"\u27F6",Longrightarrow:"\u27F9",looparrowleft:"\u21AB",looparrowright:"\u21AC",lopar:"\u2985",Lopf:"\u{1D543}",lopf:"\u{1D55D}",loplus:"\u2A2D",lotimes:"\u2A34",lowast:"\u2217",lowbar:"_",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",loz:"\u25CA",lozenge:"\u25CA",lozf:"\u29EB",lpar:"(",lparlt:"\u2993",lrarr:"\u21C6",lrcorner:"\u231F",lrhar:"\u21CB",lrhard:"\u296D",lrm:"\u200E",lrtri:"\u22BF",lsaquo:"\u2039",lscr:"\u{1D4C1}",Lscr:"\u2112",lsh:"\u21B0",Lsh:"\u21B0",lsim:"\u2272",lsime:"\u2A8D",lsimg:"\u2A8F",lsqb:"[",lsquo:"\u2018",lsquor:"\u201A",Lstrok:"\u0141",lstrok:"\u0142",ltcc:"\u2AA6",ltcir:"\u2A79",lt:"<",LT:"<",Lt:"\u226A",ltdot:"\u22D6",lthree:"\u22CB",ltimes:"\u22C9",ltlarr:"\u2976",ltquest:"\u2A7B",ltri:"\u25C3",ltrie:"\u22B4",ltrif:"\u25C2",ltrPar:"\u2996",lurdshar:"\u294A",luruhar:"\u2966",lvertneqq:"\u2268\uFE00",lvnE:"\u2268\uFE00",macr:"\xAF",male:"\u2642",malt:"\u2720",maltese:"\u2720",Map:"\u2905",map:"\u21A6",mapsto:"\u21A6",mapstodown:"\u21A7",mapstoleft:"\u21A4",mapstoup:"\u21A5",marker:"\u25AE",mcomma:"\u2A29",Mcy:"\u041C",mcy:"\u043C",mdash:"\u2014",mDDot:"\u223A",measuredangle:"\u2221",MediumSpace:"\u205F",Mellintrf:"\u2133",Mfr:"\u{1D510}",mfr:"\u{1D52A}",mho:"\u2127",micro:"\xB5",midast:"*",midcir:"\u2AF0",mid:"\u2223",middot:"\xB7",minusb:"\u229F",minus:"\u2212",minusd:"\u2238",minusdu:"\u2A2A",MinusPlus:"\u2213",mlcp:"\u2ADB",mldr:"\u2026",mnplus:"\u2213",models:"\u22A7",Mopf:"\u{1D544}",mopf:"\u{1D55E}",mp:"\u2213",mscr:"\u{1D4C2}",Mscr:"\u2133",mstpos:"\u223E",Mu:"\u039C",mu:"\u03BC",multimap:"\u22B8",mumap:"\u22B8",nabla:"\u2207",Nacute:"\u0143",nacute:"\u0144",nang:"\u2220\u20D2",nap:"\u2249",napE:"\u2A70\u0338",napid:"\u224B\u0338",napos:"\u0149",napprox:"\u2249",natural:"\u266E",naturals:"\u2115",natur:"\u266E",nbsp:"\xA0",nbump:"\u224E\u0338",nbumpe:"\u224F\u0338",ncap:"\u2A43",Ncaron:"\u0147",ncaron:"\u0148",Ncedil:"\u0145",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2A6D\u0338",ncup:"\u2A42",Ncy:"\u041D",ncy:"\u043D",ndash:"\u2013",nearhk:"\u2924",nearr:"\u2197",neArr:"\u21D7",nearrow:"\u2197",ne:"\u2260",nedot:"\u2250\u0338",NegativeMediumSpace:"\u200B",NegativeThickSpace:"\u200B",NegativeThinSpace:"\u200B",NegativeVeryThinSpace:"\u200B",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",NestedGreaterGreater:"\u226B",NestedLessLess:"\u226A",NewLine:` -`,nexist:"\u2204",nexists:"\u2204",Nfr:"\u{1D511}",nfr:"\u{1D52B}",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2A7E\u0338",nges:"\u2A7E\u0338",nGg:"\u22D9\u0338",ngsim:"\u2275",nGt:"\u226B\u20D2",ngt:"\u226F",ngtr:"\u226F",nGtv:"\u226B\u0338",nharr:"\u21AE",nhArr:"\u21CE",nhpar:"\u2AF2",ni:"\u220B",nis:"\u22FC",nisd:"\u22FA",niv:"\u220B",NJcy:"\u040A",njcy:"\u045A",nlarr:"\u219A",nlArr:"\u21CD",nldr:"\u2025",nlE:"\u2266\u0338",nle:"\u2270",nleftarrow:"\u219A",nLeftarrow:"\u21CD",nleftrightarrow:"\u21AE",nLeftrightarrow:"\u21CE",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2A7D\u0338",nles:"\u2A7D\u0338",nless:"\u226E",nLl:"\u22D8\u0338",nlsim:"\u2274",nLt:"\u226A\u20D2",nlt:"\u226E",nltri:"\u22EA",nltrie:"\u22EC",nLtv:"\u226A\u0338",nmid:"\u2224",NoBreak:"\u2060",NonBreakingSpace:"\xA0",nopf:"\u{1D55F}",Nopf:"\u2115",Not:"\u2AEC",not:"\xAC",NotCongruent:"\u2262",NotCupCap:"\u226D",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226F",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226B\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2A7E\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224E\u0338",NotHumpEqual:"\u224F\u0338",notin:"\u2209",notindot:"\u22F5\u0338",notinE:"\u22F9\u0338",notinva:"\u2209",notinvb:"\u22F7",notinvc:"\u22F6",NotLeftTriangleBar:"\u29CF\u0338",NotLeftTriangle:"\u22EA",NotLeftTriangleEqual:"\u22EC",NotLess:"\u226E",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226A\u0338",NotLessSlantEqual:"\u2A7D\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2AA2\u0338",NotNestedLessLess:"\u2AA1\u0338",notni:"\u220C",notniva:"\u220C",notnivb:"\u22FE",notnivc:"\u22FD",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2AAF\u0338",NotPrecedesSlantEqual:"\u22E0",NotReverseElement:"\u220C",NotRightTriangleBar:"\u29D0\u0338",NotRightTriangle:"\u22EB",NotRightTriangleEqual:"\u22ED",NotSquareSubset:"\u228F\u0338",NotSquareSubsetEqual:"\u22E2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22E3",NotSubset:"\u2282\u20D2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2AB0\u0338",NotSucceedsSlantEqual:"\u22E1",NotSucceedsTilde:"\u227F\u0338",NotSuperset:"\u2283\u20D2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",nparallel:"\u2226",npar:"\u2226",nparsl:"\u2AFD\u20E5",npart:"\u2202\u0338",npolint:"\u2A14",npr:"\u2280",nprcue:"\u22E0",nprec:"\u2280",npreceq:"\u2AAF\u0338",npre:"\u2AAF\u0338",nrarrc:"\u2933\u0338",nrarr:"\u219B",nrArr:"\u21CF",nrarrw:"\u219D\u0338",nrightarrow:"\u219B",nRightarrow:"\u21CF",nrtri:"\u22EB",nrtrie:"\u22ED",nsc:"\u2281",nsccue:"\u22E1",nsce:"\u2AB0\u0338",Nscr:"\u{1D4A9}",nscr:"\u{1D4C3}",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22E2",nsqsupe:"\u22E3",nsub:"\u2284",nsubE:"\u2AC5\u0338",nsube:"\u2288",nsubset:"\u2282\u20D2",nsubseteq:"\u2288",nsubseteqq:"\u2AC5\u0338",nsucc:"\u2281",nsucceq:"\u2AB0\u0338",nsup:"\u2285",nsupE:"\u2AC6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20D2",nsupseteq:"\u2289",nsupseteqq:"\u2AC6\u0338",ntgl:"\u2279",Ntilde:"\xD1",ntilde:"\xF1",ntlg:"\u2278",ntriangleleft:"\u22EA",ntrianglelefteq:"\u22EC",ntriangleright:"\u22EB",ntrianglerighteq:"\u22ED",Nu:"\u039D",nu:"\u03BD",num:"#",numero:"\u2116",numsp:"\u2007",nvap:"\u224D\u20D2",nvdash:"\u22AC",nvDash:"\u22AD",nVdash:"\u22AE",nVDash:"\u22AF",nvge:"\u2265\u20D2",nvgt:">\u20D2",nvHarr:"\u2904",nvinfin:"\u29DE",nvlArr:"\u2902",nvle:"\u2264\u20D2",nvlt:"<\u20D2",nvltrie:"\u22B4\u20D2",nvrArr:"\u2903",nvrtrie:"\u22B5\u20D2",nvsim:"\u223C\u20D2",nwarhk:"\u2923",nwarr:"\u2196",nwArr:"\u21D6",nwarrow:"\u2196",nwnear:"\u2927",Oacute:"\xD3",oacute:"\xF3",oast:"\u229B",Ocirc:"\xD4",ocirc:"\xF4",ocir:"\u229A",Ocy:"\u041E",ocy:"\u043E",odash:"\u229D",Odblac:"\u0150",odblac:"\u0151",odiv:"\u2A38",odot:"\u2299",odsold:"\u29BC",OElig:"\u0152",oelig:"\u0153",ofcir:"\u29BF",Ofr:"\u{1D512}",ofr:"\u{1D52C}",ogon:"\u02DB",Ograve:"\xD2",ograve:"\xF2",ogt:"\u29C1",ohbar:"\u29B5",ohm:"\u03A9",oint:"\u222E",olarr:"\u21BA",olcir:"\u29BE",olcross:"\u29BB",oline:"\u203E",olt:"\u29C0",Omacr:"\u014C",omacr:"\u014D",Omega:"\u03A9",omega:"\u03C9",Omicron:"\u039F",omicron:"\u03BF",omid:"\u29B6",ominus:"\u2296",Oopf:"\u{1D546}",oopf:"\u{1D560}",opar:"\u29B7",OpenCurlyDoubleQuote:"\u201C",OpenCurlyQuote:"\u2018",operp:"\u29B9",oplus:"\u2295",orarr:"\u21BB",Or:"\u2A54",or:"\u2228",ord:"\u2A5D",order:"\u2134",orderof:"\u2134",ordf:"\xAA",ordm:"\xBA",origof:"\u22B6",oror:"\u2A56",orslope:"\u2A57",orv:"\u2A5B",oS:"\u24C8",Oscr:"\u{1D4AA}",oscr:"\u2134",Oslash:"\xD8",oslash:"\xF8",osol:"\u2298",Otilde:"\xD5",otilde:"\xF5",otimesas:"\u2A36",Otimes:"\u2A37",otimes:"\u2297",Ouml:"\xD6",ouml:"\xF6",ovbar:"\u233D",OverBar:"\u203E",OverBrace:"\u23DE",OverBracket:"\u23B4",OverParenthesis:"\u23DC",para:"\xB6",parallel:"\u2225",par:"\u2225",parsim:"\u2AF3",parsl:"\u2AFD",part:"\u2202",PartialD:"\u2202",Pcy:"\u041F",pcy:"\u043F",percnt:"%",period:".",permil:"\u2030",perp:"\u22A5",pertenk:"\u2031",Pfr:"\u{1D513}",pfr:"\u{1D52D}",Phi:"\u03A6",phi:"\u03C6",phiv:"\u03D5",phmmat:"\u2133",phone:"\u260E",Pi:"\u03A0",pi:"\u03C0",pitchfork:"\u22D4",piv:"\u03D6",planck:"\u210F",planckh:"\u210E",plankv:"\u210F",plusacir:"\u2A23",plusb:"\u229E",pluscir:"\u2A22",plus:"+",plusdo:"\u2214",plusdu:"\u2A25",pluse:"\u2A72",PlusMinus:"\xB1",plusmn:"\xB1",plussim:"\u2A26",plustwo:"\u2A27",pm:"\xB1",Poincareplane:"\u210C",pointint:"\u2A15",popf:"\u{1D561}",Popf:"\u2119",pound:"\xA3",prap:"\u2AB7",Pr:"\u2ABB",pr:"\u227A",prcue:"\u227C",precapprox:"\u2AB7",prec:"\u227A",preccurlyeq:"\u227C",Precedes:"\u227A",PrecedesEqual:"\u2AAF",PrecedesSlantEqual:"\u227C",PrecedesTilde:"\u227E",preceq:"\u2AAF",precnapprox:"\u2AB9",precneqq:"\u2AB5",precnsim:"\u22E8",pre:"\u2AAF",prE:"\u2AB3",precsim:"\u227E",prime:"\u2032",Prime:"\u2033",primes:"\u2119",prnap:"\u2AB9",prnE:"\u2AB5",prnsim:"\u22E8",prod:"\u220F",Product:"\u220F",profalar:"\u232E",profline:"\u2312",profsurf:"\u2313",prop:"\u221D",Proportional:"\u221D",Proportion:"\u2237",propto:"\u221D",prsim:"\u227E",prurel:"\u22B0",Pscr:"\u{1D4AB}",pscr:"\u{1D4C5}",Psi:"\u03A8",psi:"\u03C8",puncsp:"\u2008",Qfr:"\u{1D514}",qfr:"\u{1D52E}",qint:"\u2A0C",qopf:"\u{1D562}",Qopf:"\u211A",qprime:"\u2057",Qscr:"\u{1D4AC}",qscr:"\u{1D4C6}",quaternions:"\u210D",quatint:"\u2A16",quest:"?",questeq:"\u225F",quot:'"',QUOT:'"',rAarr:"\u21DB",race:"\u223D\u0331",Racute:"\u0154",racute:"\u0155",radic:"\u221A",raemptyv:"\u29B3",rang:"\u27E9",Rang:"\u27EB",rangd:"\u2992",range:"\u29A5",rangle:"\u27E9",raquo:"\xBB",rarrap:"\u2975",rarrb:"\u21E5",rarrbfs:"\u2920",rarrc:"\u2933",rarr:"\u2192",Rarr:"\u21A0",rArr:"\u21D2",rarrfs:"\u291E",rarrhk:"\u21AA",rarrlp:"\u21AC",rarrpl:"\u2945",rarrsim:"\u2974",Rarrtl:"\u2916",rarrtl:"\u21A3",rarrw:"\u219D",ratail:"\u291A",rAtail:"\u291C",ratio:"\u2236",rationals:"\u211A",rbarr:"\u290D",rBarr:"\u290F",RBarr:"\u2910",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298C",rbrksld:"\u298E",rbrkslu:"\u2990",Rcaron:"\u0158",rcaron:"\u0159",Rcedil:"\u0156",rcedil:"\u0157",rceil:"\u2309",rcub:"}",Rcy:"\u0420",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201D",rdquor:"\u201D",rdsh:"\u21B3",real:"\u211C",realine:"\u211B",realpart:"\u211C",reals:"\u211D",Re:"\u211C",rect:"\u25AD",reg:"\xAE",REG:"\xAE",ReverseElement:"\u220B",ReverseEquilibrium:"\u21CB",ReverseUpEquilibrium:"\u296F",rfisht:"\u297D",rfloor:"\u230B",rfr:"\u{1D52F}",Rfr:"\u211C",rHar:"\u2964",rhard:"\u21C1",rharu:"\u21C0",rharul:"\u296C",Rho:"\u03A1",rho:"\u03C1",rhov:"\u03F1",RightAngleBracket:"\u27E9",RightArrowBar:"\u21E5",rightarrow:"\u2192",RightArrow:"\u2192",Rightarrow:"\u21D2",RightArrowLeftArrow:"\u21C4",rightarrowtail:"\u21A3",RightCeiling:"\u2309",RightDoubleBracket:"\u27E7",RightDownTeeVector:"\u295D",RightDownVectorBar:"\u2955",RightDownVector:"\u21C2",RightFloor:"\u230B",rightharpoondown:"\u21C1",rightharpoonup:"\u21C0",rightleftarrows:"\u21C4",rightleftharpoons:"\u21CC",rightrightarrows:"\u21C9",rightsquigarrow:"\u219D",RightTeeArrow:"\u21A6",RightTee:"\u22A2",RightTeeVector:"\u295B",rightthreetimes:"\u22CC",RightTriangleBar:"\u29D0",RightTriangle:"\u22B3",RightTriangleEqual:"\u22B5",RightUpDownVector:"\u294F",RightUpTeeVector:"\u295C",RightUpVectorBar:"\u2954",RightUpVector:"\u21BE",RightVectorBar:"\u2953",RightVector:"\u21C0",ring:"\u02DA",risingdotseq:"\u2253",rlarr:"\u21C4",rlhar:"\u21CC",rlm:"\u200F",rmoustache:"\u23B1",rmoust:"\u23B1",rnmid:"\u2AEE",roang:"\u27ED",roarr:"\u21FE",robrk:"\u27E7",ropar:"\u2986",ropf:"\u{1D563}",Ropf:"\u211D",roplus:"\u2A2E",rotimes:"\u2A35",RoundImplies:"\u2970",rpar:")",rpargt:"\u2994",rppolint:"\u2A12",rrarr:"\u21C9",Rrightarrow:"\u21DB",rsaquo:"\u203A",rscr:"\u{1D4C7}",Rscr:"\u211B",rsh:"\u21B1",Rsh:"\u21B1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22CC",rtimes:"\u22CA",rtri:"\u25B9",rtrie:"\u22B5",rtrif:"\u25B8",rtriltri:"\u29CE",RuleDelayed:"\u29F4",ruluhar:"\u2968",rx:"\u211E",Sacute:"\u015A",sacute:"\u015B",sbquo:"\u201A",scap:"\u2AB8",Scaron:"\u0160",scaron:"\u0161",Sc:"\u2ABC",sc:"\u227B",sccue:"\u227D",sce:"\u2AB0",scE:"\u2AB4",Scedil:"\u015E",scedil:"\u015F",Scirc:"\u015C",scirc:"\u015D",scnap:"\u2ABA",scnE:"\u2AB6",scnsim:"\u22E9",scpolint:"\u2A13",scsim:"\u227F",Scy:"\u0421",scy:"\u0441",sdotb:"\u22A1",sdot:"\u22C5",sdote:"\u2A66",searhk:"\u2925",searr:"\u2198",seArr:"\u21D8",searrow:"\u2198",sect:"\xA7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",Sfr:"\u{1D516}",sfr:"\u{1D530}",sfrown:"\u2322",sharp:"\u266F",SHCHcy:"\u0429",shchcy:"\u0449",SHcy:"\u0428",shcy:"\u0448",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",shortmid:"\u2223",shortparallel:"\u2225",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",shy:"\xAD",Sigma:"\u03A3",sigma:"\u03C3",sigmaf:"\u03C2",sigmav:"\u03C2",sim:"\u223C",simdot:"\u2A6A",sime:"\u2243",simeq:"\u2243",simg:"\u2A9E",simgE:"\u2AA0",siml:"\u2A9D",simlE:"\u2A9F",simne:"\u2246",simplus:"\u2A24",simrarr:"\u2972",slarr:"\u2190",SmallCircle:"\u2218",smallsetminus:"\u2216",smashp:"\u2A33",smeparsl:"\u29E4",smid:"\u2223",smile:"\u2323",smt:"\u2AAA",smte:"\u2AAC",smtes:"\u2AAC\uFE00",SOFTcy:"\u042C",softcy:"\u044C",solbar:"\u233F",solb:"\u29C4",sol:"/",Sopf:"\u{1D54A}",sopf:"\u{1D564}",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\uFE00",sqcup:"\u2294",sqcups:"\u2294\uFE00",Sqrt:"\u221A",sqsub:"\u228F",sqsube:"\u2291",sqsubset:"\u228F",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",square:"\u25A1",Square:"\u25A1",SquareIntersection:"\u2293",SquareSubset:"\u228F",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",squarf:"\u25AA",squ:"\u25A1",squf:"\u25AA",srarr:"\u2192",Sscr:"\u{1D4AE}",sscr:"\u{1D4C8}",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22C6",Star:"\u22C6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03F5",straightphi:"\u03D5",strns:"\xAF",sub:"\u2282",Sub:"\u22D0",subdot:"\u2ABD",subE:"\u2AC5",sube:"\u2286",subedot:"\u2AC3",submult:"\u2AC1",subnE:"\u2ACB",subne:"\u228A",subplus:"\u2ABF",subrarr:"\u2979",subset:"\u2282",Subset:"\u22D0",subseteq:"\u2286",subseteqq:"\u2AC5",SubsetEqual:"\u2286",subsetneq:"\u228A",subsetneqq:"\u2ACB",subsim:"\u2AC7",subsub:"\u2AD5",subsup:"\u2AD3",succapprox:"\u2AB8",succ:"\u227B",succcurlyeq:"\u227D",Succeeds:"\u227B",SucceedsEqual:"\u2AB0",SucceedsSlantEqual:"\u227D",SucceedsTilde:"\u227F",succeq:"\u2AB0",succnapprox:"\u2ABA",succneqq:"\u2AB6",succnsim:"\u22E9",succsim:"\u227F",SuchThat:"\u220B",sum:"\u2211",Sum:"\u2211",sung:"\u266A",sup1:"\xB9",sup2:"\xB2",sup3:"\xB3",sup:"\u2283",Sup:"\u22D1",supdot:"\u2ABE",supdsub:"\u2AD8",supE:"\u2AC6",supe:"\u2287",supedot:"\u2AC4",Superset:"\u2283",SupersetEqual:"\u2287",suphsol:"\u27C9",suphsub:"\u2AD7",suplarr:"\u297B",supmult:"\u2AC2",supnE:"\u2ACC",supne:"\u228B",supplus:"\u2AC0",supset:"\u2283",Supset:"\u22D1",supseteq:"\u2287",supseteqq:"\u2AC6",supsetneq:"\u228B",supsetneqq:"\u2ACC",supsim:"\u2AC8",supsub:"\u2AD4",supsup:"\u2AD6",swarhk:"\u2926",swarr:"\u2199",swArr:"\u21D9",swarrow:"\u2199",swnwar:"\u292A",szlig:"\xDF",Tab:" ",target:"\u2316",Tau:"\u03A4",tau:"\u03C4",tbrk:"\u23B4",Tcaron:"\u0164",tcaron:"\u0165",Tcedil:"\u0162",tcedil:"\u0163",Tcy:"\u0422",tcy:"\u0442",tdot:"\u20DB",telrec:"\u2315",Tfr:"\u{1D517}",tfr:"\u{1D531}",there4:"\u2234",therefore:"\u2234",Therefore:"\u2234",Theta:"\u0398",theta:"\u03B8",thetasym:"\u03D1",thetav:"\u03D1",thickapprox:"\u2248",thicksim:"\u223C",ThickSpace:"\u205F\u200A",ThinSpace:"\u2009",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223C",THORN:"\xDE",thorn:"\xFE",tilde:"\u02DC",Tilde:"\u223C",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",timesbar:"\u2A31",timesb:"\u22A0",times:"\xD7",timesd:"\u2A30",tint:"\u222D",toea:"\u2928",topbot:"\u2336",topcir:"\u2AF1",top:"\u22A4",Topf:"\u{1D54B}",topf:"\u{1D565}",topfork:"\u2ADA",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",TRADE:"\u2122",triangle:"\u25B5",triangledown:"\u25BF",triangleleft:"\u25C3",trianglelefteq:"\u22B4",triangleq:"\u225C",triangleright:"\u25B9",trianglerighteq:"\u22B5",tridot:"\u25EC",trie:"\u225C",triminus:"\u2A3A",TripleDot:"\u20DB",triplus:"\u2A39",trisb:"\u29CD",tritime:"\u2A3B",trpezium:"\u23E2",Tscr:"\u{1D4AF}",tscr:"\u{1D4C9}",TScy:"\u0426",tscy:"\u0446",TSHcy:"\u040B",tshcy:"\u045B",Tstrok:"\u0166",tstrok:"\u0167",twixt:"\u226C",twoheadleftarrow:"\u219E",twoheadrightarrow:"\u21A0",Uacute:"\xDA",uacute:"\xFA",uarr:"\u2191",Uarr:"\u219F",uArr:"\u21D1",Uarrocir:"\u2949",Ubrcy:"\u040E",ubrcy:"\u045E",Ubreve:"\u016C",ubreve:"\u016D",Ucirc:"\xDB",ucirc:"\xFB",Ucy:"\u0423",ucy:"\u0443",udarr:"\u21C5",Udblac:"\u0170",udblac:"\u0171",udhar:"\u296E",ufisht:"\u297E",Ufr:"\u{1D518}",ufr:"\u{1D532}",Ugrave:"\xD9",ugrave:"\xF9",uHar:"\u2963",uharl:"\u21BF",uharr:"\u21BE",uhblk:"\u2580",ulcorn:"\u231C",ulcorner:"\u231C",ulcrop:"\u230F",ultri:"\u25F8",Umacr:"\u016A",umacr:"\u016B",uml:"\xA8",UnderBar:"_",UnderBrace:"\u23DF",UnderBracket:"\u23B5",UnderParenthesis:"\u23DD",Union:"\u22C3",UnionPlus:"\u228E",Uogon:"\u0172",uogon:"\u0173",Uopf:"\u{1D54C}",uopf:"\u{1D566}",UpArrowBar:"\u2912",uparrow:"\u2191",UpArrow:"\u2191",Uparrow:"\u21D1",UpArrowDownArrow:"\u21C5",updownarrow:"\u2195",UpDownArrow:"\u2195",Updownarrow:"\u21D5",UpEquilibrium:"\u296E",upharpoonleft:"\u21BF",upharpoonright:"\u21BE",uplus:"\u228E",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",upsi:"\u03C5",Upsi:"\u03D2",upsih:"\u03D2",Upsilon:"\u03A5",upsilon:"\u03C5",UpTeeArrow:"\u21A5",UpTee:"\u22A5",upuparrows:"\u21C8",urcorn:"\u231D",urcorner:"\u231D",urcrop:"\u230E",Uring:"\u016E",uring:"\u016F",urtri:"\u25F9",Uscr:"\u{1D4B0}",uscr:"\u{1D4CA}",utdot:"\u22F0",Utilde:"\u0168",utilde:"\u0169",utri:"\u25B5",utrif:"\u25B4",uuarr:"\u21C8",Uuml:"\xDC",uuml:"\xFC",uwangle:"\u29A7",vangrt:"\u299C",varepsilon:"\u03F5",varkappa:"\u03F0",varnothing:"\u2205",varphi:"\u03D5",varpi:"\u03D6",varpropto:"\u221D",varr:"\u2195",vArr:"\u21D5",varrho:"\u03F1",varsigma:"\u03C2",varsubsetneq:"\u228A\uFE00",varsubsetneqq:"\u2ACB\uFE00",varsupsetneq:"\u228B\uFE00",varsupsetneqq:"\u2ACC\uFE00",vartheta:"\u03D1",vartriangleleft:"\u22B2",vartriangleright:"\u22B3",vBar:"\u2AE8",Vbar:"\u2AEB",vBarv:"\u2AE9",Vcy:"\u0412",vcy:"\u0432",vdash:"\u22A2",vDash:"\u22A8",Vdash:"\u22A9",VDash:"\u22AB",Vdashl:"\u2AE6",veebar:"\u22BB",vee:"\u2228",Vee:"\u22C1",veeeq:"\u225A",vellip:"\u22EE",verbar:"|",Verbar:"\u2016",vert:"|",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200A",Vfr:"\u{1D519}",vfr:"\u{1D533}",vltri:"\u22B2",vnsub:"\u2282\u20D2",vnsup:"\u2283\u20D2",Vopf:"\u{1D54D}",vopf:"\u{1D567}",vprop:"\u221D",vrtri:"\u22B3",Vscr:"\u{1D4B1}",vscr:"\u{1D4CB}",vsubnE:"\u2ACB\uFE00",vsubne:"\u228A\uFE00",vsupnE:"\u2ACC\uFE00",vsupne:"\u228B\uFE00",Vvdash:"\u22AA",vzigzag:"\u299A",Wcirc:"\u0174",wcirc:"\u0175",wedbar:"\u2A5F",wedge:"\u2227",Wedge:"\u22C0",wedgeq:"\u2259",weierp:"\u2118",Wfr:"\u{1D51A}",wfr:"\u{1D534}",Wopf:"\u{1D54E}",wopf:"\u{1D568}",wp:"\u2118",wr:"\u2240",wreath:"\u2240",Wscr:"\u{1D4B2}",wscr:"\u{1D4CC}",xcap:"\u22C2",xcirc:"\u25EF",xcup:"\u22C3",xdtri:"\u25BD",Xfr:"\u{1D51B}",xfr:"\u{1D535}",xharr:"\u27F7",xhArr:"\u27FA",Xi:"\u039E",xi:"\u03BE",xlarr:"\u27F5",xlArr:"\u27F8",xmap:"\u27FC",xnis:"\u22FB",xodot:"\u2A00",Xopf:"\u{1D54F}",xopf:"\u{1D569}",xoplus:"\u2A01",xotime:"\u2A02",xrarr:"\u27F6",xrArr:"\u27F9",Xscr:"\u{1D4B3}",xscr:"\u{1D4CD}",xsqcup:"\u2A06",xuplus:"\u2A04",xutri:"\u25B3",xvee:"\u22C1",xwedge:"\u22C0",Yacute:"\xDD",yacute:"\xFD",YAcy:"\u042F",yacy:"\u044F",Ycirc:"\u0176",ycirc:"\u0177",Ycy:"\u042B",ycy:"\u044B",yen:"\xA5",Yfr:"\u{1D51C}",yfr:"\u{1D536}",YIcy:"\u0407",yicy:"\u0457",Yopf:"\u{1D550}",yopf:"\u{1D56A}",Yscr:"\u{1D4B4}",yscr:"\u{1D4CE}",YUcy:"\u042E",yucy:"\u044E",yuml:"\xFF",Yuml:"\u0178",Zacute:"\u0179",zacute:"\u017A",Zcaron:"\u017D",zcaron:"\u017E",Zcy:"\u0417",zcy:"\u0437",Zdot:"\u017B",zdot:"\u017C",zeetrf:"\u2128",ZeroWidthSpace:"\u200B",Zeta:"\u0396",zeta:"\u03B6",zfr:"\u{1D537}",Zfr:"\u2128",ZHcy:"\u0416",zhcy:"\u0436",zigrarr:"\u21DD",zopf:"\u{1D56B}",Zopf:"\u2124",Zscr:"\u{1D4B5}",zscr:"\u{1D4CF}",zwj:"\u200D",zwnj:"\u200C"}});var oO=G((Dse,hF)=>{"use strict";hF.exports=pF()});var Gm=G((xse,vF)=>{vF.exports=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/});var yF=G((Cse,mF)=>{"use strict";var gF={};function CX(e){var t,r,n=gF[e];if(n)return n;for(n=gF[e]=[],t=0;t<128;t++)r=String.fromCharCode(t),/^[0-9a-z]$/i.test(r)?n.push(r):n.push("%"+("0"+t.toString(16).toUpperCase()).slice(-2));for(t=0;t=55296&&o<=57343){if(o>=55296&&o<=56319&&n+1=56320&&s<=57343)){d+=encodeURIComponent(e[n]+e[n+1]),n++;continue}d+="%EF%BF%BD";continue}d+=encodeURIComponent(e[n])}return d}Qm.defaultChars=";/?:@&=+$,-_.!~*'()#";Qm.componentChars="-_.!~*'()";mF.exports=Qm});var _F=G((Lse,TF)=>{"use strict";var bF={};function LX(e){var t,r,n=bF[e];if(n)return n;for(n=bF[e]=[],t=0;t<128;t++)r=String.fromCharCode(t),n.push(r);for(t=0;t=55296&&v<=57343?y+="\uFFFD\uFFFD\uFFFD":y+=String.fromCharCode(v),i+=6;continue}if((s&248)==240&&i+91114111?y+="\uFFFD\uFFFD\uFFFD\uFFFD":(v-=65536,y+=String.fromCharCode(55296+(v>>10),56320+(v&1023))),i+=9;continue}y+="\uFFFD"}return y})}Bm.defaultChars=";/?:@&=+$,#";Bm.componentChars="";TF.exports=Bm});var SF=G((Ise,EF)=>{"use strict";EF.exports=function(t){var r="";return r+=t.protocol||"",r+=t.slashes?"//":"",r+=t.auth?t.auth+"@":"",t.hostname&&t.hostname.indexOf(":")!==-1?r+="["+t.hostname+"]":r+=t.hostname||"",r+=t.port?":"+t.port:"",r+=t.pathname||"",r+=t.search||"",r+=t.hash||"",r}});var CF=G((Ase,xF)=>{"use strict";function Km(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var IX=/^([a-z0-9.+-]+:)/i,AX=/:[0-9]*$/,RX=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,jX=["<",">",'"',"`"," ","\r",` -`," "],PX=["{","}","|","\\","^","`"].concat(jX),FX=["'"].concat(PX),kF=["%","/","?",";","#"].concat(FX),OF=["/","?","#"],MX=255,wF=/^[+a-z0-9A-Z_-]{0,63}$/,qX=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,NF={javascript:!0,"javascript:":!0},DF={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function VX(e,t){if(e&&e instanceof Km)return e;var r=new Km;return r.parse(e,t),r}Km.prototype.parse=function(e,t){var r,n,i,o,s,l=e;if(l=l.trim(),!t&&e.split("#").length===1){var d=RX.exec(l);if(d)return this.pathname=d[1],d[2]&&(this.search=d[2]),this}var h=IX.exec(l);if(h&&(h=h[0],i=h.toLowerCase(),this.protocol=h,l=l.substr(h.length)),(t||h||l.match(/^\/\/[^@\/]+@[^@\/]+/))&&(s=l.substr(0,2)==="//",s&&!(h&&NF[h])&&(l=l.substr(2),this.slashes=!0)),!NF[h]&&(s||h&&!DF[h])){var v=-1;for(r=0;r127?S+="x":S+=T[m];if(!S.match(wF)){var x=k.slice(0,r),L=k.slice(r+1),O=T.match(qX);O&&(x.push(O[1]),L.unshift(O[2])),L.length&&(l=L.join(".")+l),this.hostname=x.join(".");break}}}}this.hostname.length>MX&&(this.hostname=""),_&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var R=l.indexOf("#");R!==-1&&(this.hash=l.substr(R),l=l.slice(0,R));var M=l.indexOf("?");return M!==-1&&(this.search=l.substr(M),l=l.slice(0,M)),l&&(this.pathname=l),DF[i]&&this.hostname&&!this.pathname&&(this.pathname=""),this};Km.prototype.parseHost=function(e){var t=AX.exec(e);t&&(t=t[0],t!==":"&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};xF.exports=VX});var uO=G((Rse,Rp)=>{"use strict";Rp.exports.encode=yF();Rp.exports.decode=_F();Rp.exports.format=SF();Rp.exports.parse=CF()});var sO=G((jse,LF)=>{LF.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/});var lO=G((Pse,IF)=>{IF.exports=/[\0-\x1F\x7F-\x9F]/});var RF=G((Fse,AF)=>{AF.exports=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/});var cO=G((Mse,jF)=>{jF.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/});var PF=G(Ic=>{"use strict";Ic.Any=sO();Ic.Cc=lO();Ic.Cf=RF();Ic.P=Gm();Ic.Z=cO()});var Pt=G(en=>{"use strict";function UX(e){return Object.prototype.toString.call(e)}function GX(e){return UX(e)==="[object String]"}var QX=Object.prototype.hasOwnProperty;function FF(e,t){return QX.call(e,t)}function BX(e){var t=Array.prototype.slice.call(arguments,1);return t.forEach(function(r){if(!!r){if(typeof r!="object")throw new TypeError(r+"must be object");Object.keys(r).forEach(function(n){e[n]=r[n]})}}),e}function KX(e,t,r){return[].concat(e.slice(0,t),r,e.slice(t+1))}function MF(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||(e&65535)==65535||(e&65535)==65534||e>=0&&e<=8||e===11||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function qF(e){if(e>65535){e-=65536;var t=55296+(e>>10),r=56320+(e&1023);return String.fromCharCode(t,r)}return String.fromCharCode(e)}var VF=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,HX=/&([a-z#][a-z0-9]{1,31});/gi,zX=new RegExp(VF.source+"|"+HX.source,"gi"),WX=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,UF=oO();function YX(e,t){var r=0;return FF(UF,t)?UF[t]:t.charCodeAt(0)===35&&WX.test(t)&&(r=t[1].toLowerCase()==="x"?parseInt(t.slice(2),16):parseInt(t.slice(1),10),MF(r))?qF(r):e}function JX(e){return e.indexOf("\\")<0?e:e.replace(VF,"$1")}function XX(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(zX,function(t,r,n){return r||YX(t,n)})}var ZX=/[&<>"]/,$X=/[&<>"]/g,eZ={"&":"&","<":"<",">":">",'"':"""};function tZ(e){return eZ[e]}function rZ(e){return ZX.test(e)?e.replace($X,tZ):e}var nZ=/[.?*+^$[\]\\(){}|-]/g;function iZ(e){return e.replace(nZ,"\\$&")}function aZ(e){switch(e){case 9:case 32:return!0}return!1}function oZ(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}var uZ=Gm();function sZ(e){return uZ.test(e)}function lZ(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function cZ(e){return e=e.trim().replace(/\s+/g," "),"\u1E9E".toLowerCase()==="\u1E7E"&&(e=e.replace(/ẞ/g,"\xDF")),e.toLowerCase().toUpperCase()}en.lib={};en.lib.mdurl=uO();en.lib.ucmicro=PF();en.assign=BX;en.isString=GX;en.has=FF;en.unescapeMd=JX;en.unescapeAll=XX;en.isValidEntityCode=MF;en.fromCodePoint=qF;en.escapeHtml=rZ;en.arrayReplaceAt=KX;en.isSpace=aZ;en.isWhiteSpace=oZ;en.isMdAsciiPunct=lZ;en.isPunctChar=sZ;en.escapeRE=iZ;en.normalizeReference=cZ});var QF=G((Use,GF)=>{"use strict";GF.exports=function(t,r,n){var i,o,s,l,d=-1,h=t.posMax,v=t.pos;for(t.pos=r+1,i=1;t.pos{"use strict";var BF=Pt().unescapeAll;KF.exports=function(t,r,n){var i,o,s=0,l=r,d={ok:!1,pos:0,lines:0,str:""};if(t.charCodeAt(r)===60){for(r++;r32))return d;if(i===41){if(o===0)break;o--}r++}return l===r||o!==0||(d.str=BF(t.slice(l,r)),d.lines=s,d.pos=r,d.ok=!0),d}});var WF=G((Qse,zF)=>{"use strict";var fZ=Pt().unescapeAll;zF.exports=function(t,r,n){var i,o,s=0,l=r,d={ok:!1,pos:0,lines:0,str:""};if(r>=n||(o=t.charCodeAt(r),o!==34&&o!==39&&o!==40))return d;for(r++,o===40&&(o=41);r{"use strict";Hm.parseLinkLabel=QF();Hm.parseLinkDestination=HF();Hm.parseLinkTitle=WF()});var XF=G((Kse,JF)=>{"use strict";var dZ=Pt().assign,pZ=Pt().unescapeAll,Fs=Pt().escapeHtml,Wa={};Wa.code_inline=function(e,t,r,n,i){var o=e[t];return""+Fs(e[t].content)+""};Wa.code_block=function(e,t,r,n,i){var o=e[t];return""+Fs(e[t].content)+` -`};Wa.fence=function(e,t,r,n,i){var o=e[t],s=o.info?pZ(o.info).trim():"",l="",d="",h,v,y,b,D;return s&&(y=s.split(/(\s+)/g),l=y[0],d=y.slice(2).join("")),r.highlight?h=r.highlight(o.content,l,d)||Fs(o.content):h=Fs(o.content),h.indexOf(""+h+` -`):"
"+h+`
-`};Wa.image=function(e,t,r,n,i){var o=e[t];return o.attrs[o.attrIndex("alt")][1]=i.renderInlineAsText(o.children,r,n),i.renderToken(e,t,r)};Wa.hardbreak=function(e,t,r){return r.xhtmlOut?`
-`:`
-`};Wa.softbreak=function(e,t,r){return r.breaks?r.xhtmlOut?`
-`:`
-`:` -`};Wa.text=function(e,t){return Fs(e[t].content)};Wa.html_block=function(e,t){return e[t].content};Wa.html_inline=function(e,t){return e[t].content};function Ac(){this.rules=dZ({},Wa)}Ac.prototype.renderAttrs=function(t){var r,n,i;if(!t.attrs)return"";for(i="",r=0,n=t.attrs.length;r -`:">",o)};Ac.prototype.renderInline=function(e,t,r){for(var n,i="",o=this.rules,s=0,l=e.length;s{"use strict";function Oa(){this.__rules__=[],this.__cache__=null}Oa.prototype.__find__=function(e){for(var t=0;t{"use strict";var hZ=/\r\n?|\n/g,vZ=/\0/g;$F.exports=function(t){var r;r=t.src.replace(hZ,` -`),r=r.replace(vZ,"\uFFFD"),t.src=r}});var rM=G((Wse,tM)=>{"use strict";tM.exports=function(t){var r;t.inlineMode?(r=new t.Token("inline","",0),r.content=t.src,r.map=[0,1],r.children=[],t.tokens.push(r)):t.md.block.parse(t.src,t.md,t.env,t.tokens)}});var iM=G((Yse,nM)=>{"use strict";nM.exports=function(t){var r=t.tokens,n,i,o;for(i=0,o=r.length;i{"use strict";var gZ=Pt().arrayReplaceAt;function mZ(e){return/^\s]/i.test(e)}function yZ(e){return/^<\/a\s*>/i.test(e)}aM.exports=function(t){var r,n,i,o,s,l,d,h,v,y,b,D,_,k,T,S,m=t.tokens,w;if(!!t.md.options.linkify){for(n=0,i=m.length;n=0;r--){if(l=o[r],l.type==="link_close"){for(r--;o[r].level!==l.level&&o[r].type!=="link_open";)r--;continue}if(l.type==="html_inline"&&(mZ(l.content)&&_>0&&_--,yZ(l.content)&&_++),!(_>0)&&l.type==="text"&&t.md.linkify.test(l.content)){for(v=l.content,w=t.md.linkify.match(v),d=[],D=l.level,b=0,h=0;hb&&(s=new t.Token("text","",0),s.content=v.slice(b,y),s.level=D,d.push(s)),s=new t.Token("link_open","a",1),s.attrs=[["href",T]],s.level=D++,s.markup="linkify",s.info="auto",d.push(s),s=new t.Token("text","",0),s.content=S,s.level=D,d.push(s),s=new t.Token("link_close","a",-1),s.level=--D,s.markup="linkify",s.info="auto",d.push(s),b=w[h].lastIndex);b{"use strict";var uM=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,bZ=/\((c|tm|r|p)\)/i,TZ=/\((c|tm|r|p)\)/ig,_Z={c:"\xA9",r:"\xAE",p:"\xA7",tm:"\u2122"};function EZ(e,t){return _Z[t.toLowerCase()]}function SZ(e){var t,r,n=0;for(t=e.length-1;t>=0;t--)r=e[t],r.type==="text"&&!n&&(r.content=r.content.replace(TZ,EZ)),r.type==="link_open"&&r.info==="auto"&&n--,r.type==="link_close"&&r.info==="auto"&&n++}function kZ(e){var t,r,n=0;for(t=e.length-1;t>=0;t--)r=e[t],r.type==="text"&&!n&&uM.test(r.content)&&(r.content=r.content.replace(/\+-/g,"\xB1").replace(/\.{2,}/g,"\u2026").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/mg,"$1\u2014").replace(/(^|\s)--(?=\s|$)/mg,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg,"$1\u2013")),r.type==="link_open"&&r.info==="auto"&&n--,r.type==="link_close"&&r.info==="auto"&&n++}sM.exports=function(t){var r;if(!!t.md.options.typographer)for(r=t.tokens.length-1;r>=0;r--)t.tokens[r].type==="inline"&&(bZ.test(t.tokens[r].content)&&SZ(t.tokens[r].children),uM.test(t.tokens[r].content)&&kZ(t.tokens[r].children))}});var gM=G((Zse,vM)=>{"use strict";var cM=Pt().isWhiteSpace,fM=Pt().isPunctChar,dM=Pt().isMdAsciiPunct,OZ=/['"]/,pM=/['"]/g,hM="\u2019";function Wm(e,t,r){return e.substr(0,t)+r+e.substr(t+1)}function wZ(e,t){var r,n,i,o,s,l,d,h,v,y,b,D,_,k,T,S,m,w,x,L,O;for(x=[],r=0;r=0&&!(x[m].level<=d);m--);if(x.length=m+1,n.type!=="text")continue;i=n.content,s=0,l=i.length;e:for(;s=0)v=i.charCodeAt(o.index-1);else for(m=r-1;m>=0&&!(e[m].type==="softbreak"||e[m].type==="hardbreak");m--)if(!!e[m].content){v=e[m].content.charCodeAt(e[m].content.length-1);break}if(y=32,s=48&&v<=57&&(S=T=!1),T&&S&&(T=b,S=D),!T&&!S){w&&(n.content=Wm(n.content,o.index,hM));continue}if(S){for(m=x.length-1;m>=0&&(h=x[m],!(x[m].level=0;r--)t.tokens[r].type!=="inline"||!OZ.test(t.tokens[r].content)||wZ(t.tokens[r].children,t)}});var Ym=G(($se,mM)=>{"use strict";function Rc(e,t,r){this.type=e,this.tag=t,this.attrs=null,this.map=null,this.nesting=r,this.level=0,this.children=null,this.content="",this.markup="",this.info="",this.meta=null,this.block=!1,this.hidden=!1}Rc.prototype.attrIndex=function(t){var r,n,i;if(!this.attrs)return-1;for(r=this.attrs,n=0,i=r.length;n=0&&(n=this.attrs[r][1]),n};Rc.prototype.attrJoin=function(t,r){var n=this.attrIndex(t);n<0?this.attrPush([t,r]):this.attrs[n][1]=this.attrs[n][1]+" "+r};mM.exports=Rc});var TM=G((ele,bM)=>{"use strict";var NZ=Ym();function yM(e,t,r){this.src=e,this.env=r,this.tokens=[],this.inlineMode=!1,this.md=t}yM.prototype.Token=NZ;bM.exports=yM});var EM=G((tle,_M)=>{"use strict";var DZ=zm(),fO=[["normalize",eM()],["block",rM()],["inline",iM()],["linkify",oM()],["replacements",lM()],["smartquotes",gM()]];function dO(){this.ruler=new DZ;for(var e=0;e{"use strict";var pO=Pt().isSpace;function hO(e,t){var r=e.bMarks[t]+e.tShift[t],n=e.eMarks[t];return e.src.substr(r,n-r)}function SM(e){var t=[],r=0,n=e.length,i,o=!1,s=0,l="";for(i=e.charCodeAt(r);rn||(v=r+1,t.sCount[v]=4||(l=t.bMarks[v]+t.tShift[v],l>=t.eMarks[v])||(L=t.src.charCodeAt(l++),L!==124&&L!==45&&L!==58)||l>=t.eMarks[v]||(O=t.src.charCodeAt(l++),O!==124&&O!==45&&O!==58&&!pO(O))||L===45&&pO(O))return!1;for(;l=4||(y=SM(s),y.length&&y[0]===""&&y.shift(),y.length&&y[y.length-1]===""&&y.pop(),b=y.length,b===0||b!==_.length))return!1;if(i)return!0;for(m=t.parentType,t.parentType="table",x=t.md.block.ruler.getRules("blockquote"),D=t.push("table_open","table",1),D.map=T=[r,0],D=t.push("thead_open","thead",1),D.map=[r,r+1],D=t.push("tr_open","tr",1),D.map=[r,r+1],d=0;d=4)break;for(y=SM(s),y.length&&y[0]===""&&y.shift(),y.length&&y[y.length-1]===""&&y.pop(),v===r+2&&(D=t.push("tbody_open","tbody",1),D.map=S=[r+2,0]),D=t.push("tr_open","tr",1),D.map=[v,v+1],d=0;d{"use strict";wM.exports=function(t,r,n){var i,o,s;if(t.sCount[r]-t.blkIndent<4)return!1;for(o=i=r+1;i=4){i++,o=i;continue}break}return t.line=o,s=t.push("code_block","code",0),s.content=t.getLines(r,o,4+t.blkIndent,!1)+` -`,s.map=[r,t.line],!0}});var xM=G((ile,DM)=>{"use strict";DM.exports=function(t,r,n,i){var o,s,l,d,h,v,y,b=!1,D=t.bMarks[r]+t.tShift[r],_=t.eMarks[r];if(t.sCount[r]-t.blkIndent>=4||D+3>_||(o=t.src.charCodeAt(D),o!==126&&o!==96)||(h=D,D=t.skipChars(D,o),s=D-h,s<3)||(y=t.src.slice(h,D),l=t.src.slice(D,_),o===96&&l.indexOf(String.fromCharCode(o))>=0))return!1;if(i)return!0;for(d=r;d++,!(d>=n||(D=h=t.bMarks[d]+t.tShift[d],_=t.eMarks[d],D<_&&t.sCount[d]=4)&&(D=t.skipChars(D,o),!(D-h{"use strict";var CM=Pt().isSpace;LM.exports=function(t,r,n,i){var o,s,l,d,h,v,y,b,D,_,k,T,S,m,w,x,L,O,R,M,q=t.lineMax,z=t.bMarks[r]+t.tShift[r],B=t.eMarks[r];if(t.sCount[r]-t.blkIndent>=4||t.src.charCodeAt(z++)!==62)return!1;if(i)return!0;for(d=D=t.sCount[r]+1,t.src.charCodeAt(z)===32?(z++,d++,D++,o=!1,x=!0):t.src.charCodeAt(z)===9?(x=!0,(t.bsCount[r]+D)%4==3?(z++,d++,D++,o=!1):o=!0):x=!1,_=[t.bMarks[r]],t.bMarks[r]=z;z=B,m=[t.sCount[r]],t.sCount[r]=D-d,w=[t.tShift[r]],t.tShift[r]=z-t.bMarks[r],O=t.md.block.ruler.getRules("blockquote"),S=t.parentType,t.parentType="blockquote",b=r+1;b=B));b++){if(t.src.charCodeAt(z++)===62&&!M){for(d=D=t.sCount[b]+1,t.src.charCodeAt(z)===32?(z++,d++,D++,o=!1,x=!0):t.src.charCodeAt(z)===9?(x=!0,(t.bsCount[b]+D)%4==3?(z++,d++,D++,o=!1):o=!0):x=!1,_.push(t.bMarks[b]),t.bMarks[b]=z;z=B,k.push(t.bsCount[b]),t.bsCount[b]=t.sCount[b]+1+(x?1:0),m.push(t.sCount[b]),t.sCount[b]=D-d,w.push(t.tShift[b]),t.tShift[b]=z-t.bMarks[b];continue}if(v)break;for(L=!1,l=0,h=O.length;l",R.map=y=[r,0],t.md.block.tokenize(t,r,b),R=t.push("blockquote_close","blockquote",-1),R.markup=">",t.lineMax=q,t.parentType=S,y[1]=t.line,l=0;l{"use strict";var xZ=Pt().isSpace;AM.exports=function(t,r,n,i){var o,s,l,d,h=t.bMarks[r]+t.tShift[r],v=t.eMarks[r];if(t.sCount[r]-t.blkIndent>=4||(o=t.src.charCodeAt(h++),o!==42&&o!==45&&o!==95))return!1;for(s=1;h{"use strict";var jM=Pt().isSpace;function PM(e,t){var r,n,i,o;return n=e.bMarks[t]+e.tShift[t],i=e.eMarks[t],r=e.src.charCodeAt(n++),r!==42&&r!==45&&r!==43||n=o||(r=e.src.charCodeAt(i++),r<48||r>57))return-1;for(;;){if(i>=o)return-1;if(r=e.src.charCodeAt(i++),r>=48&&r<=57){if(i-n>=10)return-1;continue}if(r===41||r===46)break;return-1}return i=4||t.listIndent>=0&&t.sCount[r]-t.listIndent>=4&&t.sCount[r]=t.blkIndent&&(Fe=!0),(B=FM(t,r))>=0){if(y=!0,P=t.bMarks[r]+t.tShift[r],S=Number(t.src.slice(P,B-1)),Fe&&S!==1)return!1}else if((B=PM(t,r))>=0)y=!1;else return!1;if(Fe&&t.skipSpaces(B)>=t.eMarks[r])return!1;if(T=t.src.charCodeAt(B-1),i)return!0;for(k=t.tokens.length,y?(ge=t.push("ordered_list_open","ol",1),S!==1&&(ge.attrs=[["start",S]])):ge=t.push("bullet_list_open","ul",1),ge.map=_=[r,0],ge.markup=String.fromCharCode(T),w=r,Q=!1,xe=t.md.block.ruler.getRules("list"),O=t.parentType,t.parentType="list";w=m?h=1:h=x-v,h>4&&(h=1),d=v+h,ge=t.push("list_item_open","li",1),ge.markup=String.fromCharCode(T),ge.map=b=[r,0],y&&(ge.info=t.src.slice(P,B-1)),q=t.tight,M=t.tShift[r],R=t.sCount[r],L=t.listIndent,t.listIndent=t.blkIndent,t.blkIndent=d,t.tight=!0,t.tShift[r]=s-t.bMarks[r],t.sCount[r]=x,s>=m&&t.isEmpty(r+1)?t.line=Math.min(t.line+2,n):t.md.block.tokenize(t,r,n,!0),(!t.tight||Q)&&(Le=!1),Q=t.line-r>1&&t.isEmpty(t.line-1),t.blkIndent=t.listIndent,t.listIndent=L,t.tShift[r]=M,t.sCount[r]=R,t.tight=q,ge=t.push("list_item_close","li",-1),ge.markup=String.fromCharCode(T),w=r=t.line,b[1]=w,s=t.bMarks[r],w>=n||t.sCount[w]=4)break;for(he=!1,l=0,D=xe.length;l{"use strict";var LZ=Pt().normalizeReference,Jm=Pt().isSpace;VM.exports=function(t,r,n,i){var o,s,l,d,h,v,y,b,D,_,k,T,S,m,w,x,L=0,O=t.bMarks[r]+t.tShift[r],R=t.eMarks[r],M=r+1;if(t.sCount[r]-t.blkIndent>=4||t.src.charCodeAt(O)!==91)return!1;for(;++O3)&&!(t.sCount[M]<0)){for(m=!1,v=0,y=w.length;v{"use strict";GM.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]});var gO=G((cle,vO)=>{"use strict";var IZ="[a-zA-Z_:][a-zA-Z0-9:._-]*",AZ="[^\"'=<>`\\x00-\\x20]+",RZ="'[^']*'",jZ='"[^"]*"',PZ="(?:"+AZ+"|"+RZ+"|"+jZ+")",FZ="(?:\\s+"+IZ+"(?:\\s*=\\s*"+PZ+")?)",BM="<[A-Za-z][A-Za-z0-9\\-]*"+FZ+"*\\s*\\/?>",KM="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",MZ="|",qZ="<[?][\\s\\S]*?[?]>",VZ="]*>",UZ="",GZ=new RegExp("^(?:"+BM+"|"+KM+"|"+MZ+"|"+qZ+"|"+VZ+"|"+UZ+")"),QZ=new RegExp("^(?:"+BM+"|"+KM+")");vO.exports.HTML_TAG_RE=GZ;vO.exports.HTML_OPEN_CLOSE_TAG_RE=QZ});var zM=G((fle,HM)=>{"use strict";var BZ=QM(),KZ=gO().HTML_OPEN_CLOSE_TAG_RE,jc=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(KZ.source+"\\s*$"),/^$/,!1]];HM.exports=function(t,r,n,i){var o,s,l,d,h=t.bMarks[r]+t.tShift[r],v=t.eMarks[r];if(t.sCount[r]-t.blkIndent>=4||!t.md.options.html||t.src.charCodeAt(h)!==60)return!1;for(d=t.src.slice(h,v),o=0;o{"use strict";var WM=Pt().isSpace;YM.exports=function(t,r,n,i){var o,s,l,d,h=t.bMarks[r]+t.tShift[r],v=t.eMarks[r];if(t.sCount[r]-t.blkIndent>=4||(o=t.src.charCodeAt(h),o!==35||h>=v))return!1;for(s=1,o=t.src.charCodeAt(++h);o===35&&h6||hh&&WM(t.src.charCodeAt(l-1))&&(v=l),t.line=r+1,d=t.push("heading_open","h"+String(s),1),d.markup="########".slice(0,s),d.map=[r,t.line],d=t.push("inline","",0),d.content=t.src.slice(h,v).trim(),d.map=[r,t.line],d.children=[],d=t.push("heading_close","h"+String(s),-1),d.markup="########".slice(0,s)),!0)}});var ZM=G((ple,XM)=>{"use strict";XM.exports=function(t,r,n){var i,o,s,l,d,h,v,y,b,D=r+1,_,k=t.md.block.ruler.getRules("paragraph");if(t.sCount[r]-t.blkIndent>=4)return!1;for(_=t.parentType,t.parentType="paragraph";D3)){if(t.sCount[D]>=t.blkIndent&&(h=t.bMarks[D]+t.tShift[D],v=t.eMarks[D],h=v)))){y=b===61?1:2;break}if(!(t.sCount[D]<0)){for(o=!1,s=0,l=k.length;s{"use strict";$M.exports=function(t,r){var n,i,o,s,l,d,h=r+1,v=t.md.block.ruler.getRules("paragraph"),y=t.lineMax;for(d=t.parentType,t.parentType="paragraph";h3)&&!(t.sCount[h]<0)){for(i=!1,o=0,s=v.length;o{"use strict";var tq=Ym(),Xm=Pt().isSpace;function Ya(e,t,r,n){var i,o,s,l,d,h,v,y;for(this.src=e,this.md=t,this.env=r,this.tokens=n,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.listIndent=-1,this.parentType="root",this.level=0,this.result="",o=this.src,y=!1,s=l=h=v=0,d=o.length;l0&&this.level++,this.tokens.push(n),n};Ya.prototype.isEmpty=function(t){return this.bMarks[t]+this.tShift[t]>=this.eMarks[t]};Ya.prototype.skipEmptyLines=function(t){for(var r=this.lineMax;tr;)if(!Xm(this.src.charCodeAt(--t)))return t+1;return t};Ya.prototype.skipChars=function(t,r){for(var n=this.src.length;tn;)if(r!==this.src.charCodeAt(--t))return t+1;return t};Ya.prototype.getLines=function(t,r,n,i){var o,s,l,d,h,v,y,b=t;if(t>=r)return"";for(v=new Array(r-t),o=0;bn?v[o]=new Array(s-n+1).join(" ")+this.src.slice(d,h):v[o]=this.src.slice(d,h)}return v.join("")};Ya.prototype.Token=tq;rq.exports=Ya});var aq=G((gle,iq)=>{"use strict";var HZ=zm(),Zm=[["table",OM(),["paragraph","reference"]],["code",NM()],["fence",xM(),["paragraph","reference","blockquote","list"]],["blockquote",IM(),["paragraph","reference","blockquote","list"]],["hr",RM(),["paragraph","reference","blockquote","list"]],["list",qM(),["paragraph","reference","blockquote"]],["reference",UM()],["html_block",zM(),["paragraph","reference","blockquote"]],["heading",JM(),["paragraph","reference","blockquote"]],["lheading",ZM()],["paragraph",eq()]];function $m(){this.ruler=new HZ;for(var e=0;e=r||e.sCount[l]=h){e.line=r;break}for(i=0;i{"use strict";function zZ(e){switch(e){case 10:case 33:case 35:case 36:case 37:case 38:case 42:case 43:case 45:case 58:case 60:case 61:case 62:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 125:case 126:return!0;default:return!1}}oq.exports=function(t,r){for(var n=t.pos;n{"use strict";var WZ=Pt().isSpace;sq.exports=function(t,r){var n,i,o,s=t.pos;if(t.src.charCodeAt(s)!==10)return!1;if(n=t.pending.length-1,i=t.posMax,!r)if(n>=0&&t.pending.charCodeAt(n)===32)if(n>=1&&t.pending.charCodeAt(n-1)===32){for(o=n-1;o>=1&&t.pending.charCodeAt(o-1)===32;)o--;t.pending=t.pending.slice(0,o),t.push("hardbreak","br",0)}else t.pending=t.pending.slice(0,-1),t.push("softbreak","br",0);else t.push("softbreak","br",0);for(s++;s{"use strict";var YZ=Pt().isSpace,mO=[];for(yO=0;yO<256;yO++)mO.push(0);var yO;"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(e){mO[e.charCodeAt(0)]=1});cq.exports=function(t,r){var n,i=t.pos,o=t.posMax;if(t.src.charCodeAt(i)!==92)return!1;if(i++,i{"use strict";dq.exports=function(t,r){var n,i,o,s,l,d,h,v,y=t.pos,b=t.src.charCodeAt(y);if(b!==96)return!1;for(n=y,y++,i=t.posMax;y{"use strict";bO.exports.tokenize=function(t,r){var n,i,o,s,l,d=t.pos,h=t.src.charCodeAt(d);if(r||h!==126||(i=t.scanDelims(t.pos,!0),s=i.length,l=String.fromCharCode(h),s<2))return!1;for(s%2&&(o=t.push("text","",0),o.content=l,s--),n=0;n{"use strict";_O.exports.tokenize=function(t,r){var n,i,o,s=t.pos,l=t.src.charCodeAt(s);if(r||l!==95&&l!==42)return!1;for(i=t.scanDelims(t.pos,l===42),n=0;n=0;r--)n=t[r],!(n.marker!==95&&n.marker!==42)&&n.end!==-1&&(i=t[n.end],l=r>0&&t[r-1].end===n.end+1&&t[r-1].marker===n.marker&&t[r-1].token===n.token-1&&t[n.end+1].token===i.token+1,s=String.fromCharCode(n.marker),o=e.tokens[n.token],o.type=l?"strong_open":"em_open",o.tag=l?"strong":"em",o.nesting=1,o.markup=l?s+s:s,o.content="",o=e.tokens[i.token],o.type=l?"strong_close":"em_close",o.tag=l?"strong":"em",o.nesting=-1,o.markup=l?s+s:s,o.content="",l&&(e.tokens[t[r-1].token].content="",e.tokens[t[n.end+1].token].content="",r--))}_O.exports.postProcess=function(t){var r,n=t.tokens_meta,i=t.tokens_meta.length;for(vq(t,t.delimiters),r=0;r{"use strict";var JZ=Pt().normalizeReference,SO=Pt().isSpace;gq.exports=function(t,r){var n,i,o,s,l,d,h,v,y,b="",D="",_=t.pos,k=t.posMax,T=t.pos,S=!0;if(t.src.charCodeAt(t.pos)!==91||(l=t.pos+1,s=t.md.helpers.parseLinkLabel(t,t.pos,!0),s<0))return!1;if(d=s+1,d=k)return!1;if(T=d,h=t.md.helpers.parseLinkDestination(t.src,d,t.posMax),h.ok){for(b=t.md.normalizeLink(h.str),t.md.validateLink(b)?d=h.pos:b="",T=d;d=k||t.src.charCodeAt(d)!==41)&&(S=!0),d++}if(S){if(typeof t.env.references=="undefined")return!1;if(d=0?o=t.src.slice(T,d++):d=s+1):d=s+1,o||(o=t.src.slice(l,s)),v=t.env.references[JZ(o)],!v)return t.pos=_,!1;b=v.href,D=v.title}return r||(t.pos=l,t.posMax=s,y=t.push("link_open","a",1),y.attrs=n=[["href",b]],D&&n.push(["title",D]),t.md.inline.tokenize(t),y=t.push("link_close","a",-1)),t.pos=d,t.posMax=k,!0}});var bq=G((kle,yq)=>{"use strict";var XZ=Pt().normalizeReference,kO=Pt().isSpace;yq.exports=function(t,r){var n,i,o,s,l,d,h,v,y,b,D,_,k,T="",S=t.pos,m=t.posMax;if(t.src.charCodeAt(t.pos)!==33||t.src.charCodeAt(t.pos+1)!==91||(d=t.pos+2,l=t.md.helpers.parseLinkLabel(t,t.pos+1,!1),l<0))return!1;if(h=l+1,h=m)return!1;for(k=h,y=t.md.helpers.parseLinkDestination(t.src,h,t.posMax),y.ok&&(T=t.md.normalizeLink(y.str),t.md.validateLink(T)?h=y.pos:T=""),k=h;h=m||t.src.charCodeAt(h)!==41)return t.pos=S,!1;h++}else{if(typeof t.env.references=="undefined")return!1;if(h=0?s=t.src.slice(k,h++):h=l+1):h=l+1,s||(s=t.src.slice(d,l)),v=t.env.references[XZ(s)],!v)return t.pos=S,!1;T=v.href,b=v.title}return r||(o=t.src.slice(d,l),t.md.inline.parse(o,t.md,t.env,_=[]),D=t.push("image","img",0),D.attrs=n=[["src",T],["alt",""]],D.children=_,D.content=o,b&&n.push(["title",b])),t.pos=h,t.posMax=m,!0}});var _q=G((Ole,Tq)=>{"use strict";var ZZ=/^([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,$Z=/^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$/;Tq.exports=function(t,r){var n,i,o,s,l,d,h=t.pos;if(t.src.charCodeAt(h)!==60)return!1;for(l=t.pos,d=t.posMax;;){if(++h>=d||(s=t.src.charCodeAt(h),s===60))return!1;if(s===62)break}return n=t.src.slice(l+1,h),$Z.test(n)?(i=t.md.normalizeLink(n),t.md.validateLink(i)?(r||(o=t.push("link_open","a",1),o.attrs=[["href",i]],o.markup="autolink",o.info="auto",o=t.push("text","",0),o.content=t.md.normalizeLinkText(n),o=t.push("link_close","a",-1),o.markup="autolink",o.info="auto"),t.pos+=n.length+2,!0):!1):ZZ.test(n)?(i=t.md.normalizeLink("mailto:"+n),t.md.validateLink(i)?(r||(o=t.push("link_open","a",1),o.attrs=[["href",i]],o.markup="autolink",o.info="auto",o=t.push("text","",0),o.content=t.md.normalizeLinkText(n),o=t.push("link_close","a",-1),o.markup="autolink",o.info="auto"),t.pos+=n.length+2,!0):!1):!1}});var Sq=G((wle,Eq)=>{"use strict";var e$=gO().HTML_TAG_RE;function t$(e){var t=e|32;return t>=97&&t<=122}Eq.exports=function(t,r){var n,i,o,s,l=t.pos;return!t.md.options.html||(o=t.posMax,t.src.charCodeAt(l)!==60||l+2>=o)||(n=t.src.charCodeAt(l+1),n!==33&&n!==63&&n!==47&&!t$(n))||(i=t.src.slice(l).match(e$),!i)?!1:(r||(s=t.push("html_inline","",0),s.content=t.src.slice(l,l+i[0].length)),t.pos+=i[0].length,!0)}});var Nq=G((Nle,wq)=>{"use strict";var kq=oO(),r$=Pt().has,n$=Pt().isValidEntityCode,Oq=Pt().fromCodePoint,i$=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,a$=/^&([a-z][a-z0-9]{1,31});/i;wq.exports=function(t,r){var n,i,o,s=t.pos,l=t.posMax;if(t.src.charCodeAt(s)!==38)return!1;if(s+1{"use strict";function Dq(e,t){var r,n,i,o,s,l,d,h,v={},y=t.length;if(!!y){var b=0,D=-2,_=[];for(r=0;rs;n-=_[n]+1)if(o=t[n],o.marker===i.marker&&o.open&&o.end<0&&(d=!1,(o.close||i.open)&&(o.length+i.length)%3==0&&(o.length%3!=0||i.length%3!=0)&&(d=!0),!d)){h=n>0&&!t[n-1].open?_[n-1]+1:0,_[r]=r-n+h,_[n]=h,i.open=!1,o.end=r,o.close=!1,l=-1,D=-2;break}l!==-1&&(v[i.marker][(i.open?3:0)+(i.length||0)%3]=l)}}}xq.exports=function(t){var r,n=t.tokens_meta,i=t.tokens_meta.length;for(Dq(t,t.delimiters),r=0;r{"use strict";Lq.exports=function(t){var r,n,i=0,o=t.tokens,s=t.tokens.length;for(r=n=0;r0&&i++,o[r].type==="text"&&r+1{"use strict";var OO=Ym(),Aq=Pt().isWhiteSpace,Rq=Pt().isPunctChar,jq=Pt().isMdAsciiPunct;function jp(e,t,r,n){this.src=e,this.env=r,this.md=t,this.tokens=n,this.tokens_meta=Array(n.length),this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[],this._prev_delimiters=[],this.backticks={},this.backticksScanned=!1}jp.prototype.pushPending=function(){var e=new OO("text","",0);return e.content=this.pending,e.level=this.pendingLevel,this.tokens.push(e),this.pending="",e};jp.prototype.push=function(e,t,r){this.pending&&this.pushPending();var n=new OO(e,t,r),i=null;return r<0&&(this.level--,this.delimiters=this._prev_delimiters.pop()),n.level=this.level,r>0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],i={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(n),this.tokens_meta.push(i),n};jp.prototype.scanDelims=function(e,t){var r=e,n,i,o,s,l,d,h,v,y,b=!0,D=!0,_=this.posMax,k=this.src.charCodeAt(e);for(n=e>0?this.src.charCodeAt(e-1):32;r<_&&this.src.charCodeAt(r)===k;)r++;return o=r-e,i=r<_?this.src.charCodeAt(r):32,h=jq(n)||Rq(String.fromCharCode(n)),y=jq(i)||Rq(String.fromCharCode(i)),d=Aq(n),v=Aq(i),v?b=!1:y&&(d||h||(b=!1)),d?D=!1:h&&(v||y||(D=!1)),t?(s=b,l=D):(s=b&&(!D||h),l=D&&(!b||y)),{can_open:s,can_close:l,length:o}};jp.prototype.Token=OO;Pq.exports=jp});var Vq=G((Lle,qq)=>{"use strict";var Mq=zm(),wO=[["text",uq()],["newline",lq()],["escape",fq()],["backticks",pq()],["strikethrough",TO().tokenize],["emphasis",EO().tokenize],["link",mq()],["image",bq()],["autolink",_q()],["html_inline",Sq()],["entity",Nq()]],NO=[["balance_pairs",Cq()],["strikethrough",TO().postProcess],["emphasis",EO().postProcess],["text_collapse",Iq()]];function Pp(){var e;for(this.ruler=new Mq,e=0;e=o)break;continue}e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()};Pp.prototype.parse=function(e,t,r,n){var i,o,s,l=new this.State(e,t,r,n);for(this.tokenize(l),o=this.ruler2.getRules(""),s=o.length,i=0;i{"use strict";Uq.exports=function(e){var t={};t.src_Any=sO().source,t.src_Cc=lO().source,t.src_Z=cO().source,t.src_P=Gm().source,t.src_ZPCc=[t.src_Z,t.src_P,t.src_Cc].join("|"),t.src_ZCc=[t.src_Z,t.src_Cc].join("|");var r="[><\uFF5C]";return t.src_pseudo_letter="(?:(?!"+r+"|"+t.src_ZPCc+")"+t.src_Any+")",t.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",t.src_auth="(?:(?:(?!"+t.src_ZCc+"|[@/\\[\\]()]).)+@)?",t.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",t.src_host_terminator="(?=$|"+r+"|"+t.src_ZPCc+")(?!-|_|:\\d|\\.-|\\.(?!$|"+t.src_ZPCc+"))",t.src_path="(?:[/?#](?:(?!"+t.src_ZCc+"|"+r+`|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!`+t.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+t.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+t.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+t.src_ZCc+`|["]).)+\\"|\\'(?:(?!`+t.src_ZCc+"|[']).)+\\'|\\'(?="+t.src_pseudo_letter+"|[-]).|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!"+t.src_ZCc+"|[.]).|"+(e&&e["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+",(?!"+t.src_ZCc+").|;(?!"+t.src_ZCc+").|\\!+(?!"+t.src_ZCc+"|[!]).|\\?(?!"+t.src_ZCc+"|[?]).)+|\\/)?",t.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*',t.src_xn="xn--[a-z0-9\\-]{1,59}",t.src_domain_root="(?:"+t.src_xn+"|"+t.src_pseudo_letter+"{1,63})",t.src_domain="(?:"+t.src_xn+"|(?:"+t.src_pseudo_letter+")|(?:"+t.src_pseudo_letter+"(?:-|"+t.src_pseudo_letter+"){0,61}"+t.src_pseudo_letter+"))",t.src_host="(?:(?:(?:(?:"+t.src_domain+")\\.)*"+t.src_domain+"))",t.tpl_host_fuzzy="(?:"+t.src_ip4+"|(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%)))",t.tpl_host_no_ip_fuzzy="(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%))",t.src_host_strict=t.src_host+t.src_host_terminator,t.tpl_host_fuzzy_strict=t.tpl_host_fuzzy+t.src_host_terminator,t.src_host_port_strict=t.src_host+t.src_port+t.src_host_terminator,t.tpl_host_port_fuzzy_strict=t.tpl_host_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_port_no_ip_fuzzy_strict=t.tpl_host_no_ip_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+t.src_ZPCc+"|>|$))",t.tpl_email_fuzzy="(^|"+r+'|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uFF5C]|"+t.src_ZPCc+"))((?![$+<=>^`|\uFF5C])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}});var Wq=G((Ale,zq)=>{"use strict";function DO(e){var t=Array.prototype.slice.call(arguments,1);return t.forEach(function(r){!r||Object.keys(r).forEach(function(n){e[n]=r[n]})}),e}function ey(e){return Object.prototype.toString.call(e)}function o$(e){return ey(e)==="[object String]"}function u$(e){return ey(e)==="[object Object]"}function s$(e){return ey(e)==="[object RegExp]"}function Qq(e){return ey(e)==="[object Function]"}function l$(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var Bq={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};function c$(e){return Object.keys(e||{}).reduce(function(t,r){return t||Bq.hasOwnProperty(r)},!1)}var f$={"http:":{validate:function(e,t,r){var n=e.slice(t);return r.re.http||(r.re.http=new RegExp("^\\/\\/"+r.re.src_auth+r.re.src_host_port_strict+r.re.src_path,"i")),r.re.http.test(n)?n.match(r.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,r){var n=e.slice(t);return r.re.no_http||(r.re.no_http=new RegExp("^"+r.re.src_auth+"(?:localhost|(?:(?:"+r.re.src_domain+")\\.)+"+r.re.src_domain_root+")"+r.re.src_port+r.re.src_host_terminator+r.re.src_path,"i")),r.re.no_http.test(n)?t>=3&&e[t-3]===":"||t>=3&&e[t-3]==="/"?0:n.match(r.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,r){var n=e.slice(t);return r.re.mailto||(r.re.mailto=new RegExp("^"+r.re.src_email_name+"@"+r.re.src_host_strict,"i")),r.re.mailto.test(n)?n.match(r.re.mailto)[0].length:0}}},d$="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",p$="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function h$(e){e.__index__=-1,e.__text_cache__=""}function v$(e){return function(t,r){var n=t.slice(r);return e.test(n)?n.match(e)[0].length:0}}function Kq(){return function(e,t){t.normalize(e)}}function ty(e){var t=e.re=Gq()(e.__opts__),r=e.__tlds__.slice();e.onCompile(),e.__tlds_replaced__||r.push(d$),r.push(t.src_xn),t.src_tlds=r.join("|");function n(l){return l.replace("%TLDS%",t.src_tlds)}t.email_fuzzy=RegExp(n(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(n(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(n(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(n(t.tpl_host_fuzzy_test),"i");var i=[];e.__compiled__={};function o(l,d){throw new Error('(LinkifyIt) Invalid schema "'+l+'": '+d)}Object.keys(e.__schemas__).forEach(function(l){var d=e.__schemas__[l];if(d!==null){var h={validate:null,link:null};if(e.__compiled__[l]=h,u$(d)){s$(d.validate)?h.validate=v$(d.validate):Qq(d.validate)?h.validate=d.validate:o(l,d),Qq(d.normalize)?h.normalize=d.normalize:d.normalize?o(l,d):h.normalize=Kq();return}if(o$(d)){i.push(l);return}o(l,d)}}),i.forEach(function(l){!e.__compiled__[e.__schemas__[l]]||(e.__compiled__[l].validate=e.__compiled__[e.__schemas__[l]].validate,e.__compiled__[l].normalize=e.__compiled__[e.__schemas__[l]].normalize)}),e.__compiled__[""]={validate:null,normalize:Kq()};var s=Object.keys(e.__compiled__).filter(function(l){return l.length>0&&e.__compiled__[l]}).map(l$).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><\uFF5C]|"+t.src_ZPCc+"))("+s+")","ig"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),h$(e)}function g$(e,t){var r=e.__index__,n=e.__last_index__,i=e.__text_cache__.slice(r,n);this.schema=e.__schema__.toLowerCase(),this.index=r+t,this.lastIndex=n+t,this.raw=i,this.text=i,this.url=i}function Hq(e,t){var r=new g$(e,t);return e.__compiled__[r.schema].normalize(r,e),r}function Zi(e,t){if(!(this instanceof Zi))return new Zi(e,t);t||c$(e)&&(t=e,e={}),this.__opts__=DO({},Bq,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=DO({},f$,e),this.__compiled__={},this.__tlds__=p$,this.__tlds_replaced__=!1,this.re={},ty(this)}Zi.prototype.add=function(t,r){return this.__schemas__[t]=r,ty(this),this};Zi.prototype.set=function(t){return this.__opts__=DO(this.__opts__,t),this};Zi.prototype.test=function(t){if(this.__text_cache__=t,this.__index__=-1,!t.length)return!1;var r,n,i,o,s,l,d,h,v;if(this.re.schema_test.test(t)){for(d=this.re.schema_search,d.lastIndex=0;(r=d.exec(t))!==null;)if(o=this.testSchemaAt(t,r[2],d.lastIndex),o){this.__schema__=r[2],this.__index__=r.index+r[1].length,this.__last_index__=r.index+r[0].length+o;break}}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(h=t.search(this.re.host_fuzzy_test),h>=0&&(this.__index__<0||h=0&&(i=t.match(this.re.email_fuzzy))!==null&&(s=i.index+i[1].length,l=i.index+i[0].length,(this.__index__<0||sthis.__last_index__)&&(this.__schema__="mailto:",this.__index__=s,this.__last_index__=l))),this.__index__>=0};Zi.prototype.pretest=function(t){return this.re.pretest.test(t)};Zi.prototype.testSchemaAt=function(t,r,n){return this.__compiled__[r.toLowerCase()]?this.__compiled__[r.toLowerCase()].validate(t,n,this):0};Zi.prototype.match=function(t){var r=0,n=[];this.__index__>=0&&this.__text_cache__===t&&(n.push(Hq(this,r)),r=this.__last_index__);for(var i=r?t.slice(r):t;this.test(i);)n.push(Hq(this,r)),i=i.slice(this.__last_index__),r+=this.__last_index__;return n.length?n:null};Zi.prototype.tlds=function(t,r){return t=Array.isArray(t)?t:[t],r?(this.__tlds__=this.__tlds__.concat(t).sort().filter(function(n,i,o){return n!==o[i-1]}).reverse(),ty(this),this):(this.__tlds__=t.slice(),this.__tlds_replaced__=!0,ty(this),this)};Zi.prototype.normalize=function(t){t.schema||(t.url="http://"+t.url),t.schema==="mailto:"&&!/^mailto:/i.test(t.url)&&(t.url="mailto:"+t.url)};Zi.prototype.onCompile=function(){};zq.exports=Zi});var aV=G((Rle,iV)=>{"use strict";var Pc=2147483647,Ja=36,xO=1,Fp=26,m$=38,y$=700,Yq=72,Jq=128,Xq="-",b$=/^xn--/,T$=/[^\0-\x7E]/,_$=/[\x2E\u3002\uFF0E\uFF61]/g,E$={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},CO=Ja-xO,Xa=Math.floor,LO=String.fromCharCode;function Ms(e){throw new RangeError(E$[e])}function S$(e,t){let r=[],n=e.length;for(;n--;)r[n]=t(e[n]);return r}function Zq(e,t){let r=e.split("@"),n="";r.length>1&&(n=r[0]+"@",e=r[1]),e=e.replace(_$,".");let i=e.split("."),o=S$(i,t).join(".");return n+o}function $q(e){let t=[],r=0,n=e.length;for(;r=55296&&i<=56319&&rString.fromCodePoint(...e),O$=function(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:Ja},eV=function(e,t){return e+22+75*(e<26)-((t!=0)<<5)},tV=function(e,t,r){let n=0;for(e=r?Xa(e/y$):e>>1,e+=Xa(e/t);e>CO*Fp>>1;n+=Ja)e=Xa(e/CO);return Xa(n+(CO+1)*e/(e+m$))},rV=function(e){let t=[],r=e.length,n=0,i=Jq,o=Yq,s=e.lastIndexOf(Xq);s<0&&(s=0);for(let l=0;l=128&&Ms("not-basic"),t.push(e.charCodeAt(l));for(let l=s>0?s+1:0;l=r&&Ms("invalid-input");let b=O$(e.charCodeAt(l++));(b>=Ja||b>Xa((Pc-n)/v))&&Ms("overflow"),n+=b*v;let D=y<=o?xO:y>=o+Fp?Fp:y-o;if(bXa(Pc/_)&&Ms("overflow"),v*=_}let h=t.length+1;o=tV(n-d,h,d==0),Xa(n/h)>Pc-i&&Ms("overflow"),i+=Xa(n/h),n%=h,t.splice(n++,0,i)}return String.fromCodePoint(...t)},nV=function(e){let t=[];e=$q(e);let r=e.length,n=Jq,i=0,o=Yq;for(let d of e)d<128&&t.push(LO(d));let s=t.length,l=s;for(s&&t.push(Xq);l=n&&vXa((Pc-i)/h)&&Ms("overflow"),i+=(d-n)*h,n=d;for(let v of e)if(vPc&&Ms("overflow"),v==n){let y=i;for(let b=Ja;;b+=Ja){let D=b<=o?xO:b>=o+Fp?Fp:b-o;if(y{"use strict";oV.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201C\u201D\u2018\u2019",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}}});var lV=G((Ple,sV)=>{"use strict";sV.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201C\u201D\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","text_collapse"]}}}});var fV=G((Fle,cV)=>{"use strict";cV.exports={options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201C\u201D\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","text_collapse"]}}}});var vV=G((Mle,hV)=>{"use strict";var Mp=Pt(),x$=YF(),C$=XF(),L$=EM(),I$=aq(),A$=Vq(),R$=Wq(),qs=uO(),dV=aV(),j$={default:uV(),zero:lV(),commonmark:fV()},P$=/^(vbscript|javascript|file|data):/,F$=/^data:image\/(gif|png|jpeg|webp);/;function M$(e){var t=e.trim().toLowerCase();return P$.test(t)?!!F$.test(t):!0}var pV=["http:","https:","mailto:"];function q$(e){var t=qs.parse(e,!0);if(t.hostname&&(!t.protocol||pV.indexOf(t.protocol)>=0))try{t.hostname=dV.toASCII(t.hostname)}catch(r){}return qs.encode(qs.format(t))}function V$(e){var t=qs.parse(e,!0);if(t.hostname&&(!t.protocol||pV.indexOf(t.protocol)>=0))try{t.hostname=dV.toUnicode(t.hostname)}catch(r){}return qs.decode(qs.format(t),qs.decode.defaultChars+"%")}function $i(e,t){if(!(this instanceof $i))return new $i(e,t);t||Mp.isString(e)||(t=e||{},e="default"),this.inline=new A$,this.block=new I$,this.core=new L$,this.renderer=new C$,this.linkify=new R$,this.validateLink=M$,this.normalizeLink=q$,this.normalizeLinkText=V$,this.utils=Mp,this.helpers=Mp.assign({},x$),this.options={},this.configure(e),t&&this.set(t)}$i.prototype.set=function(e){return Mp.assign(this.options,e),this};$i.prototype.configure=function(e){var t=this,r;if(Mp.isString(e)&&(r=e,e=j$[r],!e))throw new Error('Wrong `markdown-it` preset "'+r+'", check name');if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(n){e.components[n].rules&&t[n].ruler.enableOnly(e.components[n].rules),e.components[n].rules2&&t[n].ruler2.enableOnly(e.components[n].rules2)}),this};$i.prototype.enable=function(e,t){var r=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(i){r=r.concat(this[i].ruler.enable(e,!0))},this),r=r.concat(this.inline.ruler2.enable(e,!0));var n=e.filter(function(i){return r.indexOf(i)<0});if(n.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+n);return this};$i.prototype.disable=function(e,t){var r=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(i){r=r.concat(this[i].ruler.disable(e,!0))},this),r=r.concat(this.inline.ruler2.disable(e,!0));var n=e.filter(function(i){return r.indexOf(i)<0});if(n.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+n);return this};$i.prototype.use=function(e){var t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this};$i.prototype.parse=function(e,t){if(typeof e!="string")throw new Error("Input data should be a String");var r=new this.core.State(e,this,t);return this.core.process(r),r.tokens};$i.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)};$i.prototype.parseInline=function(e,t){var r=new this.core.State(e,this,t);return r.inlineMode=!0,this.core.process(r),r.tokens};$i.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};hV.exports=$i});var ry=G((qle,gV)=>{"use strict";gV.exports=vV()});var bV=G((Ule,yV)=>{"use strict";var Q$=/["'&<>]/;yV.exports=B$;function B$(e){var t=""+e,r=Q$.exec(t);if(!r)return t;var n,i="",o=0,s=0;for(o=r.index;o{(function(e,t){typeof IO=="object"&&typeof AO!="undefined"?AO.exports=t():typeof define=="function"&&define.amd?define(t):(e=e||self,e.CodeMirror=t())})(IO,function(){"use strict";var e=navigator.userAgent,t=navigator.platform,r=/gecko\/\d/i.test(e),n=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),s=n||i||o,l=s&&(n?document.documentMode||6:+(o||i)[1]),d=!o&&/WebKit\//.test(e),h=d&&/Qt\/\d+\.\d+/.test(e),v=!o&&/Chrome\/(\d+)/.exec(e),y=v&&+v[1],b=/Opera\//.test(e),D=/Apple Computer/.test(navigator.vendor),_=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),k=/PhantomJS/.test(e),T=D&&(/Mobile\/\w+/.test(e)||navigator.maxTouchPoints>2),S=/Android/.test(e),m=T||S||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),w=T||/Mac/.test(t),x=/\bCrOS\b/.test(e),L=/win/i.test(t),O=b&&e.match(/Version\/(\d*\.\d*)/);O&&(O=Number(O[1])),O&&O>=15&&(b=!1,d=!0);var R=w&&(h||b&&(O==null||O<12.11)),M=r||s&&l>=9;function q(a){return new RegExp("(^|\\s)"+a+"(?:$|\\s)\\s*")}var z=function(a,u){var f=a.className,c=q(u).exec(f);if(c){var p=f.slice(c.index+c[0].length);a.className=f.slice(0,c.index)+(p?c[1]+p:"")}};function B(a){for(var u=a.childNodes.length;u>0;--u)a.removeChild(a.firstChild);return a}function Q(a,u){return B(a).appendChild(u)}function P(a,u,f,c){var p=document.createElement(a);if(f&&(p.className=f),c&&(p.style.cssText=c),typeof u=="string")p.appendChild(document.createTextNode(u));else if(u)for(var g=0;g=u)return E+(u-g);E+=N-g,E+=f-E%f,g=N+1}}var ce=function(){this.id=null,this.f=null,this.time=0,this.handler=Ot(this.onTimeout,this)};ce.prototype.onTimeout=function(a){a.id=0,a.time<=+new Date?a.f():setTimeout(a.handler,a.time-+new Date)},ce.prototype.set=function(a,u){this.f=u;var f=+new Date+a;(!this.id||f=u)return c+Math.min(E,u-p);if(p+=g-c,p+=f-p%f,c=g+1,p>=u)return c}}var me=[""];function fe(a){for(;me.length<=a;)me.push(se(me)+" ");return me[a]}function se(a){return a[a.length-1]}function Ue(a,u){for(var f=[],c=0;c"\x80"&&(a.toUpperCase()!=a.toLowerCase()||Dn.test(a))}function dn(a,u){return u?u.source.indexOf("\\w")>-1&&Ei(a)?!0:u.test(a):Ei(a)}function Hn(a){for(var u in a)if(a.hasOwnProperty(u)&&a[u])return!1;return!0}var pn=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function Pi(a){return a.charCodeAt(0)>=768&&pn.test(a)}function Qr(a,u,f){for(;(f<0?u>0:uf?-1:1;;){if(u==f)return u;var p=(u+f)/2,g=c<0?Math.ceil(p):Math.floor(p);if(g==u)return a(g)?u:f;a(g)?f=g:u=g+c}}function hn(a,u,f,c){if(!a)return c(u,f,"ltr",0);for(var p=!1,g=0;gu||u==f&&E.to==u)&&(c(Math.max(E.from,u),Math.min(E.to,f),E.level==1?"rtl":"ltr",g),p=!0)}p||c(u,f,"ltr")}var zn=null;function vr(a,u,f){var c;zn=null;for(var p=0;pu)return p;g.to==u&&(g.from!=g.to&&f=="before"?c=p:zn=p),g.from==u&&(g.from!=g.to&&f!="before"?c=p:zn=p)}return c!=null?c:zn}var Ro=function(){var a="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",u="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function f(I){return I<=247?a.charAt(I):1424<=I&&I<=1524?"R":1536<=I&&I<=1785?u.charAt(I-1536):1774<=I&&I<=2220?"r":8192<=I&&I<=8203?"w":I==8204?"b":"L"}var c=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,p=/[stwN]/,g=/[LRr]/,E=/[Lb1n]/,N=/[1n]/;function C(I,U,K){this.level=I,this.from=U,this.to=K}return function(I,U){var K=U=="ltr"?"L":"R";if(I.length==0||U=="ltr"&&!c.test(I))return!1;for(var $=I.length,X=[],ae=0;ae<$;++ae)X.push(f(I.charCodeAt(ae)));for(var le=0,pe=K;le<$;++le){var be=X[le];be=="m"?X[le]=pe:pe=be}for(var Ne=0,Te=K;Ne<$;++Ne){var Ce=X[Ne];Ce=="1"&&Te=="r"?X[Ne]="n":g.test(Ce)&&(Te=Ce,Ce=="r"&&(X[Ne]="R"))}for(var Ge=1,qe=X[0];Ge<$-1;++Ge){var lt=X[Ge];lt=="+"&&qe=="1"&&X[Ge+1]=="1"?X[Ge]="1":lt==","&&qe==X[Ge+1]&&(qe=="1"||qe=="n")&&(X[Ge]=qe),qe=lt}for(var Ht=0;Ht<$;++Ht){var zr=X[Ht];if(zr==",")X[Ht]="N";else if(zr=="%"){var lr=void 0;for(lr=Ht+1;lr<$&&X[lr]=="%";++lr);for(var li=Ht&&X[Ht-1]=="!"||lr<$&&X[lr]=="1"?"1":"N",Jn=Ht;Jn-1&&(c[u]=p.slice(0,g).concat(p.slice(g+1)))}}}function Ft(a,u){var f=Gu(a,u);if(!!f.length)for(var c=Array.prototype.slice.call(arguments,2),p=0;p0}function un(a){a.prototype.on=function(u,f){_e(this,u,f)},a.prototype.off=function(u,f){Ar(this,u,f)}}function ee(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function F(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function Y(a){return a.defaultPrevented!=null?a.defaultPrevented:a.returnValue==!1}function J(a){ee(a),F(a)}function V(a){return a.target||a.srcElement}function A(a){var u=a.which;return u==null&&(a.button&1?u=1:a.button&2?u=3:a.button&4&&(u=2)),w&&a.ctrlKey&&u==1&&(u=3),u}var re=function(){if(s&&l<9)return!1;var a=P("div");return"draggable"in a||"dragDrop"in a}(),ue;function Ze(a){if(ue==null){var u=P("span","\u200B");Q(a,P("span",[u,document.createTextNode("x")])),a.firstChild.offsetHeight!=0&&(ue=u.offsetWidth<=1&&u.offsetHeight>2&&!(s&&l<8))}var f=ue?P("span","\u200B"):P("span","\xA0",null,"display: inline-block; width: 1px; margin-right: -1px");return f.setAttribute("cm-text",""),f}var Ut;function Rt(a){if(Ut!=null)return Ut;var u=Q(a,document.createTextNode("A\u062EA")),f=xe(u,0,1).getBoundingClientRect(),c=xe(u,1,2).getBoundingClientRect();return B(a),!f||f.left==f.right?!1:Ut=c.right-f.right<3}var vn=` - -b`.split(/\n/).length!=3?function(a){for(var u=0,f=[],c=a.length;u<=c;){var p=a.indexOf(` -`,u);p==-1&&(p=a.length);var g=a.slice(u,a.charAt(p-1)=="\r"?p-1:p),E=g.indexOf("\r");E!=-1?(f.push(g.slice(0,E)),u+=E+1):(f.push(g),u=p+1)}return f}:function(a){return a.split(/\r\n?|\n/)},Rr=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(u){return!1}}:function(a){var u;try{u=a.ownerDocument.selection.createRange()}catch(f){}return!u||u.parentElement()!=a?!1:u.compareEndPoints("StartToEnd",u)!=0},jr=function(){var a=P("div");return"oncopy"in a?!0:(a.setAttribute("oncopy","return;"),typeof a.oncopy=="function")}(),et=null;function sa(a){if(et!=null)return et;var u=Q(a,P("span","x")),f=u.getBoundingClientRect(),c=xe(u,0,1).getBoundingClientRect();return et=Math.abs(f.left-c.left)>1}var Cn={},la={};function ch(a,u){arguments.length>2&&(u.dependencies=Array.prototype.slice.call(arguments,2)),Cn[a]=u}function Js(a,u){la[a]=u}function ui(a){if(typeof a=="string"&&la.hasOwnProperty(a))a=la[a];else if(a&&typeof a.name=="string"&&la.hasOwnProperty(a.name)){var u=la[a.name];typeof u=="string"&&(u={name:u}),a=st(u,a),a.name=u.name}else{if(typeof a=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return ui("application/xml");if(typeof a=="string"&&/^[\w\-]+\/[\w\-]+\+json$/.test(a))return ui("application/json")}return typeof a=="string"?{name:a}:a||{name:"null"}}function io(a,u){u=ui(u);var f=Cn[u.name];if(!f)return io(a,"text/plain");var c=f(a,u);if(jo.hasOwnProperty(u.name)){var p=jo[u.name];for(var g in p)!p.hasOwnProperty(g)||(c.hasOwnProperty(g)&&(c["_"+g]=c[g]),c[g]=p[g])}if(c.name=u.name,u.helperType&&(c.helperType=u.helperType),u.modeProps)for(var E in u.modeProps)c[E]=u.modeProps[E];return c}var jo={};function fh(a,u){var f=jo.hasOwnProperty(a)?jo[a]:jo[a]={};Ie(u,f)}function ao(a,u){if(u===!0)return u;if(a.copyState)return a.copyState(u);var f={};for(var c in u){var p=u[c];p instanceof Array&&(p=p.concat([])),f[c]=p}return f}function Po(a,u){for(var f;a.innerMode&&(f=a.innerMode(u),!(!f||f.mode==a));)u=f.state,a=f.mode;return f||{mode:a,state:u}}function nf(a,u,f){return a.startState?a.startState(u,f):!0}var gr=function(a,u,f){this.pos=this.start=0,this.string=a,this.tabSize=u||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=f};gr.prototype.eol=function(){return this.pos>=this.string.length},gr.prototype.sol=function(){return this.pos==this.lineStart},gr.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},gr.prototype.next=function(){if(this.posu},gr.prototype.eatSpace=function(){for(var a=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},gr.prototype.skipToEnd=function(){this.pos=this.string.length},gr.prototype.skipTo=function(a){var u=this.string.indexOf(a,this.pos);if(u>-1)return this.pos=u,!0},gr.prototype.backUp=function(a){this.pos-=a},gr.prototype.column=function(){return this.lastColumnPos0?null:(g&&u!==!1&&(this.pos+=g[0].length),g)}},gr.prototype.current=function(){return this.string.slice(this.start,this.pos)},gr.prototype.hideFirstChars=function(a,u){this.lineStart+=a;try{return u()}finally{this.lineStart-=a}},gr.prototype.lookAhead=function(a){var u=this.lineOracle;return u&&u.lookAhead(a)},gr.prototype.baseToken=function(){var a=this.lineOracle;return a&&a.baseToken(this.pos)};function Ae(a,u){if(u-=a.first,u<0||u>=a.size)throw new Error("There is no line "+(u+a.first)+" in the document.");for(var f=a;!f.lines;)for(var c=0;;++c){var p=f.children[c],g=p.chunkSize();if(u=a.first&&uf?W(f,Ae(a,f).text.length):zQ(u,Ae(a,u.line).text.length)}function zQ(a,u){var f=a.ch;return f==null||f>u?W(a.line,u):f<0?W(a.line,0):a}function nN(a,u){for(var f=[],c=0;cthis.maxLookAhead&&(this.maxLookAhead=a),u},Na.prototype.baseToken=function(a){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=a;)this.baseTokenPos+=2;var u=this.baseTokens[this.baseTokenPos+1];return{type:u&&u.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-a}},Na.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Na.fromSaved=function(a,u,f){return u instanceof dh?new Na(a,ao(a.mode,u.state),f,u.lookAhead):new Na(a,ao(a.mode,u),f)},Na.prototype.save=function(a){var u=a!==!1?ao(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new dh(u,this.maxLookAhead):u};function iN(a,u,f,c){var p=[a.state.modeGen],g={};cN(a,u.text,a.doc.mode,f,function(I,U){return p.push(I,U)},g,c);for(var E=f.state,N=function(I){f.baseTokens=p;var U=a.state.overlays[I],K=1,$=0;f.state=!0,cN(a,u.text,U.mode,f,function(X,ae){for(var le=K;$X&&p.splice(K,1,X,p[K+1],pe),K+=2,$=Math.min(X,pe)}if(!!ae)if(U.opaque)p.splice(le,K-le,X,"overlay "+ae),K=le+2;else for(;lea.options.maxHighlightLength&&ao(a.doc.mode,c.state),g=iN(a,u,c);p&&(c.state=p),u.stateAfter=c.save(!p),u.styles=g.styles,g.classes?u.styleClasses=g.classes:u.styleClasses&&(u.styleClasses=null),f===a.doc.highlightFrontier&&(a.doc.modeFrontier=Math.max(a.doc.modeFrontier,++a.doc.highlightFrontier))}return u.styles}function af(a,u,f){var c=a.doc,p=a.display;if(!c.mode.startState)return new Na(c,!0,u);var g=WQ(a,u,f),E=g>c.first&&Ae(c,g-1).stateAfter,N=E?Na.fromSaved(c,E,g):new Na(c,nf(c.mode),g);return c.iter(g,u,function(C){Wy(a,C.text,N);var I=N.line;C.stateAfter=I==u-1||I%5==0||I>=p.viewFrom&&Iu.start)return g}throw new Error("Mode "+a.name+" failed to advance stream.")}var uN=function(a,u,f){this.start=a.start,this.end=a.pos,this.string=a.current(),this.type=u||null,this.state=f};function sN(a,u,f,c){var p=a.doc,g=p.mode,E;u=Ye(p,u);var N=Ae(p,u.line),C=af(a,u.line,f),I=new gr(N.text,a.options.tabSize,C),U;for(c&&(U=[]);(c||I.posa.options.maxHighlightLength?(N=!1,E&&Wy(a,u,c,U.pos),U.pos=u.length,K=null):K=lN(Yy(f,U,c.state,$),g),$){var X=$[0].name;X&&(K="m-"+(K?X+" "+K:X))}if(!N||I!=K){for(;CE;--N){if(N<=g.first)return g.first;var C=Ae(g,N-1),I=C.stateAfter;if(I&&(!f||N+(I instanceof dh?I.lookAhead:0)<=g.modeFrontier))return N;var U=te(C.text,null,a.options.tabSize);(p==null||c>U)&&(p=N-1,c=U)}return p}function YQ(a,u){if(a.modeFrontier=Math.min(a.modeFrontier,u),!(a.highlightFrontierf;c--){var p=Ae(a,c).stateAfter;if(p&&(!(p instanceof dh)||c+p.lookAhead=u:g.to>u);(c||(c=[])).push(new ph(E,g.from,C?null:g.to))}}return c}function t2(a,u,f){var c;if(a)for(var p=0;p=u:g.to>u);if(N||g.from==u&&E.type=="bookmark"&&(!f||g.marker.insertLeft)){var C=g.from==null||(E.inclusiveLeft?g.from<=u:g.from0&&N)for(var Ce=0;Ce0)){var U=[C,1],K=ie(I.from,N.from),$=ie(I.to,N.to);(K<0||!E.inclusiveLeft&&!K)&&U.push({from:I.from,to:N.from}),($>0||!E.inclusiveRight&&!$)&&U.push({from:N.to,to:I.to}),p.splice.apply(p,U),C+=U.length-3}}return p}function pN(a){var u=a.markedSpans;if(!!u){for(var f=0;fu)&&(!c||Xy(c,g.marker)<0)&&(c=g.marker)}return c}function mN(a,u,f,c,p){var g=Ae(a,u),E=uo&&g.markedSpans;if(E)for(var N=0;N=0&&K<=0||U<=0&&K>=0)&&(U<=0&&(C.marker.inclusiveRight&&p.inclusiveLeft?ie(I.to,f)>=0:ie(I.to,f)>0)||U>=0&&(C.marker.inclusiveRight&&p.inclusiveLeft?ie(I.from,c)<=0:ie(I.from,c)<0)))return!0}}}function ca(a){for(var u;u=gN(a);)a=u.find(-1,!0).line;return a}function i2(a){for(var u;u=gh(a);)a=u.find(1,!0).line;return a}function a2(a){for(var u,f;u=gh(a);)a=u.find(1,!0).line,(f||(f=[])).push(a);return f}function Zy(a,u){var f=Ae(a,u),c=ca(f);return f==c?u:wt(c)}function yN(a,u){if(u>a.lastLine())return u;var f=Ae(a,u),c;if(!Fo(a,f))return u;for(;c=gh(f);)f=c.find(1,!0).line;return wt(f)+1}function Fo(a,u){var f=uo&&u.markedSpans;if(f){for(var c=void 0,p=0;pu.maxLineLength&&(u.maxLineLength=p,u.maxLine=c)})}var Zs=function(a,u,f){this.text=a,hN(this,u),this.height=f?f(this):1};Zs.prototype.lineNo=function(){return wt(this)},un(Zs);function o2(a,u,f,c){a.text=u,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),a.order!=null&&(a.order=null),pN(a),hN(a,f);var p=c?c(a):1;p!=a.height&&Fi(a,p)}function u2(a){a.parent=null,pN(a)}var s2={},l2={};function bN(a,u){if(!a||/^\s*$/.test(a))return null;var f=u.addModeClass?l2:s2;return f[a]||(f[a]=a.replace(/\S+/g,"cm-$&"))}function TN(a,u){var f=he("span",null,null,d?"padding-right: .1px":null),c={pre:he("pre",[f],"CodeMirror-line"),content:f,col:0,pos:0,cm:a,trailingSpace:!1,splitSpaces:a.getOption("lineWrapping")};u.measure={};for(var p=0;p<=(u.rest?u.rest.length:0);p++){var g=p?u.rest[p-1]:u.line,E=void 0;c.pos=0,c.addToken=f2,Rt(a.display.measure)&&(E=xn(g,a.doc.direction))&&(c.addToken=p2(c.addToken,E)),c.map=[];var N=u!=a.display.externalMeasured&&wt(g);h2(g,c,aN(a,g,N)),g.styleClasses&&(g.styleClasses.bgClass&&(c.bgClass=He(g.styleClasses.bgClass,c.bgClass||"")),g.styleClasses.textClass&&(c.textClass=He(g.styleClasses.textClass,c.textClass||""))),c.map.length==0&&c.map.push(0,0,c.content.appendChild(Ze(a.display.measure))),p==0?(u.measure.map=c.map,u.measure.cache={}):((u.measure.maps||(u.measure.maps=[])).push(c.map),(u.measure.caches||(u.measure.caches=[])).push({}))}if(d){var C=c.content.lastChild;(/\bcm-tab\b/.test(C.className)||C.querySelector&&C.querySelector(".cm-tab"))&&(c.content.className="cm-tab-wrap-hack")}return Ft(a,"renderLine",a,u.line,c.pre),c.pre.className&&(c.textClass=He(c.pre.className,c.textClass||"")),c}function c2(a){var u=P("span","\u2022","cm-invalidchar");return u.title="\\u"+a.charCodeAt(0).toString(16),u.setAttribute("aria-label",u.title),u}function f2(a,u,f,c,p,g,E){if(!!u){var N=a.splitSpaces?d2(u,a.trailingSpace):u,C=a.cm.state.specialChars,I=!1,U;if(!C.test(u))a.col+=u.length,U=document.createTextNode(N),a.map.push(a.pos,a.pos+u.length,U),s&&l<9&&(I=!0),a.pos+=u.length;else{U=document.createDocumentFragment();for(var K=0;;){C.lastIndex=K;var $=C.exec(u),X=$?$.index-K:u.length-K;if(X){var ae=document.createTextNode(N.slice(K,K+X));s&&l<9?U.appendChild(P("span",[ae])):U.appendChild(ae),a.map.push(a.pos,a.pos+X,ae),a.col+=X,a.pos+=X}if(!$)break;K+=X+1;var le=void 0;if($[0]==" "){var pe=a.cm.options.tabSize,be=pe-a.col%pe;le=U.appendChild(P("span",fe(be),"cm-tab")),le.setAttribute("role","presentation"),le.setAttribute("cm-text"," "),a.col+=be}else $[0]=="\r"||$[0]==` -`?(le=U.appendChild(P("span",$[0]=="\r"?"\u240D":"\u2424","cm-invalidchar")),le.setAttribute("cm-text",$[0]),a.col+=1):(le=a.cm.options.specialCharPlaceholder($[0]),le.setAttribute("cm-text",$[0]),s&&l<9?U.appendChild(P("span",[le])):U.appendChild(le),a.col+=1);a.map.push(a.pos,a.pos+1,le),a.pos++}}if(a.trailingSpace=N.charCodeAt(u.length-1)==32,f||c||p||I||g||E){var Ne=f||"";c&&(Ne+=c),p&&(Ne+=p);var Te=P("span",[U],Ne,g);if(E)for(var Ce in E)E.hasOwnProperty(Ce)&&Ce!="style"&&Ce!="class"&&Te.setAttribute(Ce,E[Ce]);return a.content.appendChild(Te)}a.content.appendChild(U)}}function d2(a,u){if(a.length>1&&!/ /.test(a))return a;for(var f=u,c="",p=0;pI&&K.from<=I));$++);if(K.to>=U)return a(f,c,p,g,E,N,C);a(f,c.slice(0,K.to-I),p,g,null,N,C),g=null,c=c.slice(K.to-I),I=K.to}}}function _N(a,u,f,c){var p=!c&&f.widgetNode;p&&a.map.push(a.pos,a.pos+u,p),!c&&a.cm.display.input.needsContentAttribute&&(p||(p=a.content.appendChild(document.createElement("span"))),p.setAttribute("cm-marker",f.id)),p&&(a.cm.display.input.setUneditable(p),a.content.appendChild(p)),a.pos+=u,a.trailingSpace=!1}function h2(a,u,f){var c=a.markedSpans,p=a.text,g=0;if(!c){for(var E=1;EC||lt.collapsed&&qe.to==C&&qe.from==C)){if(qe.to!=null&&qe.to!=C&&X>qe.to&&(X=qe.to,le=""),lt.className&&(ae+=" "+lt.className),lt.css&&($=($?$+";":"")+lt.css),lt.startStyle&&qe.from==C&&(pe+=" "+lt.startStyle),lt.endStyle&&qe.to==X&&(Ce||(Ce=[])).push(lt.endStyle,qe.to),lt.title&&((Ne||(Ne={})).title=lt.title),lt.attributes)for(var Ht in lt.attributes)(Ne||(Ne={}))[Ht]=lt.attributes[Ht];lt.collapsed&&(!be||Xy(be.marker,lt)<0)&&(be=qe)}else qe.from>C&&X>qe.from&&(X=qe.from)}if(Ce)for(var zr=0;zr=N)break;for(var li=Math.min(N,X);;){if(U){var Jn=C+U.length;if(!be){var wr=Jn>li?U.slice(0,li-C):U;u.addToken(u,wr,K?K+ae:ae,pe,C+wr.length==X?le:"",$,Ne)}if(Jn>=li){U=U.slice(li-C),C=li;break}C=Jn,pe=""}U=p.slice(g,g=f[I++]),K=bN(f[I++],u.cm.options)}}}function EN(a,u,f){this.line=u,this.rest=a2(u),this.size=this.rest?wt(se(this.rest))-f+1:1,this.node=this.text=null,this.hidden=Fo(a,u)}function yh(a,u,f){for(var c=[],p,g=u;g2&&g.push((C.bottom+I.top)/2-f.top)}}g.push(f.bottom-f.top)}}function xN(a,u,f){if(a.line==u)return{map:a.measure.map,cache:a.measure.cache};if(a.rest){for(var c=0;cf)return{map:a.measure.maps[p],cache:a.measure.caches[p],before:!0}}}function O2(a,u){u=ca(u);var f=wt(u),c=a.display.externalMeasured=new EN(a.doc,u,f);c.lineN=f;var p=c.built=TN(a,c);return c.text=p.pre,Q(a.display.lineMeasure,p.pre),c}function CN(a,u,f,c){return xa(a,el(a,u),f,c)}function i0(a,u){if(u>=a.display.viewFrom&&u=f.lineN&&uu)&&(g=C-N,p=g-1,u>=C&&(E="right")),p!=null){if(c=a[I+2],N==C&&f==(c.insertLeft?"left":"right")&&(E=f),f=="left"&&p==0)for(;I&&a[I-2]==a[I-3]&&a[I-1].insertLeft;)c=a[(I-=3)+2],E="left";if(f=="right"&&p==C-N)for(;I=0&&(f=a[p]).left==f.right;p--);return f}function N2(a,u,f,c){var p=IN(u.map,f,c),g=p.node,E=p.start,N=p.end,C=p.collapse,I;if(g.nodeType==3){for(var U=0;U<4;U++){for(;E&&Pi(u.line.text.charAt(p.coverStart+E));)--E;for(;p.coverStart+N0&&(C=c="right");var K;a.options.lineWrapping&&(K=g.getClientRects()).length>1?I=K[c=="right"?K.length-1:0]:I=g.getBoundingClientRect()}if(s&&l<9&&!E&&(!I||!I.left&&!I.right)){var $=g.parentNode.getClientRects()[0];$?I={left:$.left,right:$.left+rl(a.display),top:$.top,bottom:$.bottom}:I=LN}for(var X=I.top-u.rect.top,ae=I.bottom-u.rect.top,le=(X+ae)/2,pe=u.view.measure.heights,be=0;be=c.text.length?(C=c.text.length,I="before"):C<=0&&(C=0,I="after"),!N)return E(I=="before"?C-1:C,I=="before");function U(ae,le,pe){var be=N[le],Ne=be.level==1;return E(pe?ae-1:ae,Ne!=pe)}var K=vr(N,C,I),$=zn,X=U(C,K,I=="before");return $!=null&&(X.other=U(C,$,I!="before")),X}function MN(a,u){var f=0;u=Ye(a.doc,u),a.options.lineWrapping||(f=rl(a.display)*u.ch);var c=Ae(a.doc,u.line),p=so(c)+bh(a.display);return{left:f,right:f,top:p,bottom:p+c.height}}function o0(a,u,f,c,p){var g=W(a,u,f);return g.xRel=p,c&&(g.outside=c),g}function u0(a,u,f){var c=a.doc;if(f+=a.display.viewOffset,f<0)return o0(c.first,0,null,-1,-1);var p=wa(c,f),g=c.first+c.size-1;if(p>g)return o0(c.first+c.size-1,Ae(c,g).text.length,null,1,1);u<0&&(u=0);for(var E=Ae(c,p);;){var N=x2(a,E,p,u,f),C=n2(E,N.ch+(N.xRel>0||N.outside>0?1:0));if(!C)return N;var I=C.find(1);if(I.line==p)return I;E=Ae(c,p=I.line)}}function qN(a,u,f,c){c-=a0(u);var p=u.text.length,g=Kt(function(E){return xa(a,f,E-1).bottom<=c},p,0);return p=Kt(function(E){return xa(a,f,E).top>c},g,p),{begin:g,end:p}}function VN(a,u,f,c){f||(f=el(a,u));var p=Th(a,u,xa(a,f,c),"line").top;return qN(a,u,f,p)}function s0(a,u,f,c){return a.bottom<=f?!1:a.top>f?!0:(c?a.left:a.right)>u}function x2(a,u,f,c,p){p-=so(u);var g=el(a,u),E=a0(u),N=0,C=u.text.length,I=!0,U=xn(u,a.doc.direction);if(U){var K=(a.options.lineWrapping?L2:C2)(a,u,f,g,U,c,p);I=K.level!=1,N=I?K.from:K.to-1,C=I?K.to:K.from-1}var $=null,X=null,ae=Kt(function(Ge){var qe=xa(a,g,Ge);return qe.top+=E,qe.bottom+=E,s0(qe,c,p,!1)?(qe.top<=p&&qe.left<=c&&($=Ge,X=qe),!0):!1},N,C),le,pe,be=!1;if(X){var Ne=c-X.left=Ce.bottom?1:0}return ae=Qr(u.text,ae,1),o0(f,ae,pe,be,c-le)}function C2(a,u,f,c,p,g,E){var N=Kt(function(K){var $=p[K],X=$.level!=1;return s0(fa(a,W(f,X?$.to:$.from,X?"before":"after"),"line",u,c),g,E,!0)},0,p.length-1),C=p[N];if(N>0){var I=C.level!=1,U=fa(a,W(f,I?C.from:C.to,I?"after":"before"),"line",u,c);s0(U,g,E,!0)&&U.top>E&&(C=p[N-1])}return C}function L2(a,u,f,c,p,g,E){var N=qN(a,u,c,E),C=N.begin,I=N.end;/\s/.test(u.text.charAt(I-1))&&I--;for(var U=null,K=null,$=0;$=I||X.to<=C)){var ae=X.level!=1,le=xa(a,c,ae?Math.min(I,X.to)-1:Math.max(C,X.from)).right,pe=lepe)&&(U=X,K=pe)}}return U||(U=p[p.length-1]),U.fromI&&(U={from:U.from,to:I,level:U.level}),U}var Bu;function tl(a){if(a.cachedTextHeight!=null)return a.cachedTextHeight;if(Bu==null){Bu=P("pre",null,"CodeMirror-line-like");for(var u=0;u<49;++u)Bu.appendChild(document.createTextNode("x")),Bu.appendChild(P("br"));Bu.appendChild(document.createTextNode("x"))}Q(a.measure,Bu);var f=Bu.offsetHeight/50;return f>3&&(a.cachedTextHeight=f),B(a.measure),f||1}function rl(a){if(a.cachedCharWidth!=null)return a.cachedCharWidth;var u=P("span","xxxxxxxxxx"),f=P("pre",[u],"CodeMirror-line-like");Q(a.measure,f);var c=u.getBoundingClientRect(),p=(c.right-c.left)/10;return p>2&&(a.cachedCharWidth=p),p||10}function l0(a){for(var u=a.display,f={},c={},p=u.gutters.clientLeft,g=u.gutters.firstChild,E=0;g;g=g.nextSibling,++E){var N=a.display.gutterSpecs[E].className;f[N]=g.offsetLeft+g.clientLeft+p,c[N]=g.clientWidth}return{fixedPos:c0(u),gutterTotalWidth:u.gutters.offsetWidth,gutterLeft:f,gutterWidth:c,wrapperWidth:u.wrapper.clientWidth}}function c0(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function UN(a){var u=tl(a.display),f=a.options.lineWrapping,c=f&&Math.max(5,a.display.scroller.clientWidth/rl(a.display)-3);return function(p){if(Fo(a.doc,p))return 0;var g=0;if(p.widgets)for(var E=0;E0&&(I=Ae(a.doc,C.line).text).length==C.ch){var U=te(I,I.length,a.options.tabSize)-I.length;C=W(C.line,Math.max(0,Math.round((g-DN(a.display).left)/rl(a.display))-U))}return C}function Hu(a,u){if(u>=a.display.viewTo||(u-=a.display.viewFrom,u<0))return null;for(var f=a.display.view,c=0;cu)&&(p.updateLineNumbers=u),a.curOp.viewChanged=!0,u>=p.viewTo)uo&&Zy(a.doc,u)p.viewFrom?qo(a):(p.viewFrom+=c,p.viewTo+=c);else if(u<=p.viewFrom&&f>=p.viewTo)qo(a);else if(u<=p.viewFrom){var g=Eh(a,f,f+c,1);g?(p.view=p.view.slice(g.index),p.viewFrom=g.lineN,p.viewTo+=c):qo(a)}else if(f>=p.viewTo){var E=Eh(a,u,u,-1);E?(p.view=p.view.slice(0,E.index),p.viewTo=E.lineN):qo(a)}else{var N=Eh(a,u,u,-1),C=Eh(a,f,f+c,1);N&&C?(p.view=p.view.slice(0,N.index).concat(yh(a,N.lineN,C.lineN)).concat(p.view.slice(C.index)),p.viewTo+=c):qo(a)}var I=p.externalMeasured;I&&(f=p.lineN&&u=c.viewTo)){var g=c.view[Hu(a,u)];if(g.node!=null){var E=g.changes||(g.changes=[]);we(E,f)==-1&&E.push(f)}}}function qo(a){a.display.viewFrom=a.display.viewTo=a.doc.first,a.display.view=[],a.display.viewOffset=0}function Eh(a,u,f,c){var p=Hu(a,u),g,E=a.display.view;if(!uo||f==a.doc.first+a.doc.size)return{index:p,lineN:f};for(var N=a.display.viewFrom,C=0;C0){if(p==E.length-1)return null;g=N+E[p].size-u,p++}else g=N-u;u+=g,f+=g}for(;Zy(a.doc,f)!=f;){if(p==(c<0?0:E.length-1))return null;f+=c*E[p-(c<0?1:0)].size,p+=c}return{index:p,lineN:f}}function I2(a,u,f){var c=a.display,p=c.view;p.length==0||u>=c.viewTo||f<=c.viewFrom?(c.view=yh(a,u,f),c.viewFrom=u):(c.viewFrom>u?c.view=yh(a,u,c.viewFrom).concat(c.view):c.viewFromf&&(c.view=c.view.slice(0,Hu(a,f)))),c.viewTo=f}function GN(a){for(var u=a.display.view,f=0,c=0;c=a.display.viewTo||C.to().line0?E:a.defaultCharWidth())+"px"}if(c.other){var N=f.appendChild(P("div","\xA0","CodeMirror-cursor CodeMirror-secondarycursor"));N.style.display="",N.style.left=c.other.left+"px",N.style.top=c.other.top+"px",N.style.height=(c.other.bottom-c.other.top)*.85+"px"}}function Sh(a,u){return a.top-u.top||a.left-u.left}function A2(a,u,f){var c=a.display,p=a.doc,g=document.createDocumentFragment(),E=DN(a.display),N=E.left,C=Math.max(c.sizerWidth,Qu(a)-c.sizer.offsetLeft)-E.right,I=p.direction=="ltr";function U(Te,Ce,Ge,qe){Ce<0&&(Ce=0),Ce=Math.round(Ce),qe=Math.round(qe),g.appendChild(P("div",null,"CodeMirror-selected","position: absolute; left: "+Te+`px; - top: `+Ce+"px; width: "+(Ge==null?C-Te:Ge)+`px; - height: `+(qe-Ce)+"px"))}function K(Te,Ce,Ge){var qe=Ae(p,Te),lt=qe.text.length,Ht,zr;function lr(wr,Xn){return _h(a,W(Te,wr),"div",qe,Xn)}function li(wr,Xn,sn){var Fr=VN(a,qe,null,wr),Nr=Xn=="ltr"==(sn=="after")?"left":"right",mr=sn=="after"?Fr.begin:Fr.end-(/\s/.test(qe.text.charAt(Fr.end-1))?2:1);return lr(mr,Nr)[Nr]}var Jn=xn(qe,p.direction);return hn(Jn,Ce||0,Ge==null?lt:Ge,function(wr,Xn,sn,Fr){var Nr=sn=="ltr",mr=lr(wr,Nr?"left":"right"),Zn=lr(Xn-1,Nr?"right":"left"),vl=Ce==null&&wr==0,Ko=Ge==null&&Xn==lt,mn=Fr==0,Ca=!Jn||Fr==Jn.length-1;if(Zn.top-mr.top<=3){var Wr=(I?vl:Ko)&&mn,q0=(I?Ko:vl)&&Ca,po=Wr?N:(Nr?mr:Zn).left,Xu=q0?C:(Nr?Zn:mr).right;U(po,mr.top,Xu-po,mr.bottom)}else{var Zu,In,gl,V0;Nr?(Zu=I&&vl&&mn?N:mr.left,In=I?C:li(wr,sn,"before"),gl=I?N:li(Xn,sn,"after"),V0=I&&Ko&&Ca?C:Zn.right):(Zu=I?li(wr,sn,"before"):N,In=!I&&vl&&mn?C:mr.right,gl=!I&&Ko&&Ca?N:Zn.left,V0=I?li(Xn,sn,"after"):C),U(Zu,mr.top,In-Zu,mr.bottom),mr.bottom0?u.blinker=setInterval(function(){a.hasFocus()||nl(a),u.cursorDiv.style.visibility=(f=!f)?"":"hidden"},a.options.cursorBlinkRate):a.options.cursorBlinkRate<0&&(u.cursorDiv.style.visibility="hidden")}}function BN(a){a.hasFocus()||(a.display.input.focus(),a.state.focused||v0(a))}function h0(a){a.state.delayingBlurEvent=!0,setTimeout(function(){a.state.delayingBlurEvent&&(a.state.delayingBlurEvent=!1,a.state.focused&&nl(a))},100)}function v0(a,u){a.state.delayingBlurEvent&&!a.state.draggingText&&(a.state.delayingBlurEvent=!1),a.options.readOnly!="nocursor"&&(a.state.focused||(Ft(a,"focus",a,u),a.state.focused=!0,Le(a.display.wrapper,"CodeMirror-focused"),!a.curOp&&a.display.selForContextMenu!=a.doc.sel&&(a.display.input.reset(),d&&setTimeout(function(){return a.display.input.reset(!0)},20)),a.display.input.receivedFocus()),p0(a))}function nl(a,u){a.state.delayingBlurEvent||(a.state.focused&&(Ft(a,"blur",a,u),a.state.focused=!1,z(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150))}function kh(a){for(var u=a.display,f=u.lineDiv.offsetTop,c=Math.max(0,u.scroller.getBoundingClientRect().top),p=u.lineDiv.getBoundingClientRect().top,g=0,E=0;E.005||X<-.005)&&(pa.display.sizerWidth){var le=Math.ceil(U/rl(a.display));le>a.display.maxLineLength&&(a.display.maxLineLength=le,a.display.maxLine=N.line,a.display.maxLineChanged=!0)}}}Math.abs(g)>2&&(u.scroller.scrollTop+=g)}function KN(a){if(a.widgets)for(var u=0;u=E&&(g=wa(u,so(Ae(u,C))-a.wrapper.clientHeight),E=C)}return{from:g,to:Math.max(E,g+1)}}function R2(a,u){if(!nr(a,"scrollCursorIntoView")){var f=a.display,c=f.sizer.getBoundingClientRect(),p=null,g=f.wrapper.ownerDocument;if(u.top+c.top<0?p=!0:u.bottom+c.top>(g.defaultView.innerHeight||g.documentElement.clientHeight)&&(p=!1),p!=null&&!k){var E=P("div","\u200B",null,`position: absolute; - top: `+(u.top-f.viewOffset-bh(a.display))+`px; - height: `+(u.bottom-u.top+Da(a)+f.barHeight)+`px; - left: `+u.left+"px; width: "+Math.max(2,u.right-u.left)+"px;");a.display.lineSpace.appendChild(E),E.scrollIntoView(p),a.display.lineSpace.removeChild(E)}}}function j2(a,u,f,c){c==null&&(c=0);var p;!a.options.lineWrapping&&u==f&&(f=u.sticky=="before"?W(u.line,u.ch+1,"before"):u,u=u.ch?W(u.line,u.sticky=="before"?u.ch-1:u.ch,"after"):u);for(var g=0;g<5;g++){var E=!1,N=fa(a,u),C=!f||f==u?N:fa(a,f);p={left:Math.min(N.left,C.left),top:Math.min(N.top,C.top)-c,right:Math.max(N.left,C.left),bottom:Math.max(N.bottom,C.bottom)+c};var I=g0(a,p),U=a.doc.scrollTop,K=a.doc.scrollLeft;if(I.scrollTop!=null&&(pf(a,I.scrollTop),Math.abs(a.doc.scrollTop-U)>1&&(E=!0)),I.scrollLeft!=null&&(zu(a,I.scrollLeft),Math.abs(a.doc.scrollLeft-K)>1&&(E=!0)),!E)break}return p}function P2(a,u){var f=g0(a,u);f.scrollTop!=null&&pf(a,f.scrollTop),f.scrollLeft!=null&&zu(a,f.scrollLeft)}function g0(a,u){var f=a.display,c=tl(a.display);u.top<0&&(u.top=0);var p=a.curOp&&a.curOp.scrollTop!=null?a.curOp.scrollTop:f.scroller.scrollTop,g=n0(a),E={};u.bottom-u.top>g&&(u.bottom=u.top+g);var N=a.doc.height+r0(f),C=u.topN-c;if(u.topp+g){var U=Math.min(u.top,(I?N:u.bottom)-g);U!=p&&(E.scrollTop=U)}var K=a.options.fixedGutter?0:f.gutters.offsetWidth,$=a.curOp&&a.curOp.scrollLeft!=null?a.curOp.scrollLeft:f.scroller.scrollLeft-K,X=Qu(a)-f.gutters.offsetWidth,ae=u.right-u.left>X;return ae&&(u.right=u.left+X),u.left<10?E.scrollLeft=0:u.left<$?E.scrollLeft=Math.max(0,u.left+K-(ae?0:10)):u.right>X+$-3&&(E.scrollLeft=u.right+(ae?0:10)-X),E}function m0(a,u){u!=null&&(wh(a),a.curOp.scrollTop=(a.curOp.scrollTop==null?a.doc.scrollTop:a.curOp.scrollTop)+u)}function il(a){wh(a);var u=a.getCursor();a.curOp.scrollToPos={from:u,to:u,margin:a.options.cursorScrollMargin}}function df(a,u,f){(u!=null||f!=null)&&wh(a),u!=null&&(a.curOp.scrollLeft=u),f!=null&&(a.curOp.scrollTop=f)}function F2(a,u){wh(a),a.curOp.scrollToPos=u}function wh(a){var u=a.curOp.scrollToPos;if(u){a.curOp.scrollToPos=null;var f=MN(a,u.from),c=MN(a,u.to);HN(a,f,c,u.margin)}}function HN(a,u,f,c){var p=g0(a,{left:Math.min(u.left,f.left),top:Math.min(u.top,f.top)-c,right:Math.max(u.right,f.right),bottom:Math.max(u.bottom,f.bottom)+c});df(a,p.scrollLeft,p.scrollTop)}function pf(a,u){Math.abs(a.doc.scrollTop-u)<2||(r||b0(a,{top:u}),zN(a,u,!0),r&&b0(a),gf(a,100))}function zN(a,u,f){u=Math.max(0,Math.min(a.display.scroller.scrollHeight-a.display.scroller.clientHeight,u)),!(a.display.scroller.scrollTop==u&&!f)&&(a.doc.scrollTop=u,a.display.scrollbars.setScrollTop(u),a.display.scroller.scrollTop!=u&&(a.display.scroller.scrollTop=u))}function zu(a,u,f,c){u=Math.max(0,Math.min(u,a.display.scroller.scrollWidth-a.display.scroller.clientWidth)),!((f?u==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-u)<2)&&!c)&&(a.doc.scrollLeft=u,ZN(a),a.display.scroller.scrollLeft!=u&&(a.display.scroller.scrollLeft=u),a.display.scrollbars.setScrollLeft(u))}function hf(a){var u=a.display,f=u.gutters.offsetWidth,c=Math.round(a.doc.height+r0(a.display));return{clientHeight:u.scroller.clientHeight,viewHeight:u.wrapper.clientHeight,scrollWidth:u.scroller.scrollWidth,clientWidth:u.scroller.clientWidth,viewWidth:u.wrapper.clientWidth,barLeft:a.options.fixedGutter?f:0,docHeight:c,scrollHeight:c+Da(a)+u.barHeight,nativeBarWidth:u.nativeBarWidth,gutterWidth:f}}var Wu=function(a,u,f){this.cm=f;var c=this.vert=P("div",[P("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),p=this.horiz=P("div",[P("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");c.tabIndex=p.tabIndex=-1,a(c),a(p),_e(c,"scroll",function(){c.clientHeight&&u(c.scrollTop,"vertical")}),_e(p,"scroll",function(){p.clientWidth&&u(p.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,s&&l<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Wu.prototype.update=function(a){var u=a.scrollWidth>a.clientWidth+1,f=a.scrollHeight>a.clientHeight+1,c=a.nativeBarWidth;if(f){this.vert.style.display="block",this.vert.style.bottom=u?c+"px":"0";var p=a.viewHeight-(u?c:0);this.vert.firstChild.style.height=Math.max(0,a.scrollHeight-a.clientHeight+p)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(u){this.horiz.style.display="block",this.horiz.style.right=f?c+"px":"0",this.horiz.style.left=a.barLeft+"px";var g=a.viewWidth-a.barLeft-(f?c:0);this.horiz.firstChild.style.width=Math.max(0,a.scrollWidth-a.clientWidth+g)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&a.clientHeight>0&&(c==0&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:f?c:0,bottom:u?c:0}},Wu.prototype.setScrollLeft=function(a){this.horiz.scrollLeft!=a&&(this.horiz.scrollLeft=a),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Wu.prototype.setScrollTop=function(a){this.vert.scrollTop!=a&&(this.vert.scrollTop=a),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Wu.prototype.zeroWidthHack=function(){var a=w&&!_?"12px":"18px";this.horiz.style.height=this.vert.style.width=a,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new ce,this.disableVert=new ce},Wu.prototype.enableZeroWidthBar=function(a,u,f){a.style.visibility="";function c(){var p=a.getBoundingClientRect(),g=f=="vert"?document.elementFromPoint(p.right-1,(p.top+p.bottom)/2):document.elementFromPoint((p.right+p.left)/2,p.bottom-1);g!=a?a.style.visibility="hidden":u.set(1e3,c)}u.set(1e3,c)},Wu.prototype.clear=function(){var a=this.horiz.parentNode;a.removeChild(this.horiz),a.removeChild(this.vert)};var vf=function(){};vf.prototype.update=function(){return{bottom:0,right:0}},vf.prototype.setScrollLeft=function(){},vf.prototype.setScrollTop=function(){},vf.prototype.clear=function(){};function al(a,u){u||(u=hf(a));var f=a.display.barWidth,c=a.display.barHeight;WN(a,u);for(var p=0;p<4&&f!=a.display.barWidth||c!=a.display.barHeight;p++)f!=a.display.barWidth&&a.options.lineWrapping&&kh(a),WN(a,hf(a)),f=a.display.barWidth,c=a.display.barHeight}function WN(a,u){var f=a.display,c=f.scrollbars.update(u);f.sizer.style.paddingRight=(f.barWidth=c.right)+"px",f.sizer.style.paddingBottom=(f.barHeight=c.bottom)+"px",f.heightForcer.style.borderBottom=c.bottom+"px solid transparent",c.right&&c.bottom?(f.scrollbarFiller.style.display="block",f.scrollbarFiller.style.height=c.bottom+"px",f.scrollbarFiller.style.width=c.right+"px"):f.scrollbarFiller.style.display="",c.bottom&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(f.gutterFiller.style.display="block",f.gutterFiller.style.height=c.bottom+"px",f.gutterFiller.style.width=u.gutterWidth+"px"):f.gutterFiller.style.display=""}var YN={native:Wu,null:vf};function JN(a){a.display.scrollbars&&(a.display.scrollbars.clear(),a.display.scrollbars.addClass&&z(a.display.wrapper,a.display.scrollbars.addClass)),a.display.scrollbars=new YN[a.options.scrollbarStyle](function(u){a.display.wrapper.insertBefore(u,a.display.scrollbarFiller),_e(u,"mousedown",function(){a.state.focused&&setTimeout(function(){return a.display.input.focus()},0)}),u.setAttribute("cm-not-content","true")},function(u,f){f=="horizontal"?zu(a,u):pf(a,u)},a),a.display.scrollbars.addClass&&Le(a.display.wrapper,a.display.scrollbars.addClass)}var M2=0;function Yu(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++M2,markArrays:null},v2(a.curOp)}function Ju(a){var u=a.curOp;u&&m2(u,function(f){for(var c=0;c=f.viewTo)||f.maxLineChanged&&u.options.lineWrapping,a.update=a.mustUpdate&&new Nh(u,a.mustUpdate&&{top:a.scrollTop,ensure:a.scrollToPos},a.forceUpdate)}function U2(a){a.updatedDisplay=a.mustUpdate&&y0(a.cm,a.update)}function G2(a){var u=a.cm,f=u.display;a.updatedDisplay&&kh(u),a.barMeasure=hf(u),f.maxLineChanged&&!u.options.lineWrapping&&(a.adjustWidthTo=CN(u,f.maxLine,f.maxLine.text.length).left+3,u.display.sizerWidth=a.adjustWidthTo,a.barMeasure.scrollWidth=Math.max(f.scroller.clientWidth,f.sizer.offsetLeft+a.adjustWidthTo+Da(u)+u.display.barWidth),a.maxScrollLeft=Math.max(0,f.sizer.offsetLeft+a.adjustWidthTo-Qu(u))),(a.updatedDisplay||a.selectionChanged)&&(a.preparedSelection=f.input.prepareSelection())}function Q2(a){var u=a.cm;a.adjustWidthTo!=null&&(u.display.sizer.style.minWidth=a.adjustWidthTo+"px",a.maxScrollLeft=a.display.viewTo)){var f=+new Date+a.options.workTime,c=af(a,u.highlightFrontier),p=[];u.iter(c.line,Math.min(u.first+u.size,a.display.viewTo+500),function(g){if(c.line>=a.display.viewFrom){var E=g.styles,N=g.text.length>a.options.maxHighlightLength?ao(u.mode,c.state):null,C=iN(a,g,c,!0);N&&(c.state=N),g.styles=C.styles;var I=g.styleClasses,U=C.classes;U?g.styleClasses=U:I&&(g.styleClasses=null);for(var K=!E||E.length!=g.styles.length||I!=U&&(!I||!U||I.bgClass!=U.bgClass||I.textClass!=U.textClass),$=0;!K&&$f)return gf(a,a.options.workDelay),!0}),u.highlightFrontier=c.line,u.modeFrontier=Math.max(u.modeFrontier,c.line),p.length&&si(a,function(){for(var g=0;g=f.viewFrom&&u.visible.to<=f.viewTo&&(f.updateLineNumbers==null||f.updateLineNumbers>=f.viewTo)&&f.renderedView==f.view&&GN(a)==0)return!1;$N(a)&&(qo(a),u.dims=l0(a));var p=c.first+c.size,g=Math.max(u.visible.from-a.options.viewportMargin,c.first),E=Math.min(p,u.visible.to+a.options.viewportMargin);f.viewFromE&&f.viewTo-E<20&&(E=Math.min(p,f.viewTo)),uo&&(g=Zy(a.doc,g),E=yN(a.doc,E));var N=g!=f.viewFrom||E!=f.viewTo||f.lastWrapHeight!=u.wrapperHeight||f.lastWrapWidth!=u.wrapperWidth;I2(a,g,E),f.viewOffset=so(Ae(a.doc,f.viewFrom)),a.display.mover.style.top=f.viewOffset+"px";var C=GN(a);if(!N&&C==0&&!u.force&&f.renderedView==f.view&&(f.updateLineNumbers==null||f.updateLineNumbers>=f.viewTo))return!1;var I=z2(a);return C>4&&(f.lineDiv.style.display="none"),Y2(a,f.updateLineNumbers,u.dims),C>4&&(f.lineDiv.style.display=""),f.renderedView=f.view,W2(I),B(f.cursorDiv),B(f.selectionDiv),f.gutters.style.height=f.sizer.style.minHeight=0,N&&(f.lastWrapHeight=u.wrapperHeight,f.lastWrapWidth=u.wrapperWidth,gf(a,400)),f.updateLineNumbers=null,!0}function XN(a,u){for(var f=u.viewport,c=!0;;c=!1){if(!c||!a.options.lineWrapping||u.oldDisplayWidth==Qu(a)){if(f&&f.top!=null&&(f={top:Math.min(a.doc.height+r0(a.display)-n0(a),f.top)}),u.visible=Oh(a.display,a.doc,f),u.visible.from>=a.display.viewFrom&&u.visible.to<=a.display.viewTo)break}else c&&(u.visible=Oh(a.display,a.doc,f));if(!y0(a,u))break;kh(a);var p=hf(a);ff(a),al(a,p),_0(a,p),u.force=!1}u.signal(a,"update",a),(a.display.viewFrom!=a.display.reportedViewFrom||a.display.viewTo!=a.display.reportedViewTo)&&(u.signal(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo),a.display.reportedViewFrom=a.display.viewFrom,a.display.reportedViewTo=a.display.viewTo)}function b0(a,u){var f=new Nh(a,u);if(y0(a,f)){kh(a),XN(a,f);var c=hf(a);ff(a),al(a,c),_0(a,c),f.finish()}}function Y2(a,u,f){var c=a.display,p=a.options.lineNumbers,g=c.lineDiv,E=g.firstChild;function N(ae){var le=ae.nextSibling;return d&&w&&a.display.currentWheelTarget==ae?ae.style.display="none":ae.parentNode.removeChild(ae),le}for(var C=c.view,I=c.viewFrom,U=0;U-1&&(X=!1),SN(a,K,I,f)),X&&(B(K.lineNumber),K.lineNumber.appendChild(document.createTextNode(H(a.options,I)))),E=K.node.nextSibling}I+=K.size}for(;E;)E=N(E)}function T0(a){var u=a.gutters.offsetWidth;a.sizer.style.marginLeft=u+"px",Br(a,"gutterChanged",a)}function _0(a,u){a.display.sizer.style.minHeight=u.docHeight+"px",a.display.heightForcer.style.top=u.docHeight+"px",a.display.gutters.style.height=u.docHeight+a.display.barHeight+Da(a)+"px"}function ZN(a){var u=a.display,f=u.view;if(!(!u.alignWidgets&&(!u.gutters.firstChild||!a.options.fixedGutter))){for(var c=c0(u)-u.scroller.scrollLeft+a.doc.scrollLeft,p=u.gutters.offsetWidth,g=c+"px",E=0;E=105&&(p.wrapper.style.clipPath="inset(0px)"),p.wrapper.setAttribute("translate","no"),s&&l<8&&(p.gutters.style.zIndex=-1,p.scroller.style.paddingRight=0),!d&&!(r&&m)&&(p.scroller.draggable=!0),a&&(a.appendChild?a.appendChild(p.wrapper):a(p.wrapper)),p.viewFrom=p.viewTo=u.first,p.reportedViewFrom=p.reportedViewTo=u.first,p.view=[],p.renderedView=null,p.externalMeasured=null,p.viewOffset=0,p.lastWrapHeight=p.lastWrapWidth=0,p.updateLineNumbers=null,p.nativeBarWidth=p.barHeight=p.barWidth=0,p.scrollbarsClipped=!1,p.lineNumWidth=p.lineNumInnerWidth=p.lineNumChars=null,p.alignWidgets=!1,p.cachedCharWidth=p.cachedTextHeight=p.cachedPaddingH=null,p.maxLine=null,p.maxLineLength=0,p.maxLineChanged=!1,p.wheelDX=p.wheelDY=p.wheelStartX=p.wheelStartY=null,p.shift=!1,p.selForContextMenu=null,p.activeTouch=null,p.gutterSpecs=E0(c.gutters,c.lineNumbers),eD(p),f.init(p)}var Dh=0,co=null;s?co=-.53:r?co=15:v?co=-.7:D&&(co=-1/3);function tD(a){var u=a.wheelDeltaX,f=a.wheelDeltaY;return u==null&&a.detail&&a.axis==a.HORIZONTAL_AXIS&&(u=a.detail),f==null&&a.detail&&a.axis==a.VERTICAL_AXIS?f=a.detail:f==null&&(f=a.wheelDelta),{x:u,y:f}}function X2(a){var u=tD(a);return u.x*=co,u.y*=co,u}function rD(a,u){v&&y==102&&(a.display.chromeScrollHack==null?a.display.sizer.style.pointerEvents="none":clearTimeout(a.display.chromeScrollHack),a.display.chromeScrollHack=setTimeout(function(){a.display.chromeScrollHack=null,a.display.sizer.style.pointerEvents=""},100));var f=tD(u),c=f.x,p=f.y,g=co;u.deltaMode===0&&(c=u.deltaX,p=u.deltaY,g=1);var E=a.display,N=E.scroller,C=N.scrollWidth>N.clientWidth,I=N.scrollHeight>N.clientHeight;if(!!(c&&C||p&&I)){if(p&&w&&d){e:for(var U=u.target,K=E.view;U!=N;U=U.parentNode)for(var $=0;$=0&&ie(a,c.to())<=0)return f}return-1};var Nt=function(a,u){this.anchor=a,this.head=u};Nt.prototype.from=function(){return Pr(this.anchor,this.head)},Nt.prototype.to=function(){return _t(this.anchor,this.head)},Nt.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch};function da(a,u,f){var c=a&&a.options.selectionsMayTouch,p=u[f];u.sort(function($,X){return ie($.from(),X.from())}),f=we(u,p);for(var g=1;g0:C>=0){var I=Pr(N.from(),E.from()),U=_t(N.to(),E.to()),K=N.empty()?E.from()==E.head:N.from()==N.head;g<=f&&--f,u.splice(--g,2,new Nt(K?U:I,K?I:U))}}return new ki(u,f)}function Vo(a,u){return new ki([new Nt(a,u||a)],0)}function Uo(a){return a.text?W(a.from.line+a.text.length-1,se(a.text).length+(a.text.length==1?a.from.ch:0)):a.to}function nD(a,u){if(ie(a,u.from)<0)return a;if(ie(a,u.to)<=0)return Uo(u);var f=a.line+u.text.length-(u.to.line-u.from.line)-1,c=a.ch;return a.line==u.to.line&&(c+=Uo(u).ch-u.to.ch),W(f,c)}function S0(a,u){for(var f=[],c=0;c1&&a.remove(N.line+1,ae-1),a.insert(N.line+1,be)}Br(a,"change",a,u)}function Go(a,u,f){function c(p,g,E){if(p.linked)for(var N=0;N1&&!a.done[a.done.length-2].ranges)return a.done.pop(),se(a.done)}function lD(a,u,f,c){var p=a.history;p.undone.length=0;var g=+new Date,E,N;if((p.lastOp==c||p.lastOrigin==u.origin&&u.origin&&(u.origin.charAt(0)=="+"&&p.lastModTime>g-(a.cm?a.cm.options.historyEventDelay:500)||u.origin.charAt(0)=="*"))&&(E=eB(p,p.lastOp==c)))N=se(E.changes),ie(u.from,u.to)==0&&ie(u.from,N.to)==0?N.to=Uo(u):E.changes.push(w0(a,u));else{var C=se(p.done);for((!C||!C.ranges)&&Ch(a.sel,p.done),E={changes:[w0(a,u)],generation:p.generation},p.done.push(E);p.done.length>p.undoDepth;)p.done.shift(),p.done[0].ranges||p.done.shift()}p.done.push(f),p.generation=++p.maxGeneration,p.lastModTime=p.lastSelTime=g,p.lastOp=p.lastSelOp=c,p.lastOrigin=p.lastSelOrigin=u.origin,N||Ft(a,"historyAdded")}function tB(a,u,f,c){var p=u.charAt(0);return p=="*"||p=="+"&&f.ranges.length==c.ranges.length&&f.somethingSelected()==c.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function rB(a,u,f,c){var p=a.history,g=c&&c.origin;f==p.lastSelOp||g&&p.lastSelOrigin==g&&(p.lastModTime==p.lastSelTime&&p.lastOrigin==g||tB(a,g,se(p.done),u))?p.done[p.done.length-1]=u:Ch(u,p.done),p.lastSelTime=+new Date,p.lastSelOrigin=g,p.lastSelOp=f,c&&c.clearRedo!==!1&&sD(p.undone)}function Ch(a,u){var f=se(u);f&&f.ranges&&f.equals(a)||u.push(a)}function cD(a,u,f,c){var p=u["spans_"+a.id],g=0;a.iter(Math.max(a.first,f),Math.min(a.first+a.size,c),function(E){E.markedSpans&&((p||(p=u["spans_"+a.id]={}))[g]=E.markedSpans),++g})}function nB(a){if(!a)return null;for(var u,f=0;f-1&&(se(N)[K]=I[K],delete I[K])}}return c}function N0(a,u,f,c){if(c){var p=a.anchor;if(f){var g=ie(u,p)<0;g!=ie(f,p)<0?(p=u,u=f):g!=ie(u,f)<0&&(u=f)}return new Nt(p,u)}else return new Nt(f||u,u)}function Lh(a,u,f,c,p){p==null&&(p=a.cm&&(a.cm.display.shift||a.extend)),gn(a,new ki([N0(a.sel.primary(),u,f,p)],0),c)}function dD(a,u,f){for(var c=[],p=a.cm&&(a.cm.display.shift||a.extend),g=0;g=u.ch:N.to>u.ch))){if(p&&(Ft(C,"beforeCursorEnter"),C.explicitlyCleared))if(g.markedSpans){--E;continue}else break;if(!C.atomic)continue;if(f){var K=C.find(c<0?1:-1),$=void 0;if((c<0?U:I)&&(K=yD(a,K,-c,K&&K.line==u.line?g:null)),K&&K.line==u.line&&($=ie(K,f))&&(c<0?$<0:$>0))return ul(a,K,u,c,p)}var X=C.find(c<0?-1:1);return(c<0?I:U)&&(X=yD(a,X,c,X.line==u.line?g:null)),X?ul(a,X,u,c,p):null}}return u}function Ah(a,u,f,c,p){var g=c||1,E=ul(a,u,f,g,p)||!p&&ul(a,u,f,g,!0)||ul(a,u,f,-g,p)||!p&&ul(a,u,f,-g,!0);return E||(a.cantEdit=!0,W(a.first,0))}function yD(a,u,f,c){return f<0&&u.ch==0?u.line>a.first?Ye(a,W(u.line-1)):null:f>0&&u.ch==(c||Ae(a,u.line)).text.length?u.line=0;--p)_D(a,{from:c[p].from,to:c[p].to,text:p?[""]:u.text,origin:u.origin});else _D(a,u)}}function _D(a,u){if(!(u.text.length==1&&u.text[0]==""&&ie(u.from,u.to)==0)){var f=S0(a,u);lD(a,u,f,a.cm?a.cm.curOp.id:NaN),bf(a,u,f,Jy(a,u));var c=[];Go(a,function(p,g){!g&&we(c,p.history)==-1&&(OD(p.history,u),c.push(p.history)),bf(p,u,null,Jy(p,u))})}}function Rh(a,u,f){var c=a.cm&&a.cm.state.suppressEdits;if(!(c&&!f)){for(var p=a.history,g,E=a.sel,N=u=="undo"?p.done:p.undone,C=u=="undo"?p.undone:p.done,I=0;I=0;--X){var ae=$(X);if(ae)return ae.v}}}}function ED(a,u){if(u!=0&&(a.first+=u,a.sel=new ki(Ue(a.sel.ranges,function(p){return new Nt(W(p.anchor.line+u,p.anchor.ch),W(p.head.line+u,p.head.ch))}),a.sel.primIndex),a.cm)){Wn(a.cm,a.first,a.first-u,u);for(var f=a.cm.display,c=f.viewFrom;ca.lastLine())){if(u.from.lineg&&(u={from:u.from,to:W(g,Ae(a,g).text.length),text:[u.text[0]],origin:u.origin}),u.removed=oo(a,u.from,u.to),f||(f=S0(a,u)),a.cm?oB(a.cm,u,c):O0(a,u,c),Ih(a,f,Qe),a.cantEdit&&Ah(a,W(a.firstLine(),0))&&(a.cantEdit=!1)}}function oB(a,u,f){var c=a.doc,p=a.display,g=u.from,E=u.to,N=!1,C=g.line;a.options.lineWrapping||(C=wt(ca(Ae(c,g.line))),c.iter(C,E.line+1,function(X){if(X==p.maxLine)return N=!0,!0})),c.sel.contains(u.from,u.to)>-1&&Ys(a),O0(c,u,f,UN(a)),a.options.lineWrapping||(c.iter(C,g.line+u.text.length,function(X){var ae=mh(X);ae>p.maxLineLength&&(p.maxLine=X,p.maxLineLength=ae,p.maxLineChanged=!0,N=!1)}),N&&(a.curOp.updateMaxLine=!0)),YQ(c,g.line),gf(a,400);var I=u.text.length-(E.line-g.line)-1;u.full?Wn(a):g.line==E.line&&u.text.length==1&&!aD(a.doc,u)?Mo(a,g.line,"text"):Wn(a,g.line,E.line+1,I);var U=on(a,"changes"),K=on(a,"change");if(K||U){var $={from:g,to:E,text:u.text,removed:u.removed,origin:u.origin};K&&Br(a,"change",a,$),U&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push($)}a.display.selForContextMenu=null}function ll(a,u,f,c,p){var g;c||(c=f),ie(c,f)<0&&(g=[c,f],f=g[0],c=g[1]),typeof u=="string"&&(u=a.splitLines(u)),sl(a,{from:f,to:c,text:u,origin:p})}function SD(a,u,f,c){f1||!(this.children[0]instanceof _f))){var N=[];this.collapse(N),this.children=[new _f(N)],this.children[0].parent=this}},collapse:function(a){for(var u=0;u50){for(var E=p.lines.length%25+25,N=E;N10);a.parent.maybeSpill()}},iterN:function(a,u,f){for(var c=0;ca.display.maxLineLength&&(a.display.maxLine=I,a.display.maxLineLength=U,a.display.maxLineChanged=!0)}c!=null&&a&&this.collapsed&&Wn(a,c,p+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,a&&gD(a.doc)),a&&Br(a,"markerCleared",a,this,c,p),u&&Ju(a),this.parent&&this.parent.clear()}},Qo.prototype.find=function(a,u){a==null&&this.type=="bookmark"&&(a=1);for(var f,c,p=0;p0||E==0&&g.clearWhenEmpty!==!1)return g;if(g.replacedWith&&(g.collapsed=!0,g.widgetNode=he("span",[g.replacedWith],"CodeMirror-widget"),c.handleMouseEvents||g.widgetNode.setAttribute("cm-ignore-events","true"),c.insertLeft&&(g.widgetNode.insertLeft=!0)),g.collapsed){if(mN(a,u.line,u,f,g)||u.line!=f.line&&mN(a,f.line,u,f,g))throw new Error("Inserting collapsed marker partially overlapping an existing one");XQ()}g.addToHistory&&lD(a,{from:u,to:f,origin:"markText"},a.sel,NaN);var N=u.line,C=a.cm,I;if(a.iter(N,f.line+1,function(K){C&&g.collapsed&&!C.options.lineWrapping&&ca(K)==C.display.maxLine&&(I=!0),g.collapsed&&N!=u.line&&Fi(K,0),$Q(K,new ph(g,N==u.line?u.ch:null,N==f.line?f.ch:null),a.cm&&a.cm.curOp),++N}),g.collapsed&&a.iter(u.line,f.line+1,function(K){Fo(a,K)&&Fi(K,0)}),g.clearOnEnter&&_e(g,"beforeCursorEnter",function(){return g.clear()}),g.readOnly&&(JQ(),(a.history.done.length||a.history.undone.length)&&a.clearHistory()),g.collapsed&&(g.id=++ND,g.atomic=!0),C){if(I&&(C.curOp.updateMaxLine=!0),g.collapsed)Wn(C,u.line,f.line+1);else if(g.className||g.startStyle||g.endStyle||g.css||g.attributes||g.title)for(var U=u.line;U<=f.line;U++)Mo(C,U,"text");g.atomic&&gD(C.doc),Br(C,"markerAdded",C,g)}return g}var kf=function(a,u){this.markers=a,this.primary=u;for(var f=0;f=0;C--)sl(this,c[C]);N?hD(this,N):this.cm&&il(this.cm)}),undo:Hr(function(){Rh(this,"undo")}),redo:Hr(function(){Rh(this,"redo")}),undoSelection:Hr(function(){Rh(this,"undo",!0)}),redoSelection:Hr(function(){Rh(this,"redo",!0)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=this.history,u=0,f=0,c=0;c=a.ch)&&u.push(p.marker.parent||p.marker)}return u},findMarks:function(a,u,f){a=Ye(this,a),u=Ye(this,u);var c=[],p=a.line;return this.iter(a.line,u.line+1,function(g){var E=g.markedSpans;if(E)for(var N=0;N=C.to||C.from==null&&p!=a.line||C.from!=null&&p==u.line&&C.from>=u.ch)&&(!f||f(C.marker))&&c.push(C.marker.parent||C.marker)}++p}),c},getAllMarks:function(){var a=[];return this.iter(function(u){var f=u.markedSpans;if(f)for(var c=0;ca)return u=a,!0;a-=g,++f}),Ye(this,W(f,u))},indexFromPos:function(a){a=Ye(this,a);var u=a.ch;if(a.lineu&&(u=a.from),a.to!=null&&a.to-1){u.state.draggingText(a),setTimeout(function(){return u.display.input.focus()},20);return}try{var U=a.dataTransfer.getData("Text");if(U){var K;if(u.state.draggingText&&!u.state.draggingText.copy&&(K=u.listSelections()),Ih(u.doc,Vo(f,f)),K)for(var $=0;$=0;N--)ll(a.doc,"",c[N].from,c[N].to,"+delete");il(a)})}function x0(a,u,f){var c=Qr(a.text,u+f,f);return c<0||c>a.text.length?null:c}function C0(a,u,f){var c=x0(a,u.ch,f);return c==null?null:new W(u.line,c,f<0?"after":"before")}function L0(a,u,f,c,p){if(a){u.doc.direction=="rtl"&&(p=-p);var g=xn(f,u.doc.direction);if(g){var E=p<0?se(g):g[0],N=p<0==(E.level==1),C=N?"after":"before",I;if(E.level>0||u.doc.direction=="rtl"){var U=el(u,f);I=p<0?f.text.length-1:0;var K=xa(u,U,I).top;I=Kt(function($){return xa(u,U,$).top==K},p<0==(E.level==1)?E.from:E.to-1,I),C=="before"&&(I=x0(f,I,1))}else I=p<0?E.to:E.from;return new W(c,I,C)}}return new W(c,p<0?f.text.length:0,p<0?"before":"after")}function TB(a,u,f,c){var p=xn(u,a.doc.direction);if(!p)return C0(u,f,c);f.ch>=u.text.length?(f.ch=u.text.length,f.sticky="before"):f.ch<=0&&(f.ch=0,f.sticky="after");var g=vr(p,f.ch,f.sticky),E=p[g];if(a.doc.direction=="ltr"&&E.level%2==0&&(c>0?E.to>f.ch:E.from=E.from&&$>=U.begin)){var X=K?"before":"after";return new W(f.line,$,X)}}var ae=function(be,Ne,Te){for(var Ce=function(Ht,zr){return zr?new W(f.line,N(Ht,1),"before"):new W(f.line,Ht,"after")};be>=0&&be0==(Ge.level!=1),lt=qe?Te.begin:N(Te.end,-1);if(Ge.from<=lt&<0?U.end:N(U.begin,-1);return pe!=null&&!(c>0&&pe==u.text.length)&&(le=ae(c>0?0:p.length-1,c,I(pe)),le)?le:null}var Nf={selectAll:bD,singleSelection:function(a){return a.setSelection(a.getCursor("anchor"),a.getCursor("head"),Qe)},killLine:function(a){return dl(a,function(u){if(u.empty()){var f=Ae(a.doc,u.head.line).text.length;return u.head.ch==f&&u.head.line0)p=new W(p.line,p.ch+1),a.replaceRange(g.charAt(p.ch-1)+g.charAt(p.ch-2),W(p.line,p.ch-2),p,"+transpose");else if(p.line>a.doc.first){var E=Ae(a.doc,p.line-1).text;E&&(p=new W(p.line,1),a.replaceRange(g.charAt(0)+a.doc.lineSeparator()+E.charAt(E.length-1),W(p.line-1,E.length-1),p,"+transpose"))}}f.push(new Nt(p,p))}a.setSelections(f)})},newlineAndIndent:function(a){return si(a,function(){for(var u=a.listSelections(),f=u.length-1;f>=0;f--)a.replaceRange(a.doc.lineSeparator(),u[f].anchor,u[f].head,"+input");u=a.listSelections();for(var c=0;ca&&ie(u,this.pos)==0&&f==this.button};var xf,Cf;function NB(a,u){var f=+new Date;return Cf&&Cf.compare(f,a,u)?(xf=Cf=null,"triple"):xf&&xf.compare(f,a,u)?(Cf=new A0(f,a,u),xf=null,"double"):(xf=new A0(f,a,u),Cf=null,"single")}function QD(a){var u=this,f=u.display;if(!(nr(u,a)||f.activeTouch&&f.input.supportsTouch())){if(f.input.ensurePolled(),f.shift=a.shiftKey,lo(f,a)){d||(f.scroller.draggable=!1,setTimeout(function(){return f.scroller.draggable=!0},100));return}if(!R0(u,a)){var c=Ku(u,a),p=A(a),g=c?NB(c,p):"single";At(u).focus(),p==1&&u.state.selectingText&&u.state.selectingText(a),!(c&&DB(u,p,c,g,a))&&(p==1?c?CB(u,c,g,a):V(a)==f.scroller&&ee(a):p==2?(c&&Lh(u.doc,c),setTimeout(function(){return f.input.focus()},20)):p==3&&(M?u.display.input.onContextMenu(a):h0(u)))}}}function DB(a,u,f,c,p){var g="Click";return c=="double"?g="Double"+g:c=="triple"&&(g="Triple"+g),g=(u==1?"Left":u==2?"Middle":"Right")+g,Df(a,RD(g,p),p,function(E){if(typeof E=="string"&&(E=Nf[E]),!E)return!1;var N=!1;try{a.isReadOnly()&&(a.state.suppressEdits=!0),N=E(a,f)!=Me}finally{a.state.suppressEdits=!1}return N})}function xB(a,u,f){var c=a.getOption("configureMouse"),p=c?c(a,u,f):{};if(p.unit==null){var g=x?f.shiftKey&&f.metaKey:f.altKey;p.unit=g?"rectangle":u=="single"?"char":u=="double"?"word":"line"}return(p.extend==null||a.doc.extend)&&(p.extend=a.doc.extend||f.shiftKey),p.addNew==null&&(p.addNew=w?f.metaKey:f.ctrlKey),p.moveOnDrag==null&&(p.moveOnDrag=!(w?f.altKey:f.ctrlKey)),p}function CB(a,u,f,c){s?setTimeout(Ot(BN,a),0):a.curOp.focus=Fe(Ve(a));var p=xB(a,f,c),g=a.doc.sel,E;a.options.dragDrop&&re&&!a.isReadOnly()&&f=="single"&&(E=g.contains(u))>-1&&(ie((E=g.ranges[E]).from(),u)<0||u.xRel>0)&&(ie(E.to(),u)>0||u.xRel<0)?LB(a,c,u,p):IB(a,c,u,p)}function LB(a,u,f,c){var p=a.display,g=!1,E=Kr(a,function(I){d&&(p.scroller.draggable=!1),a.state.draggingText=!1,a.state.delayingBlurEvent&&(a.hasFocus()?a.state.delayingBlurEvent=!1:h0(a)),Ar(p.wrapper.ownerDocument,"mouseup",E),Ar(p.wrapper.ownerDocument,"mousemove",N),Ar(p.scroller,"dragstart",C),Ar(p.scroller,"drop",E),g||(ee(I),c.addNew||Lh(a.doc,f,null,null,c.extend),d&&!D||s&&l==9?setTimeout(function(){p.wrapper.ownerDocument.body.focus({preventScroll:!0}),p.input.focus()},20):p.input.focus())}),N=function(I){g=g||Math.abs(u.clientX-I.clientX)+Math.abs(u.clientY-I.clientY)>=10},C=function(){return g=!0};d&&(p.scroller.draggable=!0),a.state.draggingText=E,E.copy=!c.moveOnDrag,_e(p.wrapper.ownerDocument,"mouseup",E),_e(p.wrapper.ownerDocument,"mousemove",N),_e(p.scroller,"dragstart",C),_e(p.scroller,"drop",E),a.state.delayingBlurEvent=!0,setTimeout(function(){return p.input.focus()},20),p.scroller.dragDrop&&p.scroller.dragDrop()}function BD(a,u,f){if(f=="char")return new Nt(u,u);if(f=="word")return a.findWordAt(u);if(f=="line")return new Nt(W(u.line,0),Ye(a.doc,W(u.line+1,0)));var c=f(a,u);return new Nt(c.from,c.to)}function IB(a,u,f,c){s&&h0(a);var p=a.display,g=a.doc;ee(u);var E,N,C=g.sel,I=C.ranges;if(c.addNew&&!c.extend?(N=g.sel.contains(f),N>-1?E=I[N]:E=new Nt(f,f)):(E=g.sel.primary(),N=g.sel.primIndex),c.unit=="rectangle")c.addNew||(E=new Nt(f,f)),f=Ku(a,u,!0,!0),N=-1;else{var U=BD(a,f,c.unit);c.extend?E=N0(E,U.anchor,U.head,c.extend):E=U}c.addNew?N==-1?(N=I.length,gn(g,da(a,I.concat([E]),N),{scroll:!1,origin:"*mouse"})):I.length>1&&I[N].empty()&&c.unit=="char"&&!c.extend?(gn(g,da(a,I.slice(0,N).concat(I.slice(N+1)),0),{scroll:!1,origin:"*mouse"}),C=g.sel):D0(g,N,E,ze):(N=0,gn(g,new ki([E],0),ze),C=g.sel);var K=f;function $(Te){if(ie(K,Te)!=0)if(K=Te,c.unit=="rectangle"){for(var Ce=[],Ge=a.options.tabSize,qe=te(Ae(g,f.line).text,f.ch,Ge),lt=te(Ae(g,Te.line).text,Te.ch,Ge),Ht=Math.min(qe,lt),zr=Math.max(qe,lt),lr=Math.min(f.line,Te.line),li=Math.min(a.lastLine(),Math.max(f.line,Te.line));lr<=li;lr++){var Jn=Ae(g,lr).text,wr=oe(Jn,Ht,Ge);Ht==zr?Ce.push(new Nt(W(lr,wr),W(lr,wr))):Jn.length>wr&&Ce.push(new Nt(W(lr,wr),W(lr,oe(Jn,zr,Ge))))}Ce.length||Ce.push(new Nt(f,f)),gn(g,da(a,C.ranges.slice(0,N).concat(Ce),N),{origin:"*mouse",scroll:!1}),a.scrollIntoView(Te)}else{var Xn=E,sn=BD(a,Te,c.unit),Fr=Xn.anchor,Nr;ie(sn.anchor,Fr)>0?(Nr=sn.head,Fr=Pr(Xn.from(),sn.anchor)):(Nr=sn.anchor,Fr=_t(Xn.to(),sn.head));var mr=C.ranges.slice(0);mr[N]=AB(a,new Nt(Ye(g,Fr),Nr)),gn(g,da(a,mr,N),ze)}}var X=p.wrapper.getBoundingClientRect(),ae=0;function le(Te){var Ce=++ae,Ge=Ku(a,Te,!0,c.unit=="rectangle");if(!!Ge)if(ie(Ge,K)!=0){a.curOp.focus=Fe(Ve(a)),$(Ge);var qe=Oh(p,g);(Ge.line>=qe.to||Ge.lineX.bottom?20:0;lt&&setTimeout(Kr(a,function(){ae==Ce&&(p.scroller.scrollTop+=lt,le(Te))}),50)}}function pe(Te){a.state.selectingText=!1,ae=1/0,Te&&(ee(Te),p.input.focus()),Ar(p.wrapper.ownerDocument,"mousemove",be),Ar(p.wrapper.ownerDocument,"mouseup",Ne),g.history.lastSelOrigin=null}var be=Kr(a,function(Te){Te.buttons===0||!A(Te)?pe(Te):le(Te)}),Ne=Kr(a,pe);a.state.selectingText=Ne,_e(p.wrapper.ownerDocument,"mousemove",be),_e(p.wrapper.ownerDocument,"mouseup",Ne)}function AB(a,u){var f=u.anchor,c=u.head,p=Ae(a.doc,f.line);if(ie(f,c)==0&&f.sticky==c.sticky)return u;var g=xn(p);if(!g)return u;var E=vr(g,f.ch,f.sticky),N=g[E];if(N.from!=f.ch&&N.to!=f.ch)return u;var C=E+(N.from==f.ch==(N.level!=1)?0:1);if(C==0||C==g.length)return u;var I;if(c.line!=f.line)I=(c.line-f.line)*(a.doc.direction=="ltr"?1:-1)>0;else{var U=vr(g,c.ch,c.sticky),K=U-E||(c.ch-f.ch)*(N.level==1?-1:1);U==C-1||U==C?I=K<0:I=K>0}var $=g[C+(I?-1:0)],X=I==($.level==1),ae=X?$.from:$.to,le=X?"after":"before";return f.ch==ae&&f.sticky==le?u:new Nt(new W(f.line,ae,le),c)}function KD(a,u,f,c){var p,g;if(u.touches)p=u.touches[0].clientX,g=u.touches[0].clientY;else try{p=u.clientX,g=u.clientY}catch($){return!1}if(p>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;c&&ee(u);var E=a.display,N=E.lineDiv.getBoundingClientRect();if(g>N.bottom||!on(a,f))return Y(u);g-=N.top-E.viewOffset;for(var C=0;C=p){var U=wa(a.doc,g),K=a.display.gutterSpecs[C];return Ft(a,f,a,U,K.className,u),Y(u)}}}function R0(a,u){return KD(a,u,"gutterClick",!0)}function HD(a,u){lo(a.display,u)||RB(a,u)||nr(a,u,"contextmenu")||M||a.display.input.onContextMenu(u)}function RB(a,u){return on(a,"gutterContextMenu")?KD(a,u,"gutterContextMenu",!1):!1}function zD(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),cf(a)}var pl={toString:function(){return"CodeMirror.Init"}},WD={},Mh={};function jB(a){var u=a.optionHandlers;function f(c,p,g,E){a.defaults[c]=p,g&&(u[c]=E?function(N,C,I){I!=pl&&g(N,C,I)}:g)}a.defineOption=f,a.Init=pl,f("value","",function(c,p){return c.setValue(p)},!0),f("mode",null,function(c,p){c.doc.modeOption=p,k0(c)},!0),f("indentUnit",2,k0,!0),f("indentWithTabs",!1),f("smartIndent",!0),f("tabSize",4,function(c){yf(c),cf(c),Wn(c)},!0),f("lineSeparator",null,function(c,p){if(c.doc.lineSep=p,!!p){var g=[],E=c.doc.first;c.doc.iter(function(C){for(var I=0;;){var U=C.text.indexOf(p,I);if(U==-1)break;I=U+p.length,g.push(W(E,U))}E++});for(var N=g.length-1;N>=0;N--)ll(c.doc,p,g[N],W(g[N].line,g[N].ch+p.length))}}),f("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(c,p,g){c.state.specialChars=new RegExp(p.source+(p.test(" ")?"":"| "),"g"),g!=pl&&c.refresh()}),f("specialCharPlaceholder",c2,function(c){return c.refresh()},!0),f("electricChars",!0),f("inputStyle",m?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),f("spellcheck",!1,function(c,p){return c.getInputField().spellcheck=p},!0),f("autocorrect",!1,function(c,p){return c.getInputField().autocorrect=p},!0),f("autocapitalize",!1,function(c,p){return c.getInputField().autocapitalize=p},!0),f("rtlMoveVisually",!L),f("wholeLineUpdateBefore",!0),f("theme","default",function(c){zD(c),mf(c)},!0),f("keyMap","default",function(c,p,g){var E=Ph(p),N=g!=pl&&Ph(g);N&&N.detach&&N.detach(c,E),E.attach&&E.attach(c,N||null)}),f("extraKeys",null),f("configureMouse",null),f("lineWrapping",!1,FB,!0),f("gutters",[],function(c,p){c.display.gutterSpecs=E0(p,c.options.lineNumbers),mf(c)},!0),f("fixedGutter",!0,function(c,p){c.display.gutters.style.left=p?c0(c.display)+"px":"0",c.refresh()},!0),f("coverGutterNextToScrollbar",!1,function(c){return al(c)},!0),f("scrollbarStyle","native",function(c){JN(c),al(c),c.display.scrollbars.setScrollTop(c.doc.scrollTop),c.display.scrollbars.setScrollLeft(c.doc.scrollLeft)},!0),f("lineNumbers",!1,function(c,p){c.display.gutterSpecs=E0(c.options.gutters,p),mf(c)},!0),f("firstLineNumber",1,mf,!0),f("lineNumberFormatter",function(c){return c},mf,!0),f("showCursorWhenSelecting",!1,ff,!0),f("resetSelectionOnContextMenu",!0),f("lineWiseCopyCut",!0),f("pasteLinesPerSelection",!0),f("selectionsMayTouch",!1),f("readOnly",!1,function(c,p){p=="nocursor"&&(nl(c),c.display.input.blur()),c.display.input.readOnlyChanged(p)}),f("screenReaderLabel",null,function(c,p){p=p===""?null:p,c.display.input.screenReaderLabelChanged(p)}),f("disableInput",!1,function(c,p){p||c.display.input.reset()},!0),f("dragDrop",!0,PB),f("allowDropFileTypes",null),f("cursorBlinkRate",530),f("cursorScrollMargin",0),f("cursorHeight",1,ff,!0),f("singleCursorHeightPerLine",!0,ff,!0),f("workTime",100),f("workDelay",100),f("flattenSpans",!0,yf,!0),f("addModeClass",!1,yf,!0),f("pollInterval",100),f("undoDepth",200,function(c,p){return c.doc.history.undoDepth=p}),f("historyEventDelay",1250),f("viewportMargin",10,function(c){return c.refresh()},!0),f("maxHighlightLength",1e4,yf,!0),f("moveInputWithCursor",!0,function(c,p){p||c.display.input.resetPosition()}),f("tabindex",null,function(c,p){return c.display.input.getField().tabIndex=p||""}),f("autofocus",null),f("direction","ltr",function(c,p){return c.doc.setDirection(p)},!0),f("phrases",null)}function PB(a,u,f){var c=f&&f!=pl;if(!u!=!c){var p=a.display.dragFunctions,g=u?_e:Ar;g(a.display.scroller,"dragstart",p.start),g(a.display.scroller,"dragenter",p.enter),g(a.display.scroller,"dragover",p.over),g(a.display.scroller,"dragleave",p.leave),g(a.display.scroller,"drop",p.drop)}}function FB(a){a.options.lineWrapping?(Le(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth="",a.display.sizerWidth=null):(z(a.display.wrapper,"CodeMirror-wrap"),e0(a)),f0(a),Wn(a),cf(a),setTimeout(function(){return al(a)},100)}function ir(a,u){var f=this;if(!(this instanceof ir))return new ir(a,u);this.options=u=u?Ie(u):{},Ie(WD,u,!1);var c=u.value;typeof c=="string"?c=new Yn(c,u.mode,null,u.lineSeparator,u.direction):u.mode&&(c.modeOption=u.mode),this.doc=c;var p=new ir.inputStyles[u.inputStyle](this),g=this.display=new J2(a,c,p,u);g.wrapper.CodeMirror=this,zD(this),u.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),JN(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new ce,keySeq:null,specialChars:null},u.autofocus&&!m&&g.input.focus(),s&&l<11&&setTimeout(function(){return f.display.input.reset(!0)},20),MB(this),vB(),Yu(this),this.curOp.forceUpdate=!0,oD(this,c),u.autofocus&&!m||this.hasFocus()?setTimeout(function(){f.hasFocus()&&!f.state.focused&&v0(f)},20):nl(this);for(var E in Mh)Mh.hasOwnProperty(E)&&Mh[E](this,u[E],pl);$N(this),u.finishInit&&u.finishInit(this);for(var N=0;N20*20}_e(u.scroller,"touchstart",function(C){if(!nr(a,C)&&!g(C)&&!R0(a,C)){u.input.ensurePolled(),clearTimeout(f);var I=+new Date;u.activeTouch={start:I,moved:!1,prev:I-c.end<=300?c:null},C.touches.length==1&&(u.activeTouch.left=C.touches[0].pageX,u.activeTouch.top=C.touches[0].pageY)}}),_e(u.scroller,"touchmove",function(){u.activeTouch&&(u.activeTouch.moved=!0)}),_e(u.scroller,"touchend",function(C){var I=u.activeTouch;if(I&&!lo(u,C)&&I.left!=null&&!I.moved&&new Date-I.start<300){var U=a.coordsChar(u.activeTouch,"page"),K;!I.prev||E(I,I.prev)?K=new Nt(U,U):!I.prev.prev||E(I,I.prev.prev)?K=a.findWordAt(U):K=new Nt(W(U.line,0),Ye(a.doc,W(U.line+1,0))),a.setSelection(K.anchor,K.head),a.focus(),ee(C)}p()}),_e(u.scroller,"touchcancel",p),_e(u.scroller,"scroll",function(){u.scroller.clientHeight&&(pf(a,u.scroller.scrollTop),zu(a,u.scroller.scrollLeft,!0),Ft(a,"scroll",a))}),_e(u.scroller,"mousewheel",function(C){return rD(a,C)}),_e(u.scroller,"DOMMouseScroll",function(C){return rD(a,C)}),_e(u.wrapper,"scroll",function(){return u.wrapper.scrollTop=u.wrapper.scrollLeft=0}),u.dragFunctions={enter:function(C){nr(a,C)||J(C)},over:function(C){nr(a,C)||(hB(a,C),J(C))},start:function(C){return pB(a,C)},drop:Kr(a,dB),leave:function(C){nr(a,C)||CD(a)}};var N=u.input.getField();_e(N,"keyup",function(C){return UD.call(a,C)}),_e(N,"keydown",Kr(a,VD)),_e(N,"keypress",Kr(a,GD)),_e(N,"focus",function(C){return v0(a,C)}),_e(N,"blur",function(C){return nl(a,C)})}var j0=[];ir.defineInitHook=function(a){return j0.push(a)};function Lf(a,u,f,c){var p=a.doc,g;f==null&&(f="add"),f=="smart"&&(p.mode.indent?g=af(a,u).state:f="prev");var E=a.options.tabSize,N=Ae(p,u),C=te(N.text,null,E);N.stateAfter&&(N.stateAfter=null);var I=N.text.match(/^\s*/)[0],U;if(!c&&!/\S/.test(N.text))U=0,f="not";else if(f=="smart"&&(U=p.mode.indent(g,N.text.slice(I.length),N.text),U==Me||U>150)){if(!c)return;f="prev"}f=="prev"?u>p.first?U=te(Ae(p,u-1).text,null,E):U=0:f=="add"?U=C+a.options.indentUnit:f=="subtract"?U=C-a.options.indentUnit:typeof f=="number"&&(U=C+f),U=Math.max(0,U);var K="",$=0;if(a.options.indentWithTabs)for(var X=Math.floor(U/E);X;--X)$+=E,K+=" ";if($E,C=vn(u),I=null;if(N&&c.ranges.length>1)if(pa&&pa.text.join(` -`)==u){if(c.ranges.length%pa.text.length==0){I=[];for(var U=0;U=0;$--){var X=c.ranges[$],ae=X.from(),le=X.to();X.empty()&&(f&&f>0?ae=W(ae.line,ae.ch-f):a.state.overwrite&&!N?le=W(le.line,Math.min(Ae(g,le.line).text.length,le.ch+se(C).length)):N&&pa&&pa.lineWise&&pa.text.join(` -`)==C.join(` -`)&&(ae=le=W(ae.line,0)));var pe={from:ae,to:le,text:I?I[$%I.length]:C,origin:p||(N?"paste":a.state.cutIncoming>E?"cut":"+input")};sl(a.doc,pe),Br(a,"inputRead",a,pe)}u&&!N&&JD(a,u),il(a),a.curOp.updateInput<2&&(a.curOp.updateInput=K),a.curOp.typing=!0,a.state.pasteIncoming=a.state.cutIncoming=-1}function YD(a,u){var f=a.clipboardData&&a.clipboardData.getData("Text");if(f)return a.preventDefault(),!u.isReadOnly()&&!u.options.disableInput&&u.hasFocus()&&si(u,function(){return P0(u,f,0,null,"paste")}),!0}function JD(a,u){if(!(!a.options.electricChars||!a.options.smartIndent))for(var f=a.doc.sel,c=f.ranges.length-1;c>=0;c--){var p=f.ranges[c];if(!(p.head.ch>100||c&&f.ranges[c-1].head.line==p.head.line)){var g=a.getModeAt(p.head),E=!1;if(g.electricChars){for(var N=0;N-1){E=Lf(a,p.head.line,"smart");break}}else g.electricInput&&g.electricInput.test(Ae(a.doc,p.head.line).text.slice(0,p.head.ch))&&(E=Lf(a,p.head.line,"smart"));E&&Br(a,"electricInput",a,p.head.line)}}}function XD(a){for(var u=[],f=[],c=0;cg&&(Lf(this,N.head.line,c,!0),g=N.head.line,E==this.doc.sel.primIndex&&il(this));else{var C=N.from(),I=N.to(),U=Math.max(g,C.line);g=Math.min(this.lastLine(),I.line-(I.ch?0:1))+1;for(var K=U;K0&&D0(this.doc,E,new Nt(C,$[E].to()),Qe)}}}),getTokenAt:function(c,p){return sN(this,c,p)},getLineTokens:function(c,p){return sN(this,W(c),p,!0)},getTokenTypeAt:function(c){c=Ye(this.doc,c);var p=aN(this,Ae(this.doc,c.line)),g=0,E=(p.length-1)/2,N=c.ch,C;if(N==0)C=p[2];else for(;;){var I=g+E>>1;if((I?p[I*2-1]:0)>=N)E=I;else if(p[I*2+1]C&&(c=C,E=!0),N=Ae(this.doc,c)}else N=c;return Th(this,N,{top:0,left:0},p||"page",g||E).top+(E?this.doc.height-so(N):0)},defaultTextHeight:function(){return tl(this.display)},defaultCharWidth:function(){return rl(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(c,p,g,E,N){var C=this.display;c=fa(this,Ye(this.doc,c));var I=c.bottom,U=c.left;if(p.style.position="absolute",p.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(p),C.sizer.appendChild(p),E=="over")I=c.top;else if(E=="above"||E=="near"){var K=Math.max(C.wrapper.clientHeight,this.doc.height),$=Math.max(C.sizer.clientWidth,C.lineSpace.clientWidth);(E=="above"||c.bottom+p.offsetHeight>K)&&c.top>p.offsetHeight?I=c.top-p.offsetHeight:c.bottom+p.offsetHeight<=K&&(I=c.bottom),U+p.offsetWidth>$&&(U=$-p.offsetWidth)}p.style.top=I+"px",p.style.left=p.style.right="",N=="right"?(U=C.sizer.clientWidth-p.offsetWidth,p.style.right="0px"):(N=="left"?U=0:N=="middle"&&(U=(C.sizer.clientWidth-p.offsetWidth)/2),p.style.left=U+"px"),g&&P2(this,{left:U,top:I,right:U+p.offsetWidth,bottom:I+p.offsetHeight})},triggerOnKeyDown:Ln(VD),triggerOnKeyPress:Ln(GD),triggerOnKeyUp:UD,triggerOnMouseDown:Ln(QD),execCommand:function(c){if(Nf.hasOwnProperty(c))return Nf[c].call(null,this)},triggerElectric:Ln(function(c){JD(this,c)}),findPosH:function(c,p,g,E){var N=1;p<0&&(N=-1,p=-p);for(var C=Ye(this.doc,c),I=0;I0&&U(g.charAt(E-1));)--E;for(;N.5||this.options.lineWrapping)&&f0(this),Ft(this,"refresh",this)}),swapDoc:Ln(function(c){var p=this.doc;return p.cm=null,this.state.selectingText&&this.state.selectingText(),oD(this,c),cf(this),this.display.input.reset(),df(this,c.scrollLeft,c.scrollTop),this.curOp.forceScroll=!0,Br(this,"swapDoc",this,p),p}),phrase:function(c){var p=this.options.phrases;return p&&Object.prototype.hasOwnProperty.call(p,c)?p[c]:c},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},un(a),a.registerHelper=function(c,p,g){f.hasOwnProperty(c)||(f[c]=a[c]={_global:[]}),f[c][p]=g},a.registerGlobalHelper=function(c,p,g,E){a.registerHelper(c,p,E),f[c]._global.push({pred:g,val:E})}}function M0(a,u,f,c,p){var g=u,E=f,N=Ae(a,u.line),C=p&&a.direction=="rtl"?-f:f;function I(){var Ne=u.line+C;return Ne=a.first+a.size?!1:(u=new W(Ne,u.ch,u.sticky),N=Ae(a,Ne))}function U(Ne){var Te;if(c=="codepoint"){var Ce=N.text.charCodeAt(u.ch+(f>0?0:-1));if(isNaN(Ce))Te=null;else{var Ge=f>0?Ce>=55296&&Ce<56320:Ce>=56320&&Ce<57343;Te=new W(u.line,Math.max(0,Math.min(N.text.length,u.ch+f*(Ge?2:1))),-f)}}else p?Te=TB(a.cm,N,u,f):Te=C0(N,u,f);if(Te==null)if(!Ne&&I())u=L0(p,a.cm,N,u.line,C);else return!1;else u=Te;return!0}if(c=="char"||c=="codepoint")U();else if(c=="column")U(!0);else if(c=="word"||c=="group")for(var K=null,$=c=="group",X=a.cm&&a.cm.getHelper(u,"wordChars"),ae=!0;!(f<0&&!U(!ae));ae=!1){var le=N.text.charAt(u.ch)||` -`,pe=dn(le,X)?"w":$&&le==` -`?"n":!$||/\s/.test(le)?null:"p";if($&&!ae&&!pe&&(pe="s"),K&&K!=pe){f<0&&(f=1,U(),u.sticky="after");break}if(pe&&(K=pe),f>0&&!U(!ae))break}var be=Ah(a,u,g,E,!0);return We(g,be)&&(be.hitSide=!0),be}function $D(a,u,f,c){var p=a.doc,g=u.left,E;if(c=="page"){var N=Math.min(a.display.wrapper.clientHeight,At(a).innerHeight||p(a).documentElement.clientHeight),C=Math.max(N-.5*tl(a.display),3);E=(f>0?u.bottom:u.top)+f*C}else c=="line"&&(E=f>0?u.bottom+3:u.top-3);for(var I;I=u0(a,g,E),!!I.outside;){if(f<0?E<=0:E>=p.height){I.hitSide=!0;break}E+=f*5}return I}var Mt=function(a){this.cm=a,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new ce,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};Mt.prototype.init=function(a){var u=this,f=this,c=f.cm,p=f.div=a.lineDiv;p.contentEditable=!0,F0(p,c.options.spellcheck,c.options.autocorrect,c.options.autocapitalize);function g(N){for(var C=N.target;C;C=C.parentNode){if(C==p)return!0;if(/\bCodeMirror-(?:line)?widget\b/.test(C.className))break}return!1}_e(p,"paste",function(N){!g(N)||nr(c,N)||YD(N,c)||l<=11&&setTimeout(Kr(c,function(){return u.updateFromDOM()}),20)}),_e(p,"compositionstart",function(N){u.composing={data:N.data,done:!1}}),_e(p,"compositionupdate",function(N){u.composing||(u.composing={data:N.data,done:!1})}),_e(p,"compositionend",function(N){u.composing&&(N.data!=u.composing.data&&u.readFromDOMSoon(),u.composing.done=!0)}),_e(p,"touchstart",function(){return f.forceCompositionEnd()}),_e(p,"input",function(){u.composing||u.readFromDOMSoon()});function E(N){if(!(!g(N)||nr(c,N))){if(c.somethingSelected())qh({lineWise:!1,text:c.getSelections()}),N.type=="cut"&&c.replaceSelection("",null,"cut");else if(c.options.lineWiseCopyCut){var C=XD(c);qh({lineWise:!0,text:C.text}),N.type=="cut"&&c.operation(function(){c.setSelections(C.ranges,0,Qe),c.replaceSelection("",null,"cut")})}else return;if(N.clipboardData){N.clipboardData.clearData();var I=pa.text.join(` -`);if(N.clipboardData.setData("Text",I),N.clipboardData.getData("Text")==I){N.preventDefault();return}}var U=ZD(),K=U.firstChild;F0(K),c.display.lineSpace.insertBefore(U,c.display.lineSpace.firstChild),K.value=pa.text.join(` -`);var $=Fe(p.ownerDocument);Xe(K),setTimeout(function(){c.display.lineSpace.removeChild(U),$.focus(),$==p&&f.showPrimarySelection()},50)}}_e(p,"copy",E),_e(p,"cut",E)},Mt.prototype.screenReaderLabelChanged=function(a){a?this.div.setAttribute("aria-label",a):this.div.removeAttribute("aria-label")},Mt.prototype.prepareSelection=function(){var a=QN(this.cm,!1);return a.focus=Fe(this.div.ownerDocument)==this.div,a},Mt.prototype.showSelection=function(a,u){!a||!this.cm.display.view.length||((a.focus||u)&&this.showPrimarySelection(),this.showMultipleSelections(a))},Mt.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Mt.prototype.showPrimarySelection=function(){var a=this.getSelection(),u=this.cm,f=u.doc.sel.primary(),c=f.from(),p=f.to();if(u.display.viewTo==u.display.viewFrom||c.line>=u.display.viewTo||p.line=u.display.viewFrom&&ex(u,c)||{node:N[0].measure.map[2],offset:0},I=p.linea.firstLine()&&(c=W(c.line-1,Ae(a.doc,c.line-1).length)),p.ch==Ae(a.doc,p.line).text.length&&p.lineu.viewTo-1)return!1;var g,E,N;c.line==u.viewFrom||(g=Hu(a,c.line))==0?(E=wt(u.view[0].line),N=u.view[0].node):(E=wt(u.view[g].line),N=u.view[g-1].node.nextSibling);var C=Hu(a,p.line),I,U;if(C==u.view.length-1?(I=u.viewTo-1,U=u.lineDiv.lastChild):(I=wt(u.view[C+1].line)-1,U=u.view[C+1].node.previousSibling),!N)return!1;for(var K=a.doc.splitLines(UB(a,N,U,E,I)),$=oo(a.doc,W(E,0),W(I,Ae(a.doc,I).text.length));K.length>1&&$.length>1;)if(se(K)==se($))K.pop(),$.pop(),I--;else if(K[0]==$[0])K.shift(),$.shift(),E++;else break;for(var X=0,ae=0,le=K[0],pe=$[0],be=Math.min(le.length,pe.length);Xc.ch&&Ne.charCodeAt(Ne.length-ae-1)==Te.charCodeAt(Te.length-ae-1);)X--,ae++;K[K.length-1]=Ne.slice(0,Ne.length-ae).replace(/^\u200b+/,""),K[0]=K[0].slice(X).replace(/\u200b+$/,"");var Ge=W(E,X),qe=W(I,$.length?se($).length-ae:0);if(K.length>1||K[0]||ie(Ge,qe))return ll(a.doc,K,Ge,qe,"+input"),!0},Mt.prototype.ensurePolled=function(){this.forceCompositionEnd()},Mt.prototype.reset=function(){this.forceCompositionEnd()},Mt.prototype.forceCompositionEnd=function(){!this.composing||(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Mt.prototype.readFromDOMSoon=function(){var a=this;this.readDOMTimeout==null&&(this.readDOMTimeout=setTimeout(function(){if(a.readDOMTimeout=null,a.composing)if(a.composing.done)a.composing=null;else return;a.updateFromDOM()},80))},Mt.prototype.updateFromDOM=function(){var a=this;(this.cm.isReadOnly()||!this.pollContent())&&si(this.cm,function(){return Wn(a.cm)})},Mt.prototype.setUneditable=function(a){a.contentEditable="false"},Mt.prototype.onKeyPress=function(a){a.charCode==0||this.composing||(a.preventDefault(),this.cm.isReadOnly()||Kr(this.cm,P0)(this.cm,String.fromCharCode(a.charCode==null?a.keyCode:a.charCode),0))},Mt.prototype.readOnlyChanged=function(a){this.div.contentEditable=String(a!="nocursor")},Mt.prototype.onContextMenu=function(){},Mt.prototype.resetPosition=function(){},Mt.prototype.needsContentAttribute=!0;function ex(a,u){var f=i0(a,u.line);if(!f||f.hidden)return null;var c=Ae(a.doc,u.line),p=xN(f,c,u.line),g=xn(c,a.doc.direction),E="left";if(g){var N=vr(g,u.ch);E=N%2?"right":"left"}var C=IN(p.map,u.ch,E);return C.offset=C.collapse=="right"?C.end:C.start,C}function VB(a){for(var u=a;u;u=u.parentNode)if(/CodeMirror-gutter-wrapper/.test(u.className))return!0;return!1}function hl(a,u){return u&&(a.bad=!0),a}function UB(a,u,f,c,p){var g="",E=!1,N=a.doc.lineSeparator(),C=!1;function I(X){return function(ae){return ae.id==X}}function U(){E&&(g+=N,C&&(g+=N),E=C=!1)}function K(X){X&&(U(),g+=X)}function $(X){if(X.nodeType==1){var ae=X.getAttribute("cm-text");if(ae){K(ae);return}var le=X.getAttribute("cm-marker"),pe;if(le){var be=a.findMarks(W(c,0),W(p+1,0),I(+le));be.length&&(pe=be[0].find(0))&&K(oo(a.doc,pe.from,pe.to).join(N));return}if(X.getAttribute("contenteditable")=="false")return;var Ne=/^(pre|div|p|li|table|br)$/i.test(X.nodeName);if(!/^br$/i.test(X.nodeName)&&X.textContent.length==0)return;Ne&&U();for(var Te=0;Te=9&&u.hasSelection&&(u.hasSelection=null),f.poll()}),_e(p,"paste",function(E){nr(c,E)||YD(E,c)||(c.state.pasteIncoming=+new Date,f.fastPoll())});function g(E){if(!nr(c,E)){if(c.somethingSelected())qh({lineWise:!1,text:c.getSelections()});else if(c.options.lineWiseCopyCut){var N=XD(c);qh({lineWise:!0,text:N.text}),E.type=="cut"?c.setSelections(N.ranges,null,Qe):(f.prevInput="",p.value=N.text.join(` -`),Xe(p))}else return;E.type=="cut"&&(c.state.cutIncoming=+new Date)}}_e(p,"cut",g),_e(p,"copy",g),_e(a.scroller,"paste",function(E){if(!(lo(a,E)||nr(c,E))){if(!p.dispatchEvent){c.state.pasteIncoming=+new Date,f.focus();return}var N=new Event("paste");N.clipboardData=E.clipboardData,p.dispatchEvent(N)}}),_e(a.lineSpace,"selectstart",function(E){lo(a,E)||ee(E)}),_e(p,"compositionstart",function(){var E=c.getCursor("from");f.composing&&f.composing.range.clear(),f.composing={start:E,range:c.markText(E,c.getCursor("to"),{className:"CodeMirror-composing"})}}),_e(p,"compositionend",function(){f.composing&&(f.poll(),f.composing.range.clear(),f.composing=null)})},Tr.prototype.createField=function(a){this.wrapper=ZD(),this.textarea=this.wrapper.firstChild;var u=this.cm.options;F0(this.textarea,u.spellcheck,u.autocorrect,u.autocapitalize)},Tr.prototype.screenReaderLabelChanged=function(a){a?this.textarea.setAttribute("aria-label",a):this.textarea.removeAttribute("aria-label")},Tr.prototype.prepareSelection=function(){var a=this.cm,u=a.display,f=a.doc,c=QN(a);if(a.options.moveInputWithCursor){var p=fa(a,f.sel.primary().head,"div"),g=u.wrapper.getBoundingClientRect(),E=u.lineDiv.getBoundingClientRect();c.teTop=Math.max(0,Math.min(u.wrapper.clientHeight-10,p.top+E.top-g.top)),c.teLeft=Math.max(0,Math.min(u.wrapper.clientWidth-10,p.left+E.left-g.left))}return c},Tr.prototype.showSelection=function(a){var u=this.cm,f=u.display;Q(f.cursorDiv,a.cursors),Q(f.selectionDiv,a.selection),a.teTop!=null&&(this.wrapper.style.top=a.teTop+"px",this.wrapper.style.left=a.teLeft+"px")},Tr.prototype.reset=function(a){if(!(this.contextMenuPending||this.composing&&a)){var u=this.cm;if(this.resetting=!0,u.somethingSelected()){this.prevInput="";var f=u.getSelection();this.textarea.value=f,u.state.focused&&Xe(this.textarea),s&&l>=9&&(this.hasSelection=f)}else a||(this.prevInput=this.textarea.value="",s&&l>=9&&(this.hasSelection=null));this.resetting=!1}},Tr.prototype.getField=function(){return this.textarea},Tr.prototype.supportsTouch=function(){return!1},Tr.prototype.focus=function(){if(this.cm.options.readOnly!="nocursor"&&(!m||Fe(this.textarea.ownerDocument)!=this.textarea))try{this.textarea.focus()}catch(a){}},Tr.prototype.blur=function(){this.textarea.blur()},Tr.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Tr.prototype.receivedFocus=function(){this.slowPoll()},Tr.prototype.slowPoll=function(){var a=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){a.poll(),a.cm.state.focused&&a.slowPoll()})},Tr.prototype.fastPoll=function(){var a=!1,u=this;u.pollingFast=!0;function f(){var c=u.poll();!c&&!a?(a=!0,u.polling.set(60,f)):(u.pollingFast=!1,u.slowPoll())}u.polling.set(20,f)},Tr.prototype.poll=function(){var a=this,u=this.cm,f=this.textarea,c=this.prevInput;if(this.contextMenuPending||this.resetting||!u.state.focused||Rr(f)&&!c&&!this.composing||u.isReadOnly()||u.options.disableInput||u.state.keySeq)return!1;var p=f.value;if(p==c&&!u.somethingSelected())return!1;if(s&&l>=9&&this.hasSelection===p||w&&/[\uf700-\uf7ff]/.test(p))return u.display.input.reset(),!1;if(u.doc.sel==u.display.selForContextMenu){var g=p.charCodeAt(0);if(g==8203&&!c&&(c="\u200B"),g==8666)return this.reset(),this.cm.execCommand("undo")}for(var E=0,N=Math.min(c.length,p.length);E1e3||p.indexOf(` -`)>-1?f.value=a.prevInput="":a.prevInput=p,a.composing&&(a.composing.range.clear(),a.composing.range=u.markText(a.composing.start,u.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Tr.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Tr.prototype.onKeyPress=function(){s&&l>=9&&(this.hasSelection=null),this.fastPoll()},Tr.prototype.onContextMenu=function(a){var u=this,f=u.cm,c=f.display,p=u.textarea;u.contextMenuPending&&u.contextMenuPending();var g=Ku(f,a),E=c.scroller.scrollTop;if(!g||b)return;var N=f.options.resetSelectionOnContextMenu;N&&f.doc.sel.contains(g)==-1&&Kr(f,gn)(f.doc,Vo(g),Qe);var C=p.style.cssText,I=u.wrapper.style.cssText,U=u.wrapper.offsetParent.getBoundingClientRect();u.wrapper.style.cssText="position: static",p.style.cssText=`position: absolute; width: 30px; height: 30px; - top: `+(a.clientY-U.top-5)+"px; left: "+(a.clientX-U.left-5)+`px; - z-index: 1000; background: `+(s?"rgba(255, 255, 255, .05)":"transparent")+`; - outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`;var K;d&&(K=p.ownerDocument.defaultView.scrollY),c.input.focus(),d&&p.ownerDocument.defaultView.scrollTo(null,K),c.input.reset(),f.somethingSelected()||(p.value=u.prevInput=" "),u.contextMenuPending=X,c.selForContextMenu=f.doc.sel,clearTimeout(c.detectingSelectAll);function $(){if(p.selectionStart!=null){var le=f.somethingSelected(),pe="\u200B"+(le?p.value:"");p.value="\u21DA",p.value=pe,u.prevInput=le?"":"\u200B",p.selectionStart=1,p.selectionEnd=pe.length,c.selForContextMenu=f.doc.sel}}function X(){if(u.contextMenuPending==X&&(u.contextMenuPending=!1,u.wrapper.style.cssText=I,p.style.cssText=C,s&&l<9&&c.scrollbars.setScrollTop(c.scroller.scrollTop=E),p.selectionStart!=null)){(!s||s&&l<9)&&$();var le=0,pe=function(){c.selForContextMenu==f.doc.sel&&p.selectionStart==0&&p.selectionEnd>0&&u.prevInput=="\u200B"?Kr(f,bD)(f):le++<10?c.detectingSelectAll=setTimeout(pe,500):(c.selForContextMenu=null,c.input.reset())};c.detectingSelectAll=setTimeout(pe,200)}}if(s&&l>=9&&$(),M){J(a);var ae=function(){Ar(window,"mouseup",ae),setTimeout(X,20)};_e(window,"mouseup",ae)}else setTimeout(X,50)},Tr.prototype.readOnlyChanged=function(a){a||this.reset(),this.textarea.disabled=a=="nocursor",this.textarea.readOnly=!!a},Tr.prototype.setUneditable=function(){},Tr.prototype.needsContentAttribute=!1;function QB(a,u){if(u=u?Ie(u):{},u.value=a.value,!u.tabindex&&a.tabIndex&&(u.tabindex=a.tabIndex),!u.placeholder&&a.placeholder&&(u.placeholder=a.placeholder),u.autofocus==null){var f=Fe(a.ownerDocument);u.autofocus=f==a||a.getAttribute("autofocus")!=null&&f==document.body}function c(){a.value=N.getValue()}var p;if(a.form&&(_e(a.form,"submit",c),!u.leaveSubmitMethodAlone)){var g=a.form;p=g.submit;try{var E=g.submit=function(){c(),g.submit=p,g.submit(),g.submit=E}}catch(C){}}u.finishInit=function(C){C.save=c,C.getTextArea=function(){return a},C.toTextArea=function(){C.toTextArea=isNaN,c(),a.parentNode.removeChild(C.getWrapperElement()),a.style.display="",a.form&&(Ar(a.form,"submit",c),!u.leaveSubmitMethodAlone&&typeof a.form.submit=="function"&&(a.form.submit=p))}},a.style.display="none";var N=ir(function(C){return a.parentNode.insertBefore(C,a.nextSibling)},u);return N}function BB(a){a.off=Ar,a.on=_e,a.wheelEventPixels=X2,a.Doc=Yn,a.splitLines=vn,a.countColumn=te,a.findColumn=oe,a.isWordChar=Ei,a.Pass=Me,a.signal=Ft,a.Line=Zs,a.changeEnd=Uo,a.scrollbarModel=YN,a.Pos=W,a.cmpPos=ie,a.modes=Cn,a.mimeModes=la,a.resolveMode=ui,a.getMode=io,a.modeExtensions=jo,a.extendMode=fh,a.copyState=ao,a.startState=nf,a.innerMode=Po,a.commands=Nf,a.keyMap=fo,a.keyName=jD,a.isModifierKey=AD,a.lookupKey=fl,a.normalizeKeyMap=bB,a.StringStream=gr,a.SharedTextMarker=kf,a.TextMarker=Qo,a.LineWidget=Sf,a.e_preventDefault=ee,a.e_stopPropagation=F,a.e_stop=J,a.addClass=Le,a.contains=ge,a.rmClass=z,a.keyNames=Bo}jB(ir),qB(ir);var KB="iter insert remove copy getEditor constructor".split(" ");for(var Uh in Yn.prototype)Yn.prototype.hasOwnProperty(Uh)&&we(KB,Uh)<0&&(ir.prototype[Uh]=function(a){return function(){return a.apply(this.doc,arguments)}}(Yn.prototype[Uh]));return un(Yn),ir.inputStyles={textarea:Tr,contenteditable:Mt},ir.defineMode=function(a){!ir.defaults.mode&&a!="null"&&(ir.defaults.mode=a),ch.apply(this,arguments)},ir.defineMIME=Js,ir.defineMode("null",function(){return{token:function(a){return a.skipToEnd()}}}),ir.defineMIME("text/plain","null"),ir.defineExtension=function(a,u){ir.prototype[a]=u},ir.defineDocExtension=function(a,u){Yn.prototype[a]=u},ir.fromTextArea=QB,BB(ir),ir.version="5.65.14",ir})});var jO=G((kV,OV)=>{(function(e){typeof kV=="object"&&typeof OV=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){"use strict";var t="CodeMirror-hint",r="CodeMirror-hint-active";e.showHint=function(k,T,S){if(!T)return k.showHint(S);S&&S.async&&(T.async=!0);var m={hint:T};if(S)for(var w in S)m[w]=S[w];return k.showHint(m)},e.defineExtension("showHint",function(k){k=s(this,this.getCursor("start"),k);var T=this.listSelections();if(!(T.length>1)){if(this.somethingSelected()){if(!k.hint.supportsSelection)return;for(var S=0;SL.clientHeight+1:!1,we;setTimeout(function(){we=m.getScrollInfo()});var ot=te.bottom-Ie;if(ot>0){var Me=te.bottom-te.top,Qe=te.top-(P.bottom-P.top)-2;Ie-te.topQe&&(L.style.height=(Me=Qe)+"px"),L.style.top=(xe=P.top-Me)+Le+"px",ge=!1):L.style.height=Ie-te.top-2+"px"}var ze=te.right-Ot;if(ce&&(ze+=m.display.nativeBarWidth),ze>0&&(te.right-te.left>Ot&&(L.style.width=Ot-5+"px",ze-=te.right-te.left-Ot),L.style.left=(he=Math.max(P.left-ze-Fe,0))+"px"),ce)for(var mt=L.firstChild;mt;mt=mt.nextSibling)mt.style.paddingRight=m.display.nativeBarWidth+"px";if(m.addKeyMap(this.keyMap=d(k,{moveFocus:function(fe,se){S.changeActive(S.selectedHint+fe,se)},setFocus:function(fe){S.changeActive(fe)},menuSize:function(){return S.screenAmount()},length:R.length,close:function(){k.close()},pick:function(){S.pick()},data:T})),k.options.closeOnUnfocus){var oe;m.on("blur",this.onBlur=function(){oe=setTimeout(function(){k.close()},100)}),m.on("focus",this.onFocus=function(){clearTimeout(oe)})}m.on("scroll",this.onScroll=function(){var fe=m.getScrollInfo(),se=m.getWrapperElement().getBoundingClientRect();we||(we=m.getScrollInfo());var Ue=xe+we.top-fe.top,at=Ue-(x.pageYOffset||(w.documentElement||w.body).scrollTop);if(ge||(at+=L.offsetHeight),at<=se.top||at>=se.bottom)return k.close();L.style.top=Ue+"px",L.style.left=he+we.left-fe.left+"px"}),e.on(L,"dblclick",function(fe){var se=h(L,fe.target||fe.srcElement);se&&se.hintId!=null&&(S.changeActive(se.hintId),S.pick())}),e.on(L,"click",function(fe){var se=h(L,fe.target||fe.srcElement);se&&se.hintId!=null&&(S.changeActive(se.hintId),k.options.completeOnSingleClick&&S.pick())}),e.on(L,"mousedown",function(){setTimeout(function(){m.focus()},20)});var me=this.getSelectedHintRange();return(me.from!==0||me.to!==0)&&this.scrollToActive(),e.signal(T,"select",R[this.selectedHint],L.childNodes[this.selectedHint]),!0}v.prototype={close:function(){if(this.completion.widget==this){this.completion.widget=null,this.hints.parentNode&&this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap);var k=this.completion.cm.getInputField();k.removeAttribute("aria-activedescendant"),k.removeAttribute("aria-owns");var T=this.completion.cm;this.completion.options.closeOnUnfocus&&(T.off("blur",this.onBlur),T.off("focus",this.onFocus)),T.off("scroll",this.onScroll)}},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var k=this;this.keyMap={Enter:function(){k.picked=!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(k,T){if(k>=this.data.list.length?k=T?this.data.list.length-1:0:k<0&&(k=T?0:this.data.list.length-1),this.selectedHint!=k){var S=this.hints.childNodes[this.selectedHint];S&&(S.className=S.className.replace(" "+r,""),S.removeAttribute("aria-selected")),S=this.hints.childNodes[this.selectedHint=k],S.className+=" "+r,S.setAttribute("aria-selected","true"),this.completion.cm.getInputField().setAttribute("aria-activedescendant",S.id),this.scrollToActive(),e.signal(this.data,"select",this.data.list[this.selectedHint],S)}},scrollToActive:function(){var k=this.getSelectedHintRange(),T=this.hints.childNodes[k.from],S=this.hints.childNodes[k.to],m=this.hints.firstChild;T.offsetTopthis.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=S.offsetTop+S.offsetHeight-this.hints.clientHeight+m.offsetTop)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1},getSelectedHintRange:function(){var k=this.completion.options.scrollMargin||0;return{from:Math.max(0,this.selectedHint-k),to:Math.min(this.data.list.length-1,this.selectedHint+k)}}};function y(k,T){if(!k.somethingSelected())return T;for(var S=[],m=0;m0?L(z):M(q+1)})}M(0)};return w.async=!0,w.supportsSelection=!0,w}else return(m=k.getHelper(k.getCursor(),"hintWords"))?function(x){return e.hint.fromList(x,{words:m})}:e.hint.anyword?function(x,L){return e.hint.anyword(x,L)}:function(){}}e.registerHelper("hint","auto",{resolve:D}),e.registerHelper("hint","fromList",function(k,T){var S=k.getCursor(),m=k.getTokenAt(S),w,x=e.Pos(S.line,m.start),L=S;m.start,]/,closeOnPick:!0,closeOnUnfocus:!0,updateOnCursorActivity:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null,paddingForScrollbar:!0,moveOnOverlap:!0};e.defineOption("hintOptions",null)})});var PO=G((wV,NV)=>{(function(e){typeof wV=="object"&&typeof NV=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){var t=/MSIE \d/.test(navigator.userAgent)&&(document.documentMode==null||document.documentMode<8),r=e.Pos,n={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function i(v){return v&&v.bracketRegex||/[(){}[\]]/}function o(v,y,b){var D=v.getLineHandle(y.line),_=y.ch-1,k=b&&b.afterCursor;k==null&&(k=/(^| )cm-fat-cursor($| )/.test(v.getWrapperElement().className));var T=i(b),S=!k&&_>=0&&T.test(D.text.charAt(_))&&n[D.text.charAt(_)]||T.test(D.text.charAt(_+1))&&n[D.text.charAt(++_)];if(!S)return null;var m=S.charAt(1)==">"?1:-1;if(b&&b.strict&&m>0!=(_==y.ch))return null;var w=v.getTokenTypeAt(r(y.line,_+1)),x=s(v,r(y.line,_+(m>0?1:0)),m,w,b);return x==null?null:{from:r(y.line,_),to:x&&x.pos,match:x&&x.ch==S.charAt(0),forward:m>0}}function s(v,y,b,D,_){for(var k=_&&_.maxScanLineLength||1e4,T=_&&_.maxScanLines||1e3,S=[],m=i(_),w=b>0?Math.min(y.line+T,v.lastLine()+1):Math.max(v.firstLine()-1,y.line-T),x=y.line;x!=w;x+=b){var L=v.getLine(x);if(!!L){var O=b>0?0:L.length-1,R=b>0?L.length:-1;if(!(L.length>k))for(x==y.line&&(O=y.ch-(b<0?1:0));O!=R;O+=b){var M=L.charAt(O);if(m.test(M)&&(D===void 0||(v.getTokenTypeAt(r(x,O+1))||"")==(D||""))){var q=n[M];if(q&&q.charAt(1)==">"==b>0)S.push(M);else if(S.length)S.pop();else return{pos:r(x,O),ch:M}}}}}return x-b==(b>0?v.lastLine():v.firstLine())?!1:null}function l(v,y,b){for(var D=v.state.matchBrackets.maxHighlightLineLength||1e3,_=b&&b.highlightNonMatching,k=[],T=v.listSelections(),S=0;S{(function(e){typeof DV=="object"&&typeof xV=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){var t={pairs:`()[]{}''""`,closeBefore:`)]}'":;>`,triples:"",explode:"[]{}"},r=e.Pos;e.defineOption("autoCloseBrackets",!1,function(k,T,S){S&&S!=e.Init&&(k.removeKeyMap(i),k.state.closeBrackets=null),T&&(o(n(T,"pairs")),k.state.closeBrackets=T,k.addKeyMap(i))});function n(k,T){return T=="pairs"&&typeof k=="string"?k:typeof k=="object"&&k[T]!=null?k[T]:t[T]}var i={Backspace:d,Enter:h};function o(k){for(var T=0;T=0;w--){var L=m[w].head;k.replaceRange("",r(L.line,L.ch-1),r(L.line,L.ch+1),"+delete")}}function h(k){var T=l(k),S=T&&n(T,"explode");if(!S||k.getOption("disableInput"))return e.Pass;for(var m=k.listSelections(),w=0;w0?{line:L.head.line,ch:L.head.ch+T}:{line:L.head.line-1};S.push({anchor:O,head:O})}k.setSelections(S,w)}function y(k){var T=e.cmpPos(k.anchor,k.head)>0;return{anchor:new r(k.anchor.line,k.anchor.ch+(T?-1:1)),head:new r(k.head.line,k.head.ch+(T?1:-1))}}function b(k,T){var S=l(k);if(!S||k.getOption("disableInput"))return e.Pass;var m=n(S,"pairs"),w=m.indexOf(T);if(w==-1)return e.Pass;for(var x=n(S,"closeBefore"),L=n(S,"triples"),O=m.charAt(w+1)==T,R=k.listSelections(),M=w%2==0,q,z=0;z=0&&k.getRange(Q,r(Q.line,Q.ch+3))==T+T+T?P="skipThree":P="skip";else if(O&&Q.ch>1&&L.indexOf(T)>=0&&k.getRange(r(Q.line,Q.ch-2),Q)==T+T){if(Q.ch>2&&/\bstring/.test(k.getTokenTypeAt(r(Q.line,Q.ch-2))))return e.Pass;P="addFour"}else if(O){var xe=Q.ch==0?" ":k.getRange(r(Q.line,Q.ch-1),Q);if(!e.isWordChar(he)&&xe!=T&&!e.isWordChar(xe))P="both";else return e.Pass}else if(M&&(he.length===0||/\s/.test(he)||x.indexOf(he)>-1))P="both";else return e.Pass;if(!q)q=P;else if(q!=P)return e.Pass}var ge=w%2?m.charAt(w-1):T,Fe=w%2?T:m.charAt(w+1);k.operation(function(){if(q=="skip")v(k,1);else if(q=="skipThree")v(k,3);else if(q=="surround"){for(var Le=k.getSelections(),He=0;He{(function(e){typeof LV=="object"&&typeof IV=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){"use strict";function t(r){return function(n,i){var o=i.line,s=n.getLine(o);function l(D){for(var _,k=i.ch,T=0;;){var S=k<=0?-1:s.lastIndexOf(D[0],k-1);if(S==-1){if(T==1)break;T=1,k=s.length;continue}if(T==1&&Sr.lastLine())return null;var y=r.getTokenAt(e.Pos(v,1));if(/\S/.test(y.string)||(y=r.getTokenAt(e.Pos(v,y.end+1))),y.type!="keyword"||y.string!="import")return null;for(var b=v,D=Math.min(r.lastLine(),v+10);b<=D;++b){var _=r.getLine(b),k=_.indexOf(";");if(k!=-1)return{startCh:y.end,end:e.Pos(b,k)}}}var o=n.line,s=i(o),l;if(!s||i(o-1)||(l=i(o-2))&&l.end.line==o-1)return null;for(var d=s.end;;){var h=i(d.line+1);if(h==null)break;d=h.end}return{from:r.clipPos(e.Pos(o,s.startCh+1)),to:d}}),e.registerHelper("fold","include",function(r,n){function i(h){if(hr.lastLine())return null;var v=r.getTokenAt(e.Pos(h,1));if(/\S/.test(v.string)||(v=r.getTokenAt(e.Pos(h,v.end+1))),v.type=="meta"&&v.string.slice(0,8)=="#include")return v.start+8}var o=n.line,s=i(o);if(s==null||i(o-1)!=null)return null;for(var l=o;;){var d=i(l+1);if(d==null)break;++l}return{from:e.Pos(o,s+1),to:r.clipPos(e.Pos(l))}})})});var jV=G((AV,RV)=>{(function(e){typeof AV=="object"&&typeof RV=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){"use strict";function t(o,s,l,d){if(l&&l.call){var h=l;l=null}else var h=i(o,l,"rangeFinder");typeof s=="number"&&(s=e.Pos(s,0));var v=i(o,l,"minFoldSize");function y(k){var T=h(o,s);if(!T||T.to.line-T.from.lineo.firstLine();)s=e.Pos(s.line-1,0),b=y(!1);if(!(!b||b.cleared||d==="unfold")){var D=r(o,l,b);e.on(D,"mousedown",function(k){_.clear(),e.e_preventDefault(k)});var _=o.markText(b.from,b.to,{replacedWith:D,clearOnEnter:i(o,l,"clearOnEnter"),__isFold:!0});_.on("clear",function(k,T){e.signal(o,"unfold",o,k,T)}),e.signal(o,"fold",o,b.from,b.to)}}function r(o,s,l){var d=i(o,s,"widget");if(typeof d=="function"&&(d=d(l.from,l.to)),typeof d=="string"){var h=document.createTextNode(d);d=document.createElement("span"),d.appendChild(h),d.className="CodeMirror-foldmarker"}else d&&(d=d.cloneNode(!0));return d}e.newFoldFunction=function(o,s){return function(l,d){t(l,d,{rangeFinder:o,widget:s})}},e.defineExtension("foldCode",function(o,s,l){t(this,o,s,l)}),e.defineExtension("isFolded",function(o){for(var s=this.findMarksAt(o),l=0;l{(function(e){typeof PV=="object"&&typeof FV=="object"?e(Wt(),jV()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","./foldcode"],e):e(CodeMirror)})(function(e){"use strict";e.defineOption("foldGutter",!1,function(_,k,T){T&&T!=e.Init&&(_.clearGutter(_.state.foldGutter.options.gutter),_.state.foldGutter=null,_.off("gutterClick",h),_.off("changes",y),_.off("viewportChange",b),_.off("fold",D),_.off("unfold",D),_.off("swapDoc",y),_.off("optionChange",v)),k&&(_.state.foldGutter=new r(n(k)),d(_),_.on("gutterClick",h),_.on("changes",y),_.on("viewportChange",b),_.on("fold",D),_.on("unfold",D),_.on("swapDoc",y),_.on("optionChange",v))});var t=e.Pos;function r(_){this.options=_,this.from=this.to=0}function n(_){return _===!0&&(_={}),_.gutter==null&&(_.gutter="CodeMirror-foldgutter"),_.indicatorOpen==null&&(_.indicatorOpen="CodeMirror-foldgutter-open"),_.indicatorFolded==null&&(_.indicatorFolded="CodeMirror-foldgutter-folded"),_}function i(_,k){for(var T=_.findMarks(t(k,0),t(k+1,0)),S=0;S=w){if(O&&q&&O.test(q.className))return;M=o(S.indicatorOpen)}}!M&&!q||_.setGutterMarker(R,S.gutter,M)})}function l(_){return new RegExp("(^|\\s)"+_+"(?:$|\\s)\\s*")}function d(_){var k=_.getViewport(),T=_.state.foldGutter;!T||(_.operation(function(){s(_,k.from,k.to)}),T.from=k.from,T.to=k.to)}function h(_,k,T){var S=_.state.foldGutter;if(!!S){var m=S.options;if(T==m.gutter){var w=i(_,k);w?w.clear():_.foldCode(t(k,0),m)}}}function v(_,k){k=="mode"&&y(_)}function y(_){var k=_.state.foldGutter;if(!!k){var T=k.options;k.from=k.to=0,clearTimeout(k.changeUpdate),k.changeUpdate=setTimeout(function(){d(_)},T.foldOnChangeTimeSpan||600)}}function b(_){var k=_.state.foldGutter;if(!!k){var T=k.options;clearTimeout(k.changeUpdate),k.changeUpdate=setTimeout(function(){var S=_.getViewport();k.from==k.to||S.from-k.to>20||k.from-S.to>20?d(_):_.operation(function(){S.fromk.to&&(s(_,k.to,S.to),k.to=S.to)})},T.updateViewportTimeSpan||400)}}function D(_,k){var T=_.state.foldGutter;if(!!T){var S=k.line;S>=T.from&&S{(function(e){typeof MV=="object"&&typeof qV=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){"use strict";var t="CodeMirror-lint-markers",r="CodeMirror-lint-line-";function n(L,O,R){var M=document.createElement("div");M.className="CodeMirror-lint-tooltip cm-s-"+L.options.theme,M.appendChild(R.cloneNode(!0)),L.state.lint.options.selfContain?L.getWrapperElement().appendChild(M):document.body.appendChild(M);function q(z){if(!M.parentNode)return e.off(document,"mousemove",q);M.style.top=Math.max(0,z.clientY-M.offsetHeight-5)+"px",M.style.left=z.clientX+5+"px"}return e.on(document,"mousemove",q),q(O),M.style.opacity!=null&&(M.style.opacity=1),M}function i(L){L.parentNode&&L.parentNode.removeChild(L)}function o(L){!L.parentNode||(L.style.opacity==null&&i(L),L.style.opacity=0,setTimeout(function(){i(L)},600))}function s(L,O,R,M){var q=n(L,O,R);function z(){e.off(M,"mouseout",z),q&&(o(q),q=null)}var B=setInterval(function(){if(q)for(var Q=M;;Q=Q.parentNode){if(Q&&Q.nodeType==11&&(Q=Q.host),Q==document.body)return;if(!Q){z();break}}if(!q)return clearInterval(B)},400);e.on(M,"mouseout",z)}function l(L,O,R){this.marked=[],O instanceof Function&&(O={getAnnotations:O}),(!O||O===!0)&&(O={}),this.options={},this.linterOptions=O.options||{};for(var M in d)this.options[M]=d[M];for(var M in O)d.hasOwnProperty(M)?O[M]!=null&&(this.options[M]=O[M]):O.options||(this.linterOptions[M]=O[M]);this.timeout=null,this.hasGutter=R,this.onMouseOver=function(q){x(L,q)},this.waitingFor=0}var d={highlightLines:!1,tooltips:!0,delay:500,lintOnChange:!0,getAnnotations:null,async:!1,selfContain:null,formatAnnotation:null,onUpdateLinting:null};function h(L){var O=L.state.lint;O.hasGutter&&L.clearGutter(t),O.options.highlightLines&&v(L);for(var R=0;R1,M.tooltips)),M.highlightLines&&L.addLineClass(z,"wrap",r+Q)}}M.onUpdateLinting&&M.onUpdateLinting(O,q,L)}}function m(L){var O=L.state.lint;!O||(clearTimeout(O.timeout),O.timeout=setTimeout(function(){T(L)},O.options.delay))}function w(L,O,R){for(var M=R.target||R.srcElement,q=document.createDocumentFragment(),z=0;z{(function(e){typeof UV=="object"&&typeof GV=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){"use strict";var t=e.Pos;function r(T){var S=T.flags;return S!=null?S:(T.ignoreCase?"i":"")+(T.global?"g":"")+(T.multiline?"m":"")}function n(T,S){for(var m=r(T),w=m,x=0;xO);R++){var M=T.getLine(L++);w=w==null?M:w+` -`+M}x=x*2,S.lastIndex=m.ch;var q=S.exec(w);if(q){var z=w.slice(0,q.index).split(` -`),B=q[0].split(` -`),Q=m.line+z.length-1,P=z[z.length-1].length;return{from:t(Q,P),to:t(Q+B.length-1,B.length==1?P+B[0].length:B[B.length-1].length),match:q}}}}function l(T,S,m){for(var w,x=0;x<=T.length;){S.lastIndex=x;var L=S.exec(T);if(!L)break;var O=L.index+L[0].length;if(O>T.length-m)break;(!w||O>w.index+w[0].length)&&(w=L),x=L.index+1}return w}function d(T,S,m){S=n(S,"g");for(var w=m.line,x=m.ch,L=T.firstLine();w>=L;w--,x=-1){var O=T.getLine(w),R=l(O,S,x<0?0:O.length-x);if(R)return{from:t(w,R.index),to:t(w,R.index+R[0].length),match:R}}}function h(T,S,m){if(!i(S))return d(T,S,m);S=n(S,"gm");for(var w,x=1,L=T.getLine(m.line).length-m.ch,O=m.line,R=T.firstLine();O>=R;){for(var M=0;M=R;M++){var q=T.getLine(O--);w=w==null?q:q+` -`+w}x*=2;var z=l(w,S,L);if(z){var B=w.slice(0,z.index).split(` -`),Q=z[0].split(` -`),P=O+B.length,he=B[B.length-1].length;return{from:t(P,he),to:t(P+Q.length-1,Q.length==1?he+Q[0].length:Q[Q.length-1].length),match:z}}}}var v,y;String.prototype.normalize?(v=function(T){return T.normalize("NFD").toLowerCase()},y=function(T){return T.normalize("NFD")}):(v=function(T){return T.toLowerCase()},y=function(T){return T});function b(T,S,m,w){if(T.length==S.length)return m;for(var x=0,L=m+Math.max(0,T.length-S.length);;){if(x==L)return x;var O=x+L>>1,R=w(T.slice(0,O)).length;if(R==m)return O;R>m?L=O:x=O+1}}function D(T,S,m,w){if(!S.length)return null;var x=w?v:y,L=x(S).split(/\r|\n\r?/);e:for(var O=m.line,R=m.ch,M=T.lastLine()+1-L.length;O<=M;O++,R=0){var q=T.getLine(O).slice(R),z=x(q);if(L.length==1){var B=z.indexOf(L[0]);if(B==-1)continue e;var m=b(q,z,B,x)+R;return{from:t(O,b(q,z,B,x)+R),to:t(O,b(q,z,B+L[0].length,x)+R)}}else{var Q=z.length-L[0].length;if(z.slice(Q)!=L[0])continue e;for(var P=1;P=M;O--,R=-1){var q=T.getLine(O);R>-1&&(q=q.slice(0,R));var z=x(q);if(L.length==1){var B=z.lastIndexOf(L[0]);if(B==-1)continue e;return{from:t(O,b(q,z,B,x)),to:t(O,b(q,z,B+L[0].length,x))}}else{var Q=L[L.length-1];if(z.slice(0,Q.length)!=Q)continue e;for(var P=1,m=O-L.length+1;P(this.doc.getLine(S.line)||"").length&&(S.ch=0,S.line++)),e.cmpPos(S,this.doc.clipPos(S))!=0))return this.atOccurrence=!1;var m=this.matches(T,S);if(this.afterEmptyMatch=m&&e.cmpPos(m.from,m.to)==0,m)return this.pos=m,this.atOccurrence=!0,this.pos.match||!0;var w=t(T?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:w,to:w},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(T,S){if(!!this.atOccurrence){var m=e.splitLines(T);this.doc.replaceRange(m,this.pos.from,this.pos.to,S),this.pos.to=t(this.pos.from.line+m.length-1,m[m.length-1].length+(m.length==1?this.pos.from.ch:0))}}},e.defineExtension("getSearchCursor",function(T,S,m){return new k(this.doc,T,S,m)}),e.defineDocExtension("getSearchCursor",function(T,S,m){return new k(this,T,S,m)}),e.defineExtension("selectMatches",function(T,S){for(var m=[],w=this.getSearchCursor(T,this.getCursor("from"),S);w.findNext()&&!(e.cmpPos(w.to(),this.getCursor("to"))>0);)m.push({anchor:w.from(),head:w.to()});m.length&&this.setSelections(m,0)})})});var Vp=G((QV,BV)=>{(function(e){typeof QV=="object"&&typeof BV=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){function t(n,i,o){var s=n.getWrapperElement(),l;return l=s.appendChild(document.createElement("div")),o?l.className="CodeMirror-dialog CodeMirror-dialog-bottom":l.className="CodeMirror-dialog CodeMirror-dialog-top",typeof i=="string"?l.innerHTML=i:l.appendChild(i),e.addClass(s,"dialog-opened"),l}function r(n,i){n.state.currentNotificationClose&&n.state.currentNotificationClose(),n.state.currentNotificationClose=i}e.defineExtension("openDialog",function(n,i,o){o||(o={}),r(this,null);var s=t(this,n,o.bottom),l=!1,d=this;function h(b){if(typeof b=="string")v.value=b;else{if(l)return;l=!0,e.rmClass(s.parentNode,"dialog-opened"),s.parentNode.removeChild(s),d.focus(),o.onClose&&o.onClose(s)}}var v=s.getElementsByTagName("input")[0],y;return v?(v.focus(),o.value&&(v.value=o.value,o.selectValueOnOpen!==!1&&v.select()),o.onInput&&e.on(v,"input",function(b){o.onInput(b,v.value,h)}),o.onKeyUp&&e.on(v,"keyup",function(b){o.onKeyUp(b,v.value,h)}),e.on(v,"keydown",function(b){o&&o.onKeyDown&&o.onKeyDown(b,v.value,h)||((b.keyCode==27||o.closeOnEnter!==!1&&b.keyCode==13)&&(v.blur(),e.e_stop(b),h()),b.keyCode==13&&i(v.value,b))}),o.closeOnBlur!==!1&&e.on(s,"focusout",function(b){b.relatedTarget!==null&&h()})):(y=s.getElementsByTagName("button")[0])&&(e.on(y,"click",function(){h(),d.focus()}),o.closeOnBlur!==!1&&e.on(y,"blur",h),y.focus()),h}),e.defineExtension("openConfirm",function(n,i,o){r(this,null);var s=t(this,n,o&&o.bottom),l=s.getElementsByTagName("button"),d=!1,h=this,v=1;function y(){d||(d=!0,e.rmClass(s.parentNode,"dialog-opened"),s.parentNode.removeChild(s),h.focus())}l[0].focus();for(var b=0;b{(function(e){typeof KV=="object"&&typeof HV=="object"?e(Wt(),Vp()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","../dialog/dialog"],e):e(CodeMirror)})(function(e){"use strict";e.defineOption("search",{bottom:!1});function t(i,o,s,l,d){i.openDialog?i.openDialog(o,d,{value:l,selectValueOnOpen:!0,bottom:i.options.search.bottom}):d(prompt(s,l))}function r(i){return i.phrase("Jump to line:")+' '+i.phrase("(Use line:column or scroll% syntax)")+""}function n(i,o){var s=Number(o);return/^[-+]/.test(o)?i.getCursor().line+s:s-1}e.commands.jumpToLine=function(i){var o=i.getCursor();t(i,r(i),i.phrase("Jump to line:"),o.line+1+":"+o.ch,function(s){if(!!s){var l;if(l=/^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(s))i.setCursor(n(i,l[1]),Number(l[2]));else if(l=/^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(s)){var d=Math.round(i.lineCount()*Number(l[1])/100);/^[-+]/.test(l[1])&&(d=o.line+d+1),i.setCursor(d-1,o.ch)}else(l=/^\s*\:?\s*([\+\-]?\d+)\s*/.exec(s))&&i.setCursor(n(i,l[1]),o.ch)}})},e.keyMap.default["Alt-G"]="jumpToLine"})});var VO=G((zV,WV)=>{(function(e){typeof zV=="object"&&typeof WV=="object"?e(Wt(),qp(),PO()):typeof define=="function"&&define.amd?define(["../lib/codemirror","../addon/search/searchcursor","../addon/edit/matchbrackets"],e):e(CodeMirror)})(function(e){"use strict";var t=e.commands,r=e.Pos;function n(m,w,x){if(x<0&&w.ch==0)return m.clipPos(r(w.line-1));var L=m.getLine(w.line);if(x>0&&w.ch>=L.length)return m.clipPos(r(w.line+1,0));for(var O="start",R,M=w.ch,q=M,z=x<0?0:L.length,B=0;q!=z;q+=x,B++){var Q=L.charAt(x<0?q-1:q),P=Q!="_"&&e.isWordChar(Q)?"w":"o";if(P=="w"&&Q.toUpperCase()==Q&&(P="W"),O=="start")P!="o"?(O="in",R=P):M=q+x;else if(O=="in"&&R!=P){if(R=="w"&&P=="W"&&x<0&&q--,R=="W"&&P=="w"&&x>0)if(q==M+1){R="w";continue}else q--;break}}return r(w.line,q)}function i(m,w){m.extendSelectionsBy(function(x){return m.display.shift||m.doc.extend||x.empty()?n(m.doc,x.head,w):w<0?x.from():x.to()})}t.goSubwordLeft=function(m){i(m,-1)},t.goSubwordRight=function(m){i(m,1)},t.scrollLineUp=function(m){var w=m.getScrollInfo();if(!m.somethingSelected()){var x=m.lineAtHeight(w.top+w.clientHeight,"local");m.getCursor().line>=x&&m.execCommand("goLineUp")}m.scrollTo(null,w.top-m.defaultTextHeight())},t.scrollLineDown=function(m){var w=m.getScrollInfo();if(!m.somethingSelected()){var x=m.lineAtHeight(w.top,"local")+1;m.getCursor().line<=x&&m.execCommand("goLineDown")}m.scrollTo(null,w.top+m.defaultTextHeight())},t.splitSelectionByLine=function(m){for(var w=m.listSelections(),x=[],L=0;LO.line&&M==R.line&&R.ch==0||x.push({anchor:M==O.line?O:r(M,0),head:M==R.line?R:r(M)});m.setSelections(x,0)},t.singleSelectionTop=function(m){var w=m.listSelections()[0];m.setSelection(w.anchor,w.head,{scroll:!1})},t.selectLine=function(m){for(var w=m.listSelections(),x=[],L=0;LL?x.push(q,z):x.length&&(x[x.length-1]=z),L=z}m.operation(function(){for(var B=0;Bm.lastLine()?m.replaceRange(` -`+he,r(m.lastLine()),null,"+swapLine"):m.replaceRange(he+` -`,r(P,0),null,"+swapLine")}m.setSelections(O),m.scrollIntoView()})},t.swapLineDown=function(m){if(m.isReadOnly())return e.Pass;for(var w=m.listSelections(),x=[],L=m.lastLine()+1,O=w.length-1;O>=0;O--){var R=w[O],M=R.to().line+1,q=R.from().line;R.to().ch==0&&!R.empty()&&M--,M=0;z-=2){var B=x[z],Q=x[z+1],P=m.getLine(B);B==m.lastLine()?m.replaceRange("",r(B-1),r(B),"+swapLine"):m.replaceRange("",r(B,0),r(B+1,0),"+swapLine"),m.replaceRange(P+` -`,r(Q,0),null,"+swapLine")}m.scrollIntoView()})},t.toggleCommentIndented=function(m){m.toggleComment({indent:!0})},t.joinLines=function(m){for(var w=m.listSelections(),x=[],L=0;L=0;R--){var M=x[L[R]];if(!(q&&e.cmpPos(M.head,q)>0)){var z=s(m,M.head);q=z.from,m.replaceRange(w(z.word),z.from,z.to)}}})}t.smartBackspace=function(m){if(m.somethingSelected())return e.Pass;m.operation(function(){for(var w=m.listSelections(),x=m.getOption("indentUnit"),L=w.length-1;L>=0;L--){var O=w[L].head,R=m.getRange({line:O.line,ch:0},O),M=e.countColumn(R,null,m.getOption("tabSize")),q=m.findPosH(O,-1,"char",!1);if(R&&!/\S/.test(R)&&M%x==0){var z=new r(O.line,e.findColumn(R,M-x,x));z.ch!=O.ch&&(q=z)}m.replaceRange("",q,O,"+delete")}})},t.delLineRight=function(m){m.operation(function(){for(var w=m.listSelections(),x=w.length-1;x>=0;x--)m.replaceRange("",w[x].anchor,r(w[x].to().line),"+delete");m.scrollIntoView()})},t.upcaseAtCursor=function(m){D(m,function(w){return w.toUpperCase()})},t.downcaseAtCursor=function(m){D(m,function(w){return w.toLowerCase()})},t.setSublimeMark=function(m){m.state.sublimeMark&&m.state.sublimeMark.clear(),m.state.sublimeMark=m.setBookmark(m.getCursor())},t.selectToSublimeMark=function(m){var w=m.state.sublimeMark&&m.state.sublimeMark.find();w&&m.setSelection(m.getCursor(),w)},t.deleteToSublimeMark=function(m){var w=m.state.sublimeMark&&m.state.sublimeMark.find();if(w){var x=m.getCursor(),L=w;if(e.cmpPos(x,L)>0){var O=L;L=x,x=O}m.state.sublimeKilled=m.getRange(x,L),m.replaceRange("",x,L)}},t.swapWithSublimeMark=function(m){var w=m.state.sublimeMark&&m.state.sublimeMark.find();w&&(m.state.sublimeMark.clear(),m.state.sublimeMark=m.setBookmark(m.getCursor()),m.setCursor(w))},t.sublimeYank=function(m){m.state.sublimeKilled!=null&&m.replaceSelection(m.state.sublimeKilled,null,"paste")},t.showInCenter=function(m){var w=m.cursorCoords(null,"local");m.scrollTo(null,(w.top+w.bottom)/2-m.getScrollInfo().clientHeight/2)};function _(m){var w=m.getCursor("from"),x=m.getCursor("to");if(e.cmpPos(w,x)==0){var L=s(m,w);if(!L.word)return;w=L.from,x=L.to}return{from:w,to:x,query:m.getRange(w,x),word:L}}function k(m,w){var x=_(m);if(!!x){var L=x.query,O=m.getSearchCursor(L,w?x.to:x.from);(w?O.findNext():O.findPrevious())?m.setSelection(O.from(),O.to()):(O=m.getSearchCursor(L,w?r(m.firstLine(),0):m.clipPos(r(m.lastLine()))),(w?O.findNext():O.findPrevious())?m.setSelection(O.from(),O.to()):x.word&&m.setSelection(x.from,x.to))}}t.findUnder=function(m){k(m,!0)},t.findUnderPrevious=function(m){k(m,!1)},t.findAllUnder=function(m){var w=_(m);if(!!w){for(var x=m.getSearchCursor(w.query),L=[],O=-1;x.findNext();)L.push({anchor:x.from(),head:x.to()}),x.from().line<=w.from.line&&x.from().ch<=w.from.ch&&O++;m.setSelections(L,O)}};var T=e.keyMap;T.macSublime={"Cmd-Left":"goLineStartSmart","Shift-Tab":"indentLess","Shift-Ctrl-K":"deleteLine","Alt-Q":"wrapLines","Ctrl-Left":"goSubwordLeft","Ctrl-Right":"goSubwordRight","Ctrl-Alt-Up":"scrollLineUp","Ctrl-Alt-Down":"scrollLineDown","Cmd-L":"selectLine","Shift-Cmd-L":"splitSelectionByLine",Esc:"singleSelectionTop","Cmd-Enter":"insertLineAfter","Shift-Cmd-Enter":"insertLineBefore","Cmd-D":"selectNextOccurrence","Shift-Cmd-Space":"selectScope","Shift-Cmd-M":"selectBetweenBrackets","Cmd-M":"goToBracket","Cmd-Ctrl-Up":"swapLineUp","Cmd-Ctrl-Down":"swapLineDown","Cmd-/":"toggleCommentIndented","Cmd-J":"joinLines","Shift-Cmd-D":"duplicateLine",F5:"sortLines","Shift-F5":"reverseSortLines","Cmd-F5":"sortLinesInsensitive","Shift-Cmd-F5":"reverseSortLinesInsensitive",F2:"nextBookmark","Shift-F2":"prevBookmark","Cmd-F2":"toggleBookmark","Shift-Cmd-F2":"clearBookmarks","Alt-F2":"selectBookmarks",Backspace:"smartBackspace","Cmd-K Cmd-D":"skipAndSelectNextOccurrence","Cmd-K Cmd-K":"delLineRight","Cmd-K Cmd-U":"upcaseAtCursor","Cmd-K Cmd-L":"downcaseAtCursor","Cmd-K Cmd-Space":"setSublimeMark","Cmd-K Cmd-A":"selectToSublimeMark","Cmd-K Cmd-W":"deleteToSublimeMark","Cmd-K Cmd-X":"swapWithSublimeMark","Cmd-K Cmd-Y":"sublimeYank","Cmd-K Cmd-C":"showInCenter","Cmd-K Cmd-G":"clearBookmarks","Cmd-K Cmd-Backspace":"delLineLeft","Cmd-K Cmd-1":"foldAll","Cmd-K Cmd-0":"unfoldAll","Cmd-K Cmd-J":"unfoldAll","Ctrl-Shift-Up":"addCursorToPrevLine","Ctrl-Shift-Down":"addCursorToNextLine","Cmd-F3":"findUnder","Shift-Cmd-F3":"findUnderPrevious","Alt-F3":"findAllUnder","Shift-Cmd-[":"fold","Shift-Cmd-]":"unfold","Cmd-I":"findIncremental","Shift-Cmd-I":"findIncrementalReverse","Cmd-H":"replace",F3:"findNext","Shift-F3":"findPrev",fallthrough:"macDefault"},e.normalizeKeyMap(T.macSublime),T.pcSublime={"Shift-Tab":"indentLess","Shift-Ctrl-K":"deleteLine","Alt-Q":"wrapLines","Ctrl-T":"transposeChars","Alt-Left":"goSubwordLeft","Alt-Right":"goSubwordRight","Ctrl-Up":"scrollLineUp","Ctrl-Down":"scrollLineDown","Ctrl-L":"selectLine","Shift-Ctrl-L":"splitSelectionByLine",Esc:"singleSelectionTop","Ctrl-Enter":"insertLineAfter","Shift-Ctrl-Enter":"insertLineBefore","Ctrl-D":"selectNextOccurrence","Shift-Ctrl-Space":"selectScope","Shift-Ctrl-M":"selectBetweenBrackets","Ctrl-M":"goToBracket","Shift-Ctrl-Up":"swapLineUp","Shift-Ctrl-Down":"swapLineDown","Ctrl-/":"toggleCommentIndented","Ctrl-J":"joinLines","Shift-Ctrl-D":"duplicateLine",F9:"sortLines","Shift-F9":"reverseSortLines","Ctrl-F9":"sortLinesInsensitive","Shift-Ctrl-F9":"reverseSortLinesInsensitive",F2:"nextBookmark","Shift-F2":"prevBookmark","Ctrl-F2":"toggleBookmark","Shift-Ctrl-F2":"clearBookmarks","Alt-F2":"selectBookmarks",Backspace:"smartBackspace","Ctrl-K Ctrl-D":"skipAndSelectNextOccurrence","Ctrl-K Ctrl-K":"delLineRight","Ctrl-K Ctrl-U":"upcaseAtCursor","Ctrl-K Ctrl-L":"downcaseAtCursor","Ctrl-K Ctrl-Space":"setSublimeMark","Ctrl-K Ctrl-A":"selectToSublimeMark","Ctrl-K Ctrl-W":"deleteToSublimeMark","Ctrl-K Ctrl-X":"swapWithSublimeMark","Ctrl-K Ctrl-Y":"sublimeYank","Ctrl-K Ctrl-C":"showInCenter","Ctrl-K Ctrl-G":"clearBookmarks","Ctrl-K Ctrl-Backspace":"delLineLeft","Ctrl-K Ctrl-1":"foldAll","Ctrl-K Ctrl-0":"unfoldAll","Ctrl-K Ctrl-J":"unfoldAll","Ctrl-Alt-Up":"addCursorToPrevLine","Ctrl-Alt-Down":"addCursorToNextLine","Ctrl-F3":"findUnder","Shift-Ctrl-F3":"findUnderPrevious","Alt-F3":"findAllUnder","Shift-Ctrl-[":"fold","Shift-Ctrl-]":"unfold","Ctrl-I":"findIncremental","Shift-Ctrl-I":"findIncrementalReverse","Ctrl-H":"replace",F3:"findNext","Shift-F3":"findPrev",fallthrough:"pcDefault"},e.normalizeKeyMap(T.pcSublime);var S=T.default==T.macDefault;T.sublime=S?T.macSublime:T.pcSublime})});var XV=G((YV,JV)=>{(function(e){typeof YV=="object"&&typeof JV=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){"use strict";var t={},r=/[^\s\u00a0]/,n=e.Pos,i=e.cmpPos;function o(d){var h=d.search(r);return h==-1?0:h}e.commands.toggleComment=function(d){d.toggleComment()},e.defineExtension("toggleComment",function(d){d||(d=t);for(var h=this,v=1/0,y=this.listSelections(),b=null,D=y.length-1;D>=0;D--){var _=y[D].from(),k=y[D].to();_.line>=v||(k.line>=v&&(k=n(v,0)),v=_.line,b==null?h.uncomment(_,k,d)?b="un":(h.lineComment(_,k,d),b="line"):b=="un"?h.uncomment(_,k,d):h.lineComment(_,k,d))}});function s(d,h,v){return/\bstring\b/.test(d.getTokenTypeAt(n(h.line,0)))&&!/^[\'\"\`]/.test(v)}function l(d,h){var v=d.getMode();return v.useInnerComments===!1||!v.innerMode?v:d.getModeAt(h)}e.defineExtension("lineComment",function(d,h,v){v||(v=t);var y=this,b=l(y,d),D=y.getLine(d.line);if(!(D==null||s(y,d,D))){var _=v.lineComment||b.lineComment;if(!_){(v.blockCommentStart||b.blockCommentStart)&&(v.fullLines=!0,y.blockComment(d,h,v));return}var k=Math.min(h.ch!=0||h.line==d.line?h.line+1:h.line,y.lastLine()+1),T=v.padding==null?" ":v.padding,S=v.commentBlankLines||d.line==h.line;y.operation(function(){if(v.indent){for(var m=null,w=d.line;wL.length)&&(m=L)}for(var w=d.line;wk||y.operation(function(){if(v.fullLines!=!1){var S=r.test(y.getLine(k));y.replaceRange(T+_,n(k)),y.replaceRange(D+T,n(d.line,0));var m=v.blockCommentLead||b.blockCommentLead;if(m!=null)for(var w=d.line+1;w<=k;++w)(w!=k||S)&&y.replaceRange(m+T,n(w,0))}else{var x=i(y.getCursor("to"),h)==0,L=!y.somethingSelected();y.replaceRange(_,h),x&&y.setSelection(L?h:y.getCursor("from"),h),y.replaceRange(D,d)}})}}),e.defineExtension("uncomment",function(d,h,v){v||(v=t);var y=this,b=l(y,d),D=Math.min(h.ch!=0||h.line==d.line?h.line:h.line-1,y.lastLine()),_=Math.min(d.line,D),k=v.lineComment||b.lineComment,T=[],S=v.padding==null?" ":v.padding,m;e:{if(!k)break e;for(var w=_;w<=D;++w){var x=y.getLine(w),L=x.indexOf(k);if(L>-1&&!/comment/.test(y.getTokenTypeAt(n(w,L+1)))&&(L=-1),L==-1&&r.test(x)||L>-1&&r.test(x.slice(0,L)))break e;T.push(x)}if(y.operation(function(){for(var Le=_;Le<=D;++Le){var He=T[Le-_],Xe=He.indexOf(k),Ve=Xe+k.length;Xe<0||(He.slice(Ve,Ve+S.length)==S&&(Ve+=S.length),m=!0,y.replaceRange("",n(Le,Xe),n(Le,Ve)))}}),m)return!0}var O=v.blockCommentStart||b.blockCommentStart,R=v.blockCommentEnd||b.blockCommentEnd;if(!O||!R)return!1;var M=v.blockCommentLead||b.blockCommentLead,q=y.getLine(_),z=q.indexOf(O);if(z==-1)return!1;var B=D==_?q:y.getLine(D),Q=B.indexOf(R,D==_?z+O.length:0),P=n(_,z+1),he=n(D,Q+1);if(Q==-1||!/comment/.test(y.getTokenTypeAt(P))||!/comment/.test(y.getTokenTypeAt(he))||y.getRange(P,he,` -`).indexOf(R)>-1)return!1;var xe=q.lastIndexOf(O,d.ch),ge=xe==-1?-1:q.slice(0,d.ch).indexOf(R,xe+O.length);if(xe!=-1&&ge!=-1&&ge+R.length!=d.ch)return!1;ge=B.indexOf(R,h.ch);var Fe=B.slice(h.ch).lastIndexOf(O,ge-h.ch);return xe=ge==-1||Fe==-1?-1:h.ch+Fe,ge!=-1&&xe!=-1&&xe!=h.ch?!1:(y.operation(function(){y.replaceRange("",n(D,Q-(S&&B.slice(Q-S.length,Q)==S?S.length:0)),n(D,Q+R.length));var Le=z+O.length;if(S&&q.slice(Le,Le+S.length)==S&&(Le+=S.length),y.replaceRange("",n(_,z),n(_,Le)),M)for(var He=_+1;He<=D;++He){var Xe=y.getLine(He),Ve=Xe.indexOf(M);if(!(Ve==-1||r.test(Xe.slice(0,Ve)))){var At=Ve+M.length;S&&Xe.slice(At,At+S.length)==S&&(At+=S.length),y.replaceRange("",n(He,Ve),n(He,At))}}}),!0)})})});var UO=G((ZV,$V)=>{(function(e){typeof ZV=="object"&&typeof $V=="object"?e(Wt(),qp(),Vp()):typeof define=="function"&&define.amd?define(["../../lib/codemirror","./searchcursor","../dialog/dialog"],e):e(CodeMirror)})(function(e){"use strict";e.defineOption("search",{bottom:!1});function t(O,R){return typeof O=="string"?O=new RegExp(O.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),R?"gi":"g"):O.global||(O=new RegExp(O.source,O.ignoreCase?"gi":"g")),{token:function(M){O.lastIndex=M.pos;var q=O.exec(M.string);if(q&&q.index==M.pos)return M.pos+=q[0].length||1,"searching";q?M.pos=q.index:M.skipToEnd()}}}function r(){this.posFrom=this.posTo=this.lastQuery=this.query=null,this.overlay=null}function n(O){return O.state.search||(O.state.search=new r)}function i(O){return typeof O=="string"&&O==O.toLowerCase()}function o(O,R,M){return O.getSearchCursor(R,M,{caseFold:i(R),multiline:!0})}function s(O,R,M,q,z){O.openDialog(R,q,{value:M,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){_(O)},onKeyDown:z,bottom:O.options.search.bottom})}function l(O,R,M,q,z){O.openDialog?O.openDialog(R,z,{value:q,selectValueOnOpen:!0,bottom:O.options.search.bottom}):z(prompt(M,q))}function d(O,R,M,q){O.openConfirm?O.openConfirm(R,q):confirm(M)&&q[0]()}function h(O){return O.replace(/\\([nrt\\])/g,function(R,M){return M=="n"?` -`:M=="r"?"\r":M=="t"?" ":M=="\\"?"\\":R})}function v(O){var R=O.match(/^\/(.*)\/([a-z]*)$/);if(R)try{O=new RegExp(R[1],R[2].indexOf("i")==-1?"":"i")}catch(M){}else O=h(O);return(typeof O=="string"?O=="":O.test(""))&&(O=/x^/),O}function y(O,R,M){R.queryText=M,R.query=v(M),O.removeOverlay(R.overlay,i(R.query)),R.overlay=t(R.query,i(R.query)),O.addOverlay(R.overlay),O.showMatchesOnScrollbar&&(R.annotate&&(R.annotate.clear(),R.annotate=null),R.annotate=O.showMatchesOnScrollbar(R.query,i(R.query)))}function b(O,R,M,q){var z=n(O);if(z.query)return D(O,R);var B=O.getSelection()||z.lastQuery;if(B instanceof RegExp&&B.source=="x^"&&(B=null),M&&O.openDialog){var Q=null,P=function(he,xe){e.e_stop(xe),!!he&&(he!=z.queryText&&(y(O,z,he),z.posFrom=z.posTo=O.getCursor()),Q&&(Q.style.opacity=1),D(O,xe.shiftKey,function(ge,Fe){var Le;Fe.line<3&&document.querySelector&&(Le=O.display.wrapper.querySelector(".CodeMirror-dialog"))&&Le.getBoundingClientRect().bottom-4>O.cursorCoords(Fe,"window").top&&((Q=Le).style.opacity=.4)}))};s(O,T(O),B,P,function(he,xe){var ge=e.keyName(he),Fe=O.getOption("extraKeys"),Le=Fe&&Fe[ge]||e.keyMap[O.getOption("keyMap")][ge];Le=="findNext"||Le=="findPrev"||Le=="findPersistentNext"||Le=="findPersistentPrev"?(e.e_stop(he),y(O,n(O),xe),O.execCommand(Le)):(Le=="find"||Le=="findPersistent")&&(e.e_stop(he),P(xe,he))}),q&&B&&(y(O,z,B),D(O,R))}else l(O,T(O),"Search for:",B,function(he){he&&!z.query&&O.operation(function(){y(O,z,he),z.posFrom=z.posTo=O.getCursor(),D(O,R)})})}function D(O,R,M){O.operation(function(){var q=n(O),z=o(O,q.query,R?q.posFrom:q.posTo);!z.find(R)&&(z=o(O,q.query,R?e.Pos(O.lastLine()):e.Pos(O.firstLine(),0)),!z.find(R))||(O.setSelection(z.from(),z.to()),O.scrollIntoView({from:z.from(),to:z.to()},20),q.posFrom=z.from(),q.posTo=z.to(),M&&M(z.from(),z.to()))})}function _(O){O.operation(function(){var R=n(O);R.lastQuery=R.query,!!R.query&&(R.query=R.queryText=null,O.removeOverlay(R.overlay),R.annotate&&(R.annotate.clear(),R.annotate=null))})}function k(O,R){var M=O?document.createElement(O):document.createDocumentFragment();for(var q in R)M[q]=R[q];for(var z=2;z{"use strict";Object.defineProperty(ea,"__esModule",{value:!0});ea.hintList=ea.objectValues=ea.forEachState=ea.getFieldDef=ea.getDefinitionState=void 0;var Y$=ht(),Fc=vi();function J$(e){let t;return eU(e,r=>{switch(r.kind){case"Query":case"ShortQuery":case"Mutation":case"Subscription":case"FragmentDefinition":t=r;break}}),t}ea.getDefinitionState=J$;function X$(e,t,r){return r===Fc.SchemaMetaFieldDef.name&&e.getQueryType()===t?Fc.SchemaMetaFieldDef:r===Fc.TypeMetaFieldDef.name&&e.getQueryType()===t?Fc.TypeMetaFieldDef:r===Fc.TypeNameMetaFieldDef.name&&(0,Y$.isCompositeType)(t)?Fc.TypeNameMetaFieldDef:"getFields"in t?t.getFields()[r]:null}ea.getFieldDef=X$;function eU(e,t){let r=[],n=e;for(;n==null?void 0:n.kind;)r.push(n),n=n.prevState;for(let i=r.length-1;i>=0;i--)t(r[i])}ea.forEachState=eU;function Z$(e){let t=Object.keys(e),r=t.length,n=new Array(r);for(let i=0;i!n.isDeprecated);let r=e.map(n=>({proximity:tee(tU(n.label),t),entry:n}));return GO(GO(r,n=>n.proximity<=2),n=>!n.entry.isDeprecated).sort((n,i)=>(n.entry.isDeprecated?1:0)-(i.entry.isDeprecated?1:0)||n.proximity-i.proximity||n.entry.label.length-i.entry.label.length).map(n=>n.entry)}function GO(e,t){let r=e.filter(t);return r.length===0?e:r}function tU(e){return e.toLowerCase().replace(/\W/g,"")}function tee(e,t){let r=ree(t,e);return e.length>t.length&&(r-=e.length-t.length-1,r+=e.indexOf(t)===0?0:.5),r}function ree(e,t){let r,n,i=[],o=e.length,s=t.length;for(r=0;r<=o;r++)i[r]=[r];for(n=1;n<=s;n++)i[0][n]=n;for(r=1;r<=o;r++)for(n=1;n<=s;n++){let l=e[r-1]===t[n-1]?0:1;i[r][n]=Math.min(i[r-1][n]+1,i[r][n-1]+1,i[r-1][n-1]+l),r>1&&n>1&&e[r-1]===t[n-2]&&e[r-2]===t[n-1]&&(i[r][n]=Math.min(i[r][n],i[r-2][n-2]+l))}return i[o][s]}});var nU=G((rU,iy)=>{(function(e){if(typeof iy=="object"&&typeof iy.exports=="object"){var t=e(tx,rU);t!==void 0&&(iy.exports=t)}else typeof define=="function"&&define.amd&&define(["require","exports"],e)})(function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TextDocument=t.EOL=t.WorkspaceFolder=t.InlayHint=t.InlayHintLabelPart=t.InlayHintKind=t.InlineValueContext=t.InlineValueEvaluatableExpression=t.InlineValueVariableLookup=t.InlineValueText=t.SemanticTokens=t.SemanticTokenModifiers=t.SemanticTokenTypes=t.SelectionRange=t.DocumentLink=t.FormattingOptions=t.CodeLens=t.CodeAction=t.CodeActionContext=t.CodeActionTriggerKind=t.CodeActionKind=t.DocumentSymbol=t.WorkspaceSymbol=t.SymbolInformation=t.SymbolTag=t.SymbolKind=t.DocumentHighlight=t.DocumentHighlightKind=t.SignatureInformation=t.ParameterInformation=t.Hover=t.MarkedString=t.CompletionList=t.CompletionItem=t.CompletionItemLabelDetails=t.InsertTextMode=t.InsertReplaceEdit=t.CompletionItemTag=t.InsertTextFormat=t.CompletionItemKind=t.MarkupContent=t.MarkupKind=t.TextDocumentItem=t.OptionalVersionedTextDocumentIdentifier=t.VersionedTextDocumentIdentifier=t.TextDocumentIdentifier=t.WorkspaceChange=t.WorkspaceEdit=t.DeleteFile=t.RenameFile=t.CreateFile=t.TextDocumentEdit=t.AnnotatedTextEdit=t.ChangeAnnotationIdentifier=t.ChangeAnnotation=t.TextEdit=t.Command=t.Diagnostic=t.CodeDescription=t.DiagnosticTag=t.DiagnosticSeverity=t.DiagnosticRelatedInformation=t.FoldingRange=t.FoldingRangeKind=t.ColorPresentation=t.ColorInformation=t.Color=t.LocationLink=t.Location=t.Range=t.Position=t.uinteger=t.integer=t.URI=t.DocumentUri=void 0;var r;(function(F){function Y(J){return typeof J=="string"}F.is=Y})(r=t.DocumentUri||(t.DocumentUri={}));var n;(function(F){function Y(J){return typeof J=="string"}F.is=Y})(n=t.URI||(t.URI={}));var i;(function(F){F.MIN_VALUE=-2147483648,F.MAX_VALUE=2147483647;function Y(J){return typeof J=="number"&&F.MIN_VALUE<=J&&J<=F.MAX_VALUE}F.is=Y})(i=t.integer||(t.integer={}));var o;(function(F){F.MIN_VALUE=0,F.MAX_VALUE=2147483647;function Y(J){return typeof J=="number"&&F.MIN_VALUE<=J&&J<=F.MAX_VALUE}F.is=Y})(o=t.uinteger||(t.uinteger={}));var s;(function(F){function Y(V,A){return V===Number.MAX_VALUE&&(V=o.MAX_VALUE),A===Number.MAX_VALUE&&(A=o.MAX_VALUE),{line:V,character:A}}F.create=Y;function J(V){var A=V;return ee.objectLiteral(A)&&ee.uinteger(A.line)&&ee.uinteger(A.character)}F.is=J})(s=t.Position||(t.Position={}));var l;(function(F){function Y(V,A,re,ue){if(ee.uinteger(V)&&ee.uinteger(A)&&ee.uinteger(re)&&ee.uinteger(ue))return{start:s.create(V,A),end:s.create(re,ue)};if(s.is(V)&&s.is(A))return{start:V,end:A};throw new Error("Range#create called with invalid arguments[".concat(V,", ").concat(A,", ").concat(re,", ").concat(ue,"]"))}F.create=Y;function J(V){var A=V;return ee.objectLiteral(A)&&s.is(A.start)&&s.is(A.end)}F.is=J})(l=t.Range||(t.Range={}));var d;(function(F){function Y(V,A){return{uri:V,range:A}}F.create=Y;function J(V){var A=V;return ee.objectLiteral(A)&&l.is(A.range)&&(ee.string(A.uri)||ee.undefined(A.uri))}F.is=J})(d=t.Location||(t.Location={}));var h;(function(F){function Y(V,A,re,ue){return{targetUri:V,targetRange:A,targetSelectionRange:re,originSelectionRange:ue}}F.create=Y;function J(V){var A=V;return ee.objectLiteral(A)&&l.is(A.targetRange)&&ee.string(A.targetUri)&&l.is(A.targetSelectionRange)&&(l.is(A.originSelectionRange)||ee.undefined(A.originSelectionRange))}F.is=J})(h=t.LocationLink||(t.LocationLink={}));var v;(function(F){function Y(V,A,re,ue){return{red:V,green:A,blue:re,alpha:ue}}F.create=Y;function J(V){var A=V;return ee.objectLiteral(A)&&ee.numberRange(A.red,0,1)&&ee.numberRange(A.green,0,1)&&ee.numberRange(A.blue,0,1)&&ee.numberRange(A.alpha,0,1)}F.is=J})(v=t.Color||(t.Color={}));var y;(function(F){function Y(V,A){return{range:V,color:A}}F.create=Y;function J(V){var A=V;return ee.objectLiteral(A)&&l.is(A.range)&&v.is(A.color)}F.is=J})(y=t.ColorInformation||(t.ColorInformation={}));var b;(function(F){function Y(V,A,re){return{label:V,textEdit:A,additionalTextEdits:re}}F.create=Y;function J(V){var A=V;return ee.objectLiteral(A)&&ee.string(A.label)&&(ee.undefined(A.textEdit)||L.is(A))&&(ee.undefined(A.additionalTextEdits)||ee.typedArray(A.additionalTextEdits,L.is))}F.is=J})(b=t.ColorPresentation||(t.ColorPresentation={}));var D;(function(F){F.Comment="comment",F.Imports="imports",F.Region="region"})(D=t.FoldingRangeKind||(t.FoldingRangeKind={}));var _;(function(F){function Y(V,A,re,ue,Ze,Ut){var Rt={startLine:V,endLine:A};return ee.defined(re)&&(Rt.startCharacter=re),ee.defined(ue)&&(Rt.endCharacter=ue),ee.defined(Ze)&&(Rt.kind=Ze),ee.defined(Ut)&&(Rt.collapsedText=Ut),Rt}F.create=Y;function J(V){var A=V;return ee.objectLiteral(A)&&ee.uinteger(A.startLine)&&ee.uinteger(A.startLine)&&(ee.undefined(A.startCharacter)||ee.uinteger(A.startCharacter))&&(ee.undefined(A.endCharacter)||ee.uinteger(A.endCharacter))&&(ee.undefined(A.kind)||ee.string(A.kind))}F.is=J})(_=t.FoldingRange||(t.FoldingRange={}));var k;(function(F){function Y(V,A){return{location:V,message:A}}F.create=Y;function J(V){var A=V;return ee.defined(A)&&d.is(A.location)&&ee.string(A.message)}F.is=J})(k=t.DiagnosticRelatedInformation||(t.DiagnosticRelatedInformation={}));var T;(function(F){F.Error=1,F.Warning=2,F.Information=3,F.Hint=4})(T=t.DiagnosticSeverity||(t.DiagnosticSeverity={}));var S;(function(F){F.Unnecessary=1,F.Deprecated=2})(S=t.DiagnosticTag||(t.DiagnosticTag={}));var m;(function(F){function Y(J){var V=J;return ee.objectLiteral(V)&&ee.string(V.href)}F.is=Y})(m=t.CodeDescription||(t.CodeDescription={}));var w;(function(F){function Y(V,A,re,ue,Ze,Ut){var Rt={range:V,message:A};return ee.defined(re)&&(Rt.severity=re),ee.defined(ue)&&(Rt.code=ue),ee.defined(Ze)&&(Rt.source=Ze),ee.defined(Ut)&&(Rt.relatedInformation=Ut),Rt}F.create=Y;function J(V){var A,re=V;return ee.defined(re)&&l.is(re.range)&&ee.string(re.message)&&(ee.number(re.severity)||ee.undefined(re.severity))&&(ee.integer(re.code)||ee.string(re.code)||ee.undefined(re.code))&&(ee.undefined(re.codeDescription)||ee.string((A=re.codeDescription)===null||A===void 0?void 0:A.href))&&(ee.string(re.source)||ee.undefined(re.source))&&(ee.undefined(re.relatedInformation)||ee.typedArray(re.relatedInformation,k.is))}F.is=J})(w=t.Diagnostic||(t.Diagnostic={}));var x;(function(F){function Y(V,A){for(var re=[],ue=2;ue0&&(Ze.arguments=re),Ze}F.create=Y;function J(V){var A=V;return ee.defined(A)&&ee.string(A.title)&&ee.string(A.command)}F.is=J})(x=t.Command||(t.Command={}));var L;(function(F){function Y(re,ue){return{range:re,newText:ue}}F.replace=Y;function J(re,ue){return{range:{start:re,end:re},newText:ue}}F.insert=J;function V(re){return{range:re,newText:""}}F.del=V;function A(re){var ue=re;return ee.objectLiteral(ue)&&ee.string(ue.newText)&&l.is(ue.range)}F.is=A})(L=t.TextEdit||(t.TextEdit={}));var O;(function(F){function Y(V,A,re){var ue={label:V};return A!==void 0&&(ue.needsConfirmation=A),re!==void 0&&(ue.description=re),ue}F.create=Y;function J(V){var A=V;return ee.objectLiteral(A)&&ee.string(A.label)&&(ee.boolean(A.needsConfirmation)||A.needsConfirmation===void 0)&&(ee.string(A.description)||A.description===void 0)}F.is=J})(O=t.ChangeAnnotation||(t.ChangeAnnotation={}));var R;(function(F){function Y(J){var V=J;return ee.string(V)}F.is=Y})(R=t.ChangeAnnotationIdentifier||(t.ChangeAnnotationIdentifier={}));var M;(function(F){function Y(re,ue,Ze){return{range:re,newText:ue,annotationId:Ze}}F.replace=Y;function J(re,ue,Ze){return{range:{start:re,end:re},newText:ue,annotationId:Ze}}F.insert=J;function V(re,ue){return{range:re,newText:"",annotationId:ue}}F.del=V;function A(re){var ue=re;return L.is(ue)&&(O.is(ue.annotationId)||R.is(ue.annotationId))}F.is=A})(M=t.AnnotatedTextEdit||(t.AnnotatedTextEdit={}));var q;(function(F){function Y(V,A){return{textDocument:V,edits:A}}F.create=Y;function J(V){var A=V;return ee.defined(A)&&He.is(A.textDocument)&&Array.isArray(A.edits)}F.is=J})(q=t.TextDocumentEdit||(t.TextDocumentEdit={}));var z;(function(F){function Y(V,A,re){var ue={kind:"create",uri:V};return A!==void 0&&(A.overwrite!==void 0||A.ignoreIfExists!==void 0)&&(ue.options=A),re!==void 0&&(ue.annotationId=re),ue}F.create=Y;function J(V){var A=V;return A&&A.kind==="create"&&ee.string(A.uri)&&(A.options===void 0||(A.options.overwrite===void 0||ee.boolean(A.options.overwrite))&&(A.options.ignoreIfExists===void 0||ee.boolean(A.options.ignoreIfExists)))&&(A.annotationId===void 0||R.is(A.annotationId))}F.is=J})(z=t.CreateFile||(t.CreateFile={}));var B;(function(F){function Y(V,A,re,ue){var Ze={kind:"rename",oldUri:V,newUri:A};return re!==void 0&&(re.overwrite!==void 0||re.ignoreIfExists!==void 0)&&(Ze.options=re),ue!==void 0&&(Ze.annotationId=ue),Ze}F.create=Y;function J(V){var A=V;return A&&A.kind==="rename"&&ee.string(A.oldUri)&&ee.string(A.newUri)&&(A.options===void 0||(A.options.overwrite===void 0||ee.boolean(A.options.overwrite))&&(A.options.ignoreIfExists===void 0||ee.boolean(A.options.ignoreIfExists)))&&(A.annotationId===void 0||R.is(A.annotationId))}F.is=J})(B=t.RenameFile||(t.RenameFile={}));var Q;(function(F){function Y(V,A,re){var ue={kind:"delete",uri:V};return A!==void 0&&(A.recursive!==void 0||A.ignoreIfNotExists!==void 0)&&(ue.options=A),re!==void 0&&(ue.annotationId=re),ue}F.create=Y;function J(V){var A=V;return A&&A.kind==="delete"&&ee.string(A.uri)&&(A.options===void 0||(A.options.recursive===void 0||ee.boolean(A.options.recursive))&&(A.options.ignoreIfNotExists===void 0||ee.boolean(A.options.ignoreIfNotExists)))&&(A.annotationId===void 0||R.is(A.annotationId))}F.is=J})(Q=t.DeleteFile||(t.DeleteFile={}));var P;(function(F){function Y(J){var V=J;return V&&(V.changes!==void 0||V.documentChanges!==void 0)&&(V.documentChanges===void 0||V.documentChanges.every(function(A){return ee.string(A.kind)?z.is(A)||B.is(A)||Q.is(A):q.is(A)}))}F.is=Y})(P=t.WorkspaceEdit||(t.WorkspaceEdit={}));var he=function(){function F(Y,J){this.edits=Y,this.changeAnnotations=J}return F.prototype.insert=function(Y,J,V){var A,re;if(V===void 0?A=L.insert(Y,J):R.is(V)?(re=V,A=M.insert(Y,J,V)):(this.assertChangeAnnotations(this.changeAnnotations),re=this.changeAnnotations.manage(V),A=M.insert(Y,J,re)),this.edits.push(A),re!==void 0)return re},F.prototype.replace=function(Y,J,V){var A,re;if(V===void 0?A=L.replace(Y,J):R.is(V)?(re=V,A=M.replace(Y,J,V)):(this.assertChangeAnnotations(this.changeAnnotations),re=this.changeAnnotations.manage(V),A=M.replace(Y,J,re)),this.edits.push(A),re!==void 0)return re},F.prototype.delete=function(Y,J){var V,A;if(J===void 0?V=L.del(Y):R.is(J)?(A=J,V=M.del(Y,J)):(this.assertChangeAnnotations(this.changeAnnotations),A=this.changeAnnotations.manage(J),V=M.del(Y,A)),this.edits.push(V),A!==void 0)return A},F.prototype.add=function(Y){this.edits.push(Y)},F.prototype.all=function(){return this.edits},F.prototype.clear=function(){this.edits.splice(0,this.edits.length)},F.prototype.assertChangeAnnotations=function(Y){if(Y===void 0)throw new Error("Text edit change is not configured to manage change annotations.")},F}(),xe=function(){function F(Y){this._annotations=Y===void 0?Object.create(null):Y,this._counter=0,this._size=0}return F.prototype.all=function(){return this._annotations},Object.defineProperty(F.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),F.prototype.manage=function(Y,J){var V;if(R.is(Y)?V=Y:(V=this.nextId(),J=Y),this._annotations[V]!==void 0)throw new Error("Id ".concat(V," is already in use."));if(J===void 0)throw new Error("No annotation provided for id ".concat(V));return this._annotations[V]=J,this._size++,V},F.prototype.nextId=function(){return this._counter++,this._counter.toString()},F}(),ge=function(){function F(Y){var J=this;this._textEditChanges=Object.create(null),Y!==void 0?(this._workspaceEdit=Y,Y.documentChanges?(this._changeAnnotations=new xe(Y.changeAnnotations),Y.changeAnnotations=this._changeAnnotations.all(),Y.documentChanges.forEach(function(V){if(q.is(V)){var A=new he(V.edits,J._changeAnnotations);J._textEditChanges[V.textDocument.uri]=A}})):Y.changes&&Object.keys(Y.changes).forEach(function(V){var A=new he(Y.changes[V]);J._textEditChanges[V]=A})):this._workspaceEdit={}}return Object.defineProperty(F.prototype,"edit",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),F.prototype.getTextEditChange=function(Y){if(He.is(Y)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var J={uri:Y.uri,version:Y.version},V=this._textEditChanges[J.uri];if(!V){var A=[],re={textDocument:J,edits:A};this._workspaceEdit.documentChanges.push(re),V=new he(A,this._changeAnnotations),this._textEditChanges[J.uri]=V}return V}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");var V=this._textEditChanges[Y];if(!V){var A=[];this._workspaceEdit.changes[Y]=A,V=new he(A),this._textEditChanges[Y]=V}return V}},F.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new xe,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},F.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},F.prototype.createFile=function(Y,J,V){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var A;O.is(J)||R.is(J)?A=J:V=J;var re,ue;if(A===void 0?re=z.create(Y,V):(ue=R.is(A)?A:this._changeAnnotations.manage(A),re=z.create(Y,V,ue)),this._workspaceEdit.documentChanges.push(re),ue!==void 0)return ue},F.prototype.renameFile=function(Y,J,V,A){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var re;O.is(V)||R.is(V)?re=V:A=V;var ue,Ze;if(re===void 0?ue=B.create(Y,J,A):(Ze=R.is(re)?re:this._changeAnnotations.manage(re),ue=B.create(Y,J,A,Ze)),this._workspaceEdit.documentChanges.push(ue),Ze!==void 0)return Ze},F.prototype.deleteFile=function(Y,J,V){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var A;O.is(J)||R.is(J)?A=J:V=J;var re,ue;if(A===void 0?re=Q.create(Y,V):(ue=R.is(A)?A:this._changeAnnotations.manage(A),re=Q.create(Y,V,ue)),this._workspaceEdit.documentChanges.push(re),ue!==void 0)return ue},F}();t.WorkspaceChange=ge;var Fe;(function(F){function Y(V){return{uri:V}}F.create=Y;function J(V){var A=V;return ee.defined(A)&&ee.string(A.uri)}F.is=J})(Fe=t.TextDocumentIdentifier||(t.TextDocumentIdentifier={}));var Le;(function(F){function Y(V,A){return{uri:V,version:A}}F.create=Y;function J(V){var A=V;return ee.defined(A)&&ee.string(A.uri)&&ee.integer(A.version)}F.is=J})(Le=t.VersionedTextDocumentIdentifier||(t.VersionedTextDocumentIdentifier={}));var He;(function(F){function Y(V,A){return{uri:V,version:A}}F.create=Y;function J(V){var A=V;return ee.defined(A)&&ee.string(A.uri)&&(A.version===null||ee.integer(A.version))}F.is=J})(He=t.OptionalVersionedTextDocumentIdentifier||(t.OptionalVersionedTextDocumentIdentifier={}));var Xe;(function(F){function Y(V,A,re,ue){return{uri:V,languageId:A,version:re,text:ue}}F.create=Y;function J(V){var A=V;return ee.defined(A)&&ee.string(A.uri)&&ee.string(A.languageId)&&ee.integer(A.version)&&ee.string(A.text)}F.is=J})(Xe=t.TextDocumentItem||(t.TextDocumentItem={}));var Ve;(function(F){F.PlainText="plaintext",F.Markdown="markdown";function Y(J){var V=J;return V===F.PlainText||V===F.Markdown}F.is=Y})(Ve=t.MarkupKind||(t.MarkupKind={}));var At;(function(F){function Y(J){var V=J;return ee.objectLiteral(J)&&Ve.is(V.kind)&&ee.string(V.value)}F.is=Y})(At=t.MarkupContent||(t.MarkupContent={}));var Ot;(function(F){F.Text=1,F.Method=2,F.Function=3,F.Constructor=4,F.Field=5,F.Variable=6,F.Class=7,F.Interface=8,F.Module=9,F.Property=10,F.Unit=11,F.Value=12,F.Enum=13,F.Keyword=14,F.Snippet=15,F.Color=16,F.File=17,F.Reference=18,F.Folder=19,F.EnumMember=20,F.Constant=21,F.Struct=22,F.Event=23,F.Operator=24,F.TypeParameter=25})(Ot=t.CompletionItemKind||(t.CompletionItemKind={}));var Ie;(function(F){F.PlainText=1,F.Snippet=2})(Ie=t.InsertTextFormat||(t.InsertTextFormat={}));var te;(function(F){F.Deprecated=1})(te=t.CompletionItemTag||(t.CompletionItemTag={}));var ce;(function(F){function Y(V,A,re){return{newText:V,insert:A,replace:re}}F.create=Y;function J(V){var A=V;return A&&ee.string(A.newText)&&l.is(A.insert)&&l.is(A.replace)}F.is=J})(ce=t.InsertReplaceEdit||(t.InsertReplaceEdit={}));var we;(function(F){F.asIs=1,F.adjustIndentation=2})(we=t.InsertTextMode||(t.InsertTextMode={}));var ot;(function(F){function Y(J){var V=J;return V&&(ee.string(V.detail)||V.detail===void 0)&&(ee.string(V.description)||V.description===void 0)}F.is=Y})(ot=t.CompletionItemLabelDetails||(t.CompletionItemLabelDetails={}));var Me;(function(F){function Y(J){return{label:J}}F.create=Y})(Me=t.CompletionItem||(t.CompletionItem={}));var Qe;(function(F){function Y(J,V){return{items:J||[],isIncomplete:!!V}}F.create=Y})(Qe=t.CompletionList||(t.CompletionList={}));var ze;(function(F){function Y(V){return V.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}F.fromPlainText=Y;function J(V){var A=V;return ee.string(A)||ee.objectLiteral(A)&&ee.string(A.language)&&ee.string(A.value)}F.is=J})(ze=t.MarkedString||(t.MarkedString={}));var mt;(function(F){function Y(J){var V=J;return!!V&&ee.objectLiteral(V)&&(At.is(V.contents)||ze.is(V.contents)||ee.typedArray(V.contents,ze.is))&&(J.range===void 0||l.is(J.range))}F.is=Y})(mt=t.Hover||(t.Hover={}));var oe;(function(F){function Y(J,V){return V?{label:J,documentation:V}:{label:J}}F.create=Y})(oe=t.ParameterInformation||(t.ParameterInformation={}));var me;(function(F){function Y(J,V){for(var A=[],re=2;re=0;vn--){var Rr=Ut[vn],jr=re.offsetAt(Rr.range.start),et=re.offsetAt(Rr.range.end);if(et<=Rt)Ze=Ze.substring(0,jr)+Rr.newText+Ze.substring(et,Ze.length);else throw new Error("Overlapping edit");Rt=jr}return Ze}F.applyEdits=V;function A(re,ue){if(re.length<=1)return re;var Ze=re.length/2|0,Ut=re.slice(0,Ze),Rt=re.slice(Ze);A(Ut,ue),A(Rt,ue);for(var vn=0,Rr=0,jr=0;vn0&&Y.push(J.length),this._lineOffsets=Y}return this._lineOffsets},F.prototype.positionAt=function(Y){Y=Math.max(Math.min(Y,this._content.length),0);var J=this.getLineOffsets(),V=0,A=J.length;if(A===0)return s.create(0,Y);for(;VY?A=re:V=re+1}var ue=V-1;return s.create(ue,Y-J[ue])},F.prototype.offsetAt=function(Y){var J=this.getLineOffsets();if(Y.line>=J.length)return this._content.length;if(Y.line<0)return 0;var V=J[Y.line],A=Y.line+1{"use strict";Object.defineProperty(BO,"__esModule",{value:!0});var iU=class{constructor(t){this.getStartOfToken=()=>this._start,this.getCurrentPosition=()=>this._pos,this.eol=()=>this._sourceText.length===this._pos,this.sol=()=>this._pos===0,this.peek=()=>this._sourceText.charAt(this._pos)?this._sourceText.charAt(this._pos):null,this.next=()=>{let r=this._sourceText.charAt(this._pos);return this._pos++,r},this.eat=r=>{if(this._testNextCharacter(r))return this._start=this._pos,this._pos++,this._sourceText.charAt(this._pos-1)},this.eatWhile=r=>{let n=this._testNextCharacter(r),i=!1;for(n&&(i=n,this._start=this._pos);n;)this._pos++,n=this._testNextCharacter(r),i=!0;return i},this.eatSpace=()=>this.eatWhile(/[\s\u00a0]/),this.skipToEnd=()=>{this._pos=this._sourceText.length},this.skipTo=r=>{this._pos=r},this.match=(r,n=!0,i=!1)=>{let o=null,s=null;return typeof r=="string"?(s=new RegExp(r,i?"i":"g").test(this._sourceText.substr(this._pos,r.length)),o=r):r instanceof RegExp&&(s=this._sourceText.slice(this._pos).match(r),o=s==null?void 0:s[0]),s!=null&&(typeof r=="string"||s instanceof Array&&this._sourceText.startsWith(s[0],this._pos))?(n&&(this._start=this._pos,o&&o.length&&(this._pos+=o.length)),s):!1},this.backUp=r=>{this._pos-=r},this.column=()=>this._pos,this.indentation=()=>{let r=this._sourceText.match(/\s*/),n=0;if(r&&r.length!==0){let i=r[0],o=0;for(;i.length>o;)i.charCodeAt(o)===9?n+=2:n++,o++}return n},this.current=()=>this._sourceText.slice(this._start,this._pos),this._start=0,this._pos=0,this._sourceText=t}_testNextCharacter(t){let r=this._sourceText.charAt(this._pos),n=!1;return typeof t=="string"?n=r===t:n=t instanceof RegExp?t.test(r):t(r),n}};BO.default=iU});var KO=G(ta=>{"use strict";Object.defineProperty(ta,"__esModule",{value:!0});ta.p=ta.t=ta.butNot=ta.list=ta.opt=void 0;function nee(e){return{ofRule:e}}ta.opt=nee;function iee(e,t){return{ofRule:e,isList:!0,separator:t}}ta.list=iee;function aee(e,t){let r=e.match;return e.match=n=>{let i=!1;return r&&(i=r(n)),i&&t.every(o=>o.match&&!o.match(n))},e}ta.butNot=aee;function oee(e,t){return{style:t,match:r=>r.kind===e}}ta.t=oee;function uee(e,t){return{style:t||"punctuation",match:r=>r.kind==="Punctuation"&&r.value===e}}ta.p=uee});var HO=G(ju=>{"use strict";Object.defineProperty(ju,"__esModule",{value:!0});ju.ParseRules=ju.LexRules=ju.isIgnored=void 0;var de=KO(),see=ht(),lee=e=>e===" "||e===" "||e===","||e===` -`||e==="\r"||e==="\uFEFF"||e==="\xA0";ju.isIgnored=lee;ju.LexRules={Name:/^[_A-Za-z][_0-9A-Za-z]*/,Punctuation:/^(?:!|\$|\(|\)|\.\.\.|:|=|&|@|\[|]|\{|\||\})/,Number:/^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/,String:/^(?:"""(?:\\"""|[^"]|"[^"]|""[^"])*(?:""")?|"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?)/,Comment:/^#.*/};ju.ParseRules={Document:[(0,de.list)("Definition")],Definition(e){switch(e.value){case"{":return"ShortQuery";case"query":return"Query";case"mutation":return"Mutation";case"subscription":return"Subscription";case"fragment":return see.Kind.FRAGMENT_DEFINITION;case"schema":return"SchemaDef";case"scalar":return"ScalarDef";case"type":return"ObjectTypeDef";case"interface":return"InterfaceDef";case"union":return"UnionDef";case"enum":return"EnumDef";case"input":return"InputDef";case"extend":return"ExtendDef";case"directive":return"DirectiveDef"}},ShortQuery:["SelectionSet"],Query:[kn("query"),(0,de.opt)(tr("def")),(0,de.opt)("VariableDefinitions"),(0,de.list)("Directive"),"SelectionSet"],Mutation:[kn("mutation"),(0,de.opt)(tr("def")),(0,de.opt)("VariableDefinitions"),(0,de.list)("Directive"),"SelectionSet"],Subscription:[kn("subscription"),(0,de.opt)(tr("def")),(0,de.opt)("VariableDefinitions"),(0,de.list)("Directive"),"SelectionSet"],VariableDefinitions:[(0,de.p)("("),(0,de.list)("VariableDefinition"),(0,de.p)(")")],VariableDefinition:["Variable",(0,de.p)(":"),"Type",(0,de.opt)("DefaultValue")],Variable:[(0,de.p)("$","variable"),tr("variable")],DefaultValue:[(0,de.p)("="),"Value"],SelectionSet:[(0,de.p)("{"),(0,de.list)("Selection"),(0,de.p)("}")],Selection(e,t){return e.value==="..."?t.match(/[\s\u00a0,]*(on\b|@|{)/,!1)?"InlineFragment":"FragmentSpread":t.match(/[\s\u00a0,]*:/,!1)?"AliasedField":"Field"},AliasedField:[tr("property"),(0,de.p)(":"),tr("qualifier"),(0,de.opt)("Arguments"),(0,de.list)("Directive"),(0,de.opt)("SelectionSet")],Field:[tr("property"),(0,de.opt)("Arguments"),(0,de.list)("Directive"),(0,de.opt)("SelectionSet")],Arguments:[(0,de.p)("("),(0,de.list)("Argument"),(0,de.p)(")")],Argument:[tr("attribute"),(0,de.p)(":"),"Value"],FragmentSpread:[(0,de.p)("..."),tr("def"),(0,de.list)("Directive")],InlineFragment:[(0,de.p)("..."),(0,de.opt)("TypeCondition"),(0,de.list)("Directive"),"SelectionSet"],FragmentDefinition:[kn("fragment"),(0,de.opt)((0,de.butNot)(tr("def"),[kn("on")])),"TypeCondition",(0,de.list)("Directive"),"SelectionSet"],TypeCondition:[kn("on"),"NamedType"],Value(e){switch(e.kind){case"Number":return"NumberValue";case"String":return"StringValue";case"Punctuation":switch(e.value){case"[":return"ListValue";case"{":return"ObjectValue";case"$":return"Variable";case"&":return"NamedType"}return null;case"Name":switch(e.value){case"true":case"false":return"BooleanValue"}return e.value==="null"?"NullValue":"EnumValue"}},NumberValue:[(0,de.t)("Number","number")],StringValue:[{style:"string",match:e=>e.kind==="String",update(e,t){t.value.startsWith('"""')&&(e.inBlockstring=!t.value.slice(3).endsWith('"""'))}}],BooleanValue:[(0,de.t)("Name","builtin")],NullValue:[(0,de.t)("Name","keyword")],EnumValue:[tr("string-2")],ListValue:[(0,de.p)("["),(0,de.list)("Value"),(0,de.p)("]")],ObjectValue:[(0,de.p)("{"),(0,de.list)("ObjectField"),(0,de.p)("}")],ObjectField:[tr("attribute"),(0,de.p)(":"),"Value"],Type(e){return e.value==="["?"ListType":"NonNullType"},ListType:[(0,de.p)("["),"Type",(0,de.p)("]"),(0,de.opt)((0,de.p)("!"))],NonNullType:["NamedType",(0,de.opt)((0,de.p)("!"))],NamedType:[cee("atom")],Directive:[(0,de.p)("@","meta"),tr("meta"),(0,de.opt)("Arguments")],DirectiveDef:[kn("directive"),(0,de.p)("@","meta"),tr("meta"),(0,de.opt)("ArgumentsDef"),kn("on"),(0,de.list)("DirectiveLocation",(0,de.p)("|"))],InterfaceDef:[kn("interface"),tr("atom"),(0,de.opt)("Implements"),(0,de.list)("Directive"),(0,de.p)("{"),(0,de.list)("FieldDef"),(0,de.p)("}")],Implements:[kn("implements"),(0,de.list)("NamedType",(0,de.p)("&"))],DirectiveLocation:[tr("string-2")],SchemaDef:[kn("schema"),(0,de.list)("Directive"),(0,de.p)("{"),(0,de.list)("OperationTypeDef"),(0,de.p)("}")],OperationTypeDef:[tr("keyword"),(0,de.p)(":"),tr("atom")],ScalarDef:[kn("scalar"),tr("atom"),(0,de.list)("Directive")],ObjectTypeDef:[kn("type"),tr("atom"),(0,de.opt)("Implements"),(0,de.list)("Directive"),(0,de.p)("{"),(0,de.list)("FieldDef"),(0,de.p)("}")],FieldDef:[tr("property"),(0,de.opt)("ArgumentsDef"),(0,de.p)(":"),"Type",(0,de.list)("Directive")],ArgumentsDef:[(0,de.p)("("),(0,de.list)("InputValueDef"),(0,de.p)(")")],InputValueDef:[tr("attribute"),(0,de.p)(":"),"Type",(0,de.opt)("DefaultValue"),(0,de.list)("Directive")],UnionDef:[kn("union"),tr("atom"),(0,de.list)("Directive"),(0,de.p)("="),(0,de.list)("UnionMember",(0,de.p)("|"))],UnionMember:["NamedType"],EnumDef:[kn("enum"),tr("atom"),(0,de.list)("Directive"),(0,de.p)("{"),(0,de.list)("EnumValueDef"),(0,de.p)("}")],EnumValueDef:[tr("string-2"),(0,de.list)("Directive")],InputDef:[kn("input"),tr("atom"),(0,de.list)("Directive"),(0,de.p)("{"),(0,de.list)("InputValueDef"),(0,de.p)("}")],ExtendDef:[kn("extend"),"ObjectTypeDef"]};function kn(e){return{style:"keyword",match:t=>t.kind==="Name"&&t.value===e}}function tr(e){return{style:e,match:t=>t.kind==="Name",update(t,r){t.name=r.value}}}function cee(e){return{style:e,match:t=>t.kind==="Name",update(t,r){var n;((n=t.prevState)===null||n===void 0?void 0:n.prevState)&&(t.name=r.value,t.prevState.prevState.type=r.value)}}}});var sU=G(XO=>{"use strict";Object.defineProperty(XO,"__esModule",{value:!0});var zO=HO(),fee=ht();function dee(e={eatWhitespace:t=>t.eatWhile(zO.isIgnored),lexRules:zO.LexRules,parseRules:zO.ParseRules,editorConfig:{}}){return{startState(){let t={level:0,step:0,name:null,kind:null,type:null,rule:null,needsSeperator:!1,prevState:null};return Up(e.parseRules,t,fee.Kind.DOCUMENT),t},token(t,r){return pee(t,r,e)}}}XO.default=dee;function pee(e,t,r){var n;if(t.inBlockstring)return e.match(/.*"""/)?(t.inBlockstring=!1,"string"):(e.skipToEnd(),"string");let{lexRules:i,parseRules:o,eatWhitespace:s,editorConfig:l}=r;if(t.rule&&t.rule.length===0?YO(t):t.needsAdvance&&(t.needsAdvance=!1,JO(t,!0)),e.sol()){let v=(l==null?void 0:l.tabSize)||2;t.indentLevel=Math.floor(e.indentation()/v)}if(s(e))return"ws";let d=vee(i,e);if(!d)return e.match(/\S+/)||e.match(/\s/),Up(WO,t,"Invalid"),"invalidchar";if(d.kind==="Comment")return Up(WO,t,"Comment"),"comment";let h=oU({},t);if(d.kind==="Punctuation"){if(/^[{([]/.test(d.value))t.indentLevel!==void 0&&(t.levels=(t.levels||[]).concat(t.indentLevel+1));else if(/^[})\]]/.test(d.value)){let v=t.levels=(t.levels||[]).slice(0,-1);t.indentLevel&&v.length>0&&v[v.length-1]{"use strict";Object.defineProperty(Vs,"__esModule",{value:!0});Vs.RuleKinds=Vs.AdditionalRuleKinds=void 0;var gee=ht();Vs.AdditionalRuleKinds={ALIASED_FIELD:"AliasedField",ARGUMENTS:"Arguments",SHORT_QUERY:"ShortQuery",QUERY:"Query",MUTATION:"Mutation",SUBSCRIPTION:"Subscription",TYPE_CONDITION:"TypeCondition",INVALID:"Invalid",COMMENT:"Comment",SCHEMA_DEF:"SchemaDef",SCALAR_DEF:"ScalarDef",OBJECT_TYPE_DEF:"ObjectTypeDef",OBJECT_VALUE:"ObjectValue",LIST_VALUE:"ListValue",INTERFACE_DEF:"InterfaceDef",UNION_DEF:"UnionDef",ENUM_DEF:"EnumDef",ENUM_VALUE:"EnumValue",FIELD_DEF:"FieldDef",INPUT_DEF:"InputDef",INPUT_VALUE_DEF:"InputValueDef",ARGUMENTS_DEF:"ArgumentsDef",EXTEND_DEF:"ExtendDef",DIRECTIVE_DEF:"DirectiveDef",IMPLEMENTS:"Implements",VARIABLE_DEFINITIONS:"VariableDefinitions",TYPE:"Type"};Vs.RuleKinds=Object.assign(Object.assign({},gee.Kind),Vs.AdditionalRuleKinds)});var ay=G(Bt=>{"use strict";var mee=Bt&&Bt.__createBinding||(Object.create?function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]}),yee=Bt&&Bt.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&mee(t,e,r)},cU=Bt&&Bt.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Bt,"__esModule",{value:!0});Bt.onlineParser=Bt.t=Bt.p=Bt.opt=Bt.list=Bt.butNot=Bt.isIgnored=Bt.ParseRules=Bt.LexRules=Bt.CharacterStream=void 0;var bee=aU();Object.defineProperty(Bt,"CharacterStream",{enumerable:!0,get:function(){return cU(bee).default}});var ZO=HO();Object.defineProperty(Bt,"LexRules",{enumerable:!0,get:function(){return ZO.LexRules}});Object.defineProperty(Bt,"ParseRules",{enumerable:!0,get:function(){return ZO.ParseRules}});Object.defineProperty(Bt,"isIgnored",{enumerable:!0,get:function(){return ZO.isIgnored}});var Gp=KO();Object.defineProperty(Bt,"butNot",{enumerable:!0,get:function(){return Gp.butNot}});Object.defineProperty(Bt,"list",{enumerable:!0,get:function(){return Gp.list}});Object.defineProperty(Bt,"opt",{enumerable:!0,get:function(){return Gp.opt}});Object.defineProperty(Bt,"p",{enumerable:!0,get:function(){return Gp.p}});Object.defineProperty(Bt,"t",{enumerable:!0,get:function(){return Gp.t}});var Tee=sU();Object.defineProperty(Bt,"onlineParser",{enumerable:!0,get:function(){return cU(Tee).default}});yee(lU(),Bt)});var ew=G(Vr=>{"use strict";Object.defineProperty(Vr,"__esModule",{value:!0});Vr.getTypeInfo=Vr.canUseDirective=Vr.runOnlineParser=Vr.getTokenAtPosition=Vr.getFragmentDefinitions=Vr.getVariableCompletions=Vr.getAutocompleteSuggestions=Vr.SuggestionCommand=void 0;var tn=nU(),Vt=ht(),kt=ht(),ke=ay(),br=QO();Vr.SuggestionCommand={command:"editor.action.triggerSuggest",title:"Suggestions"};var _ee=e=>{let t=[];if(e)try{(0,kt.visit)((0,kt.parse)(e),{FragmentDefinition(r){t.push(r)}})}catch(r){return[]}return t};function Eee(e,t,r,n,i,o){var s;let l=Object.assign(Object.assign({},o),{schema:e}),d=n||dU(t,r),h=d.state.kind==="Invalid"?d.state.prevState:d.state;if(!h)return[];let v=h.kind,y=h.step,b=hU(e,d.state);if(v===ke.RuleKinds.DOCUMENT)return(0,br.hintList)(d,[{label:"query",kind:tn.CompletionItemKind.Function},{label:"mutation",kind:tn.CompletionItemKind.Function},{label:"subscription",kind:tn.CompletionItemKind.Function},{label:"fragment",kind:tn.CompletionItemKind.Function},{label:"{",kind:tn.CompletionItemKind.Constructor}]);if(v===ke.RuleKinds.IMPLEMENTS||v===ke.RuleKinds.NAMED_TYPE&&((s=h.prevState)===null||s===void 0?void 0:s.kind)===ke.RuleKinds.IMPLEMENTS)return wee(d,h,e,t,b);if(v===ke.RuleKinds.SELECTION_SET||v===ke.RuleKinds.FIELD||v===ke.RuleKinds.ALIASED_FIELD)return kee(d,b,l);if(v===ke.RuleKinds.ARGUMENTS||v===ke.RuleKinds.ARGUMENT&&y===0){let D=b.argDefs;if(D)return(0,br.hintList)(d,D.map(_=>{var k;return{label:_.name,insertText:_.name+": ",command:Vr.SuggestionCommand,detail:String(_.type),documentation:(k=_.description)!==null&&k!==void 0?k:void 0,kind:tn.CompletionItemKind.Variable,type:_.type}}))}if((v===ke.RuleKinds.OBJECT_VALUE||v===ke.RuleKinds.OBJECT_FIELD&&y===0)&&b.objectFieldDefs){let D=(0,br.objectValues)(b.objectFieldDefs),_=v===ke.RuleKinds.OBJECT_VALUE?tn.CompletionItemKind.Value:tn.CompletionItemKind.Field;return(0,br.hintList)(d,D.map(k=>{var T;return{label:k.name,detail:String(k.type),documentation:(T=k.description)!==null&&T!==void 0?T:void 0,kind:_,type:k.type}}))}if(v===ke.RuleKinds.ENUM_VALUE||v===ke.RuleKinds.LIST_VALUE&&y===1||v===ke.RuleKinds.OBJECT_FIELD&&y===2||v===ke.RuleKinds.ARGUMENT&&y===2)return Oee(d,b,t,e);if(v===ke.RuleKinds.VARIABLE&&y===1){let D=(0,kt.getNamedType)(b.inputType),_=$O(t,e,d);return(0,br.hintList)(d,_.filter(k=>k.detail===(D==null?void 0:D.name)))}return v===ke.RuleKinds.TYPE_CONDITION&&y===1||v===ke.RuleKinds.NAMED_TYPE&&h.prevState!=null&&h.prevState.kind===ke.RuleKinds.TYPE_CONDITION?Nee(d,b,e,v):v===ke.RuleKinds.FRAGMENT_SPREAD&&y===1?Dee(d,b,e,t,Array.isArray(i)?i:_ee(i)):v===ke.RuleKinds.VARIABLE_DEFINITION&&y===2||v===ke.RuleKinds.LIST_TYPE&&y===1||v===ke.RuleKinds.NAMED_TYPE&&h.prevState&&(h.prevState.kind===ke.RuleKinds.VARIABLE_DEFINITION||h.prevState.kind===ke.RuleKinds.LIST_TYPE||h.prevState.kind===ke.RuleKinds.NON_NULL_TYPE)?Cee(d,e,v):v===ke.RuleKinds.DIRECTIVE?Lee(d,h,e,v):[]}Vr.getAutocompleteSuggestions=Eee;var oy=` { - $1 -}`,See=e=>{let t=e.type;return(0,kt.isCompositeType)(t)||(0,Vt.isListType)(t)&&(0,kt.isCompositeType)(t.ofType)||(0,Vt.isNonNullType)(t)&&((0,kt.isCompositeType)(t.ofType)||(0,Vt.isListType)(t.ofType)&&(0,kt.isCompositeType)(t.ofType.ofType))?oy:null};function kee(e,t,r){var n;if(t.parentType){let i=t.parentType,o=[];return"getFields"in i&&(o=(0,br.objectValues)(i.getFields())),(0,kt.isCompositeType)(i)&&o.push(kt.TypeNameMetaFieldDef),i===((n=r==null?void 0:r.schema)===null||n===void 0?void 0:n.getQueryType())&&o.push(kt.SchemaMetaFieldDef,kt.TypeMetaFieldDef),(0,br.hintList)(e,o.map((s,l)=>{var d;let h={sortText:String(l)+s.name,label:s.name,detail:String(s.type),documentation:(d=s.description)!==null&&d!==void 0?d:void 0,deprecated:Boolean(s.deprecationReason),isDeprecated:Boolean(s.deprecationReason),deprecationReason:s.deprecationReason,kind:tn.CompletionItemKind.Field,type:s.type},v=See(s);return v&&(h.insertText=s.name+v,h.insertTextFormat=tn.InsertTextFormat.Snippet,h.command=Vr.SuggestionCommand),h}))}return[]}function Oee(e,t,r,n){let i=(0,kt.getNamedType)(t.inputType),o=$O(r,n,e).filter(s=>s.detail===i.name);if(i instanceof kt.GraphQLEnumType){let s=i.getValues();return(0,br.hintList)(e,s.map(l=>{var d;return{label:l.name,detail:String(i),documentation:(d=l.description)!==null&&d!==void 0?d:void 0,deprecated:Boolean(l.deprecationReason),isDeprecated:Boolean(l.deprecationReason),deprecationReason:l.deprecationReason,kind:tn.CompletionItemKind.EnumMember,type:i}}).concat(o))}else if(i===kt.GraphQLBoolean)return(0,br.hintList)(e,o.concat([{label:"true",detail:String(kt.GraphQLBoolean),documentation:"Not false.",kind:tn.CompletionItemKind.Variable,type:kt.GraphQLBoolean},{label:"false",detail:String(kt.GraphQLBoolean),documentation:"Not true.",kind:tn.CompletionItemKind.Variable,type:kt.GraphQLBoolean}]));return o}function wee(e,t,r,n,i){if(t.needsSeperator)return[];let o=r.getTypeMap(),s=(0,br.objectValues)(o).filter(Vt.isInterfaceType),l=s.map(({name:D})=>D),d=new Set;Qp(n,(D,_)=>{var k,T,S,m,w;if(_.name&&(_.kind===ke.RuleKinds.INTERFACE_DEF&&!l.includes(_.name)&&d.add(_.name),_.kind===ke.RuleKinds.NAMED_TYPE&&((k=_.prevState)===null||k===void 0?void 0:k.kind)===ke.RuleKinds.IMPLEMENTS)){if(i.interfaceDef){if((T=i.interfaceDef)===null||T===void 0?void 0:T.getInterfaces().find(({name:R})=>R===_.name))return;let L=r.getType(_.name),O=(S=i.interfaceDef)===null||S===void 0?void 0:S.toConfig();i.interfaceDef=new Vt.GraphQLInterfaceType(Object.assign(Object.assign({},O),{interfaces:[...O.interfaces,L||new Vt.GraphQLInterfaceType({name:_.name,fields:{}})]}))}else if(i.objectTypeDef){if((m=i.objectTypeDef)===null||m===void 0?void 0:m.getInterfaces().find(({name:R})=>R===_.name))return;let L=r.getType(_.name),O=(w=i.objectTypeDef)===null||w===void 0?void 0:w.toConfig();i.objectTypeDef=new Vt.GraphQLObjectType(Object.assign(Object.assign({},O),{interfaces:[...O.interfaces,L||new Vt.GraphQLInterfaceType({name:_.name,fields:{}})]}))}}});let h=i.interfaceDef||i.objectTypeDef,y=((h==null?void 0:h.getInterfaces())||[]).map(({name:D})=>D),b=s.concat([...d].map(D=>({name:D}))).filter(({name:D})=>D!==(h==null?void 0:h.name)&&!y.includes(D));return(0,br.hintList)(e,b.map(D=>{let _={label:D.name,kind:tn.CompletionItemKind.Interface,type:D};return(D==null?void 0:D.description)&&(_.documentation=D.description),_}))}function Nee(e,t,r,n){let i;if(t.parentType)if((0,kt.isAbstractType)(t.parentType)){let o=(0,kt.assertAbstractType)(t.parentType),s=r.getPossibleTypes(o),l=Object.create(null);s.forEach(d=>{d.getInterfaces().forEach(h=>{l[h.name]=h})}),i=s.concat((0,br.objectValues)(l))}else i=[t.parentType];else{let o=r.getTypeMap();i=(0,br.objectValues)(o).filter(kt.isCompositeType)}return(0,br.hintList)(e,i.map(o=>{let s=(0,kt.getNamedType)(o);return{label:String(o),documentation:(s==null?void 0:s.description)||"",kind:tn.CompletionItemKind.Field}}))}function Dee(e,t,r,n,i){if(!n)return[];let o=r.getTypeMap(),s=(0,br.getDefinitionState)(e.state),l=fU(n);i&&i.length>0&&l.push(...i);let d=l.filter(h=>o[h.typeCondition.name.value]&&!(s&&s.kind===ke.RuleKinds.FRAGMENT_DEFINITION&&s.name===h.name.value)&&(0,kt.isCompositeType)(t.parentType)&&(0,kt.isCompositeType)(o[h.typeCondition.name.value])&&(0,kt.doTypesOverlap)(r,t.parentType,o[h.typeCondition.name.value]));return(0,br.hintList)(e,d.map(h=>({label:h.name.value,detail:String(o[h.typeCondition.name.value]),documentation:`fragment ${h.name.value} on ${h.typeCondition.name.value}`,kind:tn.CompletionItemKind.Field,type:o[h.typeCondition.name.value]})))}var xee=(e,t)=>{var r,n,i,o,s,l,d,h,v,y;if(((r=e.prevState)===null||r===void 0?void 0:r.kind)===t)return e.prevState;if(((i=(n=e.prevState)===null||n===void 0?void 0:n.prevState)===null||i===void 0?void 0:i.kind)===t)return e.prevState.prevState;if(((l=(s=(o=e.prevState)===null||o===void 0?void 0:o.prevState)===null||s===void 0?void 0:s.prevState)===null||l===void 0?void 0:l.kind)===t)return e.prevState.prevState.prevState;if(((y=(v=(h=(d=e.prevState)===null||d===void 0?void 0:d.prevState)===null||h===void 0?void 0:h.prevState)===null||v===void 0?void 0:v.prevState)===null||y===void 0?void 0:y.kind)===t)return e.prevState.prevState.prevState.prevState};function $O(e,t,r){let n=null,i,o=Object.create({});return Qp(e,(s,l)=>{if((l==null?void 0:l.kind)===ke.RuleKinds.VARIABLE&&l.name&&(n=l.name),(l==null?void 0:l.kind)===ke.RuleKinds.NAMED_TYPE&&n){let d=xee(l,ke.RuleKinds.TYPE);(d==null?void 0:d.type)&&(i=t.getType(d==null?void 0:d.type))}n&&i&&(o[n]||(o[n]={detail:i.toString(),insertText:r.string==="$"?n:"$"+n,label:n,type:i,kind:tn.CompletionItemKind.Variable},n=null,i=null))}),(0,br.objectValues)(o)}Vr.getVariableCompletions=$O;function fU(e){let t=[];return Qp(e,(r,n)=>{n.kind===ke.RuleKinds.FRAGMENT_DEFINITION&&n.name&&n.type&&t.push({kind:ke.RuleKinds.FRAGMENT_DEFINITION,name:{kind:Vt.Kind.NAME,value:n.name},selectionSet:{kind:ke.RuleKinds.SELECTION_SET,selections:[]},typeCondition:{kind:ke.RuleKinds.NAMED_TYPE,name:{kind:Vt.Kind.NAME,value:n.type}}})}),t}Vr.getFragmentDefinitions=fU;function Cee(e,t,r){let n=t.getTypeMap(),i=(0,br.objectValues)(n).filter(kt.isInputType);return(0,br.hintList)(e,i.map(o=>({label:o.name,documentation:o.description,kind:tn.CompletionItemKind.Variable})))}function Lee(e,t,r,n){var i;if((i=t.prevState)===null||i===void 0?void 0:i.kind){let o=r.getDirectives().filter(s=>pU(t.prevState,s));return(0,br.hintList)(e,o.map(s=>({label:s.name,documentation:s.description||"",kind:tn.CompletionItemKind.Function})))}return[]}function dU(e,t){let r=null,n=null,i=null,o=Qp(e,(s,l,d,h)=>{if(h===t.line&&s.getCurrentPosition()>=t.character)return r=d,n=Object.assign({},l),i=s.current(),"BREAK"});return{start:o.start,end:o.end,string:i||o.string,state:n||o.state,style:r||o.style}}Vr.getTokenAtPosition=dU;function Qp(e,t){let r=e.split(` -`),n=(0,ke.onlineParser)(),i=n.startState(),o="",s=new ke.CharacterStream("");for(let l=0;l{var _;switch(D.kind){case ke.RuleKinds.QUERY:case"ShortQuery":y=e.getQueryType();break;case ke.RuleKinds.MUTATION:y=e.getMutationType();break;case ke.RuleKinds.SUBSCRIPTION:y=e.getSubscriptionType();break;case ke.RuleKinds.INLINE_FRAGMENT:case ke.RuleKinds.FRAGMENT_DEFINITION:D.type&&(y=e.getType(D.type));break;case ke.RuleKinds.FIELD:case ke.RuleKinds.ALIASED_FIELD:{!y||!D.name?s=null:(s=v?(0,br.getFieldDef)(e,v,D.name):null,y=s?s.type:null);break}case ke.RuleKinds.SELECTION_SET:v=(0,kt.getNamedType)(y);break;case ke.RuleKinds.DIRECTIVE:i=D.name?e.getDirective(D.name):null;break;case ke.RuleKinds.INTERFACE_DEF:D.name&&(d=null,b=new Vt.GraphQLInterfaceType({name:D.name,interfaces:[],fields:{}}));break;case ke.RuleKinds.OBJECT_TYPE_DEF:D.name&&(b=null,d=new Vt.GraphQLObjectType({name:D.name,interfaces:[],fields:{}}));break;case ke.RuleKinds.ARGUMENTS:{if(!D.prevState)n=null;else switch(D.prevState.kind){case ke.RuleKinds.FIELD:n=s&&s.args;break;case ke.RuleKinds.DIRECTIVE:n=i&&i.args;break;case ke.RuleKinds.ALIASED_FIELD:{let w=(_=D.prevState)===null||_===void 0?void 0:_.name;if(!w){n=null;break}let x=v?(0,br.getFieldDef)(e,v,w):null;if(!x){n=null;break}n=x.args;break}default:n=null;break}break}case ke.RuleKinds.ARGUMENT:if(n){for(let w=0;ww.value===D.name):null;break;case ke.RuleKinds.LIST_VALUE:let T=(0,kt.getNullableType)(l);l=T instanceof kt.GraphQLList?T.ofType:null;break;case ke.RuleKinds.OBJECT_VALUE:let S=(0,kt.getNamedType)(l);h=S instanceof kt.GraphQLInputObjectType?S.getFields():null;break;case ke.RuleKinds.OBJECT_FIELD:let m=D.name&&h?h[D.name]:null;l=m==null?void 0:m.type;break;case ke.RuleKinds.NAMED_TYPE:D.name&&(y=e.getType(D.name));break}}),{argDef:r,argDefs:n,directiveDef:i,enumValue:o,fieldDef:s,inputType:l,objectFieldDefs:h,parentType:v,type:y,interfaceDef:b,objectTypeDef:d}}Vr.getTypeInfo=hU});var gU=G(Ao=>{"use strict";var Iee=Ao&&Ao.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Ao,"__esModule",{value:!0});Ao.getFragmentDependenciesForAST=Ao.getFragmentDependencies=void 0;var tw=ht(),vU=Iee(Xk()),Aee=(e,t)=>{if(!t)return[];let r;try{r=(0,tw.parse)(e)}catch(n){return[]}return(0,Ao.getFragmentDependenciesForAST)(r,t)};Ao.getFragmentDependencies=Aee;var Ree=(e,t)=>{if(!t)return[];let r=new Map,n=new Set;(0,tw.visit)(e,{FragmentDefinition(s){r.set(s.name.value,!0)},FragmentSpread(s){n.has(s.name.value)||n.add(s.name.value)}});let i=new Set;n.forEach(s=>{!r.has(s)&&t.has(s)&&i.add((0,vU.default)(t.get(s)))});let o=[];return i.forEach(s=>{(0,tw.visit)(s,{FragmentSpread(l){!n.has(l.name.value)&&t.get(l.name.value)&&(i.add((0,vU.default)(t.get(l.name.value))),n.add(l.name.value))}}),r.has(s.name.value)||o.push(s)}),o};Ao.getFragmentDependenciesForAST=Ree});var mU=G(qc=>{"use strict";Object.defineProperty(qc,"__esModule",{value:!0});qc.getVariablesJSONSchema=qc.defaultJSONSchemaOptions=void 0;var Pu=ht();qc.defaultJSONSchemaOptions={useMarkdownDescription:!1};function Mc(e,t){e.push(t)}function rw(e,t){(0,Pu.isNonNullType)(t)?(rw(e,t.ofType),Mc(e,"!")):(0,Pu.isListType)(t)?(Mc(e,"["),rw(e,t.ofType),Mc(e,"]")):Mc(e,t.name)}function Za(e,t){let r=[];return t&&Mc(r,"```graphql\n"),rw(r,e),t&&Mc(r,"\n```"),r.join("")}var jee={Int:"integer",String:"string",Float:"number",ID:"string",Boolean:"boolean",DateTime:"string"};function Bp(e,t){var r;let n=!1,i=Object.create(null),o=Object.create(null);if("defaultValue"in e&&e.defaultValue!==void 0&&(i.default=e.defaultValue),(0,Pu.isEnumType)(e)&&(i.type="string",i.enum=e.getValues().map(s=>s.name)),(0,Pu.isScalarType)(e)&&(i.type=(r=jee[e.name])!==null&&r!==void 0?r:"any"),(0,Pu.isListType)(e)){i.type="array";let{definition:s,definitions:l}=Bp(e.ofType,t);s.$ref?i.items={$ref:s.$ref}:i.items=s,l&&Object.keys(l).forEach(d=>{o[d]=l[d]})}if((0,Pu.isNonNullType)(e)){n=!0;let{definition:s,definitions:l}=Bp(e.ofType,t);i=s,l&&Object.keys(l).forEach(d=>{o[d]=l[d]})}if((0,Pu.isInputObjectType)(e)){i.$ref=`#/definitions/${e.name}`;let s=e.getFields(),l={type:"object",properties:{},required:[]};e.description?(l.description=e.description+` -`+Za(e),(t==null?void 0:t.useMarkdownDescription)&&(l.markdownDescription=e.description+` -`+Za(e,!0))):(l.description=Za(e),(t==null?void 0:t.useMarkdownDescription)&&(l.markdownDescription=Za(e,!0))),Object.keys(s).forEach(d=>{let h=s[d],{required:v,definition:y,definitions:b}=Bp(h.type,t),{definition:D}=Bp(h,t);l.properties[d]=Object.assign(Object.assign({},y),D);let _=Za(h.type);if(l.properties[d].description=h.description?h.description+` -`+_:_,t==null?void 0:t.useMarkdownDescription){let k=Za(h.type,!0);l.properties[d].markdownDescription=h.description?h.description+` -`+k:k}v&&l.required.push(d),b&&Object.keys(b).map(k=>{o[k]=b[k]})}),o[e.name]=l}return"description"in e&&!(0,Pu.isScalarType)(e)&&e.description&&!i.description?(i.description=e.description+` -`+Za(e),(t==null?void 0:t.useMarkdownDescription)&&(i.markdownDescription=e.description+` -`+Za(e,!0))):(i.description=Za(e),(t==null?void 0:t.useMarkdownDescription)&&(i.markdownDescription=Za(e,!0))),{required:n,definition:i,definitions:o}}function Pee(e,t){let r={$schema:"https://json-schema.org/draft/2020-12/schema",type:"object",properties:{},required:[]};return e&&Object.entries(e).forEach(([n,i])=>{var o;let{definition:s,required:l,definitions:d}=Bp(i,t);r.properties[n]=s,l&&((o=r.required)===null||o===void 0||o.push(n)),d&&(r.definitions=Object.assign(Object.assign({},r==null?void 0:r.definitions),d))}),r}qc.getVariablesJSONSchema=Pee});var bU=G(Vc=>{"use strict";Object.defineProperty(Vc,"__esModule",{value:!0});Vc.pointToOffset=Vc.getASTNodeAtPosition=void 0;var Fee=ht();function Mee(e,t,r){let n=yU(e,r),i;return(0,Fee.visit)(t,{enter(o){if(o.kind!=="Name"&&o.loc&&o.loc.start<=n&&n<=o.loc.end)i=o;else return!1},leave(o){if(o.loc&&o.loc.start<=n&&n<=o.loc.end)return!1}}),i}Vc.getASTNodeAtPosition=Mee;function yU(e,t){let r=e.split(` -`).slice(0,t.line);return t.character+r.map(n=>n.length+1).reduce((n,i)=>n+i,0)}Vc.pointToOffset=yU});var TU=G($a=>{"use strict";Object.defineProperty($a,"__esModule",{value:!0});$a.locToRange=$a.offsetToPosition=$a.Position=$a.Range=void 0;var nw=class{constructor(t,r){this.containsPosition=n=>this.start.line===n.line?this.start.character<=n.character:this.end.line===n.line?this.end.character>=n.character:this.start.line<=n.line&&this.end.line>=n.line,this.start=t,this.end=r}setStart(t,r){this.start=new Kp(t,r)}setEnd(t,r){this.end=new Kp(t,r)}};$a.Range=nw;var Kp=class{constructor(t,r){this.lessThanOrEqualTo=n=>this.line{"use strict";Object.defineProperty(uy,"__esModule",{value:!0});uy.validateWithCustomRules=void 0;var fn=ht(),Vee=[fn.LoneSchemaDefinitionRule,fn.UniqueOperationTypesRule,fn.UniqueTypeNamesRule,fn.UniqueEnumValueNamesRule,fn.UniqueFieldDefinitionNamesRule,fn.UniqueDirectiveNamesRule,fn.KnownTypeNamesRule,fn.KnownDirectivesRule,fn.UniqueDirectivesPerLocationRule,fn.PossibleTypeExtensionsRule,fn.UniqueArgumentNamesRule,fn.UniqueInputFieldNamesRule];function Uee(e,t,r,n,i){let o=fn.specifiedRules.filter(l=>!(l===fn.NoUnusedFragmentsRule||l===fn.ExecutableDefinitionsRule||n&&l===fn.KnownFragmentNamesRule));return r&&Array.prototype.push.apply(o,r),i&&Array.prototype.push.apply(o,Vee),(0,fn.validate)(e,t,o).filter(l=>{if(l.message.indexOf("Unknown directive")!==-1&&l.nodes){let d=l.nodes[0];if(d&&d.kind===fn.Kind.DIRECTIVE){let h=d.name.value;if(h==="arguments"||h==="argumentDefinitions")return!1}}return!0})}uy.validateWithCustomRules=Uee});var ow=G(sy=>{"use strict";Object.defineProperty(sy,"__esModule",{value:!0});sy.collectVariables=void 0;var aw=ht();function Gee(e,t){let r=Object.create(null);return t.definitions.forEach(n=>{if(n.kind==="OperationDefinition"){let i=n.variableDefinitions;i&&i.forEach(({variable:o,type:s})=>{let l=(0,aw.typeFromAST)(e,s);l?r[o.name.value]=l:s.kind===aw.Kind.NAMED_TYPE&&s.name.value==="Float"&&(r[o.name.value]=aw.GraphQLFloat)})}}),r}sy.collectVariables=Gee});var OU=G(Us=>{"use strict";Object.defineProperty(Us,"__esModule",{value:!0});Us.getQueryFacts=Us.getOperationASTFacts=void 0;var EU=ht(),Qee=ow();function SU(e,t){let r=t?(0,Qee.collectVariables)(t,e):void 0,n=[];return(0,EU.visit)(e,{OperationDefinition(i){n.push(i)}}),{variableToType:r,operations:n}}Us.getOperationASTFacts=SU;function kU(e,t){if(!!t)try{let r=(0,EU.parse)(t);return Object.assign(Object.assign({},SU(r,e)),{documentAST:r})}catch(r){return}}Us.default=kU;Us.getQueryFacts=kU});var Hp=G(Lt=>{"use strict";var Bee=Lt&&Lt.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Lt,"__esModule",{value:!0});Lt.getQueryFacts=Lt.getOperationASTFacts=Lt.getOperationFacts=Lt.collectVariables=Lt.validateWithCustomRules=Lt.offsetToPosition=Lt.locToRange=Lt.Range=Lt.Position=Lt.pointToOffset=Lt.getASTNodeAtPosition=Lt.getVariablesJSONSchema=Lt.getFragmentDependenciesForAST=Lt.getFragmentDependencies=void 0;var wU=gU();Object.defineProperty(Lt,"getFragmentDependencies",{enumerable:!0,get:function(){return wU.getFragmentDependencies}});Object.defineProperty(Lt,"getFragmentDependenciesForAST",{enumerable:!0,get:function(){return wU.getFragmentDependenciesForAST}});var Kee=mU();Object.defineProperty(Lt,"getVariablesJSONSchema",{enumerable:!0,get:function(){return Kee.getVariablesJSONSchema}});var NU=bU();Object.defineProperty(Lt,"getASTNodeAtPosition",{enumerable:!0,get:function(){return NU.getASTNodeAtPosition}});Object.defineProperty(Lt,"pointToOffset",{enumerable:!0,get:function(){return NU.pointToOffset}});var ly=TU();Object.defineProperty(Lt,"Position",{enumerable:!0,get:function(){return ly.Position}});Object.defineProperty(Lt,"Range",{enumerable:!0,get:function(){return ly.Range}});Object.defineProperty(Lt,"locToRange",{enumerable:!0,get:function(){return ly.locToRange}});Object.defineProperty(Lt,"offsetToPosition",{enumerable:!0,get:function(){return ly.offsetToPosition}});var Hee=_U();Object.defineProperty(Lt,"validateWithCustomRules",{enumerable:!0,get:function(){return Hee.validateWithCustomRules}});var zee=ow();Object.defineProperty(Lt,"collectVariables",{enumerable:!0,get:function(){return zee.collectVariables}});var uw=OU();Object.defineProperty(Lt,"getOperationFacts",{enumerable:!0,get:function(){return Bee(uw).default}});Object.defineProperty(Lt,"getOperationASTFacts",{enumerable:!0,get:function(){return uw.getOperationASTFacts}});Object.defineProperty(Lt,"getQueryFacts",{enumerable:!0,get:function(){return uw.getQueryFacts}})});var CU=G(On=>{"use strict";var sw=On&&On.__awaiter||function(e,t,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function l(v){try{h(n.next(v))}catch(y){s(y)}}function d(v){try{h(n.throw(v))}catch(y){s(y)}}function h(v){v.done?o(v.value):i(v.value).then(l,d)}h((n=n.apply(e,t||[])).next())})};Object.defineProperty(On,"__esModule",{value:!0});On.getDefinitionQueryResultForDefinitionNode=On.getDefinitionQueryResultForFragmentSpread=On.getDefinitionQueryResultForField=On.getDefinitionQueryResultForNamedType=On.LANGUAGE=void 0;var DU=Hp();On.LANGUAGE="GraphQL";function cy(e,t){if(!e)throw new Error(t)}function Uc(e,t){let r=t.loc;return cy(r,"Expected ASTNode to have a location."),(0,DU.locToRange)(e,r)}function lw(e,t){let r=t.loc;return cy(r,"Expected ASTNode to have a location."),(0,DU.offsetToPosition)(e,r.start)}function Wee(e,t,r){return sw(this,void 0,void 0,function*(){let n=t.name.value,i=r.filter(({definition:s})=>s.name&&s.name.value===n);if(i.length===0)throw Error(`Definition not found for GraphQL type ${n}`);let o=i.map(({filePath:s,content:l,definition:d})=>Zee(s||"",l,d));return{definitions:o,queryRange:o.map(s=>Uc(e,t))}})}On.getDefinitionQueryResultForNamedType=Wee;function Yee(e,t,r){return sw(this,void 0,void 0,function*(){let n=r.filter(({definition:o})=>o.name&&o.name.value===t);if(n.length===0)throw Error(`Definition not found for GraphQL type ${t}`);let i=[];return n.forEach(({filePath:o,content:s,definition:l})=>{var d;let h=(d=l.fields)===null||d===void 0?void 0:d.find(v=>v.name.value===e);if(h==null)return null;i.push($ee(o||"",s,h))}),{definitions:i,queryRange:[]}})}On.getDefinitionQueryResultForField=Yee;function Jee(e,t,r){return sw(this,void 0,void 0,function*(){let n=t.name.value,i=r.filter(({definition:s})=>s.name.value===n);if(i.length===0)throw Error(`Definition not found for GraphQL fragment ${n}`);let o=i.map(({filePath:s,content:l,definition:d})=>xU(s||"",l,d));return{definitions:o,queryRange:o.map(s=>Uc(e,t))}})}On.getDefinitionQueryResultForFragmentSpread=Jee;function Xee(e,t,r){return{definitions:[xU(e,t,r)],queryRange:r.name?[Uc(t,r.name)]:[]}}On.getDefinitionQueryResultForDefinitionNode=Xee;function xU(e,t,r){let n=r.name;if(!n)throw Error("Expected ASTNode to have a Name.");return{path:e,position:lw(t,r),range:Uc(t,r),name:n.value||"",language:On.LANGUAGE,projectRoot:e}}function Zee(e,t,r){let n=r.name;return cy(n,"Expected ASTNode to have a Name."),{path:e,position:lw(t,r),range:Uc(t,r),name:n.value||"",language:On.LANGUAGE,projectRoot:e}}function $ee(e,t,r){let n=r.name;return cy(n,"Expected ASTNode to have a Name."),{path:e,position:lw(t,r),range:Uc(t,r),name:n.value||"",language:On.LANGUAGE,projectRoot:e}}});var PU=G(rn=>{"use strict";Object.defineProperty(rn,"__esModule",{value:!0});rn.getRange=rn.validateQuery=rn.getDiagnostics=rn.DIAGNOSTIC_SEVERITY=rn.SEVERITY=void 0;var fy=ht(),ete=ht(),LU=ay(),Gs=Hp();rn.SEVERITY={Error:"Error",Warning:"Warning",Information:"Information",Hint:"Hint"};rn.DIAGNOSTIC_SEVERITY={[rn.SEVERITY.Error]:1,[rn.SEVERITY.Warning]:2,[rn.SEVERITY.Information]:3,[rn.SEVERITY.Hint]:4};var dy=(e,t)=>{if(!e)throw new Error(t)};function tte(e,t=null,r,n,i){var o,s;let l=null;i&&(typeof i=="string"?e+=` - -`+i:e+=` - -`+i.reduce((d,h)=>(d+=(0,fy.print)(h)+` - -`,d),""));try{l=(0,ete.parse)(e)}catch(d){if(d instanceof fy.GraphQLError){let h=jU((s=(o=d.locations)===null||o===void 0?void 0:o[0])!==null&&s!==void 0?s:{line:0,column:0},e);return[{severity:rn.DIAGNOSTIC_SEVERITY.Error,message:d.message,source:"GraphQL: Syntax",range:h}]}throw d}return IU(l,t,r,n)}rn.getDiagnostics=tte;function IU(e,t=null,r,n){if(!t)return[];let i=AU((0,Gs.validateWithCustomRules)(t,e,r,n),s=>RU(s,rn.DIAGNOSTIC_SEVERITY.Error,"Validation")),o=AU((0,fy.validate)(t,e,[fy.NoDeprecatedCustomRule]),s=>RU(s,rn.DIAGNOSTIC_SEVERITY.Warning,"Deprecation"));return i.concat(o)}rn.validateQuery=IU;function AU(e,t){return Array.prototype.concat.apply([],e.map(t))}function RU(e,t,r){if(!e.nodes)return[];let n=[];return e.nodes.forEach(i=>{let o=i.kind!=="Variable"&&"name"in i&&i.name!==void 0?i.name:"variable"in i&&i.variable!==void 0?i.variable:i;if(o){dy(e.locations,"GraphQL validation error requires locations.");let s=e.locations[0],l=rte(o),d=s.column+(l.end-l.start);n.push({source:`GraphQL: ${r}`,message:e.message,severity:t,range:new Gs.Range(new Gs.Position(s.line-1,s.column-1),new Gs.Position(s.line-1,d))})}}),n}function jU(e,t){let r=(0,LU.onlineParser)(),n=r.startState(),i=t.split(` -`);dy(i.length>=e.line,"Query text must have more lines than where the error happened");let o=null;for(let h=0;h{"use strict";Object.defineProperty(py,"__esModule",{value:!0});py.getOutline=void 0;var cw=ht(),FU=Hp(),{INLINE_FRAGMENT:nte}=cw.Kind;function ite(e){let t;try{t=(0,cw.parse)(e)}catch(i){return null}let r=ate(e);return{outlineTrees:(0,cw.visit)(t,{leave(i){return r!==void 0&&i.kind in r?r[i.kind](i):null}})}}py.getOutline=ite;function ate(e){let t=r=>({representativeName:r.name,startPosition:(0,FU.offsetToPosition)(e,r.loc.start),endPosition:(0,FU.offsetToPosition)(e,r.loc.end),kind:r.kind,children:r.selectionSet||r.fields||r.values||r.arguments||[]});return{Field:r=>{let n=r.alias?[rr("plain",r.alias),rr("plain",": ")]:[];return n.push(rr("plain",r.name)),Object.assign({tokenizedText:n},t(r))},OperationDefinition:r=>Object.assign({tokenizedText:[rr("keyword",r.operation),rr("whitespace"," "),rr("class-name",r.name)]},t(r)),Document:r=>r.definitions,SelectionSet:r=>ote(r.selections,n=>n.kind===nte?n.selectionSet:n),Name:r=>r.value,FragmentDefinition:r=>Object.assign({tokenizedText:[rr("keyword","fragment"),rr("whitespace"," "),rr("class-name",r.name)]},t(r)),InterfaceTypeDefinition:r=>Object.assign({tokenizedText:[rr("keyword","interface"),rr("whitespace"," "),rr("class-name",r.name)]},t(r)),EnumTypeDefinition:r=>Object.assign({tokenizedText:[rr("keyword","enum"),rr("whitespace"," "),rr("class-name",r.name)]},t(r)),EnumValueDefinition:r=>Object.assign({tokenizedText:[rr("plain",r.name)]},t(r)),ObjectTypeDefinition:r=>Object.assign({tokenizedText:[rr("keyword","type"),rr("whitespace"," "),rr("class-name",r.name)]},t(r)),InputObjectTypeDefinition:r=>Object.assign({tokenizedText:[rr("keyword","input"),rr("whitespace"," "),rr("class-name",r.name)]},t(r)),FragmentSpread:r=>Object.assign({tokenizedText:[rr("plain","..."),rr("class-name",r.name)]},t(r)),InputValueDefinition:r=>Object.assign({tokenizedText:[rr("plain",r.name)]},t(r)),FieldDefinition:r=>Object.assign({tokenizedText:[rr("plain",r.name)]},t(r)),InlineFragment:r=>r.selectionSet}}function rr(e,t){return{kind:e,value:t}}function ote(e,t){let r=[];for(let n=0;n{"use strict";Object.defineProperty(hy,"__esModule",{value:!0});hy.getHoverInformation=void 0;var qU=ht(),VU=ew();function ute(e,t,r,n,i){let o=n||(0,VU.getTokenAtPosition)(t,r);if(!e||!o||!o.state)return"";let s=o.state,l=s.kind,d=s.step,h=(0,VU.getTypeInfo)(e,o.state),v=Object.assign(Object.assign({},i),{schema:e});if(l==="Field"&&d===0&&h.fieldDef||l==="AliasedField"&&d===2&&h.fieldDef){let y=[];return zp(y,v),ste(y,h,v),Wp(y,v),Yp(y,v,h.fieldDef),y.join("").trim()}else if(l==="Directive"&&d===1&&h.directiveDef){let y=[];return zp(y,v),GU(y,h,v),Wp(y,v),Yp(y,v,h.directiveDef),y.join("").trim()}else if(l==="Argument"&&d===0&&h.argDef){let y=[];return zp(y,v),lte(y,h,v),Wp(y,v),Yp(y,v,h.argDef),y.join("").trim()}else if(l==="EnumValue"&&h.enumValue&&"description"in h.enumValue){let y=[];return zp(y,v),cte(y,h,v),Wp(y,v),Yp(y,v,h.enumValue),y.join("").trim()}else if(l==="NamedType"&&h.type&&"description"in h.type){let y=[];return zp(y,v),Gc(y,h,v,h.type),Wp(y,v),Yp(y,v,h.type),y.join("").trim()}return""}hy.getHoverInformation=ute;function zp(e,t){t.useMarkdown&&Ur(e,"```graphql\n")}function Wp(e,t){t.useMarkdown&&Ur(e,"\n```")}function ste(e,t,r){UU(e,t,r),QU(e,t,r,t.type)}function UU(e,t,r){if(!t.fieldDef)return;let n=t.fieldDef.name;n.slice(0,2)!=="__"&&(Gc(e,t,r,t.parentType),Ur(e,".")),Ur(e,n)}function GU(e,t,r){if(!t.directiveDef)return;let n="@"+t.directiveDef.name;Ur(e,n)}function lte(e,t,r){if(t.directiveDef?GU(e,t,r):t.fieldDef&&UU(e,t,r),!t.argDef)return;let n=t.argDef.name;Ur(e,"("),Ur(e,n),QU(e,t,r,t.inputType),Ur(e,")")}function QU(e,t,r,n){Ur(e,": "),Gc(e,t,r,n)}function cte(e,t,r){if(!t.enumValue)return;let n=t.enumValue.name;Gc(e,t,r,t.inputType),Ur(e,"."),Ur(e,n)}function Gc(e,t,r,n){!n||(n instanceof qU.GraphQLNonNull?(Gc(e,t,r,n.ofType),Ur(e,"!")):n instanceof qU.GraphQLList?(Ur(e,"["),Gc(e,t,r,n.ofType),Ur(e,"]")):Ur(e,n.name))}function Yp(e,t,r){if(!r)return;let n=typeof r.description=="string"?r.description:null;n&&(Ur(e,` - -`),Ur(e,n)),fte(e,t,r)}function fte(e,t,r){if(!r)return;let n=r.deprecationReason?r.deprecationReason:null;!n||(Ur(e,` - -`),Ur(e,"Deprecated: "),Ur(e,n))}function Ur(e,t){e.push(t)}});var KU=G(bi=>{"use strict";var dte=bi&&bi.__createBinding||(Object.create?function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]}),vy=bi&&bi.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&dte(t,e,r)};Object.defineProperty(bi,"__esModule",{value:!0});bi.getHoverInformation=bi.getOutline=void 0;vy(QO(),bi);vy(ew(),bi);vy(CU(),bi);vy(PU(),bi);var pte=MU();Object.defineProperty(bi,"getOutline",{enumerable:!0,get:function(){return pte.getOutline}});var hte=BU();Object.defineProperty(bi,"getHoverInformation",{enumerable:!0,get:function(){return hte.getHoverInformation}})});var HU=G(Qs=>{"use strict";Object.defineProperty(Qs,"__esModule",{value:!0});Qs.CompletionItemKind=Qs.FileChangeTypeKind=void 0;Qs.FileChangeTypeKind={Created:1,Changed:2,Deleted:3};var vte;(function(e){e.Text=1,e.Method=2,e.Function=3,e.Constructor=4,e.Field=5,e.Variable=6,e.Class=7,e.Interface=8,e.Module=9,e.Property=10,e.Unit=11,e.Value=12,e.Enum=13,e.Keyword=14,e.Snippet=15,e.Color=16,e.File=17,e.Reference=18,e.Folder=19,e.EnumMember=20,e.Constant=21,e.Struct=22,e.Event=23,e.Operator=24,e.TypeParameter=25})(vte=Qs.CompletionItemKind||(Qs.CompletionItemKind={}))});var Qc=G(ve=>{"use strict";Object.defineProperty(ve,"__esModule",{value:!0});ve.Range=ve.validateWithCustomRules=ve.collectVariables=ve.Position=ve.pointToOffset=ve.offsetToPosition=ve.getVariablesJSONSchema=ve.getQueryFacts=ve.getOperationFacts=ve.getOperationASTFacts=ve.getFragmentDependenciesForAST=ve.getFragmentDependencies=ve.getASTNodeAtPosition=ve.FileChangeTypeKind=ve.CompletionItemKind=ve.opt=ve.t=ve.list=ve.p=ve.isIgnored=ve.LexRules=ve.RuleKinds=ve.CharacterStream=ve.ParseRules=ve.onlineParser=ve.validateQuery=ve.SuggestionCommand=ve.canUseDirective=ve.DIAGNOSTIC_SEVERITY=ve.SEVERITY=ve.getVariableCompletions=ve.getTypeInfo=ve.getTokenAtPosition=ve.getRange=ve.getOutline=ve.getHoverInformation=ve.getFragmentDefinitions=ve.getFieldDef=ve.getDiagnostics=ve.getDefinitionState=ve.getDefinitionQueryResultForField=ve.getDefinitionQueryResultForNamedType=ve.getDefinitionQueryResultForFragmentSpread=ve.getDefinitionQueryResultForDefinitionNode=ve.getAutocompleteSuggestions=void 0;var Gr=KU();Object.defineProperty(ve,"getAutocompleteSuggestions",{enumerable:!0,get:function(){return Gr.getAutocompleteSuggestions}});Object.defineProperty(ve,"getDefinitionQueryResultForDefinitionNode",{enumerable:!0,get:function(){return Gr.getDefinitionQueryResultForDefinitionNode}});Object.defineProperty(ve,"getDefinitionQueryResultForFragmentSpread",{enumerable:!0,get:function(){return Gr.getDefinitionQueryResultForFragmentSpread}});Object.defineProperty(ve,"getDefinitionQueryResultForNamedType",{enumerable:!0,get:function(){return Gr.getDefinitionQueryResultForNamedType}});Object.defineProperty(ve,"getDefinitionQueryResultForField",{enumerable:!0,get:function(){return Gr.getDefinitionQueryResultForField}});Object.defineProperty(ve,"getDefinitionState",{enumerable:!0,get:function(){return Gr.getDefinitionState}});Object.defineProperty(ve,"getDiagnostics",{enumerable:!0,get:function(){return Gr.getDiagnostics}});Object.defineProperty(ve,"getFieldDef",{enumerable:!0,get:function(){return Gr.getFieldDef}});Object.defineProperty(ve,"getFragmentDefinitions",{enumerable:!0,get:function(){return Gr.getFragmentDefinitions}});Object.defineProperty(ve,"getHoverInformation",{enumerable:!0,get:function(){return Gr.getHoverInformation}});Object.defineProperty(ve,"getOutline",{enumerable:!0,get:function(){return Gr.getOutline}});Object.defineProperty(ve,"getRange",{enumerable:!0,get:function(){return Gr.getRange}});Object.defineProperty(ve,"getTokenAtPosition",{enumerable:!0,get:function(){return Gr.getTokenAtPosition}});Object.defineProperty(ve,"getTypeInfo",{enumerable:!0,get:function(){return Gr.getTypeInfo}});Object.defineProperty(ve,"getVariableCompletions",{enumerable:!0,get:function(){return Gr.getVariableCompletions}});Object.defineProperty(ve,"SEVERITY",{enumerable:!0,get:function(){return Gr.SEVERITY}});Object.defineProperty(ve,"DIAGNOSTIC_SEVERITY",{enumerable:!0,get:function(){return Gr.DIAGNOSTIC_SEVERITY}});Object.defineProperty(ve,"canUseDirective",{enumerable:!0,get:function(){return Gr.canUseDirective}});Object.defineProperty(ve,"SuggestionCommand",{enumerable:!0,get:function(){return Gr.SuggestionCommand}});Object.defineProperty(ve,"validateQuery",{enumerable:!0,get:function(){return Gr.validateQuery}});var eo=ay();Object.defineProperty(ve,"onlineParser",{enumerable:!0,get:function(){return eo.onlineParser}});Object.defineProperty(ve,"ParseRules",{enumerable:!0,get:function(){return eo.ParseRules}});Object.defineProperty(ve,"CharacterStream",{enumerable:!0,get:function(){return eo.CharacterStream}});Object.defineProperty(ve,"RuleKinds",{enumerable:!0,get:function(){return eo.RuleKinds}});Object.defineProperty(ve,"LexRules",{enumerable:!0,get:function(){return eo.LexRules}});Object.defineProperty(ve,"isIgnored",{enumerable:!0,get:function(){return eo.isIgnored}});Object.defineProperty(ve,"p",{enumerable:!0,get:function(){return eo.p}});Object.defineProperty(ve,"list",{enumerable:!0,get:function(){return eo.list}});Object.defineProperty(ve,"t",{enumerable:!0,get:function(){return eo.t}});Object.defineProperty(ve,"opt",{enumerable:!0,get:function(){return eo.opt}});var zU=HU();Object.defineProperty(ve,"CompletionItemKind",{enumerable:!0,get:function(){return zU.CompletionItemKind}});Object.defineProperty(ve,"FileChangeTypeKind",{enumerable:!0,get:function(){return zU.FileChangeTypeKind}});var Ii=Hp();Object.defineProperty(ve,"getASTNodeAtPosition",{enumerable:!0,get:function(){return Ii.getASTNodeAtPosition}});Object.defineProperty(ve,"getFragmentDependencies",{enumerable:!0,get:function(){return Ii.getFragmentDependencies}});Object.defineProperty(ve,"getFragmentDependenciesForAST",{enumerable:!0,get:function(){return Ii.getFragmentDependenciesForAST}});Object.defineProperty(ve,"getOperationASTFacts",{enumerable:!0,get:function(){return Ii.getOperationASTFacts}});Object.defineProperty(ve,"getOperationFacts",{enumerable:!0,get:function(){return Ii.getOperationFacts}});Object.defineProperty(ve,"getQueryFacts",{enumerable:!0,get:function(){return Ii.getQueryFacts}});Object.defineProperty(ve,"getVariablesJSONSchema",{enumerable:!0,get:function(){return Ii.getVariablesJSONSchema}});Object.defineProperty(ve,"offsetToPosition",{enumerable:!0,get:function(){return Ii.offsetToPosition}});Object.defineProperty(ve,"pointToOffset",{enumerable:!0,get:function(){return Ii.pointToOffset}});Object.defineProperty(ve,"Position",{enumerable:!0,get:function(){return Ii.Position}});Object.defineProperty(ve,"collectVariables",{enumerable:!0,get:function(){return Ii.collectVariables}});Object.defineProperty(ve,"validateWithCustomRules",{enumerable:!0,get:function(){return Ii.validateWithCustomRules}});Object.defineProperty(ve,"Range",{enumerable:!0,get:function(){return Ii.Range}})});var YU=G(my=>{"use strict";var gte=my&&my.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(my,"__esModule",{value:!0});var gy=gte(Wt());jO();var WU=Qc();gy.default.registerHelper("hint","graphql",function(e,t){var r=t.schema;if(!!r){var n=e.getCursor(),i=e.getTokenAt(n),o=i.type!==null&&/"|\w/.test(i.string[0])?i.start:i.end,s=new WU.Position(n.line,o),l=(0,WU.getAutocompleteSuggestions)(r,e.getValue(),s,i,t.externalFragments),d={list:l.map(function(h){return{text:h.label,type:h.type,description:h.documentation,isDeprecated:h.isDeprecated,deprecationReason:h.deprecationReason}}),from:{line:n.line,ch:o},to:{line:n.line,ch:i.end}};return(d==null?void 0:d.list)&&d.list.length>0&&(d.from=gy.default.Pos(d.from.line,d.from.ch),d.to=gy.default.Pos(d.to.line,d.to.ch),gy.default.signal(e,"hasCompletion",e,d,i)),d}})});var XU=G(yy=>{"use strict";var mte=yy&&yy.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(yy,"__esModule",{value:!0});var fw=mte(Wt()),yte=Qc(),JU=["error","warning","information","hint"],bte={"GraphQL: Validation":"validation","GraphQL: Deprecation":"deprecation","GraphQL: Syntax":"syntax"};fw.default.registerHelper("lint","graphql",function(e,t){var r=t.schema,n=(0,yte.getDiagnostics)(e,r,t.validationRules,void 0,t.externalFragments),i=n.map(function(o){return{message:o.message,severity:o.severity?JU[o.severity-1]:JU[0],type:o.source?bte[o.source]:void 0,from:fw.default.Pos(o.range.start.line,o.range.start.character),to:fw.default.Pos(o.range.end.line,o.range.end.character)}});return i})});var pw=G(dw=>{"use strict";Object.defineProperty(dw,"__esModule",{value:!0});function Tte(e,t){for(var r=[],n=e;n==null?void 0:n.kind;)r.push(n),n=n.prevState;for(var i=r.length-1;i>=0;i--)t(r[i])}dw.default=Tte});var hw=G(Jp=>{"use strict";var _te=Jp&&Jp.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Jp,"__esModule",{value:!0});var Fu=ht(),Bc=vi(),Ete=_te(pw());function Ste(e,t){var r={schema:e,type:null,parentType:null,inputType:null,directiveDef:null,fieldDef:null,argDef:null,argDefs:null,objectFieldDefs:null};return(0,Ete.default)(t,function(n){var i,o;switch(n.kind){case"Query":case"ShortQuery":r.type=e.getQueryType();break;case"Mutation":r.type=e.getMutationType();break;case"Subscription":r.type=e.getSubscriptionType();break;case"InlineFragment":case"FragmentDefinition":n.type&&(r.type=e.getType(n.type));break;case"Field":case"AliasedField":r.fieldDef=r.type&&n.name?ZU(e,r.parentType,n.name):null,r.type=(i=r.fieldDef)===null||i===void 0?void 0:i.type;break;case"SelectionSet":r.parentType=r.type?(0,Fu.getNamedType)(r.type):null;break;case"Directive":r.directiveDef=n.name?e.getDirective(n.name):null;break;case"Arguments":var s=n.prevState?n.prevState.kind==="Field"?r.fieldDef:n.prevState.kind==="Directive"?r.directiveDef:n.prevState.kind==="AliasedField"?n.prevState.name&&ZU(e,r.parentType,n.prevState.name):null:null;r.argDefs=s?s.args:null;break;case"Argument":if(r.argDef=null,r.argDefs){for(var l=0;l{"use strict";Object.defineProperty(ra,"__esModule",{value:!0});ra.getTypeReference=ra.getEnumValueReference=ra.getArgumentReference=ra.getDirectiveReference=ra.getFieldReference=void 0;var Ote=ht();function wte(e){return{kind:"Field",schema:e.schema,field:e.fieldDef,type:$U(e.fieldDef)?null:e.parentType}}ra.getFieldReference=wte;function Nte(e){return{kind:"Directive",schema:e.schema,directive:e.directiveDef}}ra.getDirectiveReference=Nte;function Dte(e){return e.directiveDef?{kind:"Argument",schema:e.schema,argument:e.argDef,directive:e.directiveDef}:{kind:"Argument",schema:e.schema,argument:e.argDef,field:e.fieldDef,type:$U(e.fieldDef)?null:e.parentType}}ra.getArgumentReference=Dte;function xte(e){return{kind:"EnumValue",value:e.enumValue||void 0,type:e.inputType?(0,Ote.getNamedType)(e.inputType):void 0}}ra.getEnumValueReference=xte;function Cte(e,t){return{kind:"Type",schema:e.schema,type:t||e.type}}ra.getTypeReference=Cte;function $U(e){return e.name.slice(0,2)==="__"}});var gw=G(by=>{"use strict";var Lte=by&&by.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(by,"__esModule",{value:!0});var Gn=Lte(Wt());Gn.default.defineOption("info",!1,function(e,t,r){if(r&&r!==Gn.default.Init){var n=e.state.info.onMouseOver;Gn.default.off(e.getWrapperElement(),"mouseover",n),clearTimeout(e.state.info.hoverTimeout),delete e.state.info}if(t){var i=e.state.info=Ite(t);i.onMouseOver=Rte.bind(null,e),Gn.default.on(e.getWrapperElement(),"mouseover",i.onMouseOver)}});function Ite(e){return{options:e instanceof Function?{render:e}:e===!0?{}:e}}function Ate(e){var t=e.state.info.options;return(t==null?void 0:t.hoverTime)||500}function Rte(e,t){var r=e.state.info,n=t.target||t.srcElement;if(n instanceof HTMLElement&&!(n.nodeName!=="SPAN"||r.hoverTimeout!==void 0)){var i=n.getBoundingClientRect(),o=function(){clearTimeout(r.hoverTimeout),r.hoverTimeout=setTimeout(l,d)},s=function(){Gn.default.off(document,"mousemove",o),Gn.default.off(e.getWrapperElement(),"mouseout",s),clearTimeout(r.hoverTimeout),r.hoverTimeout=void 0},l=function(){Gn.default.off(document,"mousemove",o),Gn.default.off(e.getWrapperElement(),"mouseout",s),r.hoverTimeout=void 0,jte(e,i)},d=Ate(e);r.hoverTimeout=setTimeout(l,d),Gn.default.on(document,"mousemove",o),Gn.default.on(e.getWrapperElement(),"mouseout",s)}}function jte(e,t){var r=e.coordsChar({left:(t.left+t.right)/2,top:(t.top+t.bottom)/2}),n=e.state.info,i=n.options,o=i.render||e.getHelper(r,"info");if(o){var s=e.getTokenAt(r,!0);if(s){var l=o(s,i,e,r);l&&Pte(e,t,l)}}}function Pte(e,t,r){var n=document.createElement("div");n.className="CodeMirror-info",n.appendChild(r),document.body.appendChild(n);var i=n.getBoundingClientRect(),o=window.getComputedStyle(n),s=i.right-i.left+parseFloat(o.marginLeft)+parseFloat(o.marginRight),l=i.bottom-i.top+parseFloat(o.marginTop)+parseFloat(o.marginBottom),d=t.bottom;l>window.innerHeight-t.bottom-15&&t.top>window.innerHeight-t.bottom&&(d=t.top-l),d<0&&(d=t.bottom);var h=Math.max(0,window.innerWidth-s-15);h>t.left&&(h=t.left),n.style.opacity="1",n.style.top=d+"px",n.style.left=h+"px";var v,y=function(){clearTimeout(v)},b=function(){clearTimeout(v),v=setTimeout(D,200)},D=function(){Gn.default.off(n,"mouseover",y),Gn.default.off(n,"mouseout",b),Gn.default.off(e.getWrapperElement(),"mouseout",b),n.style.opacity?(n.style.opacity="0",setTimeout(function(){n.parentNode&&n.parentNode.removeChild(n)},600)):n.parentNode&&n.parentNode.removeChild(n)};Gn.default.on(n,"mouseover",y),Gn.default.on(n,"mouseout",b),Gn.default.on(e.getWrapperElement(),"mouseout",b)}});var aG=G(Ty=>{"use strict";var eG=Ty&&Ty.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Ty,"__esModule",{value:!0});var tG=ht(),Fte=eG(Wt()),Mte=eG(hw()),Xp=vw();gw();Fte.default.registerHelper("info","graphql",function(e,t){if(!(!t.schema||!e.state)){var r=e.state,n=r.kind,i=r.step,o=(0,Mte.default)(t.schema,e.state);if(n==="Field"&&i===0&&o.fieldDef||n==="AliasedField"&&i===2&&o.fieldDef){var s=document.createElement("div");return qte(s,o,t),Zp(s,t,o.fieldDef),s}else if(n==="Directive"&&i===1&&o.directiveDef){var s=document.createElement("div");return nG(s,o,t),Zp(s,t,o.directiveDef),s}else if(n==="Argument"&&i===0&&o.argDef){var s=document.createElement("div");return Vte(s,o,t),Zp(s,t,o.argDef),s}else if(n==="EnumValue"&&o.enumValue&&o.enumValue.description){var s=document.createElement("div");return Ute(s,o,t),Zp(s,t,o.enumValue),s}else if(n==="NamedType"&&o.type&&o.type.description){var s=document.createElement("div");return Kc(s,o,t,o.type),Zp(s,t,o.type),s}}});function qte(e,t,r){rG(e,t,r),iG(e,t,r,t.type)}function rG(e,t,r){var n,i=((n=t.fieldDef)===null||n===void 0?void 0:n.name)||"";i.slice(0,2)!=="__"&&(Kc(e,t,r,t.parentType),Ai(e,".")),Ai(e,i,"field-name",r,(0,Xp.getFieldReference)(t))}function nG(e,t,r){var n,i="@"+(((n=t.directiveDef)===null||n===void 0?void 0:n.name)||"");Ai(e,i,"directive-name",r,(0,Xp.getDirectiveReference)(t))}function Vte(e,t,r){var n;t.directiveDef?nG(e,t,r):t.fieldDef&&rG(e,t,r);var i=((n=t.argDef)===null||n===void 0?void 0:n.name)||"";Ai(e,"("),Ai(e,i,"arg-name",r,(0,Xp.getArgumentReference)(t)),iG(e,t,r,t.inputType),Ai(e,")")}function iG(e,t,r,n){Ai(e,": "),Kc(e,t,r,n)}function Ute(e,t,r){var n,i=((n=t.enumValue)===null||n===void 0?void 0:n.name)||"";Kc(e,t,r,t.inputType),Ai(e,"."),Ai(e,i,"enum-value",r,(0,Xp.getEnumValueReference)(t))}function Kc(e,t,r,n){n instanceof tG.GraphQLNonNull?(Kc(e,t,r,n.ofType),Ai(e,"!")):n instanceof tG.GraphQLList?(Ai(e,"["),Kc(e,t,r,n.ofType),Ai(e,"]")):Ai(e,(n==null?void 0:n.name)||"","type-name",r,(0,Xp.getTypeReference)(t,n))}function Zp(e,t,r){var n=r.description;if(n){var i=document.createElement("div");i.className="info-description",t.renderDescription?i.innerHTML=t.renderDescription(n):i.appendChild(document.createTextNode(n)),e.appendChild(i)}Gte(e,t,r)}function Gte(e,t,r){var n=r.deprecationReason;if(n){var i=document.createElement("div");i.className="info-deprecation",t.renderDescription?i.innerHTML=t.renderDescription(n):i.appendChild(document.createTextNode(n));var o=document.createElement("span");o.className="info-deprecation-label",o.appendChild(document.createTextNode("Deprecated: ")),i.insertBefore(o,i.firstChild),e.appendChild(i)}}function Ai(e,t,r,n,i){if(r===void 0&&(r=""),n===void 0&&(n={onClick:null}),i===void 0&&(i=null),r){var o=n.onClick,s=void 0;o?(s=document.createElement("a"),s.href="javascript:void 0",s.addEventListener("click",function(l){o(i,l)})):s=document.createElement("span"),s.className=r,s.appendChild(document.createTextNode(t)),e.appendChild(s)}else e.appendChild(document.createTextNode(t))}});var sG=G(_y=>{"use strict";var Qte=_y&&_y.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(_y,"__esModule",{value:!0});var na=Qte(Wt());na.default.defineOption("jump",!1,function(e,t,r){if(r&&r!==na.default.Init){var n=e.state.jump.onMouseOver;na.default.off(e.getWrapperElement(),"mouseover",n);var i=e.state.jump.onMouseOut;na.default.off(e.getWrapperElement(),"mouseout",i),na.default.off(document,"keydown",e.state.jump.onKeyDown),delete e.state.jump}if(t){var o=e.state.jump={options:t,onMouseOver:Bte.bind(null,e),onMouseOut:Kte.bind(null,e),onKeyDown:Hte.bind(null,e)};na.default.on(e.getWrapperElement(),"mouseover",o.onMouseOver),na.default.on(e.getWrapperElement(),"mouseout",o.onMouseOut),na.default.on(document,"keydown",o.onKeyDown)}});function Bte(e,t){var r=t.target||t.srcElement;if(r instanceof HTMLElement&&(r==null?void 0:r.nodeName)==="SPAN"){var n=r.getBoundingClientRect(),i={left:(n.left+n.right)/2,top:(n.top+n.bottom)/2};e.state.jump.cursor=i,e.state.jump.isHoldingModifier&&oG(e)}}function Kte(e){if(!e.state.jump.isHoldingModifier&&e.state.jump.cursor){e.state.jump.cursor=null;return}e.state.jump.isHoldingModifier&&e.state.jump.marker&&uG(e)}function Hte(e,t){if(!(e.state.jump.isHoldingModifier||!Wte(t.key))){e.state.jump.isHoldingModifier=!0,e.state.jump.cursor&&oG(e);var r=function(o){o.code===t.code&&(e.state.jump.isHoldingModifier=!1,e.state.jump.marker&&uG(e),na.default.off(document,"keyup",r),na.default.off(document,"click",n),e.off("mousedown",i))},n=function(o){var s=e.state.jump.destination;s&&e.state.jump.options.onClick(s,o)},i=function(o,s){e.state.jump.destination&&(s.codemirrorIgnore=!0)};na.default.on(document,"keyup",r),na.default.on(document,"click",n),e.on("mousedown",i)}}var zte=typeof navigator!="undefined"&&navigator&&navigator.appVersion.indexOf("Mac")!==-1;function Wte(e){return e===(zte?"Meta":"Control")}function oG(e){if(!e.state.jump.marker){var t=e.state.jump.cursor,r=e.coordsChar(t),n=e.getTokenAt(r,!0),i=e.state.jump.options,o=i.getDestination||e.getHelper(r,"jump");if(o){var s=o(n,i,e);if(s){var l=e.markText({line:r.line,ch:n.start},{line:r.line,ch:n.end},{className:"CodeMirror-jump-token"});e.state.jump.marker=l,e.state.jump.destination=s}}}}function uG(e){var t=e.state.jump.marker;e.state.jump.marker=null,e.state.jump.destination=null,t.clear()}});var cG=G(Ey=>{"use strict";var lG=Ey&&Ey.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Ey,"__esModule",{value:!0});var Yte=lG(Wt()),Jte=lG(hw()),$p=vw();sG();Yte.default.registerHelper("jump","graphql",function(e,t){if(!(!t.schema||!t.onClick||!e.state)){var r=e.state,n=r.kind,i=r.step,o=(0,Jte.default)(t.schema,r);if(n==="Field"&&i===0&&o.fieldDef||n==="AliasedField"&&i===2&&o.fieldDef)return(0,$p.getFieldReference)(o);if(n==="Directive"&&i===1&&o.directiveDef)return(0,$p.getDirectiveReference)(o);if(n==="Argument"&&i===0&&o.argDef)return(0,$p.getArgumentReference)(o);if(n==="EnumValue"&&o.enumValue)return(0,$p.getEnumValueReference)(o);if(n==="NamedType"&&o.type)return(0,$p.getTypeReference)(o)}})});var fG=G(mw=>{"use strict";Object.defineProperty(mw,"__esModule",{value:!0});function Xte(e,t){var r,n,i=e.levels,o=!i||i.length===0?e.indentLevel:i[i.length-1]-(((r=this.electricInput)===null||r===void 0?void 0:r.test(t))?1:0);return(o||0)*(((n=this.config)===null||n===void 0?void 0:n.indentUnit)||0)}mw.default=Xte});var dG=G(eh=>{"use strict";var Zte=eh&&eh.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(eh,"__esModule",{value:!0});var Sy=Qc(),$te=Zte(fG()),ere=function(e){var t=(0,Sy.onlineParser)({eatWhitespace:function(r){return r.eatWhile(Sy.isIgnored)},lexRules:Sy.LexRules,parseRules:Sy.ParseRules,editorConfig:{tabSize:e.tabSize}});return{config:e,startState:t.startState,token:t.token,indent:$te.default,electricInput:/^\s*[})\]]/,fold:"brace",lineComment:"#",closeBrackets:{pairs:'()[]{}""',explode:"()[]{}"}}};eh.default=ere});var hG=G(ky=>{"use strict";var pG=ky&&ky.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(ky,"__esModule",{value:!0});var tre=pG(Wt()),rre=pG(dG());tre.default.defineMode("graphql",rre.default)});var mG=G(Tw=>{"use strict";Object.defineProperty(Tw,"__esModule",{value:!0});function sre(e,t,r){var n=lre(r,gG(t.string));if(!!n){var i=t.type!==null&&/"|\w/.test(t.string[0])?t.start:t.end;return{list:n,from:{line:e.line,ch:i},to:{line:e.line,ch:t.end}}}}Tw.default=sre;function lre(e,t){if(!t)return bw(e,function(o){return!o.isDeprecated});var r=e.map(function(o){return{proximity:cre(gG(o.text),t),entry:o}}),n=bw(bw(r,function(o){return o.proximity<=2}),function(o){return!o.entry.isDeprecated}),i=n.sort(function(o,s){return(o.entry.isDeprecated?1:0)-(s.entry.isDeprecated?1:0)||o.proximity-s.proximity||o.entry.text.length-s.entry.text.length});return i.map(function(o){return o.entry})}function bw(e,t){var r=e.filter(t);return r.length===0?e:r}function gG(e){return e.toLowerCase().replace(/\W/g,"")}function cre(e,t){var r=fre(t,e);return e.length>t.length&&(r-=e.length-t.length-1,r+=e.indexOf(t)===0?0:.5),r}function fre(e,t){var r,n,i=[],o=e.length,s=t.length;for(r=0;r<=o;r++)i[r]=[r];for(n=1;n<=s;n++)i[0][n]=n;for(r=1;r<=o;r++)for(n=1;n<=s;n++){var l=e[r-1]===t[n-1]?0:1;i[r][n]=Math.min(i[r-1][n]+1,i[r][n-1]+1,i[r-1][n-1]+l),r>1&&n>1&&e[r-1]===t[n-2]&&e[r-2]===t[n-1]&&(i[r][n]=Math.min(i[r][n],i[r-2][n-2]+l))}return i[o][s]}});var yG=G(Dy=>{"use strict";var _w=Dy&&Dy.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Dy,"__esModule",{value:!0});var Ny=_w(Wt()),to=ht(),dre=_w(pw()),Hc=_w(mG());Ny.default.registerHelper("hint","graphql-variables",function(e,t){var r=e.getCursor(),n=e.getTokenAt(r),i=pre(r,n,t);return(i==null?void 0:i.list)&&i.list.length>0&&(i.from=Ny.default.Pos(i.from.line,i.from.ch),i.to=Ny.default.Pos(i.to.line,i.to.ch),Ny.default.signal(e,"hasCompletion",e,i,n)),i});function pre(e,t,r){var n=t.state.kind==="Invalid"?t.state.prevState:t.state,i=n.kind,o=n.step;if(i==="Document"&&o===0)return(0,Hc.default)(e,t,[{text:"{"}]);var s=r.variableToType;if(!!s){var l=hre(s,t.state);if(i==="Document"||i==="Variable"&&o===0){var d=Object.keys(s);return(0,Hc.default)(e,t,d.map(function(b){return{text:'"'.concat(b,'": '),type:s[b]}}))}if((i==="ObjectValue"||i==="ObjectField"&&o===0)&&l.fields){var h=Object.keys(l.fields).map(function(b){return l.fields[b]});return(0,Hc.default)(e,t,h.map(function(b){return{text:'"'.concat(b.name,'": '),type:b.type,description:b.description}}))}if(i==="StringValue"||i==="NumberValue"||i==="BooleanValue"||i==="NullValue"||i==="ListValue"&&o===1||i==="ObjectField"&&o===2||i==="Variable"&&o===2){var v=l.type?(0,to.getNamedType)(l.type):void 0;if(v instanceof to.GraphQLInputObjectType)return(0,Hc.default)(e,t,[{text:"{"}]);if(v instanceof to.GraphQLEnumType){var y=v.getValues();return(0,Hc.default)(e,t,y.map(function(b){return{text:'"'.concat(b.name,'"'),type:v,description:b.description}}))}else if(v===to.GraphQLBoolean)return(0,Hc.default)(e,t,[{text:"true",type:to.GraphQLBoolean,description:"Not false."},{text:"false",type:to.GraphQLBoolean,description:"Not true."}])}}}function hre(e,t){var r={type:null,fields:null};return(0,dre.default)(t,function(n){if(n.kind==="Variable")r.type=e[n.name];else if(n.kind==="ListValue"){var i=r.type?(0,to.getNullableType)(r.type):void 0;r.type=i instanceof to.GraphQLList?i.ofType:null}else if(n.kind==="ObjectValue"){var o=r.type?(0,to.getNamedType)(r.type):void 0;r.fields=o instanceof to.GraphQLInputObjectType?o.getFields():null}else if(n.kind==="ObjectField"){var s=n.name&&r.fields?r.fields[n.name]:null;r.type=s==null?void 0:s.type}}),r}});var SG=G(Bs=>{"use strict";var vre=Bs&&Bs.__extends||function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(Bs,"__esModule",{value:!0});Bs.JSONSyntaxError=void 0;function gre(e){ro=e,xy=e.length,nn=Qn=th=-1,an(),Ly();var t=bG();return Mu("EOF"),t}Bs.default=gre;var ro,xy,nn,Qn,th,It,Ri;function bG(){var e=nn,t=[];if(Mu("{"),!Cy("}")){do t.push(mre());while(Cy(","));Mu("}")}return{kind:"Object",start:e,end:th,members:t}}function mre(){var e=nn,t=Ri==="String"?_G():null;Mu("String"),Mu(":");var r=TG();return{kind:"Member",start:e,end:th,key:t,value:r}}function yre(){var e=nn,t=[];if(Mu("["),!Cy("]")){do t.push(TG());while(Cy(","));Mu("]")}return{kind:"Array",start:e,end:th,values:t}}function TG(){switch(Ri){case"[":return yre();case"{":return bG();case"String":case"Number":case"Boolean":case"Null":var e=_G();return Ly(),e}Mu("Value")}function _G(){return{kind:Ri,start:nn,end:Qn,value:JSON.parse(ro.slice(nn,Qn))}}function Mu(e){if(Ri===e){Ly();return}var t;if(Ri==="EOF")t="[end of file]";else if(Qn-nn>1)t="`"+ro.slice(nn,Qn)+"`";else{var r=ro.slice(nn).match(/^.+?\b/);t="`"+(r?r[0]:ro[nn])+"`"}throw zc("Expected ".concat(e," but found ").concat(t,"."))}var EG=function(e){vre(t,e);function t(r,n){var i=e.call(this,r)||this;return i.position=n,i}return t}(Error);Bs.JSONSyntaxError=EG;function zc(e){return new EG(e,{start:nn,end:Qn})}function Cy(e){if(Ri===e)return Ly(),!0}function an(){return Qn31;)if(It===92)switch(It=an(),It){case 34:case 47:case 92:case 98:case 102:case 110:case 114:case 116:an();break;case 117:an(),Iy(),Iy(),Iy(),Iy();break;default:throw zc("Bad character escape sequence.")}else{if(Qn===xy)throw zc("Unterminated string.");an()}if(It===34){an();return}throw zc("Unterminated string.")}function Iy(){if(It>=48&&It<=57||It>=65&&It<=70||It>=97&&It<=102)return an();throw zc("Expected hexadecimal digit.")}function Tre(){It===45&&an(),It===48?an():Ew(),It===46&&(an(),Ew()),(It===69||It===101)&&(It=an(),(It===43||It===45)&&an(),Ew())}function Ew(){if(It<48||It>57)throw zc("Expected decimal digit.");do an();while(It>=48&&It<=57)}});var wG=G(ia=>{"use strict";var _re=ia&&ia.__createBinding||(Object.create?function(e,t,r,n){n===void 0&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]}),Ere=ia&&ia.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),Sre=ia&&ia.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)r!=="default"&&Object.prototype.hasOwnProperty.call(e,r)&&_re(t,e,r);return Ere(t,e),t},kre=ia&&ia.__read||function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],s;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){s={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return o},Ore=ia&&ia.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(ia,"__esModule",{value:!0});var wre=Ore(Wt()),Wc=ht(),kG=Sre(SG());wre.default.registerHelper("lint","graphql-variables",function(e,t,r){if(!e)return[];var n;try{n=(0,kG.default)(e)}catch(o){if(o instanceof kG.JSONSyntaxError)return[Sw(r,o.position,o.message)];throw o}var i=t.variableToType;return i?Nre(r,i,n):[]});function Nre(e,t,r){var n=[];return r.members.forEach(function(i){var o;if(i){var s=(o=i.key)===null||o===void 0?void 0:o.value,l=t[s];l?rh(l,i.value).forEach(function(d){var h=kre(d,2),v=h[0],y=h[1];n.push(Sw(e,v,y))}):n.push(Sw(e,i.key,'Variable "$'.concat(s,'" does not appear in any GraphQL query.')))}}),n}function rh(e,t){if(!e||!t)return[];if(e instanceof Wc.GraphQLNonNull)return t.kind==="Null"?[[t,'Type "'.concat(e,'" is non-nullable and cannot be null.')]]:rh(e.ofType,t);if(t.kind==="Null")return[];if(e instanceof Wc.GraphQLList){var r=e.ofType;if(t.kind==="Array"){var n=t.values||[];return OG(n,function(s){return rh(r,s)})}return rh(r,t)}if(e instanceof Wc.GraphQLInputObjectType){if(t.kind!=="Object")return[[t,'Type "'.concat(e,'" must be an Object.')]];var i=Object.create(null),o=OG(t.members,function(s){var l,d=(l=s==null?void 0:s.key)===null||l===void 0?void 0:l.value;i[d]=!0;var h=e.getFields()[d];if(!h)return[[s.key,'Type "'.concat(e,'" does not have a field "').concat(d,'".')]];var v=h?h.type:void 0;return rh(v,s.value)});return Object.keys(e.getFields()).forEach(function(s){if(!i[s]){var l=e.getFields()[s].type;l instanceof Wc.GraphQLNonNull&&o.push([t,'Object of type "'.concat(e,'" is missing required field "').concat(s,'".')])}}),o}return e.name==="Boolean"&&t.kind!=="Boolean"||e.name==="String"&&t.kind!=="String"||e.name==="ID"&&t.kind!=="Number"&&t.kind!=="String"||e.name==="Float"&&t.kind!=="Number"||e.name==="Int"&&(t.kind!=="Number"||(t.value|0)!==t.value)?[[t,'Expected value of type "'.concat(e,'".')]]:(e instanceof Wc.GraphQLEnumType||e instanceof Wc.GraphQLScalarType)&&(t.kind!=="String"&&t.kind!=="Number"&&t.kind!=="Boolean"&&t.kind!=="Null"||Dre(e.parseValue(t.value)))?[[t,'Expected value of type "'.concat(e,'".')]]:[]}function Sw(e,t,r){return{message:r,severity:"error",type:"validation",from:e.posFromIndex(t.start),to:e.posFromIndex(t.end)}}function Dre(e){return e==null||e!==e}function OG(e,t){return Array.prototype.concat.apply([],e.map(t))}});var DG=G(Ay=>{"use strict";var xre=Ay&&Ay.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Ay,"__esModule",{value:!0});var Cre=xre(Wt()),Or=Qc();Cre.default.defineMode("graphql-variables",function(e){var t=(0,Or.onlineParser)({eatWhitespace:function(r){return r.eatSpace()},lexRules:Ire,parseRules:Are,editorConfig:{tabSize:e.tabSize}});return{config:e,startState:t.startState,token:t.token,indent:Lre,electricInput:/^\s*[}\]]/,fold:"brace",closeBrackets:{pairs:'[]{}""',explode:"[]{}"}}});function Lre(e,t){var r,n,i=e.levels,o=!i||i.length===0?e.indentLevel:i[i.length-1]-(((r=this.electricInput)===null||r===void 0?void 0:r.test(t))?1:0);return(o||0)*(((n=this.config)===null||n===void 0?void 0:n.indentUnit)||0)}var Ire={Punctuation:/^\[|]|\{|\}|:|,/,Number:/^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/,String:/^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/,Keyword:/^true|false|null/},Are={Document:[(0,Or.p)("{"),(0,Or.list)("Variable",(0,Or.opt)((0,Or.p)(","))),(0,Or.p)("}")],Variable:[NG("variable"),(0,Or.p)(":"),"Value"],Value:function(e){switch(e.kind){case"Number":return"NumberValue";case"String":return"StringValue";case"Punctuation":switch(e.value){case"[":return"ListValue";case"{":return"ObjectValue"}return null;case"Keyword":switch(e.value){case"true":case"false":return"BooleanValue";case"null":return"NullValue"}return null}},NumberValue:[(0,Or.t)("Number","number")],StringValue:[(0,Or.t)("String","string")],BooleanValue:[(0,Or.t)("Keyword","builtin")],NullValue:[(0,Or.t)("Keyword","keyword")],ListValue:[(0,Or.p)("["),(0,Or.list)("Value",(0,Or.opt)((0,Or.p)(","))),(0,Or.p)("]")],ObjectValue:[(0,Or.p)("{"),(0,Or.list)("ObjectField",(0,Or.opt)((0,Or.p)(","))),(0,Or.p)("}")],ObjectField:[NG("attribute"),(0,Or.p)(":"),"Value"]};function NG(e){return{style:e,match:function(t){return t.kind==="String"},update:function(t,r){t.name=r.value.slice(1,-1)}}}});var LG=G((xG,CG)=>{(function(e){typeof xG=="object"&&typeof CG=="object"?e(Wt()):typeof define=="function"&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})(function(e){"use strict";e.defineMode("javascript",function(t,r){var n=t.indentUnit,i=r.statementIndent,o=r.jsonld,s=r.json||o,l=r.trackScope!==!1,d=r.typescript,h=r.wordCharacters||/[\w$\xa1-\uffff]/,v=function(){function j(Pr){return{type:Pr,style:"keyword"}}var H=j("keyword a"),W=j("keyword b"),ie=j("keyword c"),We=j("keyword d"),vt=j("operator"),_t={type:"atom",style:"atom"};return{if:j("if"),while:H,with:H,else:W,do:W,try:W,finally:W,return:We,break:We,continue:We,new:j("new"),delete:ie,void:ie,throw:ie,debugger:j("debugger"),var:j("var"),const:j("var"),let:j("var"),function:j("function"),catch:j("catch"),for:j("for"),switch:j("switch"),case:j("case"),default:j("default"),in:vt,typeof:vt,instanceof:vt,true:_t,false:_t,null:_t,undefined:_t,NaN:_t,Infinity:_t,this:j("this"),class:j("class"),super:j("atom"),yield:ie,export:j("export"),import:j("import"),extends:ie,await:ie}}(),y=/[+\-*&%=<>!?|~^@]/,b=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function D(j){for(var H=!1,W,ie=!1;(W=j.next())!=null;){if(!H){if(W=="/"&&!ie)return;W=="["?ie=!0:ie&&W=="]"&&(ie=!1)}H=!H&&W=="\\"}}var _,k;function T(j,H,W){return _=j,k=W,H}function S(j,H){var W=j.next();if(W=='"'||W=="'")return H.tokenize=m(W),H.tokenize(j,H);if(W=="."&&j.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return T("number","number");if(W=="."&&j.match(".."))return T("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(W))return T(W);if(W=="="&&j.eat(">"))return T("=>","operator");if(W=="0"&&j.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return T("number","number");if(/\d/.test(W))return j.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),T("number","number");if(W=="/")return j.eat("*")?(H.tokenize=w,w(j,H)):j.eat("/")?(j.skipToEnd(),T("comment","comment")):wa(j,H,1)?(D(j),j.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),T("regexp","string-2")):(j.eat("="),T("operator","operator",j.current()));if(W=="`")return H.tokenize=x,x(j,H);if(W=="#"&&j.peek()=="!")return j.skipToEnd(),T("meta","meta");if(W=="#"&&j.eatWhile(h))return T("variable","property");if(W=="<"&&j.match("!--")||W=="-"&&j.match("->")&&!/\S/.test(j.string.slice(0,j.start)))return j.skipToEnd(),T("comment","comment");if(y.test(W))return(W!=">"||!H.lexical||H.lexical.type!=">")&&(j.eat("=")?(W=="!"||W=="=")&&j.eat("="):/[<>*+\-|&?]/.test(W)&&(j.eat(W),W==">"&&j.eat(W))),W=="?"&&j.eat(".")?T("."):T("operator","operator",j.current());if(h.test(W)){j.eatWhile(h);var ie=j.current();if(H.lastType!="."){if(v.propertyIsEnumerable(ie)){var We=v[ie];return T(We.type,We.style,ie)}if(ie=="async"&&j.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return T("async","keyword",ie)}return T("variable","variable",ie)}}function m(j){return function(H,W){var ie=!1,We;if(o&&H.peek()=="@"&&H.match(b))return W.tokenize=S,T("jsonld-keyword","meta");for(;(We=H.next())!=null&&!(We==j&&!ie);)ie=!ie&&We=="\\";return ie||(W.tokenize=S),T("string","string")}}function w(j,H){for(var W=!1,ie;ie=j.next();){if(ie=="/"&&W){H.tokenize=S;break}W=ie=="*"}return T("comment","comment")}function x(j,H){for(var W=!1,ie;(ie=j.next())!=null;){if(!W&&(ie=="`"||ie=="$"&&j.eat("{"))){H.tokenize=S;break}W=!W&&ie=="\\"}return T("quasi","string-2",j.current())}var L="([{}])";function O(j,H){H.fatArrowAt&&(H.fatArrowAt=null);var W=j.string.indexOf("=>",j.start);if(!(W<0)){if(d){var ie=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(j.string.slice(j.start,W));ie&&(W=ie.index)}for(var We=0,vt=!1,_t=W-1;_t>=0;--_t){var Pr=j.string.charAt(_t),Si=L.indexOf(Pr);if(Si>=0&&Si<3){if(!We){++_t;break}if(--We==0){Pr=="("&&(vt=!0);break}}else if(Si>=3&&Si<6)++We;else if(h.test(Pr))vt=!0;else if(/["'\/`]/.test(Pr))for(;;--_t){if(_t==0)return;var Ye=j.string.charAt(_t-1);if(Ye==Pr&&j.string.charAt(_t-2)!="\\"){_t--;break}}else if(vt&&!We){++_t;break}}vt&&!We&&(H.fatArrowAt=_t)}}var R={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function M(j,H,W,ie,We,vt){this.indented=j,this.column=H,this.type=W,this.prev=We,this.info=vt,ie!=null&&(this.align=ie)}function q(j,H){if(!l)return!1;for(var W=j.localVars;W;W=W.next)if(W.name==H)return!0;for(var ie=j.context;ie;ie=ie.prev)for(var W=ie.vars;W;W=W.next)if(W.name==H)return!0}function z(j,H,W,ie,We){var vt=j.cc;for(B.state=j,B.stream=We,B.marked=null,B.cc=vt,B.style=H,j.lexical.hasOwnProperty("align")||(j.lexical.align=!0);;){var _t=vt.length?vt.pop():s?Me:we;if(_t(W,ie)){for(;vt.length&&vt[vt.length-1].lex;)vt.pop()();return B.marked?B.marked:W=="variable"&&q(j,ie)?"variable-2":H}}}var B={state:null,column:null,marked:null,cc:null};function Q(){for(var j=arguments.length-1;j>=0;j--)B.cc.push(arguments[j])}function P(){return Q.apply(null,arguments),!0}function he(j,H){for(var W=H;W;W=W.next)if(W.name==j)return!0;return!1}function xe(j){var H=B.state;if(B.marked="def",!!l){if(H.context){if(H.lexical.info=="var"&&H.context&&H.context.block){var W=ge(j,H.context);if(W!=null){H.context=W;return}}else if(!he(j,H.localVars)){H.localVars=new He(j,H.localVars);return}}r.globalVars&&!he(j,H.globalVars)&&(H.globalVars=new He(j,H.globalVars))}}function ge(j,H){if(H)if(H.block){var W=ge(j,H.prev);return W?W==H.prev?H:new Le(W,H.vars,!0):null}else return he(j,H.vars)?H:new Le(H.prev,new He(j,H.vars),!1);else return null}function Fe(j){return j=="public"||j=="private"||j=="protected"||j=="abstract"||j=="readonly"}function Le(j,H,W){this.prev=j,this.vars=H,this.block=W}function He(j,H){this.name=j,this.next=H}var Xe=new He("this",new He("arguments",null));function Ve(){B.state.context=new Le(B.state.context,B.state.localVars,!1),B.state.localVars=Xe}function At(){B.state.context=new Le(B.state.context,B.state.localVars,!0),B.state.localVars=null}Ve.lex=At.lex=!0;function Ot(){B.state.localVars=B.state.context.vars,B.state.context=B.state.context.prev}Ot.lex=!0;function Ie(j,H){var W=function(){var ie=B.state,We=ie.indented;if(ie.lexical.type=="stat")We=ie.lexical.indented;else for(var vt=ie.lexical;vt&&vt.type==")"&&vt.align;vt=vt.prev)We=vt.indented;ie.lexical=new M(We,B.stream.column(),j,null,ie.lexical,H)};return W.lex=!0,W}function te(){var j=B.state;j.lexical.prev&&(j.lexical.type==")"&&(j.indented=j.lexical.indented),j.lexical=j.lexical.prev)}te.lex=!0;function ce(j){function H(W){return W==j?P():j==";"||W=="}"||W==")"||W=="]"?Q():P(H)}return H}function we(j,H){return j=="var"?P(Ie("vardef",H),J,ce(";"),te):j=="keyword a"?P(Ie("form"),ze,we,te):j=="keyword b"?P(Ie("form"),we,te):j=="keyword d"?B.stream.match(/^\s*$/,!1)?P():P(Ie("stat"),oe,ce(";"),te):j=="debugger"?P(ce(";")):j=="{"?P(Ie("}"),At,zn,te,Ot):j==";"?P():j=="if"?(B.state.lexical.info=="else"&&B.state.cc[B.state.cc.length-1]==te&&B.state.cc.pop()(),P(Ie("form"),ze,we,te,Ut)):j=="function"?P(jr):j=="for"?P(Ie("form"),At,Rt,we,Ot,te):j=="class"||d&&H=="interface"?(B.marked="keyword",P(Ie("form",j=="class"?j:H),ch,te)):j=="variable"?d&&H=="declare"?(B.marked="keyword",P(we)):d&&(H=="module"||H=="enum"||H=="type")&&B.stream.match(/^\s*\w/,!1)?(B.marked="keyword",H=="enum"?P(Xs):H=="type"?P(sa,ce("operator"),_e,ce(";")):P(Ie("form"),V,ce("{"),Ie("}"),zn,te,te)):d&&H=="namespace"?(B.marked="keyword",P(Ie("form"),Me,we,te)):d&&H=="abstract"?(B.marked="keyword",P(we)):P(Ie("stat"),dn):j=="switch"?P(Ie("form"),ze,ce("{"),Ie("}","switch"),At,zn,te,te,Ot):j=="case"?P(Me,ce(":")):j=="default"?P(ce(":")):j=="catch"?P(Ie("form"),Ve,ot,we,te,Ot):j=="export"?P(Ie("stat"),jo,te):j=="import"?P(Ie("stat"),ao,te):j=="async"?P(we):H=="@"?P(Me,we):Q(Ie("stat"),Me,ce(";"),te)}function ot(j){if(j=="(")return P(Cn,ce(")"))}function Me(j,H){return mt(j,H,!1)}function Qe(j,H){return mt(j,H,!0)}function ze(j){return j!="("?Q():P(Ie(")"),oe,ce(")"),te)}function mt(j,H,W){if(B.state.fatArrowAt==B.stream.start){var ie=W?ct:at;if(j=="(")return P(Ve,Ie(")"),Kt(Cn,")"),te,ce("=>"),ie,Ot);if(j=="variable")return Q(Ve,V,ce("=>"),ie,Ot)}var We=W?fe:me;return R.hasOwnProperty(j)?P(We):j=="function"?P(jr,We):j=="class"||d&&H=="interface"?(B.marked="keyword",P(Ie("form"),la,te)):j=="keyword c"||j=="async"?P(W?Qe:Me):j=="("?P(Ie(")"),oe,ce(")"),te,We):j=="operator"||j=="spread"?P(W?Qe:Me):j=="["?P(Ie("]"),oo,te,We):j=="{"?hn(pn,"}",null,We):j=="quasi"?Q(se,We):j=="new"?P(st(W)):P()}function oe(j){return j.match(/[;\}\)\],]/)?Q():Q(Me)}function me(j,H){return j==","?P(oe):fe(j,H,!1)}function fe(j,H,W){var ie=W==!1?me:fe,We=W==!1?Me:Qe;if(j=="=>")return P(Ve,W?ct:at,Ot);if(j=="operator")return/\+\+|--/.test(H)||d&&H=="!"?P(ie):d&&H=="<"&&B.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?P(Ie(">"),Kt(_e,">"),te,ie):H=="?"?P(Me,ce(":"),We):P(We);if(j=="quasi")return Q(se,ie);if(j!=";"){if(j=="(")return hn(Qe,")","call",ie);if(j==".")return P(Hn,ie);if(j=="[")return P(Ie("]"),oe,ce("]"),te,ie);if(d&&H=="as")return B.marked="keyword",P(_e,ie);if(j=="regexp")return B.state.lastType=B.marked="operator",B.stream.backUp(B.stream.pos-B.stream.start-1),P(We)}}function se(j,H){return j!="quasi"?Q():H.slice(H.length-2)!="${"?P(se):P(oe,Ue)}function Ue(j){if(j=="}")return B.marked="string-2",B.state.tokenize=x,P(se)}function at(j){return O(B.stream,B.state),Q(j=="{"?we:Me)}function ct(j){return O(B.stream,B.state),Q(j=="{"?we:Qe)}function st(j){return function(H){return H=="."?P(j?Ei:Dn):H=="variable"&&d?P(ee,j?fe:me):Q(j?Qe:Me)}}function Dn(j,H){if(H=="target")return B.marked="keyword",P(me)}function Ei(j,H){if(H=="target")return B.marked="keyword",P(fe)}function dn(j){return j==":"?P(te,we):Q(me,ce(";"),te)}function Hn(j){if(j=="variable")return B.marked="property",P()}function pn(j,H){if(j=="async")return B.marked="property",P(pn);if(j=="variable"||B.style=="keyword"){if(B.marked="property",H=="get"||H=="set")return P(Pi);var W;return d&&B.state.fatArrowAt==B.stream.start&&(W=B.stream.match(/^\s*:\s*/,!1))&&(B.state.fatArrowAt=B.stream.pos+W[0].length),P(Qr)}else{if(j=="number"||j=="string")return B.marked=o?"property":B.style+" property",P(Qr);if(j=="jsonld-keyword")return P(Qr);if(d&&Fe(H))return B.marked="keyword",P(pn);if(j=="[")return P(Me,vr,ce("]"),Qr);if(j=="spread")return P(Qe,Qr);if(H=="*")return B.marked="keyword",P(pn);if(j==":")return Q(Qr)}}function Pi(j){return j!="variable"?Q(Qr):(B.marked="property",P(jr))}function Qr(j){if(j==":")return P(Qe);if(j=="(")return Q(jr)}function Kt(j,H,W){function ie(We,vt){if(W?W.indexOf(We)>-1:We==","){var _t=B.state.lexical;return _t.info=="call"&&(_t.pos=(_t.pos||0)+1),P(function(Pr,Si){return Pr==H||Si==H?Q():Q(j)},ie)}return We==H||vt==H?P():W&&W.indexOf(";")>-1?Q(j):P(ce(H))}return function(We,vt){return We==H||vt==H?P():Q(j,ie)}}function hn(j,H,W){for(var ie=3;ie"),_e);if(j=="quasi")return Q(nr,un)}function Gu(j){if(j=="=>")return P(_e)}function Ar(j){return j.match(/[\}\)\]]/)?P():j==","||j==";"?P(Ar):Q(Ft,Ar)}function Ft(j,H){if(j=="variable"||B.style=="keyword")return B.marked="property",P(Ft);if(H=="?"||j=="number"||j=="string")return P(Ft);if(j==":")return P(_e);if(j=="[")return P(ce("variable"),Ro,ce("]"),Ft);if(j=="(")return Q(et,Ft);if(!j.match(/[;\}\)\],]/))return P()}function nr(j,H){return j!="quasi"?Q():H.slice(H.length-2)!="${"?P(nr):P(_e,Ys)}function Ys(j){if(j=="}")return B.marked="string-2",B.state.tokenize=x,P(nr)}function on(j,H){return j=="variable"&&B.stream.match(/^\s*[?:]/,!1)||H=="?"?P(on):j==":"?P(_e):j=="spread"?P(on):Q(_e)}function un(j,H){if(H=="<")return P(Ie(">"),Kt(_e,">"),te,un);if(H=="|"||j=="."||H=="&")return P(_e);if(j=="[")return P(_e,ce("]"),un);if(H=="extends"||H=="implements")return B.marked="keyword",P(_e);if(H=="?")return P(_e,ce(":"),_e)}function ee(j,H){if(H=="<")return P(Ie(">"),Kt(_e,">"),te,un)}function F(){return Q(_e,Y)}function Y(j,H){if(H=="=")return P(_e)}function J(j,H){return H=="enum"?(B.marked="keyword",P(Xs)):Q(V,vr,ue,Ze)}function V(j,H){if(d&&Fe(H))return B.marked="keyword",P(V);if(j=="variable")return xe(H),P();if(j=="spread")return P(V);if(j=="[")return hn(re,"]");if(j=="{")return hn(A,"}")}function A(j,H){return j=="variable"&&!B.stream.match(/^\s*:/,!1)?(xe(H),P(ue)):(j=="variable"&&(B.marked="property"),j=="spread"?P(V):j=="}"?Q():j=="["?P(Me,ce("]"),ce(":"),A):P(ce(":"),V,ue))}function re(){return Q(V,ue)}function ue(j,H){if(H=="=")return P(Qe)}function Ze(j){if(j==",")return P(J)}function Ut(j,H){if(j=="keyword b"&&H=="else")return P(Ie("form","else"),we,te)}function Rt(j,H){if(H=="await")return P(Rt);if(j=="(")return P(Ie(")"),vn,te)}function vn(j){return j=="var"?P(J,Rr):j=="variable"?P(Rr):Q(Rr)}function Rr(j,H){return j==")"?P():j==";"?P(Rr):H=="in"||H=="of"?(B.marked="keyword",P(Me,Rr)):Q(Me,Rr)}function jr(j,H){if(H=="*")return B.marked="keyword",P(jr);if(j=="variable")return xe(H),P(jr);if(j=="(")return P(Ve,Ie(")"),Kt(Cn,")"),te,xn,we,Ot);if(d&&H=="<")return P(Ie(">"),Kt(F,">"),te,jr)}function et(j,H){if(H=="*")return B.marked="keyword",P(et);if(j=="variable")return xe(H),P(et);if(j=="(")return P(Ve,Ie(")"),Kt(Cn,")"),te,xn,Ot);if(d&&H=="<")return P(Ie(">"),Kt(F,">"),te,et)}function sa(j,H){if(j=="keyword"||j=="variable")return B.marked="type",P(sa);if(H=="<")return P(Ie(">"),Kt(F,">"),te)}function Cn(j,H){return H=="@"&&P(Me,Cn),j=="spread"?P(Cn):d&&Fe(H)?(B.marked="keyword",P(Cn)):d&&j=="this"?P(vr,ue):Q(V,vr,ue)}function la(j,H){return j=="variable"?ch(j,H):Js(j,H)}function ch(j,H){if(j=="variable")return xe(H),P(Js)}function Js(j,H){if(H=="<")return P(Ie(">"),Kt(F,">"),te,Js);if(H=="extends"||H=="implements"||d&&j==",")return H=="implements"&&(B.marked="keyword"),P(d?_e:Me,Js);if(j=="{")return P(Ie("}"),ui,te)}function ui(j,H){if(j=="async"||j=="variable"&&(H=="static"||H=="get"||H=="set"||d&&Fe(H))&&B.stream.match(/^\s+#?[\w$\xa1-\uffff]/,!1))return B.marked="keyword",P(ui);if(j=="variable"||B.style=="keyword")return B.marked="property",P(io,ui);if(j=="number"||j=="string")return P(io,ui);if(j=="[")return P(Me,vr,ce("]"),io,ui);if(H=="*")return B.marked="keyword",P(ui);if(d&&j=="(")return Q(et,ui);if(j==";"||j==",")return P(ui);if(j=="}")return P();if(H=="@")return P(Me,ui)}function io(j,H){if(H=="!"||H=="?")return P(io);if(j==":")return P(_e,ue);if(H=="=")return P(Qe);var W=B.state.lexical.prev,ie=W&&W.info=="interface";return Q(ie?et:jr)}function jo(j,H){return H=="*"?(B.marked="keyword",P(Ae,ce(";"))):H=="default"?(B.marked="keyword",P(Me,ce(";"))):j=="{"?P(Kt(fh,"}"),Ae,ce(";")):Q(we)}function fh(j,H){if(H=="as")return B.marked="keyword",P(ce("variable"));if(j=="variable")return Q(Qe,fh)}function ao(j){return j=="string"?P():j=="("?Q(Me):j=="."?Q(me):Q(Po,nf,Ae)}function Po(j,H){return j=="{"?hn(Po,"}"):(j=="variable"&&xe(H),H=="*"&&(B.marked="keyword"),P(gr))}function nf(j){if(j==",")return P(Po,nf)}function gr(j,H){if(H=="as")return B.marked="keyword",P(Po)}function Ae(j,H){if(H=="from")return B.marked="keyword",P(Me)}function oo(j){return j=="]"?P():Q(Kt(Qe,"]"))}function Xs(){return Q(Ie("form"),V,ce("{"),Ie("}"),Kt(Fi,"}"),te,te)}function Fi(){return Q(V,ue)}function wt(j,H){return j.lastType=="operator"||j.lastType==","||y.test(H.charAt(0))||/[,.]/.test(H.charAt(0))}function wa(j,H,W){return H.tokenize==S&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(H.lastType)||H.lastType=="quasi"&&/\{\s*$/.test(j.string.slice(0,j.pos-(W||0)))}return{startState:function(j){var H={tokenize:S,lastType:"sof",cc:[],lexical:new M((j||0)-n,0,"block",!1),localVars:r.localVars,context:r.localVars&&new Le(null,null,!1),indented:j||0};return r.globalVars&&typeof r.globalVars=="object"&&(H.globalVars=r.globalVars),H},token:function(j,H){if(j.sol()&&(H.lexical.hasOwnProperty("align")||(H.lexical.align=!1),H.indented=j.indentation(),O(j,H)),H.tokenize!=w&&j.eatSpace())return null;var W=H.tokenize(j,H);return _=="comment"?W:(H.lastType=_=="operator"&&(k=="++"||k=="--")?"incdec":_,z(H,W,_,k,j))},indent:function(j,H){if(j.tokenize==w||j.tokenize==x)return e.Pass;if(j.tokenize!=S)return 0;var W=H&&H.charAt(0),ie=j.lexical,We;if(!/^\s*else\b/.test(H))for(var vt=j.cc.length-1;vt>=0;--vt){var _t=j.cc[vt];if(_t==te)ie=ie.prev;else if(_t!=Ut&&_t!=Ot)break}for(;(ie.type=="stat"||ie.type=="form")&&(W=="}"||(We=j.cc[j.cc.length-1])&&(We==me||We==fe)&&!/^[,\.=+\-*:?[\(]/.test(H));)ie=ie.prev;i&&ie.type==")"&&ie.prev.type=="stat"&&(ie=ie.prev);var Pr=ie.type,Si=W==Pr;return Pr=="vardef"?ie.indented+(j.lastType=="operator"||j.lastType==","?ie.info.length+1:0):Pr=="form"&&W=="{"?ie.indented:Pr=="form"?ie.indented+n:Pr=="stat"?ie.indented+(wt(j,H)?i||n:0):ie.info=="switch"&&!Si&&r.doubleIndentSwitch!=!1?ie.indented+(/^(?:case|default)\b/.test(H)?n:2*n):ie.align?ie.column+(Si?0:1):ie.indented+(Si?0:n)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:s?null:"/*",blockCommentEnd:s?null:"*/",blockCommentContinue:s?null:" * ",lineComment:s?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:s?"json":"javascript",jsonldMode:o,jsonMode:s,expressionAllowed:wa,skipExpression:function(j){z(j,"atom","atom","true",new e.StringStream("",2,null))}}}),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/manifest+json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})})});var IG=G(jy=>{"use strict";var Vre=jy&&jy.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(jy,"__esModule",{value:!0});var Ure=Vre(Wt()),Ir=Qc();Ure.default.defineMode("graphql-results",function(e){var t=(0,Ir.onlineParser)({eatWhitespace:function(r){return r.eatSpace()},lexRules:Qre,parseRules:Bre,editorConfig:{tabSize:e.tabSize}});return{config:e,startState:t.startState,token:t.token,indent:Gre,electricInput:/^\s*[}\]]/,fold:"brace",closeBrackets:{pairs:'[]{}""',explode:"[]{}"}}});function Gre(e,t){var r,n,i=e.levels,o=!i||i.length===0?e.indentLevel:i[i.length-1]-(((r=this.electricInput)===null||r===void 0?void 0:r.test(t))?1:0);return(o||0)*(((n=this.config)===null||n===void 0?void 0:n.indentUnit)||0)}var Qre={Punctuation:/^\[|]|\{|\}|:|,/,Number:/^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/,String:/^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/,Keyword:/^true|false|null/},Bre={Document:[(0,Ir.p)("{"),(0,Ir.list)("Entry",(0,Ir.p)(",")),(0,Ir.p)("}")],Entry:[(0,Ir.t)("String","def"),(0,Ir.p)(":"),"Value"],Value:function(e){switch(e.kind){case"Number":return"NumberValue";case"String":return"StringValue";case"Punctuation":switch(e.value){case"[":return"ListValue";case"{":return"ObjectValue"}return null;case"Keyword":switch(e.value){case"true":case"false":return"BooleanValue";case"null":return"NullValue"}return null}},NumberValue:[(0,Ir.t)("Number","number")],StringValue:[(0,Ir.t)("String","string")],BooleanValue:[(0,Ir.t)("Keyword","builtin")],NullValue:[(0,Ir.t)("Keyword","keyword")],ListValue:[(0,Ir.p)("["),(0,Ir.list)("Value",(0,Ir.p)(",")),(0,Ir.p)("]")],ObjectValue:[(0,Ir.p)("{"),(0,Ir.list)("ObjectField",(0,Ir.p)(",")),(0,Ir.p)("}")],ObjectField:[(0,Ir.t)("String","property"),(0,Ir.p)(":"),"Value"]}});var ZG=G((Ufe,XG)=>{"use strict";XG.exports=function(t){return typeof t=="object"?t===null:typeof t!="function"}});var eQ=G((Gfe,$G)=>{"use strict";$G.exports=function(t){return t!=null&&typeof t=="object"&&Array.isArray(t)===!1}});var nQ=G((Qfe,rQ)=>{"use strict";var kne=eQ();function tQ(e){return kne(e)===!0&&Object.prototype.toString.call(e)==="[object Object]"}rQ.exports=function(t){var r,n;return!(tQ(t)===!1||(r=t.constructor,typeof r!="function")||(n=r.prototype,tQ(n)===!1)||n.hasOwnProperty("isPrototypeOf")===!1)}});var sQ=G((Bfe,uQ)=>{"use strict";var{deleteProperty:One}=Reflect,wne=ZG(),iQ=nQ(),aQ=e=>typeof e=="object"&&e!==null||typeof e=="function",Nne=e=>e==="__proto__"||e==="constructor"||e==="prototype",Kw=e=>{if(!wne(e))throw new TypeError("Object keys must be strings or symbols");if(Nne(e))throw new Error(`Cannot set unsafe key: "${e}"`)},Dne=e=>Array.isArray(e)?e.flat().map(String).join(","):e,xne=(e,t)=>{if(typeof e!="string"||!t)return e;let r=e+";";return t.arrays!==void 0&&(r+=`arrays=${t.arrays};`),t.separator!==void 0&&(r+=`separator=${t.separator};`),t.split!==void 0&&(r+=`split=${t.split};`),t.merge!==void 0&&(r+=`merge=${t.merge};`),t.preservePaths!==void 0&&(r+=`preservePaths=${t.preservePaths};`),r},Cne=(e,t,r)=>{let n=Dne(t?xne(e,t):e);Kw(n);let i=Hs.cache.get(n)||r();return Hs.cache.set(n,i),i},Lne=(e,t={})=>{let r=t.separator||".",n=r==="/"?!1:t.preservePaths;if(typeof e=="string"&&n!==!1&&/\//.test(e))return[e];let i=[],o="",s=l=>{let d;l.trim()!==""&&Number.isInteger(d=Number(l))?i.push(d):i.push(l)};for(let l=0;lt&&typeof t.split=="function"?t.split(e):typeof e=="symbol"?[e]:Array.isArray(e)?e:Cne(e,t,()=>Lne(e,t)),Ine=(e,t,r,n)=>{if(Kw(t),r===void 0)One(e,t);else if(n&&n.merge){let i=n.merge==="function"?n.merge:Object.assign;i&&iQ(e[t])&&iQ(r)?e[t]=i(e[t],r):e[t]=r}else e[t]=r;return e},Hs=(e,t,r,n)=>{if(!t||!aQ(e))return e;let i=oQ(t,n),o=e;for(let s=0;s{Hs.cache=new Map};uQ.exports=Hs});var CQ=G((Pde,xQ)=>{xQ.exports=Zc;function Zc(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}Zc.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),r=Math.floor(t*this.jitter*e);e=(Math.floor(t*10)&1)==0?e-r:e+r}return Math.min(e,this.max)|0};Zc.prototype.reset=function(){this.attempts=0};Zc.prototype.setMin=function(e){this.ms=e};Zc.prototype.setMax=function(e){this.max=e};Zc.prototype.setJitter=function(e){this.jitter=e}});var IQ=G((Fde,Jw)=>{"use strict";var Zne=Object.prototype.hasOwnProperty,ai="~";function lh(){}Object.create&&(lh.prototype=Object.create(null),new lh().__proto__||(ai=!1));function $ne(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function LQ(e,t,r,n,i){if(typeof r!="function")throw new TypeError("The listener must be a function");var o=new $ne(r,n||e,i),s=ai?ai+t:t;return e._events[s]?e._events[s].fn?e._events[s]=[e._events[s],o]:e._events[s].push(o):(e._events[s]=o,e._eventsCount++),e}function zy(e,t){--e._eventsCount==0?e._events=new lh:delete e._events[t]}function Kn(){this._events=new lh,this._eventsCount=0}Kn.prototype.eventNames=function(){var t=[],r,n;if(this._eventsCount===0)return t;for(n in r=this._events)Zne.call(r,n)&&t.push(ai?n.slice(1):n);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(r)):t};Kn.prototype.listeners=function(t){var r=ai?ai+t:t,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,o=n.length,s=new Array(o);i{"use strict";Object.defineProperty(Xw,"__esModule",{value:!0});function eie(e){return typeof e=="string"}Xw.default=eie});var RQ=G(Zw=>{"use strict";Object.defineProperty(Zw,"__esModule",{value:!0});function tie(e){return e!==null&&typeof e=="object"}Zw.default=tie});var jQ=G($w=>{"use strict";Object.defineProperty($w,"__esModule",{value:!0});$w.default=rie;function rie(e){var t,r=e.Symbol;return typeof r=="function"?r.observable?t=r.observable:(t=r("observable"),r.observable=t):t="@@observable",t}});var PQ=G((eN,tN)=>{"use strict";Object.defineProperty(eN,"__esModule",{value:!0});var nie=jQ(),iie=aie(nie);function aie(e){return e&&e.__esModule?e:{default:e}}var $c;typeof self!="undefined"?$c=self:typeof window!="undefined"||typeof window!="undefined"?$c=window:typeof tN!="undefined"?$c=tN:$c=Function("return this")();var oie=(0,iie.default)($c);eN.default=oie});var FQ=G(ef=>{"use strict";Object.defineProperty(ef,"__esModule",{value:!0});ef.GRAPHQL_SUBSCRIPTIONS=ef.GRAPHQL_WS=void 0;var uie="graphql-ws";ef.GRAPHQL_WS=uie;var sie="graphql-subscriptions";ef.GRAPHQL_SUBSCRIPTIONS=sie});var MQ=G(tf=>{"use strict";Object.defineProperty(tf,"__esModule",{value:!0});tf.WS_TIMEOUT=tf.MIN_WS_TIMEOUT=void 0;var lie=1e3;tf.MIN_WS_TIMEOUT=lie;var cie=3e4;tf.WS_TIMEOUT=cie});var qQ=G(rN=>{"use strict";Object.defineProperty(rN,"__esModule",{value:!0});var fie=function(){function e(){throw new Error("Static Class")}return e.GQL_CONNECTION_INIT="connection_init",e.GQL_CONNECTION_ACK="connection_ack",e.GQL_CONNECTION_ERROR="connection_error",e.GQL_CONNECTION_KEEP_ALIVE="ka",e.GQL_CONNECTION_TERMINATE="connection_terminate",e.GQL_START="start",e.GQL_DATA="data",e.GQL_ERROR="error",e.GQL_COMPLETE="complete",e.GQL_STOP="stop",e.SUBSCRIPTION_START="subscription_start",e.SUBSCRIPTION_DATA="subscription_data",e.SUBSCRIPTION_SUCCESS="subscription_success",e.SUBSCRIPTION_FAIL="subscription_fail",e.SUBSCRIPTION_END="subscription_end",e.INIT="init",e.INIT_SUCCESS="init_success",e.INIT_FAIL="init_fail",e.KEEP_ALIVE="keepalive",e}();rN.default=fie});var KQ=G(ua=>{"use strict";var rf=ua&&ua.__assign||function(){return rf=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])&&(h[0]===6||h[0]===2)){r=0;continue}if(h[0]===3&&(!o||h[1]>o[0]&&h[1]0){var v=s.shift();v&&v.applyMiddleware.apply(l,[t,d])}else n(t)};d()};o(VQ(r.middlewares),r)})},e.prototype.use=function(t){var r=this;return t.map(function(n){if(typeof n.applyMiddleware=="function")r.middlewares.push(n);else throw new Error("Middleware must implement the applyMiddleware function.")}),this},e.prototype.getConnectionParams=function(t){return function(){return new Promise(function(r,n){if(typeof t=="function")try{return r(t.call(null))}catch(i){return n(i)}r(t)})}},e.prototype.executeOperation=function(t,r){var n=this;this.client===null&&this.connect();var i=this.generateOperationId();return this.operations[i]={options:t,handler:r},this.applyMiddlewares(t).then(function(o){n.checkOperationOptions(o,r),n.operations[i]&&(n.operations[i]={options:o,handler:r},n.sendMessage(i,oi.default.GQL_START,o))}).catch(function(o){n.unsubscribe(i),r(n.formatErrors(o))}),i},e.prototype.getObserver=function(t,r,n){return typeof t=="function"?{next:function(i){return t(i)},error:function(i){return r&&r(i)},complete:function(){return n&&n()}}:t},e.prototype.createMaxConnectTimeGenerator=function(){var t=this.minWsTimeout,r=this.wsTimeout;return new GQ({min:t,max:r,factor:1.2})},e.prototype.clearCheckConnectionInterval=function(){this.checkConnectionIntervalId&&(clearInterval(this.checkConnectionIntervalId),this.checkConnectionIntervalId=null)},e.prototype.clearMaxConnectTimeout=function(){this.maxConnectTimeoutId&&(clearTimeout(this.maxConnectTimeoutId),this.maxConnectTimeoutId=null)},e.prototype.clearTryReconnectTimeout=function(){this.tryReconnectTimeoutId&&(clearTimeout(this.tryReconnectTimeoutId),this.tryReconnectTimeoutId=null)},e.prototype.clearInactivityTimeout=function(){this.inactivityTimeoutId&&(clearTimeout(this.inactivityTimeoutId),this.inactivityTimeoutId=null)},e.prototype.setInactivityTimeout=function(){var t=this;this.inactivityTimeout>0&&Object.keys(this.operations).length===0&&(this.inactivityTimeoutId=setTimeout(function(){Object.keys(t.operations).length===0&&t.close()},this.inactivityTimeout))},e.prototype.checkOperationOptions=function(t,r){var n=t.query,i=t.variables,o=t.operationName;if(!n)throw new Error("Must provide a query.");if(!r)throw new Error("Must provide an handler.");if(!QQ.default(n)&&!yie.getOperationAST(n,o)||o&&!QQ.default(o)||i&&!gie.default(i))throw new Error("Incorrect option types. query must be a string or a document,`operationName` must be a string, and `variables` must be an object.")},e.prototype.buildMessage=function(t,r,n){var i=n&&n.query?rf(rf({},n),{query:typeof n.query=="string"?n.query:mie.print(n.query)}):n;return{id:t,type:r,payload:i}},e.prototype.formatErrors=function(t){return Array.isArray(t)?t:t&&t.errors?this.formatErrors(t.errors):t&&t.message?[t]:[{name:"FormatedError",message:"Unknown error",originalError:t}]},e.prototype.sendMessage=function(t,r,n){this.sendMessageRaw(this.buildMessage(t,r,n))},e.prototype.sendMessageRaw=function(t){switch(this.status){case this.wsImpl.OPEN:var r=JSON.stringify(t);try{JSON.parse(r)}catch(n){this.eventEmitter.emit("error",new Error("Message must be JSON-serializable. Got: "+t))}this.client.send(r);break;case this.wsImpl.CONNECTING:this.unsentMessagesQueue.push(t);break;default:this.reconnecting||this.eventEmitter.emit("error",new Error("A message was not sent because socket is not connected, is closing or is already closed. Message was: "+JSON.stringify(t)))}},e.prototype.generateOperationId=function(){return String(++this.nextOperationId)},e.prototype.tryReconnect=function(){var t=this;if(!(!this.reconnect||this.backoff.attempts>=this.reconnectionAttempts)){this.reconnecting||(Object.keys(this.operations).forEach(function(n){t.unsentMessagesQueue.push(t.buildMessage(n,oi.default.GQL_START,t.operations[n].options))}),this.reconnecting=!0),this.clearTryReconnectTimeout();var r=this.backoff.duration();this.tryReconnectTimeoutId=setTimeout(function(){t.connect()},r)}},e.prototype.flushUnsentMessagesQueue=function(){var t=this;this.unsentMessagesQueue.forEach(function(r){t.sendMessageRaw(r)}),this.unsentMessagesQueue=[]},e.prototype.checkConnection=function(){if(this.wasKeepAliveReceived){this.wasKeepAliveReceived=!1;return}this.reconnecting||this.close(!1,!0)},e.prototype.checkMaxConnectTimeout=function(){var t=this;this.clearMaxConnectTimeout(),this.maxConnectTimeoutId=setTimeout(function(){t.status!==t.wsImpl.OPEN&&(t.reconnecting=!0,t.close(!1,!0))},this.maxConnectTimeGenerator.duration())},e.prototype.connect=function(){var t,r=this;this.client=new((t=this.wsImpl).bind.apply(t,VQ([void 0,this.url,this.wsProtocols],this.wsOptionArguments))),this.checkMaxConnectTimeout(),this.client.onopen=function(){return die(r,void 0,void 0,function(){var n,i;return pie(this,function(o){switch(o.label){case 0:if(this.status!==this.wsImpl.OPEN)return[3,4];this.clearMaxConnectTimeout(),this.closedByUser=!1,this.eventEmitter.emit(this.reconnecting?"reconnecting":"connecting"),o.label=1;case 1:return o.trys.push([1,3,,4]),[4,this.connectionParams()];case 2:return n=o.sent(),this.sendMessage(void 0,oi.default.GQL_CONNECTION_INIT,n),this.flushUnsentMessagesQueue(),[3,4];case 3:return i=o.sent(),this.sendMessage(void 0,oi.default.GQL_CONNECTION_ERROR,i),this.flushUnsentMessagesQueue(),[3,4];case 4:return[2]}})})},this.client.onclose=function(){r.closedByUser||r.close(!1,!1)},this.client.onerror=function(n){r.eventEmitter.emit("error",n)},this.client.onmessage=function(n){var i=n.data;r.processReceivedData(i)}},e.prototype.processReceivedData=function(t){var r,n;try{r=JSON.parse(t),n=r.id}catch(l){throw new Error("Message must be JSON-parseable. Got: "+t)}if([oi.default.GQL_DATA,oi.default.GQL_COMPLETE,oi.default.GQL_ERROR].indexOf(r.type)!==-1&&!this.operations[n]){this.unsubscribe(n);return}switch(r.type){case oi.default.GQL_CONNECTION_ERROR:this.connectionCallback&&this.connectionCallback(r.payload);break;case oi.default.GQL_CONNECTION_ACK:this.eventEmitter.emit(this.reconnecting?"reconnected":"connected",r.payload),this.reconnecting=!1,this.backoff.reset(),this.maxConnectTimeGenerator.reset(),this.connectionCallback&&this.connectionCallback();break;case oi.default.GQL_COMPLETE:var i=this.operations[n].handler;delete this.operations[n],i.call(this,null,null);break;case oi.default.GQL_ERROR:this.operations[n].handler(this.formatErrors(r.payload),null),delete this.operations[n];break;case oi.default.GQL_DATA:var o=r.payload.errors?rf(rf({},r.payload),{errors:this.formatErrors(r.payload.errors)}):r.payload;this.operations[n].handler(null,o);break;case oi.default.GQL_CONNECTION_KEEP_ALIVE:var s=typeof this.wasKeepAliveReceived=="undefined";this.wasKeepAliveReceived=!0,s&&this.checkConnection(),this.checkConnectionIntervalId&&(clearInterval(this.checkConnectionIntervalId),this.checkConnection()),this.checkConnectionIntervalId=setInterval(this.checkConnection.bind(this),this.wsTimeout);break;default:throw new Error("Invalid message type!")}},e.prototype.unsubscribe=function(t){this.operations[t]&&(delete this.operations[t],this.setInactivityTimeout(),this.sendMessage(t,oi.default.GQL_STOP,void 0))},e}();ua.SubscriptionClient=_ie});var Eie=Ee(zt()),Sie=Ee(a_());var ut=Ee(zt()),ii=Ee(ht()),hQ=Ee(aP());var it=Ee(ht());"use strict";var oP;(function(e){function t(r){return typeof r=="string"}e.is=t})(oP||(oP={}));var Vk;(function(e){function t(r){return typeof r=="string"}e.is=t})(Vk||(Vk={}));var uP;(function(e){e.MIN_VALUE=-2147483648,e.MAX_VALUE=2147483647;function t(r){return typeof r=="number"&&e.MIN_VALUE<=r&&r<=e.MAX_VALUE}e.is=t})(uP||(uP={}));var Nm;(function(e){e.MIN_VALUE=0,e.MAX_VALUE=2147483647;function t(r){return typeof r=="number"&&e.MIN_VALUE<=r&&r<=e.MAX_VALUE}e.is=t})(Nm||(Nm={}));var ka;(function(e){function t(n,i){return n===Number.MAX_VALUE&&(n=Nm.MAX_VALUE),i===Number.MAX_VALUE&&(i=Nm.MAX_VALUE),{line:n,character:i}}e.create=t;function r(n){var i=n;return ne.objectLiteral(i)&&ne.uinteger(i.line)&&ne.uinteger(i.character)}e.is=r})(ka||(ka={}));var Lr;(function(e){function t(n,i,o,s){if(ne.uinteger(n)&&ne.uinteger(i)&&ne.uinteger(o)&&ne.uinteger(s))return{start:ka.create(n,i),end:ka.create(o,s)};if(ka.is(n)&&ka.is(i))return{start:n,end:i};throw new Error("Range#create called with invalid arguments[".concat(n,", ").concat(i,", ").concat(o,", ").concat(s,"]"))}e.create=t;function r(n){var i=n;return ne.objectLiteral(i)&&ka.is(i.start)&&ka.is(i.end)}e.is=r})(Lr||(Lr={}));var Dm;(function(e){function t(n,i){return{uri:n,range:i}}e.create=t;function r(n){var i=n;return ne.objectLiteral(i)&&Lr.is(i.range)&&(ne.string(i.uri)||ne.undefined(i.uri))}e.is=r})(Dm||(Dm={}));var sP;(function(e){function t(n,i,o,s){return{targetUri:n,targetRange:i,targetSelectionRange:o,originSelectionRange:s}}e.create=t;function r(n){var i=n;return ne.objectLiteral(i)&&Lr.is(i.targetRange)&&ne.string(i.targetUri)&&Lr.is(i.targetSelectionRange)&&(Lr.is(i.originSelectionRange)||ne.undefined(i.originSelectionRange))}e.is=r})(sP||(sP={}));var Uk;(function(e){function t(n,i,o,s){return{red:n,green:i,blue:o,alpha:s}}e.create=t;function r(n){var i=n;return ne.objectLiteral(i)&&ne.numberRange(i.red,0,1)&&ne.numberRange(i.green,0,1)&&ne.numberRange(i.blue,0,1)&&ne.numberRange(i.alpha,0,1)}e.is=r})(Uk||(Uk={}));var lP;(function(e){function t(n,i){return{range:n,color:i}}e.create=t;function r(n){var i=n;return ne.objectLiteral(i)&&Lr.is(i.range)&&Uk.is(i.color)}e.is=r})(lP||(lP={}));var cP;(function(e){function t(n,i,o){return{label:n,textEdit:i,additionalTextEdits:o}}e.create=t;function r(n){var i=n;return ne.objectLiteral(i)&&ne.string(i.label)&&(ne.undefined(i.textEdit)||Co.is(i))&&(ne.undefined(i.additionalTextEdits)||ne.typedArray(i.additionalTextEdits,Co.is))}e.is=r})(cP||(cP={}));var fP;(function(e){e.Comment="comment",e.Imports="imports",e.Region="region"})(fP||(fP={}));var dP;(function(e){function t(n,i,o,s,l,d){var h={startLine:n,endLine:i};return ne.defined(o)&&(h.startCharacter=o),ne.defined(s)&&(h.endCharacter=s),ne.defined(l)&&(h.kind=l),ne.defined(d)&&(h.collapsedText=d),h}e.create=t;function r(n){var i=n;return ne.objectLiteral(i)&&ne.uinteger(i.startLine)&&ne.uinteger(i.startLine)&&(ne.undefined(i.startCharacter)||ne.uinteger(i.startCharacter))&&(ne.undefined(i.endCharacter)||ne.uinteger(i.endCharacter))&&(ne.undefined(i.kind)||ne.string(i.kind))}e.is=r})(dP||(dP={}));var Gk;(function(e){function t(n,i){return{location:n,message:i}}e.create=t;function r(n){var i=n;return ne.defined(i)&&Dm.is(i.location)&&ne.string(i.message)}e.is=r})(Gk||(Gk={}));var pP;(function(e){e.Error=1,e.Warning=2,e.Information=3,e.Hint=4})(pP||(pP={}));var hP;(function(e){e.Unnecessary=1,e.Deprecated=2})(hP||(hP={}));var vP;(function(e){function t(r){var n=r;return ne.objectLiteral(n)&&ne.string(n.href)}e.is=t})(vP||(vP={}));var xm;(function(e){function t(n,i,o,s,l,d){var h={range:n,message:i};return ne.defined(o)&&(h.severity=o),ne.defined(s)&&(h.code=s),ne.defined(l)&&(h.source=l),ne.defined(d)&&(h.relatedInformation=d),h}e.create=t;function r(n){var i,o=n;return ne.defined(o)&&Lr.is(o.range)&&ne.string(o.message)&&(ne.number(o.severity)||ne.undefined(o.severity))&&(ne.integer(o.code)||ne.string(o.code)||ne.undefined(o.code))&&(ne.undefined(o.codeDescription)||ne.string((i=o.codeDescription)===null||i===void 0?void 0:i.href))&&(ne.string(o.source)||ne.undefined(o.source))&&(ne.undefined(o.relatedInformation)||ne.typedArray(o.relatedInformation,Gk.is))}e.is=r})(xm||(xm={}));var Dc;(function(e){function t(n,i){for(var o=[],s=2;s0&&(l.arguments=o),l}e.create=t;function r(n){var i=n;return ne.defined(i)&&ne.string(i.title)&&ne.string(i.command)}e.is=r})(Dc||(Dc={}));var Co;(function(e){function t(o,s){return{range:o,newText:s}}e.replace=t;function r(o,s){return{range:{start:o,end:o},newText:s}}e.insert=r;function n(o){return{range:o,newText:""}}e.del=n;function i(o){var s=o;return ne.objectLiteral(s)&&ne.string(s.newText)&&Lr.is(s.range)}e.is=i})(Co||(Co={}));var xc;(function(e){function t(n,i,o){var s={label:n};return i!==void 0&&(s.needsConfirmation=i),o!==void 0&&(s.description=o),s}e.create=t;function r(n){var i=n;return ne.objectLiteral(i)&&ne.string(i.label)&&(ne.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(ne.string(i.description)||i.description===void 0)}e.is=r})(xc||(xc={}));var Vn;(function(e){function t(r){var n=r;return ne.string(n)}e.is=t})(Vn||(Vn={}));var Cu;(function(e){function t(o,s,l){return{range:o,newText:s,annotationId:l}}e.replace=t;function r(o,s,l){return{range:{start:o,end:o},newText:s,annotationId:l}}e.insert=r;function n(o,s){return{range:o,newText:"",annotationId:s}}e.del=n;function i(o){var s=o;return Co.is(s)&&(xc.is(s.annotationId)||Vn.is(s.annotationId))}e.is=i})(Cu||(Cu={}));var Cm;(function(e){function t(n,i){return{textDocument:n,edits:i}}e.create=t;function r(n){var i=n;return ne.defined(i)&&Im.is(i.textDocument)&&Array.isArray(i.edits)}e.is=r})(Cm||(Cm={}));var Dp;(function(e){function t(n,i,o){var s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),o!==void 0&&(s.annotationId=o),s}e.create=t;function r(n){var i=n;return i&&i.kind==="create"&&ne.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||ne.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||ne.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||Vn.is(i.annotationId))}e.is=r})(Dp||(Dp={}));var xp;(function(e){function t(n,i,o,s){var l={kind:"rename",oldUri:n,newUri:i};return o!==void 0&&(o.overwrite!==void 0||o.ignoreIfExists!==void 0)&&(l.options=o),s!==void 0&&(l.annotationId=s),l}e.create=t;function r(n){var i=n;return i&&i.kind==="rename"&&ne.string(i.oldUri)&&ne.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||ne.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||ne.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||Vn.is(i.annotationId))}e.is=r})(xp||(xp={}));var Cp;(function(e){function t(n,i,o){var s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),o!==void 0&&(s.annotationId=o),s}e.create=t;function r(n){var i=n;return i&&i.kind==="delete"&&ne.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||ne.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||ne.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||Vn.is(i.annotationId))}e.is=r})(Cp||(Cp={}));var Qk;(function(e){function t(r){var n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(function(i){return ne.string(i.kind)?Dp.is(i)||xp.is(i)||Cp.is(i):Cm.is(i)}))}e.is=t})(Qk||(Qk={}));var Lm=function(){function e(t,r){this.edits=t,this.changeAnnotations=r}return e.prototype.insert=function(t,r,n){var i,o;if(n===void 0?i=Co.insert(t,r):Vn.is(n)?(o=n,i=Cu.insert(t,r,n)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(n),i=Cu.insert(t,r,o)),this.edits.push(i),o!==void 0)return o},e.prototype.replace=function(t,r,n){var i,o;if(n===void 0?i=Co.replace(t,r):Vn.is(n)?(o=n,i=Cu.replace(t,r,n)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(n),i=Cu.replace(t,r,o)),this.edits.push(i),o!==void 0)return o},e.prototype.delete=function(t,r){var n,i;if(r===void 0?n=Co.del(t):Vn.is(r)?(i=r,n=Cu.del(t,r)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(r),n=Cu.del(t,i)),this.edits.push(n),i!==void 0)return i},e.prototype.add=function(t){this.edits.push(t)},e.prototype.all=function(){return this.edits},e.prototype.clear=function(){this.edits.splice(0,this.edits.length)},e.prototype.assertChangeAnnotations=function(t){if(t===void 0)throw new Error("Text edit change is not configured to manage change annotations.")},e}(),gP=function(){function e(t){this._annotations=t===void 0?Object.create(null):t,this._counter=0,this._size=0}return e.prototype.all=function(){return this._annotations},Object.defineProperty(e.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),e.prototype.manage=function(t,r){var n;if(Vn.is(t)?n=t:(n=this.nextId(),r=t),this._annotations[n]!==void 0)throw new Error("Id ".concat(n," is already in use."));if(r===void 0)throw new Error("No annotation provided for id ".concat(n));return this._annotations[n]=r,this._size++,n},e.prototype.nextId=function(){return this._counter++,this._counter.toString()},e}(),eue=function(){function e(t){var r=this;this._textEditChanges=Object.create(null),t!==void 0?(this._workspaceEdit=t,t.documentChanges?(this._changeAnnotations=new gP(t.changeAnnotations),t.changeAnnotations=this._changeAnnotations.all(),t.documentChanges.forEach(function(n){if(Cm.is(n)){var i=new Lm(n.edits,r._changeAnnotations);r._textEditChanges[n.textDocument.uri]=i}})):t.changes&&Object.keys(t.changes).forEach(function(n){var i=new Lm(t.changes[n]);r._textEditChanges[n]=i})):this._workspaceEdit={}}return Object.defineProperty(e.prototype,"edit",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),e.prototype.getTextEditChange=function(t){if(Im.is(t)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var r={uri:t.uri,version:t.version},n=this._textEditChanges[r.uri];if(!n){var i=[],o={textDocument:r,edits:i};this._workspaceEdit.documentChanges.push(o),n=new Lm(i,this._changeAnnotations),this._textEditChanges[r.uri]=n}return n}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");var n=this._textEditChanges[t];if(!n){var i=[];this._workspaceEdit.changes[t]=i,n=new Lm(i),this._textEditChanges[t]=n}return n}},e.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new gP,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},e.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},e.prototype.createFile=function(t,r,n){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var i;xc.is(r)||Vn.is(r)?i=r:n=r;var o,s;if(i===void 0?o=Dp.create(t,n):(s=Vn.is(i)?i:this._changeAnnotations.manage(i),o=Dp.create(t,n,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},e.prototype.renameFile=function(t,r,n,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var o;xc.is(n)||Vn.is(n)?o=n:i=n;var s,l;if(o===void 0?s=xp.create(t,r,i):(l=Vn.is(o)?o:this._changeAnnotations.manage(o),s=xp.create(t,r,i,l)),this._workspaceEdit.documentChanges.push(s),l!==void 0)return l},e.prototype.deleteFile=function(t,r,n){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var i;xc.is(r)||Vn.is(r)?i=r:n=r;var o,s;if(i===void 0?o=Cp.create(t,n):(s=Vn.is(i)?i:this._changeAnnotations.manage(i),o=Cp.create(t,n,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},e}();var mP;(function(e){function t(n){return{uri:n}}e.create=t;function r(n){var i=n;return ne.defined(i)&&ne.string(i.uri)}e.is=r})(mP||(mP={}));var yP;(function(e){function t(n,i){return{uri:n,version:i}}e.create=t;function r(n){var i=n;return ne.defined(i)&&ne.string(i.uri)&&ne.integer(i.version)}e.is=r})(yP||(yP={}));var Im;(function(e){function t(n,i){return{uri:n,version:i}}e.create=t;function r(n){var i=n;return ne.defined(i)&&ne.string(i.uri)&&(i.version===null||ne.integer(i.version))}e.is=r})(Im||(Im={}));var bP;(function(e){function t(n,i,o,s){return{uri:n,languageId:i,version:o,text:s}}e.create=t;function r(n){var i=n;return ne.defined(i)&&ne.string(i.uri)&&ne.string(i.languageId)&&ne.integer(i.version)&&ne.string(i.text)}e.is=r})(bP||(bP={}));var Bk;(function(e){e.PlainText="plaintext",e.Markdown="markdown";function t(r){var n=r;return n===e.PlainText||n===e.Markdown}e.is=t})(Bk||(Bk={}));var Lp;(function(e){function t(r){var n=r;return ne.objectLiteral(r)&&Bk.is(n.kind)&&ne.string(n.value)}e.is=t})(Lp||(Lp={}));var TP;(function(e){e.Text=1,e.Method=2,e.Function=3,e.Constructor=4,e.Field=5,e.Variable=6,e.Class=7,e.Interface=8,e.Module=9,e.Property=10,e.Unit=11,e.Value=12,e.Enum=13,e.Keyword=14,e.Snippet=15,e.Color=16,e.File=17,e.Reference=18,e.Folder=19,e.EnumMember=20,e.Constant=21,e.Struct=22,e.Event=23,e.Operator=24,e.TypeParameter=25})(TP||(TP={}));var Am;(function(e){e.PlainText=1,e.Snippet=2})(Am||(Am={}));var _P;(function(e){e.Deprecated=1})(_P||(_P={}));var EP;(function(e){function t(n,i,o){return{newText:n,insert:i,replace:o}}e.create=t;function r(n){var i=n;return i&&ne.string(i.newText)&&Lr.is(i.insert)&&Lr.is(i.replace)}e.is=r})(EP||(EP={}));var SP;(function(e){e.asIs=1,e.adjustIndentation=2})(SP||(SP={}));var kP;(function(e){function t(r){var n=r;return n&&(ne.string(n.detail)||n.detail===void 0)&&(ne.string(n.description)||n.description===void 0)}e.is=t})(kP||(kP={}));var OP;(function(e){function t(r){return{label:r}}e.create=t})(OP||(OP={}));var wP;(function(e){function t(r,n){return{items:r||[],isIncomplete:!!n}}e.create=t})(wP||(wP={}));var Rm;(function(e){function t(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}e.fromPlainText=t;function r(n){var i=n;return ne.string(i)||ne.objectLiteral(i)&&ne.string(i.language)&&ne.string(i.value)}e.is=r})(Rm||(Rm={}));var NP;(function(e){function t(r){var n=r;return!!n&&ne.objectLiteral(n)&&(Lp.is(n.contents)||Rm.is(n.contents)||ne.typedArray(n.contents,Rm.is))&&(r.range===void 0||Lr.is(r.range))}e.is=t})(NP||(NP={}));var DP;(function(e){function t(r,n){return n?{label:r,documentation:n}:{label:r}}e.create=t})(DP||(DP={}));var xP;(function(e){function t(r,n){for(var i=[],o=2;o=0;v--){var y=d[v],b=o.offsetAt(y.range.start),D=o.offsetAt(y.range.end);if(D<=h)l=l.substring(0,b)+y.newText+l.substring(D,l.length);else throw new Error("Overlapping edit");h=b}return l}e.applyEdits=n;function i(o,s){if(o.length<=1)return o;var l=o.length/2|0,d=o.slice(0,l),h=o.slice(l);i(d,s),i(h,s);for(var v=0,y=0,b=0;v0&&t.push(r.length),this._lineOffsets=t}return this._lineOffsets},e.prototype.positionAt=function(t){t=Math.max(Math.min(t,this._content.length),0);var r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return ka.create(0,t);for(;nt?i=o:n=o+1}var s=n-1;return ka.create(s,t-r[s])},e.prototype.offsetAt=function(t){var r=this.getLineOffsets();if(t.line>=r.length)return this._content.length;if(t.line<0)return 0;var n=r[t.line],i=t.line+1{let i=!1;return r&&(i=r(n)),i&&t.every(o=>o.match&&!o.match(n))},e}function Cc(e,t){return{style:t,match:r=>r.kind===e}}function nt(e,t){return{style:t||"punctuation",match:r=>r.kind==="Punctuation"&&r.value===e}}var Un=Ee(ht());var Wk={Document:[gt("Definition")],Definition(e){switch(e.value){case"{":return"ShortQuery";case"query":return"Query";case"mutation":return"Mutation";case"subscription":return"Subscription";case"fragment":return Un.Kind.FRAGMENT_DEFINITION;case"schema":return"SchemaDef";case"scalar":return"ScalarDef";case"type":return"ObjectTypeDef";case"interface":return"InterfaceDef";case"union":return"UnionDef";case"enum":return"EnumDef";case"input":return"InputDef";case"extend":return"ExtendDef";case"directive":return"DirectiveDef"}},ShortQuery:["SelectionSet"],Query:[Sn("query"),hr(er("def")),hr("VariableDefinitions"),gt("Directive"),"SelectionSet"],Mutation:[Sn("mutation"),hr(er("def")),hr("VariableDefinitions"),gt("Directive"),"SelectionSet"],Subscription:[Sn("subscription"),hr(er("def")),hr("VariableDefinitions"),gt("Directive"),"SelectionSet"],VariableDefinitions:[nt("("),gt("VariableDefinition"),nt(")")],VariableDefinition:["Variable",nt(":"),"Type",hr("DefaultValue")],Variable:[nt("$","variable"),er("variable")],DefaultValue:[nt("="),"Value"],SelectionSet:[nt("{"),gt("Selection"),nt("}")],Selection(e,t){return e.value==="..."?t.match(/[\s\u00a0,]*(on\b|@|{)/,!1)?"InlineFragment":"FragmentSpread":t.match(/[\s\u00a0,]*:/,!1)?"AliasedField":"Field"},AliasedField:[er("property"),nt(":"),er("qualifier"),hr("Arguments"),gt("Directive"),hr("SelectionSet")],Field:[er("property"),hr("Arguments"),gt("Directive"),hr("SelectionSet")],Arguments:[nt("("),gt("Argument"),nt(")")],Argument:[er("attribute"),nt(":"),"Value"],FragmentSpread:[nt("..."),er("def"),gt("Directive")],InlineFragment:[nt("..."),hr("TypeCondition"),gt("Directive"),"SelectionSet"],FragmentDefinition:[Sn("fragment"),hr(zk(er("def"),[Sn("on")])),"TypeCondition",gt("Directive"),"SelectionSet"],TypeCondition:[Sn("on"),"NamedType"],Value(e){switch(e.kind){case"Number":return"NumberValue";case"String":return"StringValue";case"Punctuation":switch(e.value){case"[":return"ListValue";case"{":return"ObjectValue";case"$":return"Variable";case"&":return"NamedType"}return null;case"Name":switch(e.value){case"true":case"false":return"BooleanValue"}return e.value==="null"?"NullValue":"EnumValue"}},NumberValue:[Cc("Number","number")],StringValue:[{style:"string",match:e=>e.kind==="String",update(e,t){t.value.startsWith('"""')&&(e.inBlockstring=!t.value.slice(3).endsWith('"""'))}}],BooleanValue:[Cc("Name","builtin")],NullValue:[Cc("Name","keyword")],EnumValue:[er("string-2")],ListValue:[nt("["),gt("Value"),nt("]")],ObjectValue:[nt("{"),gt("ObjectField"),nt("}")],ObjectField:[er("attribute"),nt(":"),"Value"],Type(e){return e.value==="["?"ListType":"NonNullType"},ListType:[nt("["),"Type",nt("]"),hr(nt("!"))],NonNullType:["NamedType",hr(nt("!"))],NamedType:[lX("atom")],Directive:[nt("@","meta"),er("meta"),hr("Arguments")],DirectiveDef:[Sn("directive"),nt("@","meta"),er("meta"),hr("ArgumentsDef"),Sn("on"),gt("DirectiveLocation",nt("|"))],InterfaceDef:[Sn("interface"),er("atom"),hr("Implements"),gt("Directive"),nt("{"),gt("FieldDef"),nt("}")],Implements:[Sn("implements"),gt("NamedType",nt("&"))],DirectiveLocation:[er("string-2")],SchemaDef:[Sn("schema"),gt("Directive"),nt("{"),gt("OperationTypeDef"),nt("}")],OperationTypeDef:[er("keyword"),nt(":"),er("atom")],ScalarDef:[Sn("scalar"),er("atom"),gt("Directive")],ObjectTypeDef:[Sn("type"),er("atom"),hr("Implements"),gt("Directive"),nt("{"),gt("FieldDef"),nt("}")],FieldDef:[er("property"),hr("ArgumentsDef"),nt(":"),"Type",gt("Directive")],ArgumentsDef:[nt("("),gt("InputValueDef"),nt(")")],InputValueDef:[er("attribute"),nt(":"),"Type",hr("DefaultValue"),gt("Directive")],UnionDef:[Sn("union"),er("atom"),gt("Directive"),nt("="),gt("UnionMember",nt("|"))],UnionMember:["NamedType"],EnumDef:[Sn("enum"),er("atom"),gt("Directive"),nt("{"),gt("EnumValueDef"),nt("}")],EnumValueDef:[er("string-2"),gt("Directive")],InputDef:[Sn("input"),er("atom"),gt("Directive"),nt("{"),gt("InputValueDef"),nt("}")],ExtendDef:[Sn("extend"),"ExtensionDefinition"],ExtensionDefinition(e){switch(e.value){case"schema":return Un.Kind.SCHEMA_EXTENSION;case"scalar":return Un.Kind.SCALAR_TYPE_EXTENSION;case"type":return Un.Kind.OBJECT_TYPE_EXTENSION;case"interface":return Un.Kind.INTERFACE_TYPE_EXTENSION;case"union":return Un.Kind.UNION_TYPE_EXTENSION;case"enum":return Un.Kind.ENUM_TYPE_EXTENSION;case"input":return Un.Kind.INPUT_OBJECT_TYPE_EXTENSION}},[Un.Kind.SCHEMA_EXTENSION]:["SchemaDef"],[Un.Kind.SCALAR_TYPE_EXTENSION]:["ScalarDef"],[Un.Kind.OBJECT_TYPE_EXTENSION]:["ObjectTypeDef"],[Un.Kind.INTERFACE_TYPE_EXTENSION]:["InterfaceDef"],[Un.Kind.UNION_TYPE_EXTENSION]:["UnionDef"],[Un.Kind.ENUM_TYPE_EXTENSION]:["EnumDef"],[Un.Kind.INPUT_OBJECT_TYPE_EXTENSION]:["InputDef"]};function Sn(e){return{style:"keyword",match:t=>t.kind==="Name"&&t.value===e}}function er(e){return{style:e,match:t=>t.kind==="Name",update(t,r){t.name=r.value}}}function lX(e){return{style:e,match:t=>t.kind==="Name",update(t,r){var n;((n=t.prevState)===null||n===void 0?void 0:n.prevState)&&(t.name=r.value,t.prevState.prevState.type=r.value)}}}var rF=Ee(ht()),cX={ALIASED_FIELD:"AliasedField",ARGUMENTS:"Arguments",SHORT_QUERY:"ShortQuery",QUERY:"Query",MUTATION:"Mutation",SUBSCRIPTION:"Subscription",TYPE_CONDITION:"TypeCondition",INVALID:"Invalid",COMMENT:"Comment",SCHEMA_DEF:"SchemaDef",SCALAR_DEF:"ScalarDef",OBJECT_TYPE_DEF:"ObjectTypeDef",OBJECT_VALUE:"ObjectValue",LIST_VALUE:"ListValue",INTERFACE_DEF:"InterfaceDef",UNION_DEF:"UnionDef",ENUM_DEF:"EnumDef",ENUM_VALUE:"EnumValue",FIELD_DEF:"FieldDef",INPUT_DEF:"InputDef",INPUT_VALUE_DEF:"InputValueDef",ARGUMENTS_DEF:"ArgumentsDef",EXTEND_DEF:"ExtendDef",EXTENSION_DEFINITION:"ExtensionDefinition",DIRECTIVE_DEF:"DirectiveDef",IMPLEMENTS:"Implements",VARIABLE_DEFINITIONS:"VariableDefinitions",TYPE:"Type"},nF=Object.assign(Object.assign({},rF.Kind),cX);var Sue=[it.Kind.SCHEMA_DEFINITION,it.Kind.OPERATION_TYPE_DEFINITION,it.Kind.SCALAR_TYPE_DEFINITION,it.Kind.OBJECT_TYPE_DEFINITION,it.Kind.INTERFACE_TYPE_DEFINITION,it.Kind.UNION_TYPE_DEFINITION,it.Kind.ENUM_TYPE_DEFINITION,it.Kind.INPUT_OBJECT_TYPE_DEFINITION,it.Kind.DIRECTIVE_DEFINITION,it.Kind.SCHEMA_EXTENSION,it.Kind.SCALAR_TYPE_EXTENSION,it.Kind.OBJECT_TYPE_EXTENSION,it.Kind.INTERFACE_TYPE_EXTENSION,it.Kind.UNION_TYPE_EXTENSION,it.Kind.ENUM_TYPE_EXTENSION,it.Kind.INPUT_OBJECT_TYPE_EXTENSION];var iF;(function(e){e.TYPE_SYSTEM="TYPE_SYSTEM",e.EXECUTABLE="EXECUTABLE"})(iF||(iF={}));var Mm=Ee(ht()),Zk=Ee(Xk());var qm=(e,t)=>{if(!t)return[];let r=new Map,n=new Set;(0,Mm.visit)(e,{FragmentDefinition(s){r.set(s.name.value,!0)},FragmentSpread(s){n.has(s.name.value)||n.add(s.name.value)}});let i=new Set;for(let s of n)!r.has(s)&&t.has(s)&&i.add((0,Zk.default)(t.get(s)));let o=[];for(let s of i)(0,Mm.visit)(s,{FragmentSpread(l){!n.has(l.name.value)&&t.get(l.name.value)&&(i.add((0,Zk.default)(t.get(l.name.value))),n.add(l.name.value))}}),r.has(s.name.value)||o.push(s);return o};var Lc=Ee(ht());function Vm(e,t){let r=Object.create(null);for(let n of t.definitions)if(n.kind==="OperationDefinition"){let{variableDefinitions:i}=n;if(i)for(let{variable:o,type:s}of i){let l=(0,Lc.typeFromAST)(e,s);l?r[o.name.value]=l:s.kind===Lc.Kind.NAMED_TYPE&&s.name.value==="Float"&&(r[o.name.value]=Lc.GraphQLFloat)}}return r}var Um=Ee(ht());function $k(e,t){let r=t?Vm(t,e):void 0,n=[];return(0,Um.visit)(e,{OperationDefinition(i){n.push(i)}}),{variableToType:r,operations:n}}function js(e,t){if(!!t)try{let r=(0,Um.parse)(t);return Object.assign(Object.assign({},$k(r,e)),{documentAST:r})}catch(r){return}}var Ip={Error:"Error",Warning:"Warning",Information:"Information",Hint:"Hint"},bX={[Ip.Error]:1,[Ip.Warning]:2,[Ip.Information]:3,[Ip.Hint]:4};var Lo=Ee(zt()),kX=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),lF=function(e){kX(t,e);function t(r){var n=e.call(this,r)||this;return n._onClick=function(){n.props.isRunning?n.props.onStop():n.props.onRun()},n._onOptionSelected=function(i){n.setState({optionsOpen:!1}),n.props.onRun(i.name&&i.name.value)},n._onOptionsOpen=function(i){var o=!0,s=i.currentTarget;n.setState({highlight:null,optionsOpen:!0});var l=function(d){var h;if(o&&d.target===s)o=!1;else{document.removeEventListener("mouseup",l),l=null;var v=d.currentTarget&&((h=s.parentNode)===null||h===void 0?void 0:h.compareDocumentPosition(d.currentTarget))&&Node.DOCUMENT_POSITION_CONTAINED_BY;v||n.setState({optionsOpen:!1})}};document.addEventListener("mouseup",l)},n.state={optionsOpen:!1,highlight:null},n}return t.prototype.render=function(){var r=this,n=this.props.operations||[],i=this.state.optionsOpen,o=n&&n.length>1,s=null;if(o&&i){var l=this.state.highlight;s=Lo.default.createElement("ul",{className:"execute-options"},n.map(function(y,b){var D=y.name?y.name.value:"";return Lo.default.createElement("li",{key:D+"-"+b,className:y===l?"selected":void 0,onMouseOver:function(){return r.setState({highlight:y})},onMouseOut:function(){return r.setState({highlight:null})},onMouseUp:function(){return r._onOptionSelected(y)}},D)}))}var d;(this.props.isRunning||!o)&&(d=this._onClick);var h=function(){};!this.props.isRunning&&o&&!i&&(h=this._onOptionsOpen);var v=this.props.isRunning?Lo.default.createElement("path",{d:"M 10 10 L 23 10 L 23 23 L 10 23 z"}):Lo.default.createElement("path",{d:"M 11 9 L 24 16 L 11 23 z"});return Lo.default.createElement("div",{className:"execute-button-wrap"},Lo.default.createElement("button",{type:"button",className:"execute-button",onMouseDown:h,onClick:d,title:"Execute Query (Ctrl-Enter)"},Lo.default.createElement("svg",{width:"34",height:"34"},v)),s)},t}(Lo.default.Component);var Ap=Ee(zt()),OX=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();function cF(e){if(e.type==="string"){var t=e.string.slice(1).slice(0,-1).trim();try{var r=window.location;return new URL(t,r.protocol+"//"+r.host)}catch(n){return}}}function wX(e){return/(bmp|gif|jpeg|jpg|png|svg)$/.test(e.pathname)}var fF=function(e){OX(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r._node=null,r.state={width:null,height:null,src:null,mime:null},r}return t.shouldRender=function(r){var n=cF(r);return n?wX(n):!1},t.prototype.componentDidMount=function(){this._updateMetadata()},t.prototype.componentDidUpdate=function(){this._updateMetadata()},t.prototype.render=function(){var r=this,n,i=null;if(this.state.width!==null&&this.state.height!==null){var o=this.state.width+"x"+this.state.height;this.state.mime!==null&&(o+=" "+this.state.mime),i=Ap.default.createElement("div",null,o)}return Ap.default.createElement("div",null,Ap.default.createElement("img",{onLoad:function(){return r._updateMetadata()},ref:function(s){r._node=s},src:(n=cF(this.props.token))===null||n===void 0?void 0:n.href}),i)},t.prototype._updateMetadata=function(){var r=this;if(!!this._node){var n=this._node.naturalWidth,i=this._node.naturalHeight,o=this._node.src;o!==this.state.src&&(this.setState({src:o}),fetch(o,{method:"HEAD"}).then(function(s){r.setState({mime:s.headers.get("Content-Type")})})),(n!==this.state.width||i!==this.state.height)&&this.setState({height:i,width:n})}},t}(Ap.default.Component);var tO=Ee(zt()),NX=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),Lu=function(e){NX(t,e);function t(r){var n=e.call(this,r)||this;return n.handleClick=function(){try{n.props.onClick(),n.setState({error:null})}catch(i){n.setState({error:i})}},n.state={error:null},n}return t.prototype.render=function(){var r=this.state.error;return tO.default.createElement("button",{className:"toolbar-button"+(r?" error":""),onClick:this.handleClick,title:r?r.message:this.props.title,"aria-invalid":r?"true":"false"},this.props.label)},t}(tO.default.Component);var dF=Ee(zt());function rO(e){var t=e.children;return dF.default.createElement("div",{className:"toolbar-button-group"},t)}var Ps=Ee(zt()),DX=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),nO=function(e){DX(t,e);function t(r){var n=e.call(this,r)||this;return n._node=null,n._listener=null,n.handleOpen=function(i){aO(i),n.setState({visible:!0}),n._subscribe()},n.state={visible:!1},n}return t.prototype.componentWillUnmount=function(){this._release()},t.prototype.render=function(){var r=this,n=this.state.visible;return Ps.default.createElement("a",{className:"toolbar-menu toolbar-button",onClick:this.handleOpen.bind(this),onMouseDown:aO,ref:function(i){i&&(r._node=i)},title:this.props.title},this.props.label,Ps.default.createElement("svg",{width:"14",height:"8"},Ps.default.createElement("path",{fill:"#666",d:"M 5 1.5 L 14 1.5 L 9.5 7 z"})),Ps.default.createElement("ul",{className:"toolbar-menu-items"+(n?" open":"")},this.props.children))},t.prototype._subscribe=function(){this._listener||(this._listener=this.handleClick.bind(this),document.addEventListener("click",this._listener))},t.prototype._release=function(){this._listener&&(document.removeEventListener("click",this._listener),this._listener=null)},t.prototype.handleClick=function(r){this._node!==r.target&&(r.preventDefault(),this.setState({visible:!1}),this._release())},t}(Ps.default.Component);var iO=function(e){var t=e.onSelect,r=e.title,n=e.label;return Ps.default.createElement("li",{onMouseOver:function(i){i.currentTarget.className="hover"},onMouseOut:function(i){i.currentTarget.className=""},onMouseDown:aO,onMouseUp:t,title:r},n)};function aO(e){e.preventDefault()}var yw=Ee(zt()),vG=Ee(ry());var U$=Array.from({length:11},function(e,t){return String.fromCharCode(8192+t)}).concat(["\u2028","\u2029","\u202F","\xA0"]),G$=new RegExp("["+U$.join("")+"]","g");function mV(e){return e.replace(G$," ")}var ny=Ee(ht()),TV=Ee(bV()),_V=Ee(ry()),EV=new _V.default;function Iu(e,t,r){Promise.resolve().then(()=>Ee(Wt())).then(function(n){var i=n.default,o,s;i.on(t,"select",function(l,d){if(!o){var h=d.parentNode;o=document.createElement("div"),o.className="CodeMirror-hint-information",h.appendChild(o),s=document.createElement("div"),s.className="CodeMirror-hint-deprecation",h.appendChild(s);var v;h.addEventListener("DOMNodeRemoved",v=function(_){_.target===h&&(h.removeEventListener("DOMNodeRemoved",v),o=null,s=null,v=null)})}var y=l.description?EV.render(l.description):"Self descriptive.",b=l.type?''+RO(l.type)+"":"";if(o.innerHTML='
'+(y.slice(0,3)==="

"?"

"+b+y.slice(3):b+y)+"

",l&&s&&l.deprecationReason){var D=l.deprecationReason?EV.render(l.deprecationReason):"";s.innerHTML='Deprecated'+D,s.style.display="block"}else s&&(s.style.display="none");r&&r(o)})})}function RO(e){return e instanceof ny.GraphQLNonNull?RO(e.ofType)+"!":e instanceof ny.GraphQLList?"["+RO(e.ofType)+"]":''+(0,TV.default)(e.name)+""}var Io,SV=!1;typeof window=="object"&&(SV=window.navigator.platform==="MacIntel");var K$=(Io={},Io[SV?"Cmd-F":"Ctrl-F"]="findPersistent",Io["Cmd-G"]="findPersistent",Io["Ctrl-G"]="findPersistent",Io["Ctrl-Left"]="goSubwordLeft",Io["Ctrl-Right"]="goSubwordRight",Io["Alt-Left"]="goGroupLeft",Io["Alt-Right"]="goGroupRight",Io),Au=K$;var H$=function(e,t,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function l(v){try{h(n.next(v))}catch(y){s(y)}}function d(v){try{h(n.throw(v))}catch(y){s(y)}}function h(v){v.done?o(v.value):i(v.value).then(l,d)}h((n=n.apply(e,t||[])).next())})},z$=function(e,t){var r={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},n,i,o,s;return s={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function l(h){return function(v){return d([h,v])}}function d(h){if(n)throw new TypeError("Generator is already executing.");for(;r;)try{if(n=1,i&&(o=h[0]&2?i.return:h[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,h[1])).done)return o;switch(i=0,o&&(h=[h[0]&2,o.value]),h[0]){case 0:case 1:o=h;break;case 4:return r.label++,{value:h[1],done:!1};case 5:r.label++,i=h[1],h=[0];continue;case 7:h=r.ops.pop(),r.trys.pop();continue;default:if(o=r.trys,!(o=o.length>0&&o[o.length-1])&&(h[0]===6||h[0]===2)){r=0;continue}if(h[0]===3&&(!o||h[1]>o[0]&&h[1]Ee(jO())),Promise.resolve().then(()=>Ee(PO())),Promise.resolve().then(()=>Ee(CV())),Promise.resolve().then(()=>Ee(FO())),Promise.resolve().then(()=>Ee(MO())),Promise.resolve().then(()=>Ee(VV())),Promise.resolve().then(()=>Ee(qp())),Promise.resolve().then(()=>Ee(qO())),Promise.resolve().then(()=>Ee(Vp())),Promise.resolve().then(()=>Ee(VO()))];function Ru(e,t){return H$(this,void 0,void 0,function(){var r,n;return z$(this,function(i){switch(i.label){case 0:return[4,Promise.resolve().then(()=>Ee(Wt()))];case 1:return r=i.sent().default,n=(t==null?void 0:t.useCommonAddons)===!1?e:W$.concat(e),[4,Promise.all(n.map(function(o){return o}))];case 2:return i.sent(),[2,r]}})})}var nre=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),Oy=function(){return Oy=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])&&(h[0]===6||h[0]===2)){r=0;continue}if(h[0]===3&&(!o||h[1]>o[0]&&h[1]Ee(XV())),Promise.resolve().then(()=>Ee(UO())),Promise.resolve().then(()=>Ee(YU())),Promise.resolve().then(()=>Ee(XU())),Promise.resolve().then(()=>Ee(aG())),Promise.resolve().then(()=>Ee(cG())),Promise.resolve().then(()=>Ee(hG()))]},n._onKeyUp=function(i,o){ure.test(o.key)&&n.editor&&n.editor.execCommand("autocomplete")},n._onEdit=function(){!n.ignoreChangeEvent&&n.editor&&(n.cachedValue=n.editor.getValue(),n.props.onEdit&&n.props.onEdit(n.cachedValue))},n._onHasCompletion=function(i,o){Iu(i,o,n.props.onHintInformationRender)},n.cachedValue=r.value||"",n}return t.prototype.componentDidMount=function(){var r=this;this.initializeEditor().then(function(n){n&&(n.on("change",r._onEdit),n.on("keyup",r._onKeyUp),n.on("hasCompletion",r._onHasCompletion),n.on("beforeChange",r._onBeforeChange))}).catch(console.error)},t.prototype.componentDidUpdate=function(r){this.ignoreChangeEvent=!0;var n=!1;this.props.schema!==r.schema&&this.editor&&(this.editor.options.lint.schema=this.props.schema,this.editor.options.hintOptions.schema=this.props.schema,this.editor.options.info.schema=this.props.schema,this.editor.options.jump.schema=this.props.schema,n=!0),this.props.externalFragments!==r.externalFragments&&this.editor&&(this.editor.options.lint.externalFragments=this.props.externalFragments,this.editor.options.hintOptions.externalFragments=this.props.externalFragments,n=!0),n&&this.CodeMirror.signal(this.editor,"change",this.editor),this.props.value!==r.value&&this.props.value!==this.cachedValue&&this.editor&&(this.cachedValue=this.props.value,this.editor.setValue(this.props.value)),this.ignoreChangeEvent=!1},t.prototype.componentWillUnmount=function(){this.editor&&(this.editor.off("change",this._onEdit),this.editor.off("keyup",this._onKeyUp),this.editor.off("hasCompletion",this._onHasCompletion))},t.prototype.render=function(){var r=this;return yw.default.createElement("section",{className:"query-editor","aria-label":"Query Editor",ref:function(n){r._node=n}})},t.prototype.initializeEditor=function(){var r,n,i,o;return ire(this,void 0,void 0,function(){var s,l,d,h=this;return are(this,function(v){switch(v.label){case 0:return l=this,[4,Ru(this.addonModules())];case 1:return s=l.CodeMirror=v.sent(),d=this.editor=s(this._node,{value:(r=this.props.value)!==null&&r!==void 0?r:"",lineNumbers:!0,tabSize:2,foldGutter:{minFoldSize:4},mode:"graphql",theme:this.props.editorTheme||"graphiql",keyMap:"sublime",autoCloseBrackets:!0,matchBrackets:!0,showCursorWhenSelecting:!0,readOnly:this.props.readOnly?"nocursor":!1,lint:{schema:this.props.schema,validationRules:(n=this.props.validationRules)!==null&&n!==void 0?n:null,externalFragments:(i=this.props)===null||i===void 0?void 0:i.externalFragments},hintOptions:{schema:this.props.schema,closeOnUnfocus:!1,completeSingle:!1,container:this._node,externalFragments:(o=this.props)===null||o===void 0?void 0:o.externalFragments},info:{schema:this.props.schema,renderDescription:function(y){return ore.render(y)},onClick:function(y){return h.props.onClickReference&&h.props.onClickReference(y)}},jump:{schema:this.props.schema,onClick:function(y){return h.props.onClickReference&&h.props.onClickReference(y)}},gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],extraKeys:Oy(Oy({"Cmd-Space":function(){return d.showHint({completeSingle:!0,container:h._node})},"Ctrl-Space":function(){return d.showHint({completeSingle:!0,container:h._node})},"Alt-Space":function(){return d.showHint({completeSingle:!0,container:h._node})},"Shift-Space":function(){return d.showHint({completeSingle:!0,container:h._node})},"Shift-Alt-Space":function(){return d.showHint({completeSingle:!0,container:h._node})},"Cmd-Enter":function(){h.props.onRunQuery&&h.props.onRunQuery()},"Ctrl-Enter":function(){h.props.onRunQuery&&h.props.onRunQuery()},"Shift-Ctrl-C":function(){h.props.onCopyQuery&&h.props.onCopyQuery()},"Shift-Ctrl-P":function(){h.props.onPrettifyQuery&&h.props.onPrettifyQuery()},"Shift-Ctrl-F":function(){h.props.onPrettifyQuery&&h.props.onPrettifyQuery()},"Shift-Ctrl-M":function(){h.props.onMergeQuery&&h.props.onMergeQuery()}},Au),{"Cmd-S":function(){h.props.onRunQuery},"Ctrl-S":function(){h.props.onRunQuery}})}),[2,d]}})})},t.prototype.getCodeMirror=function(){return this.editor},t.prototype.getClientHeight=function(){return this._node&&this._node.clientHeight},t.prototype._onBeforeChange=function(r,n){if(n.origin==="paste"){var i=n.text.map(mV);n.update(n.from,n.to,i)}},t}(yw.default.Component);var Ow=Ee(zt());var Rre=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),kw=function(){return kw=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])&&(h[0]===6||h[0]===2)){r=0;continue}if(h[0]===3&&(!o||h[1]>o[0]&&h[1]Ee(yG())),Promise.resolve().then(()=>Ee(wG())),Promise.resolve().then(()=>Ee(DG()))]},n._onKeyUp=function(i,o){var s=o.keyCode;!n.editor||(s>=65&&s<=90||!o.shiftKey&&s>=48&&s<=57||o.shiftKey&&s===189||o.shiftKey&&s===222)&&n.editor.execCommand("autocomplete")},n._onEdit=function(){!n.editor||n.ignoreChangeEvent||(n.cachedValue=n.editor.getValue(),n.props.onEdit&&n.props.onEdit(n.cachedValue))},n._onHasCompletion=function(i,o){Iu(i,o,n.props.onHintInformationRender)},n.cachedValue=r.value||"",n}return t.prototype.componentDidMount=function(){var r=this;this.initializeEditor().then(function(n){n.on("change",r._onEdit),n.on("keyup",r._onKeyUp),n.on("hasCompletion",r._onHasCompletion)}).catch(console.error)},t.prototype.componentDidUpdate=function(r){if(!!this.editor&&!!this.CodeMirror){if(this.ignoreChangeEvent=!0,this.props.variableToType!==r.variableToType&&(this.editor.options.lint.variableToType=this.props.variableToType,this.editor.options.hintOptions.variableToType=this.props.variableToType,this.CodeMirror.signal(this.editor,"change",this.editor)),this.props.value!==r.value&&this.props.value!==this.cachedValue){var n=this.props.value||"";this.cachedValue=n,this.editor.setValue(n)}this.ignoreChangeEvent=!1}},t.prototype.componentWillUnmount=function(){!this.editor||(this.editor.off("change",this._onEdit),this.editor.off("keyup",this._onKeyUp),this.editor.off("hasCompletion",this._onHasCompletion),this.editor=null)},t.prototype.render=function(){var r=this;return Ow.default.createElement("div",{className:"codemirrorWrap",style:{position:this.props.active?"relative":"absolute",visibility:this.props.active?"visible":"hidden"},ref:function(n){r._node=n}})},t.prototype.initializeEditor=function(){return jre(this,void 0,void 0,function(){var r,n,i=this;return Pre(this,function(o){switch(o.label){case 0:return r=this,[4,Ru(this.addonModules())];case 1:return r.CodeMirror=o.sent(),n=this.editor=this.CodeMirror(this._node,{value:this.props.value||"",lineNumbers:!0,tabSize:2,mode:"graphql-variables",theme:this.props.editorTheme||"graphiql",keyMap:"sublime",autoCloseBrackets:!0,matchBrackets:!0,showCursorWhenSelecting:!0,readOnly:this.props.readOnly?"nocursor":!1,foldGutter:{minFoldSize:4},lint:{variableToType:this.props.variableToType},hintOptions:{variableToType:this.props.variableToType,closeOnUnfocus:!1,completeSingle:!1,container:this._node},gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],extraKeys:kw({"Cmd-Space":function(){return i.editor.showHint({completeSingle:!1,container:i._node})},"Ctrl-Space":function(){return i.editor.showHint({completeSingle:!1,container:i._node})},"Alt-Space":function(){return i.editor.showHint({completeSingle:!1,container:i._node})},"Shift-Space":function(){return i.editor.showHint({completeSingle:!1,container:i._node})},"Cmd-Enter":function(){i.props.onRunQuery&&i.props.onRunQuery()},"Ctrl-Enter":function(){i.props.onRunQuery&&i.props.onRunQuery()},"Shift-Ctrl-P":function(){i.props.onPrettifyQuery&&i.props.onPrettifyQuery()},"Shift-Ctrl-M":function(){i.props.onMergeQuery&&i.props.onMergeQuery()}},Au)}),[2,n]}})})},t.prototype.getCodeMirror=function(){return this.editor},t.prototype.getClientHeight=function(){return this._node&&this._node.clientHeight},t}(Ow.default.Component);var Nw=Ee(zt());var Fre=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),ww=function(){return ww=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])&&(h[0]===6||h[0]===2)){r=0;continue}if(h[0]===3&&(!o||h[1]>o[0]&&h[1]Ee(LG()))]},n._onKeyUp=function(i,o){var s=o.keyCode;!n.editor||(s>=65&&s<=90||!o.shiftKey&&s>=48&&s<=57||o.shiftKey&&s===189||o.shiftKey&&s===222)&&n.editor.execCommand("autocomplete")},n._onEdit=function(){!n.editor||n.ignoreChangeEvent||(n.cachedValue=n.editor.getValue(),n.props.onEdit&&n.props.onEdit(n.cachedValue))},n._onHasCompletion=function(i,o){Iu(i,o,n.props.onHintInformationRender)},n.cachedValue=r.value||"",n}return t.prototype.componentDidMount=function(){var r=this;this.initializeEditor().then(function(n){n.on("change",r._onEdit),n.on("keyup",r._onKeyUp),n.on("hasCompletion",r._onHasCompletion)}).catch(console.error)},t.prototype.componentDidUpdate=function(r){if(!!this.editor){if(this.ignoreChangeEvent=!0,this.props.value!==r.value&&this.props.value!==this.cachedValue){var n=this.props.value||"";this.cachedValue=n,this.editor.setValue(n)}this.ignoreChangeEvent=!1}},t.prototype.componentWillUnmount=function(){!this.editor||(this.editor.off("change",this._onEdit),this.editor.off("keyup",this._onKeyUp),this.editor.off("hasCompletion",this._onHasCompletion),this.editor=null)},t.prototype.render=function(){var r=this;return Nw.default.createElement("div",{className:"codemirrorWrap",style:{position:this.props.active?"relative":"absolute",visibility:this.props.active?"visible":"hidden"},ref:function(n){r._node=n}})},t.prototype.initializeEditor=function(){return Mre(this,void 0,void 0,function(){var r,n,i=this;return qre(this,function(o){switch(o.label){case 0:return r=this,[4,Ru(this.addonModules())];case 1:return r.CodeMirror=o.sent(),n=this.editor=this.CodeMirror(this._node,{value:this.props.value||"",lineNumbers:!0,tabSize:2,mode:{name:"javascript",json:!0},theme:this.props.editorTheme||"graphiql",keyMap:"sublime",autoCloseBrackets:!0,matchBrackets:!0,showCursorWhenSelecting:!0,readOnly:this.props.readOnly?"nocursor":!1,foldGutter:{minFoldSize:4},gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],extraKeys:ww({"Cmd-Space":function(){return i.editor.showHint({completeSingle:!1,container:i._node})},"Ctrl-Space":function(){return i.editor.showHint({completeSingle:!1,container:i._node})},"Alt-Space":function(){return i.editor.showHint({completeSingle:!1,container:i._node})},"Shift-Space":function(){return i.editor.showHint({completeSingle:!1,container:i._node})},"Cmd-Enter":function(){i.props.onRunQuery&&i.props.onRunQuery()},"Ctrl-Enter":function(){i.props.onRunQuery&&i.props.onRunQuery()},"Shift-Ctrl-P":function(){i.props.onPrettifyQuery&&i.props.onPrettifyQuery()},"Shift-Ctrl-M":function(){i.props.onMergeQuery&&i.props.onMergeQuery()}},Au)}),[2,n]}})})},t.prototype.getCodeMirror=function(){return this.editor},t.prototype.getClientHeight=function(){return this._node&&this._node.clientHeight},t}(Nw.default.Component);var Yc=Ee(zt()),xw=Ee(a_());var Kre=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),Hre=function(e,t,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function l(v){try{h(n.next(v))}catch(y){s(y)}}function d(v){try{h(n.throw(v))}catch(y){s(y)}}function h(v){v.done?o(v.value):i(v.value).then(l,d)}h((n=n.apply(e,t||[])).next())})},zre=function(e,t){var r={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},n,i,o,s;return s={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function l(h){return function(v){return d([h,v])}}function d(h){if(n)throw new TypeError("Generator is already executing.");for(;r;)try{if(n=1,i&&(o=h[0]&2?i.return:h[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,h[1])).done)return o;switch(i=0,o&&(h=[h[0]&2,o.value]),h[0]){case 0:case 1:o=h;break;case 4:return r.label++,{value:h[1],done:!1};case 5:r.label++,i=h[1],h=[0];continue;case 7:h=r.ops.pop(),r.trys.pop();continue;default:if(o=r.trys,!(o=o.length>0&&o[o.length-1])&&(h[0]===6||h[0]===2)){r=0;continue}if(h[0]===3&&(!o||h[1]>o[0]&&h[1]Ee(MO())),Promise.resolve().then(()=>Ee(FO())),Promise.resolve().then(()=>Ee(Vp())),Promise.resolve().then(()=>Ee(UO())),Promise.resolve().then(()=>Ee(qp())),Promise.resolve().then(()=>Ee(qO())),Promise.resolve().then(()=>Ee(VO())),Promise.resolve().then(()=>Ee(IG()))]},r}return t.prototype.componentDidMount=function(){this.initializeEditor()},t.prototype.shouldComponentUpdate=function(r){return this.props.value!==r.value},t.prototype.componentDidUpdate=function(){this.viewer&&this.viewer.setValue(this.props.value||"")},t.prototype.componentWillUnmount=function(){this.viewer=null},t.prototype.render=function(){var r=this;return Yc.default.createElement("section",{className:"result-window","aria-label":"Result Window","aria-live":"polite","aria-atomic":"true",ref:function(n){n&&(r.props.registerRef(n),r._node=n)}})},t.prototype.initializeEditor=function(){return Hre(this,void 0,void 0,function(){var r,n,i,o;return zre(this,function(s){switch(s.label){case 0:return[4,Ru(this.allAddons(),{useCommonAddons:!1})];case 1:return r=s.sent(),n=this.props.ResultsTooltip,i=this.props.ImagePreview,n||i?[4,Promise.resolve().then(()=>Ee(gw()))]:[3,3];case 2:s.sent(),o=document.createElement("div"),r.registerHelper("info","graphql-results",function(l,d,h,v){var y=[];return n&&y.push(Yc.default.createElement(n,{pos:v})),i&&typeof i.shouldRender=="function"&&i.shouldRender(l)&&y.push(Yc.default.createElement(i,{token:l})),y.length?(xw.default.render(Yc.default.createElement("div",null,y),o),o):(xw.default.unmountComponentAtNode(o),null)}),s.label=3;case 3:return this.viewer=r(this._node,{lineWrapping:!0,value:this.props.value||"",readOnly:!0,theme:this.props.editorTheme||"graphiql",mode:"graphql-results",keyMap:"sublime",foldGutter:{minFoldSize:4},gutters:["CodeMirror-foldgutter"],info:Boolean(this.props.ResultsTooltip||this.props.ImagePreview),extraKeys:Au}),[2]}})})},t.prototype.getCodeMirror=function(){return this.viewer},t.prototype.getClientHeight=function(){return this._node&&this._node.clientHeight},t}(Yc.default.Component);var wn=Ee(zt()),Mw=Ee(ht());var Yt=Ee(zt());var ih=Ee(zt());var Py=Ee(zt()),Fy=Ee(ht());function ni(e){var t=e.onClick?e.onClick:function(){return null};return Lw(e.type,t)}function Lw(e,t){return e instanceof Fy.GraphQLNonNull?Py.default.createElement("span",null,Lw(e.ofType,t),"!"):e instanceof Fy.GraphQLList?Py.default.createElement("span",null,"[",Lw(e.ofType,t),"]"):Py.default.createElement("a",{className:"type-name",onClick:function(r){r.preventDefault(),t(e,r)},href:"#"},e==null?void 0:e.name)}var Iw=Ee(zt()),My=Ee(ht()),Wre=function(e){return e?(0,My.print)(e):""};function nh(e){var t=e.field;return"defaultValue"in t&&t.defaultValue!==void 0?Iw.default.createElement("span",null," = ",Iw.default.createElement("span",{className:"arg-default-value"},Wre((0,My.astFromValue)(t.defaultValue,t.type)))):null}function qu(e){var t=e.arg,r=e.onClickType,n=e.showDefaultValue;return ih.default.createElement("span",{className:"arg"},ih.default.createElement("span",{className:"arg-name"},t.name),": ",ih.default.createElement(ni,{type:t.type,onClick:r}),n!==!1&&ih.default.createElement(nh,{field:t}))}var AG=Ee(zt());function Aw(e){var t=e.directive;return AG.default.createElement("span",{className:"doc-category-item",id:t.name.value},"@",t.name.value)}var Rw=Ee(zt()),RG=Ee(ry()),Yre=new RG.default({breaks:!0,linkify:!0});function Bn(e){var t=e.markdown,r=e.className;return t?Rw.default.createElement("div",{className:r,dangerouslySetInnerHTML:{__html:Yre.render(t)}}):Rw.default.createElement("div",null)}var Jre=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],s;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){s={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return o};function jw(e){var t=e.field,r=e.onClickType,n=Jre(Yt.default.useState(!1),2),i=n[0],o=n[1],s,l;if(t&&"args"in t&&t.args.length>0){s=Yt.default.createElement("div",{id:"doc-args",className:"doc-category"},Yt.default.createElement("div",{className:"doc-category-title"},"arguments"),t.args.filter(function(v){return!v.deprecationReason}).map(function(v){return Yt.default.createElement("div",{key:v.name,className:"doc-category-item"},Yt.default.createElement("div",null,Yt.default.createElement(qu,{arg:v,onClickType:r})),Yt.default.createElement(Bn,{className:"doc-value-description",markdown:v.description}),v&&"deprecationReason"in v&&Yt.default.createElement(Bn,{className:"doc-deprecation",markdown:v==null?void 0:v.deprecationReason}))}));var d=t.args.filter(function(v){return Boolean(v.deprecationReason)});d.length>0&&(l=Yt.default.createElement("div",{id:"doc-deprecated-args",className:"doc-category"},Yt.default.createElement("div",{className:"doc-category-title"},"deprecated arguments"),i?d.map(function(v,y){return Yt.default.createElement("div",{key:y},Yt.default.createElement("div",null,Yt.default.createElement(qu,{arg:v,onClickType:r})),Yt.default.createElement(Bn,{className:"doc-value-description",markdown:v.description}),v&&"deprecationReason"in v&&Yt.default.createElement(Bn,{className:"doc-deprecation",markdown:v==null?void 0:v.deprecationReason}))}):Yt.default.createElement("button",{className:"show-btn",onClick:function(){return o(!i)}},"Show deprecated arguments...")))}var h;return t&&t.astNode&&t.astNode.directives&&t.astNode.directives.length>0&&(h=Yt.default.createElement("div",{id:"doc-directives",className:"doc-category"},Yt.default.createElement("div",{className:"doc-category-title"},"directives"),t.astNode.directives.map(function(v){return Yt.default.createElement("div",{key:v.name.value,className:"doc-category-item"},Yt.default.createElement("div",null,Yt.default.createElement(Aw,{directive:v})))}))),Yt.default.createElement("div",null,Yt.default.createElement(Bn,{className:"doc-type-description",markdown:(t==null?void 0:t.description)||"No Description"}),t&&"deprecationReason"in t&&Yt.default.createElement(Bn,{className:"doc-deprecation",markdown:t==null?void 0:t.deprecationReason}),Yt.default.createElement("div",{className:"doc-category"},Yt.default.createElement("div",{className:"doc-category-title"},"type"),Yt.default.createElement(ni,{type:t==null?void 0:t.type,onClick:r})),s,h,l)}var Ti=Ee(zt());function Pw(e){var t=e.schema,r=e.onClickType,n=t.getQueryType(),i=t.getMutationType&&t.getMutationType(),o=t.getSubscriptionType&&t.getSubscriptionType();return Ti.default.createElement("div",null,Ti.default.createElement(Bn,{className:"doc-type-description",markdown:t.description||"A GraphQL schema provides a root type for each kind of operation."}),Ti.default.createElement("div",{className:"doc-category"},Ti.default.createElement("div",{className:"doc-category-title"},"root types"),Ti.default.createElement("div",{className:"doc-category-item"},Ti.default.createElement("span",{className:"keyword"},"query"),": ",Ti.default.createElement(ni,{type:n,onClick:r})),i&&Ti.default.createElement("div",{className:"doc-category-item"},Ti.default.createElement("span",{className:"keyword"},"mutation"),": ",Ti.default.createElement(ni,{type:i,onClick:r})),o&&Ti.default.createElement("div",{className:"doc-category-item"},Ti.default.createElement("span",{className:"keyword"},"subscription"),": ",Ti.default.createElement(ni,{type:o,onClick:r}))))}var Jc=Ee(zt());function ji(e,t){var r;return function(){for(var n=this,i=[],o=0;o=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},tne=function(e){$re(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.shouldComponentUpdate=function(r){return this.props.schema!==r.schema||this.props.searchValue!==r.searchValue},t.prototype.render=function(){var r,n,i=this.props.searchValue,o=this.props.withinType,s=this.props.schema,l=this.props.onClickType,d=this.props.onClickField,h=[],v=[],y=[],b=s.getTypeMap(),D=Object.keys(b);o&&(D=D.filter(function(w){return w!==o.name}),D.unshift(o.name));var _=function(w){if(h.length+v.length+y.length>=100)return"break";var x=b[w];if(o!==x&&Fw(w,i)&&v.push(_i.default.createElement("div",{className:"doc-category-item",key:w},_i.default.createElement(ni,{type:x,onClick:l}))),x&&"getFields"in x){var L=x.getFields();Object.keys(L).forEach(function(O){var R=L[O],M;if(!Fw(O,i))if("args"in R&&R.args.length){if(M=R.args.filter(function(z){return Fw(z.name,i)}),M.length===0)return}else return;var q=_i.default.createElement("div",{className:"doc-category-item",key:w+"."+O},o!==x&&[_i.default.createElement(ni,{key:"type",type:x,onClick:l}),"."],_i.default.createElement("a",{className:"field-name",onClick:function(z){return d(R,x,z)}},R.name),M&&["(",_i.default.createElement("span",{key:"args"},M.map(function(z){return _i.default.createElement(qu,{key:z.name,arg:z,onClickType:l,showDefaultValue:!1})})),")"]);o===x?h.push(q):y.push(q)})}};try{for(var k=ene(D),T=k.next();!T.done;T=k.next()){var S=T.value,m=_(S);if(m==="break")break}}catch(w){r={error:w}}finally{try{T&&!T.done&&(n=k.return)&&n.call(k)}finally{if(r)throw r.error}}return h.length+v.length+y.length===0?_i.default.createElement("span",{className:"doc-alert-text"},"No results found."):o&&v.length+y.length>0?_i.default.createElement("div",null,h,_i.default.createElement("div",{className:"doc-category"},_i.default.createElement("div",{className:"doc-category-title"},"other results"),v,y)):_i.default.createElement("div",{className:"doc-search-items"},h,v,y)},t}(_i.default.Component),PG=tne;function Fw(e,t){try{var r=t.replace(/[^_0-9A-Za-z]/g,function(n){return"\\"+n});return e.search(new RegExp(r,"i"))!==-1}catch(n){return e.toLowerCase().indexOf(t.toLowerCase())!==-1}}var Tt=Ee(zt()),no=Ee(ht());var rne=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),nne=function(e){rne(t,e);function t(r){var n=e.call(this,r)||this;return n.handleShowDeprecated=function(){return n.setState({showDeprecated:!0})},n.state={showDeprecated:!1},n}return t.prototype.shouldComponentUpdate=function(r,n){return this.props.type!==r.type||this.props.schema!==r.schema||this.state.showDeprecated!==n.showDeprecated},t.prototype.render=function(){var r=this.props.schema,n=this.props.type,i=this.props.onClickType,o=this.props.onClickField,s=null,l=[];n instanceof no.GraphQLUnionType?(s="possible types",l=r.getPossibleTypes(n)):n instanceof no.GraphQLInterfaceType?(s="implementations",l=r.getPossibleTypes(n)):n instanceof no.GraphQLObjectType&&(s="implements",l=n.getInterfaces());var d;l&&l.length>0&&(d=Tt.default.createElement("div",{id:"doc-types",className:"doc-category"},Tt.default.createElement("div",{className:"doc-category-title"},s),l.map(function(m){return Tt.default.createElement("div",{key:m.name,className:"doc-category-item"},Tt.default.createElement(ni,{type:m,onClick:i}))})));var h,v;if(n&&"getFields"in n){var y=n.getFields(),b=Object.keys(y).map(function(m){return y[m]});h=Tt.default.createElement("div",{id:"doc-fields",className:"doc-category"},Tt.default.createElement("div",{className:"doc-category-title"},"fields"),b.filter(function(m){return!m.deprecationReason}).map(function(m){return Tt.default.createElement(MG,{key:m.name,type:n,field:m,onClickType:i,onClickField:o})}));var D=b.filter(function(m){return Boolean(m.deprecationReason)});D.length>0&&(v=Tt.default.createElement("div",{id:"doc-deprecated-fields",className:"doc-category"},Tt.default.createElement("div",{className:"doc-category-title"},"deprecated fields"),this.state.showDeprecated?D.map(function(m){return Tt.default.createElement(MG,{key:m.name,type:n,field:m,onClickType:i,onClickField:o})}):Tt.default.createElement("button",{className:"show-btn",onClick:this.handleShowDeprecated},"Show deprecated fields...")))}var _,k;if(n instanceof no.GraphQLEnumType){var T=n.getValues();_=Tt.default.createElement("div",{className:"doc-category"},Tt.default.createElement("div",{className:"doc-category-title"},"values"),T.filter(function(m){return Boolean(!m.deprecationReason)}).map(function(m){return Tt.default.createElement(qG,{key:m.name,value:m})}));var S=T.filter(function(m){return Boolean(m.deprecationReason)});S.length>0&&(k=Tt.default.createElement("div",{className:"doc-category"},Tt.default.createElement("div",{className:"doc-category-title"},"deprecated values"),this.state.showDeprecated?S.map(function(m){return Tt.default.createElement(qG,{key:m.name,value:m})}):Tt.default.createElement("button",{className:"show-btn",onClick:this.handleShowDeprecated},"Show deprecated values...")))}return Tt.default.createElement("div",null,Tt.default.createElement(Bn,{className:"doc-type-description",markdown:"description"in n&&n.description||"No Description"}),n instanceof no.GraphQLObjectType&&d,h,v,_,k,!(n instanceof no.GraphQLObjectType)&&d)},t}(Tt.default.Component),FG=nne;function MG(e){var t=e.type,r=e.field,n=e.onClickType,i=e.onClickField;return Tt.default.createElement("div",{className:"doc-category-item"},Tt.default.createElement("a",{className:"field-name",onClick:function(o){return i(r,t,o)}},r.name),"args"in r&&r.args&&r.args.length>0&&["(",Tt.default.createElement("span",{key:"args"},r.args.filter(function(o){return!o.deprecationReason}).map(function(o){return Tt.default.createElement(qu,{key:o.name,arg:o,onClickType:n})})),")"],": ",Tt.default.createElement(ni,{type:r.type,onClick:n}),Tt.default.createElement(nh,{field:r}),r.description&&Tt.default.createElement(Bn,{className:"field-short-description",markdown:r.description}),"deprecationReason"in r&&r.deprecationReason&&Tt.default.createElement(Bn,{className:"doc-deprecation",markdown:r.deprecationReason}))}function qG(e){var t=e.value;return Tt.default.createElement("div",{className:"doc-category-item"},Tt.default.createElement("div",{className:"enum-value"},t.name),Tt.default.createElement(Bn,{className:"doc-value-description",markdown:t.description}),t.deprecationReason&&Tt.default.createElement(Bn,{className:"doc-deprecation",markdown:t.deprecationReason}))}var ine=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),qy=function(){return qy=Object.assign||function(e){for(var t,r=1,n=arguments.length;r1&&n.setState({navStack:n.state.navStack.slice(0,-1)})},n.handleClickType=function(i){n.showDoc(i)},n.handleClickField=function(i){n.showDoc(i)},n.handleSearch=function(i){n.showSearch(i)},n.state={navStack:[VG]},n}return t.prototype.shouldComponentUpdate=function(r,n){return this.props.schema!==r.schema||this.state.navStack!==n.navStack||this.props.schemaErrors!==r.schemaErrors},t.prototype.render=function(){var r=this.props,n=r.schema,i=r.schemaErrors,o=this.state.navStack,s=o[o.length-1],l;i?l=wn.default.createElement("div",{className:"error-container"},"Error fetching schema"):n===void 0?l=wn.default.createElement("div",{className:"spinner-container"},wn.default.createElement("div",{className:"spinner"})):n?s.search?l=wn.default.createElement(PG,{searchValue:s.search,withinType:s.def,schema:n,onClickType:this.handleClickType,onClickField:this.handleClickField}):o.length===1?l=wn.default.createElement(Pw,{schema:n,onClickType:this.handleClickType}):(0,Mw.isType)(s.def)?l=wn.default.createElement(FG,{schema:n,type:s.def,onClickType:this.handleClickType,onClickField:this.handleClickField}):l=wn.default.createElement(jw,{field:s.def,onClickType:this.handleClickType}):l=wn.default.createElement("div",{className:"error-container"},"No Schema Available");var d=o.length===1||(0,Mw.isType)(s.def)&&"getFields"in s.def,h;return o.length>1&&(h=o[o.length-2].name),wn.default.createElement("section",{className:"doc-explorer",key:s.name,"aria-label":"Documentation Explorer"},wn.default.createElement("div",{className:"doc-explorer-title-bar"},h&&wn.default.createElement("button",{className:"doc-explorer-back",onClick:this.handleNavBackClick,"aria-label":"Go back to "+h},h),wn.default.createElement("div",{className:"doc-explorer-title"},s.title||s.name),wn.default.createElement("div",{className:"doc-explorer-rhs"},this.props.children)),wn.default.createElement("div",{className:"doc-explorer-contents"},d&&wn.default.createElement(jG,{value:s.search,placeholder:"Search "+s.name+"...",onSearch:this.handleSearch}),l))},t.prototype.showDoc=function(r){var n=this.state.navStack,i=n[n.length-1];i.def!==r&&this.setState({navStack:n.concat([{name:r.name,def:r}])})},t.prototype.showDocForReference=function(r){r&&r.kind==="Type"?this.showDoc(r.type):r.kind==="Field"?this.showDoc(r.field):r.kind==="Argument"&&r.field?this.showDoc(r.field):r.kind==="EnumValue"&&r.type&&this.showDoc(r.type)},t.prototype.showSearch=function(r){var n=this.state.navStack.slice(),i=n[n.length-1];n[n.length-1]=qy(qy({},i),{search:r}),this.setState({navStack:n})},t.prototype.reset=function(){this.setState({navStack:[VG]})},t}(wn.default.Component);var Vu=Ee(zt());var Ks=Ee(zt()),ane=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),one=function(e){ane(t,e);function t(r){var n=e.call(this,r)||this;return n.state={editable:!1},n.editField=null,n}return t.prototype.render=function(){var r=this,n,i=this.props.label||this.props.operationName||((n=this.props.query)===null||n===void 0?void 0:n.split(` -`).filter(function(s){return s.indexOf("#")!==0}).join("")),o=this.props.favorite?"\u2605":"\u2606";return Ks.default.createElement("li",{className:this.state.editable?"editable":void 0},this.state.editable?Ks.default.createElement("input",{type:"text",defaultValue:this.props.label,ref:function(s){r.editField=s},onBlur:this.handleFieldBlur.bind(this),onKeyDown:this.handleFieldKeyDown.bind(this),placeholder:"Type a label"}):Ks.default.createElement("button",{className:"history-label",onClick:this.handleClick.bind(this)},i),Ks.default.createElement("button",{onClick:this.handleEditClick.bind(this),"aria-label":"Edit label"},"\u270E"),Ks.default.createElement("button",{className:this.props.favorite?"favorited":void 0,onClick:this.handleStarClick.bind(this),"aria-label":this.props.favorite?"Remove favorite":"Add favorite"},o))},t.prototype.handleClick=function(){this.props.onSelect(this.props.query,this.props.variables,this.props.headers,this.props.operationName,this.props.label)},t.prototype.handleStarClick=function(r){r.stopPropagation(),this.props.handleToggleFavorite(this.props.query,this.props.variables,this.props.headers,this.props.operationName,this.props.label,this.props.favorite)},t.prototype.handleFieldBlur=function(r){r.stopPropagation(),this.setState({editable:!1}),this.props.handleEditLabel(this.props.query,this.props.variables,this.props.headers,this.props.operationName,r.target.value,this.props.favorite)},t.prototype.handleFieldKeyDown=function(r){r.keyCode===13&&(r.stopPropagation(),this.setState({editable:!1}),this.props.handleEditLabel(this.props.query,this.props.variables,this.props.headers,this.props.operationName,r.currentTarget.value,this.props.favorite))},t.prototype.handleEditClick=function(r){var n=this;r.stopPropagation(),this.setState({editable:!0},function(){n.editField&&n.editField.focus()})},t}(Ks.default.Component),UG=one;var une=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],s;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){s={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return o},sne=function(){for(var e=[],t=0;tthis.maxSize&&n.shift();for(var i=0;i<5;i++){var o=this.storage.set(this.key,JSON.stringify((r={},r[this.key]=n,r)));if(!o||!o.error)this.items=n;else if(o.isQuotaError&&this.maxSize)n.shift();else return}},e.prototype.save=function(){var t;this.storage.set(this.key,JSON.stringify((t={},t[this.key]=this.items,t)))},e}(),Vw=lne;var QG=Ee(ht()),Vy=function(){return Vy=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){s={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return o},GG=function(){for(var e=[],t=0;tfne?!1:l?!(JSON.stringify(i)===JSON.stringify(l.query)&&(JSON.stringify(o)===JSON.stringify(l.variables)&&(JSON.stringify(s)===JSON.stringify(l.headers)||s&&!l.headers)||o&&!l.variables)):!0},this.fetchAllQueries=function(){var i=n.history.fetchAll(),o=n.favorite.fetchAll();return i.concat(o)},this.updateHistory=function(i,o,s,l){if(n.shouldSaveQuery(i,o,s,n.history.fetchRecent())){n.history.push({query:i,variables:o,headers:s,operationName:l});var d=n.history.items,h=n.favorite.items;n.queries=d.concat(h)}},this.toggleFavorite=function(i,o,s,l,d,h){var v={query:i,variables:o,headers:s,operationName:l,label:d};n.favorite.contains(v)?h&&(v.favorite=!1,n.favorite.delete(v)):(v.favorite=!0,n.favorite.push(v)),n.queries=GG(n.history.items,n.favorite.items)},this.editLabel=function(i,o,s,l,d,h){var v={query:i,variables:o,headers:s,operationName:l,label:d};h?n.favorite.edit(Vy(Vy({},v),{favorite:h})):n.history.edit(v),n.queries=GG(n.history.items,n.favorite.items)},this.history=new Vw("queries",this.storage,this.maxHistoryLength),this.favorite=new Vw("favorites",this.storage,null),this.queries=this.fetchAllQueries()}return e}(),Uy=dne;var pne=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),Uw=function(){return Uw=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},_ne=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],s;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){s={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return o},WG=function(){for(var e=[],t=0;t=0)continue;d.push(b)}var D=e[y.name.value];if(D){var _=D.typeCondition,k=D.directives,T=D.selectionSet;y={kind:aa.Kind.INLINE_FRAGMENT,typeCondition:_,directives:k,selectionSet:T}}}if(y.kind===aa.Kind.INLINE_FRAGMENT&&(!y.directives||((o=y.directives)===null||o===void 0?void 0:o.length)===0)){var S=y.typeCondition?y.typeCondition.name.value:null;if(!S||S===s){l.push.apply(l,WG(YG(e,y.selectionSet.selections,r)));continue}}l.push(y)}}catch(m){n={error:m}}finally{try{v&&!v.done&&(i=h.return)&&i.call(h)}finally{if(n)throw n.error}}return l}function Gy(e,t){var r,n,i=t?new aa.TypeInfo(t):null,o=Object.create(null);try{for(var s=Bw(e.definitions),l=s.next();!l.done;l=s.next()){var d=l.value;d.kind===aa.Kind.FRAGMENT_DEFINITION&&(o[d.name.value]=d)}}catch(v){r={error:v}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}var h={SelectionSet:function(v){var y=i?i.getParentType():null,b=v.selections;return b=YG(o,b,y),b=Ene(b,function(D){return D.alias?D.alias.value:D.name.value}),Xc(Xc({},v),{selections:b})},FragmentDefinition:function(){return null}};return(0,aa.visit)(e,i?(0,aa.visitWithTypeInfo)(i,h):h)}var Sne="IntrospectionQuery",JG=Sne;var vQ=Ee(sQ());var Ky=Ee(ht());var zs=Ee(zt()),Qy=function(){return Qy=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"}function Uu(e){var t,r,n;return[(t=e.query)!==null&&t!==void 0?t:"",(r=e.variables)!==null&&r!==void 0?r:"",(n=e.headers)!==null&&n!==void 0?n:""].join("|")}function By(){var e=function(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)};return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}var Rne=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),Ke=function(){return Ke=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&o[o.length-1])&&(h[0]===6||h[0]===2)){r=0;continue}if(h[0]===3&&(!o||h[1]>o[0]&&h[1]0)&&!(i=n.next()).done;)o.push(i.value)}catch(l){s={error:l}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return o},pQ=function(){for(var e=[],t=0;t=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},gQ=350,Mne=parseInt(ut.default.version.slice(0,2),10);if(Mne<16)throw Error(["GraphiQL 0.18.0 and after is not compatible with React 15 or below.","If you are using a CDN source (jsdelivr, unpkg, etc), follow this example:","https://github.com/graphql/graphiql/blob/master/examples/graphiql-cdn/index.html#L49"].join(` -`));var mQ=function(e){return JSON.stringify(e,null,2)},qne=function(e){return Ke(Ke({},e),{message:e.message,stack:e.stack})},yQ=function(e){return e instanceof ii.GraphQLError?e.toString():e instanceof Error?qne(e):e},bQ=function(e){Rne(t,e);function t(r){var n,i,o,s,l,d,h,v,y,b,D,_=e.call(this,r)||this;if(_._editorQueryID=0,_.safeSetState=function(te,ce){_.componentIsMounted&&_.setState(te,ce)},_.persistTabsState=function(){var te,ce;_.props.tabs&&(_._storage.set("tabState",JSON.stringify(_.state.tabs,function(we,ot){return we==="response"||_.state.shouldPersistHeaders&&we==="headers"?void 0:ot})),typeof _.props.tabs=="object"&&((ce=(te=_.props.tabs).onTabChange)===null||ce===void 0||ce.call(te,_.state.tabs)))},_.makeHandleOnSelectTab=function(te){return function(){_.handleStopQuery(),_.setState(function(ce){return Hne(te,ce)},function(){_.persistTabsState(),_.state.query&&_.handleEditQuery(_.state.query)})}},_.makeHandleOnCloseTab=function(te){return function(){_.state.tabs.activeTabIndex===te&&_.handleStopQuery(),_.setState(function(ce){return zne(te,ce)},_.persistTabsState)}},_.handleOnAddTab=function(){_.setState(function(te){return Wne(te)},_.persistTabsState)},_.handleClickReference=function(te){_.setState({docExplorerOpen:!0},function(){_.docExplorerComponent&&_.docExplorerComponent.showDocForReference(te)}),_._storage.set("docExplorerOpen",JSON.stringify(_.state.docExplorerOpen))},_.handleRunQuery=function(te){return Hw(_,void 0,void 0,function(){var ce,we,ot,Me,Qe,ze,mt,oe,me,fe=this;return zw(this,function(se){switch(se.label){case 0:this._editorQueryID++,ce=this._editorQueryID,we=this.autoCompleteLeafs()||this.state.query||"",ot=this.state.variables,Me=this.state.headers,Qe=this.state.shouldPersistHeaders,ze=this.state.operationName,te&&te!==ze&&(ze=te,this.handleEditOperationName(ze)),se.label=1;case 1:return se.trys.push([1,3,,4]),this.setState({isWaitingForResponse:!0,response:void 0,operationName:ze}),this._storage.set("operationName",ze),this._queryHistory?this._queryHistory.onUpdateHistory(we,ot,Me,ze):this._historyStore&&this._historyStore.updateHistory(we,ot,Me,ze),mt={data:{}},[4,this._fetchQuery(we,ot,Me,ze,Qe,function(Ue){var at,ct;if(ce===fe._editorQueryID){var st=Array.isArray(Ue)?Ue:!1;if(!st&&typeof Ue!="string"&&Ue!==null&&"hasNext"in Ue&&(st=[Ue]),st){var Dn={data:mt.data},Ei=pQ((mt==null?void 0:mt.errors)||[],st.map(function(vr){return vr.errors}).flat().filter(Boolean));Ei.length&&(Dn.errors=Ei);try{for(var dn=sh(st),Hn=dn.next();!Hn.done;Hn=dn.next()){var pn=Hn.value,Pi=pn.path,Qr=pn.data,Kt=pn.errors,hn=jne(pn,["path","data","errors"]);if(Pi){if(!Qr)throw new Error("Expected part to contain a data property, but got "+pn);(0,vQ.default)(Dn.data,Pi,Qr,{merge:!0})}else Qr&&(Dn.data=pn.data);mt=Ke(Ke({},Dn),hn)}}catch(vr){at={error:vr}}finally{try{Hn&&!Hn.done&&(ct=dn.return)&&ct.call(dn)}finally{if(at)throw at.error}}fe.setState({isWaitingForResponse:!1,response:t.formatResult(mt)})}else{var zn=t.formatResult(Ue);fe.setState(function(vr){return Ke(Ke({},vr),{tabs:Ke(Ke({},vr.tabs),{tabs:vr.tabs.tabs.map(function(Ro,xn){return xn!==vr.tabs.activeTabIndex?Ro:Ke(Ke({},Ro),{response:zn})})}),isWaitingForResponse:!1,response:zn})},fe.persistTabsState)}}})];case 2:return oe=se.sent(),this.setState({subscription:oe}),[3,4];case 3:return me=se.sent(),this.setState({isWaitingForResponse:!1,response:me.message}),[3,4];case 4:return[2]}})})},_.handleStopQuery=function(){var te=_.state.subscription;_.setState({isWaitingForResponse:!1,subscription:null}),te&&te.unsubscribe()},_.handlePrettifyQuery=function(){var te,ce,we,ot=_.getQueryEditor(),Me=(te=ot==null?void 0:ot.getValue())!==null&&te!==void 0?te:"",Qe=(0,ii.print)((0,ii.parse)(Me));Qe!==Me&&(ot==null||ot.setValue(Qe));var ze=_.getVariableEditor(),mt=(ce=ze==null?void 0:ze.getValue())!==null&&ce!==void 0?ce:"";try{var oe=JSON.stringify(JSON.parse(mt),null,2);oe!==mt&&(ze==null||ze.setValue(oe))}catch(Ue){}var me=_.getHeaderEditor(),fe=(we=me==null?void 0:me.getValue())!==null&&we!==void 0?we:"";try{var se=JSON.stringify(JSON.parse(fe),null,2);se!==fe&&(me==null||me.setValue(se))}catch(Ue){}},_.handleMergeQuery=function(){var te=_.getQueryEditor(),ce=te.getValue();if(!!ce){var we=_.state.documentAST;te.setValue((0,ii.print)(Gy(we,_.state.schema)))}},_.handleEditQuery=ji(100,function(te){var ce=_._updateQueryFacts(te,_.state.operationName,_.state.operations,_.state.schema);if(_.setState(function(we){return Ke(Ke(Ke(Ke({},we),{query:te}),ce),{tabs:Kne(te,we.tabs,ce==null?void 0:ce.operationName)})},_.persistTabsState),_._storage.set("query",te),_.props.onEditQuery)return _.props.onEditQuery(te,ce==null?void 0:ce.documentAST)}),_.handleCopyQuery=function(){var te=_.getQueryEditor(),ce=te&&te.getValue();if(!!ce&&((0,hQ.default)(ce),_.props.onCopyQuery))return _.props.onCopyQuery(ce)},_._updateQueryFacts=function(te,ce,we,ot){var Me=js(ot,te);if(Me){var Qe=ah(we,ce,Me.operations),ze=_.props.onEditOperationName;return ze&&Qe&&ce!==Qe&&ze(Qe),Ke({operationName:Qe},Me)}},_.handleEditVariables=function(te){_.setState(function(ce){return Ke(Ke({},ce),{variables:te,tabs:Bne(te,ce.tabs)})},_.persistTabsState),ji(500,function(){return _._storage.set("variables",te)})(),_.props.onEditVariables&&_.props.onEditVariables(te)},_.handleEditHeaders=function(te){_.setState(function(ce){return Ke(Ke({},ce),{headers:te,tabs:Qne(te,ce.tabs)})},_.persistTabsState),_.props.shouldPersistHeaders&&ji(500,function(){return _._storage.set("headers",te)})(),_.props.onEditHeaders&&_.props.onEditHeaders(te)},_.handleEditOperationName=function(te){var ce=_.props.onEditOperationName;ce&&ce(te)},_.handleHintInformationRender=function(te){te.addEventListener("click",_._onClickHintInformation);var ce;te.addEventListener("DOMNodeRemoved",ce=function(){te.removeEventListener("DOMNodeRemoved",ce),te.removeEventListener("click",_._onClickHintInformation)})},_.handleEditorRunQuery=function(){_._runQueryAtCursor()},_._onClickHintInformation=function(te){if((te==null?void 0:te.currentTarget)&&"className"in te.currentTarget&&te.currentTarget.className==="typeName"){var ce=te.currentTarget.innerHTML,we=_.state.schema;if(we){var ot=we.getType(ce);ot&&(_.setState({docExplorerOpen:!0},function(){_.docExplorerComponent&&_.docExplorerComponent.showDoc(ot)}),ji(500,function(){return _._storage.set("docExplorerOpen",JSON.stringify(_.state.docExplorerOpen))})())}}},_.handleToggleDocs=function(){typeof _.props.onToggleDocs=="function"&&_.props.onToggleDocs(!_.state.docExplorerOpen),_._storage.set("docExplorerOpen",JSON.stringify(!_.state.docExplorerOpen)),_.setState({docExplorerOpen:!_.state.docExplorerOpen})},_.handleToggleHistory=function(){typeof _.props.onToggleHistory=="function"&&_.props.onToggleHistory(!_.state.historyPaneOpen),_._storage.set("historyPaneOpen",JSON.stringify(!_.state.historyPaneOpen)),_.setState({historyPaneOpen:!_.state.historyPaneOpen})},_.handleSelectHistoryQuery=function(te,ce,we,ot){te&&_.handleEditQuery(te),ce&&_.handleEditVariables(ce),we&&_.handleEditHeaders(we),ot&&_.handleEditOperationName(ot)},_.handleResizeStart=function(te){if(!!_._didClickDragBar(te)){te.preventDefault();var ce=te.clientX-uh(te.target),we=function(Me){if(Me.buttons===0)return ot();var Qe=_.editorBarComponent,ze=Me.clientX-uh(Qe)-ce,mt=Qe.clientWidth-ze;_.setState({editorFlex:ze/mt}),ji(500,function(){return _._storage.set("editorFlex",JSON.stringify(_.state.editorFlex))})()},ot=function(){document.removeEventListener("mousemove",we),document.removeEventListener("mouseup",ot),we=null,ot=null};document.addEventListener("mousemove",we),document.addEventListener("mouseup",ot)}},_.handleResetResize=function(){_.setState({editorFlex:1}),_._storage.set("editorFlex",JSON.stringify(_.state.editorFlex))},_.handleDocsResizeStart=function(te){te.preventDefault();var ce=_.state.docExplorerWidth,we=te.clientX-uh(te.target),ot=function(Qe){if(Qe.buttons===0)return Me();var ze=_.graphiqlContainer,mt=Qe.clientX-uh(ze)-we,oe=ze.clientWidth-mt;oe<100?(typeof _.props.onToggleDocs=="function"&&_.props.onToggleDocs(!_.state.docExplorerOpen),_._storage.set("docExplorerOpen",JSON.stringify(_.state.docExplorerOpen)),_.setState({docExplorerOpen:!1})):(_.setState({docExplorerOpen:!0,docExplorerWidth:Math.min(oe,650)}),ji(500,function(){return _._storage.set("docExplorerWidth",JSON.stringify(_.state.docExplorerWidth))})()),_._storage.set("docExplorerOpen",JSON.stringify(_.state.docExplorerOpen))},Me=function(){_.state.docExplorerOpen||(_.setState({docExplorerWidth:ce}),ji(500,function(){return _._storage.set("docExplorerWidth",JSON.stringify(_.state.docExplorerWidth))})()),document.removeEventListener("mousemove",ot),document.removeEventListener("mouseup",Me),ot=null,Me=null};document.addEventListener("mousemove",ot),document.addEventListener("mouseup",Me)},_.handleDocsResetResize=function(){_.setState({docExplorerWidth:gQ}),ji(500,function(){return _._storage.set("docExplorerWidth",JSON.stringify(_.state.docExplorerWidth))})()},_.handleTabClickPropogation=function(te){te.preventDefault(),te.stopPropagation()},_.handleOpenHeaderEditorTab=function(te){_.setState({headerEditorActive:!0,variableEditorActive:!1,secondaryEditorOpen:!0})},_.handleOpenVariableEditorTab=function(te){_.setState({headerEditorActive:!1,variableEditorActive:!0,secondaryEditorOpen:!0})},_.handleSecondaryEditorResizeStart=function(te){te.preventDefault();var ce=!1,we=_.state.secondaryEditorOpen,ot=_.state.secondaryEditorHeight,Me=te.clientY-Qw(te.target),Qe=function(mt){if(mt.buttons===0)return ze();ce=!0;var oe=_.editorBarComponent,me=mt.clientY-Qw(oe)-Me,fe=oe.clientHeight-me;fe<60?_.setState({secondaryEditorOpen:!1,secondaryEditorHeight:ot}):_.setState({secondaryEditorOpen:!0,secondaryEditorHeight:fe}),ji(500,function(){return _._storage.set("secondaryEditorHeight",JSON.stringify(_.state.secondaryEditorHeight))})()},ze=function(){ce||_.setState({secondaryEditorOpen:!we}),document.removeEventListener("mousemove",Qe),document.removeEventListener("mouseup",ze),Qe=null,ze=null};document.addEventListener("mousemove",Qe),document.addEventListener("mouseup",ze)},typeof r.fetcher!="function")throw new TypeError("GraphiQL requires a fetcher function.");_._storage=new HG(r.storage);var k=(l=r.maxHistoryLength)!==null&&l!==void 0?l:20;_._historyStore=new Uy(_._storage,k),_.componentIsMounted=!1;var T=r.query!==void 0?r.query:_._storage.get("query")?_._storage.get("query"):r.defaultQuery!==void 0?r.defaultQuery:Vne,S=js(r.schema,T),m=r.variables!==void 0?r.variables:_._storage.get("variables"),w=r.headers!==void 0?r.headers:_._storage.get("headers"),x=r.operationName!==void 0?r.operationName:ah(void 0,_._storage.get("operationName"),S&&S.operations),L=r.docExplorerOpen||!1;_._storage.get("docExplorerOpen")&&(L=_._storage.get("docExplorerOpen")==="true");var O;r.defaultVariableEditorOpen!==void 0?O=r.defaultVariableEditorOpen:r.defaultSecondaryEditorOpen!==void 0?O=r.defaultSecondaryEditorOpen:O=Boolean(m||w);var R=(d=r.headerEditorEnabled)!==null&&d!==void 0?d:!0,M=(h=r.shouldPersistHeaders)!==null&&h!==void 0?h:!1,q=r.schema,z=r.response,B=void 0;if(q&&!_.props.dangerouslyAssumeSchemaIsValid){var Q=(0,Ky.validateSchema)(q);Q&&Q.length>0&&(z=t.formatError(Q),q=void 0,B=Q)}_._introspectionQuery=(0,ii.getIntrospectionQuery)({schemaDescription:(v=r.schemaDescription)!==null&&v!==void 0?v:void 0,inputValueDeprecation:(y=r.inputValueDeprecation)!==null&&y!==void 0?y:void 0}),_._introspectionQueryName=(b=r.introspectionQueryName)!==null&&b!==void 0?b:JG,_._introspectionQuerySansSubscriptions=_._introspectionQuery.replace("subscriptionType { name }","");var P=Uu({query:T,variables:m,headers:w}),he={id:By(),hash:P,title:x!=null?x:"",query:T,variables:m,headers:w,operationName:x,response:void 0},xe=null;_.props.tabs&&(xe=_._storage.get("tabState"));var ge;if(xe===null)ge={activeTabIndex:0,tabs:[he]};else{ge=JSON.parse(xe);var Fe=!1;try{for(var Le=sh(ge.tabs),He=Le.next();!He.done;He=Le.next()){var Xe=He.value;Xe.query=Xe.query,Xe.variables=Xe.variables,Xe.headers=M?Xe.headers:void 0,Xe.response=void 0,Xe.operationName=void 0,Xe.id=By(),Xe.hash=Uu(Xe),Xe.hash===P&&(Fe=!0)}}catch(te){n={error:te}}finally{try{He&&!He.done&&(i=Le.return)&&i.call(Le)}finally{if(n)throw n.error}}Fe===!1&&(ge.tabs.push(he),ge.activeTabIndex=ge.tabs.length-1)}var Ve=ge.tabs[0],At=0;try{for(var Ot=sh(ge.tabs),Ie=Ot.next();!Ie.done;Ie=Ot.next()){var Xe=Ie.value;if(Xe.hash===P){ge.activeTabIndex=At,Ve=Xe;break}At++}}catch(te){o={error:te}}finally{try{Ie&&!Ie.done&&(s=Ot.return)&&s.call(Ot)}finally{if(o)throw o.error}}return _.state=Ke({tabs:ge,schema:q,query:Ve==null?void 0:Ve.query,variables:Ve==null?void 0:Ve.variables,headers:Ve==null?void 0:Ve.headers,operationName:Ve==null?void 0:Ve.operationName,response:(D=Ve==null?void 0:Ve.response)!==null&&D!==void 0?D:z,docExplorerOpen:L,schemaErrors:B,editorFlex:Number(_._storage.get("editorFlex"))||1,secondaryEditorOpen:O,secondaryEditorHeight:Number(_._storage.get("secondaryEditorHeight"))||200,variableEditorActive:_._storage.get("variableEditorActive")==="true"||r.headerEditorEnabled?_._storage.get("headerEditorActive")!=="true":!0,headerEditorActive:_._storage.get("headerEditorActive")==="true",headerEditorEnabled:R,shouldPersistHeaders:M,historyPaneOpen:_._storage.get("historyPaneOpen")==="true"||!1,docExplorerWidth:Number(_._storage.get("docExplorerWidth"))||gQ,isWaitingForResponse:!1,subscription:null,maxHistoryLength:k},S),_.state.query&&_.handleEditQuery(_.state.query),_}return t.formatResult=function(r){return JSON.stringify(r,null,2)},t.prototype.componentDidMount=function(){this.componentIsMounted=!0,this.state.schema===void 0&&this.fetchSchema(),this.codeMirrorSizer=new KG,typeof window!="undefined"&&(window.g=this)},t.prototype.UNSAFE_componentWillMount=function(){this.componentIsMounted=!1},t.prototype.UNSAFE_componentWillReceiveProps=function(r){var n=this,i=this.state.schema,o=this.state.query,s=this.state.variables,l=this.state.headers,d=this.state.operationName,h=this.state.response;if(r.schema!==void 0&&(i=r.schema),r.query!==void 0&&this.props.query!==r.query&&(o=r.query),r.variables!==void 0&&this.props.variables!==r.variables&&(s=r.variables),r.headers!==void 0&&this.props.headers!==r.headers&&(l=r.headers),r.operationName!==void 0&&(d=r.operationName),r.response!==void 0&&(h=r.response),o&&i&&(i!==this.state.schema||o!==this.state.query||d!==this.state.operationName)){if(!this.props.dangerouslyAssumeSchemaIsValid){var v=(0,Ky.validateSchema)(i);v&&v.length>0&&(this.handleSchemaErrors(v),i=void 0)}var y=this._updateQueryFacts(o,d,this.state.operations,i);y!==void 0&&(d=y.operationName,this.setState(y))}r.schema===void 0&&r.fetcher!==this.props.fetcher&&(i=void 0),this._storage.set("operationName",d),this.setState({schema:i,query:o,variables:s,headers:l,operationName:d,response:h},function(){n.state.schema===void 0&&(n.docExplorerComponent&&n.docExplorerComponent.reset(),n.fetchSchema())})},t.prototype.componentDidUpdate=function(){this.codeMirrorSizer.updateSizes([this.queryEditorComponent,this.variableEditorComponent,this.headerEditorComponent,this.resultComponent])},t.prototype.render=function(){var r=this,n,i=ut.default.Children.toArray(this.props.children),o=oh(i,function(k){return Ww(k,t.Logo)})||ut.default.createElement(t.Logo,null),s=oh(i,function(k){return Ww(k,t.Toolbar)})||ut.default.createElement(t.Toolbar,null,ut.default.createElement(Lu,{onClick:this.handlePrettifyQuery,title:"Prettify Query (Shift-Ctrl-P)",label:"Prettify"}),ut.default.createElement(Lu,{onClick:this.handleMergeQuery,title:"Merge Query (Shift-Ctrl-M)",label:"Merge"}),ut.default.createElement(Lu,{onClick:this.handleCopyQuery,title:"Copy Query (Shift-Ctrl-C)",label:"Copy"}),ut.default.createElement(Lu,{onClick:this.handleToggleHistory,title:"Show History",label:"History"}),((n=this.props.toolbar)===null||n===void 0?void 0:n.additionalContent)?this.props.toolbar.additionalContent:null),l=oh(i,function(k){return Ww(k,t.Footer)}),d={WebkitFlex:this.state.editorFlex,flex:this.state.editorFlex},h={display:"block",width:this.state.docExplorerWidth},v="docExplorerWrap"+(this.state.docExplorerWidth<200?" doc-explorer-narrow":""),y={display:this.state.historyPaneOpen?"block":"none",width:"230px",zIndex:7},b=this.state.secondaryEditorOpen,D={height:b?this.state.secondaryEditorHeight:void 0},_=this.state.tabs;return ut.default.createElement("div",{ref:function(k){r.graphiqlContainer=k},"data-testid":"graphiql-container",className:"graphiql-container"},this.state.historyPaneOpen&&ut.default.createElement("div",{className:"historyPaneWrap",style:y},ut.default.createElement(BG,{ref:function(k){r._queryHistory=k},operationName:this.state.operationName,query:this.state.query,variables:this.state.variables,onSelectQuery:this.handleSelectHistoryQuery,storage:this._storage,maxHistoryLength:this.state.maxHistoryLength,queryID:this._editorQueryID},ut.default.createElement("button",{className:"docExplorerHide",onClick:this.handleToggleHistory,"aria-label":"Close History"},"\u2715"))),ut.default.createElement("div",{className:"editorWrap"},ut.default.createElement("div",{className:"topBarWrap"},this.props.beforeTopBarContent,ut.default.createElement("div",{className:"topBar"},o,ut.default.createElement(lF,{isRunning:Boolean(this.state.subscription),onRun:this.handleRunQuery,onStop:this.handleStopQuery,operations:this.state.operations}),s),!this.state.docExplorerOpen&&ut.default.createElement("button",{className:"docExplorerShow",onClick:this.handleToggleDocs,"aria-label":"Open Documentation Explorer"},"Docs")),this.props.tabs?ut.default.createElement(fQ,{tabsProps:{"aria-label":"Select active operation"}},_.tabs.map(function(k,T){return ut.default.createElement(lQ,{key:k.id,isActive:T===_.activeTabIndex,title:k.title,isCloseable:_.tabs.length>1,onSelect:r.makeHandleOnSelectTab(T),onClose:r.makeHandleOnCloseTab(T),tabProps:{"aria-controls":"sessionWrap",id:"session-tab-"+T}})}),ut.default.createElement(cQ,{onClick:this.handleOnAddTab})):null,ut.default.createElement("div",{ref:function(k){r.editorBarComponent=k},role:"tabpanel",id:"sessionWrap",className:"editorBar","aria-labelledby":"session-tab-"+_.activeTabIndex,onDoubleClick:this.handleResetResize,onMouseDown:this.handleResizeStart},ut.default.createElement("div",{className:"queryWrap",style:d},ut.default.createElement(wy,{ref:function(k){r.queryEditorComponent=k},schema:this.state.schema,validationRules:this.props.validationRules,value:this.state.query,onEdit:this.handleEditQuery,onHintInformationRender:this.handleHintInformationRender,onClickReference:this.handleClickReference,onCopyQuery:this.handleCopyQuery,onPrettifyQuery:this.handlePrettifyQuery,onMergeQuery:this.handleMergeQuery,onRunQuery:this.handleEditorRunQuery,editorTheme:this.props.editorTheme,readOnly:this.props.readOnly,externalFragments:this.props.externalFragments}),ut.default.createElement("section",{className:"variable-editor secondary-editor",style:D,"aria-label":this.state.variableEditorActive?"Query Variables":"Request Headers"},ut.default.createElement("div",{className:"secondary-editor-title variable-editor-title",id:"secondary-editor-title",style:{cursor:b?"row-resize":"n-resize"},onMouseDown:this.handleSecondaryEditorResizeStart},ut.default.createElement("div",{className:"variable-editor-title-text"+(this.state.variableEditorActive?" active":""),onClick:this.handleOpenVariableEditorTab,onMouseDown:this.handleTabClickPropogation},"Query Variables"),this.state.headerEditorEnabled&&ut.default.createElement("div",{style:{marginLeft:"20px"},className:"variable-editor-title-text"+(this.state.headerEditorActive?" active":""),onClick:this.handleOpenHeaderEditorTab,onMouseDown:this.handleTabClickPropogation},"Request Headers")),ut.default.createElement(Ry,{ref:function(k){r.variableEditorComponent=k},value:this.state.variables,variableToType:this.state.variableToType,onEdit:this.handleEditVariables,onHintInformationRender:this.handleHintInformationRender,onPrettifyQuery:this.handlePrettifyQuery,onMergeQuery:this.handleMergeQuery,onRunQuery:this.handleEditorRunQuery,editorTheme:this.props.editorTheme,readOnly:this.props.readOnly,active:this.state.variableEditorActive}),this.state.headerEditorEnabled&&ut.default.createElement(Dw,{ref:function(k){r.headerEditorComponent=k},value:this.state.headers,onEdit:this.handleEditHeaders,onHintInformationRender:this.handleHintInformationRender,onPrettifyQuery:this.handlePrettifyQuery,onMergeQuery:this.handleMergeQuery,onRunQuery:this.handleEditorRunQuery,editorTheme:this.props.editorTheme,readOnly:this.props.readOnly,active:this.state.headerEditorActive}))),ut.default.createElement("div",{className:"resultWrap"},this.state.isWaitingForResponse&&ut.default.createElement("div",{className:"spinner-container"},ut.default.createElement("div",{className:"spinner"})),ut.default.createElement(Cw,{registerRef:function(k){r.resultViewerElement=k},ref:function(k){r.resultComponent=k},value:this.state.response,editorTheme:this.props.editorTheme,ResultsTooltip:this.props.ResultsTooltip,ImagePreview:fF}),l))),this.state.docExplorerOpen&&ut.default.createElement("div",{className:v,style:h},ut.default.createElement("div",{className:"docExplorerResizer",onDoubleClick:this.handleDocsResetResize,onMouseDown:this.handleDocsResizeStart}),ut.default.createElement(qw,{ref:function(k){r.docExplorerComponent=k},schemaErrors:this.state.schemaErrors,schema:this.state.schema},ut.default.createElement("button",{className:"docExplorerHide",onClick:this.handleToggleDocs,"aria-label":"Close Documentation Explorer"},"\u2715"))))},t.prototype.getQueryEditor=function(){if(this.queryEditorComponent)return this.queryEditorComponent.getCodeMirror()},t.prototype.getVariableEditor=function(){return this.variableEditorComponent?this.variableEditorComponent.getCodeMirror():null},t.prototype.getHeaderEditor=function(){return this.headerEditorComponent?this.headerEditorComponent.getCodeMirror():null},t.prototype.refresh=function(){this.queryEditorComponent&&this.queryEditorComponent.getCodeMirror().refresh(),this.variableEditorComponent&&this.variableEditorComponent.getCodeMirror().refresh(),this.headerEditorComponent&&this.headerEditorComponent.getCodeMirror().refresh(),this.resultComponent&&this.resultComponent.getCodeMirror().refresh()},t.prototype.autoCompleteLeafs=function(){var r=Gw(this.state.schema,this.state.query,this.props.getDefaultFieldNames),n=r.insertions,i=r.result;if(n&&n.length>0){var o=this.getQueryEditor();o&&o.operation(function(){var s=o.getCursor(),l=o.indexFromPos(s);o.setValue(i||"");var d=0,h=n.map(function(y){var b=y.index,D=y.string;return o.markText(o.posFromIndex(b+d),o.posFromIndex(b+(d+=D.length)),{className:"autoInsertedLeaf",clearOnEnter:!0,title:"Automatically added leaf fields"})});setTimeout(function(){return h.forEach(function(y){return y.clear()})},7e3);var v=l;n.forEach(function(y){var b=y.index,D=y.string;b2?i.headers=JSON.parse(this.state.headers):this.props.headers&&(i.headers=JSON.parse(this.props.headers))}catch(s){this.setState({response:"Introspection failed as headers are invalid."});return}var o=wQ(n({query:this._introspectionQuery,operationName:this._introspectionQueryName},i));if(!SQ(o)){this.setState({response:"Fetcher did not return a Promise for introspection."});return}o.then(function(s){if(typeof s!="string"&&"data"in s)return s;var l=wQ(n({query:r._introspectionQuerySansSubscriptions,operationName:r._introspectionQueryName},i));if(!SQ(o))throw new Error("Fetcher did not return a Promise for introspection.");return l}).then(function(s){var l,d;if(r.state.schema===void 0)if(s&&s.data&&"__schema"in(s==null?void 0:s.data)){var h=(0,ii.buildClientSchema)(s.data);if(!r.props.dangerouslyAssumeSchemaIsValid){var v=(0,Ky.validateSchema)(h);v&&v.length>0&&(h=void 0,r.handleSchemaErrors(v))}if(h){var y=js(h,r.state.query);r.safeSetState(Ke(Ke({schema:h},y),{schemaErrors:void 0})),(d=(l=r.props).onSchemaChange)===null||d===void 0||d.call(l,h)}}else{var b=typeof s=="string"?s:t.formatResult(s);r.handleSchemaErrors([b])}}).catch(function(s){r.handleSchemaErrors([s])})},t.prototype.handleSchemaErrors=function(r){this.safeSetState({response:r?t.formatError(r):void 0,schema:void 0,schemaErrors:r})},t.prototype._fetchQuery=function(r,n,i,o,s,l){return Hw(this,void 0,void 0,function(){var d,h,v,y,b,D,_=this;return zw(this,function(k){d=this.props.fetcher,h=null,v=null;try{h=n&&n.trim()!==""?JSON.parse(n):null}catch(T){throw new Error("Variables are invalid JSON: "+T.message+".")}if(typeof h!="object")throw new Error("Variables are not a JSON object.");try{v=i&&i.trim()!==""?JSON.parse(i):null}catch(T){throw new Error("Headers are invalid JSON: "+T.message+".")}if(typeof v!="object")throw new Error("Headers are not a JSON object.");return this.props.externalFragments&&(y=new Map,Array.isArray(this.props.externalFragments)?this.props.externalFragments.forEach(function(T){y.set(T.name.value,T)}):(0,ii.visit)((0,ii.parse)(this.props.externalFragments,{}),{FragmentDefinition:function(T){y.set(T.name.value,T)}}),b=qm(this.state.documentAST,y),b.length>0&&(r+=` -`+b.map(function(T){return(0,ii.print)(T)}).join(` -`))),D=d({query:r,variables:h,operationName:o},{headers:v,shouldPersistHeaders:s,documentAST:this.state.documentAST}),[2,Promise.resolve(D).then(function(T){if(kQ(T)){var S=T.subscribe({next:l,error:function(m){_.safeSetState({isWaitingForResponse:!1,response:m?t.formatError(m):void 0,subscription:null})},complete:function(){_.safeSetState({isWaitingForResponse:!1,subscription:null})}});return S}else return OQ(T)?(function(){return Hw(_,void 0,void 0,function(){var m,w,x,L,O,R,M;return zw(this,function(q){switch(q.label){case 0:q.trys.push([0,13,,14]),q.label=1;case 1:q.trys.push([1,6,7,12]),m=Pne(T),q.label=2;case 2:return[4,m.next()];case 3:if(w=q.sent(),!!w.done)return[3,5];x=w.value,l(x),q.label=4;case 4:return[3,2];case 5:return[3,12];case 6:return L=q.sent(),R={error:L},[3,12];case 7:return q.trys.push([7,,10,11]),w&&!w.done&&(M=m.return)?[4,M.call(m)]:[3,9];case 8:q.sent(),q.label=9;case 9:return[3,11];case 10:if(R)throw R.error;return[7];case 11:return[7];case 12:return this.safeSetState({isWaitingForResponse:!1,subscription:null}),[3,14];case 13:return O=q.sent(),this.safeSetState({isWaitingForResponse:!1,response:O?t.formatError(O):void 0,subscription:null}),[3,14];case 14:return[2]}})})}(),{unsubscribe:function(){var m,w;return(w=(m=T[Symbol.asyncIterator]()).return)===null||w===void 0?void 0:w.call(m)}}):(l(T),null)}).catch(function(T){return _.safeSetState({isWaitingForResponse:!1,response:T?t.formatError(T):void 0}),null})]})})},t.prototype._runQueryAtCursor=function(){if(this.state.subscription){this.handleStopQuery();return}var r,n=this.state.operations;if(n){var i=this.getQueryEditor();if(i&&i.hasFocus())for(var o=i.getCursor(),s=i.indexFromPos(o),l=0;l=s){r=d.name&&d.name.value;break}}}this.handleRunQuery(r)},t.prototype._didClickDragBar=function(r){if(r.button!==0||r.ctrlKey)return!1;var n=r.target;if(n.className.indexOf("CodeMirror-gutter")!==0)return!1;for(var i=this.resultViewerElement;n;){if(n===i)return!0;n=n.parentNode}return!1},t.formatError=function(r){return Array.isArray(r)?mQ({errors:r.map(function(n){return yQ(n)})}):mQ({errors:yQ(r)})},t.Logo=TQ,t.Toolbar=_Q,t.Footer=EQ,t.QueryEditor=wy,t.VariableEditor=Ry,t.HeaderEditor=Dw,t.ResultViewer=Cw,t.Button=Lu,t.ToolbarButton=Lu,t.Group=rO,t.Menu=nO,t.MenuItem=iO,t}(ut.default.Component);function TQ(e){return ut.default.createElement("div",{className:"title"},e.children||ut.default.createElement("span",null,"Graph",ut.default.createElement("em",null,"i"),"QL"))}TQ.displayName="GraphiQLLogo";function _Q(e){return ut.default.createElement("div",{className:"toolbar",role:"toolbar","aria-label":"Editor Commands"},e.children)}_Q.displayName="GraphiQLToolbar";function EQ(e){return ut.default.createElement("div",{className:"footer"},e.children)}EQ.displayName="GraphiQLFooter";var Vne=`# Welcome to GraphiQL -# -# GraphiQL is an in-browser tool for writing, validating, and -# testing GraphQL queries. -# -# Type queries into this side of the screen, and you will see intelligent -# typeaheads aware of the current GraphQL type schema and live syntax and -# validation errors highlighted within the text. -# -# GraphQL queries typically start with a "{" character. Lines that start -# with a # are ignored. -# -# An example GraphQL query might look like: -# -# { -# field(arg: "value") { -# subField -# } -# } -# -# Keyboard shortcuts: -# -# Prettify Query: Shift-Ctrl-P (or press the prettify button above) -# -# Merge Query: Shift-Ctrl-M (or press the merge button above) -# -# Run Query: Ctrl-Enter (or press the play button above) -# -# Auto Complete: Ctrl-Space (or just start typing) -# - -`;function SQ(e){return typeof e=="object"&&typeof e.then=="function"}function Une(e){return new Promise(function(t,r){var n=e.subscribe({next:function(i){t(i),n.unsubscribe()},error:r,complete:function(){r(new Error("no value resolved"))}})})}function kQ(e){return typeof e=="object"&&"subscribe"in e&&typeof e.subscribe=="function"}function OQ(e){return typeof e=="object"&&e!==null&&(e[Symbol.toStringTag]==="AsyncGenerator"||Symbol.asyncIterator in e)}function Gne(e){return new Promise(function(t,r){var n,i=(n=("return"in e?e:e[Symbol.asyncIterator]()).return)===null||n===void 0?void 0:n.bind(e),o=("next"in e?e:e[Symbol.asyncIterator]()).next.bind(e);o().then(function(s){t(s.value),i==null||i()}).catch(function(s){r(s)})})}function wQ(e){return Promise.resolve(e).then(function(t){return OQ(t)?Gne(t):kQ(t)?Une(t):t})}function Ww(e,t){var r;return((r=e==null?void 0:e.type)===null||r===void 0?void 0:r.displayName)&&e.type.displayName===t.displayName?!0:e.type===t}function Qne(e,t){return Ke(Ke({},t),{tabs:t.tabs.map(function(r,n){return n!==t.activeTabIndex?r:Ke(Ke({},r),{headers:e,hash:Uu({query:r.query,headers:e,variables:r.variables})})})})}function Bne(e,t){return Ke(Ke({},t),{tabs:t.tabs.map(function(r,n){return n!==t.activeTabIndex?r:Ke(Ke({},r),{variables:e,hash:Uu({query:r.query,headers:r.headers,variables:e})})})})}function Kne(e,t,r){return Ke(Ke({},t),{tabs:t.tabs.map(function(n,i){return i!==t.activeTabIndex?n:Ke(Ke({},n),{title:r!=null?r:dQ(e),query:e,hash:Uu({query:e,headers:n.headers,variables:n.variables})})})})}function Hne(e,t){var r=t.tabs.activeTabIndex,n=t.tabs.tabs.map(function(o,s){return s!==r?o:Ke(Ke({},o),{query:t.query,variables:t.variables,operationName:t.operationName,headers:t.headers,response:t.response,hash:Uu({query:t.query,variables:t.variables,headers:t.headers})})}),i=t.tabs.tabs[e];return Ke(Ke({},t),{query:i.query,variables:i.variables,operationName:i.operationName,headers:i.headers,response:i.response,tabs:Ke(Ke({},t.tabs),{tabs:n,activeTabIndex:e})})}function zne(e,t){var r=t.tabs.activeTabIndex>0?t.tabs.activeTabIndex-1:0,n=Ke(Ke({},t.tabs),{activeTabIndex:r,tabs:t.tabs.tabs.filter(function(o,s){return e!==s})}),i=n.tabs[r];return Ke(Ke({},t),{query:i.query,variables:i.variables,operationName:i.operationName,headers:i.headers,response:i.response,tabs:n})}function Wne(e){var t=e.tabs.activeTabIndex,r={id:By(),title:"",headers:"",variables:"",query:"",operationName:"",response:"",hash:Uu({query:"",variables:"",headers:""})},n=e.tabs.tabs.map(function(i,o){return o!==t?i:Ke(Ke({},i),{headers:e.headers,variables:e.variables,query:e.query,operationName:e.operationName,response:e.response})});return Ke(Ke({},e),{headers:r.headers,variables:r.variables,query:r.query,operationName:r.operationName,response:r.response,tabs:Ke(Ke({},e.tabs),{activeTabIndex:e.tabs.tabs.length,tabs:pQ(n,[r])})})}var oa=Ee(zt()),Yne=function(){var e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},e(t,r)};return function(t,r){e(t,r);function n(){this.constructor=t}t.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}(),Yw=function(){return Yw=Object.assign||function(e){for(var t,r=1,n=arguments.length;r - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * is-primitive - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * isobject - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * set-value - * - * Copyright (c) Jon Schlinkert (https://github.com/jonschlinkert). - * Released under the MIT License. - */ -/** @license React v0.20.2 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v17.0.2 - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v17.0.2 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ diff --git a/netbox/project-static/dist/graphiql.js.map b/netbox/project-static/dist/graphiql.js.map deleted file mode 100644 index 23c20b9a45f..00000000000 --- a/netbox/project-static/dist/graphiql.js.map +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": 3, - "sources": ["../node_modules/object-assign/index.js", "../node_modules/react/cjs/react.production.min.js", "../node_modules/react/index.js", "../node_modules/scheduler/cjs/scheduler.production.min.js", "../node_modules/scheduler/index.js", "../node_modules/react-dom/cjs/react-dom.production.min.js", "../node_modules/react-dom/index.js", "../node_modules/graphql/version.js", "../node_modules/graphql/jsutils/isPromise.js", "../node_modules/graphql/jsutils/isObjectLike.js", "../node_modules/graphql/polyfills/symbols.js", "../node_modules/graphql/language/location.js", "../node_modules/graphql/language/printLocation.js", "../node_modules/graphql/error/GraphQLError.js", "../node_modules/graphql/error/syntaxError.js", "../node_modules/graphql/language/kinds.js", "../node_modules/graphql/jsutils/invariant.js", "../node_modules/graphql/jsutils/nodejsCustomInspectSymbol.js", "../node_modules/graphql/jsutils/defineInspect.js", "../node_modules/graphql/language/ast.js", "../node_modules/graphql/language/tokenKind.js", "../node_modules/graphql/jsutils/inspect.js", "../node_modules/graphql/jsutils/devAssert.js", "../node_modules/graphql/jsutils/instanceOf.js", "../node_modules/graphql/language/source.js", "../node_modules/graphql/language/directiveLocation.js", "../node_modules/graphql/language/blockString.js", "../node_modules/graphql/language/lexer.js", "../node_modules/graphql/language/parser.js", "../node_modules/graphql/language/visitor.js", "../node_modules/graphql/polyfills/find.js", "../node_modules/graphql/polyfills/objectValues.js", "../node_modules/graphql/error/locatedError.js", "../node_modules/graphql/utilities/assertValidName.js", "../node_modules/graphql/polyfills/objectEntries.js", "../node_modules/graphql/jsutils/keyMap.js", "../node_modules/graphql/jsutils/mapValue.js", "../node_modules/graphql/jsutils/toObjMap.js", "../node_modules/graphql/jsutils/keyValMap.js", "../node_modules/graphql/jsutils/didYouMean.js", "../node_modules/graphql/jsutils/identityFunc.js", "../node_modules/graphql/jsutils/naturalCompare.js", "../node_modules/graphql/jsutils/suggestionList.js", "../node_modules/graphql/language/printer.js", "../node_modules/graphql/utilities/valueFromASTUntyped.js", "../node_modules/graphql/type/definition.js", "../node_modules/graphql/utilities/typeComparators.js", "../node_modules/graphql/polyfills/arrayFrom.js", "../node_modules/graphql/polyfills/isFinite.js", "../node_modules/graphql/jsutils/safeArrayFrom.js", "../node_modules/graphql/polyfills/isInteger.js", "../node_modules/graphql/type/scalars.js", "../node_modules/graphql/utilities/astFromValue.js", "../node_modules/graphql/type/introspection.js", "../node_modules/graphql/type/directives.js", "../node_modules/graphql/type/schema.js", "../node_modules/graphql/type/validate.js", "../node_modules/graphql/utilities/typeFromAST.js", "../node_modules/graphql/utilities/TypeInfo.js", "../node_modules/graphql/language/predicates.js", "../node_modules/graphql/validation/rules/ExecutableDefinitionsRule.js", "../node_modules/graphql/validation/rules/UniqueOperationNamesRule.js", "../node_modules/graphql/validation/rules/LoneAnonymousOperationRule.js", "../node_modules/graphql/validation/rules/SingleFieldSubscriptionsRule.js", "../node_modules/graphql/validation/rules/KnownTypeNamesRule.js", "../node_modules/graphql/validation/rules/FragmentsOnCompositeTypesRule.js", "../node_modules/graphql/validation/rules/VariablesAreInputTypesRule.js", "../node_modules/graphql/validation/rules/ScalarLeafsRule.js", "../node_modules/graphql/validation/rules/FieldsOnCorrectTypeRule.js", "../node_modules/graphql/validation/rules/UniqueFragmentNamesRule.js", "../node_modules/graphql/validation/rules/KnownFragmentNamesRule.js", "../node_modules/graphql/validation/rules/NoUnusedFragmentsRule.js", "../node_modules/graphql/validation/rules/PossibleFragmentSpreadsRule.js", "../node_modules/graphql/validation/rules/NoFragmentCyclesRule.js", "../node_modules/graphql/validation/rules/UniqueVariableNamesRule.js", "../node_modules/graphql/validation/rules/NoUndefinedVariablesRule.js", "../node_modules/graphql/validation/rules/NoUnusedVariablesRule.js", "../node_modules/graphql/validation/rules/KnownDirectivesRule.js", "../node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.js", "../node_modules/graphql/validation/rules/KnownArgumentNamesRule.js", "../node_modules/graphql/validation/rules/UniqueArgumentNamesRule.js", "../node_modules/graphql/validation/rules/ValuesOfCorrectTypeRule.js", "../node_modules/graphql/validation/rules/ProvidedRequiredArgumentsRule.js", "../node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js", "../node_modules/graphql/validation/rules/OverlappingFieldsCanBeMergedRule.js", "../node_modules/graphql/validation/rules/UniqueInputFieldNamesRule.js", "../node_modules/graphql/validation/rules/LoneSchemaDefinitionRule.js", "../node_modules/graphql/validation/rules/UniqueOperationTypesRule.js", "../node_modules/graphql/validation/rules/UniqueTypeNamesRule.js", "../node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.js", "../node_modules/graphql/validation/rules/UniqueFieldDefinitionNamesRule.js", "../node_modules/graphql/validation/rules/UniqueDirectiveNamesRule.js", "../node_modules/graphql/validation/rules/PossibleTypeExtensionsRule.js", "../node_modules/graphql/validation/specifiedRules.js", "../node_modules/graphql/validation/ValidationContext.js", "../node_modules/graphql/validation/validate.js", "../node_modules/graphql/jsutils/memoize3.js", "../node_modules/graphql/jsutils/promiseReduce.js", "../node_modules/graphql/jsutils/promiseForObject.js", "../node_modules/graphql/jsutils/Path.js", "../node_modules/graphql/utilities/getOperationRootType.js", "../node_modules/graphql/jsutils/printPathArray.js", "../node_modules/graphql/utilities/valueFromAST.js", "../node_modules/graphql/utilities/coerceInputValue.js", "../node_modules/graphql/execution/values.js", "../node_modules/graphql/execution/execute.js", "../node_modules/graphql/graphql.js", "../node_modules/graphql/type/index.js", "../node_modules/graphql/language/index.js", "../node_modules/graphql/execution/index.js", "../node_modules/graphql/jsutils/isAsyncIterable.js", "../node_modules/graphql/subscription/mapAsyncIterator.js", "../node_modules/graphql/subscription/subscribe.js", "../node_modules/graphql/subscription/index.js", "../node_modules/graphql/validation/rules/custom/NoDeprecatedCustomRule.js", "../node_modules/graphql/validation/rules/custom/NoSchemaIntrospectionCustomRule.js", "../node_modules/graphql/validation/index.js", "../node_modules/graphql/error/formatError.js", "../node_modules/graphql/error/index.js", "../node_modules/graphql/utilities/getIntrospectionQuery.js", "../node_modules/graphql/utilities/getOperationAST.js", "../node_modules/graphql/utilities/introspectionFromSchema.js", "../node_modules/graphql/utilities/buildClientSchema.js", "../node_modules/graphql/utilities/extendSchema.js", "../node_modules/graphql/utilities/buildASTSchema.js", "../node_modules/graphql/utilities/lexicographicSortSchema.js", "../node_modules/graphql/utilities/printSchema.js", "../node_modules/graphql/utilities/concatAST.js", "../node_modules/graphql/utilities/separateOperations.js", "../node_modules/graphql/utilities/stripIgnoredCharacters.js", "../node_modules/graphql/utilities/findBreakingChanges.js", "../node_modules/graphql/utilities/findDeprecatedUsages.js", "../node_modules/graphql/utilities/index.js", "../node_modules/graphql/index.js", "../node_modules/toggle-selection/index.js", "../node_modules/copy-to-clipboard/index.js", "../node_modules/nullthrows/nullthrows.js", "../node_modules/markdown-it/lib/common/entities.js", "../node_modules/uc.micro/categories/P/regex.js", "../node_modules/mdurl/encode.js", "../node_modules/mdurl/decode.js", "../node_modules/mdurl/format.js", "../node_modules/mdurl/parse.js", "../node_modules/mdurl/index.js", "../node_modules/uc.micro/properties/Any/regex.js", "../node_modules/uc.micro/categories/Cc/regex.js", "../node_modules/uc.micro/categories/Cf/regex.js", "../node_modules/uc.micro/categories/Z/regex.js", "../node_modules/uc.micro/index.js", "../node_modules/markdown-it/lib/common/utils.js", "../node_modules/markdown-it/lib/helpers/parse_link_label.js", "../node_modules/markdown-it/lib/helpers/parse_link_destination.js", "../node_modules/markdown-it/lib/helpers/parse_link_title.js", "../node_modules/markdown-it/lib/helpers/index.js", "../node_modules/markdown-it/lib/renderer.js", "../node_modules/markdown-it/lib/ruler.js", "../node_modules/markdown-it/lib/rules_core/normalize.js", "../node_modules/markdown-it/lib/rules_core/block.js", "../node_modules/markdown-it/lib/rules_core/inline.js", "../node_modules/markdown-it/lib/rules_core/linkify.js", "../node_modules/markdown-it/lib/rules_core/replacements.js", "../node_modules/markdown-it/lib/rules_core/smartquotes.js", "../node_modules/markdown-it/lib/token.js", "../node_modules/markdown-it/lib/rules_core/state_core.js", "../node_modules/markdown-it/lib/parser_core.js", "../node_modules/markdown-it/lib/rules_block/table.js", "../node_modules/markdown-it/lib/rules_block/code.js", "../node_modules/markdown-it/lib/rules_block/fence.js", "../node_modules/markdown-it/lib/rules_block/blockquote.js", "../node_modules/markdown-it/lib/rules_block/hr.js", "../node_modules/markdown-it/lib/rules_block/list.js", "../node_modules/markdown-it/lib/rules_block/reference.js", "../node_modules/markdown-it/lib/common/html_blocks.js", "../node_modules/markdown-it/lib/common/html_re.js", "../node_modules/markdown-it/lib/rules_block/html_block.js", "../node_modules/markdown-it/lib/rules_block/heading.js", "../node_modules/markdown-it/lib/rules_block/lheading.js", "../node_modules/markdown-it/lib/rules_block/paragraph.js", "../node_modules/markdown-it/lib/rules_block/state_block.js", "../node_modules/markdown-it/lib/parser_block.js", "../node_modules/markdown-it/lib/rules_inline/text.js", "../node_modules/markdown-it/lib/rules_inline/newline.js", "../node_modules/markdown-it/lib/rules_inline/escape.js", "../node_modules/markdown-it/lib/rules_inline/backticks.js", "../node_modules/markdown-it/lib/rules_inline/strikethrough.js", "../node_modules/markdown-it/lib/rules_inline/emphasis.js", "../node_modules/markdown-it/lib/rules_inline/link.js", "../node_modules/markdown-it/lib/rules_inline/image.js", "../node_modules/markdown-it/lib/rules_inline/autolink.js", "../node_modules/markdown-it/lib/rules_inline/html_inline.js", "../node_modules/markdown-it/lib/rules_inline/entity.js", "../node_modules/markdown-it/lib/rules_inline/balance_pairs.js", "../node_modules/markdown-it/lib/rules_inline/text_collapse.js", "../node_modules/markdown-it/lib/rules_inline/state_inline.js", "../node_modules/markdown-it/lib/parser_inline.js", "../node_modules/linkify-it/lib/re.js", "../node_modules/linkify-it/index.js", "../node_modules/punycode/punycode.js", "../node_modules/markdown-it/lib/presets/default.js", "../node_modules/markdown-it/lib/presets/zero.js", "../node_modules/markdown-it/lib/presets/commonmark.js", "../node_modules/markdown-it/lib/index.js", "../node_modules/markdown-it/index.js", "../node_modules/escape-html/index.js", "../node_modules/codemirror/lib/codemirror.js", "../node_modules/codemirror/addon/hint/show-hint.js", "../node_modules/codemirror/addon/edit/matchbrackets.js", "../node_modules/codemirror/addon/edit/closebrackets.js", "../node_modules/codemirror/addon/fold/brace-fold.js", "../node_modules/codemirror/addon/fold/foldcode.js", "../node_modules/codemirror/addon/fold/foldgutter.js", "../node_modules/codemirror/addon/lint/lint.js", "../node_modules/codemirror/addon/search/searchcursor.js", "../node_modules/codemirror/addon/dialog/dialog.js", "../node_modules/codemirror/addon/search/jump-to-line.js", "../node_modules/codemirror/keymap/sublime.js", "../node_modules/codemirror/addon/comment/comment.js", "../node_modules/codemirror/addon/search/search.js", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/interface/autocompleteUtils.ts", "../node_modules/codemirror-graphql/node_modules/vscode-languageserver-types/lib/umd/main.js", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/parser/CharacterStream.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/parser/RuleHelpers.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/parser/Rules.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/parser/onlineParser.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/parser/types.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/parser/index.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/interface/getAutocompleteSuggestions.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/utils/fragmentDependencies.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/utils/getVariablesJSONSchema.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/utils/getASTNodeAtPosition.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/utils/Range.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/utils/validateWithCustomRules.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/utils/collectVariables.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/utils/getOperationFacts.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/utils/index.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/interface/getDefinition.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/interface/getDiagnostics.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/interface/getOutline.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/interface/getHoverInformation.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/interface/index.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/types.ts", "../node_modules/codemirror-graphql/node_modules/graphql-language-service/src/index.ts", "../node_modules/codemirror-graphql/src/hint.ts", "../node_modules/codemirror-graphql/src/lint.ts", "../node_modules/codemirror-graphql/src/utils/forEachState.ts", "../node_modules/codemirror-graphql/src/utils/getTypeInfo.ts", "../node_modules/codemirror-graphql/src/utils/SchemaReference.ts", "../node_modules/codemirror-graphql/src/utils/info-addon.ts", "../node_modules/codemirror-graphql/src/info.ts", "../node_modules/codemirror-graphql/src/utils/jump-addon.ts", "../node_modules/codemirror-graphql/src/jump.ts", "../node_modules/codemirror-graphql/src/utils/mode-indent.ts", "../node_modules/codemirror-graphql/src/utils/mode-factory.ts", "../node_modules/codemirror-graphql/src/mode.ts", "../node_modules/codemirror-graphql/src/utils/hintList.ts", "../node_modules/codemirror-graphql/src/variables/hint.ts", "../node_modules/codemirror-graphql/src/utils/jsonParse.ts", "../node_modules/codemirror-graphql/src/variables/lint.ts", "../node_modules/codemirror-graphql/src/variables/mode.ts", "../node_modules/codemirror/mode/javascript/javascript.js", "../node_modules/codemirror-graphql/src/results/mode.ts", "../node_modules/is-primitive/index.js", "../node_modules/isobject/index.js", "../node_modules/is-plain-object/index.js", "../node_modules/set-value/index.js", "../node_modules/backo2/index.js", "../node_modules/eventemitter3/index.js", "../node_modules/subscriptions-transport-ws/src/utils/is-string.ts", "../node_modules/subscriptions-transport-ws/src/utils/is-object.ts", "../node_modules/symbol-observable/lib/ponyfill.js", "../node_modules/symbol-observable/lib/index.js", "../node_modules/subscriptions-transport-ws/src/protocol.ts", "../node_modules/subscriptions-transport-ws/src/defaults.ts", "../node_modules/subscriptions-transport-ws/src/message-types.ts", "../node_modules/subscriptions-transport-ws/src/client.ts", "../netbox-graphiql/index.ts", "../node_modules/graphiql/src/components/GraphiQL.tsx", "../node_modules/graphql-language-service/src/interface/getAutocompleteSuggestions.ts", "../node_modules/vscode-languageserver-types/lib/esm/main.js", "../node_modules/graphql-language-service/src/types.ts", "../node_modules/graphql-language-service/src/parser/RuleHelpers.ts", "../node_modules/graphql-language-service/src/parser/Rules.ts", "../node_modules/graphql-language-service/src/parser/types.ts", "../node_modules/graphql-language-service/src/utils/fragmentDependencies.ts", "../node_modules/graphql-language-service/src/utils/collectVariables.ts", "../node_modules/graphql-language-service/src/utils/getOperationFacts.ts", "../node_modules/graphql-language-service/src/interface/getDiagnostics.ts", "../node_modules/graphiql/src/components/ExecuteButton.tsx", "../node_modules/graphiql/src/components/ImagePreview.tsx", "../node_modules/graphiql/src/components/ToolbarButton.tsx", "../node_modules/graphiql/src/components/ToolbarGroup.tsx", "../node_modules/graphiql/src/components/ToolbarMenu.tsx", "../node_modules/graphiql/src/components/QueryEditor.tsx", "../node_modules/graphiql/src/utility/normalizeWhitespace.ts", "../node_modules/graphiql/src/utility/onHasCompletion.ts", "../node_modules/graphiql/src/utility/commonKeys.ts", "../node_modules/graphiql/src/utility/importCodeMirror.ts", "../node_modules/graphiql/src/components/VariableEditor.tsx", "../node_modules/graphiql/src/components/HeaderEditor.tsx", "../node_modules/graphiql/src/components/ResultViewer.tsx", "../node_modules/graphiql/src/components/DocExplorer.tsx", "../node_modules/graphiql/src/components/DocExplorer/FieldDoc.tsx", "../node_modules/graphiql/src/components/DocExplorer/Argument.tsx", "../node_modules/graphiql/src/components/DocExplorer/TypeLink.tsx", "../node_modules/graphiql/src/components/DocExplorer/DefaultValue.tsx", "../node_modules/graphiql/src/components/DocExplorer/Directive.tsx", "../node_modules/graphiql/src/components/DocExplorer/MarkdownContent.tsx", "../node_modules/graphiql/src/components/DocExplorer/SchemaDoc.tsx", "../node_modules/graphiql/src/components/DocExplorer/SearchBox.tsx", "../node_modules/graphiql/src/utility/debounce.ts", "../node_modules/graphiql/src/components/DocExplorer/SearchResults.tsx", "../node_modules/graphiql/src/components/DocExplorer/TypeDoc.tsx", "../node_modules/graphiql/src/components/QueryHistory.tsx", "../node_modules/graphiql/src/components/HistoryQuery.tsx", "../node_modules/graphiql/src/utility/QueryStore.ts", "../node_modules/graphiql/src/utility/HistoryStore.ts", "../node_modules/graphiql/src/utility/CodeMirrorSizer.ts", "../node_modules/graphiql/src/utility/StorageAPI.ts", "../node_modules/graphiql/src/utility/getSelectedOperationName.ts", "../node_modules/graphiql/src/utility/find.ts", "../node_modules/graphiql/src/utility/fillLeafs.ts", "../node_modules/graphiql/src/utility/elementPosition.ts", "../node_modules/graphiql/src/utility/mergeAst.ts", "../node_modules/graphiql/src/utility/introspectionQueries.ts", "../node_modules/graphiql/src/components/Tabs.tsx", "../node_modules/graphiql/src/utility/fuzzyExtractOperationTitle.ts", "../node_modules/graphiql/src/utility/id-from-tab-contents.ts", "../node_modules/graphiql/src/utility/guid.ts", "../node_modules/graphiql/src/components/ToolbarSelect.tsx", "../node_modules/graphiql/src/index.ts"], - "mappings": "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", - "names": [] -} diff --git a/netbox/project-static/dist/graphiql.min.css b/netbox/project-static/dist/graphiql.min.css deleted file mode 100644 index 6318023d0e6..00000000000 --- a/netbox/project-static/dist/graphiql.min.css +++ /dev/null @@ -1,641 +0,0 @@ -/*!*********************************************************************************************!*\ - !*** css ../../../node_modules/css-loader/dist/cjs.js!../../graphiql-react/font/roboto.css ***! - \*********************************************************************************************/ -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,d09GMgABAAAAAC80AA4AAAAAVTAAAC7cAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoFOG5JCHDYGYACCWBEMCoGBAOoVC4NaAAE2AiQDhzAEIAWDCgcgG/JGo6Kq1zUjEcLGASoGnAv+MoEbQ7A+yIsRMaSqAH+x1tYTX0OAvwSG6Gnrf1VwxGnKQe5khBE+tEwjJJnl4f/39/9zH3wYTYp0ApGJBFek79HVxOSqxnvfW8fza2ve/3+bDaKWCouyQIHzUEAlImQJWZCoUGiJVCINFmUxaEEFDxMwUE8x+vSs0zs9gbEtUOt5+nf46f2redKa+RgB44pNjY1bKkA4gAaHdRjNfbr07S5vRmAFgEt6PXefZnfWp411rPPJDtDpNB9bu2gDXFTU/SrYr7QBGv6av3h1FWmwKhzogW1gXz/q/m+bb5WFCh76QhNtX2ZS2gglnsLhs//TZbYja2R4OtKzA3shb3GERZVLC9hUWKH0R5I1M4vSkVaGXRPv7RHtrZOnAGCVMkVpOkConAq5oqa6dF3aFrmowvPvn6i9WDxg1tRefhp/gB+LExjQhBdfRstouIxoFOipBSwYNtfkZYAjWYpznajtsdQCKLYbjyAiXY/PrZ9xbxfh7m/XQvLKY423auq+f0olGBYAd2HkbGcI2cMKYsMG4sAJ4sIVzos3JAAPEiQIwhcGiRILSZAISZEGyZIFyVUIKVEKqVQJqVYNqVMHadAEadECOeIIpEsPpN9JiMAjyBNPIM+9gLzyFoJgQCOgDQziwh1IQAIaUKeFGPtx6lyaX6bbNtD84frK9TR/7ezYRBNa/23bJhwIiwRAAjIgIyYNxMUdzu8jgAHhxj2zwyo+pnlY5ZPazg6ZqjT0Loxv/6gmxYhhee7JeQOp9eApRZlFr8wiWbaanHx8Aq/N87DyuMUV62R1R5AmpqXLeomnfUYUaF6q8Pg+Vzrxtmh63qW+acoKWEkJfXXiy1vwWjPbDnDXJNa+zrWc1L6P0M9e/K11//hLeGYvSOjd04+l76vO1ccnDzs+9xOAO35k/juy1hdd6Wu3PnjcBRI7mib6tHdVc3vP9J0L6zDjj00yNZpa+qzVtPHBlvcsDg6I0/2jGZJwms3oy02LrrBgc6JYd3VzJcLTHL2+d8JlTtfhst0RiMV+dm9V2N/Tr9Dhh2KZzsXEvSVqv8aJ/t05ikZmnZMWZh3rZrXxHdVqDAoKCH6rypYwkUILuq/bSF5XK7eBNDVxpSPixl8DiR4jO1iw4hev2pmBgu3nZzFi5cpX6FBc+p8exw0QGHTKaUOEhp0xYdJls+Zdc90NN92yYNGyPz3yzHMvURj2OofeF1p7yW1R1b8d7ifNtYak9S9kSX0muc+l0mVln6ruE01W0dN1JBSHpNaVXD9U+JQtnPhceW2nuSXIDPuRQz8L1anqw30d6AU0p+9INj5L7W1pvaiwL1Viqiai+fp9Sz9BmvoYiWH/5tCPQvtWVb9q7juYOd4Vj2hseo1fHwpJVWT/WXJfS+uyso6p7yNNRKHw+SMxhs2krucQ27LJnulCezqfozNNahuf8Vu4wr5Q1jBVrXK4J9Q3VRO25lZi3GH7PQrOa5L6Mn9+pLI3VVM39SiPm1YjGuMcj2RY4cciIsvv6/24TK73QzbGL/SQovd+CZ1hT7HpLQ6dFYp5d109S2a+5iF/5MOxnUbXWTaju7l1wkk63ee8EWPGaXU8aSZmM6OOuB0wFnCWxFih8UMRgImHLRBdMLr96GIwxWIrhBwiqgRTKbZuYnrQHMdyAsdJDANoBjGdwjYEI0Q2DHMG2XkkI4O63qaaAEyT2C5DZuHm4a6huE7KDTQ3SbmFZoGURTTLRPxJ0iOiniA8I+E5SS8HfcvcYX0PTOtiSvNmCCyUYz6KxFUW/lxW1QCjR6wXzWuAADXoV5riZLWqGmFqZUFLuT8hwI3gNRukjBH8BLnRVNFQUHol8qle8MR0hH5AXowhQNQPnSjlFFYBqn60pmieSUmaoqKoKqpy1VKqp4jVTefF5kcFEigvzGaQuoq1+UvBFx7DqmSnjAmfZkyAiiUjvuEXwKrT+ATK0FVAMWoElCnDx5OSt8IKTCHSWNoj9sNFwIpliUxyClKeI+nLQM7nWu5kJV8Hlc1GvKugWBJeopKSolTlaPpzKiO5nrt5kn8GK5t3FVTugsotQGUWVCZB5RmorIBK6YBEFegFDLELmAcsAw4CZ4AbwEiGnunUZW80gXiR2aeXB888OvMpH778clvP375Ys7F+xwQKEizES6/ii7fsfoxZ9olUaR5biTaHly5DpizZcuTK88BD+QoUGjMaezKnXFCkmLXdcdfB2NX3a2+UueetVkcIcrpSYVFsgO+A9AF4B5p8BJ0WQLEXZJ89DfSj6MSUiRgRVpbfAVfIeXKbXk3QXIWAAzNlOWxZVKJRiAJpwlGYilkyeDPlK7EsgGygO8OkuVea0943N1qrxJuKFsA21quXc0fIskBQRMJSERPJrEkUSVFx2IO47RgaWDQHcHuRTVW+3tCSpDBUgvSS5mSOJbtWDNumUG3GblmoblUYAA9kIAF9zqL8hSgZY1HSVex2VkirkoRExLN1nYoQyyR4YAolcrpkGJomCDxvWo1QMqpoW1rKhHT3tju06zCUSaViX5ZplgVBEjpOB7hzoUK9C3he02RZ4pe4lNF4TWHj8WwRGe2ZkVweGRCcwu1wQdxHN7rRDfOXf6cuFHymU40lIqdUbVgiG9OcJBSZeB19jywI2jjDkGIyvZ5dQpbFK+vzZbig+8IeY7U9uC73znT5cVJtYhvzoAQJeJ0UeHMRxiOYjHFSkGXrQhXGf6PkR1DK/o0KAEqJvPE7osjSg2TzqzbMekWSU71ztpPj1BraN9iaOZOn+OYH7GbeeY2YYQlxGGA/Qiw2p0MzXKcpeRfXPA8oGmKpA60e07q8yWsxnoLscZizoVw0rZ3IZtPaMxz7oGk1nn06gx0schwtQqsPxQLmguVHekl8EvHnrVDui9Ovbm7/98aJ57d6sn4k4ljm0qgPrraIe4mrMJs2WruHwahxCdecqU8EO0/mod19L/dQiSfjbf+qpwhiV7Y7myqZ4zGsKqU9l8nM7uYHKrWSD4+Vu+op7EOrp1WjA9g5iUqQZOINZ2jdhwykTSmDGXFZrOZ5Fd6YBVdXx+oKIsfzItL4dK1IH2Hg5KhISu9ae+dRNX66uYlLUjQbF7CQwU2QMS5ihhb3S5WsGlKwN7fd7RMYhAWAef6Loq2ZlpYU7SvwhYPyoyTg0z7kcjZhNbuYfjthtcpnNsYrIXMBzIMlOyGRScfAUh1EC1rbMe/k9R5uX+L4cYZG+POa6GSPEXLvRCxgIIU+FC2cxxQNkoJPwEKwp8kiRChwGmdzO4ebFKZBN8lyqgy5akZ6RYNVTzUJfQ6qijBFH6OJZy5PfhA4WMzAlRCci43yPvEyu1YE93+QzQ44nGXiNo3gE+B07gQ7D86FXH1/sYrDMrTKw6VzGuqsNpPAYEDaBr48s8IREoYixIwQ+FFjTJddfDHohD60rPY2Cj3TC9wDDvynURdS4B653OWMnKFvhB7i0Nh/4/ycw7ClqQjPhVrdhgOtabwqD4vC1GSLtcruqqLSi08b0sctZFsxQEcvb8T39CbmS0j1RCvpe6YL/Hghfv7wpL3xvJOXLDakQXz23A6eTcl43QghF3CaYL4U84JgHsrEr4P1inFTvGRjlzt1vbSD807udkiRYyZ+/WJR5pk+tGZV4aDHRBtIpdO9Cn6gC1zn4ga2vAmW8/g7qFtQMuxPaazxBggjVlTC/0ZbEiCxZYMhRjzq1esbisUbPEcQTGdXmNtWVjJWl/TM+zTWcoCxwXT+8mdW1Br/hY8fcRKk+fhw6SOOmf8gw8CgS6SzMd7mWlPpzf6ndSD8xyHrzCSA+x09k7syz10ruZ29EznBQ4x9yu5HxnWndL4ZYEXu3rzb5Y16oYTd96hsB5P6DXdSXztmOww5UnXgNP6PUmrEA+AtXMlVn7HSk7vuU40VJxREOftWl7k5ovoapE14t727Vg5BkFJruqF/lVKDKXCBcR9lumB21r2pG4q0gVyzOnVT7NuxiooVs0vVu5xwbn3b9TZPL6Uj4oqRAipomlegaCblNTCwpFVkZKyHrcAoX/multkQ/r6q3xan09IWA6lsTNEMNnWoW67vcke29VS73NzWvexgi+enG+apJYGNLiMZKSxrCwtyiyRBkWae9y7RteEqaxYObtbCDtOx6j2M9X0mBpZAlankhxty1378EIMLmidBDaoKS7obmb5iubkIC0DA4O8wrwQWkhGw852CyTOJ07kozg44bmwS5CFQwXkz5s8TZwlFZbI1bxGmMQVluFLb/evvvASAI3r6OnmbRsJx4CTTvWQmeIyHMiJI+htujuzdOjigE32EGq8z9V6I7nI+B+A57zmJzckX84bByJyou9hD53g0u4PNTgIOZ5kVB0EZC5ZoIF27wDqCMpR7c2ISFyvdhV0NRzBEOviwkkv4tUwLOXeCwcK7FC5oX2xGToLTttPdDzpM1RX85R+nrLkWxcRoxhV/ZLPdyanN28a17HZb/77yRuLHTJUnZYkTuUL3rwuHP3h34mZyRFP5M0wSi8YV4g/jSq5eoRizM+9NUWC8uv8URrleQd10k6d0LM/Y5fbXl5GIE+pnCBIyXZWp3HnHazMsL2fO5ZeybjIW6slph2zlN5eplEXlSHfgSimyHmRiLg0zriGD03PmGdmNjNqInKpNzHJ1vMBhQnYDv11U6r6nIFDbhFBkFc4Vx00ErCGQOY1W9HQIXQxnwGafWsnujG/muam0Z/if7mX+FIGpXnXXJw5m+pDA0kdLwBfSvrtKFvlgmnOq+8V2cB6KLvcUkfQrUFQyL+0pF13zZd8j9HSQom+YnKnWxH+E07KeDLjxpcLZ5kdBtkh2M3xTcii4Q5ALnMecKm0GJeb8yVU2mX+Si0MlaPEJ5DeOAhXJyzw0iTiexC0Sk+aYhxR7JlFOrvjFtNazAGXFRqydiaPcuMsq9iTI5W3GmJYy4Y3gn5VmQqFCuYCxSsefYAJYYiUxx/7wikMw+tdEbV+9o0t05LD5r1g0B7eF84v7gIfdyhkgCWbwIG8gUURzzBM+MBKftuHIp0i+83GgqoZYxpbJlcjWDkoUqD2FbTfTbC+lzm2MF3SJkQTnfpd9lNQNFqI31q2YUZ6QCrC5jMj3pArcgW7DSdTZE5FCJubxD0B+OiKy8Yk0GiV+qqr/kKwluZHOlN0tweuIS02bj8NvWFugBz4r15zLXhIky7WM2S8EQspo3NHLcrJR9pJgNDz6UmoMiJHdXkdA1UXA/tK+bqb9W7Mh3u8JFuvMDlZwzNo8Yv219F59YC9+EJvPjP9OaiQl7eS1KcS6NMfO4ov4V0XqF3z/JtMcyUCfgQ7O0zrSTM3dajwfv1VXoCP6EjMhTdc9rMBHie/ctavi6WC7JHaRJSk20v8vxEW5FnNY15Hbq/VKf9lxcQHpC/Vf7XphMXsDApbe33u8dqHJW2LEb52EU8E8CMPl1x4u7sbL0CkBJY92TGby+SgwXGj+vlG+yBuV+bJthED1za76wz4c9eIjM6x2N2nCWmqJs3DIFTW6Glhr/lkEx4RhjACqlXsgvMz2R01x0r79wArK65nzCcUK0Pkity/M+p1iTeVfXxYdwvvwP+739QIKjc7xx0uw83ekptb54abkuPhCcFQU7yylXc9Nw4Zw/8yQLUJON3SJxWYeGsFr8MEn5PH1QkmsLKwlBDWTkztdPhtVt+B8rL3A+RN8Ep/Dn6qIrlhyjjbTVgpysG58bIk6jJmQTeiO06JVeVdz8SN4YXWIm+m+2xFI/Gok1t2i18SE39npUd0gLT5c2ngWr0NV82Jn42eECZftLTiHqrEuPHGQyiOEnGEQwpo820I0Ve79k1UjKdZS8+uv0lK8AF0o9/gmcpjVU8d4X/VoTwTZlBafdCgQ88DqfEMmWHEUL1tGUvKhQPwQNr0iNQwfBjSK/xxUoshePFWtV/1wfMMq8y20c2TE182uVX+fT76JmezhsGueueBpzrq+JqmMIbUxYHZ5MJs/3rjC0hlZedx3VIvZsvL3ebbu+ZUbc7DNXKpUqqwUwqLAQ8dfnvB/Za4haOfWte64vYNba7Bb7IStStKQ303YAxJJ6Kz3JufeM+J4Jeo9TiuhHfn/9L0VYLgwQlySPPAQVM5nuZwSY9f+GDiHwlG7q4p1W+8UnoFOpFs84BSLxo9TTctF+FlpIeCBmo0sdLYUFSfuENSYo9a9O7et/+sKJHVFMTypFh6uRqe3HsD6mre00P0K9tHtgrzgqZAxYygE9TjbfDRyyOUr6/BmTs1heFaRjU+SJiiyC6JJp9P8aOGxWX5YL6kqwjg9JeEWnXh6hYd1NujX/gSvuCi6zX4f2HLxDiOtvyoTT0FVlSipCsiVWfhucHBmmIBO0Ord7TqnN+tcpeocAenAZ0P/0d5M0o5M0m7D3hqxXpak2Bh7SRAEvyhNMvO35Nu9ZEa91de/MVZ8L2UaOmYWdl3h9lbuihtz1J1FNSOb0EITSnjSdF7nGIxJyk6rT6rmidhdFTq/YTz9MAjEn2mHfWjuVItUr1CMj3r4HNchYLcwzk8TB1HI1g4X2nHamRcOO1WsY/FdpIP3jo/QJk8QiwNYySAgyxjvACy8zpNhL1Z5nbQA3GrQHzKkOwmX1N/vpEpoM7LVU4aQZgolS36Zcq+j4KOY0yWh85WHitfNlX84PBc6vKJZ4XuJlKTWSBl69SBYONY3x9SNxtY1YHX/aObSDbtu0hK7DiSOHEisep74Wv+swz8PQHNhy+HRPGaiSMzh7EyUjs4XiUecA1Hhhkc30TLx4QF7iLNAjw3W8j1GiaDn1s6Q+fXoOv7pJXX0HFDiqqtScTOUr+Z8wIqdwYzLzq4mjoNcC1heFFxgLwlGRCRcDSRcp/eE0dHA1UXAvjjQLEmx7/RYuonIypd+kptos14Bpevp+l+SaWV9kM9TyLV+orVl3L7qdFIyGnwlWedO4pkFGGwPEnNePwfO5gLQEx7hJdCfRffR0hupRatLo5aXKWZx0p3XsKPYo61pwyAT67sV7sDbFc44+9Kaz69lzf9cyf7gp2oBpRMtnBxmfGphKg6618jdJU2l+DHiLUX/5yaQa1lXyMXO1t+swMuImQ69/vOg/dyYcp90CLualvCWXE2KthQsmx4xjdBNwxbx7/9THoN+bNtTunjbMGPGsBGMpm7n2i8JHZYSE5c+rmz/snptciLLZkJoOxHrO/HyjISo+h2AuOAUF4otdXeAm7sHKvXj2JwG9uHvJ4+hXjTZSTtIa5pyt1Q2SyPsSSEJNX/YJWC9aPEcqU4AuEMs3xcFoyoe3Uni6DycBbkmMKhsxJ/moObSNE1p5/oYosbSYWy+2H7+Rluf3VzEwNxrxPFcextMDxuOTsowXa0t0D5aMmzLx7GrhzFb0bZ9/qTUo0onRIP33YO2f5R4pi+m7jmWpGBKymDiWtSnWkNO5+eQIrS/uiKJgdeM/eJjh0UhGD/t9KerdQ7RxTs9ZGsiwGzYsihFOR4NovP3JM5uNBJuMnayZle3kA5gRYr7uMPgO/MOCWDqPL2e3vlpdmwO8l3oydhduwpjVBAl4kN3deW74qB2+kwAqksU9+kHGi+nf9Y3DMKwjoCA89QEwoRkslb+v/XbrxOd+Nx9Sk8/kAL5RX54LDEg0DtRwa3Lo1TEDEDEVgHDTI07/evJWTwUNfkq2R0cfkDqJ51+ISac2M5RxhZ1a2OyjYOHGRZONJVzkhnO6heG7zRGok+xD8bDSvMlEhiBuuDzxTD5jszAgz+O4R6o0FrRLKVuDK/D265yOpPvDiXf26qha2p3yhPPSRTlp9wbTr5HC7JNsEXOWGKcaHjyPdAONDTYbvcTOkkj04wW5sB/i0P4H4wZw/Pc2rPbzIbl+2BbV4b1+V8oBJWmMPaLeLomuOAgyzM5p1ye+t3DdaDvO3ENf4+RVs6Te4qPZmH9xKfPxt8luLVUYNrIkw78NpHF88bqicvNm4+dA50n5sQT0hz+jzT5GWbHtPO6CAm9acnAg1XwoMkHmR8XiG78jweop58fmeuLp2GCXt2+k9zaDlZN/FA8FoTq42R9jwErsKD3D18+No4vi4ldmwC768O7aMBhq8Nwj5XwrLWw9qFwTrdL0MPOF5x97lHguRu61sZtXivcvDamZ+2UZp5hM9vMcLB4UmOPOWG1xhMy3BPkxd3GlZ8zF061eM0j4eyLMzuszwTjTmPcza75Hvc0+0lsf1LTM3ZEsGtt/Oa1wi1rY3vWTvWtubR5jRDJd4h9ksYec5KVpieYqa1h3l18Ln3dKGrMOJqyiydxZBZLQIvh+8eiEx0zsXrUUyhdYZwwahylsMz+87s6nrfXH5vOZYe8XA+wTrZP4ea720vUkYcdMSv99O6nkjMyHcMyneFitJ4h8k6S7YDQaWRtRQ5qzJYukxv+4pX1Zvc+2LPrkHKPb0AVFlPt3K1G5pozciu+FokvQUh0SIzUrA5BvHpApAJ/ER48Gp3Ay0SHUV+O9OHfEtZWr8fRF12uT/6Ub2gkZju9vq/A6eHU9MPO2CcnRDqeSk4hWmjNbpRdXSRVHzDYj7ncZv3q8Rx2MsM/MimG+ngLcOsUIBm7EODfR4niLIpGhm7gnaBG0bIPzrzll+rZY+47XNgRpab2yeHb+EcxTyJ9tKhPuWSigZXGTMrPqyAOA7dOdrpb0HMEY8pzIufZrBoEhSGF9S50x7Jg63BMD+TqpeE0ca2Dkk3sDY6P3+Si6hiPW1LqiFOLqq0EJ4bNL93rkBS8Neoo7kOknSs+W1LvS7eXqPlG6gBunfhnRUFPKyaiYOQ1v1P8Fv6PIu0zcUDfbnex3/k1U8P4Av5VnvoP5kRzZDgp3p2ykOnEJQ0ExD9kQ/xXohw2VnddSr30BOnLj+3//wqiDtZdBycl8ZZG0vuyMrwQHy9z+8GukRJvbkLvS0o7fq2Vun1jH64tTCTO9BoM2DPKUyc5sZuSsOG+LW025PJ0IVAPUBKM8qUXVPf2NabxVST66SGYWbXas6Ie1pJgBho24q4b9n9QCPrruLGhWqW7uOX2KG6uUTEj0HAQ6hncLCE3a0DpohL2GA7INmxUNvR/rSiTMASyySc1zymh+ykKbZsldexFcidYmNBYfN8QSAY1qPxBVlvkRFMDxQOfm0sGD4FUUK3mNFnloeIsqAWaS0UNgXTUUY02DcmrUnLLv9RmlKTChkDqQItGi6rEnIbCkx/KIp/rinQaJGcCLcrNFCQChkCSF7W+ZE6qQiJg+41ik8l/pYHT14F+6sA/UjNehmJFqTcnDyTjYajdW9WmULCMtxOCx7SzGr5OqrNJUUmRY7hoyz2y3ib39daiyN2Ob4GHEfWHJNJ3Hx81P86MCyoJxv2x/MPS5d67fBFytg7ZSzo2Q8u6aU5iJ1vrmxnmiaaBGjUsLzoc/e0qLbT1lF49YGXPMhH1awBWoFhEozvsMTNroNY9Fh1cp8ydvvugA9+HSm2VTdMaRkh1WMsTsaENOvLjt6+ewDl1Z8maImvltLCAnXwT5EnkJHH4Gm+H1N7See7JrsgBiywUy9TahJu2pYq8m6NluSEHKYG1m6y2ifn2GZWK08PzotDjPRlzcJbAE/faLUqENwIzUDy6zvWA+Monvq6cAlY4avBTsi05u0ypbiSfaCiWzGSYdWtQ8UqMLynK3ymZ1inhjtFryh2pkw/n+/ExwrSsvoEb8dYFTmu3mxwY4nwJNn+XVGYXvk7BPXXE7EC29ODAXhHxao3PCuOjmtSqBuwB/g+deXeU3lTeX4qHYMIDuSuSReuYuE1XyXQqngLwKl1oHr1fprh6+woz21Csofb/Z8WFeCc++5DS03dcfpv64vWkK+roKVYY2h5EOgCwYfjHMYfoH72vdwrUD//X7xD9f59I3M9+p9gffR+tjm9o/dXvHPVvL2h8VZNKa4N1rxiiYUdB4w5omdf8nbj2gFbCmslAiIgggjSTQZzC88MFTqL/Bu4iLICRAYo1z8WjB7i16tHW20D6ufTuPXZJEhmD0rmgufiZ5h4V6AlusD/IPQyIIAdHJB/UKkl1iwryAPfQ/a6d3To6IG4Q5xvFOSrYKzE8JNCd/0mc5Hl5FIprTLAbYm0usrxr8tARxDo7IIUgueeyTYkJ9ED7edhEiyFuUOQ3qlvkKAlaHJ25PI3pBXd4hU7ktL9guH3qmH1Qhh9dov16v31guu+x9336GRyv3832KBs3GF9/nr+bGt88qWxVb2y9aXx7bqyKZf1vNpvH9z9D3ra7fqvW3bCZ+9HHxmxHpQ7oLskY+GvnBcNYGjKNdedUJofli2+TX/B9qfbYHrD9fvm+/glF+Hw4b5qZIXouJ2VfeYxPaF3m1l4D7hZrEVfR9PyadNwNAgyNfT0UnTNjveH3XdJKf5c0u+bE+jim7DcIRGcQL8WfJuSYL3eAeFJ++Xm8ER94REyxw4aB5IQdjGjj4814dL0n2bCkATdzWmuTGOtjFrInQqrku9Mpsb/RAV3469LQVU63HCan8gZnVlZhQ1elLkle6L55Ek5BbOuXq1O29XPbMz25ACjA5xN5t0RyOb1fYVBDrSZJqaWZncEqKm7LwJPB6UkW/Yo55wvwkTWfH6+UOq7/XLnhc2B06Sj7omAsMitQa7VSe9W8Nwssthj2Mgjte+fnOZoXKlWn9tnND+cGJ3Bun8Zi5frb/pZXYJtj2WBU6RhLQ+Yqt644IrvYK/tby9zo87vwcf6g3XwaXFMhV2+WIAfe4ByvzjKxOy6FR2uuUX6aj/yQQzKTHsA0cMV+UZFbv385OWR3dUUSs58V2Iub8H+SyJtlfzlisYm2m8fx7NiWbzv0TA+pwo7owg4svwYOYrcT9i8wcznHvvxyRs+ZKjVtrER2bkV3EX5iaxuii7c9+U7xS9IaHOwV5vF2s8adragEu5ud/YHeQPZi+cl06MkqWy8Qop0FxOAP5QdyU5jLuZ7Hh1GlFXv8xdqtKg80//1/yzmCh1WG28yiBNZ+tZdbHL7N+IjHIqaAtlSfsNygZ6R0lemO29GflJFD8PJZhUmV+7SdsFPA7MRztuTuzEYH4EQk7yY5kxy7iRx5ppsfhom2+BGJV9kX1yA/7dYgl72gfL9UKP+B7i47P/mpgojD88ewI8hWMk91ual5F8sfVfZI3sxJtLKxeEwfX0f0ueK5uLIYqOTLhMvWBqJRlMGtjReJSz3LkhQfY0myD/NXe4196SAl3kGXrR3k1n6k5oo8oat1DNOBp/PutBuYSIGihsBylmoex7A74MAnGW6tMtDZJ1KqnDp81QZ69IBXnGoaQ/t9lfbrBfLNFak7lpfAd9iiaEegiFxhlVxBjWj9gujxjUbCzcaWFOxgivxW6erNUpc9xPy5wyAPtK5I72H9aewhfuuV1ILVxRH+bqeYBTHsIxz5GA9NKPpLpQ6BgZ5kP/zbGa7I7RcLzpPNvEivq0IGarR4/npxKxuakeYdYhZ/SiPegYeIA5sXwPJheNAd2fk9DQcxH9Sn7ayuUp7pp4q79SOmjRx2tFiQi5fgt+aMrr8GO/E8dKXc9YNU0SY/Be9+cn4Z6GM+78yvS7/rJbrw0TskoRLFhOE4LVaXO5eBeaEKe2OTELc9Iff3g9PVcOJ48+ZWJtoYx6M77Q+GT0R+O4RHJflGvY1MvSV9R0/6tSymov6aRG+oREPzUtOSE+23jgMdIMyvXanvJbuN0/npo0BdrSZDsbZBJIKVcai8ihiAW+0E2V+dewNKFwXRlcKYyhFOAiFzfOrMYaSzV1yhPmptierNxDlhRJb5ziAbaOiwuCJ3c0gkrlqye+xsDdKyFFestNtQonrLQ+52+nYDPdL0GQSnonbKXmQ4y1+9bqfa14mdxN92B2jJjoun/gb4BokAqh+rafRsHdaFzbmoVpjqLGzF8n/rJP77svvjxiwUwHKn2bGzOirA4KJYpFyLo1T+g/un2dPPmefoOeWXP4aVYGP4g7eMc+cpsSlVB/AcfLyGncE5lF15EK8GuSOwabrNl1tvLZFx9/Vp0fEV5hBnev2ne/jo6O05M0SJSa2LxPPxC42sdHZJYXnxhrivdWM8NsB4nL0kIGCW9OwN5wJnXvvjo5XbAQYWUDrewMllJyQ3p5BgBeYpT95xxsXm13984gc84zGWhqQllKCWF8QN5CBmdxJY9hQ7Vn+MxLOaKoSa9xlYQMnERP+xJKU1J+LgjCQGD0leKcjETuDemeE2QpEvk5u32O60yGmnXjShqKAANq8HRHhYAPl2oR823oX9RWgJDp7/A69FggXykJbnys4dmeV4ISH8U+GWWpgOEc7P8MdcsRzHTTt9ISuOGh9QEEDMIrmWbGg7k8fOFYlOSc3Eg0GuZRv8B9EZvqGsHokX9EhzRYdkkv1mRhJ5t6HXU2+iPNdVijSBBbB5AwweHkBayvb/MN6KylBtD6URKm5RHB3wUKKmTbpctmVNcy+wbKg2ok1Rms+OlmNpKC2VFE2xph8S0O6ATE0/xB9yp9lLtC7QqSBe8w2GiUudtFJKUb3tgzoD1iCcTOLWVkHPyEFWlkhiSmYmLg3c2r/gATy7wxmhRxV15xqW/87u3xQoVejWB1Ilag/OVodYuQbrJPjTid1bMiSbRGKCS0NxOHJGpnYaEkrd6I40e3+XYEwJuDUUGLL7hiXs+MnRWgla7PS9bgzLRpAsVVkeORxs5ROzIcX7IMmJU8ZqFVBhL0lsKUFVc2SH+jvaMG7FaVJNZzQ/WP9BprS8bw9jxm3TZhuTvQGt1AvGFGUUwOGd3KbCu0WfZ6IDP0JqnuL0wlbxtu0Ov8V0J9bmwCOl9ypdELHYBq45ZUVV3W6XtX8R6agGgYMPx6dXxIfwoUwnWT8dKMcb8eYJzjFwyRcwOj1U1Wx27jVppUzvIClYFQYQvsnlIm800YU14U3TIr06mr3+2e9YTGVvdCVsVLn6xu5notkOS6/lBoUpK5u2ECYmFjFFpI61GFgu7GH+zPCmXE7au3KyCtWj5ousHtgjcZH4/4fYVbIVzVbzu5ZCqNcPNIsOupgdTDerRQPoF0n1vuZXniTW3DKdj0Kw7hDXKRj0pLufpp0iL+azUDV8zbZAoTu0o1EsiusjxWKtgSNTvCSsAB8vcfvGrlwn/986g5uoB4Wabiv1N87IQxP3ZAWMYJI5LTblEGjGi12Va/GTa1mii5+j7NsVvgvx8fZydxlsAALYvBPA5GEBxJCvvk9IdecDvA4duSByDBRyO71ka6Ih4e9vdRN9W1jm5JHaEekWZi9q2w1MW6otuy1qzZMjVdCAmqdF+mC+bux6GTODFTdwsBk7jB5XSaSMADO3dZIc1IjVo7/DYs/RkiV+bQzw1eUdIbwpmdWTrP3dKB+7ExgvJBLOAxHelJtHNCH+7wl72BnMqPrkRjgNci3w8yCfW8sH1dJTUaUpwtfOSER2sXf2t9YrI89uQ0zwsPvqMLDqNAnukZETZWjjY27rQ5SvdmrtD1jnbP9s3cefN7thfLG/wq2dU50dpSd7bqr5O+ftPnafko8R8cfGEo71c2v7wsKD5Fp67a+RwO5PruOfw2g1ultvsJ1ulKt/unm9HGzYYvBMm7oMXrq2BGPIwM4+r1kZ0Vx5Duucpxb9N8WkHnt29au+6Sz9S47rl2HmlqmVklyR7xHKpRbBSKy1c3vL/1O7TGup49ZWaqTc+KnVq/XqXUoZ6H1cGXz7+D+S45b9uI1b27o8dam7WKP4z+CpFgBNWAMAa0AB+aFdQAGCcFgdc7HecGhYfSfjnkhDM4PtZD0ArCMTX6U2BV+9eGMA3w2AqTIRhLfIeLDEFM9jSRm7jtfLhAbWx7iwFnCLu0ObmIx7Y6pMuOMtMu6B6TKpFG+WiXZbedercvScSXEHvHa0bfrkpjL/MvaSDvyQXsrYUbxWJtTxpkLcsAYjg4qgBRAmWjYpEWbwH2KrUvzk6gKIEkEpIhEAMxySv76oGWxHuatnw7pM0V49J5H5FRWJQ3eDRwYWBq4qCDRzUydSwLSQKdahgLxX/1LEpADSQQaY3QBHAamMkkabkb4nDV12uKzAuVCY4sBPa2ExJuZLhS4VSeRE+bA8IC8vsUYA24h2YZ0GtG/1nUNGSMN35NZEBukQAHFNUAbtRJZcT6FEJvULAeJRsFhPhn7MCCBntC0socKr18T3CtwCKd4bQP7oN2wRgArAJC3FGrlL25Q8gNA6dDK8w1JFulRpnSBnKpwl7QslishHlwbgKEB4vbZohvWHhb6Dwg3stjVAI2qciKgIbAPoLZEj6Esg/uo7jAyikGER/+PaUrxVRmfxehl7ifVlFBEvsHKICtaWXcOpgaenHcVpSzxedvKJTNytD1DT6q/dhwGDU+sHeNN42MfPL4Ext7GIw6V7GzWbmR6/DRc/gnbpbpZVjGJ26+LbhXSLdBthdBtKRPpFXUQbCjtTyJci16hZTEidEojRvXIbC7Jm0XE3DG7UCJsW7RmkV1jJaP1+x/ky1tfocMOOZI7MNRSu6LCKuRbBAlBeXtTurh27GDsBiSn7FTXUS3KmmNNojxdHidv5rWeWxnWwfi5TuY70x14cNf47c3brOC/itJeEQZl5119uDKlpJXurPQ7q7jxy7QJ1mpSP+9FAv8Wxw7a5r9a7ucfk/X/pP3O5eaPV3TMC4vu498WREShuHTnmfbMezz0OfT3r93079PD1KLYahmftSrSe7tDom9QfRSr5XTk7l5mCctP+QBcUw6dBPvjQ9uW0xL4cZp1g3ldRmstC+zo/Z9Yuqo1ynNigQ5wzc+KGKdkSX0u5TVX3xZjsD+265rybE2zwoUmX83ZW6zur1IyVY2Pw1kOBdIc5qHOGkF5ReX3dVn2V+A1w7TZEK2/y1w/BK9rEmQLtIqodE3JffwevSxdnFqX2s3viRAnk3zZA/75cz2MDAVnPV6fxuzeLY+P/qLLPAHj0p+hrwNuH4+//bft/6YX1cywMDca7S6DuhisCUL9NKbrhLwB0R2uC76tWoB1Ov0E63fLhdmCkxSWW0VQxilPxfcPq2V9ijunNyy7mtP4zaGpzuHaHzyqazGNPKYnM19POrOF2rb2WV71vFKvm7Trij690omLH8nxQsl8ugOr9eDGd/QrWX/Ky3bpJZnckezxdNKaK6RT1St6oHk/X8or+mItbVrTnR7vWDyrJpxsjuino7PxBL3l01wz/7JKanfSib8t+IHKT2eV3OvsXi1mklTM9H92270c85yXb3UNzxq17nrP3HKETZvy2LvfKOAhNjF35y4n1Xt444CeS2V4SN6scbWz3SAiOHpusMAHVV6CGAVAr3SOjov/bFrfrOdPcpIsH5d1lmKjeySTT9Tf1E93j27Bdk8wsrXTzjn6Cae9AI8MTN/cZZZzuaWE4VdTPT7v2HPW5Ijpn+eVHFyPRmb3q+PzGbRpdS7rUsTMTR/W0qPymO5gOFNqbW2P6S7PcK1no7FQwTST1+YtRbtA9Koy2DL0J4ZAyxinrz7T0+2ro6+F0Mes6k2Ubd5hN+xzrrevEMO3PJgPrk6OnvI+2TZfPLKOdRC3L+KGwnkMaB5c+5vjzZ6/kdmdXnuqhMHuUd+zxrWxKoEJuP561mb+QkkgL246eqIeGqIOiaIMWZCiMnolREKVR1dpQ0Wn62UA7tEpEe7SOCpWoiF7oie6vIsqi4bEnmW8OPT/hP+iZCvqjc1uzfeh+ZcPpigzOoy9GjkXEbH7Ht/jJBwR8V0GKK5L0kp3BLbAOyG+brCcYDhX1gUWAbAQiwlfAJP4IHFfChYkRJJoqRpBxDe8vi7MbTEWKkixGqBD7xVG2iZ6NXamyPSI1XwkXNKaFCDw6dKcjhEcdtXmslAbppiAxEtgNpOO4kQIuQhy1QLov/cRQvP47KjfcFcaNFQo8ApOg07GZASOEdzQop9WGIj1OFEO6nZhIdULFUfa5QXRwRIwQul6QCPQ01qHWmG7KnC0nxbVRfEV6cBBfQPAFagEA) - format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,d09GMgABAAAAAAMwAA4AAAAABZgAAALdAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoI4ghsLEAABNgIkAxwEIAWDCgcgG3YEyI7DdHsjE9IUV+CFDh74vPL9/MmgO0un0soqjWt7En2kQoCMtXsRxyxkMqP9iO6NfSiUaLJuoRIKnhI0+ImbcWOB5XOAFVmCgxZQQmuBJRhZtsUCXm/492Dyuk2YZJdkdApZeOzyEQgKOwDgRjASBEEBVmAlgACtOHEhpjLyyrACMAB0vaLa6cAw5bc5bvhA2uwO7zXAyKPmkYNnAJgBxLEMDxFLqVBPI6EQ/daTr/QOAgfCngRoZc4UZiL623qCkf/oHVsfRCOuAIbJyF4ajQQKQLmQhNBAA4aygH9b19Xw4iAC8DkKM6WrYw/ABMAOWEAamA7sgBWACgAUSlc3SCmlc95o45idYD92Qt/+5gF19v3FALtB9+7dq/h6/Ljyu/zzYfnngwdlHxO+k39nOcO/e7nPf2vCoo3HVlmNTdnWwW3JZffuVU6cQX14kb3qUGOOJ+mjP9iMeb1Nivq5gXpJUWm+cmVK56e6PjI2uce23hHlG48vyDvym5/5q+wbkjq90rN+z53D6zXqmVUPVshZoVtrZgc4vleS1NNrni6VR8I/vTrpzpPwu1+1Pel4xBIzK16W3KcLNnVGl2RGZHbPXBAvhw4M02Ci/t0BBfw/p79XS9V7CKAMF0++DK9rtI/7MXvGATjz0TEA4K4oef476t9dS555BAoLBYCA6ei/FSzVgvg/cIR45gpTaLWeLiB+oa4xJuTks7r7/xwCmCzlpoJKALCDQmkyEsCsN0mELUADghGsGgAF6c9IXkabDYyqg6WMkZd9z7BT5gaphhhqnOH66aOvkTQhggQLpsk0xBB9DNSLJttgPQTQJBtoIE0JEY2wb+1lhF6GG62XngKUGKLFECMNkW2kZgP10+M31GZUwfojwkU0uAcQkISKFNtqGMlau3vIjjRUjMANjYkDNKeouYh7CRBmuD4CHQgHG6GXET8oT7ZU6QqUStddiABBJPSv6P315AAA) - format('woff2'); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,d09GMgABAAAAAANUAA4AAAAABbwAAAMBAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoI0ghgLEAABNgIkAxwEIAWDMgcgG5sECK4GbGM62A+KOMNGmZWUwcdhKI9l4Sh/WwYP/3af9w0W4ERa2bOg405uoSptTooGKkF8HniO5b+Iojvye4dReBbNtVHwcLQTG2gBzQfYOqjJ/XYU/jItwgxa4I3czM4Fj9LAAnlHz+dzgSO71Jqn2QML8H66dROj0qAFLYnRhtm0b89/erW/v8l/LA6we9gCizDBtQzSf4EtkcwDT6RtmgYEQXnDKGQslZyX/CkQSFgBAE4ERggEAgmwACwQgADMsONAJKVkFWEBgAJgwMz1NlLWec3G+jtZu+rXO1i7rx/sZi0AEwB5WVY28FUE1CORQAjvtSPftAwCQQjGAbTUfm4qwrvbNmDEf5pjR4JoxElAiYiMWjQyIAEy4EBGAA4UNKCgIMC7a5Cej2sCAA+SMEEyYA2AMQBWgCmQAObACrAAQAUAJCSDMEDmo7CztfXoRGu7SUeVdbvosOq6N6PHnZ2yf9l3eXPj/q2qXdkjBL+qrix1cYsqzItOvXfRPaMXkUvPeFWoxr7tZB8gfxIhMauBapmSUhO8d3O8wUt0MoI7UAxLzt0/zhCwJnVHrsPYXenm8suPeLYORWqn/3wwK6Qp+frDiYGvxHSXFzoXfpihfmlODl9oFbOqKa8nXbZgd6axNivh4JS8xEZKChij/nuDBPx/MrxQA/WBACCtK44947xa66g/k0YcALjxaesDuBuQP/7x/3bTwmQACVMkAAQYd/7HYBqK1H97hriqWIzlN7cD8Qu1mY6Ql7eR9v8qAcCY/apKqAgArEBCCmOEAExoJiOUENTgBAI3NSBhwSjIbLboV0Blo3PIiN06hxVFfmrr0WtMvzYtWg3SBPDjz58mVY8eLTrpNOm6NfKhidepk6ZAbgbym+oG6PoN0zXxUaBHgx6Demiy6Zq0GdIl3aB6ndo04r7WvSV0/Qa0Nd2+yKcNFCrSvh/6dNKO3xV33aBeEXxNZKTyQUaverfOR49+LZno1XUboBt4oSzpEiXLUSjZDgF8+JHBMIY0KQAA) - format('woff2'); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: Roboto; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,d09GMgABAAAAAALsAA4AAAAABWAAAAKbAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoIYgXsLEAABNgIkAxwEIAWCdAcgG0AEAB6HcYyyEjO2Dy0eKLv4XvfsrGs+wIhEBOHOERRRTI2158fc/aln0WYmSJq8uTRSIgUyIVMqpfa/7uYHCqzWDuHREj0f5UuuL+ZAokTaYgiIs5sF5aUutjO7QhBlgMaYvCAIIqqoCggoq0+HjRlX70MGclDLyR3Z8fb0q/ectzCv30obmLesvO5hBhRhcp7kToaLpaRXpL0htKmb5C3rIgzUIwA1fnqrhHSbqXhA3v+sK1wRtcWuhdyg9E5tGXERkaAhroCGeNqCnJxAm6m1Sb58SICvFhXFWnVAAWQoYRjYADJUQQqIYm0uSZKkfpYv1sv21dm9b7kWbV6i3BQ2Z/sOf/hl+ezXH88LRz75pnLuq4/MO/Zx+eyHc3x9VDn3yfx9n1ILyusq3ps75y90fVZ657PJ2iXgF+odHbvzv7Lrm+uTsPR0WJqYcelN7180rHDDnbeWbrx0QHht49uXjCzffOsd5RsvGvHe4yF5o+Ej97/ZMP62+Z+3Wz/08CtZ/FezhpdvG/nb6PMhC9vNvHFx3Du9X47etewROuONg4L0v2eI+L9X7dt0evq+gNihfvWttiuWK4f8VmxWBM/+WK8b8F6Y9evfLf57r9SjuA2URBAobPm/Smni3y3+n1TqgQEACsl5awAI/5AetjNp65A+/38vDAUXaayPL4CMKHYkEFC0DlfIlbAMegyqlmGU2eSTO58TTHX2xLyWvlczc/wY7eDo5WxlYenKyMvNg9Go5MAatqis2Jty2oytLaPupFxOlsgFObsjM05dBxMHVwcMbeFma4xFh8jZxUr2e62Th09I7Bd96I2RI3gzYzqKcsHjqZzGjsamlojTwdmCy9bKFNm7IBcudRU5BU09BQ5eTm5coMaMAw==) - format('woff2'); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,d09GMgABAAAAAAMAAA4AAAAABWwAAAKuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoIYgXkLEAABNgIkAxwEIAWDAAcgG0oEAB6D426JQgSiDJGrY+EepR5ejwf4/fWd+/C1EBKYZDS7sRFxHTf9uCJn/m9Of4qsOwRQBbqEex0QSbKziM9Pj42dA85/tYTLU84Cj+f+PIAlq3AtV5GCrQWUqr11TNFedSEUjKs7rSju46fX7RWCSHFAeYQcQRBEKIqiAgIKlGZBdO5a3w4akEBWj6orkgSzThrq5iF0WjfiKGe7e/0dAHkwOR8nW+GblHR72hyEGmzEl02NcDPu9oBKt35NVVBcoyEuIJNhau72SE3EHkhapkdqCiZGhBhliQWUJVETSCQCNfr8o/boWoBjI3miLHqQC4ojH22AaUBxFAUpIBJlJeIVGIvLFI6PlFi4hGYVs0brZ4ZZlT0rbz1SLT+50xlW3X269vh2x+CpO/n7bw02ebvIys0wMkpteMHUIq4PGfxCRBdKjxXGaDRIc42rK+a/qgeebsfBvjGMiQ14cnJjW8fSe6fHlr2NIrgbeH2jS+k9X+md9WJP/5IvZ8LRg1cQ3gz+dJMePnr2/6ZSiy3c9rHc87Zj4tqOx0WLe1U0VR2OOEt9kq4gV/r/NBEyVbPvpL70poCoTunu3LVVZ4nW3xWV8gAKP5VqBMD10Pruq+7/52x5c4B8EQjkzs5oyJ/1JzxT0mgEACA3XjUZACFDut7UuAEqPZepikCuTcprJBVAcSJREzIBeaYSC4kSGAs2BJU5IFLcQjt+sxNAqr55kwOx947iBrvVCRYwpBuDQusVLFWyFCmCVcEwCg8JVsPPK1GwEjxesNZJv6dyHtID6dYP8UnUCvPAemHBGiA+jD6CVgilD8+tWyfSPRiYXwVJDNNkydPUzvrRmeBZvFdArqSTDSCJ3ALcvDp0JBHWjTK8pb0Qvx7N35CkXo0yFRq1qZAgVaJkYiA7H3AA) - format('woff2'); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,d09GMgABAAAAABK8AA4AAAAAIgAAABJmAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbi3YcNgZgAIFkEQwKqUCgdAuBSAABNgIkA4MMBCAFgwAHIBv5G7MREWwcAAjqiQT/ZYJtzPyxTqRrsF1IYVrRiFiApETA1++dMFq11kZtOhdxHMTvna14XthLn3dGSDLLg/3yf+feJLvv07tDOZClulqMQCikLU04jMMxKJjN/62Zf2Zn6Q/sAXIBXSvkMaRJCZJ8M3t1ycm+ClNhKzzhQnWV6OBa295MdqJv5linkmiJxg/83P7PZUGHMCpH9J/UqI7hqE/HyFAf5qgQjBlEGRlMe0AB/E+trYhYqhYSodDoJpHmFSLRpl9DxF99b+bPbd/9Mul3vXfutinJdmq2SYcgiepGYMWE4fI/gv9/7tXmntsM+A1QMfsJvRlBau7lFt/Ph5aTlIjyh6Qqqytc/ghL4MaOQM7h8RPOAfrZ2RbDVNs3+l+IXHLYYLCHNa0644xAgqSirxU1gIOBlbiLdAndYX0II8IgTDII0wzCLIOwyCBc4cKu4dlNFXaHP9sWTtyR4MD5NAYg9s17mSKyvOboCQrPyOmJoPAqPSoBFN6HZSaDApjwIj0ZeEAw0AKQ1TnJabIHH6vLIPPQAK6M/SiIkW0IU27qT8eZPitTe9bPj6GSZmEW1pHZLyhh6Y3R1dDHYxFqzxOMK4/vhwnFgAZIozS6RzpKqz0eAxqnF9ScZH1kM+i7/1xvAP04Y7L9rQhtAYwt7Zvs6TSmx2iNmchBkcSIjOt7rG1iUNHKPzN5BupWHYpP4V451W06ZyFJ0F6gTvCrVCv5dke0eIM5HaA9+0OgHG/SdfBq/gtKLPcNkwIYfJxc3Dy8/AKCwqIS0jAECo2XV1ZR19I1MDQyNjGztXcmF5gV75JuhfcjmtBT2C5cJ76diLsGUSvXDGrE3EmBe4hOOWmQJOeK88ShqHxc5Zt63PibyVezb8RcH3g+IKryH9Q/gBANq3AgGhFPSt5J5aQzsDI8hQxQATqGCWM/4r7j/5kHlnfWYduf9hGnsPNPlzCtcFk0kMpDtPAssowqoz9iStiUedm6ZB84lVxKxMIpcjqZQgnM80M0HyWj06J5PlqDcxZobuk0lbmuv83aUzqnCUTrUNHOiAQSgl8gevQrQZF5h4sj4rQ8Dwl5a/xliEVJmXXEy02EKZShAC3IQR/KUNKLpHSRd6mCXOKfAgoIJlJ1/lkkK/4sQS2Vkf4JTy+BmPkmvIM1uB95FcqnWBTlH6kO3trKI3TzAK4GJoJpJobFK0ngtgpmuMsDJ6xuTMKW4eyZpPMHlQKhWxM3cGDAYTZhhckJ27QA/wa60QNCXJgBMppdD10DUqDc99jNkVEE37EeTVjgY/exq9/DeykXkpfTJwS4+z7lAGL3IgDMEWyQuIpCLvfjL0cQhzIoY5bxm4E+YE1Ad4zvyyrVVTrAkIQdiR3REyB08wfsXrl+w8UGzKI0bi/wH+Dl2jVhAOwHJKGopPgIU9F04QlCYEwEPwd/io4QPFR11EZzDAY15mIlNuN63O4gSuvz10dLDMdYzMdq7Izy/Z9kDABEZEYPFEaKEQcE2qy2uCQLuO1aZ9jlORQUlThvXPdt2JLQYQ+nx5GkASlD0h9AITPurayQKQ+evHjz4cuPup1AGrY0EUgUGoN1+DXTbVzID1qEz+Bnbx6A3AJrFxjFYNiCBWg/wQF2BrwOZmbLSOegl+CA4wfcef99OCx1J6eWH5zMwg7GZgyMBXX0URAqJXSEjUaGgQqxQfph2Cy1EGecJxxRB/pCn+5At/p+x1i7bG0JB9REf5MJA9012xqp4QbV2Nwddg4Oht3NLb2NhqIyFYpBaTsqspIhs65IVtRLvStJ1ztgrUod2LYscl0PGPOhnFh6iWR4BA3UCNma0DUCSYrIlTobr5Y52om1M/28oqhCuoLOXhmrO/e8E1QN/HYroSQb27LWzczisvfRSbQcZ5wRFdgkFlgSHhD9ChWhHs5u27MiFWCoWDOVdOGeKhZUqahfoYCyjtit6qNGaGJkWDPsxSFU6gMatNbK2hBXrFOv1ezB1MpY3TkZ+OaomFe/80ecEanr5tO+DHB1z2COtNcnCCzU/AGOjFByeZY/geQ6njv3OVyHyQLM+gyokWSlehRVSTF94DWEyrFXXGuEBorAVGEwhskefTMVImhipSJrBHOP0o67tW0FyLKuxzj0NJPPrSM3sdexZ5EHkwd0JE/6iqOTDRkFpFwRXz7KSx2BRwCbCBSTWcayAiv1XQOwRx4JirxUMiboo6yFoHCBr0tPoLWCrY3NYVFNJN4PhW9M3EPDngAloTrnZWSyfro3Ijk6S26GI5gXBUtpIrgtNYs46LbMr9nhnBMrd9xVJIYCskvWkICQugdLG2iCgeOkJZJW0rKuvZrjO17NOMPXB2uG0Yq0EWCYKlB5WaPzuIfkZV/Jaem+jsQ4UPBopGny7O+n3CQk8qLw6YmeVtL50fGV97LmeXdb0WrGOLL6wRQmqj7mQlyz46YdJFat/gkYf3XZgbcPqdeGCEXyHrvKQx9ZM9WTABtljQX68egqAu+9iazbIEeMIztTXLCkBKPSGgawR9roqGzXnNGE/YSBCytXxYtlV7FGEueLgtmyTMV535FH98G/IcalXkmsunu84y7nwPY3Oe5dgZmnU4C8fDC1BzhTW3Ykytry6a+S9b63/CTC7uMjU/BB00cFtsgkdNb4KpllmW9qHM8nTw473U1BW3ml0fJbzacKAt3iadT4y63LIUzhnPt8RayRUSHjhkTDPM0k0K36YW5sycJGSh5JPQPPSevb3tr+vmy5/rfZPL3vKNEAQ6WhogIBw8xbbEX6wp79YhCFBFUiQSiY0/LQzXJnlomivpDJorJE4I5dDwAKYKj0X8hlWmRCf4xqlmQhNW8D++CHYONV0eyyrLgXb9D4ud+k0vjwxJyQ4p9gkl7tfX5hdRYw1LH1yWZvcCsERkVNxR5gqHvBNcEM6GcAhsoAvcyRM1dau3qy5tTonrZ4qewlVTWQuEwVswwU0w206e35qUiR2MvwKbGbYSKFT+mVwS0V9pQorKzLAShNcnL+A7fn47dbzPlOTYwJnGozhW33W21WcKiRfCdazeAmA707jfw3MgvIe8+v85hj/00e/IRGcQmerxf+O25v57bIpz21Vc2KuoIjpIbafMQAHNAvr7z89/LiegkotQxpccrN7Fx4pGgo+D9BhYuPZnfkIHnPeUwEV9Ihsi+Ca+kQhaIVtlWjEQ0Bs4/rkgPgrNCfv/+ikvKAR5TtLctAzr+XVW2v+DT3d1mOVy3+rFyeG6ldJmfXLMIfHS4P7D/hTMIN4RECAzC3vLXNLUgWFpEWib+PuKY5fSZBxJKQh9T6FsX/RzjCRyc8wXoFxLeQHfUv7gLmPtStEOycyu2dCIed7MyIDnbw+WTKqV3CLtXL5axaH8esmh7w6BOf1Pg0Au712VdFys0+6toCaqTYXrxEMywyXw68jH0kPaDwg0qXfUX1TQXPladCJQtA0Cafv3g+pTL6C1N5RzsOM60H3Wq14D8z2sE/9Jdp9CiM3jlQLrUUolhyS76i/pD8QeWBhJWLqxexFk4/r/zEZCh3rneCmxkwXhbJ/79DBq2L29WYxVVs+zXiNZOO5+utFQCTtP0hFKq++q9JzU+kdhg9ujd6HIXUVP/sH6jbQ2pHUON7/3va03+2B3OmCz04ZWDW3zcw2YE53Y3tpYLuRYtioYZzx7/t/WX6IaT5Q4TEyPoiJKyB+n7A+AE99Rf+L5zIgMebGZI53DBMWu2511jfdXcj8kOBAEli68/a3fjobFxf+HSdOLpv5Cimt0FiKqqdJBsffXPtK5jeJGCZcqx5W4Qn8I5DukNRgxcuPRf/zcn2Qo82Fd3GV/zCrI98ilRrVXHVqq46o4AGCq20rW93xkPCu3w0jqgWLRZvfPuwc5Tsfm0XMKMZuefvpjg0+6dmBYUW5sce8nHrTausTE4iN0ZD7pztTeAkfNj/JyzAs0bfFhZg/wec6PdNN0Zm7FIFncUutenGOfsZ6QYtEJ84PxJE1sS7yT+elrc+55VBHZ3Zr5QW8FeMqcwqHqpcIGeXL0wfaVxNFCJXnoMQrcDYgjBJb9nQI7Ztv0auL+9PNu0akZ39gtMcTY1C7OOunt7ZYWoxzfOODi/yNd/tRs2t3WIeA6Oj1Kb+H16JVnMJnkZ+9sIPiaE45zA3G/Kcm3FeZGC0tXiSVIzYJS27WEOXGik51wcMo0sgSCOwF5PaLkyfusREi6R7JAfFxrZZkXnpBDC/mG70y+7Fkz9maLV3ej8cXj//cRitdlnmpuYmeTUthby6eePzTZXtnO2npBVkBURpBDZjQROV0UU7IW8RPV7glf+XmO2JcxGbJMp6Yb8CarlTNynTRyV5hf/HNVYRAW7/e9L2tkwyg0xTZ8FQ936VrE9OhZfDrHjVldpwifDCChFispyiq0ESYpMz70IojrDFuyjLfmSycJAs0M2apjQNXWpQS1LMrQs7htBedOapgn1LXr+9CdZU4Z2Wv38Pxzx63smlPJCPdH76V5eXe/eJ2IWJOBKK/mCXSQpBqZpntpLyTk3M5tLSo0nnB0C21Jn28eHCy7DEjNC04oUTYiUtXXivEENNdyDaFiw5GBREKig7qSnNmXF90v+4B9uKvdl/HlSCzQsS+1zTv3ryh0fFTc+5VVEcn9llHiNEnWal0dL5nKzChXM9xeNZpPKzYHKJHOt6+ISOYpQ81UU1UQBt6Ol+4TQIyxGqUYNpjW8HmF4niX9Lf4XjQJm8Wdt+BndaIZITdUhc/2AkH53u3t5kY+WwgMQMdq63SBRm9zbltXyoLf/bTJdWYhPdou+2UERGzrcjbbVLmQYmoCdHKGkWO7Yxgn6Wwv/5yHN+NE6PQ3STvo2SYNMG1k/0t8Hih4sB50koE8J+PBe66hsQ0kOx/ueG1AW3+/viy53Dfi4V+Fb7xvAmfu1twKOQ9nrtFt5QXlewK/ZpsWDLuv+HcesGgr4p8QGRyS+qTw5PLCvJ25Y/4JvLh0Zpa0ePL2wtaNuzd3nJJOYNxktaoTqTdM1tQZbOvPNLJYIcEmpNFJW/QFMi4iwVKHwMHrk2KUszVYrs+Xn7mLwI1QSIsigp1O89i1tRXfwc8Ezews/nruLFx/S6U2bCeYCAQvUbnSIcpqK6l9xXHAKj2oDy9u9npD68LcjBfQU4BOyja2O0MtKQpxs/Qu9cvqCb48BcmK54ud+zE+s/cTwf9+vgt/AljqP5xPZUczQyR2wdDCDAQhswFYgALNDxCQOJtBqbNCxlKarIstl4EMAElQB7BibonuMhR6iP+pGOaavOlvphYkEAJHTRw0b0McAQESUq1GiwwRwpTG/p8GEMvXRz/A99DM/vGK5AjqOonERZSEtL0OEPCBm98yJdsR2bsNXVTKPsh6X0fkzL+2gFhh3KyAzjPPjjxYdMtX9Z4cpgDx90/2sDPk6rMRru+IAyX4gbBdIxCxmDiKRZjP7FoqHmSxsLpJYIY7oflN+saKV1cX/p4plTVBTH8BgcwVWtnTIoEdswb118MQUs8SBcOLr5whWNB24CHqiCWeA2KEvvxvQmaZatrO1XXJlgtbkkL0ShzSdHnl+whdHY8qOti7BFzQ9nzYIdUg8yIQlGfHnjdNa8hdCSOM0CxH0L6vXe9OaaCcUsT8MWIo9NV+djsuAXbRDAlD22UUcm5LDRXxbRHQC+f21UB8AvxP3335G9W3uBuwxgDzgABsCauNkB9hKoMfvEs0DgZLVnUSvSIMc+KA98xQFvshylzqJMc8PFDm9WBEtnlqly0SUx6HwAXzzi+RQzeodr1nOJH4SiTFAuaO6fuz471M8gV9BGXuPOZumuZaKVI6AM+bJRYo3pzp21qS/s6wTLCpCQpbzzirbkYq0qeWao0BRzQZ0ryEEZ84TRjCeU/O5Jh5f8hWlgmo1Rxyv1ul5Y2yxrhctCEZ0TSJnbyJJGx+cXyfKNqrObPM03rboaKssNqZTuzxNdqQP5a1YtaEL14GxwbzDyQLpJM+klTVQPqhPVh2oVl1joZ8b1PbUTJL3XgAB4poGQIQyq+iRkAtckwcWOvhAKGJoVwEOALWbQ5biYg4Gy2Wk3i/FiF8b8Ck/kv8EaWHYFLKRIRZYuToxYmaSQcESY79OSwoUlilq+I1kEdVEpINE1JasZqIjKVlHSkUSJpG56ivAImYaUQavSjMySRMkfI0uisAne89NliFOTlQDKpXByutw51q3xNOEjPRUBFvBbV3cpyoeJECuKui2bLoaGL74UVZM1iwyx6rNjwYozj6TiVSTghHCyWzpeJAA=) - format('woff2'); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, - U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: Roboto; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url(data:font/woff2;base64,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) - format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} - -/*!************************************************************************************************!*\ - !*** css ../../../node_modules/css-loader/dist/cjs.js!../../graphiql-react/font/fira-code.css ***! - \************************************************************************************************/ -@font-face { - font-family: Fira Code; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff;base64,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) - format('woff'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, - U+FE2E-FE2F; -} -@font-face { - font-family: Fira Code; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff;base64,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) - format('woff'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -@font-face { - font-family: Fira Code; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff;base64,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) - format('woff'); - unicode-range: U+1F00-1FFF; -} -@font-face { - font-family: Fira Code; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff;base64,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) - format('woff'); - unicode-range: U+0370-03FF; -} -@font-face { - font-family: Fira Code; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff;base64,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) - format('woff'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, - U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -@font-face { - font-family: Fira Code; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url(data:font/woff;base64,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) - format('woff'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, - U+FEFF, U+FFFD; -} - -/*!********************************************************************************************!*\ - !*** css ../../../node_modules/css-loader/dist/cjs.js!../../graphiql-react/dist/style.css ***! - \********************************************************************************************/ -.graphiql-container *{box-sizing:border-box;font-variant-ligatures:none}.graphiql-container,.CodeMirror-info,.CodeMirror-lint-tooltip,.graphiql-dialog,.graphiql-dialog-overlay,.graphiql-tooltip,[data-radix-popper-content-wrapper]{--color-primary: 320, 95%, 43%;--color-secondary: 242, 51%, 61%;--color-tertiary: 188, 100%, 36%;--color-info: 208, 100%, 46%;--color-success: 158, 60%, 42%;--color-warning: 36, 100%, 41%;--color-error: 13, 93%, 58%;--color-neutral: 219, 28%, 32%;--color-base: 219, 28%, 100%;--alpha-secondary: .76;--alpha-tertiary: .5;--alpha-background-heavy: .15;--alpha-background-medium: .1;--alpha-background-light: .07;--font-family: "Roboto", sans-serif;--font-family-mono: "Fira Code", monospace;--font-size-hint:.75rem;--font-size-inline-code:.8125rem;--font-size-body:.9375rem;--font-size-h4:1.125rem;--font-size-h3:1.375rem;--font-size-h2:1.8125rem;--font-weight-regular: 400;--font-weight-medium: 500;--line-height: 1.5;--px-2: 2px;--px-4: 4px;--px-6: 6px;--px-8: 8px;--px-10: 10px;--px-12: 12px;--px-16: 16px;--px-20: 20px;--px-24: 24px;--border-radius-2: 2px;--border-radius-4: 4px;--border-radius-8: 8px;--border-radius-12: 12px;--popover-box-shadow: 0px 6px 20px rgba(59, 76, 106, .13), 0px 1.34018px 4.46726px rgba(59, 76, 106, .0774939), 0px .399006px 1.33002px rgba(59, 76, 106, .0525061);--popover-border: none;--sidebar-width: 60px;--toolbar-width: 40px;--session-header-height: 51px}@media (prefers-color-scheme: dark){body:not(.graphiql-light) .graphiql-container,body:not(.graphiql-light) .CodeMirror-info,body:not(.graphiql-light) .CodeMirror-lint-tooltip,body:not(.graphiql-light) .graphiql-dialog,body:not(.graphiql-light) .graphiql-dialog-overlay,body:not(.graphiql-light) .graphiql-tooltip,body:not(.graphiql-light) [data-radix-popper-content-wrapper]{--color-primary: 338, 100%, 67%;--color-secondary: 243, 100%, 77%;--color-tertiary: 188, 100%, 44%;--color-info: 208, 100%, 72%;--color-success: 158, 100%, 42%;--color-warning: 30, 100%, 80%;--color-error: 13, 100%, 58%;--color-neutral: 219, 29%, 78%;--color-base: 219, 29%, 18%;--popover-box-shadow: none;--popover-border: 1px solid hsl(var(--color-neutral))}}body.graphiql-dark .graphiql-container,body.graphiql-dark .CodeMirror-info,body.graphiql-dark .CodeMirror-lint-tooltip,body.graphiql-dark .graphiql-dialog,body.graphiql-dark .graphiql-dialog-overlay,body.graphiql-dark .graphiql-tooltip,body.graphiql-dark [data-radix-popper-content-wrapper]{--color-primary: 338, 100%, 67%;--color-secondary: 243, 100%, 77%;--color-tertiary: 188, 100%, 44%;--color-info: 208, 100%, 72%;--color-success: 158, 100%, 42%;--color-warning: 30, 100%, 80%;--color-error: 13, 100%, 58%;--color-neutral: 219, 29%, 78%;--color-base: 219, 29%, 18%;--popover-box-shadow: none;--popover-border: 1px solid hsl(var(--color-neutral))}.graphiql-container,.CodeMirror-info,.CodeMirror-lint-tooltip,.graphiql-dialog,.graphiql-container:is(button),.CodeMirror-info:is(button),.CodeMirror-lint-tooltip:is(button),.graphiql-dialog:is(button){color:hsla(var(--color-neutral),1);font-family:var(--font-family);font-size:var(--font-size-body);font-weight:var(----font-weight-regular);line-height:var(--line-height)}.graphiql-container input,.CodeMirror-info input,.CodeMirror-lint-tooltip input,.graphiql-dialog input{color:hsla(var(--color-neutral),1);font-family:var(--font-family);font-size:var(--font-size-caption)}.graphiql-container input::placeholder,.CodeMirror-info input::placeholder,.CodeMirror-lint-tooltip input::placeholder,.graphiql-dialog input::placeholder{color:hsla(var(--color-neutral),var(--alpha-secondary))}.graphiql-container a,.CodeMirror-info a,.CodeMirror-lint-tooltip a,.graphiql-dialog a{color:hsl(var(--color-primary))}.graphiql-container a:focus,.CodeMirror-info a:focus,.CodeMirror-lint-tooltip a:focus,.graphiql-dialog a:focus{outline:hsl(var(--color-primary)) auto 1px}.graphiql-un-styled,button.graphiql-un-styled{all:unset;border-radius:var(--border-radius-4);cursor:pointer}:is(.graphiql-un-styled,button.graphiql-un-styled):hover{background-color:hsla(var(--color-neutral),var(--alpha-background-light))}:is(.graphiql-un-styled,button.graphiql-un-styled):active{background-color:hsla(var(--color-neutral),var(--alpha-background-medium))}:is(.graphiql-un-styled,button.graphiql-un-styled):focus{outline:hsla(var(--color-neutral),var(--alpha-background-heavy)) auto 1px}.graphiql-button,button.graphiql-button{background-color:hsla(var(--color-neutral),var(--alpha-background-light));border:none;border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),1);cursor:pointer;font-size:var(--font-size-body);padding:var(--px-8) var(--px-12)}:is(.graphiql-button,button.graphiql-button):hover,:is(.graphiql-button,button.graphiql-button):active{background-color:hsla(var(--color-neutral),var(--alpha-background-medium))}:is(.graphiql-button,button.graphiql-button):focus{outline:hsla(var(--color-neutral),var(--alpha-background-heavy)) auto 1px}.graphiql-button-success:is(.graphiql-button,button.graphiql-button){background-color:hsla(var(--color-success),var(--alpha-background-heavy))}.graphiql-button-error:is(.graphiql-button,button.graphiql-button){background-color:hsla(var(--color-error),var(--alpha-background-heavy))}.graphiql-button-group{background-color:hsla(var(--color-neutral),var(--alpha-background-light));border-radius:calc(var(--border-radius-4) + var(--px-4));display:flex;padding:var(--px-4)}.graphiql-button-group>button.graphiql-button{background-color:transparent}.graphiql-button-group>button.graphiql-button:hover{background-color:hsla(var(--color-neutral),var(--alpha-background-light))}.graphiql-button-group>button.graphiql-button.active{background-color:hsl(var(--color-base));cursor:default}.graphiql-button-group>*+*{margin-left:var(--px-8)}.graphiql-dialog-overlay{position:fixed;inset:0;background-color:hsla(var(--color-neutral),var(--alpha-background-heavy));z-index:10}.graphiql-dialog{background-color:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-12);box-shadow:var(--popover-box-shadow);margin:0;max-height:80vh;max-width:80vw;overflow:auto;padding:0;width:unset;transform:translate(-50%,-50%);top:50%;left:50%;position:fixed;z-index:10}.graphiql-dialog-close>svg{color:hsla(var(--color-neutral),var(--alpha-secondary));display:block;height:var(--px-12);padding:var(--px-12);width:var(--px-12)}.graphiql-dropdown-content{background-color:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-8);box-shadow:var(--popover-box-shadow);font-size:inherit;max-width:250px;padding:var(--px-4);font-family:var(--font-family);color:hsl(var(--color-neutral));max-height:min(calc(var(--radix-dropdown-menu-content-available-height) - 10px),400px);overflow-y:scroll}.graphiql-dropdown-item{border-radius:var(--border-radius-4);font-size:inherit;margin:var(--px-4);overflow:hidden;padding:var(--px-6) var(--px-8);text-overflow:ellipsis;white-space:nowrap;outline:none;cursor:pointer;line-height:var(--line-height)}.graphiql-dropdown-item[data-selected],.graphiql-dropdown-item[data-current-nav],.graphiql-dropdown-item:hover{background-color:hsla(var(--color-neutral),var(--alpha-background-light));color:inherit}.graphiql-dropdown-item:not(:first-child){margin-top:0}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) blockquote{margin-left:0;margin-right:0;padding-left:var(--px-8)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) code,:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) pre{border-radius:var(--border-radius-4);font-family:var(--font-family-mono);font-size:var(--font-size-inline-code)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) code{padding:var(--px-2)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) pre{overflow:auto;padding:var(--px-6) var(--px-8)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) pre code{background-color:initial;border-radius:0;padding:0}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ol,:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ul{padding-left:var(--px-16)}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ol{list-style-type:decimal}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ul{list-style-type:disc}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) img{border-radius:var(--border-radius-4);max-height:120px;max-width:100%}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation)>:first-child{margin-top:0}:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation)>:last-child{margin-bottom:0}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) a{color:hsl(var(--color-primary));text-decoration:none}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) a:hover{text-decoration:underline}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) blockquote{border-left:1.5px solid hsla(var(--color-neutral),var(--alpha-tertiary))}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) code,:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) pre{background-color:hsla(var(--color-neutral),var(--alpha-background-light));color:hsla(var(--color-neutral),1)}:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description)>*{margin:var(--px-12) 0}:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) a{color:hsl(var(--color-warning));text-decoration:underline}:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) blockquote{border-left:1.5px solid hsl(var(--color-warning))}:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) code,:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) pre{background-color:hsla(var(--color-warning),var(--alpha-background-heavy))}:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation)>*{margin:var(--px-8) 0}.graphiql-markdown-preview>:not(:first-child){display:none}.CodeMirror-hint-information-deprecation,.CodeMirror-info .info-deprecation{background-color:hsla(var(--color-warning),var(--alpha-background-light));border:1px solid hsl(var(--color-warning));border-radius:var(--border-radius-4);color:hsl(var(--color-warning));margin-top:var(--px-12);padding:var(--px-6) var(--px-8)}.CodeMirror-hint-information-deprecation-label,.CodeMirror-info .info-deprecation-label{font-size:var(--font-size-hint);font-weight:var(--font-weight-medium)}.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation-reason{margin-top:var(--px-6)}.graphiql-spinner{height:56px;margin:auto;margin-top:var(--px-16);width:56px}.graphiql-spinner:after{animation:rotation .8s linear 0s infinite;border:4px solid transparent;border-radius:100%;border-top:4px solid hsla(var(--color-neutral),var(--alpha-tertiary));content:"";display:inline-block;height:46px;vertical-align:middle;width:46px}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.graphiql-tooltip{background:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-4);box-shadow:var(--popover-box-shadow);color:hsl(var(--color-neutral));font-size:inherit;padding:var(--px-4) var(--px-6);font-family:var(--font-family)}.graphiql-tabs{display:flex;align-items:center;overflow-x:auto;padding:var(--px-12)}.graphiql-tabs>:not(:first-child){margin-left:var(--px-12)}.graphiql-tab{align-items:stretch;border-radius:var(--border-radius-8);color:hsla(var(--color-neutral),var(--alpha-secondary));display:flex}.graphiql-tab>button.graphiql-tab-close{visibility:hidden}.graphiql-tab.graphiql-tab-active>button.graphiql-tab-close,.graphiql-tab:hover>button.graphiql-tab-close,.graphiql-tab:focus-within>button.graphiql-tab-close{visibility:unset}.graphiql-tab.graphiql-tab-active{background-color:hsla(var(--color-neutral),var(--alpha-background-heavy));color:hsla(var(--color-neutral),1)}button.graphiql-tab-button{padding:var(--px-4) 0 var(--px-4) var(--px-8)}button.graphiql-tab-close{align-items:center;display:flex;padding:var(--px-4) var(--px-8)}button.graphiql-tab-close>svg{height:var(--px-8);width:var(--px-8)}.graphiql-history-header{font-size:var(--font-size-h2);font-weight:var(--font-weight-medium);display:flex;justify-content:space-between;align-items:center}.graphiql-history-header button{font-size:var(--font-size-inline-code);padding:var(--px-6) var(--px-10)}.graphiql-history-items{margin:var(--px-16) 0 0;list-style:none;padding:0}.graphiql-history-item{border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));display:flex;font-size:var(--font-size-inline-code);font-family:var(--font-family-mono);height:34px}.graphiql-history-item:hover{color:hsla(var(--color-neutral),1);background-color:hsla(var(--color-neutral),var(--alpha-background-light))}.graphiql-history-item:not(:first-child){margin-top:var(--px-4)}.graphiql-history-item.editable{background-color:hsla(var(--color-primary),var(--alpha-background-medium))}.graphiql-history-item.editable>input{background:transparent;border:none;flex:1;margin:0;outline:none;padding:0 var(--px-10);width:100%}.graphiql-history-item.editable>input::placeholder{color:hsla(var(--color-neutral),var(--alpha-secondary))}.graphiql-history-item.editable>button{color:hsl(var(--color-primary));padding:0 var(--px-10)}.graphiql-history-item.editable>button:active{background-color:hsla(var(--color-primary),var(--alpha-background-heavy))}.graphiql-history-item.editable>button:focus{outline:hsl(var(--color-primary)) auto 1px}.graphiql-history-item.editable>button>svg{display:block}button.graphiql-history-item-label{flex:1;padding:var(--px-8) var(--px-10);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}button.graphiql-history-item-action{align-items:center;color:hsla(var(--color-neutral),var(--alpha-secondary));display:flex;padding:var(--px-8) var(--px-6)}button.graphiql-history-item-action:hover{color:hsla(var(--color-neutral),1)}button.graphiql-history-item-action>svg{height:14px;width:14px}.graphiql-history-item-spacer{height:var(--px-16)}.graphiql-doc-explorer-default-value{color:hsl(var(--color-success))}a.graphiql-doc-explorer-type-name{color:hsl(var(--color-warning));text-decoration:none}a.graphiql-doc-explorer-type-name:hover{text-decoration:underline}a.graphiql-doc-explorer-type-name:focus{outline:hsl(var(--color-warning)) auto 1px}.graphiql-doc-explorer-argument>*+*{margin-top:var(--px-12)}.graphiql-doc-explorer-argument-name{color:hsl(var(--color-secondary))}.graphiql-doc-explorer-argument-deprecation{background-color:hsla(var(--color-warning),var(--alpha-background-light));border:1px solid hsl(var(--color-warning));border-radius:var(--border-radius-4);color:hsl(var(--color-warning));padding:var(--px-8)}.graphiql-doc-explorer-argument-deprecation-label{font-size:var(--font-size-hint);font-weight:var(--font-weight-medium)}.graphiql-doc-explorer-deprecation{background-color:hsla(var(--color-warning),var(--alpha-background-light));border:1px solid hsl(var(--color-warning));border-radius:var(--px-4);color:hsl(var(--color-warning));padding:var(--px-8)}.graphiql-doc-explorer-deprecation-label{font-size:var(--font-size-hint);font-weight:var(--font-weight-medium)}.graphiql-doc-explorer-directive{color:hsl(var(--color-secondary))}.graphiql-doc-explorer-section-title{align-items:center;display:flex;font-size:var(--font-size-hint);font-weight:var(--font-weight-medium);line-height:1}.graphiql-doc-explorer-section-title>svg{height:var(--px-16);margin-right:var(--px-8);width:var(--px-16)}.graphiql-doc-explorer-section-content{margin-left:var(--px-8);margin-top:var(--px-16)}.graphiql-doc-explorer-section-content>*+*{margin-top:var(--px-16)}.graphiql-doc-explorer-root-type{color:hsl(var(--color-info))}.graphiql-doc-explorer-search{color:hsla(var(--color-neutral),var(--alpha-secondary))}.graphiql-doc-explorer-search:not([data-state="idle"]){border:var(--popover-border);border-radius:var(--border-radius-4);box-shadow:var(--popover-box-shadow);color:hsla(var(--color-neutral),1)}.graphiql-doc-explorer-search:not([data-state="idle"]) .graphiql-doc-explorer-search-input{background:hsl(var(--color-base))}.graphiql-doc-explorer-search-input{align-items:center;background-color:hsla(var(--color-neutral),var(--alpha-background-light));border-radius:var(--border-radius-4);display:flex;padding:var(--px-8) var(--px-12)}.graphiql-doc-explorer-search [role=combobox]{border:none;background-color:transparent;margin-left:var(--px-4);width:100%}.graphiql-doc-explorer-search [role=combobox]:focus{outline:none}.graphiql-doc-explorer-search [role=listbox]{background-color:hsl(var(--color-base));border:none;border-bottom-left-radius:var(--border-radius-4);border-bottom-right-radius:var(--border-radius-4);border-top:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));max-height:400px;overflow-y:auto;margin:0;font-size:var(--font-size-body);padding:var(--px-4);position:relative}.graphiql-doc-explorer-search [role=option]{border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));overflow-x:hidden;padding:var(--px-8) var(--px-12);text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.graphiql-doc-explorer-search [role=option][data-headlessui-state=active]{background-color:hsla(var(--color-neutral),var(--alpha-background-light))}.graphiql-doc-explorer-search [role=option]:hover{background-color:hsla(var(--color-neutral),var(--alpha-background-medium))}.graphiql-doc-explorer-search [role=option][data-headlessui-state=active]:hover{background-color:hsla(var(--color-neutral),var(--alpha-background-heavy))}:is(.graphiql-doc-explorer-search [role="option"])+:is(.graphiql-doc-explorer-search [role="option"]){margin-top:var(--px-4)}.graphiql-doc-explorer-search-type{color:hsl(var(--color-info))}.graphiql-doc-explorer-search-field{color:hsl(var(--color-warning))}.graphiql-doc-explorer-search-argument{color:hsl(var(--color-secondary))}.graphiql-doc-explorer-search-divider{color:hsla(var(--color-neutral),var(--alpha-secondary));font-size:var(--font-size-hint);font-weight:var(--font-weight-medium);margin-top:var(--px-8);padding:var(--px-8) var(--px-12)}.graphiql-doc-explorer-search-empty{color:hsla(var(--color-neutral),var(--alpha-secondary));padding:var(--px-8) var(--px-12)}a.graphiql-doc-explorer-field-name{color:hsl(var(--color-info));text-decoration:none}a.graphiql-doc-explorer-field-name:hover{text-decoration:underline}a.graphiql-doc-explorer-field-name:focus{outline:hsl(var(--color-info)) auto 1px}.graphiql-doc-explorer-item>:not(:first-child){margin-top:var(--px-12)}.graphiql-doc-explorer-argument-multiple{margin-left:var(--px-8)}.graphiql-doc-explorer-enum-value{color:hsl(var(--color-info))}.graphiql-doc-explorer-header{display:flex;justify-content:space-between;position:relative}.graphiql-doc-explorer-header:focus-within .graphiql-doc-explorer-title{visibility:hidden}.graphiql-doc-explorer-header:focus-within .graphiql-doc-explorer-back:not(:focus){color:transparent}.graphiql-doc-explorer-header-content{display:flex;flex-direction:column;min-width:0}.graphiql-doc-explorer-search{position:absolute;right:0;top:0}.graphiql-doc-explorer-search:focus-within{left:0}.graphiql-doc-explorer-search [role=combobox]{height:24px;width:4ch}.graphiql-doc-explorer-search [role=combobox]:focus{width:100%}a.graphiql-doc-explorer-back{align-items:center;color:hsla(var(--color-neutral),var(--alpha-secondary));display:flex;text-decoration:none}a.graphiql-doc-explorer-back:hover{text-decoration:underline}a.graphiql-doc-explorer-back:focus{outline:hsla(var(--color-neutral),var(--alpha-secondary)) auto 1px}a.graphiql-doc-explorer-back:focus+.graphiql-doc-explorer-title{visibility:unset}a.graphiql-doc-explorer-back>svg{height:var(--px-8);margin-right:var(--px-8);width:var(--px-8)}.graphiql-doc-explorer-title{font-weight:var(--font-weight-medium);font-size:var(--font-size-h2);overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.graphiql-doc-explorer-title:not(:first-child){font-size:var(--font-size-h3);margin-top:var(--px-8)}.graphiql-doc-explorer-content>*{color:hsla(var(--color-neutral),var(--alpha-secondary));margin-top:var(--px-20)}.graphiql-doc-explorer-error{background-color:hsla(var(--color-error),var(--alpha-background-heavy));border:1px solid hsl(var(--color-error));border-radius:var(--border-radius-8);color:hsl(var(--color-error));padding:var(--px-8) var(--px-12)}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error,.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors,.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:#ff06}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.graphiql-container .CodeMirror{height:100%;position:absolute;width:100%}.graphiql-container .CodeMirror{font-family:var(--font-family-mono)}.graphiql-container .CodeMirror,.graphiql-container .CodeMirror-gutters{background:none;background-color:var(--editor-background, hsl(var(--color-base)))}.graphiql-container .CodeMirror-linenumber{padding:0}.graphiql-container .CodeMirror-gutters{border:none}.cm-s-graphiql{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.cm-s-graphiql .cm-keyword{color:hsl(var(--color-primary))}.cm-s-graphiql .cm-def{color:hsl(var(--color-tertiary))}.cm-s-graphiql .cm-punctuation{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.cm-s-graphiql .cm-variable{color:hsl(var(--color-secondary))}.cm-s-graphiql .cm-atom{color:hsl(var(--color-tertiary))}.cm-s-graphiql .cm-number{color:hsl(var(--color-success))}.cm-s-graphiql .cm-string{color:hsl(var(--color-warning))}.cm-s-graphiql .cm-builtin{color:hsl(var(--color-success))}.cm-s-graphiql .cm-string-2{color:hsl(var(--color-secondary))}.cm-s-graphiql .cm-attribute,.cm-s-graphiql .cm-meta{color:hsl(var(--color-tertiary))}.cm-s-graphiql .cm-property{color:hsl(var(--color-info))}.cm-s-graphiql .cm-qualifier{color:hsl(var(--color-secondary))}.cm-s-graphiql .cm-comment{color:hsla(var(--color-neutral),var(--alpha-secondary))}.cm-s-graphiql .cm-ws{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.cm-s-graphiql .cm-invalidchar{color:hsl(var(--color-error))}.cm-s-graphiql .CodeMirror-cursor{border-left:2px solid hsla(var(--color-neutral),var(--alpha-secondary))}.cm-s-graphiql .CodeMirror-linenumber{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.graphiql-container div.CodeMirror span.CodeMirror-matchingbracket,.graphiql-container div.CodeMirror span.CodeMirror-nonmatchingbracket{color:hsl(var(--color-warning))}.graphiql-container .CodeMirror-selected,.graphiql-container .CodeMirror-focused .CodeMirror-selected{background:hsla(var(--color-neutral),var(--alpha-background-heavy))}.graphiql-container .CodeMirror-dialog{background:inherit;color:inherit;left:0;right:0;overflow:hidden;padding:var(--px-2) var(--px-6);position:absolute;z-index:6}.graphiql-container .CodeMirror-dialog-top{border-bottom:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));padding-bottom:var(--px-12);top:0}.graphiql-container .CodeMirror-dialog-bottom{border-top:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));bottom:0;padding-top:var(--px-12)}.graphiql-container .CodeMirror-search-hint{display:none}.graphiql-container .CodeMirror-dialog input{border:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));border-radius:var(--border-radius-4);padding:var(--px-4)}.graphiql-container .CodeMirror-dialog input:focus{outline:hsl(var(--color-primary)) solid 2px}.graphiql-container .cm-searching{background-color:hsla(var(--color-warning),var(--alpha-background-light));padding-bottom:1.5px;padding-top:.5px}.CodeMirror-foldmarker{color:#00f;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.7em}.CodeMirror-foldgutter-open,.CodeMirror-foldgutter-folded{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"▾"}.CodeMirror-foldgutter-folded:after{content:"▸"}.CodeMirror-foldgutter{width:var(--px-12)}.CodeMirror-foldmarker{background-color:hsl(var(--color-info));border-radius:var(--border-radius-4);color:hsl(var(--color-base));font-family:inherit;margin:0 var(--px-4);padding:0 var(--px-8);text-shadow:none}.CodeMirror-foldgutter-open,.CodeMirror-foldgutter-folded{color:hsla(var(--color-neutral),var(--alpha-tertiary))}.CodeMirror-foldgutter-open:after,.CodeMirror-foldgutter-folded:after{margin:0 var(--px-2)}.graphiql-editor{height:100%;position:relative;width:100%}.graphiql-editor.hidden{left:-9999px;position:absolute;top:-9999px;visibility:hidden}.CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:#ffd;border:1px solid black;border-radius:4px;color:#000;font-family:monospace;font-size:10pt;overflow:hidden;padding:2px 5px;position:fixed;white-space:pre;white-space:pre-wrap;z-index:100;max-width:600px;opacity:0;transition:opacity .4s;-moz-transition:opacity .4s;-webkit-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s}.CodeMirror-lint-mark{background-position:left bottom;background-repeat:repeat-x}.CodeMirror-lint-mark-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=)}.CodeMirror-lint-mark-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==)}.CodeMirror-lint-marker{background-position:center center;background-repeat:no-repeat;cursor:pointer;display:inline-block;height:16px;width:16px;vertical-align:middle;position:relative}.CodeMirror-lint-message{padding-left:18px;background-position:top left;background-repeat:no-repeat}.CodeMirror-lint-marker-warning,.CodeMirror-lint-message-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=)}.CodeMirror-lint-marker-error,.CodeMirror-lint-message-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=)}.CodeMirror-lint-marker-multiple{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:right bottom;width:100%;height:100%}.CodeMirror-lint-line-error{background-color:#b74c5114}.CodeMirror-lint-line-warning{background-color:#ffd3001a}.CodeMirror-lint-mark-error,.CodeMirror-lint-mark-warning{background-repeat:repeat-x;background-size:10px 3px;background-position:0 95%}.cm-s-graphiql .CodeMirror-lint-mark-error{color:hsl(var(--color-error))}.CodeMirror-lint-mark-error{background-image:linear-gradient(45deg,transparent 65%,hsl(var(--color-error)) 80%,transparent 90%),linear-gradient(135deg,transparent 5%,hsl(var(--color-error)) 15%,transparent 25%),linear-gradient(135deg,transparent 45%,hsl(var(--color-error)) 55%,transparent 65%),linear-gradient(45deg,transparent 25%,hsl(var(--color-error)) 35%,transparent 50%)}.cm-s-graphiql .CodeMirror-lint-mark-warning{color:hsl(var(--color-warning))}.CodeMirror-lint-mark-warning{background-image:linear-gradient(45deg,transparent 65%,hsl(var(--color-warning)) 80%,transparent 90%),linear-gradient(135deg,transparent 5%,hsl(var(--color-warning)) 15%,transparent 25%),linear-gradient(135deg,transparent 45%,hsl(var(--color-warning)) 55%,transparent 65%),linear-gradient(45deg,transparent 25%,hsl(var(--color-warning)) 35%,transparent 50%)}.CodeMirror-lint-tooltip{background-color:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-8);box-shadow:var(--popover-box-shadow);font-size:var(--font-size-body);font-family:var(--font-family);max-width:600px;overflow:hidden;padding:var(--px-12)}.CodeMirror-lint-message-error,.CodeMirror-lint-message-warning{background-image:none;padding:0}.CodeMirror-lint-message-error{color:hsl(var(--color-error))}.CodeMirror-lint-message-warning{color:hsl(var(--color-warning))}.CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px rgba(0,0,0,.2);-moz-box-shadow:2px 3px 5px rgba(0,0,0,.2);box-shadow:2px 3px 5px #0003;border-radius:3px;border:1px solid silver;background:white;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;white-space:pre;color:#000;cursor:pointer}li.CodeMirror-hint-active{background:#08f;color:#fff}.CodeMirror-hints{background:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-8);box-shadow:var(--popover-box-shadow);display:grid;font-family:var(--font-family);font-size:var(--font-size-body);grid-template-columns:auto fit-content(300px);max-height:264px;padding:0}.CodeMirror-hint{border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));grid-column:1 / 2;margin:var(--px-4);padding:var(--px-6) var(--px-8)!important}.CodeMirror-hint:not(:first-child){margin-top:0}li.CodeMirror-hint-active{background:hsla(var(--color-primary),var(--alpha-background-medium));color:hsl(var(--color-primary))}.CodeMirror-hint-information{border-left:1px solid hsla(var(--color-neutral),var(--alpha-background-heavy));grid-column:2 / 3;grid-row:1 / 99999;max-height:264px;overflow:auto;padding:var(--px-12)}.CodeMirror-hint-information-header{display:flex;align-items:baseline}.CodeMirror-hint-information-field-name{font-size:var(--font-size-h4);font-weight:var(--font-weight-medium)}.CodeMirror-hint-information-type-name-pill{border:1px solid hsla(var(--color-neutral),var(--alpha-tertiary));border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));margin-left:var(--px-6);padding:var(--px-4)}.CodeMirror-hint-information-type-name{color:inherit;text-decoration:none}.CodeMirror-hint-information-type-name:hover{text-decoration:underline dotted}.CodeMirror-hint-information-description{color:hsla(var(--color-neutral),var(--alpha-secondary));margin-top:var(--px-12)}.CodeMirror-info{background-color:hsl(var(--color-base));border:var(--popover-border);border-radius:var(--border-radius-8);box-shadow:var(--popover-box-shadow);color:hsla(var(--color-neutral),1);max-height:300px;max-width:400px;opacity:0;overflow:auto;padding:var(--px-12);position:fixed;transition:opacity .15s;z-index:10}.CodeMirror-info a{color:inherit;text-decoration:none}.CodeMirror-info a:hover{text-decoration:underline dotted}.CodeMirror-info .CodeMirror-info-header{display:flex;align-items:baseline}.CodeMirror-info .CodeMirror-info-header>.type-name,.CodeMirror-info .CodeMirror-info-header>.field-name,.CodeMirror-info .CodeMirror-info-header>.arg-name,.CodeMirror-info .CodeMirror-info-header>.directive-name,.CodeMirror-info .CodeMirror-info-header>.enum-value{font-size:var(--font-size-h4);font-weight:var(--font-weight-medium)}.CodeMirror-info .type-name-pill{border:1px solid hsla(var(--color-neutral),var(--alpha-tertiary));border-radius:var(--border-radius-4);color:hsla(var(--color-neutral),var(--alpha-secondary));margin-left:var(--px-6);padding:var(--px-4)}.CodeMirror-info .info-description{color:hsla(var(--color-neutral),var(--alpha-secondary));margin-top:var(--px-12);overflow:hidden}.CodeMirror-jump-token{text-decoration:underline dotted;cursor:pointer}.auto-inserted-leaf.cm-property{animation-duration:6s;animation-name:insertionFade;border-radius:var(--border-radius-4);padding:var(--px-2)}@keyframes insertionFade{0%,to{background-color:none}15%,85%{background-color:hsla(var(--color-warning),var(--alpha-background-light))}}button.graphiql-toolbar-button{display:flex;align-items:center;justify-content:center;height:var(--toolbar-width);width:var(--toolbar-width)}button.graphiql-toolbar-button.error{background:hsla(var(--color-error),var(--alpha-background-heavy))}.graphiql-execute-button-wrapper{position:relative}button.graphiql-execute-button{background-color:hsl(var(--color-primary));border:none;border-radius:var(--border-radius-8);cursor:pointer;height:var(--toolbar-width);padding:0;width:var(--toolbar-width)}button.graphiql-execute-button:hover{background-color:hsla(var(--color-primary),.9)}button.graphiql-execute-button:active{background-color:hsla(var(--color-primary),.8)}button.graphiql-execute-button:focus{outline:hsla(var(--color-primary),.8) auto 1px}button.graphiql-execute-button>svg{color:#fff;display:block;height:var(--px-16);margin:auto;width:var(--px-16)}button.graphiql-toolbar-menu{display:block;height:var(--toolbar-width);width:var(--toolbar-width)} - -/*!*********************************************************************************************************************!*\ - !*** css ../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./style.css ***! - \*********************************************************************************************************************/ -/* Everything */ -.graphiql-container { - background-color: hsl(var(--color-base)); - display: flex; - height: 100%; - margin: 0; - overflow: hidden; - width: 100%; -} -/* The sidebar */ -.graphiql-container .graphiql-sidebar { - display: flex; - flex-direction: column; - justify-content: space-between; - padding: var(--px-8); - width: var(--sidebar-width); -} -.graphiql-container .graphiql-sidebar .graphiql-sidebar-section { - display: flex; - flex-direction: column; - gap: var(--px-8); -} -.graphiql-container .graphiql-sidebar button { - display: flex; - align-items: center; - justify-content: center; - color: hsla(var(--color-neutral), var(--alpha-secondary)); - height: calc(var(--sidebar-width) - (2 * var(--px-8))); - width: calc(var(--sidebar-width) - (2 * var(--px-8))); -} -.graphiql-container .graphiql-sidebar button.active { - color: hsla(var(--color-neutral), 1); -} -.graphiql-container .graphiql-sidebar button:not(:first-child) { - margin-top: var(--px-4); -} -.graphiql-container .graphiql-sidebar button > svg { - height: var(--px-20); - width: var(--px-20); -} -/* The main content, i.e. everything except the sidebar */ -.graphiql-container .graphiql-main { - display: flex; - flex: 1; - min-width: 0; -} -/* The current session and tabs */ -.graphiql-container .graphiql-sessions { - background-color: hsla(var(--color-neutral), var(--alpha-background-light)); - /* Adding the 8px of padding to the inner border radius of the query editor */ - border-radius: calc(var(--border-radius-12) + var(--px-8)); - display: flex; - flex-direction: column; - flex: 1; - max-height: 100%; - margin: var(--px-16); - margin-left: 0; - min-width: 0; -} -/* The session header containing tabs and the logo */ -.graphiql-container .graphiql-session-header { - align-items: center; - display: flex; - justify-content: space-between; - height: var(--session-header-height); -} -/* The button to add a new tab */ -button.graphiql-tab-add { - height: 100%; - padding: var(--px-4); -} -button.graphiql-tab-add > svg { - color: hsla(var(--color-neutral), var(--alpha-secondary)); - display: block; - height: var(--px-16); - width: var(--px-16); -} -/* The right-hand-side of the session header */ -.graphiql-container .graphiql-session-header-right { - align-items: center; - display: flex; -} -/* The GraphiQL logo */ -.graphiql-container .graphiql-logo { - color: hsla(var(--color-neutral), var(--alpha-secondary)); - font-size: var(--font-size-h4); - font-weight: var(--font-weight-medium); - padding: var(--px-12) var(--px-16); -} -/* Undo default link styling for the default GraphiQL logo link */ -.graphiql-container .graphiql-logo .graphiql-logo-link { - color: hsla(var(--color-neutral), var(--alpha-secondary)); - text-decoration: none; -} -/* The editor of the session */ -.graphiql-container .graphiql-session { - display: flex; - flex: 1; - padding: 0 var(--px-8) var(--px-8); -} -/* All editors (query, variable, headers) */ -.graphiql-container .graphiql-editors { - background-color: hsl(var(--color-base)); - border-radius: calc(var(--border-radius-12)); - box-shadow: var(--popover-box-shadow); - display: flex; - flex: 1; - flex-direction: column; -} -.graphiql-container .graphiql-editors.full-height { - margin-top: calc(var(--px-8) - var(--session-header-height)); -} -/* The query editor and the toolbar */ -.graphiql-container .graphiql-query-editor { - border-bottom: 1px solid - hsla(var(--color-neutral), var(--alpha-background-heavy)); - padding: var(--px-16); - column-gap: var(--px-16); - display: flex; - width: 100%; -} -/* The vertical toolbar next to the query editor */ -.graphiql-container .graphiql-toolbar { - width: var(--toolbar-width); -} -.graphiql-container .graphiql-toolbar > * + * { - margin-top: var(--px-8); -} -/* The toolbar icons */ -.graphiql-toolbar-icon { - color: hsla(var(--color-neutral), var(--alpha-tertiary)); - display: block; - height: calc(var(--toolbar-width) - (var(--px-8) * 2)); - width: calc(var(--toolbar-width) - (var(--px-8) * 2)); -} -/* The tab bar for editor tools */ -.graphiql-container .graphiql-editor-tools { - cursor: row-resize; - display: flex; - width: 100%; - column-gap: var(--px-8); - padding: var(--px-8); -} -.graphiql-container .graphiql-editor-tools button { - color: hsla(var(--color-neutral), var(--alpha-secondary)); -} -.graphiql-container .graphiql-editor-tools button.active { - color: hsla(var(--color-neutral), 1); -} -/* The tab buttons to switch between editor tools */ -.graphiql-container - .graphiql-editor-tools - > button:not(.graphiql-toggle-editor-tools) { - padding: var(--px-8) var(--px-12); -} -.graphiql-container .graphiql-editor-tools .graphiql-toggle-editor-tools { - margin-left: auto; -} -/* An editor tool, e.g. variable or header editor */ -.graphiql-container .graphiql-editor-tool { - flex: 1; - padding: var(--px-16); -} -/** - * The way CodeMirror editors are styled they overflow their containing - * element. For some OS-browser-combinations this might cause overlap issues, - * setting the position of this to `relative` makes sure this element will - * always be on top of any editors. - */ -.graphiql-container .graphiql-toolbar, -.graphiql-container .graphiql-editor-tools, -.graphiql-container .graphiql-editor-tool { - position: relative; -} -/* The response view */ -.graphiql-container .graphiql-response { - --editor-background: transparent; - display: flex; - width: 100%; - flex-direction: column; -} -/* The results editor wrapping container */ -.graphiql-container .graphiql-response .result-window { - position: relative; - flex: 1; -} -/* The footer below the response view */ -.graphiql-container .graphiql-footer { - border-top: 1px solid - hsla(var(--color-neutral), var(--alpha-background-heavy)); -} -/* The plugin container */ -.graphiql-container .graphiql-plugin { - border-left: 1px solid - hsla(var(--color-neutral), var(--alpha-background-heavy)); - flex: 1; - overflow-y: auto; - padding: var(--px-16); -} -/* Generic drag bar for horizontal resizing */ -.graphiql-horizontal-drag-bar { - width: var(--px-12); - cursor: col-resize; -} -.graphiql-horizontal-drag-bar:hover::after { - border: var(--px-2) solid - hsla(var(--color-neutral), var(--alpha-background-heavy)); - border-radius: var(--border-radius-2); - content: ''; - display: block; - height: 25%; - margin: 0 auto; - position: relative; - /* (100% - 25%) / 2 = 37.5% */ - top: 37.5%; - width: 0; -} -.graphiql-container .graphiql-chevron-icon { - color: hsla(var(--color-neutral), var(--alpha-tertiary)); - display: block; - height: var(--px-12); - margin: var(--px-12); - width: var(--px-12); -} -/* Generic spin animation */ -.graphiql-spin { - animation: spin 0.8s linear 0s infinite; -} -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} -/* The header of the settings dialog */ -.graphiql-dialog .graphiql-dialog-header { - align-items: center; - display: flex; - justify-content: space-between; - padding: var(--px-24); -} -/* The title of the settings dialog */ -.graphiql-dialog .graphiql-dialog-title { - font-size: var(--font-size-h3); - font-weight: var(--font-weight-medium); - margin: 0; -} -/* A section inside the settings dialog */ -.graphiql-dialog .graphiql-dialog-section { - align-items: center; - border-top: 1px solid - hsla(var(--color-neutral), var(--alpha-background-heavy)); - display: flex; - justify-content: space-between; - padding: var(--px-24); -} -.graphiql-dialog .graphiql-dialog-section > :not(:first-child) { - margin-left: var(--px-24); -} -/* The section title in the settings dialog */ -.graphiql-dialog .graphiql-dialog-section-title { - font-size: var(--font-size-h4); - font-weight: var(--font-weight-medium); -} -/* The section caption in the settings dialog */ -.graphiql-dialog .graphiql-dialog-section-caption { - color: hsla(var(--color-neutral), var(--alpha-secondary)); -} -.graphiql-dialog .graphiql-warning-text { - color: hsl(var(--color-warning)); - font-weight: var(--font-weight-medium); -} -.graphiql-dialog .graphiql-table { - border-collapse: collapse; - width: 100%; -} -.graphiql-dialog .graphiql-table :is(th, td) { - border: 1px solid hsla(var(--color-neutral), var(--alpha-background-heavy)); - padding: var(--px-8) var(--px-12); -} -/* A single key the short-key dialog */ -.graphiql-dialog .graphiql-key { - background-color: hsla(var(--color-neutral), var(--alpha-background-medium)); - border-radius: var(--border-radius-4); - padding: var(--px-4); -} -/* Avoid showing native tooltips for icons with titles */ -.graphiql-container svg { - pointer-events: none; -} - - -/*# sourceMappingURL=graphiql.min.css.map*/ \ No newline at end of file diff --git a/netbox/project-static/dist/graphiql.min.js b/netbox/project-static/dist/graphiql.min.js deleted file mode 100644 index b7f9a866d54..00000000000 --- a/netbox/project-static/dist/graphiql.min.js +++ /dev/null @@ -1,83667 +0,0 @@ -/******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js": -/*!**************************************************************************************!*\ - !*** ../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js ***! - \**************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; -var _memoize = _interopRequireDefault(__webpack_require__(/*! @emotion/memoize */ "../../../node_modules/@emotion/memoize/dist/memoize.browser.esm.js")); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23 - -var index = (0, _memoize.default)(function (prop) { - return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 - /* o */ && prop.charCodeAt(1) === 110 - /* n */ && prop.charCodeAt(2) < 91; -} -/* Z+1 */); -var _default = index; -exports["default"] = _default; - -/***/ }), - -/***/ "../../../node_modules/@emotion/memoize/dist/memoize.browser.esm.js": -/*!**************************************************************************!*\ - !*** ../../../node_modules/@emotion/memoize/dist/memoize.browser.esm.js ***! - \**************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; -function memoize(fn) { - var cache = {}; - return function (arg) { - if (cache[arg] === undefined) cache[arg] = fn(arg); - return cache[arg]; - }; -} -var _default = memoize; -exports["default"] = _default; - -/***/ }), - -/***/ "../../../node_modules/@floating-ui/core/dist/floating-ui.core.esm.js": -/*!****************************************************************************!*\ - !*** ../../../node_modules/@floating-ui/core/dist/floating-ui.core.esm.js ***! - \****************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.computePosition = exports.autoPlacement = exports.arrow = void 0; -exports.detectOverflow = detectOverflow; -exports.offset = exports.limitShift = exports.inline = exports.hide = exports.flip = void 0; -exports.rectToClientRect = rectToClientRect; -exports.size = exports.shift = void 0; -function getAlignment(placement) { - return placement.split('-')[1]; -} -function getLengthFromAxis(axis) { - return axis === 'y' ? 'height' : 'width'; -} -function getSide(placement) { - return placement.split('-')[0]; -} -function getMainAxisFromPlacement(placement) { - return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y'; -} -function computeCoordsFromPlacement(_ref, placement, rtl) { - let { - reference, - floating - } = _ref; - const commonX = reference.x + reference.width / 2 - floating.width / 2; - const commonY = reference.y + reference.height / 2 - floating.height / 2; - const mainAxis = getMainAxisFromPlacement(placement); - const length = getLengthFromAxis(mainAxis); - const commonAlign = reference[length] / 2 - floating[length] / 2; - const side = getSide(placement); - const isVertical = mainAxis === 'x'; - let coords; - switch (side) { - case 'top': - coords = { - x: commonX, - y: reference.y - floating.height - }; - break; - case 'bottom': - coords = { - x: commonX, - y: reference.y + reference.height - }; - break; - case 'right': - coords = { - x: reference.x + reference.width, - y: commonY - }; - break; - case 'left': - coords = { - x: reference.x - floating.width, - y: commonY - }; - break; - default: - coords = { - x: reference.x, - y: reference.y - }; - } - switch (getAlignment(placement)) { - case 'start': - coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1); - break; - case 'end': - coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1); - break; - } - return coords; -} - -/** - * Computes the `x` and `y` coordinates that will place the floating element - * next to a reference element when it is given a certain positioning strategy. - * - * This export does not have any `platform` interface logic. You will need to - * write one for the platform you are using Floating UI with. - */ -const computePosition = async (reference, floating, config) => { - const { - placement = 'bottom', - strategy = 'absolute', - middleware = [], - platform - } = config; - const validMiddleware = middleware.filter(Boolean); - const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating)); - let rects = await platform.getElementRects({ - reference, - floating, - strategy - }); - let { - x, - y - } = computeCoordsFromPlacement(rects, placement, rtl); - let statefulPlacement = placement; - let middlewareData = {}; - let resetCount = 0; - for (let i = 0; i < validMiddleware.length; i++) { - const { - name, - fn - } = validMiddleware[i]; - const { - x: nextX, - y: nextY, - data, - reset - } = await fn({ - x, - y, - initialPlacement: placement, - placement: statefulPlacement, - strategy, - middlewareData, - rects, - platform, - elements: { - reference, - floating - } - }); - x = nextX != null ? nextX : x; - y = nextY != null ? nextY : y; - middlewareData = { - ...middlewareData, - [name]: { - ...middlewareData[name], - ...data - } - }; - if (reset && resetCount <= 50) { - resetCount++; - if (typeof reset === 'object') { - if (reset.placement) { - statefulPlacement = reset.placement; - } - if (reset.rects) { - rects = reset.rects === true ? await platform.getElementRects({ - reference, - floating, - strategy - }) : reset.rects; - } - ({ - x, - y - } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); - } - i = -1; - continue; - } - } - return { - x, - y, - placement: statefulPlacement, - strategy, - middlewareData - }; -}; -exports.computePosition = computePosition; -function evaluate(value, param) { - return typeof value === 'function' ? value(param) : value; -} -function expandPaddingObject(padding) { - return { - top: 0, - right: 0, - bottom: 0, - left: 0, - ...padding - }; -} -function getSideObjectFromPadding(padding) { - return typeof padding !== 'number' ? expandPaddingObject(padding) : { - top: padding, - right: padding, - bottom: padding, - left: padding - }; -} -function rectToClientRect(rect) { - return { - ...rect, - top: rect.y, - left: rect.x, - right: rect.x + rect.width, - bottom: rect.y + rect.height - }; -} - -/** - * Resolves with an object of overflow side offsets that determine how much the - * element is overflowing a given clipping boundary on each side. - * - positive = overflowing the boundary by that number of pixels - * - negative = how many pixels left before it will overflow - * - 0 = lies flush with the boundary - * @see https://floating-ui.com/docs/detectOverflow - */ -async function detectOverflow(state, options) { - var _await$platform$isEle; - if (options === void 0) { - options = {}; - } - const { - x, - y, - platform, - rects, - elements, - strategy - } = state; - const { - boundary = 'clippingAncestors', - rootBoundary = 'viewport', - elementContext = 'floating', - altBoundary = false, - padding = 0 - } = evaluate(options, state); - const paddingObject = getSideObjectFromPadding(padding); - const altContext = elementContext === 'floating' ? 'reference' : 'floating'; - const element = elements[altBoundary ? altContext : elementContext]; - const clippingClientRect = rectToClientRect(await platform.getClippingRect({ - element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))), - boundary, - rootBoundary, - strategy - })); - const rect = elementContext === 'floating' ? { - ...rects.floating, - x, - y - } : rects.reference; - const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)); - const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || { - x: 1, - y: 1 - } : { - x: 1, - y: 1 - }; - const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({ - rect, - offsetParent, - strategy - }) : rect); - return { - top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, - bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, - left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, - right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x - }; -} -const min = Math.min; -const max = Math.max; -function within(min$1, value, max$1) { - return max(min$1, min(value, max$1)); -} - -/** - * Provides data to position an inner element of the floating element so that it - * appears centered to the reference element. - * @see https://floating-ui.com/docs/arrow - */ -const arrow = options => ({ - name: 'arrow', - options, - async fn(state) { - const { - x, - y, - placement, - rects, - platform, - elements - } = state; - // Since `element` is required, we don't Partial<> the type. - const { - element, - padding = 0 - } = evaluate(options, state) || {}; - if (element == null) { - return {}; - } - const paddingObject = getSideObjectFromPadding(padding); - const coords = { - x, - y - }; - const axis = getMainAxisFromPlacement(placement); - const length = getLengthFromAxis(axis); - const arrowDimensions = await platform.getDimensions(element); - const isYAxis = axis === 'y'; - const minProp = isYAxis ? 'top' : 'left'; - const maxProp = isYAxis ? 'bottom' : 'right'; - const clientProp = isYAxis ? 'clientHeight' : 'clientWidth'; - const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; - const startDiff = coords[axis] - rects.reference[axis]; - const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element)); - let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0; - - // DOM platform can return `window` as the `offsetParent`. - if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) { - clientSize = elements.floating[clientProp] || rects.floating[length]; - } - const centerToReference = endDiff / 2 - startDiff / 2; - - // If the padding is large enough that it causes the arrow to no longer be - // centered, modify the padding so that it is centered. - const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; - const minPadding = min(paddingObject[minProp], largestPossiblePadding); - const maxPadding = min(paddingObject[maxProp], largestPossiblePadding); - - // Make sure the arrow doesn't overflow the floating element if the center - // point is outside the floating element's bounds. - const min$1 = minPadding; - const max = clientSize - arrowDimensions[length] - maxPadding; - const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; - const offset = within(min$1, center, max); - - // If the reference is small enough that the arrow's padding causes it to - // to point to nothing for an aligned placement, adjust the offset of the - // floating element itself. This stops `shift()` from taking action, but can - // be worked around by calling it again after the `arrow()` if desired. - const shouldAddOffset = getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; - const alignmentOffset = shouldAddOffset ? center < min$1 ? min$1 - center : max - center : 0; - return { - [axis]: coords[axis] - alignmentOffset, - data: { - [axis]: offset, - centerOffset: center - offset - } - }; - } -}); -exports.arrow = arrow; -const sides = ['top', 'right', 'bottom', 'left']; -const allPlacements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + "-start", side + "-end"), []); -const oppositeSideMap = { - left: 'right', - right: 'left', - bottom: 'top', - top: 'bottom' -}; -function getOppositePlacement(placement) { - return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]); -} -function getAlignmentSides(placement, rects, rtl) { - if (rtl === void 0) { - rtl = false; - } - const alignment = getAlignment(placement); - const mainAxis = getMainAxisFromPlacement(placement); - const length = getLengthFromAxis(mainAxis); - let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top'; - if (rects.reference[length] > rects.floating[length]) { - mainAlignmentSide = getOppositePlacement(mainAlignmentSide); - } - return { - main: mainAlignmentSide, - cross: getOppositePlacement(mainAlignmentSide) - }; -} -const oppositeAlignmentMap = { - start: 'end', - end: 'start' -}; -function getOppositeAlignmentPlacement(placement) { - return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]); -} -function getPlacementList(alignment, autoAlignment, allowedPlacements) { - const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement); - return allowedPlacementsSortedByAlignment.filter(placement => { - if (alignment) { - return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false); - } - return true; - }); -} -/** - * Optimizes the visibility of the floating element by choosing the placement - * that has the most space available automatically, without needing to specify a - * preferred placement. Alternative to `flip`. - * @see https://floating-ui.com/docs/autoPlacement - */ -const autoPlacement = function (options) { - if (options === void 0) { - options = {}; - } - return { - name: 'autoPlacement', - options, - async fn(state) { - var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE; - const { - rects, - middlewareData, - placement, - platform, - elements - } = state; - const { - crossAxis = false, - alignment, - allowedPlacements = allPlacements, - autoAlignment = true, - ...detectOverflowOptions - } = evaluate(options, state); - const placements = alignment !== undefined || allowedPlacements === allPlacements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements; - const overflow = await detectOverflow(state, detectOverflowOptions); - const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0; - const currentPlacement = placements[currentIndex]; - if (currentPlacement == null) { - return {}; - } - const { - main, - cross - } = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))); - - // Make `computeCoords` start from the right place. - if (placement !== currentPlacement) { - return { - reset: { - placement: placements[0] - } - }; - } - const currentOverflows = [overflow[getSide(currentPlacement)], overflow[main], overflow[cross]]; - const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), { - placement: currentPlacement, - overflows: currentOverflows - }]; - const nextPlacement = placements[currentIndex + 1]; - - // There are more placements to check. - if (nextPlacement) { - return { - data: { - index: currentIndex + 1, - overflows: allOverflows - }, - reset: { - placement: nextPlacement - } - }; - } - const placementsSortedByMostSpace = allOverflows.map(d => { - const alignment = getAlignment(d.placement); - return [d.placement, alignment && crossAxis ? - // Check along the mainAxis and main crossAxis side. - d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) : - // Check only the mainAxis. - d.overflows[0], d.overflows]; - }).sort((a, b) => a[1] - b[1]); - const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0, - // Aligned placements should not check their opposite crossAxis - // side. - getAlignment(d[0]) ? 2 : 3).every(v => v <= 0)); - const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0]; - if (resetPlacement !== placement) { - return { - data: { - index: currentIndex + 1, - overflows: allOverflows - }, - reset: { - placement: resetPlacement - } - }; - } - return {}; - } - }; -}; -exports.autoPlacement = autoPlacement; -function getExpandedPlacements(placement) { - const oppositePlacement = getOppositePlacement(placement); - return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; -} -function getSideList(side, isStart, rtl) { - const lr = ['left', 'right']; - const rl = ['right', 'left']; - const tb = ['top', 'bottom']; - const bt = ['bottom', 'top']; - switch (side) { - case 'top': - case 'bottom': - if (rtl) return isStart ? rl : lr; - return isStart ? lr : rl; - case 'left': - case 'right': - return isStart ? tb : bt; - default: - return []; - } -} -function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { - const alignment = getAlignment(placement); - let list = getSideList(getSide(placement), direction === 'start', rtl); - if (alignment) { - list = list.map(side => side + "-" + alignment); - if (flipAlignment) { - list = list.concat(list.map(getOppositeAlignmentPlacement)); - } - } - return list; -} - -/** - * Optimizes the visibility of the floating element by flipping the `placement` - * in order to keep it in view when the preferred placement(s) will overflow the - * clipping boundary. Alternative to `autoPlacement`. - * @see https://floating-ui.com/docs/flip - */ -const flip = function (options) { - if (options === void 0) { - options = {}; - } - return { - name: 'flip', - options, - async fn(state) { - var _middlewareData$flip; - const { - placement, - middlewareData, - rects, - initialPlacement, - platform, - elements - } = state; - const { - mainAxis: checkMainAxis = true, - crossAxis: checkCrossAxis = true, - fallbackPlacements: specifiedFallbackPlacements, - fallbackStrategy = 'bestFit', - fallbackAxisSideDirection = 'none', - flipAlignment = true, - ...detectOverflowOptions - } = evaluate(options, state); - const side = getSide(placement); - const isBasePlacement = getSide(initialPlacement) === initialPlacement; - const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)); - const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); - if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') { - fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); - } - const placements = [initialPlacement, ...fallbackPlacements]; - const overflow = await detectOverflow(state, detectOverflowOptions); - const overflows = []; - let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; - if (checkMainAxis) { - overflows.push(overflow[side]); - } - if (checkCrossAxis) { - const { - main, - cross - } = getAlignmentSides(placement, rects, rtl); - overflows.push(overflow[main], overflow[cross]); - } - overflowsData = [...overflowsData, { - placement, - overflows - }]; - - // One or more sides is overflowing. - if (!overflows.every(side => side <= 0)) { - var _middlewareData$flip2, _overflowsData$filter; - const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; - const nextPlacement = placements[nextIndex]; - if (nextPlacement) { - // Try next placement and re-run the lifecycle. - return { - data: { - index: nextIndex, - overflows: overflowsData - }, - reset: { - placement: nextPlacement - } - }; - } - - // First, find the candidates that fit on the mainAxis side of overflow, - // then find the placement that fits the best on the main crossAxis side. - let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement; - - // Otherwise fallback. - if (!resetPlacement) { - switch (fallbackStrategy) { - case 'bestFit': - { - var _overflowsData$map$so; - const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0]; - if (placement) { - resetPlacement = placement; - } - break; - } - case 'initialPlacement': - resetPlacement = initialPlacement; - break; - } - } - if (placement !== resetPlacement) { - return { - reset: { - placement: resetPlacement - } - }; - } - } - return {}; - } - }; -}; -exports.flip = flip; -function getSideOffsets(overflow, rect) { - return { - top: overflow.top - rect.height, - right: overflow.right - rect.width, - bottom: overflow.bottom - rect.height, - left: overflow.left - rect.width - }; -} -function isAnySideFullyClipped(overflow) { - return sides.some(side => overflow[side] >= 0); -} -/** - * Provides data to hide the floating element in applicable situations, such as - * when it is not in the same clipping context as the reference element. - * @see https://floating-ui.com/docs/hide - */ -const hide = function (options) { - if (options === void 0) { - options = {}; - } - return { - name: 'hide', - options, - async fn(state) { - const { - rects - } = state; - const { - strategy = 'referenceHidden', - ...detectOverflowOptions - } = evaluate(options, state); - switch (strategy) { - case 'referenceHidden': - { - const overflow = await detectOverflow(state, { - ...detectOverflowOptions, - elementContext: 'reference' - }); - const offsets = getSideOffsets(overflow, rects.reference); - return { - data: { - referenceHiddenOffsets: offsets, - referenceHidden: isAnySideFullyClipped(offsets) - } - }; - } - case 'escaped': - { - const overflow = await detectOverflow(state, { - ...detectOverflowOptions, - altBoundary: true - }); - const offsets = getSideOffsets(overflow, rects.floating); - return { - data: { - escapedOffsets: offsets, - escaped: isAnySideFullyClipped(offsets) - } - }; - } - default: - { - return {}; - } - } - } - }; -}; -exports.hide = hide; -function getBoundingRect(rects) { - const minX = min(...rects.map(rect => rect.left)); - const minY = min(...rects.map(rect => rect.top)); - const maxX = max(...rects.map(rect => rect.right)); - const maxY = max(...rects.map(rect => rect.bottom)); - return { - x: minX, - y: minY, - width: maxX - minX, - height: maxY - minY - }; -} -function getRectsByLine(rects) { - const sortedRects = rects.slice().sort((a, b) => a.y - b.y); - const groups = []; - let prevRect = null; - for (let i = 0; i < sortedRects.length; i++) { - const rect = sortedRects[i]; - if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) { - groups.push([rect]); - } else { - groups[groups.length - 1].push(rect); - } - prevRect = rect; - } - return groups.map(rect => rectToClientRect(getBoundingRect(rect))); -} -/** - * Provides improved positioning for inline reference elements that can span - * over multiple lines, such as hyperlinks or range selections. - * @see https://floating-ui.com/docs/inline - */ -const inline = function (options) { - if (options === void 0) { - options = {}; - } - return { - name: 'inline', - options, - async fn(state) { - const { - placement, - elements, - rects, - platform, - strategy - } = state; - // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a - // ClientRect's bounds, despite the event listener being triggered. A - // padding of 2 seems to handle this issue. - const { - padding = 2, - x, - y - } = evaluate(options, state); - const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []); - const clientRects = getRectsByLine(nativeClientRects); - const fallback = rectToClientRect(getBoundingRect(nativeClientRects)); - const paddingObject = getSideObjectFromPadding(padding); - function getBoundingClientRect() { - // There are two rects and they are disjoined. - if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) { - // Find the first rect in which the point is fully inside. - return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback; - } - - // There are 2 or more connected rects. - if (clientRects.length >= 2) { - if (getMainAxisFromPlacement(placement) === 'x') { - const firstRect = clientRects[0]; - const lastRect = clientRects[clientRects.length - 1]; - const isTop = getSide(placement) === 'top'; - const top = firstRect.top; - const bottom = lastRect.bottom; - const left = isTop ? firstRect.left : lastRect.left; - const right = isTop ? firstRect.right : lastRect.right; - const width = right - left; - const height = bottom - top; - return { - top, - bottom, - left, - right, - width, - height, - x: left, - y: top - }; - } - const isLeftSide = getSide(placement) === 'left'; - const maxRight = max(...clientRects.map(rect => rect.right)); - const minLeft = min(...clientRects.map(rect => rect.left)); - const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight); - const top = measureRects[0].top; - const bottom = measureRects[measureRects.length - 1].bottom; - const left = minLeft; - const right = maxRight; - const width = right - left; - const height = bottom - top; - return { - top, - bottom, - left, - right, - width, - height, - x: left, - y: top - }; - } - return fallback; - } - const resetRects = await platform.getElementRects({ - reference: { - getBoundingClientRect - }, - floating: elements.floating, - strategy - }); - if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) { - return { - reset: { - rects: resetRects - } - }; - } - return {}; - } - }; -}; -exports.inline = inline; -async function convertValueToCoords(state, options) { - const { - placement, - platform, - elements - } = state; - const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)); - const side = getSide(placement); - const alignment = getAlignment(placement); - const isVertical = getMainAxisFromPlacement(placement) === 'x'; - const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1; - const crossAxisMulti = rtl && isVertical ? -1 : 1; - const rawValue = evaluate(options, state); - - // eslint-disable-next-line prefer-const - let { - mainAxis, - crossAxis, - alignmentAxis - } = typeof rawValue === 'number' ? { - mainAxis: rawValue, - crossAxis: 0, - alignmentAxis: null - } : { - mainAxis: 0, - crossAxis: 0, - alignmentAxis: null, - ...rawValue - }; - if (alignment && typeof alignmentAxis === 'number') { - crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis; - } - return isVertical ? { - x: crossAxis * crossAxisMulti, - y: mainAxis * mainAxisMulti - } : { - x: mainAxis * mainAxisMulti, - y: crossAxis * crossAxisMulti - }; -} - -/** - * Modifies the placement by translating the floating element along the - * specified axes. - * A number (shorthand for `mainAxis` or distance), or an axes configuration - * object may be passed. - * @see https://floating-ui.com/docs/offset - */ -const offset = function (options) { - if (options === void 0) { - options = 0; - } - return { - name: 'offset', - options, - async fn(state) { - const { - x, - y - } = state; - const diffCoords = await convertValueToCoords(state, options); - return { - x: x + diffCoords.x, - y: y + diffCoords.y, - data: diffCoords - }; - } - }; -}; -exports.offset = offset; -function getCrossAxis(axis) { - return axis === 'x' ? 'y' : 'x'; -} - -/** - * Optimizes the visibility of the floating element by shifting it in order to - * keep it in view when it will overflow the clipping boundary. - * @see https://floating-ui.com/docs/shift - */ -const shift = function (options) { - if (options === void 0) { - options = {}; - } - return { - name: 'shift', - options, - async fn(state) { - const { - x, - y, - placement - } = state; - const { - mainAxis: checkMainAxis = true, - crossAxis: checkCrossAxis = false, - limiter = { - fn: _ref => { - let { - x, - y - } = _ref; - return { - x, - y - }; - } - }, - ...detectOverflowOptions - } = evaluate(options, state); - const coords = { - x, - y - }; - const overflow = await detectOverflow(state, detectOverflowOptions); - const mainAxis = getMainAxisFromPlacement(getSide(placement)); - const crossAxis = getCrossAxis(mainAxis); - let mainAxisCoord = coords[mainAxis]; - let crossAxisCoord = coords[crossAxis]; - if (checkMainAxis) { - const minSide = mainAxis === 'y' ? 'top' : 'left'; - const maxSide = mainAxis === 'y' ? 'bottom' : 'right'; - const min = mainAxisCoord + overflow[minSide]; - const max = mainAxisCoord - overflow[maxSide]; - mainAxisCoord = within(min, mainAxisCoord, max); - } - if (checkCrossAxis) { - const minSide = crossAxis === 'y' ? 'top' : 'left'; - const maxSide = crossAxis === 'y' ? 'bottom' : 'right'; - const min = crossAxisCoord + overflow[minSide]; - const max = crossAxisCoord - overflow[maxSide]; - crossAxisCoord = within(min, crossAxisCoord, max); - } - const limitedCoords = limiter.fn({ - ...state, - [mainAxis]: mainAxisCoord, - [crossAxis]: crossAxisCoord - }); - return { - ...limitedCoords, - data: { - x: limitedCoords.x - x, - y: limitedCoords.y - y - } - }; - } - }; -}; -/** - * Built-in `limiter` that will stop `shift()` at a certain point. - */ -exports.shift = shift; -const limitShift = function (options) { - if (options === void 0) { - options = {}; - } - return { - options, - fn(state) { - const { - x, - y, - placement, - rects, - middlewareData - } = state; - const { - offset = 0, - mainAxis: checkMainAxis = true, - crossAxis: checkCrossAxis = true - } = evaluate(options, state); - const coords = { - x, - y - }; - const mainAxis = getMainAxisFromPlacement(placement); - const crossAxis = getCrossAxis(mainAxis); - let mainAxisCoord = coords[mainAxis]; - let crossAxisCoord = coords[crossAxis]; - const rawOffset = evaluate(offset, state); - const computedOffset = typeof rawOffset === 'number' ? { - mainAxis: rawOffset, - crossAxis: 0 - } : { - mainAxis: 0, - crossAxis: 0, - ...rawOffset - }; - if (checkMainAxis) { - const len = mainAxis === 'y' ? 'height' : 'width'; - const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis; - const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis; - if (mainAxisCoord < limitMin) { - mainAxisCoord = limitMin; - } else if (mainAxisCoord > limitMax) { - mainAxisCoord = limitMax; - } - } - if (checkCrossAxis) { - var _middlewareData$offse, _middlewareData$offse2; - const len = mainAxis === 'y' ? 'width' : 'height'; - const isOriginSide = ['top', 'left'].includes(getSide(placement)); - const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis); - const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0); - if (crossAxisCoord < limitMin) { - crossAxisCoord = limitMin; - } else if (crossAxisCoord > limitMax) { - crossAxisCoord = limitMax; - } - } - return { - [mainAxis]: mainAxisCoord, - [crossAxis]: crossAxisCoord - }; - } - }; -}; - -/** - * Provides data that allows you to change the size of the floating element — - * for instance, prevent it from overflowing the clipping boundary or match the - * width of the reference element. - * @see https://floating-ui.com/docs/size - */ -exports.limitShift = limitShift; -const size = function (options) { - if (options === void 0) { - options = {}; - } - return { - name: 'size', - options, - async fn(state) { - const { - placement, - rects, - platform, - elements - } = state; - const { - apply = () => {}, - ...detectOverflowOptions - } = evaluate(options, state); - const overflow = await detectOverflow(state, detectOverflowOptions); - const side = getSide(placement); - const alignment = getAlignment(placement); - const axis = getMainAxisFromPlacement(placement); - const isXAxis = axis === 'x'; - const { - width, - height - } = rects.floating; - let heightSide; - let widthSide; - if (side === 'top' || side === 'bottom') { - heightSide = side; - widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right'; - } else { - widthSide = side; - heightSide = alignment === 'end' ? 'top' : 'bottom'; - } - const overflowAvailableHeight = height - overflow[heightSide]; - const overflowAvailableWidth = width - overflow[widthSide]; - const noShift = !state.middlewareData.shift; - let availableHeight = overflowAvailableHeight; - let availableWidth = overflowAvailableWidth; - if (isXAxis) { - const maximumClippingWidth = width - overflow.left - overflow.right; - availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth; - } else { - const maximumClippingHeight = height - overflow.top - overflow.bottom; - availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight; - } - if (noShift && !alignment) { - const xMin = max(overflow.left, 0); - const xMax = max(overflow.right, 0); - const yMin = max(overflow.top, 0); - const yMax = max(overflow.bottom, 0); - if (isXAxis) { - availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)); - } else { - availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)); - } - } - await apply({ - ...state, - availableWidth, - availableHeight - }); - const nextDimensions = await platform.getDimensions(elements.floating); - if (width !== nextDimensions.width || height !== nextDimensions.height) { - return { - reset: { - rects: true - } - }; - } - return {}; - } - }; -}; -exports.size = size; - -/***/ }), - -/***/ "../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js": -/*!**************************************************************************!*\ - !*** ../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js ***! - \**************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "arrow", ({ - enumerable: true, - get: function () { - return _core.arrow; - } -})); -Object.defineProperty(exports, "autoPlacement", ({ - enumerable: true, - get: function () { - return _core.autoPlacement; - } -})); -exports.autoUpdate = autoUpdate; -exports.computePosition = void 0; -Object.defineProperty(exports, "detectOverflow", ({ - enumerable: true, - get: function () { - return _core.detectOverflow; - } -})); -Object.defineProperty(exports, "flip", ({ - enumerable: true, - get: function () { - return _core.flip; - } -})); -exports.getOverflowAncestors = getOverflowAncestors; -Object.defineProperty(exports, "hide", ({ - enumerable: true, - get: function () { - return _core.hide; - } -})); -Object.defineProperty(exports, "inline", ({ - enumerable: true, - get: function () { - return _core.inline; - } -})); -Object.defineProperty(exports, "limitShift", ({ - enumerable: true, - get: function () { - return _core.limitShift; - } -})); -Object.defineProperty(exports, "offset", ({ - enumerable: true, - get: function () { - return _core.offset; - } -})); -exports.platform = void 0; -Object.defineProperty(exports, "shift", ({ - enumerable: true, - get: function () { - return _core.shift; - } -})); -Object.defineProperty(exports, "size", ({ - enumerable: true, - get: function () { - return _core.size; - } -})); -var _core = __webpack_require__(/*! @floating-ui/core */ "../../../node_modules/@floating-ui/core/dist/floating-ui.core.esm.js"); -function getWindow(node) { - var _node$ownerDocument; - return ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; -} -function getComputedStyle$1(element) { - return getWindow(element).getComputedStyle(element); -} -function isNode(value) { - return value instanceof getWindow(value).Node; -} -function getNodeName(node) { - return isNode(node) ? (node.nodeName || '').toLowerCase() : ''; -} -function isHTMLElement(value) { - return value instanceof getWindow(value).HTMLElement; -} -function isElement(value) { - return value instanceof getWindow(value).Element; -} -function isShadowRoot(node) { - // Browsers without `ShadowRoot` support. - if (typeof ShadowRoot === 'undefined') { - return false; - } - const OwnElement = getWindow(node).ShadowRoot; - return node instanceof OwnElement || node instanceof ShadowRoot; -} -function isOverflowElement(element) { - const { - overflow, - overflowX, - overflowY, - display - } = getComputedStyle$1(element); - return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display); -} -function isTableElement(element) { - return ['table', 'td', 'th'].includes(getNodeName(element)); -} -function isContainingBlock(element) { - const safari = isSafari(); - const css = getComputedStyle$1(element); - - // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block - return css.transform !== 'none' || css.perspective !== 'none' || !safari && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !safari && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value)); -} -function isSafari() { - if (typeof CSS === 'undefined' || !CSS.supports) return false; - return CSS.supports('-webkit-backdrop-filter', 'none'); -} -function isLastTraversableNode(node) { - return ['html', 'body', '#document'].includes(getNodeName(node)); -} -const min = Math.min; -const max = Math.max; -const round = Math.round; -function getCssDimensions(element) { - const css = getComputedStyle$1(element); - // In testing environments, the `width` and `height` properties are empty - // strings for SVG elements, returning NaN. Fallback to `0` in this case. - let width = parseFloat(css.width) || 0; - let height = parseFloat(css.height) || 0; - const hasOffset = isHTMLElement(element); - const offsetWidth = hasOffset ? element.offsetWidth : width; - const offsetHeight = hasOffset ? element.offsetHeight : height; - const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; - if (shouldFallback) { - width = offsetWidth; - height = offsetHeight; - } - return { - width, - height, - fallback: shouldFallback - }; -} -function unwrapElement(element) { - return !isElement(element) ? element.contextElement : element; -} -const FALLBACK_SCALE = { - x: 1, - y: 1 -}; -function getScale(element) { - const domElement = unwrapElement(element); - if (!isHTMLElement(domElement)) { - return FALLBACK_SCALE; - } - const rect = domElement.getBoundingClientRect(); - const { - width, - height, - fallback - } = getCssDimensions(domElement); - let x = (fallback ? round(rect.width) : rect.width) / width; - let y = (fallback ? round(rect.height) : rect.height) / height; - - // 0, NaN, or Infinity should always fallback to 1. - - if (!x || !Number.isFinite(x)) { - x = 1; - } - if (!y || !Number.isFinite(y)) { - y = 1; - } - return { - x, - y - }; -} -const noOffsets = { - x: 0, - y: 0 -}; -function getVisualOffsets(element, isFixed, floatingOffsetParent) { - var _win$visualViewport, _win$visualViewport2; - if (isFixed === void 0) { - isFixed = true; - } - if (!isSafari()) { - return noOffsets; - } - const win = element ? getWindow(element) : window; - if (!floatingOffsetParent || isFixed && floatingOffsetParent !== win) { - return noOffsets; - } - return { - x: ((_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) || 0, - y: ((_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) || 0 - }; -} -function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { - if (includeScale === void 0) { - includeScale = false; - } - if (isFixedStrategy === void 0) { - isFixedStrategy = false; - } - const clientRect = element.getBoundingClientRect(); - const domElement = unwrapElement(element); - let scale = FALLBACK_SCALE; - if (includeScale) { - if (offsetParent) { - if (isElement(offsetParent)) { - scale = getScale(offsetParent); - } - } else { - scale = getScale(element); - } - } - const visualOffsets = getVisualOffsets(domElement, isFixedStrategy, offsetParent); - let x = (clientRect.left + visualOffsets.x) / scale.x; - let y = (clientRect.top + visualOffsets.y) / scale.y; - let width = clientRect.width / scale.x; - let height = clientRect.height / scale.y; - if (domElement) { - const win = getWindow(domElement); - const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; - let currentIFrame = win.frameElement; - while (currentIFrame && offsetParent && offsetWin !== win) { - const iframeScale = getScale(currentIFrame); - const iframeRect = currentIFrame.getBoundingClientRect(); - const css = getComputedStyle(currentIFrame); - iframeRect.x += (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; - iframeRect.y += (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; - x *= iframeScale.x; - y *= iframeScale.y; - width *= iframeScale.x; - height *= iframeScale.y; - x += iframeRect.x; - y += iframeRect.y; - currentIFrame = getWindow(currentIFrame).frameElement; - } - } - return (0, _core.rectToClientRect)({ - width, - height, - x, - y - }); -} -function getDocumentElement(node) { - return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement; -} -function getNodeScroll(element) { - if (isElement(element)) { - return { - scrollLeft: element.scrollLeft, - scrollTop: element.scrollTop - }; - } - return { - scrollLeft: element.pageXOffset, - scrollTop: element.pageYOffset - }; -} -function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { - let { - rect, - offsetParent, - strategy - } = _ref; - const isOffsetParentAnElement = isHTMLElement(offsetParent); - const documentElement = getDocumentElement(offsetParent); - if (offsetParent === documentElement) { - return rect; - } - let scroll = { - scrollLeft: 0, - scrollTop: 0 - }; - let scale = { - x: 1, - y: 1 - }; - const offsets = { - x: 0, - y: 0 - }; - if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') { - if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) { - scroll = getNodeScroll(offsetParent); - } - if (isHTMLElement(offsetParent)) { - const offsetRect = getBoundingClientRect(offsetParent); - scale = getScale(offsetParent); - offsets.x = offsetRect.x + offsetParent.clientLeft; - offsets.y = offsetRect.y + offsetParent.clientTop; - } - } - return { - width: rect.width * scale.x, - height: rect.height * scale.y, - x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x, - y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y - }; -} -function getWindowScrollBarX(element) { - // If has a CSS width greater than the viewport, then this will be - // incorrect for RTL. - return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft; -} - -// Gets the entire size of the scrollable document area, even extending outside -// of the `` and `` rect bounds if horizontally scrollable. -function getDocumentRect(element) { - const html = getDocumentElement(element); - const scroll = getNodeScroll(element); - const body = element.ownerDocument.body; - const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); - const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); - let x = -scroll.scrollLeft + getWindowScrollBarX(element); - const y = -scroll.scrollTop; - if (getComputedStyle$1(body).direction === 'rtl') { - x += max(html.clientWidth, body.clientWidth) - width; - } - return { - width, - height, - x, - y - }; -} -function getParentNode(node) { - if (getNodeName(node) === 'html') { - return node; - } - const result = - // Step into the shadow DOM of the parent of a slotted node. - node.assignedSlot || - // DOM Element detected. - node.parentNode || - // ShadowRoot detected. - isShadowRoot(node) && node.host || - // Fallback. - getDocumentElement(node); - return isShadowRoot(result) ? result.host : result; -} -function getNearestOverflowAncestor(node) { - const parentNode = getParentNode(node); - if (isLastTraversableNode(parentNode)) { - // `getParentNode` will never return a `Document` due to the fallback - // check, so it's either the or element. - return parentNode.ownerDocument.body; - } - if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { - return parentNode; - } - return getNearestOverflowAncestor(parentNode); -} -function getOverflowAncestors(node, list) { - var _node$ownerDocument; - if (list === void 0) { - list = []; - } - const scrollableAncestor = getNearestOverflowAncestor(node); - const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body); - const win = getWindow(scrollableAncestor); - if (isBody) { - return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []); - } - return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor)); -} -function getViewportRect(element, strategy) { - const win = getWindow(element); - const html = getDocumentElement(element); - const visualViewport = win.visualViewport; - let width = html.clientWidth; - let height = html.clientHeight; - let x = 0; - let y = 0; - if (visualViewport) { - width = visualViewport.width; - height = visualViewport.height; - const visualViewportBased = isSafari(); - if (!visualViewportBased || visualViewportBased && strategy === 'fixed') { - x = visualViewport.offsetLeft; - y = visualViewport.offsetTop; - } - } - return { - width, - height, - x, - y - }; -} - -// Returns the inner client rect, subtracting scrollbars if present. -function getInnerBoundingClientRect(element, strategy) { - const clientRect = getBoundingClientRect(element, true, strategy === 'fixed'); - const top = clientRect.top + element.clientTop; - const left = clientRect.left + element.clientLeft; - const scale = isHTMLElement(element) ? getScale(element) : { - x: 1, - y: 1 - }; - const width = element.clientWidth * scale.x; - const height = element.clientHeight * scale.y; - const x = left * scale.x; - const y = top * scale.y; - return { - width, - height, - x, - y - }; -} -function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { - let rect; - if (clippingAncestor === 'viewport') { - rect = getViewportRect(element, strategy); - } else if (clippingAncestor === 'document') { - rect = getDocumentRect(getDocumentElement(element)); - } else if (isElement(clippingAncestor)) { - rect = getInnerBoundingClientRect(clippingAncestor, strategy); - } else { - const visualOffsets = getVisualOffsets(element); - rect = { - ...clippingAncestor, - x: clippingAncestor.x - visualOffsets.x, - y: clippingAncestor.y - visualOffsets.y - }; - } - return (0, _core.rectToClientRect)(rect); -} -function hasFixedPositionAncestor(element, stopNode) { - const parentNode = getParentNode(element); - if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) { - return false; - } - return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode); -} - -// A "clipping ancestor" is an `overflow` element with the characteristic of -// clipping (or hiding) child elements. This returns all clipping ancestors -// of the given element up the tree. -function getClippingElementAncestors(element, cache) { - const cachedResult = cache.get(element); - if (cachedResult) { - return cachedResult; - } - let result = getOverflowAncestors(element).filter(el => isElement(el) && getNodeName(el) !== 'body'); - let currentContainingBlockComputedStyle = null; - const elementIsFixed = getComputedStyle$1(element).position === 'fixed'; - let currentNode = elementIsFixed ? getParentNode(element) : element; - - // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block - while (isElement(currentNode) && !isLastTraversableNode(currentNode)) { - const computedStyle = getComputedStyle$1(currentNode); - const currentNodeIsContaining = isContainingBlock(currentNode); - if (!currentNodeIsContaining && computedStyle.position === 'fixed') { - currentContainingBlockComputedStyle = null; - } - const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode); - if (shouldDropCurrentNode) { - // Drop non-containing blocks. - result = result.filter(ancestor => ancestor !== currentNode); - } else { - // Record last containing block for next iteration. - currentContainingBlockComputedStyle = computedStyle; - } - currentNode = getParentNode(currentNode); - } - cache.set(element, result); - return result; -} - -// Gets the maximum area that the element is visible in due to any number of -// clipping ancestors. -function getClippingRect(_ref) { - let { - element, - boundary, - rootBoundary, - strategy - } = _ref; - const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary); - const clippingAncestors = [...elementClippingAncestors, rootBoundary]; - const firstClippingAncestor = clippingAncestors[0]; - const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => { - const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy); - accRect.top = max(rect.top, accRect.top); - accRect.right = min(rect.right, accRect.right); - accRect.bottom = min(rect.bottom, accRect.bottom); - accRect.left = max(rect.left, accRect.left); - return accRect; - }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy)); - return { - width: clippingRect.right - clippingRect.left, - height: clippingRect.bottom - clippingRect.top, - x: clippingRect.left, - y: clippingRect.top - }; -} -function getDimensions(element) { - return getCssDimensions(element); -} -function getTrueOffsetParent(element, polyfill) { - if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') { - return null; - } - if (polyfill) { - return polyfill(element); - } - return element.offsetParent; -} -function getContainingBlock(element) { - let currentNode = getParentNode(element); - while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) { - if (isContainingBlock(currentNode)) { - return currentNode; - } else { - currentNode = getParentNode(currentNode); - } - } - return null; -} - -// Gets the closest ancestor positioned element. Handles some edge cases, -// such as table ancestors and cross browser bugs. -function getOffsetParent(element, polyfill) { - const window = getWindow(element); - if (!isHTMLElement(element)) { - return window; - } - let offsetParent = getTrueOffsetParent(element, polyfill); - while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') { - offsetParent = getTrueOffsetParent(offsetParent, polyfill); - } - if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) { - return window; - } - return offsetParent || getContainingBlock(element) || window; -} -function getRectRelativeToOffsetParent(element, offsetParent, strategy) { - const isOffsetParentAnElement = isHTMLElement(offsetParent); - const documentElement = getDocumentElement(offsetParent); - const isFixed = strategy === 'fixed'; - const rect = getBoundingClientRect(element, true, isFixed, offsetParent); - let scroll = { - scrollLeft: 0, - scrollTop: 0 - }; - const offsets = { - x: 0, - y: 0 - }; - if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { - if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) { - scroll = getNodeScroll(offsetParent); - } - if (isHTMLElement(offsetParent)) { - const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); - offsets.x = offsetRect.x + offsetParent.clientLeft; - offsets.y = offsetRect.y + offsetParent.clientTop; - } else if (documentElement) { - offsets.x = getWindowScrollBarX(documentElement); - } - } - return { - x: rect.left + scroll.scrollLeft - offsets.x, - y: rect.top + scroll.scrollTop - offsets.y, - width: rect.width, - height: rect.height - }; -} -const platform = { - getClippingRect, - convertOffsetParentRelativeRectToViewportRelativeRect, - isElement, - getDimensions, - getOffsetParent, - getDocumentElement, - getScale, - async getElementRects(_ref) { - let { - reference, - floating, - strategy - } = _ref; - const getOffsetParentFn = this.getOffsetParent || getOffsetParent; - const getDimensionsFn = this.getDimensions; - return { - reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy), - floating: { - x: 0, - y: 0, - ...(await getDimensionsFn(floating)) - } - }; - }, - getClientRects: element => Array.from(element.getClientRects()), - isRTL: element => getComputedStyle$1(element).direction === 'rtl' -}; - -/** - * Automatically updates the position of the floating element when necessary. - * Should only be called when the floating element is mounted on the DOM or - * visible on the screen. - * @returns cleanup function that should be invoked when the floating element is - * removed from the DOM or hidden from the screen. - * @see https://floating-ui.com/docs/autoUpdate - */ -exports.platform = platform; -function autoUpdate(reference, floating, update, options) { - if (options === void 0) { - options = {}; - } - const { - ancestorScroll = true, - ancestorResize = true, - elementResize = true, - animationFrame = false - } = options; - const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : reference.contextElement ? getOverflowAncestors(reference.contextElement) : []), ...getOverflowAncestors(floating)] : []; - ancestors.forEach(ancestor => { - // ignores Window, checks for [object VisualViewport] - const isVisualViewport = !isElement(ancestor) && ancestor.toString().includes('V'); - if (ancestorScroll && (animationFrame ? isVisualViewport : true)) { - ancestor.addEventListener('scroll', update, { - passive: true - }); - } - ancestorResize && ancestor.addEventListener('resize', update); - }); - let observer = null; - if (elementResize) { - observer = new ResizeObserver(() => { - update(); - }); - isElement(reference) && !animationFrame && observer.observe(reference); - if (!isElement(reference) && reference.contextElement && !animationFrame) { - observer.observe(reference.contextElement); - } - observer.observe(floating); - } - let frameId; - let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; - if (animationFrame) { - frameLoop(); - } - function frameLoop() { - const nextRefRect = getBoundingClientRect(reference); - if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) { - update(); - } - prevRefRect = nextRefRect; - frameId = requestAnimationFrame(frameLoop); - } - update(); - return () => { - var _observer; - ancestors.forEach(ancestor => { - ancestorScroll && ancestor.removeEventListener('scroll', update); - ancestorResize && ancestor.removeEventListener('resize', update); - }); - (_observer = observer) == null ? void 0 : _observer.disconnect(); - observer = null; - if (animationFrame) { - cancelAnimationFrame(frameId); - } - }; -} - -/** - * Computes the `x` and `y` coordinates that will place the floating element - * next to a reference element when it is given a certain CSS positioning - * strategy. - */ -const computePosition = (reference, floating, options) => { - // This caches the expensive `getClippingElementAncestors` function so that - // multiple lifecycle resets re-use the same result. It only lives for a - // single call. If other functions become expensive, we can add them as well. - const cache = new Map(); - const mergedOptions = { - platform, - ...options - }; - const platformWithCache = { - ...mergedOptions.platform, - _c: cache - }; - return (0, _core.computePosition)(reference, floating, { - ...mergedOptions, - platform: platformWithCache - }); -}; -exports.computePosition = computePosition; - -/***/ }), - -/***/ "../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js": -/*!**************************************************************************************!*\ - !*** ../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js ***! - \**************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.arrow = void 0; -Object.defineProperty(exports, "autoPlacement", ({ - enumerable: true, - get: function () { - return _dom.autoPlacement; - } -})); -Object.defineProperty(exports, "autoUpdate", ({ - enumerable: true, - get: function () { - return _dom.autoUpdate; - } -})); -Object.defineProperty(exports, "computePosition", ({ - enumerable: true, - get: function () { - return _dom.computePosition; - } -})); -Object.defineProperty(exports, "detectOverflow", ({ - enumerable: true, - get: function () { - return _dom.detectOverflow; - } -})); -Object.defineProperty(exports, "flip", ({ - enumerable: true, - get: function () { - return _dom.flip; - } -})); -Object.defineProperty(exports, "getOverflowAncestors", ({ - enumerable: true, - get: function () { - return _dom.getOverflowAncestors; - } -})); -Object.defineProperty(exports, "hide", ({ - enumerable: true, - get: function () { - return _dom.hide; - } -})); -Object.defineProperty(exports, "inline", ({ - enumerable: true, - get: function () { - return _dom.inline; - } -})); -Object.defineProperty(exports, "limitShift", ({ - enumerable: true, - get: function () { - return _dom.limitShift; - } -})); -Object.defineProperty(exports, "offset", ({ - enumerable: true, - get: function () { - return _dom.offset; - } -})); -Object.defineProperty(exports, "platform", ({ - enumerable: true, - get: function () { - return _dom.platform; - } -})); -Object.defineProperty(exports, "shift", ({ - enumerable: true, - get: function () { - return _dom.shift; - } -})); -Object.defineProperty(exports, "size", ({ - enumerable: true, - get: function () { - return _dom.size; - } -})); -exports.useFloating = useFloating; -var _dom = __webpack_require__(/*! @floating-ui/dom */ "../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js"); -var React = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); -var ReactDOM = _interopRequireWildcard(__webpack_require__(/*! react-dom */ "react-dom")); -function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } -function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -/** - * Provides data to position an inner element of the floating element so that it - * appears centered to the reference element. - * This wraps the core `arrow` middleware to allow React refs as the element. - * @see https://floating-ui.com/docs/arrow - */ -const arrow = options => { - function isRef(value) { - return {}.hasOwnProperty.call(value, 'current'); - } - return { - name: 'arrow', - options, - fn(state) { - const { - element, - padding - } = typeof options === 'function' ? options(state) : options; - if (element && isRef(element)) { - if (element.current != null) { - return (0, _dom.arrow)({ - element: element.current, - padding - }).fn(state); - } - return {}; - } else if (element) { - return (0, _dom.arrow)({ - element, - padding - }).fn(state); - } - return {}; - } - }; -}; -exports.arrow = arrow; -var index = typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect; - -// Fork of `fast-deep-equal` that only does the comparisons we need and compares -// functions -function deepEqual(a, b) { - if (a === b) { - return true; - } - if (typeof a !== typeof b) { - return false; - } - if (typeof a === 'function' && a.toString() === b.toString()) { - return true; - } - let length, i, keys; - if (a && b && typeof a == 'object') { - if (Array.isArray(a)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) { - if (!deepEqual(a[i], b[i])) { - return false; - } - } - return true; - } - keys = Object.keys(a); - length = keys.length; - if (length !== Object.keys(b).length) { - return false; - } - for (i = length; i-- !== 0;) { - if (!{}.hasOwnProperty.call(b, keys[i])) { - return false; - } - } - for (i = length; i-- !== 0;) { - const key = keys[i]; - if (key === '_owner' && a.$$typeof) { - continue; - } - if (!deepEqual(a[key], b[key])) { - return false; - } - } - return true; - } - return a !== a && b !== b; -} -function getDPR(element) { - if (typeof window === 'undefined') { - return 1; - } - const win = element.ownerDocument.defaultView || window; - return win.devicePixelRatio || 1; -} -function roundByDPR(element, value) { - const dpr = getDPR(element); - return Math.round(value * dpr) / dpr; -} -function useLatestRef(value) { - const ref = React.useRef(value); - index(() => { - ref.current = value; - }); - return ref; -} - -/** - * Provides data to position a floating element. - * @see https://floating-ui.com/docs/react - */ -function useFloating(options) { - if (options === void 0) { - options = {}; - } - const { - placement = 'bottom', - strategy = 'absolute', - middleware = [], - platform, - elements: { - reference: externalReference, - floating: externalFloating - } = {}, - transform = true, - whileElementsMounted, - open - } = options; - const [data, setData] = React.useState({ - x: 0, - y: 0, - strategy, - placement, - middlewareData: {}, - isPositioned: false - }); - const [latestMiddleware, setLatestMiddleware] = React.useState(middleware); - if (!deepEqual(latestMiddleware, middleware)) { - setLatestMiddleware(middleware); - } - const [_reference, _setReference] = React.useState(null); - const [_floating, _setFloating] = React.useState(null); - const setReference = React.useCallback(node => { - if (node != referenceRef.current) { - referenceRef.current = node; - _setReference(node); - } - }, [_setReference]); - const setFloating = React.useCallback(node => { - if (node !== floatingRef.current) { - floatingRef.current = node; - _setFloating(node); - } - }, [_setFloating]); - const referenceEl = externalReference || _reference; - const floatingEl = externalFloating || _floating; - const referenceRef = React.useRef(null); - const floatingRef = React.useRef(null); - const dataRef = React.useRef(data); - const whileElementsMountedRef = useLatestRef(whileElementsMounted); - const platformRef = useLatestRef(platform); - const update = React.useCallback(() => { - if (!referenceRef.current || !floatingRef.current) { - return; - } - const config = { - placement, - strategy, - middleware: latestMiddleware - }; - if (platformRef.current) { - config.platform = platformRef.current; - } - (0, _dom.computePosition)(referenceRef.current, floatingRef.current, config).then(data => { - const fullData = { - ...data, - isPositioned: true - }; - if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) { - dataRef.current = fullData; - ReactDOM.flushSync(() => { - setData(fullData); - }); - } - }); - }, [latestMiddleware, placement, strategy, platformRef]); - index(() => { - if (open === false && dataRef.current.isPositioned) { - dataRef.current.isPositioned = false; - setData(data => ({ - ...data, - isPositioned: false - })); - } - }, [open]); - const isMountedRef = React.useRef(false); - index(() => { - isMountedRef.current = true; - return () => { - isMountedRef.current = false; - }; - }, []); - index(() => { - if (referenceEl) referenceRef.current = referenceEl; - if (floatingEl) floatingRef.current = floatingEl; - if (referenceEl && floatingEl) { - if (whileElementsMountedRef.current) { - return whileElementsMountedRef.current(referenceEl, floatingEl, update); - } else { - update(); - } - } - }, [referenceEl, floatingEl, update, whileElementsMountedRef]); - const refs = React.useMemo(() => ({ - reference: referenceRef, - floating: floatingRef, - setReference, - setFloating - }), [setReference, setFloating]); - const elements = React.useMemo(() => ({ - reference: referenceEl, - floating: floatingEl - }), [referenceEl, floatingEl]); - const floatingStyles = React.useMemo(() => { - const initialStyles = { - position: strategy, - left: 0, - top: 0 - }; - if (!elements.floating) { - return initialStyles; - } - const x = roundByDPR(elements.floating, data.x); - const y = roundByDPR(elements.floating, data.y); - if (transform) { - return { - ...initialStyles, - transform: "translate(" + x + "px, " + y + "px)", - ...(getDPR(elements.floating) >= 1.5 && { - willChange: 'transform' - }) - }; - } - return { - position: strategy, - left: x, - top: y - }; - }, [strategy, transform, elements.floating, data.x, data.y]); - return React.useMemo(() => ({ - ...data, - update, - refs, - elements, - floatingStyles - }), [data, update, refs, elements, floatingStyles]); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/animation/dist/Animation.es.js": -/*!***********************************************************************!*\ - !*** ../../../node_modules/@motionone/animation/dist/Animation.es.js ***! - \***********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Animation = void 0; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _easingEs = __webpack_require__(/*! ./utils/easing.es.js */ "../../../node_modules/@motionone/animation/dist/utils/easing.es.js"); -class Animation { - constructor(output) { - let keyframes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 1]; - let { - easing, - duration: initialDuration = _utils.defaults.duration, - delay = _utils.defaults.delay, - endDelay = _utils.defaults.endDelay, - repeat = _utils.defaults.repeat, - offset, - direction = "normal" - } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - this.startTime = null; - this.rate = 1; - this.t = 0; - this.cancelTimestamp = null; - this.easing = _utils.noopReturn; - this.duration = 0; - this.totalDuration = 0; - this.repeat = 0; - this.playState = "idle"; - this.finished = new Promise((resolve, reject) => { - this.resolve = resolve; - this.reject = reject; - }); - easing = easing || _utils.defaults.easing; - if ((0, _utils.isEasingGenerator)(easing)) { - const custom = easing.createAnimation(keyframes); - easing = custom.easing; - keyframes = custom.keyframes || keyframes; - initialDuration = custom.duration || initialDuration; - } - this.repeat = repeat; - this.easing = (0, _utils.isEasingList)(easing) ? _utils.noopReturn : (0, _easingEs.getEasingFunction)(easing); - this.updateDuration(initialDuration); - const interpolate$1 = (0, _utils.interpolate)(keyframes, offset, (0, _utils.isEasingList)(easing) ? easing.map(_easingEs.getEasingFunction) : _utils.noopReturn); - this.tick = timestamp => { - var _a; - // TODO: Temporary fix for OptionsResolver typing - delay = delay; - let t = 0; - if (this.pauseTime !== undefined) { - t = this.pauseTime; - } else { - t = (timestamp - this.startTime) * this.rate; - } - this.t = t; - // Convert to seconds - t /= 1000; - // Rebase on delay - t = Math.max(t - delay, 0); - /** - * If this animation has finished, set the current time - * to the total duration. - */ - if (this.playState === "finished" && this.pauseTime === undefined) { - t = this.totalDuration; - } - /** - * Get the current progress (0-1) of the animation. If t is > - * than duration we'll get values like 2.5 (midway through the - * third iteration) - */ - const progress = t / this.duration; - // TODO progress += iterationStart - /** - * Get the current iteration (0 indexed). For instance the floor of - * 2.5 is 2. - */ - let currentIteration = Math.floor(progress); - /** - * Get the current progress of the iteration by taking the remainder - * so 2.5 is 0.5 through iteration 2 - */ - let iterationProgress = progress % 1.0; - if (!iterationProgress && progress >= 1) { - iterationProgress = 1; - } - /** - * If iteration progress is 1 we count that as the end - * of the previous iteration. - */ - iterationProgress === 1 && currentIteration--; - /** - * Reverse progress if we're not running in "normal" direction - */ - const iterationIsOdd = currentIteration % 2; - if (direction === "reverse" || direction === "alternate" && iterationIsOdd || direction === "alternate-reverse" && !iterationIsOdd) { - iterationProgress = 1 - iterationProgress; - } - const p = t >= this.totalDuration ? 1 : Math.min(iterationProgress, 1); - const latest = interpolate$1(this.easing(p)); - output(latest); - const isAnimationFinished = this.pauseTime === undefined && (this.playState === "finished" || t >= this.totalDuration + endDelay); - if (isAnimationFinished) { - this.playState = "finished"; - (_a = this.resolve) === null || _a === void 0 ? void 0 : _a.call(this, latest); - } else if (this.playState !== "idle") { - this.frameRequestId = requestAnimationFrame(this.tick); - } - }; - this.play(); - } - play() { - const now = performance.now(); - this.playState = "running"; - if (this.pauseTime !== undefined) { - this.startTime = now - this.pauseTime; - } else if (!this.startTime) { - this.startTime = now; - } - this.cancelTimestamp = this.startTime; - this.pauseTime = undefined; - this.frameRequestId = requestAnimationFrame(this.tick); - } - pause() { - this.playState = "paused"; - this.pauseTime = this.t; - } - finish() { - this.playState = "finished"; - this.tick(0); - } - stop() { - var _a; - this.playState = "idle"; - if (this.frameRequestId !== undefined) { - cancelAnimationFrame(this.frameRequestId); - } - (_a = this.reject) === null || _a === void 0 ? void 0 : _a.call(this, false); - } - cancel() { - this.stop(); - this.tick(this.cancelTimestamp); - } - reverse() { - this.rate *= -1; - } - commitStyles() {} - updateDuration(duration) { - this.duration = duration; - this.totalDuration = duration * (this.repeat + 1); - } - get currentTime() { - return this.t; - } - set currentTime(t) { - if (this.pauseTime !== undefined || this.rate === 0) { - this.pauseTime = t; - } else { - this.startTime = performance.now() - t / this.rate; - } - } - get playbackRate() { - return this.rate; - } - set playbackRate(rate) { - this.rate = rate; - } -} -exports.Animation = Animation; - -/***/ }), - -/***/ "../../../node_modules/@motionone/animation/dist/index.es.js": -/*!*******************************************************************!*\ - !*** ../../../node_modules/@motionone/animation/dist/index.es.js ***! - \*******************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "Animation", ({ - enumerable: true, - get: function () { - return _AnimationEs.Animation; - } -})); -Object.defineProperty(exports, "getEasingFunction", ({ - enumerable: true, - get: function () { - return _easingEs.getEasingFunction; - } -})); -var _AnimationEs = __webpack_require__(/*! ./Animation.es.js */ "../../../node_modules/@motionone/animation/dist/Animation.es.js"); -var _easingEs = __webpack_require__(/*! ./utils/easing.es.js */ "../../../node_modules/@motionone/animation/dist/utils/easing.es.js"); - -/***/ }), - -/***/ "../../../node_modules/@motionone/animation/dist/utils/easing.es.js": -/*!**************************************************************************!*\ - !*** ../../../node_modules/@motionone/animation/dist/utils/easing.es.js ***! - \**************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getEasingFunction = getEasingFunction; -var _easing = __webpack_require__(/*! @motionone/easing */ "../../../node_modules/@motionone/easing/dist/index.es.js"); -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -const namedEasings = { - ease: (0, _easing.cubicBezier)(0.25, 0.1, 0.25, 1.0), - "ease-in": (0, _easing.cubicBezier)(0.42, 0.0, 1.0, 1.0), - "ease-in-out": (0, _easing.cubicBezier)(0.42, 0.0, 0.58, 1.0), - "ease-out": (0, _easing.cubicBezier)(0.0, 0.0, 0.58, 1.0) -}; -const functionArgsRegex = /\((.*?)\)/; -function getEasingFunction(definition) { - // If already an easing function, return - if ((0, _utils.isFunction)(definition)) return definition; - // If an easing curve definition, return bezier function - if ((0, _utils.isCubicBezier)(definition)) return (0, _easing.cubicBezier)(...definition); - // If we have a predefined easing function, return - if (namedEasings[definition]) return namedEasings[definition]; - // If this is a steps function, attempt to create easing curve - if (definition.startsWith("steps")) { - const args = functionArgsRegex.exec(definition); - if (args) { - const argsArray = args[1].split(","); - return (0, _easing.steps)(parseFloat(argsArray[0]), argsArray[1].trim()); - } - } - return _utils.noopReturn; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/animate-style.es.js": -/*!*****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/animate-style.es.js ***! - \*****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.animateStyle = animateStyle; -var _dataEs = __webpack_require__(/*! ./data.es.js */ "../../../node_modules/@motionone/dom/dist/animate/data.es.js"); -var _cssVarEs = __webpack_require__(/*! ./utils/css-var.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/css-var.es.js"); -var _animation = __webpack_require__(/*! @motionone/animation */ "../../../node_modules/@motionone/animation/dist/index.es.js"); -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _transformsEs = __webpack_require__(/*! ./utils/transforms.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/transforms.es.js"); -var _easingEs = __webpack_require__(/*! ./utils/easing.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/easing.es.js"); -var _featureDetectionEs = __webpack_require__(/*! ./utils/feature-detection.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/feature-detection.es.js"); -var _keyframesEs = __webpack_require__(/*! ./utils/keyframes.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/keyframes.es.js"); -var _styleEs = __webpack_require__(/*! ./style.es.js */ "../../../node_modules/@motionone/dom/dist/animate/style.es.js"); -var _getStyleNameEs = __webpack_require__(/*! ./utils/get-style-name.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js"); -var _stopAnimationEs = __webpack_require__(/*! ./utils/stop-animation.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/stop-animation.es.js"); -function getDevToolsRecord() { - return window.__MOTION_DEV_TOOLS_RECORD; -} -function animateStyle(element, key, keyframesDefinition) { - let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - const record = getDevToolsRecord(); - const isRecording = options.record !== false && record; - let animation; - let { - duration = _utils.defaults.duration, - delay = _utils.defaults.delay, - endDelay = _utils.defaults.endDelay, - repeat = _utils.defaults.repeat, - easing = _utils.defaults.easing, - direction, - offset, - allowWebkitAcceleration = false - } = options; - const data = (0, _dataEs.getAnimationData)(element); - let canAnimateNatively = _featureDetectionEs.supports.waapi(); - const valueIsTransform = (0, _transformsEs.isTransform)(key); - /** - * If this is an individual transform, we need to map its - * key to a CSS variable and update the element's transform style - */ - valueIsTransform && (0, _transformsEs.addTransformToElement)(element, key); - const name = (0, _getStyleNameEs.getStyleName)(key); - const motionValue = (0, _dataEs.getMotionValue)(data.values, name); - /** - * Get definition of value, this will be used to convert numerical - * keyframes into the default value type. - */ - const definition = _transformsEs.transformDefinitions.get(name); - /** - * Stop the current animation, if any. Because this will trigger - * commitStyles (DOM writes) and we might later trigger DOM reads, - * this is fired now and we return a factory function to create - * the actual animation that can get called in batch, - */ - (0, _stopAnimationEs.stopAnimation)(motionValue.animation, !((0, _utils.isEasingGenerator)(easing) && motionValue.generator) && options.record !== false); - /** - * Batchable factory function containing all DOM reads. - */ - return () => { - const readInitialValue = () => { - var _a, _b; - return (_b = (_a = _styleEs.style.get(element, name)) !== null && _a !== void 0 ? _a : definition === null || definition === void 0 ? void 0 : definition.initialValue) !== null && _b !== void 0 ? _b : 0; - }; - /** - * Replace null values with the previous keyframe value, or read - * it from the DOM if it's the first keyframe. - */ - let keyframes = (0, _keyframesEs.hydrateKeyframes)((0, _keyframesEs.keyframesList)(keyframesDefinition), readInitialValue); - if ((0, _utils.isEasingGenerator)(easing)) { - const custom = easing.createAnimation(keyframes, readInitialValue, valueIsTransform, name, motionValue); - easing = custom.easing; - if (custom.keyframes !== undefined) keyframes = custom.keyframes; - if (custom.duration !== undefined) duration = custom.duration; - } - /** - * If this is a CSS variable we need to register it with the browser - * before it can be animated natively. We also set it with setProperty - * rather than directly onto the element.style object. - */ - if ((0, _cssVarEs.isCssVar)(name)) { - if (_featureDetectionEs.supports.cssRegisterProperty()) { - (0, _cssVarEs.registerCssVariable)(name); - } else { - canAnimateNatively = false; - } - } - /** - * If we can animate this value with WAAPI, do so. Currently this only - * feature detects CSS.registerProperty but could check WAAPI too. - */ - if (canAnimateNatively) { - /** - * Convert numbers to default value types. Currently this only supports - * transforms but it could also support other value types. - */ - if (definition) { - keyframes = keyframes.map(value => (0, _utils.isNumber)(value) ? definition.toDefaultUnit(value) : value); - } - /** - * If this browser doesn't support partial/implicit keyframes we need to - * explicitly provide one. - */ - if (keyframes.length === 1 && (!_featureDetectionEs.supports.partialKeyframes() || isRecording)) { - keyframes.unshift(readInitialValue()); - } - const animationOptions = { - delay: _utils.time.ms(delay), - duration: _utils.time.ms(duration), - endDelay: _utils.time.ms(endDelay), - easing: !(0, _utils.isEasingList)(easing) ? (0, _easingEs.convertEasing)(easing) : undefined, - direction, - iterations: repeat + 1, - fill: "both" - }; - animation = element.animate({ - [name]: keyframes, - offset, - easing: (0, _utils.isEasingList)(easing) ? easing.map(_easingEs.convertEasing) : undefined - }, animationOptions); - /** - * Polyfill finished Promise in browsers that don't support it - */ - if (!animation.finished) { - animation.finished = new Promise((resolve, reject) => { - animation.onfinish = resolve; - animation.oncancel = reject; - }); - } - const target = keyframes[keyframes.length - 1]; - animation.finished.then(() => { - // Apply styles to target - _styleEs.style.set(element, name, target); - // Ensure fill modes don't persist - animation.cancel(); - }).catch(_utils.noop); - /** - * This forces Webkit to run animations on the main thread by exploiting - * this condition: - * https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp?rev=281238#L1099 - * - * This fixes Webkit's timing bugs, like accelerated animations falling - * out of sync with main thread animations and massive delays in starting - * accelerated animations in WKWebView. - */ - if (!allowWebkitAcceleration) animation.playbackRate = 1.000001; - /** - * If we can't animate the value natively then we can fallback to the numbers-only - * polyfill for transforms. - */ - } else if (valueIsTransform) { - /** - * If any keyframe is a string (because we measured it from the DOM), we need to convert - * it into a number before passing to the Animation polyfill. - */ - keyframes = keyframes.map(value => typeof value === "string" ? parseFloat(value) : value); - /** - * If we only have a single keyframe, we need to create an initial keyframe by reading - * the current value from the DOM. - */ - if (keyframes.length === 1) { - keyframes.unshift(parseFloat(readInitialValue())); - } - const render = latest => { - if (definition) latest = definition.toDefaultUnit(latest); - _styleEs.style.set(element, name, latest); - }; - animation = new _animation.Animation(render, keyframes, Object.assign(Object.assign({}, options), { - duration, - easing - })); - } else { - const target = keyframes[keyframes.length - 1]; - _styleEs.style.set(element, name, definition && (0, _utils.isNumber)(target) ? definition.toDefaultUnit(target) : target); - } - if (isRecording) { - record(element, key, keyframes, { - duration, - delay: delay, - easing, - repeat, - offset - }, "motion-one"); - } - motionValue.setAnimation(animation); - return animation; - }; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/data.es.js": -/*!********************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/data.es.js ***! - \********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getAnimationData = getAnimationData; -exports.getMotionValue = getMotionValue; -var _types = __webpack_require__(/*! @motionone/types */ "../../../node_modules/@motionone/types/dist/index.es.js"); -const data = new WeakMap(); -function getAnimationData(element) { - if (!data.has(element)) { - data.set(element, { - transforms: [], - values: new Map() - }); - } - return data.get(element); -} -function getMotionValue(motionValues, name) { - if (!motionValues.has(name)) { - motionValues.set(name, new _types.MotionValue()); - } - return motionValues.get(name); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/index.es.js": -/*!*********************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/index.es.js ***! - \*********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.animate = animate; -var _animateStyleEs = __webpack_require__(/*! ./animate-style.es.js */ "../../../node_modules/@motionone/dom/dist/animate/animate-style.es.js"); -var _optionsEs = __webpack_require__(/*! ./utils/options.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/options.es.js"); -var _resolveElementsEs = __webpack_require__(/*! ../utils/resolve-elements.es.js */ "../../../node_modules/@motionone/dom/dist/utils/resolve-elements.es.js"); -var _controlsEs = __webpack_require__(/*! ./utils/controls.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/controls.es.js"); -var _staggerEs = __webpack_require__(/*! ../utils/stagger.es.js */ "../../../node_modules/@motionone/dom/dist/utils/stagger.es.js"); -function animate(elements, keyframes) { - let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - elements = (0, _resolveElementsEs.resolveElements)(elements); - const numElements = elements.length; - /** - * Create and start new animations - */ - const animationFactories = []; - for (let i = 0; i < numElements; i++) { - const element = elements[i]; - for (const key in keyframes) { - const valueOptions = (0, _optionsEs.getOptions)(options, key); - valueOptions.delay = (0, _staggerEs.resolveOption)(valueOptions.delay, i, numElements); - const animation = (0, _animateStyleEs.animateStyle)(element, key, keyframes[key], valueOptions); - animationFactories.push(animation); - } - } - return (0, _controlsEs.withControls)(animationFactories, options, - /** - * TODO: - * If easing is set to spring or glide, duration will be dynamically - * generated. Ideally we would dynamically generate this from - * animation.effect.getComputedTiming().duration but this isn't - * supported in iOS13 or our number polyfill. Perhaps it's possible - * to Proxy animations returned from animateStyle that has duration - * as a getter. - */ - options.duration); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/style.es.js": -/*!*********************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/style.es.js ***! - \*********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.style = void 0; -var _cssVarEs = __webpack_require__(/*! ./utils/css-var.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/css-var.es.js"); -var _getStyleNameEs = __webpack_require__(/*! ./utils/get-style-name.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js"); -var _transformsEs = __webpack_require__(/*! ./utils/transforms.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/transforms.es.js"); -const style = { - get: (element, name) => { - name = (0, _getStyleNameEs.getStyleName)(name); - let value = (0, _cssVarEs.isCssVar)(name) ? element.style.getPropertyValue(name) : getComputedStyle(element)[name]; - if (!value && value !== 0) { - const definition = _transformsEs.transformDefinitions.get(name); - if (definition) value = definition.initialValue; - } - return value; - }, - set: (element, name, value) => { - name = (0, _getStyleNameEs.getStyleName)(name); - if ((0, _cssVarEs.isCssVar)(name)) { - element.style.setProperty(name, value); - } else { - element.style[name] = value; - } - } -}; -exports.style = style; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/controls.es.js": -/*!******************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/controls.es.js ***! - \******************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.withControls = exports.controls = void 0; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _stopAnimationEs = __webpack_require__(/*! ./stop-animation.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/stop-animation.es.js"); -const createAnimation = factory => factory(); -const withControls = function (animationFactory, options) { - let duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _utils.defaults.duration; - return new Proxy({ - animations: animationFactory.map(createAnimation).filter(Boolean), - duration, - options - }, controls); -}; -/** - * TODO: - * Currently this returns the first animation, ideally it would return - * the first active animation. - */ -exports.withControls = withControls; -const getActiveAnimation = state => state.animations[0]; -const controls = { - get: (target, key) => { - const activeAnimation = getActiveAnimation(target); - switch (key) { - case "duration": - return target.duration; - case "currentTime": - return _utils.time.s((activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) || 0); - case "playbackRate": - case "playState": - return activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]; - case "finished": - if (!target.finished) { - target.finished = Promise.all(target.animations.map(selectFinished)).catch(_utils.noop); - } - return target.finished; - case "stop": - return () => { - target.animations.forEach(animation => (0, _stopAnimationEs.stopAnimation)(animation)); - }; - case "forEachNative": - /** - * This is for internal use only, fire a callback for each - * underlying animation. - */ - return callback => { - target.animations.forEach(animation => callback(animation, target)); - }; - default: - return typeof (activeAnimation === null || activeAnimation === void 0 ? void 0 : activeAnimation[key]) === "undefined" ? undefined : () => target.animations.forEach(animation => animation[key]()); - } - }, - set: (target, key, value) => { - switch (key) { - case "currentTime": - value = _utils.time.ms(value); - case "currentTime": - case "playbackRate": - for (let i = 0; i < target.animations.length; i++) { - target.animations[i][key] = value; - } - return true; - } - return false; - } -}; -exports.controls = controls; -const selectFinished = animation => animation.finished; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/css-var.es.js": -/*!*****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/css-var.es.js ***! - \*****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isCssVar = void 0; -exports.registerCssVariable = registerCssVariable; -exports.registeredProperties = void 0; -var _transformsEs = __webpack_require__(/*! ./transforms.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/transforms.es.js"); -const isCssVar = name => name.startsWith("--"); -exports.isCssVar = isCssVar; -const registeredProperties = new Set(); -exports.registeredProperties = registeredProperties; -function registerCssVariable(name) { - if (registeredProperties.has(name)) return; - registeredProperties.add(name); - try { - const { - syntax, - initialValue - } = _transformsEs.transformDefinitions.has(name) ? _transformsEs.transformDefinitions.get(name) : {}; - CSS.registerProperty({ - name, - inherits: false, - syntax, - initialValue - }); - } catch (e) {} -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/easing.es.js": -/*!****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/easing.es.js ***! - \****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.cubicBezierAsString = exports.convertEasing = void 0; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -const convertEasing = easing => (0, _utils.isCubicBezier)(easing) ? cubicBezierAsString(easing) : easing; -exports.convertEasing = convertEasing; -const cubicBezierAsString = _ref => { - let [a, b, c, d] = _ref; - return `cubic-bezier(${a}, ${b}, ${c}, ${d})`; -}; -exports.cubicBezierAsString = cubicBezierAsString; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/feature-detection.es.js": -/*!***************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/feature-detection.es.js ***! - \***************************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.supports = void 0; -const testAnimation = keyframes => document.createElement("div").animate(keyframes, { - duration: 0.001 -}); -const featureTests = { - cssRegisterProperty: () => typeof CSS !== "undefined" && Object.hasOwnProperty.call(CSS, "registerProperty"), - waapi: () => Object.hasOwnProperty.call(Element.prototype, "animate"), - partialKeyframes: () => { - try { - testAnimation({ - opacity: [1] - }); - } catch (e) { - return false; - } - return true; - }, - finished: () => Boolean(testAnimation({ - opacity: [0, 1] - }).finished) -}; -const results = {}; -const supports = {}; -exports.supports = supports; -for (const key in featureTests) { - supports[key] = () => { - if (results[key] === undefined) results[key] = featureTests[key](); - return results[key]; - }; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js": -/*!************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js ***! - \************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getStyleName = getStyleName; -var _transformsEs = __webpack_require__(/*! ./transforms.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/transforms.es.js"); -function getStyleName(key) { - if (_transformsEs.transformAlias[key]) key = _transformsEs.transformAlias[key]; - return (0, _transformsEs.isTransform)(key) ? (0, _transformsEs.asTransformCssVar)(key) : key; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/keyframes.es.js": -/*!*******************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/keyframes.es.js ***! - \*******************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.hydrateKeyframes = hydrateKeyframes; -exports.keyframesList = void 0; -function hydrateKeyframes(keyframes, readInitialValue) { - for (let i = 0; i < keyframes.length; i++) { - if (keyframes[i] === null) { - keyframes[i] = i ? keyframes[i - 1] : readInitialValue(); - } - } - return keyframes; -} -const keyframesList = keyframes => Array.isArray(keyframes) ? keyframes : [keyframes]; -exports.keyframesList = keyframesList; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/options.es.js": -/*!*****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/options.es.js ***! - \*****************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getOptions = void 0; -const getOptions = (options, key) => -/** - * TODO: Make test for this - * Always return a new object otherwise delay is overwritten by results of stagger - * and this results in no stagger - */ -options[key] ? Object.assign(Object.assign({}, options), options[key]) : Object.assign({}, options); -exports.getOptions = getOptions; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/stop-animation.es.js": -/*!************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/stop-animation.es.js ***! - \************************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.stopAnimation = stopAnimation; -function stopAnimation(animation) { - let needsCommit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - if (!animation || animation.playState === "finished") return; - // Suppress error thrown by WAAPI - try { - if (animation.stop) { - animation.stop(); - } else { - needsCommit && animation.commitStyles(); - animation.cancel(); - } - } catch (e) {} -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/style-object.es.js": -/*!**********************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/style-object.es.js ***! - \**********************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createStyles = createStyles; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _transformsEs = __webpack_require__(/*! ./transforms.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/transforms.es.js"); -function createStyles(keyframes) { - const initialKeyframes = {}; - const transformKeys = []; - for (let key in keyframes) { - const value = keyframes[key]; - if ((0, _transformsEs.isTransform)(key)) { - if (_transformsEs.transformAlias[key]) key = _transformsEs.transformAlias[key]; - transformKeys.push(key); - key = (0, _transformsEs.asTransformCssVar)(key); - } - let initialKeyframe = Array.isArray(value) ? value[0] : value; - /** - * If this is a number and we have a default value type, convert the number - * to this type. - */ - const definition = _transformsEs.transformDefinitions.get(key); - if (definition) { - initialKeyframe = (0, _utils.isNumber)(value) ? definition.toDefaultUnit(value) : value; - } - initialKeyframes[key] = initialKeyframe; - } - if (transformKeys.length) { - initialKeyframes.transform = (0, _transformsEs.buildTransformTemplate)(transformKeys); - } - return initialKeyframes; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/style-string.es.js": -/*!**********************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/style-string.es.js ***! - \**********************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createStyleString = createStyleString; -var _styleObjectEs = __webpack_require__(/*! ./style-object.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/style-object.es.js"); -const camelLetterToPipeLetter = letter => `-${letter.toLowerCase()}`; -const camelToPipeCase = str => str.replace(/[A-Z]/g, camelLetterToPipeLetter); -function createStyleString() { - let target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - const styles = (0, _styleObjectEs.createStyles)(target); - let style = ""; - for (const key in styles) { - style += key.startsWith("--") ? key : camelToPipeCase(key); - style += `: ${styles[key]}; `; - } - return style; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/animate/utils/transforms.es.js": -/*!********************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/animate/utils/transforms.es.js ***! - \********************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.transformDefinitions = exports.transformAlias = exports.isTransform = exports.compareTransformOrder = exports.buildTransformTemplate = exports.axes = exports.asTransformCssVar = exports.addTransformToElement = void 0; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _dataEs = __webpack_require__(/*! ../data.es.js */ "../../../node_modules/@motionone/dom/dist/animate/data.es.js"); -/** - * A list of all transformable axes. We'll use this list to generated a version - * of each axes for each transform. - */ -const axes = ["", "X", "Y", "Z"]; -/** - * An ordered array of each transformable value. By default, transform values - * will be sorted to this order. - */ -exports.axes = axes; -const order = ["translate", "scale", "rotate", "skew"]; -const transformAlias = { - x: "translateX", - y: "translateY", - z: "translateZ" -}; -exports.transformAlias = transformAlias; -const rotation = { - syntax: "", - initialValue: "0deg", - toDefaultUnit: v => v + "deg" -}; -const baseTransformProperties = { - translate: { - syntax: "", - initialValue: "0px", - toDefaultUnit: v => v + "px" - }, - rotate: rotation, - scale: { - syntax: "", - initialValue: 1, - toDefaultUnit: _utils.noopReturn - }, - skew: rotation -}; -const transformDefinitions = new Map(); -exports.transformDefinitions = transformDefinitions; -const asTransformCssVar = name => `--motion-${name}`; -/** - * Generate a list of every possible transform key - */ -exports.asTransformCssVar = asTransformCssVar; -const transforms = ["x", "y", "z"]; -order.forEach(name => { - axes.forEach(axis => { - transforms.push(name + axis); - transformDefinitions.set(asTransformCssVar(name + axis), baseTransformProperties[name]); - }); -}); -/** - * A function to use with Array.sort to sort transform keys by their default order. - */ -const compareTransformOrder = (a, b) => transforms.indexOf(a) - transforms.indexOf(b); -/** - * Provide a quick way to check if a string is the name of a transform - */ -exports.compareTransformOrder = compareTransformOrder; -const transformLookup = new Set(transforms); -const isTransform = name => transformLookup.has(name); -exports.isTransform = isTransform; -const addTransformToElement = (element, name) => { - // Map x to translateX etc - if (transformAlias[name]) name = transformAlias[name]; - const { - transforms - } = (0, _dataEs.getAnimationData)(element); - (0, _utils.addUniqueItem)(transforms, name); - /** - * TODO: An optimisation here could be to cache the transform in element data - * and only update if this has changed. - */ - element.style.transform = buildTransformTemplate(transforms); -}; -exports.addTransformToElement = addTransformToElement; -const buildTransformTemplate = transforms => transforms.sort(compareTransformOrder).reduce(transformListToString, "").trim(); -exports.buildTransformTemplate = buildTransformTemplate; -const transformListToString = (template, name) => `${template} ${name}(var(${asTransformCssVar(name)}))`; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/easing/create-generator-easing.es.js": -/*!**************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/easing/create-generator-easing.es.js ***! - \**************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createGeneratorEasing = createGeneratorEasing; -var _generators = __webpack_require__(/*! @motionone/generators */ "../../../node_modules/@motionone/generators/dist/index.es.js"); -function createGeneratorEasing(createGenerator) { - const keyframesCache = new WeakMap(); - return function () { - let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - const generatorCache = new Map(); - const getGenerator = function () { - let from = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - let to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100; - let velocity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - let isScale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - const key = `${from}-${to}-${velocity}-${isScale}`; - if (!generatorCache.has(key)) { - generatorCache.set(key, createGenerator(Object.assign({ - from, - to, - velocity, - restSpeed: isScale ? 0.05 : 2, - restDistance: isScale ? 0.01 : 0.5 - }, options))); - } - return generatorCache.get(key); - }; - const getKeyframes = generator => { - if (!keyframesCache.has(generator)) { - keyframesCache.set(generator, (0, _generators.pregenerateKeyframes)(generator)); - } - return keyframesCache.get(generator); - }; - return { - createAnimation: (keyframes, getOrigin, canUseGenerator, name, motionValue) => { - var _a, _b; - let settings; - const numKeyframes = keyframes.length; - let shouldUseGenerator = canUseGenerator && numKeyframes <= 2 && keyframes.every(isNumberOrNull); - if (shouldUseGenerator) { - const target = keyframes[numKeyframes - 1]; - const unresolvedOrigin = numKeyframes === 1 ? null : keyframes[0]; - let velocity = 0; - let origin = 0; - const prevGenerator = motionValue === null || motionValue === void 0 ? void 0 : motionValue.generator; - if (prevGenerator) { - /** - * If we have a generator for this value we can use it to resolve - * the animations's current value and velocity. - */ - const { - animation, - generatorStartTime - } = motionValue; - const startTime = (animation === null || animation === void 0 ? void 0 : animation.startTime) || generatorStartTime || 0; - const currentTime = (animation === null || animation === void 0 ? void 0 : animation.currentTime) || performance.now() - startTime; - const prevGeneratorCurrent = prevGenerator(currentTime).current; - origin = (_a = unresolvedOrigin) !== null && _a !== void 0 ? _a : prevGeneratorCurrent; - if (numKeyframes === 1 || numKeyframes === 2 && keyframes[0] === null) { - velocity = (0, _generators.calcGeneratorVelocity)(t => prevGenerator(t).current, currentTime, prevGeneratorCurrent); - } - } else { - origin = (_b = unresolvedOrigin) !== null && _b !== void 0 ? _b : parseFloat(getOrigin()); - } - const generator = getGenerator(origin, target, velocity, name === null || name === void 0 ? void 0 : name.includes("scale")); - const keyframesMetadata = getKeyframes(generator); - settings = Object.assign(Object.assign({}, keyframesMetadata), { - easing: "linear" - }); - // TODO Add test for this - if (motionValue) { - motionValue.generator = generator; - motionValue.generatorStartTime = performance.now(); - } - } else { - const keyframesMetadata = getKeyframes(getGenerator(0, 100)); - settings = { - easing: "ease", - duration: keyframesMetadata.overshootDuration - }; - } - return settings; - } - }; - }; -} -const isNumberOrNull = value => typeof value !== "string"; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/easing/glide/index.es.js": -/*!**************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/easing/glide/index.es.js ***! - \**************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.glide = void 0; -var _generators = __webpack_require__(/*! @motionone/generators */ "../../../node_modules/@motionone/generators/dist/index.es.js"); -var _createGeneratorEasingEs = __webpack_require__(/*! ../create-generator-easing.es.js */ "../../../node_modules/@motionone/dom/dist/easing/create-generator-easing.es.js"); -const glide = (0, _createGeneratorEasingEs.createGeneratorEasing)(_generators.glide); -exports.glide = glide; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/easing/spring/index.es.js": -/*!***************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/easing/spring/index.es.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.spring = void 0; -var _generators = __webpack_require__(/*! @motionone/generators */ "../../../node_modules/@motionone/generators/dist/index.es.js"); -var _createGeneratorEasingEs = __webpack_require__(/*! ../create-generator-easing.es.js */ "../../../node_modules/@motionone/dom/dist/easing/create-generator-easing.es.js"); -const spring = (0, _createGeneratorEasingEs.createGeneratorEasing)(_generators.spring); -exports.spring = spring; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/in-view.es.js": -/*!************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/in-view.es.js ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.inView = inView; -var _resolveElementsEs = __webpack_require__(/*! ../utils/resolve-elements.es.js */ "../../../node_modules/@motionone/dom/dist/utils/resolve-elements.es.js"); -const thresholds = { - any: 0, - all: 1 -}; -function inView(elementOrSelector, onStart) { - let { - root, - margin: rootMargin, - amount = "any" - } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - /** - * If this browser doesn't support IntersectionObserver, return a dummy stop function. - * Default triggering of onStart is tricky - it could be used for starting/stopping - * videos, lazy loading content etc. We could provide an option to enable a fallback, or - * provide a fallback callback option. - */ - if (typeof IntersectionObserver === "undefined") { - return () => {}; - } - const elements = (0, _resolveElementsEs.resolveElements)(elementOrSelector); - const activeIntersections = new WeakMap(); - const onIntersectionChange = entries => { - entries.forEach(entry => { - const onEnd = activeIntersections.get(entry.target); - /** - * If there's no change to the intersection, we don't need to - * do anything here. - */ - if (entry.isIntersecting === Boolean(onEnd)) return; - if (entry.isIntersecting) { - const newOnEnd = onStart(entry); - if (typeof newOnEnd === "function") { - activeIntersections.set(entry.target, newOnEnd); - } else { - observer.unobserve(entry.target); - } - } else if (onEnd) { - onEnd(entry); - activeIntersections.delete(entry.target); - } - }); - }; - const observer = new IntersectionObserver(onIntersectionChange, { - root, - rootMargin, - threshold: typeof amount === "number" ? amount : thresholds[amount] - }); - elements.forEach(element => observer.observe(element)); - return () => observer.disconnect(); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/resize/handle-element.es.js": -/*!**************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/resize/handle-element.es.js ***! - \**************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.resizeElement = resizeElement; -var _resolveElementsEs = __webpack_require__(/*! ../../utils/resolve-elements.es.js */ "../../../node_modules/@motionone/dom/dist/utils/resolve-elements.es.js"); -const resizeHandlers = new WeakMap(); -let observer; -function getElementSize(target, borderBoxSize) { - if (borderBoxSize) { - const { - inlineSize, - blockSize - } = borderBoxSize[0]; - return { - width: inlineSize, - height: blockSize - }; - } else if (target instanceof SVGElement && "getBBox" in target) { - return target.getBBox(); - } else { - return { - width: target.offsetWidth, - height: target.offsetHeight - }; - } -} -function notifyTarget(_ref) { - let { - target, - contentRect, - borderBoxSize - } = _ref; - var _a; - (_a = resizeHandlers.get(target)) === null || _a === void 0 ? void 0 : _a.forEach(handler => { - handler({ - target, - contentSize: contentRect, - get size() { - return getElementSize(target, borderBoxSize); - } - }); - }); -} -function notifyAll(entries) { - entries.forEach(notifyTarget); -} -function createResizeObserver() { - if (typeof ResizeObserver === "undefined") return; - observer = new ResizeObserver(notifyAll); -} -function resizeElement(target, handler) { - if (!observer) createResizeObserver(); - const elements = (0, _resolveElementsEs.resolveElements)(target); - elements.forEach(element => { - let elementHandlers = resizeHandlers.get(element); - if (!elementHandlers) { - elementHandlers = new Set(); - resizeHandlers.set(element, elementHandlers); - } - elementHandlers.add(handler); - observer === null || observer === void 0 ? void 0 : observer.observe(element); - }); - return () => { - elements.forEach(element => { - const elementHandlers = resizeHandlers.get(element); - elementHandlers === null || elementHandlers === void 0 ? void 0 : elementHandlers.delete(handler); - if (!(elementHandlers === null || elementHandlers === void 0 ? void 0 : elementHandlers.size)) { - observer === null || observer === void 0 ? void 0 : observer.unobserve(element); - } - }); - }; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/resize/handle-window.es.js": -/*!*************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/resize/handle-window.es.js ***! - \*************************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.resizeWindow = resizeWindow; -const windowCallbacks = new Set(); -let windowResizeHandler; -function createWindowResizeHandler() { - windowResizeHandler = () => { - const size = { - width: window.innerWidth, - height: window.innerHeight - }; - const info = { - target: window, - size, - contentSize: size - }; - windowCallbacks.forEach(callback => callback(info)); - }; - window.addEventListener("resize", windowResizeHandler); -} -function resizeWindow(callback) { - windowCallbacks.add(callback); - if (!windowResizeHandler) createWindowResizeHandler(); - return () => { - windowCallbacks.delete(callback); - if (!windowCallbacks.size && windowResizeHandler) { - windowResizeHandler = undefined; - } - }; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/resize/index.es.js": -/*!*****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/resize/index.es.js ***! - \*****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.resize = resize; -var _handleElementEs = __webpack_require__(/*! ./handle-element.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/resize/handle-element.es.js"); -var _handleWindowEs = __webpack_require__(/*! ./handle-window.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/resize/handle-window.es.js"); -function resize(a, b) { - return typeof a === "function" ? (0, _handleWindowEs.resizeWindow)(a) : (0, _handleElementEs.resizeElement)(a, b); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/scroll/index.es.js": -/*!*****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/scroll/index.es.js ***! - \*****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.scroll = scroll; -var _tslib = __webpack_require__(/*! tslib */ "../../../node_modules/tslib/tslib.es6.js"); -var _indexEs = __webpack_require__(/*! ../resize/index.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/resize/index.es.js"); -var _infoEs = __webpack_require__(/*! ./info.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/info.es.js"); -var _onScrollHandlerEs = __webpack_require__(/*! ./on-scroll-handler.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/on-scroll-handler.es.js"); -const scrollListeners = new WeakMap(); -const resizeListeners = new WeakMap(); -const onScrollHandlers = new WeakMap(); -const getEventTarget = element => element === document.documentElement ? window : element; -function scroll(onScroll) { - let _a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var { - container = document.documentElement - } = _a, - options = (0, _tslib.__rest)(_a, ["container"]); - let containerHandlers = onScrollHandlers.get(container); - /** - * Get the onScroll handlers for this container. - * If one isn't found, create a new one. - */ - if (!containerHandlers) { - containerHandlers = new Set(); - onScrollHandlers.set(container, containerHandlers); - } - /** - * Create a new onScroll handler for the provided callback. - */ - const info = (0, _infoEs.createScrollInfo)(); - const containerHandler = (0, _onScrollHandlerEs.createOnScrollHandler)(container, onScroll, info, options); - containerHandlers.add(containerHandler); - /** - * Check if there's a scroll event listener for this container. - * If not, create one. - */ - if (!scrollListeners.has(container)) { - const listener = () => { - const time = performance.now(); - for (const handler of containerHandlers) handler.measure(); - for (const handler of containerHandlers) handler.update(time); - for (const handler of containerHandlers) handler.notify(); - }; - scrollListeners.set(container, listener); - const target = getEventTarget(container); - window.addEventListener("resize", listener, { - passive: true - }); - if (container !== document.documentElement) { - resizeListeners.set(container, (0, _indexEs.resize)(container, listener)); - } - target.addEventListener("scroll", listener, { - passive: true - }); - } - const listener = scrollListeners.get(container); - const onLoadProcesss = requestAnimationFrame(listener); - return () => { - var _a; - if (typeof onScroll !== "function") onScroll.stop(); - cancelAnimationFrame(onLoadProcesss); - /** - * Check if we even have any handlers for this container. - */ - const containerHandlers = onScrollHandlers.get(container); - if (!containerHandlers) return; - containerHandlers.delete(containerHandler); - if (containerHandlers.size) return; - /** - * If no more handlers, remove the scroll listener too. - */ - const listener = scrollListeners.get(container); - scrollListeners.delete(container); - if (listener) { - getEventTarget(container).removeEventListener("scroll", listener); - (_a = resizeListeners.get(container)) === null || _a === void 0 ? void 0 : _a(); - window.removeEventListener("resize", listener); - } - }; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/scroll/info.es.js": -/*!****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/scroll/info.es.js ***! - \****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createScrollInfo = void 0; -exports.updateScrollInfo = updateScrollInfo; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -/** - * A time in milliseconds, beyond which we consider the scroll velocity to be 0. - */ -const maxElapsed = 50; -const createAxisInfo = () => ({ - current: 0, - offset: [], - progress: 0, - scrollLength: 0, - targetOffset: 0, - targetLength: 0, - containerLength: 0, - velocity: 0 -}); -const createScrollInfo = () => ({ - time: 0, - x: createAxisInfo(), - y: createAxisInfo() -}); -exports.createScrollInfo = createScrollInfo; -const keys = { - x: { - length: "Width", - position: "Left" - }, - y: { - length: "Height", - position: "Top" - } -}; -function updateAxisInfo(element, axisName, info, time) { - const axis = info[axisName]; - const { - length, - position - } = keys[axisName]; - const prev = axis.current; - const prevTime = info.time; - axis.current = element["scroll" + position]; - axis.scrollLength = element["scroll" + length] - element["client" + length]; - axis.offset.length = 0; - axis.offset[0] = 0; - axis.offset[1] = axis.scrollLength; - axis.progress = (0, _utils.progress)(0, axis.scrollLength, axis.current); - const elapsed = time - prevTime; - axis.velocity = elapsed > maxElapsed ? 0 : (0, _utils.velocityPerSecond)(axis.current - prev, elapsed); -} -function updateScrollInfo(element, info, time) { - updateAxisInfo(element, "x", info, time); - updateAxisInfo(element, "y", info, time); - info.time = time; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/edge.es.js": -/*!************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/edge.es.js ***! - \************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.namedEdges = void 0; -exports.resolveEdge = resolveEdge; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -const namedEdges = { - start: 0, - center: 0.5, - end: 1 -}; -exports.namedEdges = namedEdges; -function resolveEdge(edge, length) { - let inset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - let delta = 0; - /** - * If we have this edge defined as a preset, replace the definition - * with the numerical value. - */ - if (namedEdges[edge] !== undefined) { - edge = namedEdges[edge]; - } - /** - * Handle unit values - */ - if ((0, _utils.isString)(edge)) { - const asNumber = parseFloat(edge); - if (edge.endsWith("px")) { - delta = asNumber; - } else if (edge.endsWith("%")) { - edge = asNumber / 100; - } else if (edge.endsWith("vw")) { - delta = asNumber / 100 * document.documentElement.clientWidth; - } else if (edge.endsWith("vh")) { - delta = asNumber / 100 * document.documentElement.clientHeight; - } else { - edge = asNumber; - } - } - /** - * If the edge is defined as a number, handle as a progress value. - */ - if ((0, _utils.isNumber)(edge)) { - delta = length * edge; - } - return inset + delta; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/index.es.js": -/*!*************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/index.es.js ***! - \*************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.resolveOffsets = resolveOffsets; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _insetEs = __webpack_require__(/*! ./inset.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/inset.es.js"); -var _presetsEs = __webpack_require__(/*! ./presets.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/presets.es.js"); -var _offsetEs = __webpack_require__(/*! ./offset.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/offset.es.js"); -const point = { - x: 0, - y: 0 -}; -function resolveOffsets(container, info, options) { - let { - offset: offsetDefinition = _presetsEs.ScrollOffset.All - } = options; - const { - target = container, - axis = "y" - } = options; - const lengthLabel = axis === "y" ? "height" : "width"; - const inset = target !== container ? (0, _insetEs.calcInset)(target, container) : point; - /** - * Measure the target and container. If they're the same thing then we - * use the container's scrollWidth/Height as the target, from there - * all other calculations can remain the same. - */ - const targetSize = target === container ? { - width: container.scrollWidth, - height: container.scrollHeight - } : { - width: target.clientWidth, - height: target.clientHeight - }; - const containerSize = { - width: container.clientWidth, - height: container.clientHeight - }; - /** - * Reset the length of the resolved offset array rather than creating a new one. - * TODO: More reusable data structures for targetSize/containerSize would also be good. - */ - info[axis].offset.length = 0; - /** - * Populate the offset array by resolving the user's offset definition into - * a list of pixel scroll offets. - */ - let hasChanged = !info[axis].interpolate; - const numOffsets = offsetDefinition.length; - for (let i = 0; i < numOffsets; i++) { - const offset = (0, _offsetEs.resolveOffset)(offsetDefinition[i], containerSize[lengthLabel], targetSize[lengthLabel], inset[axis]); - if (!hasChanged && offset !== info[axis].interpolatorOffsets[i]) { - hasChanged = true; - } - info[axis].offset[i] = offset; - } - /** - * If the pixel scroll offsets have changed, create a new interpolator function - * to map scroll value into a progress. - */ - if (hasChanged) { - info[axis].interpolate = (0, _utils.interpolate)((0, _utils.defaultOffset)(numOffsets), info[axis].offset); - info[axis].interpolatorOffsets = [...info[axis].offset]; - } - info[axis].progress = info[axis].interpolate(info[axis].current); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/inset.es.js": -/*!*************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/inset.es.js ***! - \*************************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.calcInset = calcInset; -function calcInset(element, container) { - let inset = { - x: 0, - y: 0 - }; - let current = element; - while (current && current !== container) { - if (current instanceof HTMLElement) { - inset.x += current.offsetLeft; - inset.y += current.offsetTop; - current = current.offsetParent; - } else if (current instanceof SVGGraphicsElement && "getBBox" in current) { - const { - top, - left - } = current.getBBox(); - inset.x += left; - inset.y += top; - /** - * Assign the next parent element as the tag. - */ - while (current && current.tagName !== "svg") { - current = current.parentNode; - } - } - } - return inset; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/offset.es.js": -/*!**************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/offset.es.js ***! - \**************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.resolveOffset = resolveOffset; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _edgeEs = __webpack_require__(/*! ./edge.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/edge.es.js"); -const defaultOffset = [0, 0]; -function resolveOffset(offset, containerLength, targetLength, targetInset) { - let offsetDefinition = Array.isArray(offset) ? offset : defaultOffset; - let targetPoint = 0; - let containerPoint = 0; - if ((0, _utils.isNumber)(offset)) { - /** - * If we're provided offset: [0, 0.5, 1] then each number x should become - * [x, x], so we default to the behaviour of mapping 0 => 0 of both target - * and container etc. - */ - offsetDefinition = [offset, offset]; - } else if ((0, _utils.isString)(offset)) { - offset = offset.trim(); - if (offset.includes(" ")) { - offsetDefinition = offset.split(" "); - } else { - /** - * If we're provided a definition like "100px" then we want to apply - * that only to the top of the target point, leaving the container at 0. - * Whereas a named offset like "end" should be applied to both. - */ - offsetDefinition = [offset, _edgeEs.namedEdges[offset] ? offset : `0`]; - } - } - targetPoint = (0, _edgeEs.resolveEdge)(offsetDefinition[0], targetLength, targetInset); - containerPoint = (0, _edgeEs.resolveEdge)(offsetDefinition[1], containerLength); - return targetPoint - containerPoint; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/presets.es.js": -/*!***************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/presets.es.js ***! - \***************************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ScrollOffset = void 0; -const ScrollOffset = { - Enter: [[0, 1], [1, 1]], - Exit: [[0, 0], [1, 0]], - Any: [[1, 0], [0, 1]], - All: [[0, 0], [1, 1]] -}; -exports.ScrollOffset = ScrollOffset; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/gestures/scroll/on-scroll-handler.es.js": -/*!*****************************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/gestures/scroll/on-scroll-handler.es.js ***! - \*****************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createOnScrollHandler = createOnScrollHandler; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _infoEs = __webpack_require__(/*! ./info.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/info.es.js"); -var _indexEs = __webpack_require__(/*! ./offsets/index.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/index.es.js"); -function measure(container) { - let target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : container; - let info = arguments.length > 2 ? arguments[2] : undefined; - /** - * Find inset of target within scrollable container - */ - info.x.targetOffset = 0; - info.y.targetOffset = 0; - if (target !== container) { - let node = target; - while (node && node != container) { - info.x.targetOffset += node.offsetLeft; - info.y.targetOffset += node.offsetTop; - node = node.offsetParent; - } - } - info.x.targetLength = target === container ? target.scrollWidth : target.clientWidth; - info.y.targetLength = target === container ? target.scrollHeight : target.clientHeight; - info.x.containerLength = container.clientWidth; - info.y.containerLength = container.clientHeight; -} -function createOnScrollHandler(element, onScroll, info) { - let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - const axis = options.axis || "y"; - return { - measure: () => measure(element, options.target, info), - update: time => { - (0, _infoEs.updateScrollInfo)(element, info, time); - if (options.offset || options.target) { - (0, _indexEs.resolveOffsets)(element, info, options); - } - }, - notify: typeof onScroll === "function" ? () => onScroll(info) : scrubAnimation(onScroll, info[axis]) - }; -} -function scrubAnimation(controls, axisInfo) { - controls.pause(); - controls.forEachNative((animation, _ref) => { - let { - easing - } = _ref; - var _a, _b; - if (animation.updateDuration) { - if (!easing) animation.easing = _utils.noopReturn; - animation.updateDuration(1); - } else { - const timingOptions = { - duration: 1000 - }; - if (!easing) timingOptions.easing = "linear"; - (_b = (_a = animation.effect) === null || _a === void 0 ? void 0 : _a.updateTiming) === null || _b === void 0 ? void 0 : _b.call(_a, timingOptions); - } - }); - return () => { - controls.currentTime = axisInfo.progress; - }; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/index.es.js": -/*!*************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/index.es.js ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "ScrollOffset", ({ - enumerable: true, - get: function () { - return _presetsEs.ScrollOffset; - } -})); -Object.defineProperty(exports, "animate", ({ - enumerable: true, - get: function () { - return _indexEs.animate; - } -})); -Object.defineProperty(exports, "animateStyle", ({ - enumerable: true, - get: function () { - return _animateStyleEs.animateStyle; - } -})); -Object.defineProperty(exports, "createMotionState", ({ - enumerable: true, - get: function () { - return _indexEs7.createMotionState; - } -})); -Object.defineProperty(exports, "createStyleString", ({ - enumerable: true, - get: function () { - return _styleStringEs.createStyleString; - } -})); -Object.defineProperty(exports, "createStyles", ({ - enumerable: true, - get: function () { - return _styleObjectEs.createStyles; - } -})); -Object.defineProperty(exports, "getAnimationData", ({ - enumerable: true, - get: function () { - return _dataEs.getAnimationData; - } -})); -Object.defineProperty(exports, "getStyleName", ({ - enumerable: true, - get: function () { - return _getStyleNameEs.getStyleName; - } -})); -Object.defineProperty(exports, "glide", ({ - enumerable: true, - get: function () { - return _indexEs4.glide; - } -})); -Object.defineProperty(exports, "inView", ({ - enumerable: true, - get: function () { - return _inViewEs.inView; - } -})); -Object.defineProperty(exports, "mountedStates", ({ - enumerable: true, - get: function () { - return _indexEs7.mountedStates; - } -})); -Object.defineProperty(exports, "resize", ({ - enumerable: true, - get: function () { - return _indexEs5.resize; - } -})); -Object.defineProperty(exports, "scroll", ({ - enumerable: true, - get: function () { - return _indexEs6.scroll; - } -})); -Object.defineProperty(exports, "spring", ({ - enumerable: true, - get: function () { - return _indexEs3.spring; - } -})); -Object.defineProperty(exports, "stagger", ({ - enumerable: true, - get: function () { - return _staggerEs.stagger; - } -})); -Object.defineProperty(exports, "style", ({ - enumerable: true, - get: function () { - return _styleEs.style; - } -})); -Object.defineProperty(exports, "timeline", ({ - enumerable: true, - get: function () { - return _indexEs2.timeline; - } -})); -Object.defineProperty(exports, "withControls", ({ - enumerable: true, - get: function () { - return _controlsEs.withControls; - } -})); -var _indexEs = __webpack_require__(/*! ./animate/index.es.js */ "../../../node_modules/@motionone/dom/dist/animate/index.es.js"); -var _animateStyleEs = __webpack_require__(/*! ./animate/animate-style.es.js */ "../../../node_modules/@motionone/dom/dist/animate/animate-style.es.js"); -var _indexEs2 = __webpack_require__(/*! ./timeline/index.es.js */ "../../../node_modules/@motionone/dom/dist/timeline/index.es.js"); -var _staggerEs = __webpack_require__(/*! ./utils/stagger.es.js */ "../../../node_modules/@motionone/dom/dist/utils/stagger.es.js"); -var _indexEs3 = __webpack_require__(/*! ./easing/spring/index.es.js */ "../../../node_modules/@motionone/dom/dist/easing/spring/index.es.js"); -var _indexEs4 = __webpack_require__(/*! ./easing/glide/index.es.js */ "../../../node_modules/@motionone/dom/dist/easing/glide/index.es.js"); -var _styleEs = __webpack_require__(/*! ./animate/style.es.js */ "../../../node_modules/@motionone/dom/dist/animate/style.es.js"); -var _inViewEs = __webpack_require__(/*! ./gestures/in-view.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/in-view.es.js"); -var _indexEs5 = __webpack_require__(/*! ./gestures/resize/index.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/resize/index.es.js"); -var _indexEs6 = __webpack_require__(/*! ./gestures/scroll/index.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/index.es.js"); -var _presetsEs = __webpack_require__(/*! ./gestures/scroll/offsets/presets.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/scroll/offsets/presets.es.js"); -var _controlsEs = __webpack_require__(/*! ./animate/utils/controls.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/controls.es.js"); -var _dataEs = __webpack_require__(/*! ./animate/data.es.js */ "../../../node_modules/@motionone/dom/dist/animate/data.es.js"); -var _getStyleNameEs = __webpack_require__(/*! ./animate/utils/get-style-name.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js"); -var _indexEs7 = __webpack_require__(/*! ./state/index.es.js */ "../../../node_modules/@motionone/dom/dist/state/index.es.js"); -var _styleObjectEs = __webpack_require__(/*! ./animate/utils/style-object.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/style-object.es.js"); -var _styleStringEs = __webpack_require__(/*! ./animate/utils/style-string.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/style-string.es.js"); - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/state/gestures/hover.es.js": -/*!****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/state/gestures/hover.es.js ***! - \****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.hover = void 0; -var _eventsEs = __webpack_require__(/*! ../utils/events.es.js */ "../../../node_modules/@motionone/dom/dist/state/utils/events.es.js"); -const mouseEvent = (element, name, action) => event => { - if (event.pointerType && event.pointerType !== "mouse") return; - action(); - (0, _eventsEs.dispatchPointerEvent)(element, name, event); -}; -const hover = { - isActive: options => Boolean(options.hover), - subscribe: (element, _ref) => { - let { - enable, - disable - } = _ref; - const onEnter = mouseEvent(element, "hoverstart", enable); - const onLeave = mouseEvent(element, "hoverend", disable); - element.addEventListener("pointerenter", onEnter); - element.addEventListener("pointerleave", onLeave); - return () => { - element.removeEventListener("pointerenter", onEnter); - element.removeEventListener("pointerleave", onLeave); - }; - } -}; -exports.hover = hover; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/state/gestures/in-view.es.js": -/*!******************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/state/gestures/in-view.es.js ***! - \******************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.inView = void 0; -var _tslib = __webpack_require__(/*! tslib */ "../../../node_modules/tslib/tslib.es6.js"); -var _eventsEs = __webpack_require__(/*! ../utils/events.es.js */ "../../../node_modules/@motionone/dom/dist/state/utils/events.es.js"); -var _inViewEs = __webpack_require__(/*! ../../gestures/in-view.es.js */ "../../../node_modules/@motionone/dom/dist/gestures/in-view.es.js"); -const inView = { - isActive: options => Boolean(options.inView), - subscribe: (element, _ref, _ref2) => { - let { - enable, - disable - } = _ref; - let { - inViewOptions = {} - } = _ref2; - const { - once - } = inViewOptions, - viewOptions = (0, _tslib.__rest)(inViewOptions, ["once"]); - return (0, _inViewEs.inView)(element, enterEntry => { - enable(); - (0, _eventsEs.dispatchViewEvent)(element, "viewenter", enterEntry); - if (!once) { - return leaveEntry => { - disable(); - (0, _eventsEs.dispatchViewEvent)(element, "viewleave", leaveEntry); - }; - } - }, viewOptions); - } -}; -exports.inView = inView; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/state/gestures/press.es.js": -/*!****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/state/gestures/press.es.js ***! - \****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.press = void 0; -var _eventsEs = __webpack_require__(/*! ../utils/events.es.js */ "../../../node_modules/@motionone/dom/dist/state/utils/events.es.js"); -const press = { - isActive: options => Boolean(options.press), - subscribe: (element, _ref) => { - let { - enable, - disable - } = _ref; - const onPointerUp = event => { - disable(); - (0, _eventsEs.dispatchPointerEvent)(element, "pressend", event); - window.removeEventListener("pointerup", onPointerUp); - }; - const onPointerDown = event => { - enable(); - (0, _eventsEs.dispatchPointerEvent)(element, "pressstart", event); - window.addEventListener("pointerup", onPointerUp); - }; - element.addEventListener("pointerdown", onPointerDown); - return () => { - element.removeEventListener("pointerdown", onPointerDown); - window.removeEventListener("pointerup", onPointerUp); - }; - } -}; -exports.press = press; - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/state/index.es.js": -/*!*******************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/state/index.es.js ***! - \*******************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createMotionState = createMotionState; -exports.mountedStates = void 0; -var _tslib = __webpack_require__(/*! tslib */ "../../../node_modules/tslib/tslib.es6.js"); -var _heyListen = __webpack_require__(/*! hey-listen */ "../../../node_modules/hey-listen/dist/hey-listen.es.js"); -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _animateStyleEs = __webpack_require__(/*! ../animate/animate-style.es.js */ "../../../node_modules/@motionone/dom/dist/animate/animate-style.es.js"); -var _styleEs = __webpack_require__(/*! ../animate/style.es.js */ "../../../node_modules/@motionone/dom/dist/animate/style.es.js"); -var _optionsEs = __webpack_require__(/*! ../animate/utils/options.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/options.es.js"); -var _hasChangedEs = __webpack_require__(/*! ./utils/has-changed.es.js */ "../../../node_modules/@motionone/dom/dist/state/utils/has-changed.es.js"); -var _resolveVariantEs = __webpack_require__(/*! ./utils/resolve-variant.es.js */ "../../../node_modules/@motionone/dom/dist/state/utils/resolve-variant.es.js"); -var _scheduleEs = __webpack_require__(/*! ./utils/schedule.es.js */ "../../../node_modules/@motionone/dom/dist/state/utils/schedule.es.js"); -var _inViewEs = __webpack_require__(/*! ./gestures/in-view.es.js */ "../../../node_modules/@motionone/dom/dist/state/gestures/in-view.es.js"); -var _hoverEs = __webpack_require__(/*! ./gestures/hover.es.js */ "../../../node_modules/@motionone/dom/dist/state/gestures/hover.es.js"); -var _pressEs = __webpack_require__(/*! ./gestures/press.es.js */ "../../../node_modules/@motionone/dom/dist/state/gestures/press.es.js"); -var _eventsEs = __webpack_require__(/*! ./utils/events.es.js */ "../../../node_modules/@motionone/dom/dist/state/utils/events.es.js"); -const gestures = { - inView: _inViewEs.inView, - hover: _hoverEs.hover, - press: _pressEs.press -}; -/** - * A list of state types, in priority order. If a value is defined in - * a righter-most type, it will override any definition in a lefter-most. - */ -const stateTypes = ["initial", "animate", ...Object.keys(gestures), "exit"]; -/** - * A global store of all generated motion states. This can be used to lookup - * a motion state for a given Element. - */ -const mountedStates = new WeakMap(); -exports.mountedStates = mountedStates; -function createMotionState() { - let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - let parent = arguments.length > 1 ? arguments[1] : undefined; - /** - * The element represented by the motion state. This is an empty reference - * when we create the state to support SSR and allow for later mounting - * in view libraries. - * - * @ts-ignore - */ - let element; - /** - * Calculate a depth that we can use to order motion states by tree depth. - */ - let depth = parent ? parent.getDepth() + 1 : 0; - /** - * Track which states are currently active. - */ - const activeStates = { - initial: true, - animate: true - }; - /** - * A map of functions that, when called, will remove event listeners for - * a given gesture. - */ - const gestureSubscriptions = {}; - /** - * Initialise a context to share through motion states. This - * will be populated by variant names (if any). - */ - const context = {}; - for (const name of stateTypes) { - context[name] = typeof options[name] === "string" ? options[name] : parent === null || parent === void 0 ? void 0 : parent.getContext()[name]; - } - /** - * If initial is set to false we use the animate prop as the initial - * animation state. - */ - const initialVariantSource = options.initial === false ? "animate" : "initial"; - /** - * Destructure an initial target out from the resolved initial variant. - */ - let _a = (0, _resolveVariantEs.resolveVariant)(options[initialVariantSource] || context[initialVariantSource], options.variants) || {}, - target = (0, _tslib.__rest)(_a, ["transition"]); - /** - * The base target is a cached map of values that we'll use to animate - * back to if a value is removed from all active state types. This - * is usually the initial value as read from the DOM, for instance if - * it hasn't been defined in initial. - */ - const baseTarget = Object.assign({}, target); - /** - * A generator that will be processed by the global animation scheduler. - * This yeilds when it switches from reading the DOM to writing to it - * to prevent layout thrashing. - */ - function* animateUpdates() { - var _a, _b; - const prevTarget = target; - target = {}; - const animationOptions = {}; - for (const name of stateTypes) { - if (!activeStates[name]) continue; - const variant = (0, _resolveVariantEs.resolveVariant)(options[name]); - if (!variant) continue; - for (const key in variant) { - if (key === "transition") continue; - target[key] = variant[key]; - animationOptions[key] = (0, _optionsEs.getOptions)((_b = (_a = variant.transition) !== null && _a !== void 0 ? _a : options.transition) !== null && _b !== void 0 ? _b : {}, key); - } - } - const allTargetKeys = new Set([...Object.keys(target), ...Object.keys(prevTarget)]); - const animationFactories = []; - allTargetKeys.forEach(key => { - var _a; - if (target[key] === undefined) { - target[key] = baseTarget[key]; - } - if ((0, _hasChangedEs.hasChanged)(prevTarget[key], target[key])) { - (_a = baseTarget[key]) !== null && _a !== void 0 ? _a : baseTarget[key] = _styleEs.style.get(element, key); - animationFactories.push((0, _animateStyleEs.animateStyle)(element, key, target[key], animationOptions[key])); - } - }); - // Wait for all animation states to read from the DOM - yield; - const animations = animationFactories.map(factory => factory()).filter(Boolean); - if (!animations.length) return; - const animationTarget = target; - element.dispatchEvent((0, _eventsEs.motionEvent)("motionstart", animationTarget)); - Promise.all(animations.map(animation => animation.finished)).then(() => { - element.dispatchEvent((0, _eventsEs.motionEvent)("motioncomplete", animationTarget)); - }).catch(_utils.noop); - } - const setGesture = (name, isActive) => () => { - activeStates[name] = isActive; - (0, _scheduleEs.scheduleAnimation)(state); - }; - const updateGestureSubscriptions = () => { - for (const name in gestures) { - const isGestureActive = gestures[name].isActive(options); - const remove = gestureSubscriptions[name]; - if (isGestureActive && !remove) { - gestureSubscriptions[name] = gestures[name].subscribe(element, { - enable: setGesture(name, true), - disable: setGesture(name, false) - }, options); - } else if (!isGestureActive && remove) { - remove(); - delete gestureSubscriptions[name]; - } - } - }; - const state = { - update: newOptions => { - if (!element) return; - options = newOptions; - updateGestureSubscriptions(); - (0, _scheduleEs.scheduleAnimation)(state); - }, - setActive: (name, isActive) => { - if (!element) return; - activeStates[name] = isActive; - (0, _scheduleEs.scheduleAnimation)(state); - }, - animateUpdates, - getDepth: () => depth, - getTarget: () => target, - getOptions: () => options, - getContext: () => context, - mount: newElement => { - (0, _heyListen.invariant)(Boolean(newElement), "Animation state must be mounted with valid Element"); - element = newElement; - mountedStates.set(element, state); - updateGestureSubscriptions(); - return () => { - mountedStates.delete(element); - (0, _scheduleEs.unscheduleAnimation)(state); - for (const key in gestureSubscriptions) { - gestureSubscriptions[key](); - } - }; - }, - isMounted: () => Boolean(element) - }; - return state; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/state/utils/events.es.js": -/*!**************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/state/utils/events.es.js ***! - \**************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.dispatchPointerEvent = dispatchPointerEvent; -exports.dispatchViewEvent = dispatchViewEvent; -exports.motionEvent = void 0; -const motionEvent = (name, target) => new CustomEvent(name, { - detail: { - target - } -}); -exports.motionEvent = motionEvent; -function dispatchPointerEvent(element, name, event) { - element.dispatchEvent(new CustomEvent(name, { - detail: { - originalEvent: event - } - })); -} -function dispatchViewEvent(element, name, entry) { - element.dispatchEvent(new CustomEvent(name, { - detail: { - originalEntry: entry - } - })); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/state/utils/has-changed.es.js": -/*!*******************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/state/utils/has-changed.es.js ***! - \*******************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.hasChanged = hasChanged; -exports.shallowCompare = shallowCompare; -function hasChanged(a, b) { - if (typeof a !== typeof b) return true; - if (Array.isArray(a) && Array.isArray(b)) return !shallowCompare(a, b); - return a !== b; -} -function shallowCompare(next, prev) { - const prevLength = prev.length; - if (prevLength !== next.length) return false; - for (let i = 0; i < prevLength; i++) { - if (prev[i] !== next[i]) return false; - } - return true; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/state/utils/is-variant.es.js": -/*!******************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/state/utils/is-variant.es.js ***! - \******************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isVariant = isVariant; -function isVariant(definition) { - return typeof definition === "object"; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/state/utils/resolve-variant.es.js": -/*!***********************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/state/utils/resolve-variant.es.js ***! - \***********************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.resolveVariant = resolveVariant; -var _isVariantEs = __webpack_require__(/*! ./is-variant.es.js */ "../../../node_modules/@motionone/dom/dist/state/utils/is-variant.es.js"); -function resolveVariant(definition, variants) { - if ((0, _isVariantEs.isVariant)(definition)) { - return definition; - } else if (definition && variants) { - return variants[definition]; - } -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/state/utils/schedule.es.js": -/*!****************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/state/utils/schedule.es.js ***! - \****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.scheduleAnimation = scheduleAnimation; -exports.unscheduleAnimation = unscheduleAnimation; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -let scheduled = undefined; -function processScheduledAnimations() { - if (!scheduled) return; - const generators = scheduled.sort(compareByDepth).map(fireAnimateUpdates); - generators.forEach(fireNext); - generators.forEach(fireNext); - scheduled = undefined; -} -function scheduleAnimation(state) { - if (!scheduled) { - scheduled = [state]; - requestAnimationFrame(processScheduledAnimations); - } else { - (0, _utils.addUniqueItem)(scheduled, state); - } -} -function unscheduleAnimation(state) { - scheduled && (0, _utils.removeItem)(scheduled, state); -} -const compareByDepth = (a, b) => a.getDepth() - b.getDepth(); -const fireAnimateUpdates = state => state.animateUpdates(); -const fireNext = iterator => iterator.next(); - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/timeline/index.es.js": -/*!**********************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/timeline/index.es.js ***! - \**********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createAnimationsFromTimeline = createAnimationsFromTimeline; -exports.timeline = timeline; -var _tslib = __webpack_require__(/*! tslib */ "../../../node_modules/tslib/tslib.es6.js"); -var _heyListen = __webpack_require__(/*! hey-listen */ "../../../node_modules/hey-listen/dist/hey-listen.es.js"); -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _staggerEs = __webpack_require__(/*! ../utils/stagger.es.js */ "../../../node_modules/@motionone/dom/dist/utils/stagger.es.js"); -var _animateStyleEs = __webpack_require__(/*! ../animate/animate-style.es.js */ "../../../node_modules/@motionone/dom/dist/animate/animate-style.es.js"); -var _controlsEs = __webpack_require__(/*! ../animate/utils/controls.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/controls.es.js"); -var _keyframesEs = __webpack_require__(/*! ../animate/utils/keyframes.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/keyframes.es.js"); -var _optionsEs = __webpack_require__(/*! ../animate/utils/options.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/options.es.js"); -var _resolveElementsEs = __webpack_require__(/*! ../utils/resolve-elements.es.js */ "../../../node_modules/@motionone/dom/dist/utils/resolve-elements.es.js"); -var _transformsEs = __webpack_require__(/*! ../animate/utils/transforms.es.js */ "../../../node_modules/@motionone/dom/dist/animate/utils/transforms.es.js"); -var _calcTimeEs = __webpack_require__(/*! ./utils/calc-time.es.js */ "../../../node_modules/@motionone/dom/dist/timeline/utils/calc-time.es.js"); -var _editEs = __webpack_require__(/*! ./utils/edit.es.js */ "../../../node_modules/@motionone/dom/dist/timeline/utils/edit.es.js"); -var _sortEs = __webpack_require__(/*! ./utils/sort.es.js */ "../../../node_modules/@motionone/dom/dist/timeline/utils/sort.es.js"); -function timeline(definition) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var _a; - const animationDefinitions = createAnimationsFromTimeline(definition, options); - /** - * Create and start animations - */ - const animationFactories = animationDefinitions.map(definition => (0, _animateStyleEs.animateStyle)(...definition)).filter(Boolean); - return (0, _controlsEs.withControls)(animationFactories, options, - // Get the duration from the first animation definition - (_a = animationDefinitions[0]) === null || _a === void 0 ? void 0 : _a[3].duration); -} -function createAnimationsFromTimeline(definition) { - let _a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var { - defaultOptions = {} - } = _a, - timelineOptions = (0, _tslib.__rest)(_a, ["defaultOptions"]); - const animationDefinitions = []; - const elementSequences = new Map(); - const elementCache = {}; - const timeLabels = new Map(); - let prevTime = 0; - let currentTime = 0; - let totalDuration = 0; - /** - * Build the timeline by mapping over the definition array and converting - * the definitions into keyframes and offsets with absolute time values. - * These will later get converted into relative offsets in a second pass. - */ - for (let i = 0; i < definition.length; i++) { - const segment = definition[i]; - /** - * If this is a timeline label, mark it and skip the rest of this iteration. - */ - if ((0, _utils.isString)(segment)) { - timeLabels.set(segment, currentTime); - continue; - } else if (!Array.isArray(segment)) { - timeLabels.set(segment.name, (0, _calcTimeEs.calcNextTime)(currentTime, segment.at, prevTime, timeLabels)); - continue; - } - const [elementDefinition, keyframes, options = {}] = segment; - /** - * If a relative or absolute time value has been specified we need to resolve - * it in relation to the currentTime. - */ - if (options.at !== undefined) { - currentTime = (0, _calcTimeEs.calcNextTime)(currentTime, options.at, prevTime, timeLabels); - } - /** - * Keep track of the maximum duration in this definition. This will be - * applied to currentTime once the definition has been parsed. - */ - let maxDuration = 0; - /** - * Find all the elements specified in the definition and parse value - * keyframes from their timeline definitions. - */ - const elements = (0, _resolveElementsEs.resolveElements)(elementDefinition, elementCache); - const numElements = elements.length; - for (let elementIndex = 0; elementIndex < numElements; elementIndex++) { - const element = elements[elementIndex]; - const elementSequence = getElementSequence(element, elementSequences); - for (const key in keyframes) { - const valueSequence = getValueSequence(key, elementSequence); - let valueKeyframes = (0, _keyframesEs.keyframesList)(keyframes[key]); - const valueOptions = (0, _optionsEs.getOptions)(options, key); - let { - duration = defaultOptions.duration || _utils.defaults.duration, - easing = defaultOptions.easing || _utils.defaults.easing - } = valueOptions; - if ((0, _utils.isEasingGenerator)(easing)) { - const valueIsTransform = (0, _transformsEs.isTransform)(key); - (0, _heyListen.invariant)(valueKeyframes.length === 2 || !valueIsTransform, "spring must be provided 2 keyframes within timeline"); - const custom = easing.createAnimation(valueKeyframes, - // TODO We currently only support explicit keyframes - // so this doesn't currently read from the DOM - () => "0", valueIsTransform); - easing = custom.easing; - if (custom.keyframes !== undefined) valueKeyframes = custom.keyframes; - if (custom.duration !== undefined) duration = custom.duration; - } - const delay = (0, _staggerEs.resolveOption)(options.delay, elementIndex, numElements) || 0; - const startTime = currentTime + delay; - const targetTime = startTime + duration; - /** - * - */ - let { - offset = (0, _utils.defaultOffset)(valueKeyframes.length) - } = valueOptions; - /** - * If there's only one offset of 0, fill in a second with length 1 - * - * TODO: Ensure there's a test that covers this removal - */ - if (offset.length === 1 && offset[0] === 0) { - offset[1] = 1; - } - /** - * Fill out if offset if fewer offsets than keyframes - */ - const remainder = length - valueKeyframes.length; - remainder > 0 && (0, _utils.fillOffset)(offset, remainder); - /** - * If only one value has been set, ie [1], push a null to the start of - * the keyframe array. This will let us mark a keyframe at this point - * that will later be hydrated with the previous value. - */ - valueKeyframes.length === 1 && valueKeyframes.unshift(null); - /** - * Add keyframes, mapping offsets to absolute time. - */ - (0, _editEs.addKeyframes)(valueSequence, valueKeyframes, easing, offset, startTime, targetTime); - maxDuration = Math.max(delay + duration, maxDuration); - totalDuration = Math.max(targetTime, totalDuration); - } - } - prevTime = currentTime; - currentTime += maxDuration; - } - /** - * For every element and value combination create a new animation. - */ - elementSequences.forEach((valueSequences, element) => { - for (const key in valueSequences) { - const valueSequence = valueSequences[key]; - /** - * Arrange all the keyframes in ascending time order. - */ - valueSequence.sort(_sortEs.compareByTime); - const keyframes = []; - const valueOffset = []; - const valueEasing = []; - /** - * For each keyframe, translate absolute times into - * relative offsets based on the total duration of the timeline. - */ - for (let i = 0; i < valueSequence.length; i++) { - const { - at, - value, - easing - } = valueSequence[i]; - keyframes.push(value); - valueOffset.push((0, _utils.progress)(0, totalDuration, at)); - valueEasing.push(easing || _utils.defaults.easing); - } - /** - * If the first keyframe doesn't land on offset: 0 - * provide one by duplicating the initial keyframe. This ensures - * it snaps to the first keyframe when the animation starts. - */ - if (valueOffset[0] !== 0) { - valueOffset.unshift(0); - keyframes.unshift(keyframes[0]); - valueEasing.unshift("linear"); - } - /** - * If the last keyframe doesn't land on offset: 1 - * provide one with a null wildcard value. This will ensure it - * stays static until the end of the animation. - */ - if (valueOffset[valueOffset.length - 1] !== 1) { - valueOffset.push(1); - keyframes.push(null); - } - animationDefinitions.push([element, key, keyframes, Object.assign(Object.assign(Object.assign({}, defaultOptions), { - duration: totalDuration, - easing: valueEasing, - offset: valueOffset - }), timelineOptions)]); - } - }); - return animationDefinitions; -} -function getElementSequence(element, sequences) { - !sequences.has(element) && sequences.set(element, {}); - return sequences.get(element); -} -function getValueSequence(name, sequences) { - if (!sequences[name]) sequences[name] = []; - return sequences[name]; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/timeline/utils/calc-time.es.js": -/*!********************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/timeline/utils/calc-time.es.js ***! - \********************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.calcNextTime = calcNextTime; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -function calcNextTime(current, next, prev, labels) { - var _a; - if ((0, _utils.isNumber)(next)) { - return next; - } else if (next.startsWith("-") || next.startsWith("+")) { - return Math.max(0, current + parseFloat(next)); - } else if (next === "<") { - return prev; - } else { - return (_a = labels.get(next)) !== null && _a !== void 0 ? _a : current; - } -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/timeline/utils/edit.es.js": -/*!***************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/timeline/utils/edit.es.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.addKeyframes = addKeyframes; -exports.eraseKeyframes = eraseKeyframes; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -function eraseKeyframes(sequence, startTime, endTime) { - for (let i = 0; i < sequence.length; i++) { - const keyframe = sequence[i]; - if (keyframe.at > startTime && keyframe.at < endTime) { - (0, _utils.removeItem)(sequence, keyframe); - // If we remove this item we have to push the pointer back one - i--; - } - } -} -function addKeyframes(sequence, keyframes, easing, offset, startTime, endTime) { - /** - * Erase every existing value between currentTime and targetTime, - * this will essentially splice this timeline into any currently - * defined ones. - */ - eraseKeyframes(sequence, startTime, endTime); - for (let i = 0; i < keyframes.length; i++) { - sequence.push({ - value: keyframes[i], - at: (0, _utils.mix)(startTime, endTime, offset[i]), - easing: (0, _utils.getEasingForSegment)(easing, i) - }); - } -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/timeline/utils/sort.es.js": -/*!***************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/timeline/utils/sort.es.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.compareByTime = compareByTime; -function compareByTime(a, b) { - if (a.at === b.at) { - return a.value === null ? 1 : -1; - } else { - return a.at - b.at; - } -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/utils/resolve-elements.es.js": -/*!******************************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/utils/resolve-elements.es.js ***! - \******************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.resolveElements = resolveElements; -function resolveElements(elements, selectorCache) { - var _a; - if (typeof elements === "string") { - if (selectorCache) { - (_a = selectorCache[elements]) !== null && _a !== void 0 ? _a : selectorCache[elements] = document.querySelectorAll(elements); - elements = selectorCache[elements]; - } else { - elements = document.querySelectorAll(elements); - } - } else if (elements instanceof Element) { - elements = [elements]; - } - /** - * Return an empty array - */ - return Array.from(elements || []); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/dom/dist/utils/stagger.es.js": -/*!*********************************************************************!*\ - !*** ../../../node_modules/@motionone/dom/dist/utils/stagger.es.js ***! - \*********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getFromIndex = getFromIndex; -exports.resolveOption = resolveOption; -exports.stagger = stagger; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _animation = __webpack_require__(/*! @motionone/animation */ "../../../node_modules/@motionone/animation/dist/index.es.js"); -function stagger() { - let duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.1; - let { - start = 0, - from = 0, - easing - } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - return (i, total) => { - const fromIndex = (0, _utils.isNumber)(from) ? from : getFromIndex(from, total); - const distance = Math.abs(fromIndex - i); - let delay = duration * distance; - if (easing) { - const maxDelay = total * duration; - const easingFunction = (0, _animation.getEasingFunction)(easing); - delay = easingFunction(delay / maxDelay) * maxDelay; - } - return start + delay; - }; -} -function getFromIndex(from, total) { - if (from === "first") { - return 0; - } else { - const lastIndex = total - 1; - return from === "last" ? lastIndex : lastIndex / 2; - } -} -function resolveOption(option, i, total) { - return typeof option === "function" ? option(i, total) : option; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/easing/dist/cubic-bezier.es.js": -/*!***********************************************************************!*\ - !*** ../../../node_modules/@motionone/easing/dist/cubic-bezier.es.js ***! - \***********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.cubicBezier = cubicBezier; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -/* - Bezier function generator - - This has been modified from Gaëtan Renaudeau's BezierEasing - https://github.com/gre/bezier-easing/blob/master/src/index.js - https://github.com/gre/bezier-easing/blob/master/LICENSE - - I've removed the newtonRaphsonIterate algo because in benchmarking it - wasn't noticiably faster than binarySubdivision, indeed removing it - usually improved times, depending on the curve. - - I also removed the lookup table, as for the added bundle size and loop we're - only cutting ~4 or so subdivision iterations. I bumped the max iterations up - to 12 to compensate and this still tended to be faster for no perceivable - loss in accuracy. - - Usage - const easeOut = cubicBezier(.17,.67,.83,.67); - const x = easeOut(0.5); // returns 0.627... -*/ -// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2. -const calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) * t; -const subdivisionPrecision = 0.0000001; -const subdivisionMaxIterations = 12; -function binarySubdivide(x, lowerBound, upperBound, mX1, mX2) { - let currentX; - let currentT; - let i = 0; - do { - currentT = lowerBound + (upperBound - lowerBound) / 2.0; - currentX = calcBezier(currentT, mX1, mX2) - x; - if (currentX > 0.0) { - upperBound = currentT; - } else { - lowerBound = currentT; - } - } while (Math.abs(currentX) > subdivisionPrecision && ++i < subdivisionMaxIterations); - return currentT; -} -function cubicBezier(mX1, mY1, mX2, mY2) { - // If this is a linear gradient, return linear easing - if (mX1 === mY1 && mX2 === mY2) return _utils.noopReturn; - const getTForX = aX => binarySubdivide(aX, 0, 1, mX1, mX2); - // If animation is at start/end, return t without easing - return t => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/easing/dist/index.es.js": -/*!****************************************************************!*\ - !*** ../../../node_modules/@motionone/easing/dist/index.es.js ***! - \****************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "cubicBezier", ({ - enumerable: true, - get: function () { - return _cubicBezierEs.cubicBezier; - } -})); -Object.defineProperty(exports, "steps", ({ - enumerable: true, - get: function () { - return _stepsEs.steps; - } -})); -var _cubicBezierEs = __webpack_require__(/*! ./cubic-bezier.es.js */ "../../../node_modules/@motionone/easing/dist/cubic-bezier.es.js"); -var _stepsEs = __webpack_require__(/*! ./steps.es.js */ "../../../node_modules/@motionone/easing/dist/steps.es.js"); - -/***/ }), - -/***/ "../../../node_modules/@motionone/easing/dist/steps.es.js": -/*!****************************************************************!*\ - !*** ../../../node_modules/@motionone/easing/dist/steps.es.js ***! - \****************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.steps = void 0; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -const steps = function (steps) { - let direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "end"; - return progress => { - progress = direction === "end" ? Math.min(progress, 0.999) : Math.max(progress, 0.001); - const expanded = progress * steps; - const rounded = direction === "end" ? Math.floor(expanded) : Math.ceil(expanded); - return (0, _utils.clamp)(0, 1, rounded / steps); - }; -}; -exports.steps = steps; - -/***/ }), - -/***/ "../../../node_modules/@motionone/generators/dist/glide/index.es.js": -/*!**************************************************************************!*\ - !*** ../../../node_modules/@motionone/generators/dist/glide/index.es.js ***! - \**************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.glide = void 0; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _velocityEs = __webpack_require__(/*! ../utils/velocity.es.js */ "../../../node_modules/@motionone/generators/dist/utils/velocity.es.js"); -var _indexEs = __webpack_require__(/*! ../spring/index.es.js */ "../../../node_modules/@motionone/generators/dist/spring/index.es.js"); -const glide = _ref => { - let { - from = 0, - velocity = 0.0, - power = 0.8, - decay = 0.325, - bounceDamping, - bounceStiffness, - changeTarget, - min, - max, - restDistance = 0.5, - restSpeed - } = _ref; - decay = _utils.time.ms(decay); - const state = { - hasReachedTarget: false, - done: false, - current: from, - target: from - }; - const isOutOfBounds = v => min !== undefined && v < min || max !== undefined && v > max; - const nearestBoundary = v => { - if (min === undefined) return max; - if (max === undefined) return min; - return Math.abs(min - v) < Math.abs(max - v) ? min : max; - }; - let amplitude = power * velocity; - const ideal = from + amplitude; - const target = changeTarget === undefined ? ideal : changeTarget(ideal); - state.target = target; - /** - * If the target has changed we need to re-calculate the amplitude, otherwise - * the animation will start from the wrong position. - */ - if (target !== ideal) amplitude = target - from; - const calcDelta = t => -amplitude * Math.exp(-t / decay); - const calcLatest = t => target + calcDelta(t); - const applyFriction = t => { - const delta = calcDelta(t); - const latest = calcLatest(t); - state.done = Math.abs(delta) <= restDistance; - state.current = state.done ? target : latest; - }; - /** - * Ideally this would resolve for t in a stateless way, we could - * do that by always precalculating the animation but as we know - * this will be done anyway we can assume that spring will - * be discovered during that. - */ - let timeReachedBoundary; - let spring$1; - const checkCatchBoundary = t => { - if (!isOutOfBounds(state.current)) return; - timeReachedBoundary = t; - spring$1 = (0, _indexEs.spring)({ - from: state.current, - to: nearestBoundary(state.current), - velocity: (0, _velocityEs.calcGeneratorVelocity)(calcLatest, t, state.current), - damping: bounceDamping, - stiffness: bounceStiffness, - restDistance, - restSpeed - }); - }; - checkCatchBoundary(0); - return t => { - /** - * We need to resolve the friction to figure out if we need a - * spring but we don't want to do this twice per frame. So here - * we flag if we updated for this frame and later if we did - * we can skip doing it again. - */ - let hasUpdatedFrame = false; - if (!spring$1 && timeReachedBoundary === undefined) { - hasUpdatedFrame = true; - applyFriction(t); - checkCatchBoundary(t); - } - /** - * If we have a spring and the provided t is beyond the moment the friction - * animation crossed the min/max boundary, use the spring. - */ - if (timeReachedBoundary !== undefined && t > timeReachedBoundary) { - state.hasReachedTarget = true; - return spring$1(t - timeReachedBoundary); - } else { - state.hasReachedTarget = false; - !hasUpdatedFrame && applyFriction(t); - return state; - } - }; -}; -exports.glide = glide; - -/***/ }), - -/***/ "../../../node_modules/@motionone/generators/dist/index.es.js": -/*!********************************************************************!*\ - !*** ../../../node_modules/@motionone/generators/dist/index.es.js ***! - \********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "calcGeneratorVelocity", ({ - enumerable: true, - get: function () { - return _velocityEs.calcGeneratorVelocity; - } -})); -Object.defineProperty(exports, "glide", ({ - enumerable: true, - get: function () { - return _indexEs.glide; - } -})); -Object.defineProperty(exports, "pregenerateKeyframes", ({ - enumerable: true, - get: function () { - return _pregenerateKeyframesEs.pregenerateKeyframes; - } -})); -Object.defineProperty(exports, "spring", ({ - enumerable: true, - get: function () { - return _indexEs2.spring; - } -})); -var _indexEs = __webpack_require__(/*! ./glide/index.es.js */ "../../../node_modules/@motionone/generators/dist/glide/index.es.js"); -var _indexEs2 = __webpack_require__(/*! ./spring/index.es.js */ "../../../node_modules/@motionone/generators/dist/spring/index.es.js"); -var _pregenerateKeyframesEs = __webpack_require__(/*! ./utils/pregenerate-keyframes.es.js */ "../../../node_modules/@motionone/generators/dist/utils/pregenerate-keyframes.es.js"); -var _velocityEs = __webpack_require__(/*! ./utils/velocity.es.js */ "../../../node_modules/@motionone/generators/dist/utils/velocity.es.js"); - -/***/ }), - -/***/ "../../../node_modules/@motionone/generators/dist/spring/defaults.es.js": -/*!******************************************************************************!*\ - !*** ../../../node_modules/@motionone/generators/dist/spring/defaults.es.js ***! - \******************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.defaults = void 0; -const defaults = { - stiffness: 100.0, - damping: 10.0, - mass: 1.0 -}; -exports.defaults = defaults; - -/***/ }), - -/***/ "../../../node_modules/@motionone/generators/dist/spring/index.es.js": -/*!***************************************************************************!*\ - !*** ../../../node_modules/@motionone/generators/dist/spring/index.es.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.spring = void 0; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -var _defaultsEs = __webpack_require__(/*! ./defaults.es.js */ "../../../node_modules/@motionone/generators/dist/spring/defaults.es.js"); -var _utilsEs = __webpack_require__(/*! ./utils.es.js */ "../../../node_modules/@motionone/generators/dist/spring/utils.es.js"); -var _hasReachedTargetEs = __webpack_require__(/*! ../utils/has-reached-target.es.js */ "../../../node_modules/@motionone/generators/dist/utils/has-reached-target.es.js"); -var _velocityEs = __webpack_require__(/*! ../utils/velocity.es.js */ "../../../node_modules/@motionone/generators/dist/utils/velocity.es.js"); -const spring = function () { - let { - stiffness = _defaultsEs.defaults.stiffness, - damping = _defaultsEs.defaults.damping, - mass = _defaultsEs.defaults.mass, - from = 0, - to = 1, - velocity = 0.0, - restSpeed = 2, - restDistance = 0.5 - } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - velocity = velocity ? _utils.time.s(velocity) : 0.0; - const state = { - done: false, - hasReachedTarget: false, - current: from, - target: to - }; - const initialDelta = to - from; - const undampedAngularFreq = Math.sqrt(stiffness / mass) / 1000; - const dampingRatio = (0, _utilsEs.calcDampingRatio)(stiffness, damping, mass); - let resolveSpring; - if (dampingRatio < 1) { - const angularFreq = undampedAngularFreq * Math.sqrt(1 - dampingRatio * dampingRatio); - // Underdamped spring (bouncy) - resolveSpring = t => to - Math.exp(-dampingRatio * undampedAngularFreq * t) * ((-velocity + dampingRatio * undampedAngularFreq * initialDelta) / angularFreq * Math.sin(angularFreq * t) + initialDelta * Math.cos(angularFreq * t)); - } else { - // Critically damped spring - resolveSpring = t => { - return to - Math.exp(-undampedAngularFreq * t) * (initialDelta + (-velocity + undampedAngularFreq * initialDelta) * t); - }; - } - return t => { - state.current = resolveSpring(t); - const currentVelocity = t === 0 ? velocity : (0, _velocityEs.calcGeneratorVelocity)(resolveSpring, t, state.current); - const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed; - const isBelowDisplacementThreshold = Math.abs(to - state.current) <= restDistance; - state.done = isBelowVelocityThreshold && isBelowDisplacementThreshold; - state.hasReachedTarget = (0, _hasReachedTargetEs.hasReachedTarget)(from, to, state.current); - return state; - }; -}; -exports.spring = spring; - -/***/ }), - -/***/ "../../../node_modules/@motionone/generators/dist/spring/utils.es.js": -/*!***************************************************************************!*\ - !*** ../../../node_modules/@motionone/generators/dist/spring/utils.es.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.calcDampingRatio = void 0; -var _defaultsEs = __webpack_require__(/*! ./defaults.es.js */ "../../../node_modules/@motionone/generators/dist/spring/defaults.es.js"); -const calcDampingRatio = function () { - let stiffness = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _defaultsEs.defaults.stiffness; - let damping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _defaultsEs.defaults.damping; - let mass = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _defaultsEs.defaults.mass; - return damping / (2 * Math.sqrt(stiffness * mass)); -}; -exports.calcDampingRatio = calcDampingRatio; - -/***/ }), - -/***/ "../../../node_modules/@motionone/generators/dist/utils/has-reached-target.es.js": -/*!***************************************************************************************!*\ - !*** ../../../node_modules/@motionone/generators/dist/utils/has-reached-target.es.js ***! - \***************************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.hasReachedTarget = hasReachedTarget; -function hasReachedTarget(origin, target, current) { - return origin < target && current >= target || origin > target && current <= target; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/generators/dist/utils/pregenerate-keyframes.es.js": -/*!******************************************************************************************!*\ - !*** ../../../node_modules/@motionone/generators/dist/utils/pregenerate-keyframes.es.js ***! - \******************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.pregenerateKeyframes = pregenerateKeyframes; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -const timeStep = 10; -const maxDuration = 10000; -function pregenerateKeyframes(generator) { - let toUnit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.noopReturn; - let overshootDuration = undefined; - let timestamp = timeStep; - let state = generator(0); - const keyframes = [toUnit(state.current)]; - while (!state.done && timestamp < maxDuration) { - state = generator(timestamp); - keyframes.push(toUnit(state.done ? state.target : state.current)); - if (overshootDuration === undefined && state.hasReachedTarget) { - overshootDuration = timestamp; - } - timestamp += timeStep; - } - const duration = timestamp - timeStep; - /** - * If generating an animation that didn't actually move, - * generate a second keyframe so we have an origin and target. - */ - if (keyframes.length === 1) keyframes.push(state.current); - return { - keyframes, - duration: duration / 1000, - overshootDuration: (overshootDuration !== null && overshootDuration !== void 0 ? overshootDuration : duration) / 1000 - }; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/generators/dist/utils/velocity.es.js": -/*!*****************************************************************************!*\ - !*** ../../../node_modules/@motionone/generators/dist/utils/velocity.es.js ***! - \*****************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.calcGeneratorVelocity = calcGeneratorVelocity; -var _utils = __webpack_require__(/*! @motionone/utils */ "../../../node_modules/@motionone/utils/dist/index.es.js"); -const sampleT = 5; // ms -function calcGeneratorVelocity(resolveValue, t, current) { - const prevT = Math.max(t - sampleT, 0); - return (0, _utils.velocityPerSecond)(current - resolveValue(prevT), t - prevT); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/types/dist/MotionValue.es.js": -/*!*********************************************************************!*\ - !*** ../../../node_modules/@motionone/types/dist/MotionValue.es.js ***! - \*********************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MotionValue = void 0; -/** - * The MotionValue tracks the state of a single animatable - * value. Currently, updatedAt and current are unused. The - * long term idea is to use this to minimise the number - * of DOM reads, and to abstract the DOM interactions here. - */ -class MotionValue { - setAnimation(animation) { - this.animation = animation; - animation === null || animation === void 0 ? void 0 : animation.finished.then(() => this.clearAnimation()).catch(() => {}); - } - clearAnimation() { - this.animation = this.generator = undefined; - } -} -exports.MotionValue = MotionValue; - -/***/ }), - -/***/ "../../../node_modules/@motionone/types/dist/index.es.js": -/*!***************************************************************!*\ - !*** ../../../node_modules/@motionone/types/dist/index.es.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "MotionValue", ({ - enumerable: true, - get: function () { - return _MotionValueEs.MotionValue; - } -})); -var _MotionValueEs = __webpack_require__(/*! ./MotionValue.es.js */ "../../../node_modules/@motionone/types/dist/MotionValue.es.js"); - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/array.es.js": -/*!***************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/array.es.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.addUniqueItem = addUniqueItem; -exports.removeItem = removeItem; -function addUniqueItem(array, item) { - array.indexOf(item) === -1 && array.push(item); -} -function removeItem(arr, item) { - const index = arr.indexOf(item); - index > -1 && arr.splice(index, 1); -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/clamp.es.js": -/*!***************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/clamp.es.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.clamp = void 0; -const clamp = (min, max, v) => Math.min(Math.max(v, min), max); -exports.clamp = clamp; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/defaults.es.js": -/*!******************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/defaults.es.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.defaults = void 0; -const defaults = { - duration: 0.3, - delay: 0, - endDelay: 0, - repeat: 0, - easing: "ease" -}; -exports.defaults = defaults; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/easing.es.js": -/*!****************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/easing.es.js ***! - \****************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getEasingForSegment = getEasingForSegment; -var _isEasingListEs = __webpack_require__(/*! ./is-easing-list.es.js */ "../../../node_modules/@motionone/utils/dist/is-easing-list.es.js"); -var _wrapEs = __webpack_require__(/*! ./wrap.es.js */ "../../../node_modules/@motionone/utils/dist/wrap.es.js"); -function getEasingForSegment(easing, i) { - return (0, _isEasingListEs.isEasingList)(easing) ? easing[(0, _wrapEs.wrap)(0, easing.length, i)] : easing; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/index.es.js": -/*!***************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/index.es.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "addUniqueItem", ({ - enumerable: true, - get: function () { - return _arrayEs.addUniqueItem; - } -})); -Object.defineProperty(exports, "clamp", ({ - enumerable: true, - get: function () { - return _clampEs.clamp; - } -})); -Object.defineProperty(exports, "defaultOffset", ({ - enumerable: true, - get: function () { - return _offsetEs.defaultOffset; - } -})); -Object.defineProperty(exports, "defaults", ({ - enumerable: true, - get: function () { - return _defaultsEs.defaults; - } -})); -Object.defineProperty(exports, "fillOffset", ({ - enumerable: true, - get: function () { - return _offsetEs.fillOffset; - } -})); -Object.defineProperty(exports, "getEasingForSegment", ({ - enumerable: true, - get: function () { - return _easingEs.getEasingForSegment; - } -})); -Object.defineProperty(exports, "interpolate", ({ - enumerable: true, - get: function () { - return _interpolateEs.interpolate; - } -})); -Object.defineProperty(exports, "isCubicBezier", ({ - enumerable: true, - get: function () { - return _isCubicBezierEs.isCubicBezier; - } -})); -Object.defineProperty(exports, "isEasingGenerator", ({ - enumerable: true, - get: function () { - return _isEasingGeneratorEs.isEasingGenerator; - } -})); -Object.defineProperty(exports, "isEasingList", ({ - enumerable: true, - get: function () { - return _isEasingListEs.isEasingList; - } -})); -Object.defineProperty(exports, "isFunction", ({ - enumerable: true, - get: function () { - return _isFunctionEs.isFunction; - } -})); -Object.defineProperty(exports, "isNumber", ({ - enumerable: true, - get: function () { - return _isNumberEs.isNumber; - } -})); -Object.defineProperty(exports, "isString", ({ - enumerable: true, - get: function () { - return _isStringEs.isString; - } -})); -Object.defineProperty(exports, "mix", ({ - enumerable: true, - get: function () { - return _mixEs.mix; - } -})); -Object.defineProperty(exports, "noop", ({ - enumerable: true, - get: function () { - return _noopEs.noop; - } -})); -Object.defineProperty(exports, "noopReturn", ({ - enumerable: true, - get: function () { - return _noopEs.noopReturn; - } -})); -Object.defineProperty(exports, "progress", ({ - enumerable: true, - get: function () { - return _progressEs.progress; - } -})); -Object.defineProperty(exports, "removeItem", ({ - enumerable: true, - get: function () { - return _arrayEs.removeItem; - } -})); -Object.defineProperty(exports, "time", ({ - enumerable: true, - get: function () { - return _timeEs.time; - } -})); -Object.defineProperty(exports, "velocityPerSecond", ({ - enumerable: true, - get: function () { - return _velocityEs.velocityPerSecond; - } -})); -Object.defineProperty(exports, "wrap", ({ - enumerable: true, - get: function () { - return _wrapEs.wrap; - } -})); -var _arrayEs = __webpack_require__(/*! ./array.es.js */ "../../../node_modules/@motionone/utils/dist/array.es.js"); -var _clampEs = __webpack_require__(/*! ./clamp.es.js */ "../../../node_modules/@motionone/utils/dist/clamp.es.js"); -var _defaultsEs = __webpack_require__(/*! ./defaults.es.js */ "../../../node_modules/@motionone/utils/dist/defaults.es.js"); -var _easingEs = __webpack_require__(/*! ./easing.es.js */ "../../../node_modules/@motionone/utils/dist/easing.es.js"); -var _interpolateEs = __webpack_require__(/*! ./interpolate.es.js */ "../../../node_modules/@motionone/utils/dist/interpolate.es.js"); -var _isCubicBezierEs = __webpack_require__(/*! ./is-cubic-bezier.es.js */ "../../../node_modules/@motionone/utils/dist/is-cubic-bezier.es.js"); -var _isEasingGeneratorEs = __webpack_require__(/*! ./is-easing-generator.es.js */ "../../../node_modules/@motionone/utils/dist/is-easing-generator.es.js"); -var _isEasingListEs = __webpack_require__(/*! ./is-easing-list.es.js */ "../../../node_modules/@motionone/utils/dist/is-easing-list.es.js"); -var _isFunctionEs = __webpack_require__(/*! ./is-function.es.js */ "../../../node_modules/@motionone/utils/dist/is-function.es.js"); -var _isNumberEs = __webpack_require__(/*! ./is-number.es.js */ "../../../node_modules/@motionone/utils/dist/is-number.es.js"); -var _isStringEs = __webpack_require__(/*! ./is-string.es.js */ "../../../node_modules/@motionone/utils/dist/is-string.es.js"); -var _mixEs = __webpack_require__(/*! ./mix.es.js */ "../../../node_modules/@motionone/utils/dist/mix.es.js"); -var _noopEs = __webpack_require__(/*! ./noop.es.js */ "../../../node_modules/@motionone/utils/dist/noop.es.js"); -var _offsetEs = __webpack_require__(/*! ./offset.es.js */ "../../../node_modules/@motionone/utils/dist/offset.es.js"); -var _progressEs = __webpack_require__(/*! ./progress.es.js */ "../../../node_modules/@motionone/utils/dist/progress.es.js"); -var _timeEs = __webpack_require__(/*! ./time.es.js */ "../../../node_modules/@motionone/utils/dist/time.es.js"); -var _velocityEs = __webpack_require__(/*! ./velocity.es.js */ "../../../node_modules/@motionone/utils/dist/velocity.es.js"); -var _wrapEs = __webpack_require__(/*! ./wrap.es.js */ "../../../node_modules/@motionone/utils/dist/wrap.es.js"); - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/interpolate.es.js": -/*!*********************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/interpolate.es.js ***! - \*********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.interpolate = interpolate; -var _mixEs = __webpack_require__(/*! ./mix.es.js */ "../../../node_modules/@motionone/utils/dist/mix.es.js"); -var _noopEs = __webpack_require__(/*! ./noop.es.js */ "../../../node_modules/@motionone/utils/dist/noop.es.js"); -var _offsetEs = __webpack_require__(/*! ./offset.es.js */ "../../../node_modules/@motionone/utils/dist/offset.es.js"); -var _progressEs = __webpack_require__(/*! ./progress.es.js */ "../../../node_modules/@motionone/utils/dist/progress.es.js"); -var _easingEs = __webpack_require__(/*! ./easing.es.js */ "../../../node_modules/@motionone/utils/dist/easing.es.js"); -var _clampEs = __webpack_require__(/*! ./clamp.es.js */ "../../../node_modules/@motionone/utils/dist/clamp.es.js"); -function interpolate(output) { - let input = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (0, _offsetEs.defaultOffset)(output.length); - let easing = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _noopEs.noopReturn; - const length = output.length; - /** - * If the input length is lower than the output we - * fill the input to match. This currently assumes the input - * is an animation progress value so is a good candidate for - * moving outside the function. - */ - const remainder = length - input.length; - remainder > 0 && (0, _offsetEs.fillOffset)(input, remainder); - return t => { - let i = 0; - for (; i < length - 2; i++) { - if (t < input[i + 1]) break; - } - let progressInRange = (0, _clampEs.clamp)(0, 1, (0, _progressEs.progress)(input[i], input[i + 1], t)); - const segmentEasing = (0, _easingEs.getEasingForSegment)(easing, i); - progressInRange = segmentEasing(progressInRange); - return (0, _mixEs.mix)(output[i], output[i + 1], progressInRange); - }; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/is-cubic-bezier.es.js": -/*!*************************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/is-cubic-bezier.es.js ***! - \*************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isCubicBezier = void 0; -var _isNumberEs = __webpack_require__(/*! ./is-number.es.js */ "../../../node_modules/@motionone/utils/dist/is-number.es.js"); -const isCubicBezier = easing => Array.isArray(easing) && (0, _isNumberEs.isNumber)(easing[0]); -exports.isCubicBezier = isCubicBezier; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/is-easing-generator.es.js": -/*!*****************************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/is-easing-generator.es.js ***! - \*****************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isEasingGenerator = void 0; -const isEasingGenerator = easing => typeof easing === "object" && Boolean(easing.createAnimation); -exports.isEasingGenerator = isEasingGenerator; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/is-easing-list.es.js": -/*!************************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/is-easing-list.es.js ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isEasingList = void 0; -var _isNumberEs = __webpack_require__(/*! ./is-number.es.js */ "../../../node_modules/@motionone/utils/dist/is-number.es.js"); -const isEasingList = easing => Array.isArray(easing) && !(0, _isNumberEs.isNumber)(easing[0]); -exports.isEasingList = isEasingList; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/is-function.es.js": -/*!*********************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/is-function.es.js ***! - \*********************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isFunction = void 0; -const isFunction = value => typeof value === "function"; -exports.isFunction = isFunction; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/is-number.es.js": -/*!*******************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/is-number.es.js ***! - \*******************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isNumber = void 0; -const isNumber = value => typeof value === "number"; -exports.isNumber = isNumber; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/is-string.es.js": -/*!*******************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/is-string.es.js ***! - \*******************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isString = void 0; -const isString = value => typeof value === "string"; -exports.isString = isString; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/mix.es.js": -/*!*************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/mix.es.js ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.mix = void 0; -const mix = (min, max, progress) => -progress * min + progress * max + min; -exports.mix = mix; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/noop.es.js": -/*!**************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/noop.es.js ***! - \**************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.noopReturn = exports.noop = void 0; -const noop = () => {}; -exports.noop = noop; -const noopReturn = v => v; -exports.noopReturn = noopReturn; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/offset.es.js": -/*!****************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/offset.es.js ***! - \****************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.defaultOffset = defaultOffset; -exports.fillOffset = fillOffset; -var _mixEs = __webpack_require__(/*! ./mix.es.js */ "../../../node_modules/@motionone/utils/dist/mix.es.js"); -var _progressEs = __webpack_require__(/*! ./progress.es.js */ "../../../node_modules/@motionone/utils/dist/progress.es.js"); -function fillOffset(offset, remaining) { - const min = offset[offset.length - 1]; - for (let i = 1; i <= remaining; i++) { - const offsetProgress = (0, _progressEs.progress)(0, remaining, i); - offset.push((0, _mixEs.mix)(min, 1, offsetProgress)); - } -} -function defaultOffset(length) { - const offset = [0]; - fillOffset(offset, length - 1); - return offset; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/progress.es.js": -/*!******************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/progress.es.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.progress = void 0; -const progress = (min, max, value) => max - min === 0 ? 1 : (value - min) / (max - min); -exports.progress = progress; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/time.es.js": -/*!**************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/time.es.js ***! - \**************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.time = void 0; -const time = { - ms: seconds => seconds * 1000, - s: milliseconds => milliseconds / 1000 -}; -exports.time = time; - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/velocity.es.js": -/*!******************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/velocity.es.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.velocityPerSecond = velocityPerSecond; -/* - Convert velocity into velocity per second - - @param [number]: Unit per frame - @param [number]: Frame duration in ms -*/ -function velocityPerSecond(velocity, frameDuration) { - return frameDuration ? velocity * (1000 / frameDuration) : 0; -} - -/***/ }), - -/***/ "../../../node_modules/@motionone/utils/dist/wrap.es.js": -/*!**************************************************************!*\ - !*** ../../../node_modules/@motionone/utils/dist/wrap.es.js ***! - \**************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.wrap = void 0; -const wrap = (min, max, v) => { - const rangeSize = max - min; - return ((v - min) % rangeSize + rangeSize) % rangeSize + min; -}; -exports.wrap = wrap; - -/***/ }), - -/***/ "../../../node_modules/@n1ru4l/push-pull-async-iterable-iterator/index.js": -/*!********************************************************************************!*\ - !*** ../../../node_modules/@n1ru4l/push-pull-async-iterable-iterator/index.js ***! - \********************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -function createDeferred() { - const d = {}; - d.promise = new Promise((resolve, reject) => { - d.resolve = resolve; - d.reject = reject; - }); - return d; -} -const SYMBOL_FINISHED = Symbol(); -const SYMBOL_NEW_VALUE = Symbol(); -/** - * makePushPullAsyncIterableIterator - * - * The iterable will publish values until return or throw is called. - * Afterwards it is in the completed state and cannot be used for publishing any further values. - * It will handle back-pressure and keep pushed values until they are consumed by a source. - */ -function makePushPullAsyncIterableIterator() { - let isRunning = true; - const values = []; - let newValueD = createDeferred(); - const finishedD = createDeferred(); - const asyncIterableIterator = async function* PushPullAsyncIterableIterator() { - while (true) { - if (values.length > 0) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - yield values.shift(); - } else { - const result = await Promise.race([newValueD.promise, finishedD.promise]); - if (result === SYMBOL_FINISHED) { - break; - } - if (result !== SYMBOL_NEW_VALUE) { - throw result; - } - } - } - }(); - function pushValue(value) { - if (isRunning === false) { - // TODO: Should this throw? - return; - } - values.push(value); - newValueD.resolve(SYMBOL_NEW_VALUE); - newValueD = createDeferred(); - } - // We monkey patch the original generator for clean-up - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const originalReturn = asyncIterableIterator.return.bind(asyncIterableIterator); - asyncIterableIterator.return = function () { - isRunning = false; - finishedD.resolve(SYMBOL_FINISHED); - return originalReturn(...arguments); - }; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const originalThrow = asyncIterableIterator.throw.bind(asyncIterableIterator); - asyncIterableIterator.throw = err => { - isRunning = false; - finishedD.resolve(err); - return originalThrow(err); - }; - return { - pushValue, - asyncIterableIterator - }; -} -const makeAsyncIterableIteratorFromSink = make => { - const { - pushValue, - asyncIterableIterator - } = makePushPullAsyncIterableIterator(); - const dispose = make({ - next: value => { - pushValue(value); - }, - complete: () => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - asyncIterableIterator.return(); - }, - error: err => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - asyncIterableIterator.throw(err); - } - }); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const originalReturn = asyncIterableIterator.return; - let returnValue = undefined; - asyncIterableIterator.return = () => { - if (returnValue === undefined) { - dispose(); - returnValue = originalReturn(); - } - return returnValue; - }; - return asyncIterableIterator; -}; -function applyAsyncIterableIteratorToSink(asyncIterableIterator, sink) { - const run = async () => { - try { - for await (const value of asyncIterableIterator) { - sink.next(value); - } - sink.complete(); - } catch (err) { - sink.error(err); - } - }; - run(); - return () => { - var _a; - (_a = asyncIterableIterator.return) === null || _a === void 0 ? void 0 : _a.call(asyncIterableIterator); - }; -} -function isAsyncIterable(input) { - return typeof input === "object" && input !== null && ( - // The AsyncGenerator check is for Safari on iOS which currently does not have - // Symbol.asyncIterator implemented - // That means every custom AsyncIterable must be built using a AsyncGeneratorFunction (async function * () {}) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - input[Symbol.toStringTag] === "AsyncGenerator" || Symbol.asyncIterator && Symbol.asyncIterator in input); -} -exports.applyAsyncIterableIteratorToSink = applyAsyncIterableIteratorToSink; -exports.isAsyncIterable = isAsyncIterable; -exports.makeAsyncIterableIteratorFromSink = makeAsyncIterableIteratorFromSink; -exports.makePushPullAsyncIterableIterator = makePushPullAsyncIterableIterator; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/primitive/dist/index.js": -/*!***************************************************************!*\ - !*** ../../../node_modules/@radix-ui/primitive/dist/index.js ***! - \***************************************************************/ -/***/ (function(module) { - - - -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "composeEventHandlers", () => $1a6a90a521dcd173$export$b9ecd428b558ff10); -function $1a6a90a521dcd173$export$b9ecd428b558ff10(originalEventHandler, ourEventHandler) { - let { - checkForDefaultPrevented = true - } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - return function handleEvent(event) { - originalEventHandler === null || originalEventHandler === void 0 || originalEventHandler(event); - if (checkForDefaultPrevented === false || !event.defaultPrevented) return ourEventHandler === null || ourEventHandler === void 0 ? void 0 : ourEventHandler(event); - }; -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-arrow/dist/index.js": -/*!*****************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-arrow/dist/index.js ***! - \*****************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $eQpDd$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $eQpDd$react = __webpack_require__(/*! react */ "react"); -var $eQpDd$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "Arrow", () => $09f4ad68a9251bc3$export$21b07c8f274aebd5); -$parcel$export(module.exports, "Root", () => $09f4ad68a9251bc3$export$be92b6f5f03c0fe9); - -/* ------------------------------------------------------------------------------------------------- - * Arrow - * -----------------------------------------------------------------------------------------------*/ -const $09f4ad68a9251bc3$var$NAME = 'Arrow'; -const $09f4ad68a9251bc3$export$21b07c8f274aebd5 = /*#__PURE__*/$eQpDd$react.forwardRef((props, forwardedRef) => { - const { - children: children, - width = 10, - height = 5, - ...arrowProps - } = props; - return /*#__PURE__*/$eQpDd$react.createElement($eQpDd$radixuireactprimitive.Primitive.svg, $parcel$interopDefault($eQpDd$babelruntimehelpersextends)({}, arrowProps, { - ref: forwardedRef, - width: width, - height: height, - viewBox: "0 0 30 10", - preserveAspectRatio: "none" - }), props.asChild ? children : /*#__PURE__*/$eQpDd$react.createElement("polygon", { - points: "0,0 30,0 15,10" - })); -}); -/*#__PURE__*/ -Object.assign($09f4ad68a9251bc3$export$21b07c8f274aebd5, { - displayName: $09f4ad68a9251bc3$var$NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -const $09f4ad68a9251bc3$export$be92b6f5f03c0fe9 = $09f4ad68a9251bc3$export$21b07c8f274aebd5; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-collection/dist/index.js": -/*!**********************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-collection/dist/index.js ***! - \**********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $hnlpS$react = __webpack_require__(/*! react */ "react"); -var $hnlpS$radixuireactcontext = __webpack_require__(/*! @radix-ui/react-context */ "../../../node_modules/@radix-ui/react-context/dist/index.js"); -var $hnlpS$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $hnlpS$radixuireactslot = __webpack_require__(/*! @radix-ui/react-slot */ "../../../node_modules/@radix-ui/react-slot/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "createCollection", () => $1a96635ec239608b$export$c74125a8e3af6bb2); - -// We have resorted to returning slots directly rather than exposing primitives that can then -// be slotted like ``. -// This is because we encountered issues with generic types that cannot be statically analysed -// due to creating them dynamically via createCollection. -function $1a96635ec239608b$export$c74125a8e3af6bb2(name) { - /* ----------------------------------------------------------------------------------------------- - * CollectionProvider - * ---------------------------------------------------------------------------------------------*/ - const PROVIDER_NAME = name + 'CollectionProvider'; - const [createCollectionContext, createCollectionScope] = $hnlpS$radixuireactcontext.createContextScope(PROVIDER_NAME); - const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(PROVIDER_NAME, { - collectionRef: { - current: null - }, - itemMap: new Map() - }); - const CollectionProvider = props => { - const { - scope: scope, - children: children - } = props; - const ref = $parcel$interopDefault($hnlpS$react).useRef(null); - const itemMap = $parcel$interopDefault($hnlpS$react).useRef(new Map()).current; - return /*#__PURE__*/$parcel$interopDefault($hnlpS$react).createElement(CollectionProviderImpl, { - scope: scope, - itemMap: itemMap, - collectionRef: ref - }, children); - }; - /*#__PURE__*/ - Object.assign(CollectionProvider, { - displayName: PROVIDER_NAME - }); - /* ----------------------------------------------------------------------------------------------- - * CollectionSlot - * ---------------------------------------------------------------------------------------------*/ - const COLLECTION_SLOT_NAME = name + 'CollectionSlot'; - const CollectionSlot = /*#__PURE__*/$parcel$interopDefault($hnlpS$react).forwardRef((props, forwardedRef) => { - const { - scope: scope, - children: children - } = props; - const context = useCollectionContext(COLLECTION_SLOT_NAME, scope); - const composedRefs = $hnlpS$radixuireactcomposerefs.useComposedRefs(forwardedRef, context.collectionRef); - return /*#__PURE__*/$parcel$interopDefault($hnlpS$react).createElement($hnlpS$radixuireactslot.Slot, { - ref: composedRefs - }, children); - }); - /*#__PURE__*/ - Object.assign(CollectionSlot, { - displayName: COLLECTION_SLOT_NAME - }); - /* ----------------------------------------------------------------------------------------------- - * CollectionItem - * ---------------------------------------------------------------------------------------------*/ - const ITEM_SLOT_NAME = name + 'CollectionItemSlot'; - const ITEM_DATA_ATTR = 'data-radix-collection-item'; - const CollectionItemSlot = /*#__PURE__*/$parcel$interopDefault($hnlpS$react).forwardRef((props, forwardedRef) => { - const { - scope: scope, - children: children, - ...itemData - } = props; - const ref = $parcel$interopDefault($hnlpS$react).useRef(null); - const composedRefs = $hnlpS$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); - const context = useCollectionContext(ITEM_SLOT_NAME, scope); - $parcel$interopDefault($hnlpS$react).useEffect(() => { - context.itemMap.set(ref, { - ref: ref, - ...itemData - }); - return () => void context.itemMap.delete(ref); - }); - return /*#__PURE__*/$parcel$interopDefault($hnlpS$react).createElement($hnlpS$radixuireactslot.Slot, { - [ITEM_DATA_ATTR]: '', - ref: composedRefs - }, children); - }); - /*#__PURE__*/ - Object.assign(CollectionItemSlot, { - displayName: ITEM_SLOT_NAME - }); - /* ----------------------------------------------------------------------------------------------- - * useCollection - * ---------------------------------------------------------------------------------------------*/ - function useCollection(scope) { - const context = useCollectionContext(name + 'CollectionConsumer', scope); - const getItems = $parcel$interopDefault($hnlpS$react).useCallback(() => { - const collectionNode = context.collectionRef.current; - if (!collectionNode) return []; - const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`)); - const items = Array.from(context.itemMap.values()); - const orderedItems = items.sort((a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)); - return orderedItems; - }, [context.collectionRef, context.itemMap]); - return getItems; - } - return [{ - Provider: CollectionProvider, - Slot: CollectionSlot, - ItemSlot: CollectionItemSlot - }, useCollection, createCollectionScope]; -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js": -/*!************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-compose-refs/dist/index.js ***! - \************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $dJwbH$react = __webpack_require__(/*! react */ "react"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "composeRefs", () => $9c2aaba23466b352$export$43e446d32b3d21af); -$parcel$export(module.exports, "useComposedRefs", () => $9c2aaba23466b352$export$c7b2cbe3552a0d05); - -/** - * Set a given ref to a given value - * This utility takes care of different types of refs: callback refs and RefObject(s) - */ -function $9c2aaba23466b352$var$setRef(ref, value) { - if (typeof ref === 'function') ref(value);else if (ref !== null && ref !== undefined) ref.current = value; -} -/** - * A utility to compose multiple refs together - * Accepts callback refs and RefObject(s) - */ -function $9c2aaba23466b352$export$43e446d32b3d21af() { - for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) { - refs[_key] = arguments[_key]; - } - return node => refs.forEach(ref => $9c2aaba23466b352$var$setRef(ref, node)); -} -/** - * A custom hook that composes multiple refs - * Accepts callback refs and RefObject(s) - */ -function $9c2aaba23466b352$export$c7b2cbe3552a0d05() { - for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - refs[_key2] = arguments[_key2]; - } - // eslint-disable-next-line react-hooks/exhaustive-deps - return $dJwbH$react.useCallback($9c2aaba23466b352$export$43e446d32b3d21af(...refs), refs); -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-context/dist/index.js": -/*!*******************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-context/dist/index.js ***! - \*******************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $4O1Ne$react = __webpack_require__(/*! react */ "react"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "createContext", () => $dec3cc0142d4f286$export$fd42f52fd3ae1109); -$parcel$export(module.exports, "createContextScope", () => $dec3cc0142d4f286$export$50c7b4e9d9f19c1); -function $dec3cc0142d4f286$export$fd42f52fd3ae1109(rootComponentName, defaultContext) { - const Context = /*#__PURE__*/$4O1Ne$react.createContext(defaultContext); - function Provider(props) { - const { - children: children, - ...context - } = props; // Only re-memoize when prop values change - // eslint-disable-next-line react-hooks/exhaustive-deps - const value = $4O1Ne$react.useMemo(() => context, Object.values(context)); - return /*#__PURE__*/$4O1Ne$react.createElement(Context.Provider, { - value: value - }, children); - } - function useContext(consumerName) { - const context = $4O1Ne$react.useContext(Context); - if (context) return context; - if (defaultContext !== undefined) return defaultContext; // if a defaultContext wasn't specified, it's a required context. - throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); - } - Provider.displayName = rootComponentName + 'Provider'; - return [Provider, useContext]; -} -/* ------------------------------------------------------------------------------------------------- - * createContextScope - * -----------------------------------------------------------------------------------------------*/ -function $dec3cc0142d4f286$export$50c7b4e9d9f19c1(scopeName) { - let createContextScopeDeps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - let defaultContexts = []; - /* ----------------------------------------------------------------------------------------------- - * createContext - * ---------------------------------------------------------------------------------------------*/ - function $dec3cc0142d4f286$export$fd42f52fd3ae1109(rootComponentName, defaultContext) { - const BaseContext = /*#__PURE__*/$4O1Ne$react.createContext(defaultContext); - const index = defaultContexts.length; - defaultContexts = [...defaultContexts, defaultContext]; - function Provider(props) { - const { - scope: scope, - children: children, - ...context - } = props; - const Context = (scope === null || scope === void 0 ? void 0 : scope[scopeName][index]) || BaseContext; // Only re-memoize when prop values change - // eslint-disable-next-line react-hooks/exhaustive-deps - const value = $4O1Ne$react.useMemo(() => context, Object.values(context)); - return /*#__PURE__*/$4O1Ne$react.createElement(Context.Provider, { - value: value - }, children); - } - function useContext(consumerName, scope) { - const Context = (scope === null || scope === void 0 ? void 0 : scope[scopeName][index]) || BaseContext; - const context = $4O1Ne$react.useContext(Context); - if (context) return context; - if (defaultContext !== undefined) return defaultContext; // if a defaultContext wasn't specified, it's a required context. - throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); - } - Provider.displayName = rootComponentName + 'Provider'; - return [Provider, useContext]; - } - /* ----------------------------------------------------------------------------------------------- - * createScope - * ---------------------------------------------------------------------------------------------*/ - const createScope = () => { - const scopeContexts = defaultContexts.map(defaultContext => { - return /*#__PURE__*/$4O1Ne$react.createContext(defaultContext); - }); - return function useScope(scope) { - const contexts = (scope === null || scope === void 0 ? void 0 : scope[scopeName]) || scopeContexts; - return $4O1Ne$react.useMemo(() => ({ - [`__scope${scopeName}`]: { - ...scope, - [scopeName]: contexts - } - }), [scope, contexts]); - }; - }; - createScope.scopeName = scopeName; - return [$dec3cc0142d4f286$export$fd42f52fd3ae1109, $dec3cc0142d4f286$var$composeContextScopes(createScope, ...createContextScopeDeps)]; -} -/* ------------------------------------------------------------------------------------------------- - * composeContextScopes - * -----------------------------------------------------------------------------------------------*/ -function $dec3cc0142d4f286$var$composeContextScopes() { - for (var _len = arguments.length, scopes = new Array(_len), _key = 0; _key < _len; _key++) { - scopes[_key] = arguments[_key]; - } - const baseScope = scopes[0]; - if (scopes.length === 1) return baseScope; - const createScope1 = () => { - const scopeHooks = scopes.map(createScope => ({ - useScope: createScope(), - scopeName: createScope.scopeName - })); - return function useComposedScopes(overrideScopes) { - const nextScopes1 = scopeHooks.reduce((nextScopes, _ref) => { - let { - useScope: useScope, - scopeName: scopeName - } = _ref; - // We are calling a hook inside a callback which React warns against to avoid inconsistent - // renders, however, scoping doesn't have render side effects so we ignore the rule. - // eslint-disable-next-line react-hooks/rules-of-hooks - const scopeProps = useScope(overrideScopes); - const currentScope = scopeProps[`__scope${scopeName}`]; - return { - ...nextScopes, - ...currentScope - }; - }, {}); - return $4O1Ne$react.useMemo(() => ({ - [`__scope${baseScope.scopeName}`]: nextScopes1 - }), [nextScopes1]); - }; - }; - createScope1.scopeName = baseScope.scopeName; - return createScope1; -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-dialog/dist/index.js": -/*!******************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-dialog/dist/index.js ***! - \******************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $aJCrN$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $aJCrN$react = __webpack_require__(/*! react */ "react"); -var $aJCrN$radixuiprimitive = __webpack_require__(/*! @radix-ui/primitive */ "../../../node_modules/@radix-ui/primitive/dist/index.js"); -var $aJCrN$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $aJCrN$radixuireactcontext = __webpack_require__(/*! @radix-ui/react-context */ "../../../node_modules/@radix-ui/react-context/dist/index.js"); -var $aJCrN$radixuireactid = __webpack_require__(/*! @radix-ui/react-id */ "../../../node_modules/@radix-ui/react-id/dist/index.js"); -var $aJCrN$radixuireactusecontrollablestate = __webpack_require__(/*! @radix-ui/react-use-controllable-state */ "../../../node_modules/@radix-ui/react-use-controllable-state/dist/index.js"); -var $aJCrN$radixuireactdismissablelayer = __webpack_require__(/*! @radix-ui/react-dismissable-layer */ "../../../node_modules/@radix-ui/react-dismissable-layer/dist/index.js"); -var $aJCrN$radixuireactfocusscope = __webpack_require__(/*! @radix-ui/react-focus-scope */ "../../../node_modules/@radix-ui/react-focus-scope/dist/index.js"); -var $aJCrN$radixuireactportal = __webpack_require__(/*! @radix-ui/react-portal */ "../../../node_modules/@radix-ui/react-portal/dist/index.js"); -var $aJCrN$radixuireactpresence = __webpack_require__(/*! @radix-ui/react-presence */ "../../../node_modules/@radix-ui/react-presence/dist/index.js"); -var $aJCrN$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -var $aJCrN$radixuireactfocusguards = __webpack_require__(/*! @radix-ui/react-focus-guards */ "../../../node_modules/@radix-ui/react-focus-guards/dist/index.js"); -var $aJCrN$reactremovescroll = __webpack_require__(/*! react-remove-scroll */ "../../../node_modules/react-remove-scroll/dist/es2015/index.js"); -var $aJCrN$ariahidden = __webpack_require__(/*! aria-hidden */ "../../../node_modules/aria-hidden/dist/es2015/index.js"); -var $aJCrN$radixuireactslot = __webpack_require__(/*! @radix-ui/react-slot */ "../../../node_modules/@radix-ui/react-slot/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "createDialogScope", () => $f4833395aa1bca1a$export$cc702773b8ea3e41); -$parcel$export(module.exports, "Dialog", () => $f4833395aa1bca1a$export$3ddf2d174ce01153); -$parcel$export(module.exports, "DialogTrigger", () => $f4833395aa1bca1a$export$2e1e1122cf0cba88); -$parcel$export(module.exports, "DialogPortal", () => $f4833395aa1bca1a$export$dad7c95542bacce0); -$parcel$export(module.exports, "DialogOverlay", () => $f4833395aa1bca1a$export$bd1d06c79be19e17); -$parcel$export(module.exports, "DialogContent", () => $f4833395aa1bca1a$export$b6d9565de1e068cf); -$parcel$export(module.exports, "DialogTitle", () => $f4833395aa1bca1a$export$16f7638e4a34b909); -$parcel$export(module.exports, "DialogDescription", () => $f4833395aa1bca1a$export$94e94c2ec2c954d5); -$parcel$export(module.exports, "DialogClose", () => $f4833395aa1bca1a$export$fba2fb7cd781b7ac); -$parcel$export(module.exports, "Root", () => $f4833395aa1bca1a$export$be92b6f5f03c0fe9); -$parcel$export(module.exports, "Trigger", () => $f4833395aa1bca1a$export$41fb9f06171c75f4); -$parcel$export(module.exports, "Portal", () => $f4833395aa1bca1a$export$602eac185826482c); -$parcel$export(module.exports, "Overlay", () => $f4833395aa1bca1a$export$c6fdb837b070b4ff); -$parcel$export(module.exports, "Content", () => $f4833395aa1bca1a$export$7c6e2c02157bb7d2); -$parcel$export(module.exports, "Title", () => $f4833395aa1bca1a$export$f99233281efd08a0); -$parcel$export(module.exports, "Description", () => $f4833395aa1bca1a$export$393edc798c47379d); -$parcel$export(module.exports, "Close", () => $f4833395aa1bca1a$export$f39c2d165cd861fe); -$parcel$export(module.exports, "WarningProvider", () => $f4833395aa1bca1a$export$69b62a49393917d6); - -/* ------------------------------------------------------------------------------------------------- - * Dialog - * -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$DIALOG_NAME = 'Dialog'; -const [$f4833395aa1bca1a$var$createDialogContext, $f4833395aa1bca1a$export$cc702773b8ea3e41] = $aJCrN$radixuireactcontext.createContextScope($f4833395aa1bca1a$var$DIALOG_NAME); -const [$f4833395aa1bca1a$var$DialogProvider, $f4833395aa1bca1a$var$useDialogContext] = $f4833395aa1bca1a$var$createDialogContext($f4833395aa1bca1a$var$DIALOG_NAME); -const $f4833395aa1bca1a$export$3ddf2d174ce01153 = props => { - const { - __scopeDialog: __scopeDialog, - children: children, - open: openProp, - defaultOpen: defaultOpen, - onOpenChange: onOpenChange, - modal = true - } = props; - const triggerRef = $aJCrN$react.useRef(null); - const contentRef = $aJCrN$react.useRef(null); - const [open = false, setOpen] = $aJCrN$radixuireactusecontrollablestate.useControllableState({ - prop: openProp, - defaultProp: defaultOpen, - onChange: onOpenChange - }); - return /*#__PURE__*/$aJCrN$react.createElement($f4833395aa1bca1a$var$DialogProvider, { - scope: __scopeDialog, - triggerRef: triggerRef, - contentRef: contentRef, - contentId: $aJCrN$radixuireactid.useId(), - titleId: $aJCrN$radixuireactid.useId(), - descriptionId: $aJCrN$radixuireactid.useId(), - open: open, - onOpenChange: setOpen, - onOpenToggle: $aJCrN$react.useCallback(() => setOpen(prevOpen => !prevOpen), [setOpen]), - modal: modal - }, children); -}; -/*#__PURE__*/ -Object.assign($f4833395aa1bca1a$export$3ddf2d174ce01153, { - displayName: $f4833395aa1bca1a$var$DIALOG_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DialogTrigger - * -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$TRIGGER_NAME = 'DialogTrigger'; -const $f4833395aa1bca1a$export$2e1e1122cf0cba88 = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const { - __scopeDialog: __scopeDialog, - ...triggerProps - } = props; - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$TRIGGER_NAME, __scopeDialog); - const composedTriggerRef = $aJCrN$radixuireactcomposerefs.useComposedRefs(forwardedRef, context.triggerRef); - return /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactprimitive.Primitive.button, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({ - type: "button", - "aria-haspopup": "dialog", - "aria-expanded": context.open, - "aria-controls": context.contentId, - "data-state": $f4833395aa1bca1a$var$getState(context.open) - }, triggerProps, { - ref: composedTriggerRef, - onClick: $aJCrN$radixuiprimitive.composeEventHandlers(props.onClick, context.onOpenToggle) - })); -}); -/*#__PURE__*/ -Object.assign($f4833395aa1bca1a$export$2e1e1122cf0cba88, { - displayName: $f4833395aa1bca1a$var$TRIGGER_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DialogPortal - * -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$PORTAL_NAME = 'DialogPortal'; -const [$f4833395aa1bca1a$var$PortalProvider, $f4833395aa1bca1a$var$usePortalContext] = $f4833395aa1bca1a$var$createDialogContext($f4833395aa1bca1a$var$PORTAL_NAME, { - forceMount: undefined -}); -const $f4833395aa1bca1a$export$dad7c95542bacce0 = props => { - const { - __scopeDialog: __scopeDialog, - forceMount: forceMount, - children: children, - container: container - } = props; - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$PORTAL_NAME, __scopeDialog); - return /*#__PURE__*/$aJCrN$react.createElement($f4833395aa1bca1a$var$PortalProvider, { - scope: __scopeDialog, - forceMount: forceMount - }, $aJCrN$react.Children.map(children, child => /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactpresence.Presence, { - present: forceMount || context.open - }, /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactportal.Portal, { - asChild: true, - container: container - }, child)))); -}; -/*#__PURE__*/ -Object.assign($f4833395aa1bca1a$export$dad7c95542bacce0, { - displayName: $f4833395aa1bca1a$var$PORTAL_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DialogOverlay - * -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$OVERLAY_NAME = 'DialogOverlay'; -const $f4833395aa1bca1a$export$bd1d06c79be19e17 = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const portalContext = $f4833395aa1bca1a$var$usePortalContext($f4833395aa1bca1a$var$OVERLAY_NAME, props.__scopeDialog); - const { - forceMount = portalContext.forceMount, - ...overlayProps - } = props; - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$OVERLAY_NAME, props.__scopeDialog); - return context.modal ? /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactpresence.Presence, { - present: forceMount || context.open - }, /*#__PURE__*/$aJCrN$react.createElement($f4833395aa1bca1a$var$DialogOverlayImpl, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({}, overlayProps, { - ref: forwardedRef - }))) : null; -}); -/*#__PURE__*/ -Object.assign($f4833395aa1bca1a$export$bd1d06c79be19e17, { - displayName: $f4833395aa1bca1a$var$OVERLAY_NAME -}); -const $f4833395aa1bca1a$var$DialogOverlayImpl = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const { - __scopeDialog: __scopeDialog, - ...overlayProps - } = props; - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$OVERLAY_NAME, __scopeDialog); - return /*#__PURE__*/ (// Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll` - // ie. when `Overlay` and `Content` are siblings - $aJCrN$react.createElement($aJCrN$reactremovescroll.RemoveScroll, { - as: $aJCrN$radixuireactslot.Slot, - allowPinchZoom: true, - shards: [context.contentRef] - }, /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactprimitive.Primitive.div, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({ - "data-state": $f4833395aa1bca1a$var$getState(context.open) - }, overlayProps, { - ref: forwardedRef // We re-enable pointer-events prevented by `Dialog.Content` to allow scrolling the overlay. - , - - style: { - pointerEvents: 'auto', - ...overlayProps.style - } - }))) - ); -}); -/* ------------------------------------------------------------------------------------------------- - * DialogContent - * -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$CONTENT_NAME = 'DialogContent'; -const $f4833395aa1bca1a$export$b6d9565de1e068cf = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const portalContext = $f4833395aa1bca1a$var$usePortalContext($f4833395aa1bca1a$var$CONTENT_NAME, props.__scopeDialog); - const { - forceMount = portalContext.forceMount, - ...contentProps - } = props; - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$CONTENT_NAME, props.__scopeDialog); - return /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactpresence.Presence, { - present: forceMount || context.open - }, context.modal ? /*#__PURE__*/$aJCrN$react.createElement($f4833395aa1bca1a$var$DialogContentModal, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({}, contentProps, { - ref: forwardedRef - })) : /*#__PURE__*/$aJCrN$react.createElement($f4833395aa1bca1a$var$DialogContentNonModal, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({}, contentProps, { - ref: forwardedRef - }))); -}); -/*#__PURE__*/ -Object.assign($f4833395aa1bca1a$export$b6d9565de1e068cf, { - displayName: $f4833395aa1bca1a$var$CONTENT_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$DialogContentModal = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$CONTENT_NAME, props.__scopeDialog); - const contentRef = $aJCrN$react.useRef(null); - const composedRefs = $aJCrN$radixuireactcomposerefs.useComposedRefs(forwardedRef, context.contentRef, contentRef); // aria-hide everything except the content (better supported equivalent to setting aria-modal) - $aJCrN$react.useEffect(() => { - const content = contentRef.current; - if (content) return $aJCrN$ariahidden.hideOthers(content); - }, []); - return /*#__PURE__*/$aJCrN$react.createElement($f4833395aa1bca1a$var$DialogContentImpl, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({}, props, { - ref: composedRefs // we make sure focus isn't trapped once `DialogContent` has been closed - , - - trapFocus: context.open, - disableOutsidePointerEvents: true, - onCloseAutoFocus: $aJCrN$radixuiprimitive.composeEventHandlers(props.onCloseAutoFocus, event => { - var _context$triggerRef$c; - event.preventDefault(); - (_context$triggerRef$c = context.triggerRef.current) === null || _context$triggerRef$c === void 0 || _context$triggerRef$c.focus(); - }), - onPointerDownOutside: $aJCrN$radixuiprimitive.composeEventHandlers(props.onPointerDownOutside, event => { - const originalEvent = event.detail.originalEvent; - const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true; - const isRightClick = originalEvent.button === 2 || ctrlLeftClick; // If the event is a right-click, we shouldn't close because - // it is effectively as if we right-clicked the `Overlay`. - if (isRightClick) event.preventDefault(); - }) // When focus is trapped, a `focusout` event may still happen. - , - - onFocusOutside: $aJCrN$radixuiprimitive.composeEventHandlers(props.onFocusOutside, event => event.preventDefault()) - })); -}); -/* -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$DialogContentNonModal = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$CONTENT_NAME, props.__scopeDialog); - const hasInteractedOutsideRef = $aJCrN$react.useRef(false); - const hasPointerDownOutsideRef = $aJCrN$react.useRef(false); - return /*#__PURE__*/$aJCrN$react.createElement($f4833395aa1bca1a$var$DialogContentImpl, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({}, props, { - ref: forwardedRef, - trapFocus: false, - disableOutsidePointerEvents: false, - onCloseAutoFocus: event => { - var _props$onCloseAutoFoc; - (_props$onCloseAutoFoc = props.onCloseAutoFocus) === null || _props$onCloseAutoFoc === void 0 || _props$onCloseAutoFoc.call(props, event); - if (!event.defaultPrevented) { - var _context$triggerRef$c2; - if (!hasInteractedOutsideRef.current) (_context$triggerRef$c2 = context.triggerRef.current) === null || _context$triggerRef$c2 === void 0 || _context$triggerRef$c2.focus(); // Always prevent auto focus because we either focus manually or want user agent focus - event.preventDefault(); - } - hasInteractedOutsideRef.current = false; - hasPointerDownOutsideRef.current = false; - }, - onInteractOutside: event => { - var _props$onInteractOuts, _context$triggerRef$c3; - (_props$onInteractOuts = props.onInteractOutside) === null || _props$onInteractOuts === void 0 || _props$onInteractOuts.call(props, event); - if (!event.defaultPrevented) { - hasInteractedOutsideRef.current = true; - if (event.detail.originalEvent.type === 'pointerdown') hasPointerDownOutsideRef.current = true; - } // Prevent dismissing when clicking the trigger. - // As the trigger is already setup to close, without doing so would - // cause it to close and immediately open. - const target = event.target; - const targetIsTrigger = (_context$triggerRef$c3 = context.triggerRef.current) === null || _context$triggerRef$c3 === void 0 ? void 0 : _context$triggerRef$c3.contains(target); - if (targetIsTrigger) event.preventDefault(); // On Safari if the trigger is inside a container with tabIndex={0}, when clicked - // we will get the pointer down outside event on the trigger, but then a subsequent - // focus outside event on the container, we ignore any focus outside event when we've - // already had a pointer down outside event. - if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) event.preventDefault(); - } - })); -}); -/* -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$DialogContentImpl = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const { - __scopeDialog: __scopeDialog, - trapFocus: trapFocus, - onOpenAutoFocus: onOpenAutoFocus, - onCloseAutoFocus: onCloseAutoFocus, - ...contentProps - } = props; - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$CONTENT_NAME, __scopeDialog); - const contentRef = $aJCrN$react.useRef(null); - const composedRefs = $aJCrN$radixuireactcomposerefs.useComposedRefs(forwardedRef, contentRef); // Make sure the whole tree has focus guards as our `Dialog` will be - // the last element in the DOM (beacuse of the `Portal`) - $aJCrN$radixuireactfocusguards.useFocusGuards(); - return /*#__PURE__*/$aJCrN$react.createElement($aJCrN$react.Fragment, null, /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactfocusscope.FocusScope, { - asChild: true, - loop: true, - trapped: trapFocus, - onMountAutoFocus: onOpenAutoFocus, - onUnmountAutoFocus: onCloseAutoFocus - }, /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactdismissablelayer.DismissableLayer, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({ - role: "dialog", - id: context.contentId, - "aria-describedby": context.descriptionId, - "aria-labelledby": context.titleId, - "data-state": $f4833395aa1bca1a$var$getState(context.open) - }, contentProps, { - ref: composedRefs, - onDismiss: () => context.onOpenChange(false) - }))), false); -}); -/* ------------------------------------------------------------------------------------------------- - * DialogTitle - * -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$TITLE_NAME = 'DialogTitle'; -const $f4833395aa1bca1a$export$16f7638e4a34b909 = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const { - __scopeDialog: __scopeDialog, - ...titleProps - } = props; - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$TITLE_NAME, __scopeDialog); - return /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactprimitive.Primitive.h2, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({ - id: context.titleId - }, titleProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($f4833395aa1bca1a$export$16f7638e4a34b909, { - displayName: $f4833395aa1bca1a$var$TITLE_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DialogDescription - * -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$DESCRIPTION_NAME = 'DialogDescription'; -const $f4833395aa1bca1a$export$94e94c2ec2c954d5 = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const { - __scopeDialog: __scopeDialog, - ...descriptionProps - } = props; - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$DESCRIPTION_NAME, __scopeDialog); - return /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactprimitive.Primitive.p, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({ - id: context.descriptionId - }, descriptionProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($f4833395aa1bca1a$export$94e94c2ec2c954d5, { - displayName: $f4833395aa1bca1a$var$DESCRIPTION_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DialogClose - * -----------------------------------------------------------------------------------------------*/ -const $f4833395aa1bca1a$var$CLOSE_NAME = 'DialogClose'; -const $f4833395aa1bca1a$export$fba2fb7cd781b7ac = /*#__PURE__*/$aJCrN$react.forwardRef((props, forwardedRef) => { - const { - __scopeDialog: __scopeDialog, - ...closeProps - } = props; - const context = $f4833395aa1bca1a$var$useDialogContext($f4833395aa1bca1a$var$CLOSE_NAME, __scopeDialog); - return /*#__PURE__*/$aJCrN$react.createElement($aJCrN$radixuireactprimitive.Primitive.button, $parcel$interopDefault($aJCrN$babelruntimehelpersextends)({ - type: "button" - }, closeProps, { - ref: forwardedRef, - onClick: $aJCrN$radixuiprimitive.composeEventHandlers(props.onClick, () => context.onOpenChange(false)) - })); -}); -/*#__PURE__*/ -Object.assign($f4833395aa1bca1a$export$fba2fb7cd781b7ac, { - displayName: $f4833395aa1bca1a$var$CLOSE_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -function $f4833395aa1bca1a$var$getState(open) { - return open ? 'open' : 'closed'; -} -const $f4833395aa1bca1a$var$TITLE_WARNING_NAME = 'DialogTitleWarning'; -const [$f4833395aa1bca1a$export$69b62a49393917d6, $f4833395aa1bca1a$var$useWarningContext] = $aJCrN$radixuireactcontext.createContext($f4833395aa1bca1a$var$TITLE_WARNING_NAME, { - contentName: $f4833395aa1bca1a$var$CONTENT_NAME, - titleName: $f4833395aa1bca1a$var$TITLE_NAME, - docsSlug: 'dialog' -}); -const $f4833395aa1bca1a$var$TitleWarning = _ref => { - let { - titleId: titleId - } = _ref; - const titleWarningContext = $f4833395aa1bca1a$var$useWarningContext($f4833395aa1bca1a$var$TITLE_WARNING_NAME); - const MESSAGE = `\`${titleWarningContext.contentName}\` requires a \`${titleWarningContext.titleName}\` for the component to be accessible for screen reader users. - -If you want to hide the \`${titleWarningContext.titleName}\`, you can wrap it with our VisuallyHidden component. - -For more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`; - $aJCrN$react.useEffect(() => { - if (titleId) { - const hasTitle = document.getElementById(titleId); - if (!hasTitle) throw new Error(MESSAGE); - } - }, [MESSAGE, titleId]); - return null; -}; -const $f4833395aa1bca1a$var$DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning'; -const $f4833395aa1bca1a$var$DescriptionWarning = _ref2 => { - let { - contentRef: contentRef, - descriptionId: descriptionId - } = _ref2; - const descriptionWarningContext = $f4833395aa1bca1a$var$useWarningContext($f4833395aa1bca1a$var$DESCRIPTION_WARNING_NAME); - const MESSAGE = `Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${descriptionWarningContext.contentName}}.`; - $aJCrN$react.useEffect(() => { - var _contentRef$current; - const describedById = (_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 ? void 0 : _contentRef$current.getAttribute('aria-describedby'); // if we have an id and the user hasn't set aria-describedby={undefined} - if (descriptionId && describedById) { - const hasDescription = document.getElementById(descriptionId); - if (!hasDescription) console.warn(MESSAGE); - } - }, [MESSAGE, contentRef, descriptionId]); - return null; -}; -const $f4833395aa1bca1a$export$be92b6f5f03c0fe9 = $f4833395aa1bca1a$export$3ddf2d174ce01153; -const $f4833395aa1bca1a$export$41fb9f06171c75f4 = $f4833395aa1bca1a$export$2e1e1122cf0cba88; -const $f4833395aa1bca1a$export$602eac185826482c = $f4833395aa1bca1a$export$dad7c95542bacce0; -const $f4833395aa1bca1a$export$c6fdb837b070b4ff = $f4833395aa1bca1a$export$bd1d06c79be19e17; -const $f4833395aa1bca1a$export$7c6e2c02157bb7d2 = $f4833395aa1bca1a$export$b6d9565de1e068cf; -const $f4833395aa1bca1a$export$f99233281efd08a0 = $f4833395aa1bca1a$export$16f7638e4a34b909; -const $f4833395aa1bca1a$export$393edc798c47379d = $f4833395aa1bca1a$export$94e94c2ec2c954d5; -const $f4833395aa1bca1a$export$f39c2d165cd861fe = $f4833395aa1bca1a$export$fba2fb7cd781b7ac; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-direction/dist/index.js": -/*!*********************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-direction/dist/index.js ***! - \*********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $9g4ps$react = __webpack_require__(/*! react */ "react"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "useDirection", () => $cc45c1b701a63adc$export$b39126d51d94e6f3); -$parcel$export(module.exports, "Provider", () => $cc45c1b701a63adc$export$2881499e37b75b9a); -$parcel$export(module.exports, "DirectionProvider", () => $cc45c1b701a63adc$export$c760c09fdd558351); -const $cc45c1b701a63adc$var$DirectionContext = /*#__PURE__*/$9g4ps$react.createContext(undefined); -/* ------------------------------------------------------------------------------------------------- - * Direction - * -----------------------------------------------------------------------------------------------*/ -const $cc45c1b701a63adc$export$c760c09fdd558351 = props => { - const { - dir: dir, - children: children - } = props; - return /*#__PURE__*/$9g4ps$react.createElement($cc45c1b701a63adc$var$DirectionContext.Provider, { - value: dir - }, children); -}; -/* -----------------------------------------------------------------------------------------------*/ -function $cc45c1b701a63adc$export$b39126d51d94e6f3(localDir) { - const globalDir = $9g4ps$react.useContext($cc45c1b701a63adc$var$DirectionContext); - return localDir || globalDir || 'ltr'; -} -const $cc45c1b701a63adc$export$2881499e37b75b9a = $cc45c1b701a63adc$export$c760c09fdd558351; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-dismissable-layer/dist/index.js": -/*!*****************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-dismissable-layer/dist/index.js ***! - \*****************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $g2vWm$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $g2vWm$react = __webpack_require__(/*! react */ "react"); -var $g2vWm$radixuiprimitive = __webpack_require__(/*! @radix-ui/primitive */ "../../../node_modules/@radix-ui/primitive/dist/index.js"); -var $g2vWm$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -var $g2vWm$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $g2vWm$radixuireactusecallbackref = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.js"); -var $g2vWm$radixuireactuseescapekeydown = __webpack_require__(/*! @radix-ui/react-use-escape-keydown */ "../../../node_modules/@radix-ui/react-use-escape-keydown/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "DismissableLayer", () => $d715e0554b679f1f$export$177fb62ff3ec1f22); -$parcel$export(module.exports, "DismissableLayerBranch", () => $d715e0554b679f1f$export$4d5eb2109db14228); -$parcel$export(module.exports, "Root", () => $d715e0554b679f1f$export$be92b6f5f03c0fe9); -$parcel$export(module.exports, "Branch", () => $d715e0554b679f1f$export$aecb2ddcb55c95be); - -/* ------------------------------------------------------------------------------------------------- - * DismissableLayer - * -----------------------------------------------------------------------------------------------*/ -const $d715e0554b679f1f$var$DISMISSABLE_LAYER_NAME = 'DismissableLayer'; -const $d715e0554b679f1f$var$CONTEXT_UPDATE = 'dismissableLayer.update'; -const $d715e0554b679f1f$var$POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside'; -const $d715e0554b679f1f$var$FOCUS_OUTSIDE = 'dismissableLayer.focusOutside'; -let $d715e0554b679f1f$var$originalBodyPointerEvents; -const $d715e0554b679f1f$var$DismissableLayerContext = /*#__PURE__*/$g2vWm$react.createContext({ - layers: new Set(), - layersWithOutsidePointerEventsDisabled: new Set(), - branches: new Set() -}); -const $d715e0554b679f1f$export$177fb62ff3ec1f22 = /*#__PURE__*/$g2vWm$react.forwardRef((props, forwardedRef) => { - var _node$ownerDocument; - const { - disableOutsidePointerEvents = false, - onEscapeKeyDown: onEscapeKeyDown, - onPointerDownOutside: onPointerDownOutside, - onFocusOutside: onFocusOutside, - onInteractOutside: onInteractOutside, - onDismiss: onDismiss, - ...layerProps - } = props; - const context = $g2vWm$react.useContext($d715e0554b679f1f$var$DismissableLayerContext); - const [node1, setNode] = $g2vWm$react.useState(null); - const ownerDocument = (_node$ownerDocument = node1 === null || node1 === void 0 ? void 0 : node1.ownerDocument) !== null && _node$ownerDocument !== void 0 ? _node$ownerDocument : globalThis === null || globalThis === void 0 ? void 0 : globalThis.document; - const [, force] = $g2vWm$react.useState({}); - const composedRefs = $g2vWm$radixuireactcomposerefs.useComposedRefs(forwardedRef, node => setNode(node)); - const layers = Array.from(context.layers); - const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore - const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore - const index = node1 ? layers.indexOf(node1) : -1; - const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0; - const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex; - const pointerDownOutside = $d715e0554b679f1f$var$usePointerDownOutside(event => { - const target = event.target; - const isPointerDownOnBranch = [...context.branches].some(branch => branch.contains(target)); - if (!isPointerEventsEnabled || isPointerDownOnBranch) return; - onPointerDownOutside === null || onPointerDownOutside === void 0 || onPointerDownOutside(event); - onInteractOutside === null || onInteractOutside === void 0 || onInteractOutside(event); - if (!event.defaultPrevented) onDismiss === null || onDismiss === void 0 || onDismiss(); - }, ownerDocument); - const focusOutside = $d715e0554b679f1f$var$useFocusOutside(event => { - const target = event.target; - const isFocusInBranch = [...context.branches].some(branch => branch.contains(target)); - if (isFocusInBranch) return; - onFocusOutside === null || onFocusOutside === void 0 || onFocusOutside(event); - onInteractOutside === null || onInteractOutside === void 0 || onInteractOutside(event); - if (!event.defaultPrevented) onDismiss === null || onDismiss === void 0 || onDismiss(); - }, ownerDocument); - $g2vWm$radixuireactuseescapekeydown.useEscapeKeydown(event => { - const isHighestLayer = index === context.layers.size - 1; - if (!isHighestLayer) return; - onEscapeKeyDown === null || onEscapeKeyDown === void 0 || onEscapeKeyDown(event); - if (!event.defaultPrevented && onDismiss) { - event.preventDefault(); - onDismiss(); - } - }, ownerDocument); - $g2vWm$react.useEffect(() => { - if (!node1) return; - if (disableOutsidePointerEvents) { - if (context.layersWithOutsidePointerEventsDisabled.size === 0) { - $d715e0554b679f1f$var$originalBodyPointerEvents = ownerDocument.body.style.pointerEvents; - ownerDocument.body.style.pointerEvents = 'none'; - } - context.layersWithOutsidePointerEventsDisabled.add(node1); - } - context.layers.add(node1); - $d715e0554b679f1f$var$dispatchUpdate(); - return () => { - if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) ownerDocument.body.style.pointerEvents = $d715e0554b679f1f$var$originalBodyPointerEvents; - }; - }, [node1, ownerDocument, disableOutsidePointerEvents, context]); - /** - * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect - * because a change to `disableOutsidePointerEvents` would remove this layer from the stack - * and add it to the end again so the layering order wouldn't be _creation order_. - * We only want them to be removed from context stacks when unmounted. - */ - $g2vWm$react.useEffect(() => { - return () => { - if (!node1) return; - context.layers.delete(node1); - context.layersWithOutsidePointerEventsDisabled.delete(node1); - $d715e0554b679f1f$var$dispatchUpdate(); - }; - }, [node1, context]); - $g2vWm$react.useEffect(() => { - const handleUpdate = () => force({}); - document.addEventListener($d715e0554b679f1f$var$CONTEXT_UPDATE, handleUpdate); - return () => document.removeEventListener($d715e0554b679f1f$var$CONTEXT_UPDATE, handleUpdate); - }, []); - return /*#__PURE__*/$g2vWm$react.createElement($g2vWm$radixuireactprimitive.Primitive.div, $parcel$interopDefault($g2vWm$babelruntimehelpersextends)({}, layerProps, { - ref: composedRefs, - style: { - pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? 'auto' : 'none' : undefined, - ...props.style - }, - onFocusCapture: $g2vWm$radixuiprimitive.composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture), - onBlurCapture: $g2vWm$radixuiprimitive.composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture), - onPointerDownCapture: $g2vWm$radixuiprimitive.composeEventHandlers(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture) - })); -}); -/*#__PURE__*/ -Object.assign($d715e0554b679f1f$export$177fb62ff3ec1f22, { - displayName: $d715e0554b679f1f$var$DISMISSABLE_LAYER_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DismissableLayerBranch - * -----------------------------------------------------------------------------------------------*/ -const $d715e0554b679f1f$var$BRANCH_NAME = 'DismissableLayerBranch'; -const $d715e0554b679f1f$export$4d5eb2109db14228 = /*#__PURE__*/$g2vWm$react.forwardRef((props, forwardedRef) => { - const context = $g2vWm$react.useContext($d715e0554b679f1f$var$DismissableLayerContext); - const ref = $g2vWm$react.useRef(null); - const composedRefs = $g2vWm$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); - $g2vWm$react.useEffect(() => { - const node = ref.current; - if (node) { - context.branches.add(node); - return () => { - context.branches.delete(node); - }; - } - }, [context.branches]); - return /*#__PURE__*/$g2vWm$react.createElement($g2vWm$radixuireactprimitive.Primitive.div, $parcel$interopDefault($g2vWm$babelruntimehelpersextends)({}, props, { - ref: composedRefs - })); -}); -/*#__PURE__*/ -Object.assign($d715e0554b679f1f$export$4d5eb2109db14228, { - displayName: $d715e0554b679f1f$var$BRANCH_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ /** - * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup` - * to mimic layer dismissing behaviour present in OS. - * Returns props to pass to the node we want to check for outside events. - */ -function $d715e0554b679f1f$var$usePointerDownOutside(onPointerDownOutside) { - let ownerDocument = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalThis === null || globalThis === void 0 ? void 0 : globalThis.document; - const handlePointerDownOutside = $g2vWm$radixuireactusecallbackref.useCallbackRef(onPointerDownOutside); - const isPointerInsideReactTreeRef = $g2vWm$react.useRef(false); - const handleClickRef = $g2vWm$react.useRef(() => {}); - $g2vWm$react.useEffect(() => { - const handlePointerDown = event => { - if (event.target && !isPointerInsideReactTreeRef.current) { - const eventDetail = { - originalEvent: event - }; - function handleAndDispatchPointerDownOutsideEvent() { - $d715e0554b679f1f$var$handleAndDispatchCustomEvent($d715e0554b679f1f$var$POINTER_DOWN_OUTSIDE, handlePointerDownOutside, eventDetail, { - discrete: true - }); - } - /** - * On touch devices, we need to wait for a click event because browsers implement - * a ~350ms delay between the time the user stops touching the display and when the - * browser executres events. We need to ensure we don't reactivate pointer-events within - * this timeframe otherwise the browser may execute events that should have been prevented. - * - * Additionally, this also lets us deal automatically with cancellations when a click event - * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc. - * - * This is why we also continuously remove the previous listener, because we cannot be - * certain that it was raised, and therefore cleaned-up. - */ - if (event.pointerType === 'touch') { - ownerDocument.removeEventListener('click', handleClickRef.current); - handleClickRef.current = handleAndDispatchPointerDownOutsideEvent; - ownerDocument.addEventListener('click', handleClickRef.current, { - once: true - }); - } else handleAndDispatchPointerDownOutsideEvent(); - } - isPointerInsideReactTreeRef.current = false; - }; - /** - * if this hook executes in a component that mounts via a `pointerdown` event, the event - * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid - * this by delaying the event listener registration on the document. - * This is not React specific, but rather how the DOM works, ie: - * ``` - * button.addEventListener('pointerdown', () => { - * console.log('I will log'); - * document.addEventListener('pointerdown', () => { - * console.log('I will also log'); - * }) - * }); - */ - const timerId = window.setTimeout(() => { - ownerDocument.addEventListener('pointerdown', handlePointerDown); - }, 0); - return () => { - window.clearTimeout(timerId); - ownerDocument.removeEventListener('pointerdown', handlePointerDown); - ownerDocument.removeEventListener('click', handleClickRef.current); - }; - }, [ownerDocument, handlePointerDownOutside]); - return { - // ensures we check React component tree (not just DOM tree) - onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true - }; -} -/** - * Listens for when focus happens outside a react subtree. - * Returns props to pass to the root (node) of the subtree we want to check. - */ -function $d715e0554b679f1f$var$useFocusOutside(onFocusOutside) { - let ownerDocument = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalThis === null || globalThis === void 0 ? void 0 : globalThis.document; - const handleFocusOutside = $g2vWm$radixuireactusecallbackref.useCallbackRef(onFocusOutside); - const isFocusInsideReactTreeRef = $g2vWm$react.useRef(false); - $g2vWm$react.useEffect(() => { - const handleFocus = event => { - if (event.target && !isFocusInsideReactTreeRef.current) { - const eventDetail = { - originalEvent: event - }; - $d715e0554b679f1f$var$handleAndDispatchCustomEvent($d715e0554b679f1f$var$FOCUS_OUTSIDE, handleFocusOutside, eventDetail, { - discrete: false - }); - } - }; - ownerDocument.addEventListener('focusin', handleFocus); - return () => ownerDocument.removeEventListener('focusin', handleFocus); - }, [ownerDocument, handleFocusOutside]); - return { - onFocusCapture: () => isFocusInsideReactTreeRef.current = true, - onBlurCapture: () => isFocusInsideReactTreeRef.current = false - }; -} -function $d715e0554b679f1f$var$dispatchUpdate() { - const event = new CustomEvent($d715e0554b679f1f$var$CONTEXT_UPDATE); - document.dispatchEvent(event); -} -function $d715e0554b679f1f$var$handleAndDispatchCustomEvent(name, handler, detail, _ref) { - let { - discrete: discrete - } = _ref; - const target = detail.originalEvent.target; - const event = new CustomEvent(name, { - bubbles: false, - cancelable: true, - detail: detail - }); - if (handler) target.addEventListener(name, handler, { - once: true - }); - if (discrete) $g2vWm$radixuireactprimitive.dispatchDiscreteCustomEvent(target, event);else target.dispatchEvent(event); -} -const $d715e0554b679f1f$export$be92b6f5f03c0fe9 = $d715e0554b679f1f$export$177fb62ff3ec1f22; -const $d715e0554b679f1f$export$aecb2ddcb55c95be = $d715e0554b679f1f$export$4d5eb2109db14228; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-dropdown-menu/dist/index.js": -/*!*************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-dropdown-menu/dist/index.js ***! - \*************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $7dQ7Q$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $7dQ7Q$react = __webpack_require__(/*! react */ "react"); -var $7dQ7Q$radixuiprimitive = __webpack_require__(/*! @radix-ui/primitive */ "../../../node_modules/@radix-ui/primitive/dist/index.js"); -var $7dQ7Q$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $7dQ7Q$radixuireactcontext = __webpack_require__(/*! @radix-ui/react-context */ "../../../node_modules/@radix-ui/react-context/dist/index.js"); -var $7dQ7Q$radixuireactusecontrollablestate = __webpack_require__(/*! @radix-ui/react-use-controllable-state */ "../../../node_modules/@radix-ui/react-use-controllable-state/dist/index.js"); -var $7dQ7Q$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -var $7dQ7Q$radixuireactmenu = __webpack_require__(/*! @radix-ui/react-menu */ "../../../node_modules/@radix-ui/react-menu/dist/index.js"); -var $7dQ7Q$radixuireactid = __webpack_require__(/*! @radix-ui/react-id */ "../../../node_modules/@radix-ui/react-id/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "createDropdownMenuScope", () => $d1bf075a6b218014$export$c0623cd925aeb687); -$parcel$export(module.exports, "DropdownMenu", () => $d1bf075a6b218014$export$e44a253a59704894); -$parcel$export(module.exports, "DropdownMenuTrigger", () => $d1bf075a6b218014$export$d2469213b3befba9); -$parcel$export(module.exports, "DropdownMenuPortal", () => $d1bf075a6b218014$export$cd369b4d4d54efc9); -$parcel$export(module.exports, "DropdownMenuContent", () => $d1bf075a6b218014$export$6e76d93a37c01248); -$parcel$export(module.exports, "DropdownMenuGroup", () => $d1bf075a6b218014$export$246bebaba3a2f70e); -$parcel$export(module.exports, "DropdownMenuLabel", () => $d1bf075a6b218014$export$76e48c5b57f24495); -$parcel$export(module.exports, "DropdownMenuItem", () => $d1bf075a6b218014$export$ed97964d1871885d); -$parcel$export(module.exports, "DropdownMenuCheckboxItem", () => $d1bf075a6b218014$export$53a69729da201fa9); -$parcel$export(module.exports, "DropdownMenuRadioGroup", () => $d1bf075a6b218014$export$3323ad73d55f587e); -$parcel$export(module.exports, "DropdownMenuRadioItem", () => $d1bf075a6b218014$export$e4f69b41b1637536); -$parcel$export(module.exports, "DropdownMenuItemIndicator", () => $d1bf075a6b218014$export$42355ae145153fb6); -$parcel$export(module.exports, "DropdownMenuSeparator", () => $d1bf075a6b218014$export$da160178fd3bc7e9); -$parcel$export(module.exports, "DropdownMenuArrow", () => $d1bf075a6b218014$export$34b8980744021ec5); -$parcel$export(module.exports, "DropdownMenuSub", () => $d1bf075a6b218014$export$2f307d81a64f5442); -$parcel$export(module.exports, "DropdownMenuSubTrigger", () => $d1bf075a6b218014$export$21dcb7ec56f874cf); -$parcel$export(module.exports, "DropdownMenuSubContent", () => $d1bf075a6b218014$export$f34ec8bc2482cc5f); -$parcel$export(module.exports, "Root", () => $d1bf075a6b218014$export$be92b6f5f03c0fe9); -$parcel$export(module.exports, "Trigger", () => $d1bf075a6b218014$export$41fb9f06171c75f4); -$parcel$export(module.exports, "Portal", () => $d1bf075a6b218014$export$602eac185826482c); -$parcel$export(module.exports, "Content", () => $d1bf075a6b218014$export$7c6e2c02157bb7d2); -$parcel$export(module.exports, "Group", () => $d1bf075a6b218014$export$eb2fcfdbd7ba97d4); -$parcel$export(module.exports, "Label", () => $d1bf075a6b218014$export$b04be29aa201d4f5); -$parcel$export(module.exports, "Item", () => $d1bf075a6b218014$export$6d08773d2e66f8f2); -$parcel$export(module.exports, "CheckboxItem", () => $d1bf075a6b218014$export$16ce288f89fa631c); -$parcel$export(module.exports, "RadioGroup", () => $d1bf075a6b218014$export$a98f0dcb43a68a25); -$parcel$export(module.exports, "RadioItem", () => $d1bf075a6b218014$export$371ab307eab489c0); -$parcel$export(module.exports, "ItemIndicator", () => $d1bf075a6b218014$export$c3468e2714d175fa); -$parcel$export(module.exports, "Separator", () => $d1bf075a6b218014$export$1ff3c3f08ae963c0); -$parcel$export(module.exports, "Arrow", () => $d1bf075a6b218014$export$21b07c8f274aebd5); -$parcel$export(module.exports, "Sub", () => $d1bf075a6b218014$export$d7a01e11500dfb6f); -$parcel$export(module.exports, "SubTrigger", () => $d1bf075a6b218014$export$2ea8a7a591ac5eac); -$parcel$export(module.exports, "SubContent", () => $d1bf075a6b218014$export$6d4de93b380beddf); - -/* ------------------------------------------------------------------------------------------------- - * DropdownMenu - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$DROPDOWN_MENU_NAME = 'DropdownMenu'; -const [$d1bf075a6b218014$var$createDropdownMenuContext, $d1bf075a6b218014$export$c0623cd925aeb687] = $7dQ7Q$radixuireactcontext.createContextScope($d1bf075a6b218014$var$DROPDOWN_MENU_NAME, [$7dQ7Q$radixuireactmenu.createMenuScope]); -const $d1bf075a6b218014$var$useMenuScope = $7dQ7Q$radixuireactmenu.createMenuScope(); -const [$d1bf075a6b218014$var$DropdownMenuProvider, $d1bf075a6b218014$var$useDropdownMenuContext] = $d1bf075a6b218014$var$createDropdownMenuContext($d1bf075a6b218014$var$DROPDOWN_MENU_NAME); -const $d1bf075a6b218014$export$e44a253a59704894 = props => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - children: children, - dir: dir, - open: openProp, - defaultOpen: defaultOpen, - onOpenChange: onOpenChange, - modal = true - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - const triggerRef = $7dQ7Q$react.useRef(null); - const [open = false, setOpen] = $7dQ7Q$radixuireactusecontrollablestate.useControllableState({ - prop: openProp, - defaultProp: defaultOpen, - onChange: onOpenChange - }); - return /*#__PURE__*/$7dQ7Q$react.createElement($d1bf075a6b218014$var$DropdownMenuProvider, { - scope: __scopeDropdownMenu, - triggerId: $7dQ7Q$radixuireactid.useId(), - triggerRef: triggerRef, - contentId: $7dQ7Q$radixuireactid.useId(), - open: open, - onOpenChange: setOpen, - onOpenToggle: $7dQ7Q$react.useCallback(() => setOpen(prevOpen => !prevOpen), [setOpen]), - modal: modal - }, /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Root, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, { - open: open, - onOpenChange: setOpen, - dir: dir, - modal: modal - }), children)); -}; -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$e44a253a59704894, { - displayName: $d1bf075a6b218014$var$DROPDOWN_MENU_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuTrigger - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$TRIGGER_NAME = 'DropdownMenuTrigger'; -const $d1bf075a6b218014$export$d2469213b3befba9 = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - disabled = false, - ...triggerProps - } = props; - const context = $d1bf075a6b218014$var$useDropdownMenuContext($d1bf075a6b218014$var$TRIGGER_NAME, __scopeDropdownMenu); - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Anchor, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({ - asChild: true - }, menuScope), /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactprimitive.Primitive.button, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({ - type: "button", - id: context.triggerId, - "aria-haspopup": "menu", - "aria-expanded": context.open, - "aria-controls": context.open ? context.contentId : undefined, - "data-state": context.open ? 'open' : 'closed', - "data-disabled": disabled ? '' : undefined, - disabled: disabled - }, triggerProps, { - ref: $7dQ7Q$radixuireactcomposerefs.composeRefs(forwardedRef, context.triggerRef), - onPointerDown: $7dQ7Q$radixuiprimitive.composeEventHandlers(props.onPointerDown, event => { - // only call handler if it's the left button (mousedown gets triggered by all mouse buttons) - // but not when the control key is pressed (avoiding MacOS right click) - if (!disabled && event.button === 0 && event.ctrlKey === false) { - context.onOpenToggle(); // prevent trigger focusing when opening - // this allows the content to be given focus without competition - if (!context.open) event.preventDefault(); - } - }), - onKeyDown: $7dQ7Q$radixuiprimitive.composeEventHandlers(props.onKeyDown, event => { - if (disabled) return; - if (['Enter', ' '].includes(event.key)) context.onOpenToggle(); - if (event.key === 'ArrowDown') context.onOpenChange(true); // prevent keydown from scrolling window / first focused item to execute - // that keydown (inadvertently closing the menu) - if (['Enter', ' ', 'ArrowDown'].includes(event.key)) event.preventDefault(); - }) - }))); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$d2469213b3befba9, { - displayName: $d1bf075a6b218014$var$TRIGGER_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuPortal - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$PORTAL_NAME = 'DropdownMenuPortal'; -const $d1bf075a6b218014$export$cd369b4d4d54efc9 = props => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...portalProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Portal, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, portalProps)); -}; -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$cd369b4d4d54efc9, { - displayName: $d1bf075a6b218014$var$PORTAL_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuContent - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$CONTENT_NAME = 'DropdownMenuContent'; -const $d1bf075a6b218014$export$6e76d93a37c01248 = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...contentProps - } = props; - const context = $d1bf075a6b218014$var$useDropdownMenuContext($d1bf075a6b218014$var$CONTENT_NAME, __scopeDropdownMenu); - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - const hasInteractedOutsideRef = $7dQ7Q$react.useRef(false); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Content, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({ - id: context.contentId, - "aria-labelledby": context.triggerId - }, menuScope, contentProps, { - ref: forwardedRef, - onCloseAutoFocus: $7dQ7Q$radixuiprimitive.composeEventHandlers(props.onCloseAutoFocus, event => { - var _context$triggerRef$c; - if (!hasInteractedOutsideRef.current) (_context$triggerRef$c = context.triggerRef.current) === null || _context$triggerRef$c === void 0 || _context$triggerRef$c.focus(); - hasInteractedOutsideRef.current = false; // Always prevent auto focus because we either focus manually or want user agent focus - event.preventDefault(); - }), - onInteractOutside: $7dQ7Q$radixuiprimitive.composeEventHandlers(props.onInteractOutside, event => { - const originalEvent = event.detail.originalEvent; - const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true; - const isRightClick = originalEvent.button === 2 || ctrlLeftClick; - if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true; - }), - style: { - ...props.style, - '--radix-dropdown-menu-content-transform-origin': 'var(--radix-popper-transform-origin)', - '--radix-dropdown-menu-content-available-width': 'var(--radix-popper-available-width)', - '--radix-dropdown-menu-content-available-height': 'var(--radix-popper-available-height)', - '--radix-dropdown-menu-trigger-width': 'var(--radix-popper-anchor-width)', - '--radix-dropdown-menu-trigger-height': 'var(--radix-popper-anchor-height)' - } - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$6e76d93a37c01248, { - displayName: $d1bf075a6b218014$var$CONTENT_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuGroup - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$GROUP_NAME = 'DropdownMenuGroup'; -const $d1bf075a6b218014$export$246bebaba3a2f70e = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...groupProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Group, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, groupProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$246bebaba3a2f70e, { - displayName: $d1bf075a6b218014$var$GROUP_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuLabel - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$LABEL_NAME = 'DropdownMenuLabel'; -const $d1bf075a6b218014$export$76e48c5b57f24495 = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...labelProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Label, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, labelProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$76e48c5b57f24495, { - displayName: $d1bf075a6b218014$var$LABEL_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuItem - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$ITEM_NAME = 'DropdownMenuItem'; -const $d1bf075a6b218014$export$ed97964d1871885d = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...itemProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Item, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, itemProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$ed97964d1871885d, { - displayName: $d1bf075a6b218014$var$ITEM_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuCheckboxItem - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem'; -const $d1bf075a6b218014$export$53a69729da201fa9 = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...checkboxItemProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.CheckboxItem, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, checkboxItemProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$53a69729da201fa9, { - displayName: $d1bf075a6b218014$var$CHECKBOX_ITEM_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuRadioGroup - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$RADIO_GROUP_NAME = 'DropdownMenuRadioGroup'; -const $d1bf075a6b218014$export$3323ad73d55f587e = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...radioGroupProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.RadioGroup, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, radioGroupProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$3323ad73d55f587e, { - displayName: $d1bf075a6b218014$var$RADIO_GROUP_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuRadioItem - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$RADIO_ITEM_NAME = 'DropdownMenuRadioItem'; -const $d1bf075a6b218014$export$e4f69b41b1637536 = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...radioItemProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.RadioItem, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, radioItemProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$e4f69b41b1637536, { - displayName: $d1bf075a6b218014$var$RADIO_ITEM_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuItemIndicator - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$INDICATOR_NAME = 'DropdownMenuItemIndicator'; -const $d1bf075a6b218014$export$42355ae145153fb6 = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...itemIndicatorProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.ItemIndicator, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, itemIndicatorProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$42355ae145153fb6, { - displayName: $d1bf075a6b218014$var$INDICATOR_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuSeparator - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$SEPARATOR_NAME = 'DropdownMenuSeparator'; -const $d1bf075a6b218014$export$da160178fd3bc7e9 = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...separatorProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Separator, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, separatorProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$da160178fd3bc7e9, { - displayName: $d1bf075a6b218014$var$SEPARATOR_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuArrow - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$ARROW_NAME = 'DropdownMenuArrow'; -const $d1bf075a6b218014$export$34b8980744021ec5 = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...arrowProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Arrow, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, arrowProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$34b8980744021ec5, { - displayName: $d1bf075a6b218014$var$ARROW_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuSub - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$export$2f307d81a64f5442 = props => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - children: children, - open: openProp, - onOpenChange: onOpenChange, - defaultOpen: defaultOpen - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - const [open = false, setOpen] = $7dQ7Q$radixuireactusecontrollablestate.useControllableState({ - prop: openProp, - defaultProp: defaultOpen, - onChange: onOpenChange - }); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.Sub, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, { - open: open, - onOpenChange: setOpen - }), children); -}; -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuSubTrigger - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger'; -const $d1bf075a6b218014$export$21dcb7ec56f874cf = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...subTriggerProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.SubTrigger, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, subTriggerProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$21dcb7ec56f874cf, { - displayName: $d1bf075a6b218014$var$SUB_TRIGGER_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * DropdownMenuSubContent - * -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$var$SUB_CONTENT_NAME = 'DropdownMenuSubContent'; -const $d1bf075a6b218014$export$f34ec8bc2482cc5f = /*#__PURE__*/$7dQ7Q$react.forwardRef((props, forwardedRef) => { - const { - __scopeDropdownMenu: __scopeDropdownMenu, - ...subContentProps - } = props; - const menuScope = $d1bf075a6b218014$var$useMenuScope(__scopeDropdownMenu); - return /*#__PURE__*/$7dQ7Q$react.createElement($7dQ7Q$radixuireactmenu.SubContent, $parcel$interopDefault($7dQ7Q$babelruntimehelpersextends)({}, menuScope, subContentProps, { - ref: forwardedRef, - style: { - ...props.style, - '--radix-dropdown-menu-content-transform-origin': 'var(--radix-popper-transform-origin)', - '--radix-dropdown-menu-content-available-width': 'var(--radix-popper-available-width)', - '--radix-dropdown-menu-content-available-height': 'var(--radix-popper-available-height)', - '--radix-dropdown-menu-trigger-width': 'var(--radix-popper-anchor-width)', - '--radix-dropdown-menu-trigger-height': 'var(--radix-popper-anchor-height)' - } - })); -}); -/*#__PURE__*/ -Object.assign($d1bf075a6b218014$export$f34ec8bc2482cc5f, { - displayName: $d1bf075a6b218014$var$SUB_CONTENT_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -const $d1bf075a6b218014$export$be92b6f5f03c0fe9 = $d1bf075a6b218014$export$e44a253a59704894; -const $d1bf075a6b218014$export$41fb9f06171c75f4 = $d1bf075a6b218014$export$d2469213b3befba9; -const $d1bf075a6b218014$export$602eac185826482c = $d1bf075a6b218014$export$cd369b4d4d54efc9; -const $d1bf075a6b218014$export$7c6e2c02157bb7d2 = $d1bf075a6b218014$export$6e76d93a37c01248; -const $d1bf075a6b218014$export$eb2fcfdbd7ba97d4 = $d1bf075a6b218014$export$246bebaba3a2f70e; -const $d1bf075a6b218014$export$b04be29aa201d4f5 = $d1bf075a6b218014$export$76e48c5b57f24495; -const $d1bf075a6b218014$export$6d08773d2e66f8f2 = $d1bf075a6b218014$export$ed97964d1871885d; -const $d1bf075a6b218014$export$16ce288f89fa631c = $d1bf075a6b218014$export$53a69729da201fa9; -const $d1bf075a6b218014$export$a98f0dcb43a68a25 = $d1bf075a6b218014$export$3323ad73d55f587e; -const $d1bf075a6b218014$export$371ab307eab489c0 = $d1bf075a6b218014$export$e4f69b41b1637536; -const $d1bf075a6b218014$export$c3468e2714d175fa = $d1bf075a6b218014$export$42355ae145153fb6; -const $d1bf075a6b218014$export$1ff3c3f08ae963c0 = $d1bf075a6b218014$export$da160178fd3bc7e9; -const $d1bf075a6b218014$export$21b07c8f274aebd5 = $d1bf075a6b218014$export$34b8980744021ec5; -const $d1bf075a6b218014$export$d7a01e11500dfb6f = $d1bf075a6b218014$export$2f307d81a64f5442; -const $d1bf075a6b218014$export$2ea8a7a591ac5eac = $d1bf075a6b218014$export$21dcb7ec56f874cf; -const $d1bf075a6b218014$export$6d4de93b380beddf = $d1bf075a6b218014$export$f34ec8bc2482cc5f; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-focus-guards/dist/index.js": -/*!************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-focus-guards/dist/index.js ***! - \************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $cnctE$react = __webpack_require__(/*! react */ "react"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "FocusGuards", () => $71476a6ed7dbbaf3$export$ac5b58043b79449b); -$parcel$export(module.exports, "Root", () => $71476a6ed7dbbaf3$export$be92b6f5f03c0fe9); -$parcel$export(module.exports, "useFocusGuards", () => $71476a6ed7dbbaf3$export$b7ece24a22aeda8c); - -/** Number of components which have requested interest to have focus guards */ -let $71476a6ed7dbbaf3$var$count = 0; -function $71476a6ed7dbbaf3$export$ac5b58043b79449b(props) { - $71476a6ed7dbbaf3$export$b7ece24a22aeda8c(); - return props.children; -} -/** - * Injects a pair of focus guards at the edges of the whole DOM tree - * to ensure `focusin` & `focusout` events can be caught consistently. - */ -function $71476a6ed7dbbaf3$export$b7ece24a22aeda8c() { - $cnctE$react.useEffect(() => { - var _edgeGuards$, _edgeGuards$2; - const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]'); - document.body.insertAdjacentElement('afterbegin', (_edgeGuards$ = edgeGuards[0]) !== null && _edgeGuards$ !== void 0 ? _edgeGuards$ : $71476a6ed7dbbaf3$var$createFocusGuard()); - document.body.insertAdjacentElement('beforeend', (_edgeGuards$2 = edgeGuards[1]) !== null && _edgeGuards$2 !== void 0 ? _edgeGuards$2 : $71476a6ed7dbbaf3$var$createFocusGuard()); - $71476a6ed7dbbaf3$var$count++; - return () => { - if ($71476a6ed7dbbaf3$var$count === 1) document.querySelectorAll('[data-radix-focus-guard]').forEach(node => node.remove()); - $71476a6ed7dbbaf3$var$count--; - }; - }, []); -} -function $71476a6ed7dbbaf3$var$createFocusGuard() { - const element = document.createElement('span'); - element.setAttribute('data-radix-focus-guard', ''); - element.tabIndex = 0; - element.style.cssText = 'outline: none; opacity: 0; position: fixed; pointer-events: none'; - return element; -} -const $71476a6ed7dbbaf3$export$be92b6f5f03c0fe9 = $71476a6ed7dbbaf3$export$ac5b58043b79449b; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-focus-scope/dist/index.js": -/*!***********************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-focus-scope/dist/index.js ***! - \***********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $buum9$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $buum9$react = __webpack_require__(/*! react */ "react"); -var $buum9$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $buum9$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -var $buum9$radixuireactusecallbackref = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "FocusScope", () => $2bc01e66e04aa9ed$export$20e40289641fbbb6); -$parcel$export(module.exports, "Root", () => $2bc01e66e04aa9ed$export$be92b6f5f03c0fe9); -const $2bc01e66e04aa9ed$var$AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount'; -const $2bc01e66e04aa9ed$var$AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount'; -const $2bc01e66e04aa9ed$var$EVENT_OPTIONS = { - bubbles: false, - cancelable: true -}; -/* ------------------------------------------------------------------------------------------------- - * FocusScope - * -----------------------------------------------------------------------------------------------*/ -const $2bc01e66e04aa9ed$var$FOCUS_SCOPE_NAME = 'FocusScope'; -const $2bc01e66e04aa9ed$export$20e40289641fbbb6 = /*#__PURE__*/$buum9$react.forwardRef((props, forwardedRef) => { - const { - loop = false, - trapped = false, - onMountAutoFocus: onMountAutoFocusProp, - onUnmountAutoFocus: onUnmountAutoFocusProp, - ...scopeProps - } = props; - const [container1, setContainer] = $buum9$react.useState(null); - const onMountAutoFocus = $buum9$radixuireactusecallbackref.useCallbackRef(onMountAutoFocusProp); - const onUnmountAutoFocus = $buum9$radixuireactusecallbackref.useCallbackRef(onUnmountAutoFocusProp); - const lastFocusedElementRef = $buum9$react.useRef(null); - const composedRefs = $buum9$radixuireactcomposerefs.useComposedRefs(forwardedRef, node => setContainer(node)); - const focusScope = $buum9$react.useRef({ - paused: false, - pause() { - this.paused = true; - }, - resume() { - this.paused = false; - } - }).current; // Takes care of trapping focus if focus is moved outside programmatically for example - $buum9$react.useEffect(() => { - if (trapped) { - function handleFocusIn(event) { - if (focusScope.paused || !container1) return; - const target = event.target; - if (container1.contains(target)) lastFocusedElementRef.current = target;else $2bc01e66e04aa9ed$var$focus(lastFocusedElementRef.current, { - select: true - }); - } - function handleFocusOut(event) { - if (focusScope.paused || !container1) return; - const relatedTarget = event.relatedTarget; // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases: - // - // 1. When the user switches app/tabs/windows/the browser itself loses focus. - // 2. In Google Chrome, when the focused element is removed from the DOM. - // - // We let the browser do its thing here because: - // - // 1. The browser already keeps a memory of what's focused for when the page gets refocused. - // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it - // throws the CPU to 100%, so we avoid doing anything for this reason here too. - if (relatedTarget === null) return; // If the focus has moved to an actual legitimate element (`relatedTarget !== null`) - // that is outside the container, we move focus to the last valid focused element inside. - if (!container1.contains(relatedTarget)) $2bc01e66e04aa9ed$var$focus(lastFocusedElementRef.current, { - select: true - }); - } // When the focused element gets removed from the DOM, browsers move focus - // back to the document.body. In this case, we move focus to the container - // to keep focus trapped correctly. - function handleMutations(mutations) { - const focusedElement = document.activeElement; - for (const mutation of mutations) { - if (mutation.removedNodes.length > 0) { - if (!(container1 !== null && container1 !== void 0 && container1.contains(focusedElement))) $2bc01e66e04aa9ed$var$focus(container1); - } - } - } - document.addEventListener('focusin', handleFocusIn); - document.addEventListener('focusout', handleFocusOut); - const mutationObserver = new MutationObserver(handleMutations); - if (container1) mutationObserver.observe(container1, { - childList: true, - subtree: true - }); - return () => { - document.removeEventListener('focusin', handleFocusIn); - document.removeEventListener('focusout', handleFocusOut); - mutationObserver.disconnect(); - }; - } - }, [trapped, container1, focusScope.paused]); - $buum9$react.useEffect(() => { - if (container1) { - $2bc01e66e04aa9ed$var$focusScopesStack.add(focusScope); - const previouslyFocusedElement = document.activeElement; - const hasFocusedCandidate = container1.contains(previouslyFocusedElement); - if (!hasFocusedCandidate) { - const mountEvent = new CustomEvent($2bc01e66e04aa9ed$var$AUTOFOCUS_ON_MOUNT, $2bc01e66e04aa9ed$var$EVENT_OPTIONS); - container1.addEventListener($2bc01e66e04aa9ed$var$AUTOFOCUS_ON_MOUNT, onMountAutoFocus); - container1.dispatchEvent(mountEvent); - if (!mountEvent.defaultPrevented) { - $2bc01e66e04aa9ed$var$focusFirst($2bc01e66e04aa9ed$var$removeLinks($2bc01e66e04aa9ed$var$getTabbableCandidates(container1)), { - select: true - }); - if (document.activeElement === previouslyFocusedElement) $2bc01e66e04aa9ed$var$focus(container1); - } - } - return () => { - container1.removeEventListener($2bc01e66e04aa9ed$var$AUTOFOCUS_ON_MOUNT, onMountAutoFocus); // We hit a react bug (fixed in v17) with focusing in unmount. - // We need to delay the focus a little to get around it for now. - // See: https://github.com/facebook/react/issues/17894 - setTimeout(() => { - const unmountEvent = new CustomEvent($2bc01e66e04aa9ed$var$AUTOFOCUS_ON_UNMOUNT, $2bc01e66e04aa9ed$var$EVENT_OPTIONS); - container1.addEventListener($2bc01e66e04aa9ed$var$AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus); - container1.dispatchEvent(unmountEvent); - if (!unmountEvent.defaultPrevented) $2bc01e66e04aa9ed$var$focus(previouslyFocusedElement !== null && previouslyFocusedElement !== void 0 ? previouslyFocusedElement : document.body, { - select: true - }); - // we need to remove the listener after we `dispatchEvent` - container1.removeEventListener($2bc01e66e04aa9ed$var$AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus); - $2bc01e66e04aa9ed$var$focusScopesStack.remove(focusScope); - }, 0); - }; - } - }, [container1, onMountAutoFocus, onUnmountAutoFocus, focusScope]); // Takes care of looping focus (when tabbing whilst at the edges) - const handleKeyDown = $buum9$react.useCallback(event => { - if (!loop && !trapped) return; - if (focusScope.paused) return; - const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey; - const focusedElement = document.activeElement; - if (isTabKey && focusedElement) { - const container = event.currentTarget; - const [first, last] = $2bc01e66e04aa9ed$var$getTabbableEdges(container); - const hasTabbableElementsInside = first && last; // we can only wrap focus if we have tabbable edges - if (!hasTabbableElementsInside) { - if (focusedElement === container) event.preventDefault(); - } else { - if (!event.shiftKey && focusedElement === last) { - event.preventDefault(); - if (loop) $2bc01e66e04aa9ed$var$focus(first, { - select: true - }); - } else if (event.shiftKey && focusedElement === first) { - event.preventDefault(); - if (loop) $2bc01e66e04aa9ed$var$focus(last, { - select: true - }); - } - } - } - }, [loop, trapped, focusScope.paused]); - return /*#__PURE__*/$buum9$react.createElement($buum9$radixuireactprimitive.Primitive.div, $parcel$interopDefault($buum9$babelruntimehelpersextends)({ - tabIndex: -1 - }, scopeProps, { - ref: composedRefs, - onKeyDown: handleKeyDown - })); -}); -/*#__PURE__*/ -Object.assign($2bc01e66e04aa9ed$export$20e40289641fbbb6, { - displayName: $2bc01e66e04aa9ed$var$FOCUS_SCOPE_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * Utils - * -----------------------------------------------------------------------------------------------*/ /** - * Attempts focusing the first element in a list of candidates. - * Stops when focus has actually moved. - */ -function $2bc01e66e04aa9ed$var$focusFirst(candidates) { - let { - select = false - } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - const previouslyFocusedElement = document.activeElement; - for (const candidate of candidates) { - $2bc01e66e04aa9ed$var$focus(candidate, { - select: select - }); - if (document.activeElement !== previouslyFocusedElement) return; - } -} -/** - * Returns the first and last tabbable elements inside a container. - */ -function $2bc01e66e04aa9ed$var$getTabbableEdges(container) { - const candidates = $2bc01e66e04aa9ed$var$getTabbableCandidates(container); - const first = $2bc01e66e04aa9ed$var$findVisible(candidates, container); - const last = $2bc01e66e04aa9ed$var$findVisible(candidates.reverse(), container); - return [first, last]; -} -/** - * Returns a list of potential tabbable candidates. - * - * NOTE: This is only a close approximation. For example it doesn't take into account cases like when - * elements are not visible. This cannot be worked out easily by just reading a property, but rather - * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately. - * - * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker - * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1 - */ -function $2bc01e66e04aa9ed$var$getTabbableCandidates(container) { - const nodes = []; - const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, { - acceptNode: node => { - const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden'; - if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP; // `.tabIndex` is not the same as the `tabindex` attribute. It works on the - // runtime's understanding of tabbability, so this automatically accounts - // for any kind of element that could be tabbed to. - return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; - } - }); - while (walker.nextNode()) nodes.push(walker.currentNode); // we do not take into account the order of nodes with positive `tabIndex` as it - // hinders accessibility to have tab order different from visual order. - return nodes; -} -/** - * Returns the first visible element in a list. - * NOTE: Only checks visibility up to the `container`. - */ -function $2bc01e66e04aa9ed$var$findVisible(elements, container) { - for (const element of elements) { - // we stop checking if it's hidden at the `container` level (excluding) - if (!$2bc01e66e04aa9ed$var$isHidden(element, { - upTo: container - })) return element; - } -} -function $2bc01e66e04aa9ed$var$isHidden(node, _ref) { - let { - upTo: upTo - } = _ref; - if (getComputedStyle(node).visibility === 'hidden') return true; - while (node) { - // we stop at `upTo` (excluding it) - if (upTo !== undefined && node === upTo) return false; - if (getComputedStyle(node).display === 'none') return true; - node = node.parentElement; - } - return false; -} -function $2bc01e66e04aa9ed$var$isSelectableInput(element) { - return element instanceof HTMLInputElement && 'select' in element; -} -function $2bc01e66e04aa9ed$var$focus(element) { - let { - select = false - } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - // only focus if that element is focusable - if (element && element.focus) { - const previouslyFocusedElement = document.activeElement; // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users - element.focus({ - preventScroll: true - }); // only select if its not the same element, it supports selection and we need to select - if (element !== previouslyFocusedElement && $2bc01e66e04aa9ed$var$isSelectableInput(element) && select) element.select(); - } -} -/* ------------------------------------------------------------------------------------------------- - * FocusScope stack - * -----------------------------------------------------------------------------------------------*/ -const $2bc01e66e04aa9ed$var$focusScopesStack = $2bc01e66e04aa9ed$var$createFocusScopesStack(); -function $2bc01e66e04aa9ed$var$createFocusScopesStack() { - /** A stack of focus scopes, with the active one at the top */let stack = []; - return { - add(focusScope) { - // pause the currently active focus scope (at the top of the stack) - const activeFocusScope = stack[0]; - if (focusScope !== activeFocusScope) activeFocusScope === null || activeFocusScope === void 0 || activeFocusScope.pause(); - // remove in case it already exists (because we'll re-add it at the top of the stack) - stack = $2bc01e66e04aa9ed$var$arrayRemove(stack, focusScope); - stack.unshift(focusScope); - }, - remove(focusScope) { - var _stack$; - stack = $2bc01e66e04aa9ed$var$arrayRemove(stack, focusScope); - (_stack$ = stack[0]) === null || _stack$ === void 0 || _stack$.resume(); - } - }; -} -function $2bc01e66e04aa9ed$var$arrayRemove(array, item) { - const updatedArray = [...array]; - const index = updatedArray.indexOf(item); - if (index !== -1) updatedArray.splice(index, 1); - return updatedArray; -} -function $2bc01e66e04aa9ed$var$removeLinks(items) { - return items.filter(item => item.tagName !== 'A'); -} -const $2bc01e66e04aa9ed$export$be92b6f5f03c0fe9 = $2bc01e66e04aa9ed$export$20e40289641fbbb6; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-id/dist/index.js": -/*!**************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-id/dist/index.js ***! - \**************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $47woD$react = __webpack_require__(/*! react */ "react"); -var $47woD$radixuireactuselayouteffect = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "../../../node_modules/@radix-ui/react-use-layout-effect/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "useId", () => $dc478e4659f630c5$export$f680877a34711e37); -const $dc478e4659f630c5$var$useReactId = $47woD$react['useId'.toString()] || (() => undefined); -let $dc478e4659f630c5$var$count = 0; -function $dc478e4659f630c5$export$f680877a34711e37(deterministicId) { - const [id, setId] = $47woD$react.useState($dc478e4659f630c5$var$useReactId()); // React versions older than 18 will have client-side ids only. - $47woD$radixuireactuselayouteffect.useLayoutEffect(() => { - if (!deterministicId) setId(reactId => reactId !== null && reactId !== void 0 ? reactId : String($dc478e4659f630c5$var$count++)); - }, [deterministicId]); - return deterministicId || (id ? `radix-${id}` : ''); -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-menu/dist/index.js": -/*!****************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-menu/dist/index.js ***! - \****************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $cnSS2$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $cnSS2$react = __webpack_require__(/*! react */ "react"); -var $cnSS2$radixuiprimitive = __webpack_require__(/*! @radix-ui/primitive */ "../../../node_modules/@radix-ui/primitive/dist/index.js"); -var $cnSS2$radixuireactcollection = __webpack_require__(/*! @radix-ui/react-collection */ "../../../node_modules/@radix-ui/react-collection/dist/index.js"); -var $cnSS2$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $cnSS2$radixuireactcontext = __webpack_require__(/*! @radix-ui/react-context */ "../../../node_modules/@radix-ui/react-context/dist/index.js"); -var $cnSS2$radixuireactdirection = __webpack_require__(/*! @radix-ui/react-direction */ "../../../node_modules/@radix-ui/react-direction/dist/index.js"); -var $cnSS2$radixuireactdismissablelayer = __webpack_require__(/*! @radix-ui/react-dismissable-layer */ "../../../node_modules/@radix-ui/react-dismissable-layer/dist/index.js"); -var $cnSS2$radixuireactfocusguards = __webpack_require__(/*! @radix-ui/react-focus-guards */ "../../../node_modules/@radix-ui/react-focus-guards/dist/index.js"); -var $cnSS2$radixuireactfocusscope = __webpack_require__(/*! @radix-ui/react-focus-scope */ "../../../node_modules/@radix-ui/react-focus-scope/dist/index.js"); -var $cnSS2$radixuireactid = __webpack_require__(/*! @radix-ui/react-id */ "../../../node_modules/@radix-ui/react-id/dist/index.js"); -var $cnSS2$radixuireactpopper = __webpack_require__(/*! @radix-ui/react-popper */ "../../../node_modules/@radix-ui/react-popper/dist/index.js"); -var $cnSS2$radixuireactportal = __webpack_require__(/*! @radix-ui/react-portal */ "../../../node_modules/@radix-ui/react-portal/dist/index.js"); -var $cnSS2$radixuireactpresence = __webpack_require__(/*! @radix-ui/react-presence */ "../../../node_modules/@radix-ui/react-presence/dist/index.js"); -var $cnSS2$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -var $cnSS2$radixuireactrovingfocus = __webpack_require__(/*! @radix-ui/react-roving-focus */ "../../../node_modules/@radix-ui/react-roving-focus/dist/index.js"); -var $cnSS2$radixuireactslot = __webpack_require__(/*! @radix-ui/react-slot */ "../../../node_modules/@radix-ui/react-slot/dist/index.js"); -var $cnSS2$radixuireactusecallbackref = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.js"); -var $cnSS2$ariahidden = __webpack_require__(/*! aria-hidden */ "../../../node_modules/aria-hidden/dist/es2015/index.js"); -var $cnSS2$reactremovescroll = __webpack_require__(/*! react-remove-scroll */ "../../../node_modules/react-remove-scroll/dist/es2015/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "createMenuScope", () => $213e4d2df823067d$export$4027731b685e72eb); -$parcel$export(module.exports, "Menu", () => $213e4d2df823067d$export$d9b273488cd8ce6f); -$parcel$export(module.exports, "MenuAnchor", () => $213e4d2df823067d$export$9fa5ebd18bee4d43); -$parcel$export(module.exports, "MenuPortal", () => $213e4d2df823067d$export$793392f970497feb); -$parcel$export(module.exports, "MenuContent", () => $213e4d2df823067d$export$479f0f2f71193efe); -$parcel$export(module.exports, "MenuGroup", () => $213e4d2df823067d$export$22a631d1f72787bb); -$parcel$export(module.exports, "MenuLabel", () => $213e4d2df823067d$export$dd37bec0e8a99143); -$parcel$export(module.exports, "MenuItem", () => $213e4d2df823067d$export$2ce376c2cc3355c8); -$parcel$export(module.exports, "MenuCheckboxItem", () => $213e4d2df823067d$export$f6f243521332502d); -$parcel$export(module.exports, "MenuRadioGroup", () => $213e4d2df823067d$export$ea2200c9eee416b3); -$parcel$export(module.exports, "MenuRadioItem", () => $213e4d2df823067d$export$69bd225e9817f6d0); -$parcel$export(module.exports, "MenuItemIndicator", () => $213e4d2df823067d$export$a2593e23056970a3); -$parcel$export(module.exports, "MenuSeparator", () => $213e4d2df823067d$export$1cec7dcdd713e220); -$parcel$export(module.exports, "MenuArrow", () => $213e4d2df823067d$export$bcdda4773debf5fa); -$parcel$export(module.exports, "MenuSub", () => $213e4d2df823067d$export$71bdb9d1e2909932); -$parcel$export(module.exports, "MenuSubTrigger", () => $213e4d2df823067d$export$5fbbb3ba7297405f); -$parcel$export(module.exports, "MenuSubContent", () => $213e4d2df823067d$export$e7142ab31822bde6); -$parcel$export(module.exports, "Root", () => $213e4d2df823067d$export$be92b6f5f03c0fe9); -$parcel$export(module.exports, "Anchor", () => $213e4d2df823067d$export$b688253958b8dfe7); -$parcel$export(module.exports, "Portal", () => $213e4d2df823067d$export$602eac185826482c); -$parcel$export(module.exports, "Content", () => $213e4d2df823067d$export$7c6e2c02157bb7d2); -$parcel$export(module.exports, "Group", () => $213e4d2df823067d$export$eb2fcfdbd7ba97d4); -$parcel$export(module.exports, "Label", () => $213e4d2df823067d$export$b04be29aa201d4f5); -$parcel$export(module.exports, "Item", () => $213e4d2df823067d$export$6d08773d2e66f8f2); -$parcel$export(module.exports, "CheckboxItem", () => $213e4d2df823067d$export$16ce288f89fa631c); -$parcel$export(module.exports, "RadioGroup", () => $213e4d2df823067d$export$a98f0dcb43a68a25); -$parcel$export(module.exports, "RadioItem", () => $213e4d2df823067d$export$371ab307eab489c0); -$parcel$export(module.exports, "ItemIndicator", () => $213e4d2df823067d$export$c3468e2714d175fa); -$parcel$export(module.exports, "Separator", () => $213e4d2df823067d$export$1ff3c3f08ae963c0); -$parcel$export(module.exports, "Arrow", () => $213e4d2df823067d$export$21b07c8f274aebd5); -$parcel$export(module.exports, "Sub", () => $213e4d2df823067d$export$d7a01e11500dfb6f); -$parcel$export(module.exports, "SubTrigger", () => $213e4d2df823067d$export$2ea8a7a591ac5eac); -$parcel$export(module.exports, "SubContent", () => $213e4d2df823067d$export$6d4de93b380beddf); -const $213e4d2df823067d$var$SELECTION_KEYS = ['Enter', ' ']; -const $213e4d2df823067d$var$FIRST_KEYS = ['ArrowDown', 'PageUp', 'Home']; -const $213e4d2df823067d$var$LAST_KEYS = ['ArrowUp', 'PageDown', 'End']; -const $213e4d2df823067d$var$FIRST_LAST_KEYS = [...$213e4d2df823067d$var$FIRST_KEYS, ...$213e4d2df823067d$var$LAST_KEYS]; -const $213e4d2df823067d$var$SUB_OPEN_KEYS = { - ltr: [...$213e4d2df823067d$var$SELECTION_KEYS, 'ArrowRight'], - rtl: [...$213e4d2df823067d$var$SELECTION_KEYS, 'ArrowLeft'] -}; -const $213e4d2df823067d$var$SUB_CLOSE_KEYS = { - ltr: ['ArrowLeft'], - rtl: ['ArrowRight'] -}; -/* ------------------------------------------------------------------------------------------------- - * Menu - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$MENU_NAME = 'Menu'; -const [$213e4d2df823067d$var$Collection, $213e4d2df823067d$var$useCollection, $213e4d2df823067d$var$createCollectionScope] = $cnSS2$radixuireactcollection.createCollection($213e4d2df823067d$var$MENU_NAME); -const [$213e4d2df823067d$var$createMenuContext, $213e4d2df823067d$export$4027731b685e72eb] = $cnSS2$radixuireactcontext.createContextScope($213e4d2df823067d$var$MENU_NAME, [$213e4d2df823067d$var$createCollectionScope, $cnSS2$radixuireactpopper.createPopperScope, $cnSS2$radixuireactrovingfocus.createRovingFocusGroupScope]); -const $213e4d2df823067d$var$usePopperScope = $cnSS2$radixuireactpopper.createPopperScope(); -const $213e4d2df823067d$var$useRovingFocusGroupScope = $cnSS2$radixuireactrovingfocus.createRovingFocusGroupScope(); -const [$213e4d2df823067d$var$MenuProvider, $213e4d2df823067d$var$useMenuContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$MENU_NAME); -const [$213e4d2df823067d$var$MenuRootProvider, $213e4d2df823067d$var$useMenuRootContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$MENU_NAME); -const $213e4d2df823067d$export$d9b273488cd8ce6f = props => { - const { - __scopeMenu: __scopeMenu, - open = false, - children: children, - dir: dir, - onOpenChange: onOpenChange, - modal = true - } = props; - const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); - const [content, setContent] = $cnSS2$react.useState(null); - const isUsingKeyboardRef = $cnSS2$react.useRef(false); - const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange); - const direction = $cnSS2$radixuireactdirection.useDirection(dir); - $cnSS2$react.useEffect(() => { - // Capture phase ensures we set the boolean before any side effects execute - // in response to the key or pointer event as they might depend on this value. - const handleKeyDown = () => { - isUsingKeyboardRef.current = true; - document.addEventListener('pointerdown', handlePointer, { - capture: true, - once: true - }); - document.addEventListener('pointermove', handlePointer, { - capture: true, - once: true - }); - }; - const handlePointer = () => isUsingKeyboardRef.current = false; - document.addEventListener('keydown', handleKeyDown, { - capture: true - }); - return () => { - document.removeEventListener('keydown', handleKeyDown, { - capture: true - }); - document.removeEventListener('pointerdown', handlePointer, { - capture: true - }); - document.removeEventListener('pointermove', handlePointer, { - capture: true - }); - }; - }, []); - return /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, { - scope: __scopeMenu, - open: open, - onOpenChange: handleOpenChange, - content: content, - onContentChange: setContent - }, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuRootProvider, { - scope: __scopeMenu, - onClose: $cnSS2$react.useCallback(() => handleOpenChange(false), [handleOpenChange]), - isUsingKeyboardRef: isUsingKeyboardRef, - dir: direction, - modal: modal - }, children))); -}; -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$d9b273488cd8ce6f, { - displayName: $213e4d2df823067d$var$MENU_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuAnchor - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$ANCHOR_NAME = 'MenuAnchor'; -const $213e4d2df823067d$export$9fa5ebd18bee4d43 = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - __scopeMenu: __scopeMenu, - ...anchorProps - } = props; - const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); - return /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactpopper.Anchor, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, popperScope, anchorProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$9fa5ebd18bee4d43, { - displayName: $213e4d2df823067d$var$ANCHOR_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuPortal - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$PORTAL_NAME = 'MenuPortal'; -const [$213e4d2df823067d$var$PortalProvider, $213e4d2df823067d$var$usePortalContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$PORTAL_NAME, { - forceMount: undefined -}); -const $213e4d2df823067d$export$793392f970497feb = props => { - const { - __scopeMenu: __scopeMenu, - forceMount: forceMount, - children: children, - container: container - } = props; - const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$PORTAL_NAME, __scopeMenu); - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$PortalProvider, { - scope: __scopeMenu, - forceMount: forceMount - }, /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, { - present: forceMount || context.open - }, /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactportal.Portal, { - asChild: true, - container: container - }, children))); -}; -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$793392f970497feb, { - displayName: $213e4d2df823067d$var$PORTAL_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuContent - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$CONTENT_NAME = 'MenuContent'; -const [$213e4d2df823067d$var$MenuContentProvider, $213e4d2df823067d$var$useMenuContentContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$CONTENT_NAME); -const $213e4d2df823067d$export$479f0f2f71193efe = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const portalContext = $213e4d2df823067d$var$usePortalContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); - const { - forceMount = portalContext.forceMount, - ...contentProps - } = props; - const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); - const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, { - scope: props.__scopeMenu - }, /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, { - present: forceMount || context.open - }, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, { - scope: props.__scopeMenu - }, rootContext.modal ? /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentModal, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, contentProps, { - ref: forwardedRef - })) : /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentNonModal, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, contentProps, { - ref: forwardedRef - }))))); -}); -/* ---------------------------------------------------------------------------------------------- */ -const $213e4d2df823067d$var$MenuRootContentModal = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); - const ref = $cnSS2$react.useRef(null); - const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); // Hide everything from ARIA except the `MenuContent` - $cnSS2$react.useEffect(() => { - const content = ref.current; - if (content) return $cnSS2$ariahidden.hideOthers(content); - }, []); - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, props, { - ref: composedRefs // we make sure we're not trapping once it's been closed - , - - trapFocus: context.open // make sure to only disable pointer events when open - , - - disableOutsidePointerEvents: context.open, - disableOutsideScroll: true // When focus is trapped, a `focusout` event may still happen. - , - - onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, event => event.preventDefault(), { - checkForDefaultPrevented: false - }), - onDismiss: () => context.onOpenChange(false) - })); -}); -const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, props, { - ref: forwardedRef, - trapFocus: false, - disableOutsidePointerEvents: false, - disableOutsideScroll: false, - onDismiss: () => context.onOpenChange(false) - })); -}); -/* ---------------------------------------------------------------------------------------------- */ -const $213e4d2df823067d$var$MenuContentImpl = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - __scopeMenu: __scopeMenu, - loop = false, - trapFocus: trapFocus, - onOpenAutoFocus: onOpenAutoFocus, - onCloseAutoFocus: onCloseAutoFocus, - disableOutsidePointerEvents: disableOutsidePointerEvents, - onEntryFocus: onEntryFocus, - onEscapeKeyDown: onEscapeKeyDown, - onPointerDownOutside: onPointerDownOutside, - onFocusOutside: onFocusOutside, - onInteractOutside: onInteractOutside, - onDismiss: onDismiss, - disableOutsideScroll: disableOutsideScroll, - ...contentProps - } = props; - const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu); - const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu); - const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); - const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu); - const getItems = $213e4d2df823067d$var$useCollection(__scopeMenu); - const [currentItemId, setCurrentItemId] = $cnSS2$react.useState(null); - const contentRef = $cnSS2$react.useRef(null); - const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, contentRef, context.onContentChange); - const timerRef = $cnSS2$react.useRef(0); - const searchRef = $cnSS2$react.useRef(''); - const pointerGraceTimerRef = $cnSS2$react.useRef(0); - const pointerGraceIntentRef = $cnSS2$react.useRef(null); - const pointerDirRef = $cnSS2$react.useRef('right'); - const lastPointerXRef = $cnSS2$react.useRef(0); - const ScrollLockWrapper = disableOutsideScroll ? $cnSS2$reactremovescroll.RemoveScroll : $cnSS2$react.Fragment; - const scrollLockWrapperProps = disableOutsideScroll ? { - as: $cnSS2$radixuireactslot.Slot, - allowPinchZoom: true - } : undefined; - const handleTypeaheadSearch = key => { - var _items$find, _items$find2; - const search = searchRef.current + key; - const items = getItems().filter(item => !item.disabled); - const currentItem = document.activeElement; - const currentMatch = (_items$find = items.find(item => item.ref.current === currentItem)) === null || _items$find === void 0 ? void 0 : _items$find.textValue; - const values = items.map(item => item.textValue); - const nextMatch = $213e4d2df823067d$var$getNextMatch(values, search, currentMatch); - const newItem = (_items$find2 = items.find(item => item.textValue === nextMatch)) === null || _items$find2 === void 0 ? void 0 : _items$find2.ref.current; // Reset `searchRef` 1 second after it was last updated - (function updateSearch(value) { - searchRef.current = value; - window.clearTimeout(timerRef.current); - if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000); - })(search); - if (newItem) - /** - * Imperative focus during keydown is risky so we prevent React's batching updates - * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332 - */ - setTimeout(() => newItem.focus()); - }; - $cnSS2$react.useEffect(() => { - return () => window.clearTimeout(timerRef.current); - }, []); // Make sure the whole tree has focus guards as our `MenuContent` may be - // the last element in the DOM (beacuse of the `Portal`) - $cnSS2$radixuireactfocusguards.useFocusGuards(); - const isPointerMovingToSubmenu = $cnSS2$react.useCallback(event => { - var _pointerGraceIntentRe, _pointerGraceIntentRe2; - const isMovingTowards = pointerDirRef.current === ((_pointerGraceIntentRe = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe === void 0 ? void 0 : _pointerGraceIntentRe.side); - return isMovingTowards && $213e4d2df823067d$var$isPointerInGraceArea(event, (_pointerGraceIntentRe2 = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe2 === void 0 ? void 0 : _pointerGraceIntentRe2.area); - }, []); - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuContentProvider, { - scope: __scopeMenu, - searchRef: searchRef, - onItemEnter: $cnSS2$react.useCallback(event => { - if (isPointerMovingToSubmenu(event)) event.preventDefault(); - }, [isPointerMovingToSubmenu]), - onItemLeave: $cnSS2$react.useCallback(event => { - var _contentRef$current; - if (isPointerMovingToSubmenu(event)) return; - (_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 || _contentRef$current.focus(); - setCurrentItemId(null); - }, [isPointerMovingToSubmenu]), - onTriggerLeave: $cnSS2$react.useCallback(event => { - if (isPointerMovingToSubmenu(event)) event.preventDefault(); - }, [isPointerMovingToSubmenu]), - pointerGraceTimerRef: pointerGraceTimerRef, - onPointerGraceIntentChange: $cnSS2$react.useCallback(intent => { - pointerGraceIntentRef.current = intent; - }, []) - }, /*#__PURE__*/$cnSS2$react.createElement(ScrollLockWrapper, scrollLockWrapperProps, /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactfocusscope.FocusScope, { - asChild: true, - trapped: trapFocus, - onMountAutoFocus: $cnSS2$radixuiprimitive.composeEventHandlers(onOpenAutoFocus, event => { - var _contentRef$current2; - // when opening, explicitly focus the content area only and leave - // `onEntryFocus` in control of focusing first item - event.preventDefault(); - (_contentRef$current2 = contentRef.current) === null || _contentRef$current2 === void 0 || _contentRef$current2.focus(); - }), - onUnmountAutoFocus: onCloseAutoFocus - }, /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactdismissablelayer.DismissableLayer, { - asChild: true, - disableOutsidePointerEvents: disableOutsidePointerEvents, - onEscapeKeyDown: onEscapeKeyDown, - onPointerDownOutside: onPointerDownOutside, - onFocusOutside: onFocusOutside, - onInteractOutside: onInteractOutside, - onDismiss: onDismiss - }, /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactrovingfocus.Root, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - asChild: true - }, rovingFocusGroupScope, { - dir: rootContext.dir, - orientation: "vertical", - loop: loop, - currentTabStopId: currentItemId, - onCurrentTabStopIdChange: setCurrentItemId, - onEntryFocus: $cnSS2$radixuiprimitive.composeEventHandlers(onEntryFocus, event => { - // only focus first item when using keyboard - if (!rootContext.isUsingKeyboardRef.current) event.preventDefault(); - }) - }), /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactpopper.Content, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - role: "menu", - "aria-orientation": "vertical", - "data-state": $213e4d2df823067d$var$getOpenState(context.open), - "data-radix-menu-content": "", - dir: rootContext.dir - }, popperScope, contentProps, { - ref: composedRefs, - style: { - outline: 'none', - ...contentProps.style - }, - onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(contentProps.onKeyDown, event => { - // submenu key events bubble through portals. We only care about keys in this menu. - const target = event.target; - const isKeyDownInside = target.closest('[data-radix-menu-content]') === event.currentTarget; - const isModifierKey = event.ctrlKey || event.altKey || event.metaKey; - const isCharacterKey = event.key.length === 1; - if (isKeyDownInside) { - // menus should not be navigated using tab key so we prevent it - if (event.key === 'Tab') event.preventDefault(); - if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key); - } // focus first/last item based on key pressed - const content = contentRef.current; - if (event.target !== content) return; - if (!$213e4d2df823067d$var$FIRST_LAST_KEYS.includes(event.key)) return; - event.preventDefault(); - const items = getItems().filter(item => !item.disabled); - const candidateNodes = items.map(item => item.ref.current); - if ($213e4d2df823067d$var$LAST_KEYS.includes(event.key)) candidateNodes.reverse(); - $213e4d2df823067d$var$focusFirst(candidateNodes); - }), - onBlur: $cnSS2$radixuiprimitive.composeEventHandlers(props.onBlur, event => { - // clear search buffer when leaving the menu - if (!event.currentTarget.contains(event.target)) { - window.clearTimeout(timerRef.current); - searchRef.current = ''; - } - }), - onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse(event => { - const target = event.target; - const pointerXHasChanged = lastPointerXRef.current !== event.clientX; // We don't use `event.movementX` for this check because Safari will - // always return `0` on a pointer event. - if (event.currentTarget.contains(target) && pointerXHasChanged) { - const newDir = event.clientX > lastPointerXRef.current ? 'right' : 'left'; - pointerDirRef.current = newDir; - lastPointerXRef.current = event.clientX; - } - })) - }))))))); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$479f0f2f71193efe, { - displayName: $213e4d2df823067d$var$CONTENT_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuGroup - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$GROUP_NAME = 'MenuGroup'; -const $213e4d2df823067d$export$22a631d1f72787bb = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - __scopeMenu: __scopeMenu, - ...groupProps - } = props; - return /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - role: "group" - }, groupProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$22a631d1f72787bb, { - displayName: $213e4d2df823067d$var$GROUP_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuLabel - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$LABEL_NAME = 'MenuLabel'; -const $213e4d2df823067d$export$dd37bec0e8a99143 = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - __scopeMenu: __scopeMenu, - ...labelProps - } = props; - return /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, labelProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$dd37bec0e8a99143, { - displayName: $213e4d2df823067d$var$LABEL_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuItem - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$ITEM_NAME = 'MenuItem'; -const $213e4d2df823067d$var$ITEM_SELECT = 'menu.itemSelect'; -const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - disabled = false, - onSelect: onSelect, - ...itemProps - } = props; - const ref = $cnSS2$react.useRef(null); - const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu); - const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu); - const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); - const isPointerDownRef = $cnSS2$react.useRef(false); - const handleSelect = () => { - const menuItem = ref.current; - if (!disabled && menuItem) { - const itemSelectEvent = new CustomEvent($213e4d2df823067d$var$ITEM_SELECT, { - bubbles: true, - cancelable: true - }); - menuItem.addEventListener($213e4d2df823067d$var$ITEM_SELECT, event => onSelect === null || onSelect === void 0 ? void 0 : onSelect(event), { - once: true - }); - $cnSS2$radixuireactprimitive.dispatchDiscreteCustomEvent(menuItem, itemSelectEvent); - if (itemSelectEvent.defaultPrevented) isPointerDownRef.current = false;else rootContext.onClose(); - } - }; - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, itemProps, { - ref: composedRefs, - disabled: disabled, - onClick: $cnSS2$radixuiprimitive.composeEventHandlers(props.onClick, handleSelect), - onPointerDown: event => { - var _props$onPointerDown; - (_props$onPointerDown = props.onPointerDown) === null || _props$onPointerDown === void 0 || _props$onPointerDown.call(props, event); - isPointerDownRef.current = true; - }, - onPointerUp: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerUp, event => { - var _event$currentTarget; - // Pointer down can move to a different menu item which should activate it on pointer up. - // We dispatch a click for selection to allow composition with click based triggers and to - // prevent Firefox from getting stuck in text selection mode when the menu closes. - if (!isPointerDownRef.current) (_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 || _event$currentTarget.click(); - }), - onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, event => { - const isTypingAhead = contentContext.searchRef.current !== ''; - if (disabled || isTypingAhead && event.key === ' ') return; - if ($213e4d2df823067d$var$SELECTION_KEYS.includes(event.key)) { - event.currentTarget.click(); - /** - * We prevent default browser behaviour for selection keys as they should trigger - * a selection only: - * - prevents space from scrolling the page. - * - if keydown causes focus to move, prevents keydown from firing on the new target. - */ - event.preventDefault(); - } - }) - })); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$2ce376c2cc3355c8, { - displayName: $213e4d2df823067d$var$ITEM_NAME -}); -/* ---------------------------------------------------------------------------------------------- */ -const $213e4d2df823067d$var$MenuItemImpl = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - __scopeMenu: __scopeMenu, - disabled = false, - textValue: textValue, - ...itemProps - } = props; - const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, __scopeMenu); - const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu); - const ref = $cnSS2$react.useRef(null); - const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); - const [isFocused, setIsFocused] = $cnSS2$react.useState(false); // get the item's `.textContent` as default strategy for typeahead `textValue` - const [textContent, setTextContent] = $cnSS2$react.useState(''); - $cnSS2$react.useEffect(() => { - const menuItem = ref.current; - if (menuItem) { - var _menuItem$textContent; - setTextContent(((_menuItem$textContent = menuItem.textContent) !== null && _menuItem$textContent !== void 0 ? _menuItem$textContent : '').trim()); - } - }, [itemProps.children]); - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$Collection.ItemSlot, { - scope: __scopeMenu, - disabled: disabled, - textValue: textValue !== null && textValue !== void 0 ? textValue : textContent - }, /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactrovingfocus.Item, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - asChild: true - }, rovingFocusGroupScope, { - focusable: !disabled - }), /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - role: "menuitem", - "data-highlighted": isFocused ? '' : undefined, - "aria-disabled": disabled || undefined, - "data-disabled": disabled ? '' : undefined - }, itemProps, { - ref: composedRefs, - onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse(event => { - if (disabled) contentContext.onItemLeave(event);else { - contentContext.onItemEnter(event); - if (!event.defaultPrevented) { - const item = event.currentTarget; - item.focus(); - } - } - })), - onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse(event => contentContext.onItemLeave(event))), - onFocus: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocus, () => setIsFocused(true)), - onBlur: $cnSS2$radixuiprimitive.composeEventHandlers(props.onBlur, () => setIsFocused(false)) - })))); -}); -/* ------------------------------------------------------------------------------------------------- - * MenuCheckboxItem - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$CHECKBOX_ITEM_NAME = 'MenuCheckboxItem'; -const $213e4d2df823067d$export$f6f243521332502d = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - checked = false, - onCheckedChange: onCheckedChange, - ...checkboxItemProps - } = props; - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$ItemIndicatorProvider, { - scope: props.__scopeMenu, - checked: checked - }, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$export$2ce376c2cc3355c8, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - role: "menuitemcheckbox", - "aria-checked": $213e4d2df823067d$var$isIndeterminate(checked) ? 'mixed' : checked - }, checkboxItemProps, { - ref: forwardedRef, - "data-state": $213e4d2df823067d$var$getCheckedState(checked), - onSelect: $cnSS2$radixuiprimitive.composeEventHandlers(checkboxItemProps.onSelect, () => onCheckedChange === null || onCheckedChange === void 0 ? void 0 : onCheckedChange($213e4d2df823067d$var$isIndeterminate(checked) ? true : !checked), { - checkForDefaultPrevented: false - }) - }))); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$f6f243521332502d, { - displayName: $213e4d2df823067d$var$CHECKBOX_ITEM_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuRadioGroup - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$RADIO_GROUP_NAME = 'MenuRadioGroup'; -const [$213e4d2df823067d$var$RadioGroupProvider, $213e4d2df823067d$var$useRadioGroupContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$RADIO_GROUP_NAME, { - value: undefined, - onValueChange: () => {} -}); -const $213e4d2df823067d$export$ea2200c9eee416b3 = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - value: value, - onValueChange: onValueChange, - ...groupProps - } = props; - const handleValueChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onValueChange); - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$RadioGroupProvider, { - scope: props.__scopeMenu, - value: value, - onValueChange: handleValueChange - }, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$export$22a631d1f72787bb, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, groupProps, { - ref: forwardedRef - }))); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$ea2200c9eee416b3, { - displayName: $213e4d2df823067d$var$RADIO_GROUP_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuRadioItem - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$RADIO_ITEM_NAME = 'MenuRadioItem'; -const $213e4d2df823067d$export$69bd225e9817f6d0 = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - value: value, - ...radioItemProps - } = props; - const context = $213e4d2df823067d$var$useRadioGroupContext($213e4d2df823067d$var$RADIO_ITEM_NAME, props.__scopeMenu); - const checked = value === context.value; - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$ItemIndicatorProvider, { - scope: props.__scopeMenu, - checked: checked - }, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$export$2ce376c2cc3355c8, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - role: "menuitemradio", - "aria-checked": checked - }, radioItemProps, { - ref: forwardedRef, - "data-state": $213e4d2df823067d$var$getCheckedState(checked), - onSelect: $cnSS2$radixuiprimitive.composeEventHandlers(radioItemProps.onSelect, () => { - var _context$onValueChang; - return (_context$onValueChang = context.onValueChange) === null || _context$onValueChang === void 0 ? void 0 : _context$onValueChang.call(context, value); - }, { - checkForDefaultPrevented: false - }) - }))); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$69bd225e9817f6d0, { - displayName: $213e4d2df823067d$var$RADIO_ITEM_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuItemIndicator - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$ITEM_INDICATOR_NAME = 'MenuItemIndicator'; -const [$213e4d2df823067d$var$ItemIndicatorProvider, $213e4d2df823067d$var$useItemIndicatorContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$ITEM_INDICATOR_NAME, { - checked: false -}); -const $213e4d2df823067d$export$a2593e23056970a3 = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - __scopeMenu: __scopeMenu, - forceMount: forceMount, - ...itemIndicatorProps - } = props; - const indicatorContext = $213e4d2df823067d$var$useItemIndicatorContext($213e4d2df823067d$var$ITEM_INDICATOR_NAME, __scopeMenu); - return /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, { - present: forceMount || $213e4d2df823067d$var$isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true - }, /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.span, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, itemIndicatorProps, { - ref: forwardedRef, - "data-state": $213e4d2df823067d$var$getCheckedState(indicatorContext.checked) - }))); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$a2593e23056970a3, { - displayName: $213e4d2df823067d$var$ITEM_INDICATOR_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuSeparator - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$SEPARATOR_NAME = 'MenuSeparator'; -const $213e4d2df823067d$export$1cec7dcdd713e220 = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - __scopeMenu: __scopeMenu, - ...separatorProps - } = props; - return /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - role: "separator", - "aria-orientation": "horizontal" - }, separatorProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$1cec7dcdd713e220, { - displayName: $213e4d2df823067d$var$SEPARATOR_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuArrow - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$ARROW_NAME = 'MenuArrow'; -const $213e4d2df823067d$export$bcdda4773debf5fa = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const { - __scopeMenu: __scopeMenu, - ...arrowProps - } = props; - const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); - return /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactpopper.Arrow, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({}, popperScope, arrowProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$bcdda4773debf5fa, { - displayName: $213e4d2df823067d$var$ARROW_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuSub - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$SUB_NAME = 'MenuSub'; -const [$213e4d2df823067d$var$MenuSubProvider, $213e4d2df823067d$var$useMenuSubContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$SUB_NAME); -const $213e4d2df823067d$export$71bdb9d1e2909932 = props => { - const { - __scopeMenu: __scopeMenu, - children: children, - open = false, - onOpenChange: onOpenChange - } = props; - const parentMenuContext = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_NAME, __scopeMenu); - const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); - const [trigger, setTrigger] = $cnSS2$react.useState(null); - const [content, setContent] = $cnSS2$react.useState(null); - const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus. - $cnSS2$react.useEffect(() => { - if (parentMenuContext.open === false) handleOpenChange(false); - return () => handleOpenChange(false); - }, [parentMenuContext.open, handleOpenChange]); - return /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, { - scope: __scopeMenu, - open: open, - onOpenChange: handleOpenChange, - content: content, - onContentChange: setContent - }, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuSubProvider, { - scope: __scopeMenu, - contentId: $cnSS2$radixuireactid.useId(), - triggerId: $cnSS2$radixuireactid.useId(), - trigger: trigger, - onTriggerChange: setTrigger - }, children))); -}; -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$71bdb9d1e2909932, { - displayName: $213e4d2df823067d$var$SUB_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuSubTrigger - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$SUB_TRIGGER_NAME = 'MenuSubTrigger'; -const $213e4d2df823067d$export$5fbbb3ba7297405f = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu); - const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu); - const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu); - const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu); - const openTimerRef = $cnSS2$react.useRef(null); - const { - pointerGraceTimerRef: pointerGraceTimerRef, - onPointerGraceIntentChange: onPointerGraceIntentChange - } = contentContext; - const scope = { - __scopeMenu: props.__scopeMenu - }; - const clearOpenTimer = $cnSS2$react.useCallback(() => { - if (openTimerRef.current) window.clearTimeout(openTimerRef.current); - openTimerRef.current = null; - }, []); - $cnSS2$react.useEffect(() => clearOpenTimer, [clearOpenTimer]); - $cnSS2$react.useEffect(() => { - const pointerGraceTimer = pointerGraceTimerRef.current; - return () => { - window.clearTimeout(pointerGraceTimer); - onPointerGraceIntentChange(null); - }; - }, [pointerGraceTimerRef, onPointerGraceIntentChange]); - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$export$9fa5ebd18bee4d43, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - asChild: true - }, scope), /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - id: subContext.triggerId, - "aria-haspopup": "menu", - "aria-expanded": context.open, - "aria-controls": subContext.contentId, - "data-state": $213e4d2df823067d$var$getOpenState(context.open) - }, props, { - ref: $cnSS2$radixuireactcomposerefs.composeRefs(forwardedRef, subContext.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from - , - - onClick: event => { - var _props$onClick; - (_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event); - if (props.disabled || event.defaultPrevented) return; - /** - * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons) - * and we rely heavily on `onFocusOutside` for submenus to close when switching - * between separate submenus. - */ - event.currentTarget.focus(); - if (!context.open) context.onOpenChange(true); - }, - onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse(event => { - contentContext.onItemEnter(event); - if (event.defaultPrevented) return; - if (!props.disabled && !context.open && !openTimerRef.current) { - contentContext.onPointerGraceIntentChange(null); - openTimerRef.current = window.setTimeout(() => { - context.onOpenChange(true); - clearOpenTimer(); - }, 100); - } - })), - onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse(event => { - var _context$content; - clearOpenTimer(); - const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect(); - if (contentRect) { - var _context$content2; - // TODO: make sure to update this when we change positioning logic - const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side; - const rightSide = side === 'right'; - const bleed = rightSide ? -5 : 5; - const contentNearEdge = contentRect[rightSide ? 'left' : 'right']; - const contentFarEdge = contentRect[rightSide ? 'right' : 'left']; - contentContext.onPointerGraceIntentChange({ - area: [ - // consistently within polygon bounds - { - x: event.clientX + bleed, - y: event.clientY - }, { - x: contentNearEdge, - y: contentRect.top - }, { - x: contentFarEdge, - y: contentRect.top - }, { - x: contentFarEdge, - y: contentRect.bottom - }, { - x: contentNearEdge, - y: contentRect.bottom - }], - side: side - }); - window.clearTimeout(pointerGraceTimerRef.current); - pointerGraceTimerRef.current = window.setTimeout(() => contentContext.onPointerGraceIntentChange(null), 300); - } else { - contentContext.onTriggerLeave(event); - if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened. - contentContext.onPointerGraceIntentChange(null); - } - })), - onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, event => { - const isTypingAhead = contentContext.searchRef.current !== ''; - if (props.disabled || isTypingAhead && event.key === ' ') return; - if ($213e4d2df823067d$var$SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) { - var _context$content3; - context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction - // so we ensure content is given focus again when switching to keyboard. - (_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling - event.preventDefault(); - } - }) - }))); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$5fbbb3ba7297405f, { - displayName: $213e4d2df823067d$var$SUB_TRIGGER_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * MenuSubContent - * -----------------------------------------------------------------------------------------------*/ -const $213e4d2df823067d$var$SUB_CONTENT_NAME = 'MenuSubContent'; -const $213e4d2df823067d$export$e7142ab31822bde6 = /*#__PURE__*/$cnSS2$react.forwardRef((props, forwardedRef) => { - const portalContext = $213e4d2df823067d$var$usePortalContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); - const { - forceMount = portalContext.forceMount, - ...subContentProps - } = props; - const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); - const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); - const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_CONTENT_NAME, props.__scopeMenu); - const ref = $cnSS2$react.useRef(null); - const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); - return /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, { - scope: props.__scopeMenu - }, /*#__PURE__*/$cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, { - present: forceMount || context.open - }, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, { - scope: props.__scopeMenu - }, /*#__PURE__*/$cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, $parcel$interopDefault($cnSS2$babelruntimehelpersextends)({ - id: subContext.contentId, - "aria-labelledby": subContext.triggerId - }, subContentProps, { - ref: composedRefs, - align: "start", - side: rootContext.dir === 'rtl' ? 'left' : 'right', - disableOutsidePointerEvents: false, - disableOutsideScroll: false, - trapFocus: false, - onOpenAutoFocus: event => { - var _ref$current; - // when opening a submenu, focus content for keyboard users only - if (rootContext.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus(); - event.preventDefault(); - } // The menu might close because of focusing another menu item in the parent menu. We - , - - onCloseAutoFocus: event => event.preventDefault(), - onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, event => { - // We prevent closing when the trigger is focused to avoid triggering a re-open animation - // on pointer interaction. - if (event.target !== subContext.trigger) context.onOpenChange(false); - }), - onEscapeKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onEscapeKeyDown, event => { - rootContext.onClose(); // ensure pressing escape in submenu doesn't escape full screen mode - event.preventDefault(); - }), - onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, event => { - // Submenu key events bubble through portals. We only care about keys in this menu. - const isKeyDownInside = event.currentTarget.contains(event.target); - const isCloseKey = $213e4d2df823067d$var$SUB_CLOSE_KEYS[rootContext.dir].includes(event.key); - if (isKeyDownInside && isCloseKey) { - var _subContext$trigger; - context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus` - (_subContext$trigger = subContext.trigger) === null || _subContext$trigger === void 0 || _subContext$trigger.focus(); // prevent window from scrolling - event.preventDefault(); - } - }) - }))))); -}); -/*#__PURE__*/ -Object.assign($213e4d2df823067d$export$e7142ab31822bde6, { - displayName: $213e4d2df823067d$var$SUB_CONTENT_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -function $213e4d2df823067d$var$getOpenState(open) { - return open ? 'open' : 'closed'; -} -function $213e4d2df823067d$var$isIndeterminate(checked) { - return checked === 'indeterminate'; -} -function $213e4d2df823067d$var$getCheckedState(checked) { - return $213e4d2df823067d$var$isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked'; -} -function $213e4d2df823067d$var$focusFirst(candidates) { - const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement; - for (const candidate of candidates) { - // if focus is already where we want to go, we don't want to keep going through the candidates - if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return; - candidate.focus(); - if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return; - } -} -/** - * Wraps an array around itself at a given start index - * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']` - */ -function $213e4d2df823067d$var$wrapArray(array, startIndex) { - return array.map((_, index) => array[(startIndex + index) % array.length]); -} -/** - * This is the "meat" of the typeahead matching logic. It takes in all the values, - * the search and the current match, and returns the next match (or `undefined`). - * - * We normalize the search because if a user has repeatedly pressed a character, - * we want the exact same behavior as if we only had that one character - * (ie. cycle through options starting with that character) - * - * We also reorder the values by wrapping the array around the current match. - * This is so we always look forward from the current match, and picking the first - * match will always be the correct one. - * - * Finally, if the normalized search is exactly one character, we exclude the - * current match from the values because otherwise it would be the first to match always - * and focus would never move. This is as opposed to the regular case, where we - * don't want focus to move if the current match still matches. - */ -function $213e4d2df823067d$var$getNextMatch(values, search, currentMatch) { - const isRepeated = search.length > 1 && Array.from(search).every(char => char === search[0]); - const normalizedSearch = isRepeated ? search[0] : search; - const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1; - let wrappedValues = $213e4d2df823067d$var$wrapArray(values, Math.max(currentMatchIndex, 0)); - const excludeCurrentMatch = normalizedSearch.length === 1; - if (excludeCurrentMatch) wrappedValues = wrappedValues.filter(v => v !== currentMatch); - const nextMatch = wrappedValues.find(value => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())); - return nextMatch !== currentMatch ? nextMatch : undefined; -} -// Determine if a point is inside of a polygon. -// Based on https://github.com/substack/point-in-polygon -function $213e4d2df823067d$var$isPointInPolygon(point, polygon) { - const { - x: x, - y: y - } = point; - let inside = false; - for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { - const xi = polygon[i].x; - const yi = polygon[i].y; - const xj = polygon[j].x; - const yj = polygon[j].y; // prettier-ignore - const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi; - if (intersect) inside = !inside; - } - return inside; -} -function $213e4d2df823067d$var$isPointerInGraceArea(event, area) { - if (!area) return false; - const cursorPos = { - x: event.clientX, - y: event.clientY - }; - return $213e4d2df823067d$var$isPointInPolygon(cursorPos, area); -} -function $213e4d2df823067d$var$whenMouse(handler) { - return event => event.pointerType === 'mouse' ? handler(event) : undefined; -} -const $213e4d2df823067d$export$be92b6f5f03c0fe9 = $213e4d2df823067d$export$d9b273488cd8ce6f; -const $213e4d2df823067d$export$b688253958b8dfe7 = $213e4d2df823067d$export$9fa5ebd18bee4d43; -const $213e4d2df823067d$export$602eac185826482c = $213e4d2df823067d$export$793392f970497feb; -const $213e4d2df823067d$export$7c6e2c02157bb7d2 = $213e4d2df823067d$export$479f0f2f71193efe; -const $213e4d2df823067d$export$eb2fcfdbd7ba97d4 = $213e4d2df823067d$export$22a631d1f72787bb; -const $213e4d2df823067d$export$b04be29aa201d4f5 = $213e4d2df823067d$export$dd37bec0e8a99143; -const $213e4d2df823067d$export$6d08773d2e66f8f2 = $213e4d2df823067d$export$2ce376c2cc3355c8; -const $213e4d2df823067d$export$16ce288f89fa631c = $213e4d2df823067d$export$f6f243521332502d; -const $213e4d2df823067d$export$a98f0dcb43a68a25 = $213e4d2df823067d$export$ea2200c9eee416b3; -const $213e4d2df823067d$export$371ab307eab489c0 = $213e4d2df823067d$export$69bd225e9817f6d0; -const $213e4d2df823067d$export$c3468e2714d175fa = $213e4d2df823067d$export$a2593e23056970a3; -const $213e4d2df823067d$export$1ff3c3f08ae963c0 = $213e4d2df823067d$export$1cec7dcdd713e220; -const $213e4d2df823067d$export$21b07c8f274aebd5 = $213e4d2df823067d$export$bcdda4773debf5fa; -const $213e4d2df823067d$export$d7a01e11500dfb6f = $213e4d2df823067d$export$71bdb9d1e2909932; -const $213e4d2df823067d$export$2ea8a7a591ac5eac = $213e4d2df823067d$export$5fbbb3ba7297405f; -const $213e4d2df823067d$export$6d4de93b380beddf = $213e4d2df823067d$export$e7142ab31822bde6; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-popper/dist/index.js": -/*!******************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-popper/dist/index.js ***! - \******************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $50Iv9$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $50Iv9$react = __webpack_require__(/*! react */ "react"); -var $50Iv9$floatinguireactdom = __webpack_require__(/*! @floating-ui/react-dom */ "../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js"); -var $50Iv9$radixuireactarrow = __webpack_require__(/*! @radix-ui/react-arrow */ "../../../node_modules/@radix-ui/react-arrow/dist/index.js"); -var $50Iv9$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $50Iv9$radixuireactcontext = __webpack_require__(/*! @radix-ui/react-context */ "../../../node_modules/@radix-ui/react-context/dist/index.js"); -var $50Iv9$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -var $50Iv9$radixuireactusecallbackref = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.js"); -var $50Iv9$radixuireactuselayouteffect = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "../../../node_modules/@radix-ui/react-use-layout-effect/dist/index.js"); -var $50Iv9$radixuireactusesize = __webpack_require__(/*! @radix-ui/react-use-size */ "../../../node_modules/@radix-ui/react-use-size/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "createPopperScope", () => $34310caa050a8d63$export$722aac194ae923); -$parcel$export(module.exports, "Popper", () => $34310caa050a8d63$export$badac9ada3a0bdf9); -$parcel$export(module.exports, "PopperAnchor", () => $34310caa050a8d63$export$ecd4e1ccab6ed6d); -$parcel$export(module.exports, "PopperContent", () => $34310caa050a8d63$export$bc4ae5855d3c4fc); -$parcel$export(module.exports, "PopperArrow", () => $34310caa050a8d63$export$79d62cd4e10a3fd0); -$parcel$export(module.exports, "Root", () => $34310caa050a8d63$export$be92b6f5f03c0fe9); -$parcel$export(module.exports, "Anchor", () => $34310caa050a8d63$export$b688253958b8dfe7); -$parcel$export(module.exports, "Content", () => $34310caa050a8d63$export$7c6e2c02157bb7d2); -$parcel$export(module.exports, "Arrow", () => $34310caa050a8d63$export$21b07c8f274aebd5); -$parcel$export(module.exports, "SIDE_OPTIONS", () => $34310caa050a8d63$export$36f0086da09c4b9f); -$parcel$export(module.exports, "ALIGN_OPTIONS", () => $34310caa050a8d63$export$3671ffab7b302fc9); -const $34310caa050a8d63$export$36f0086da09c4b9f = ['top', 'right', 'bottom', 'left']; -const $34310caa050a8d63$export$3671ffab7b302fc9 = ['start', 'center', 'end']; -/* ------------------------------------------------------------------------------------------------- - * Popper - * -----------------------------------------------------------------------------------------------*/ -const $34310caa050a8d63$var$POPPER_NAME = 'Popper'; -const [$34310caa050a8d63$var$createPopperContext, $34310caa050a8d63$export$722aac194ae923] = $50Iv9$radixuireactcontext.createContextScope($34310caa050a8d63$var$POPPER_NAME); -const [$34310caa050a8d63$var$PopperProvider, $34310caa050a8d63$var$usePopperContext] = $34310caa050a8d63$var$createPopperContext($34310caa050a8d63$var$POPPER_NAME); -const $34310caa050a8d63$export$badac9ada3a0bdf9 = props => { - const { - __scopePopper: __scopePopper, - children: children - } = props; - const [anchor, setAnchor] = $50Iv9$react.useState(null); - return /*#__PURE__*/$50Iv9$react.createElement($34310caa050a8d63$var$PopperProvider, { - scope: __scopePopper, - anchor: anchor, - onAnchorChange: setAnchor - }, children); -}; -/*#__PURE__*/ -Object.assign($34310caa050a8d63$export$badac9ada3a0bdf9, { - displayName: $34310caa050a8d63$var$POPPER_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * PopperAnchor - * -----------------------------------------------------------------------------------------------*/ -const $34310caa050a8d63$var$ANCHOR_NAME = 'PopperAnchor'; -const $34310caa050a8d63$export$ecd4e1ccab6ed6d = /*#__PURE__*/$50Iv9$react.forwardRef((props, forwardedRef) => { - const { - __scopePopper: __scopePopper, - virtualRef: virtualRef, - ...anchorProps - } = props; - const context = $34310caa050a8d63$var$usePopperContext($34310caa050a8d63$var$ANCHOR_NAME, __scopePopper); - const ref = $50Iv9$react.useRef(null); - const composedRefs = $50Iv9$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); - $50Iv9$react.useEffect(() => { - // Consumer can anchor the popper to something that isn't - // a DOM node e.g. pointer position, so we override the - // `anchorRef` with their virtual ref in this case. - context.onAnchorChange((virtualRef === null || virtualRef === void 0 ? void 0 : virtualRef.current) || ref.current); - }); - return virtualRef ? null : /*#__PURE__*/$50Iv9$react.createElement($50Iv9$radixuireactprimitive.Primitive.div, $parcel$interopDefault($50Iv9$babelruntimehelpersextends)({}, anchorProps, { - ref: composedRefs - })); -}); -/*#__PURE__*/ -Object.assign($34310caa050a8d63$export$ecd4e1ccab6ed6d, { - displayName: $34310caa050a8d63$var$ANCHOR_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * PopperContent - * -----------------------------------------------------------------------------------------------*/ -const $34310caa050a8d63$var$CONTENT_NAME = 'PopperContent'; -const [$34310caa050a8d63$var$PopperContentProvider, $34310caa050a8d63$var$useContentContext] = $34310caa050a8d63$var$createPopperContext($34310caa050a8d63$var$CONTENT_NAME); -const $34310caa050a8d63$export$bc4ae5855d3c4fc = /*#__PURE__*/$50Iv9$react.forwardRef((props, forwardedRef) => { - var _arrowSize$width, _arrowSize$height, _middlewareData$arrow, _middlewareData$arrow2, _middlewareData$arrow3, _middlewareData$trans, _middlewareData$trans2, _middlewareData$hide; - const { - __scopePopper: __scopePopper, - side = 'bottom', - sideOffset = 0, - align = 'center', - alignOffset = 0, - arrowPadding = 0, - collisionBoundary = [], - collisionPadding: collisionPaddingProp = 0, - sticky = 'partial', - hideWhenDetached = false, - avoidCollisions = true, - onPlaced: onPlaced, - ...contentProps - } = props; - const context = $34310caa050a8d63$var$usePopperContext($34310caa050a8d63$var$CONTENT_NAME, __scopePopper); - const [content, setContent] = $50Iv9$react.useState(null); - const composedRefs = $50Iv9$radixuireactcomposerefs.useComposedRefs(forwardedRef, node => setContent(node)); - const [arrow, setArrow] = $50Iv9$react.useState(null); - const arrowSize = $50Iv9$radixuireactusesize.useSize(arrow); - const arrowWidth = (_arrowSize$width = arrowSize === null || arrowSize === void 0 ? void 0 : arrowSize.width) !== null && _arrowSize$width !== void 0 ? _arrowSize$width : 0; - const arrowHeight = (_arrowSize$height = arrowSize === null || arrowSize === void 0 ? void 0 : arrowSize.height) !== null && _arrowSize$height !== void 0 ? _arrowSize$height : 0; - const desiredPlacement = side + (align !== 'center' ? '-' + align : ''); - const collisionPadding = typeof collisionPaddingProp === 'number' ? collisionPaddingProp : { - top: 0, - right: 0, - bottom: 0, - left: 0, - ...collisionPaddingProp - }; - const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary]; - const hasExplicitBoundaries = boundary.length > 0; - const detectOverflowOptions = { - padding: collisionPadding, - boundary: boundary.filter($34310caa050a8d63$var$isNotNull), - // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries - altBoundary: hasExplicitBoundaries - }; - const { - refs: refs, - floatingStyles: floatingStyles, - placement: placement, - isPositioned: isPositioned, - middlewareData: middlewareData - } = $50Iv9$floatinguireactdom.useFloating({ - // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues - strategy: 'fixed', - placement: desiredPlacement, - whileElementsMounted: $50Iv9$floatinguireactdom.autoUpdate, - elements: { - reference: context.anchor - }, - middleware: [$50Iv9$floatinguireactdom.offset({ - mainAxis: sideOffset + arrowHeight, - alignmentAxis: alignOffset - }), avoidCollisions && $50Iv9$floatinguireactdom.shift({ - mainAxis: true, - crossAxis: false, - limiter: sticky === 'partial' ? $50Iv9$floatinguireactdom.limitShift() : undefined, - ...detectOverflowOptions - }), avoidCollisions && $50Iv9$floatinguireactdom.flip({ - ...detectOverflowOptions - }), $50Iv9$floatinguireactdom.size({ - ...detectOverflowOptions, - apply: _ref => { - let { - elements: elements, - rects: rects, - availableWidth: availableWidth, - availableHeight: availableHeight - } = _ref; - const { - width: anchorWidth, - height: anchorHeight - } = rects.reference; - const contentStyle = elements.floating.style; - contentStyle.setProperty('--radix-popper-available-width', `${availableWidth}px`); - contentStyle.setProperty('--radix-popper-available-height', `${availableHeight}px`); - contentStyle.setProperty('--radix-popper-anchor-width', `${anchorWidth}px`); - contentStyle.setProperty('--radix-popper-anchor-height', `${anchorHeight}px`); - } - }), arrow && $50Iv9$floatinguireactdom.arrow({ - element: arrow, - padding: arrowPadding - }), $34310caa050a8d63$var$transformOrigin({ - arrowWidth: arrowWidth, - arrowHeight: arrowHeight - }), hideWhenDetached && $50Iv9$floatinguireactdom.hide({ - strategy: 'referenceHidden' - })] - }); - const [placedSide, placedAlign] = $34310caa050a8d63$var$getSideAndAlignFromPlacement(placement); - const handlePlaced = $50Iv9$radixuireactusecallbackref.useCallbackRef(onPlaced); - $50Iv9$radixuireactuselayouteffect.useLayoutEffect(() => { - if (isPositioned) handlePlaced === null || handlePlaced === void 0 || handlePlaced(); - }, [isPositioned, handlePlaced]); - const arrowX = (_middlewareData$arrow = middlewareData.arrow) === null || _middlewareData$arrow === void 0 ? void 0 : _middlewareData$arrow.x; - const arrowY = (_middlewareData$arrow2 = middlewareData.arrow) === null || _middlewareData$arrow2 === void 0 ? void 0 : _middlewareData$arrow2.y; - const cannotCenterArrow = ((_middlewareData$arrow3 = middlewareData.arrow) === null || _middlewareData$arrow3 === void 0 ? void 0 : _middlewareData$arrow3.centerOffset) !== 0; - const [contentZIndex, setContentZIndex] = $50Iv9$react.useState(); - $50Iv9$radixuireactuselayouteffect.useLayoutEffect(() => { - if (content) setContentZIndex(window.getComputedStyle(content).zIndex); - }, [content]); - return /*#__PURE__*/$50Iv9$react.createElement("div", { - ref: refs.setFloating, - "data-radix-popper-content-wrapper": "", - style: { - ...floatingStyles, - transform: isPositioned ? floatingStyles.transform : 'translate(0, -200%)', - // keep off the page when measuring - minWidth: 'max-content', - zIndex: contentZIndex, - ['--radix-popper-transform-origin']: [(_middlewareData$trans = middlewareData.transformOrigin) === null || _middlewareData$trans === void 0 ? void 0 : _middlewareData$trans.x, (_middlewareData$trans2 = middlewareData.transformOrigin) === null || _middlewareData$trans2 === void 0 ? void 0 : _middlewareData$trans2.y].join(' ') - } // Floating UI interally calculates logical alignment based the `dir` attribute on - , - - dir: props.dir - }, /*#__PURE__*/$50Iv9$react.createElement($34310caa050a8d63$var$PopperContentProvider, { - scope: __scopePopper, - placedSide: placedSide, - onArrowChange: setArrow, - arrowX: arrowX, - arrowY: arrowY, - shouldHideArrow: cannotCenterArrow - }, /*#__PURE__*/$50Iv9$react.createElement($50Iv9$radixuireactprimitive.Primitive.div, $parcel$interopDefault($50Iv9$babelruntimehelpersextends)({ - "data-side": placedSide, - "data-align": placedAlign - }, contentProps, { - ref: composedRefs, - style: { - ...contentProps.style, - // if the PopperContent hasn't been placed yet (not all measurements done) - // we prevent animations so that users's animation don't kick in too early referring wrong sides - animation: !isPositioned ? 'none' : undefined, - // hide the content if using the hide middleware and should be hidden - opacity: (_middlewareData$hide = middlewareData.hide) !== null && _middlewareData$hide !== void 0 && _middlewareData$hide.referenceHidden ? 0 : undefined - } - })))); -}); -/*#__PURE__*/ -Object.assign($34310caa050a8d63$export$bc4ae5855d3c4fc, { - displayName: $34310caa050a8d63$var$CONTENT_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * PopperArrow - * -----------------------------------------------------------------------------------------------*/ -const $34310caa050a8d63$var$ARROW_NAME = 'PopperArrow'; -const $34310caa050a8d63$var$OPPOSITE_SIDE = { - top: 'bottom', - right: 'left', - bottom: 'top', - left: 'right' -}; -const $34310caa050a8d63$export$79d62cd4e10a3fd0 = /*#__PURE__*/$50Iv9$react.forwardRef(function $34310caa050a8d63$export$79d62cd4e10a3fd0(props, forwardedRef) { - const { - __scopePopper: __scopePopper, - ...arrowProps - } = props; - const contentContext = $34310caa050a8d63$var$useContentContext($34310caa050a8d63$var$ARROW_NAME, __scopePopper); - const baseSide = $34310caa050a8d63$var$OPPOSITE_SIDE[contentContext.placedSide]; - return /*#__PURE__*/ (// we have to use an extra wrapper because `ResizeObserver` (used by `useSize`) - // doesn't report size as we'd expect on SVG elements. - // it reports their bounding box which is effectively the largest path inside the SVG. - $50Iv9$react.createElement("span", { - ref: contentContext.onArrowChange, - style: { - position: 'absolute', - left: contentContext.arrowX, - top: contentContext.arrowY, - [baseSide]: 0, - transformOrigin: { - top: '', - right: '0 0', - bottom: 'center 0', - left: '100% 0' - }[contentContext.placedSide], - transform: { - top: 'translateY(100%)', - right: 'translateY(50%) rotate(90deg) translateX(-50%)', - bottom: `rotate(180deg)`, - left: 'translateY(50%) rotate(-90deg) translateX(50%)' - }[contentContext.placedSide], - visibility: contentContext.shouldHideArrow ? 'hidden' : undefined - } - }, /*#__PURE__*/$50Iv9$react.createElement($50Iv9$radixuireactarrow.Root, $parcel$interopDefault($50Iv9$babelruntimehelpersextends)({}, arrowProps, { - ref: forwardedRef, - style: { - ...arrowProps.style, - // ensures the element can be measured correctly (mostly for if SVG) - display: 'block' - } - }))) - ); -}); -/*#__PURE__*/ -Object.assign($34310caa050a8d63$export$79d62cd4e10a3fd0, { - displayName: $34310caa050a8d63$var$ARROW_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -function $34310caa050a8d63$var$isNotNull(value) { - return value !== null; -} -const $34310caa050a8d63$var$transformOrigin = options => ({ - name: 'transformOrigin', - options: options, - fn(data) { - var _middlewareData$arrow4, _middlewareData$arrow5, _middlewareData$arrow6, _middlewareData$arrow7, _middlewareData$arrow8; - const { - placement: placement, - rects: rects, - middlewareData: middlewareData - } = data; - const cannotCenterArrow = ((_middlewareData$arrow4 = middlewareData.arrow) === null || _middlewareData$arrow4 === void 0 ? void 0 : _middlewareData$arrow4.centerOffset) !== 0; - const isArrowHidden = cannotCenterArrow; - const arrowWidth = isArrowHidden ? 0 : options.arrowWidth; - const arrowHeight = isArrowHidden ? 0 : options.arrowHeight; - const [placedSide, placedAlign] = $34310caa050a8d63$var$getSideAndAlignFromPlacement(placement); - const noArrowAlign = { - start: '0%', - center: '50%', - end: '100%' - }[placedAlign]; - const arrowXCenter = ((_middlewareData$arrow5 = (_middlewareData$arrow6 = middlewareData.arrow) === null || _middlewareData$arrow6 === void 0 ? void 0 : _middlewareData$arrow6.x) !== null && _middlewareData$arrow5 !== void 0 ? _middlewareData$arrow5 : 0) + arrowWidth / 2; - const arrowYCenter = ((_middlewareData$arrow7 = (_middlewareData$arrow8 = middlewareData.arrow) === null || _middlewareData$arrow8 === void 0 ? void 0 : _middlewareData$arrow8.y) !== null && _middlewareData$arrow7 !== void 0 ? _middlewareData$arrow7 : 0) + arrowHeight / 2; - let x = ''; - let y = ''; - if (placedSide === 'bottom') { - x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`; - y = `${-arrowHeight}px`; - } else if (placedSide === 'top') { - x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`; - y = `${rects.floating.height + arrowHeight}px`; - } else if (placedSide === 'right') { - x = `${-arrowHeight}px`; - y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`; - } else if (placedSide === 'left') { - x = `${rects.floating.width + arrowHeight}px`; - y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`; - } - return { - data: { - x: x, - y: y - } - }; - } -}); -function $34310caa050a8d63$var$getSideAndAlignFromPlacement(placement) { - const [side, align = 'center'] = placement.split('-'); - return [side, align]; -} -const $34310caa050a8d63$export$be92b6f5f03c0fe9 = $34310caa050a8d63$export$badac9ada3a0bdf9; -const $34310caa050a8d63$export$b688253958b8dfe7 = $34310caa050a8d63$export$ecd4e1ccab6ed6d; -const $34310caa050a8d63$export$7c6e2c02157bb7d2 = $34310caa050a8d63$export$bc4ae5855d3c4fc; -const $34310caa050a8d63$export$21b07c8f274aebd5 = $34310caa050a8d63$export$79d62cd4e10a3fd0; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-portal/dist/index.js": -/*!******************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-portal/dist/index.js ***! - \******************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $amzHf$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $amzHf$react = __webpack_require__(/*! react */ "react"); -var $amzHf$reactdom = __webpack_require__(/*! react-dom */ "react-dom"); -var $amzHf$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "Portal", () => $913a70b877676c16$export$602eac185826482c); -$parcel$export(module.exports, "Root", () => $913a70b877676c16$export$be92b6f5f03c0fe9); - -/* ------------------------------------------------------------------------------------------------- - * Portal - * -----------------------------------------------------------------------------------------------*/ -const $913a70b877676c16$var$PORTAL_NAME = 'Portal'; -const $913a70b877676c16$export$602eac185826482c = /*#__PURE__*/$amzHf$react.forwardRef((props, forwardedRef) => { - var _globalThis$document; - const { - container = globalThis === null || globalThis === void 0 ? void 0 : (_globalThis$document = globalThis.document) === null || _globalThis$document === void 0 ? void 0 : _globalThis$document.body, - ...portalProps - } = props; - return container ? /*#__PURE__*/$parcel$interopDefault($amzHf$reactdom).createPortal( /*#__PURE__*/$amzHf$react.createElement($amzHf$radixuireactprimitive.Primitive.div, $parcel$interopDefault($amzHf$babelruntimehelpersextends)({}, portalProps, { - ref: forwardedRef - })), container) : null; -}); -/*#__PURE__*/ -Object.assign($913a70b877676c16$export$602eac185826482c, { - displayName: $913a70b877676c16$var$PORTAL_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -const $913a70b877676c16$export$be92b6f5f03c0fe9 = $913a70b877676c16$export$602eac185826482c; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-presence/dist/index.js": -/*!********************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-presence/dist/index.js ***! - \********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $fnLeV$react = __webpack_require__(/*! react */ "react"); -var $fnLeV$reactdom = __webpack_require__(/*! react-dom */ "react-dom"); -var $fnLeV$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $fnLeV$radixuireactuselayouteffect = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "../../../node_modules/@radix-ui/react-use-layout-effect/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "Presence", () => $a2fa0214bb2735a1$export$99c2b779aa4e8b8b); -function $8f63844556d0d3cd$export$3e6543de14f8614f(initialState, machine) { - return $fnLeV$react.useReducer((state, event) => { - const nextState = machine[state][event]; - return nextState !== null && nextState !== void 0 ? nextState : state; - }, initialState); -} -const $a2fa0214bb2735a1$export$99c2b779aa4e8b8b = props => { - const { - present: present, - children: children - } = props; - const presence = $a2fa0214bb2735a1$var$usePresence(present); - const child = typeof children === 'function' ? children({ - present: presence.isPresent - }) : $fnLeV$react.Children.only(children); - const ref = $fnLeV$radixuireactcomposerefs.useComposedRefs(presence.ref, child.ref); - const forceMount = typeof children === 'function'; - return forceMount || presence.isPresent ? /*#__PURE__*/$fnLeV$react.cloneElement(child, { - ref: ref - }) : null; -}; -$a2fa0214bb2735a1$export$99c2b779aa4e8b8b.displayName = 'Presence'; -/* ------------------------------------------------------------------------------------------------- - * usePresence - * -----------------------------------------------------------------------------------------------*/ -function $a2fa0214bb2735a1$var$usePresence(present) { - const [node1, setNode] = $fnLeV$react.useState(); - const stylesRef = $fnLeV$react.useRef({}); - const prevPresentRef = $fnLeV$react.useRef(present); - const prevAnimationNameRef = $fnLeV$react.useRef('none'); - const initialState = present ? 'mounted' : 'unmounted'; - const [state, send] = $8f63844556d0d3cd$export$3e6543de14f8614f(initialState, { - mounted: { - UNMOUNT: 'unmounted', - ANIMATION_OUT: 'unmountSuspended' - }, - unmountSuspended: { - MOUNT: 'mounted', - ANIMATION_END: 'unmounted' - }, - unmounted: { - MOUNT: 'mounted' - } - }); - $fnLeV$react.useEffect(() => { - const currentAnimationName = $a2fa0214bb2735a1$var$getAnimationName(stylesRef.current); - prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none'; - }, [state]); - $fnLeV$radixuireactuselayouteffect.useLayoutEffect(() => { - const styles = stylesRef.current; - const wasPresent = prevPresentRef.current; - const hasPresentChanged = wasPresent !== present; - if (hasPresentChanged) { - const prevAnimationName = prevAnimationNameRef.current; - const currentAnimationName = $a2fa0214bb2735a1$var$getAnimationName(styles); - if (present) send('MOUNT');else if (currentAnimationName === 'none' || (styles === null || styles === void 0 ? void 0 : styles.display) === 'none') - // If there is no exit animation or the element is hidden, animations won't run - // so we unmount instantly - send('UNMOUNT');else { - /** - * When `present` changes to `false`, we check changes to animation-name to - * determine whether an animation has started. We chose this approach (reading - * computed styles) because there is no `animationrun` event and `animationstart` - * fires after `animation-delay` has expired which would be too late. - */ - const isAnimating = prevAnimationName !== currentAnimationName; - if (wasPresent && isAnimating) send('ANIMATION_OUT');else send('UNMOUNT'); - } - prevPresentRef.current = present; - } - }, [present, send]); - $fnLeV$radixuireactuselayouteffect.useLayoutEffect(() => { - if (node1) { - /** - * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel` - * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we - * make sure we only trigger ANIMATION_END for the currently active animation. - */ - const handleAnimationEnd = event => { - const currentAnimationName = $a2fa0214bb2735a1$var$getAnimationName(stylesRef.current); - const isCurrentAnimation = currentAnimationName.includes(event.animationName); - if (event.target === node1 && isCurrentAnimation) - // With React 18 concurrency this update is applied - // a frame after the animation ends, creating a flash of visible content. - // By manually flushing we ensure they sync within a frame, removing the flash. - $fnLeV$reactdom.flushSync(() => send('ANIMATION_END')); - }; - const handleAnimationStart = event => { - if (event.target === node1) - // if animation occurred, store its name as the previous animation. - prevAnimationNameRef.current = $a2fa0214bb2735a1$var$getAnimationName(stylesRef.current); - }; - node1.addEventListener('animationstart', handleAnimationStart); - node1.addEventListener('animationcancel', handleAnimationEnd); - node1.addEventListener('animationend', handleAnimationEnd); - return () => { - node1.removeEventListener('animationstart', handleAnimationStart); - node1.removeEventListener('animationcancel', handleAnimationEnd); - node1.removeEventListener('animationend', handleAnimationEnd); - }; - } else - // Transition to the unmounted state if the node is removed prematurely. - // We avoid doing so during cleanup as the node may change but still exist. - send('ANIMATION_END'); - }, [node1, send]); - return { - isPresent: ['mounted', 'unmountSuspended'].includes(state), - ref: $fnLeV$react.useCallback(node => { - if (node) stylesRef.current = getComputedStyle(node); - setNode(node); - }, []) - }; -} -/* -----------------------------------------------------------------------------------------------*/ -function $a2fa0214bb2735a1$var$getAnimationName(styles) { - return (styles === null || styles === void 0 ? void 0 : styles.animationName) || 'none'; -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-primitive/dist/index.js": -/*!*********************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-primitive/dist/index.js ***! - \*********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $iMixA$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $iMixA$react = __webpack_require__(/*! react */ "react"); -var $iMixA$reactdom = __webpack_require__(/*! react-dom */ "react-dom"); -var $iMixA$radixuireactslot = __webpack_require__(/*! @radix-ui/react-slot */ "../../../node_modules/@radix-ui/react-slot/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "Primitive", () => $c3def6332c2749a6$export$250ffa63cdc0d034); -$parcel$export(module.exports, "Root", () => $c3def6332c2749a6$export$be92b6f5f03c0fe9); -$parcel$export(module.exports, "dispatchDiscreteCustomEvent", () => $c3def6332c2749a6$export$6d1a0317bde7de7f); -const $c3def6332c2749a6$var$NODES = ['a', 'button', 'div', 'form', 'h2', 'h3', 'img', 'input', 'label', 'li', 'nav', 'ol', 'p', 'span', 'svg', 'ul']; // Temporary while we await merge of this fix: -// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55396 -// prettier-ignore -/* ------------------------------------------------------------------------------------------------- - * Primitive - * -----------------------------------------------------------------------------------------------*/ -const $c3def6332c2749a6$export$250ffa63cdc0d034 = $c3def6332c2749a6$var$NODES.reduce((primitive, node) => { - const Node = /*#__PURE__*/$iMixA$react.forwardRef((props, forwardedRef) => { - const { - asChild: asChild, - ...primitiveProps - } = props; - const Comp = asChild ? $iMixA$radixuireactslot.Slot : node; - $iMixA$react.useEffect(() => { - window[Symbol.for('radix-ui')] = true; - }, []); - return /*#__PURE__*/$iMixA$react.createElement(Comp, $parcel$interopDefault($iMixA$babelruntimehelpersextends)({}, primitiveProps, { - ref: forwardedRef - })); - }); - Node.displayName = `Primitive.${node}`; - return { - ...primitive, - [node]: Node - }; -}, {}); -/* ------------------------------------------------------------------------------------------------- - * Utils - * -----------------------------------------------------------------------------------------------*/ /** - * Flush custom event dispatch - * https://github.com/radix-ui/primitives/pull/1378 - * - * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types. - * - * Internally, React prioritises events in the following order: - * - discrete - * - continuous - * - default - * - * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350 - * - * `discrete` is an important distinction as updates within these events are applied immediately. - * React however, is not able to infer the priority of custom event types due to how they are detected internally. - * Because of this, it's possible for updates from custom events to be unexpectedly batched when - * dispatched by another `discrete` event. - * - * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch. - * This utility should be used when dispatching a custom event from within another `discrete` event, this utility - * is not nessesary when dispatching known event types, or if dispatching a custom type inside a non-discrete event. - * For example: - * - * dispatching a known click 👎 - * target.dispatchEvent(new Event(‘click’)) - * - * dispatching a custom type within a non-discrete event 👎 - * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))} - * - * dispatching a custom type within a `discrete` event 👍 - * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))} - * - * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use - * this utility with them. This is because it's possible for those handlers to be called implicitly during render - * e.g. when focus is within a component as it is unmounted, or when managing focus on mount. - */ -function $c3def6332c2749a6$export$6d1a0317bde7de7f(target, event) { - if (target) $iMixA$reactdom.flushSync(() => target.dispatchEvent(event)); -} -/* -----------------------------------------------------------------------------------------------*/ -const $c3def6332c2749a6$export$be92b6f5f03c0fe9 = $c3def6332c2749a6$export$250ffa63cdc0d034; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-roving-focus/dist/index.js": -/*!************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-roving-focus/dist/index.js ***! - \************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $9QJ9Y$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $9QJ9Y$react = __webpack_require__(/*! react */ "react"); -var $9QJ9Y$radixuiprimitive = __webpack_require__(/*! @radix-ui/primitive */ "../../../node_modules/@radix-ui/primitive/dist/index.js"); -var $9QJ9Y$radixuireactcollection = __webpack_require__(/*! @radix-ui/react-collection */ "../../../node_modules/@radix-ui/react-collection/dist/index.js"); -var $9QJ9Y$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $9QJ9Y$radixuireactcontext = __webpack_require__(/*! @radix-ui/react-context */ "../../../node_modules/@radix-ui/react-context/dist/index.js"); -var $9QJ9Y$radixuireactid = __webpack_require__(/*! @radix-ui/react-id */ "../../../node_modules/@radix-ui/react-id/dist/index.js"); -var $9QJ9Y$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -var $9QJ9Y$radixuireactusecallbackref = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.js"); -var $9QJ9Y$radixuireactusecontrollablestate = __webpack_require__(/*! @radix-ui/react-use-controllable-state */ "../../../node_modules/@radix-ui/react-use-controllable-state/dist/index.js"); -var $9QJ9Y$radixuireactdirection = __webpack_require__(/*! @radix-ui/react-direction */ "../../../node_modules/@radix-ui/react-direction/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "createRovingFocusGroupScope", () => $0063afae63b3fa70$export$c7109489551a4f4); -$parcel$export(module.exports, "RovingFocusGroup", () => $0063afae63b3fa70$export$8699f7c8af148338); -$parcel$export(module.exports, "RovingFocusGroupItem", () => $0063afae63b3fa70$export$ab9df7c53fe8454); -$parcel$export(module.exports, "Root", () => $0063afae63b3fa70$export$be92b6f5f03c0fe9); -$parcel$export(module.exports, "Item", () => $0063afae63b3fa70$export$6d08773d2e66f8f2); -const $0063afae63b3fa70$var$ENTRY_FOCUS = 'rovingFocusGroup.onEntryFocus'; -const $0063afae63b3fa70$var$EVENT_OPTIONS = { - bubbles: false, - cancelable: true -}; -/* ------------------------------------------------------------------------------------------------- - * RovingFocusGroup - * -----------------------------------------------------------------------------------------------*/ -const $0063afae63b3fa70$var$GROUP_NAME = 'RovingFocusGroup'; -const [$0063afae63b3fa70$var$Collection, $0063afae63b3fa70$var$useCollection, $0063afae63b3fa70$var$createCollectionScope] = $9QJ9Y$radixuireactcollection.createCollection($0063afae63b3fa70$var$GROUP_NAME); -const [$0063afae63b3fa70$var$createRovingFocusGroupContext, $0063afae63b3fa70$export$c7109489551a4f4] = $9QJ9Y$radixuireactcontext.createContextScope($0063afae63b3fa70$var$GROUP_NAME, [$0063afae63b3fa70$var$createCollectionScope]); -const [$0063afae63b3fa70$var$RovingFocusProvider, $0063afae63b3fa70$var$useRovingFocusContext] = $0063afae63b3fa70$var$createRovingFocusGroupContext($0063afae63b3fa70$var$GROUP_NAME); -const $0063afae63b3fa70$export$8699f7c8af148338 = /*#__PURE__*/$9QJ9Y$react.forwardRef((props, forwardedRef) => { - return /*#__PURE__*/$9QJ9Y$react.createElement($0063afae63b3fa70$var$Collection.Provider, { - scope: props.__scopeRovingFocusGroup - }, /*#__PURE__*/$9QJ9Y$react.createElement($0063afae63b3fa70$var$Collection.Slot, { - scope: props.__scopeRovingFocusGroup - }, /*#__PURE__*/$9QJ9Y$react.createElement($0063afae63b3fa70$var$RovingFocusGroupImpl, $parcel$interopDefault($9QJ9Y$babelruntimehelpersextends)({}, props, { - ref: forwardedRef - })))); -}); -/*#__PURE__*/ -Object.assign($0063afae63b3fa70$export$8699f7c8af148338, { - displayName: $0063afae63b3fa70$var$GROUP_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -const $0063afae63b3fa70$var$RovingFocusGroupImpl = /*#__PURE__*/$9QJ9Y$react.forwardRef((props, forwardedRef) => { - const { - __scopeRovingFocusGroup: __scopeRovingFocusGroup, - orientation: orientation, - loop = false, - dir: dir, - currentTabStopId: currentTabStopIdProp, - defaultCurrentTabStopId: defaultCurrentTabStopId, - onCurrentTabStopIdChange: onCurrentTabStopIdChange, - onEntryFocus: onEntryFocus, - ...groupProps - } = props; - const ref = $9QJ9Y$react.useRef(null); - const composedRefs = $9QJ9Y$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); - const direction = $9QJ9Y$radixuireactdirection.useDirection(dir); - const [currentTabStopId = null, setCurrentTabStopId] = $9QJ9Y$radixuireactusecontrollablestate.useControllableState({ - prop: currentTabStopIdProp, - defaultProp: defaultCurrentTabStopId, - onChange: onCurrentTabStopIdChange - }); - const [isTabbingBackOut, setIsTabbingBackOut] = $9QJ9Y$react.useState(false); - const handleEntryFocus = $9QJ9Y$radixuireactusecallbackref.useCallbackRef(onEntryFocus); - const getItems = $0063afae63b3fa70$var$useCollection(__scopeRovingFocusGroup); - const isClickFocusRef = $9QJ9Y$react.useRef(false); - const [focusableItemsCount, setFocusableItemsCount] = $9QJ9Y$react.useState(0); - $9QJ9Y$react.useEffect(() => { - const node = ref.current; - if (node) { - node.addEventListener($0063afae63b3fa70$var$ENTRY_FOCUS, handleEntryFocus); - return () => node.removeEventListener($0063afae63b3fa70$var$ENTRY_FOCUS, handleEntryFocus); - } - }, [handleEntryFocus]); - return /*#__PURE__*/$9QJ9Y$react.createElement($0063afae63b3fa70$var$RovingFocusProvider, { - scope: __scopeRovingFocusGroup, - orientation: orientation, - dir: direction, - loop: loop, - currentTabStopId: currentTabStopId, - onItemFocus: $9QJ9Y$react.useCallback(tabStopId => setCurrentTabStopId(tabStopId), [setCurrentTabStopId]), - onItemShiftTab: $9QJ9Y$react.useCallback(() => setIsTabbingBackOut(true), []), - onFocusableItemAdd: $9QJ9Y$react.useCallback(() => setFocusableItemsCount(prevCount => prevCount + 1), []), - onFocusableItemRemove: $9QJ9Y$react.useCallback(() => setFocusableItemsCount(prevCount => prevCount - 1), []) - }, /*#__PURE__*/$9QJ9Y$react.createElement($9QJ9Y$radixuireactprimitive.Primitive.div, $parcel$interopDefault($9QJ9Y$babelruntimehelpersextends)({ - tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0, - "data-orientation": orientation - }, groupProps, { - ref: composedRefs, - style: { - outline: 'none', - ...props.style - }, - onMouseDown: $9QJ9Y$radixuiprimitive.composeEventHandlers(props.onMouseDown, () => { - isClickFocusRef.current = true; - }), - onFocus: $9QJ9Y$radixuiprimitive.composeEventHandlers(props.onFocus, event => { - // We normally wouldn't need this check, because we already check - // that the focus is on the current target and not bubbling to it. - // We do this because Safari doesn't focus buttons when clicked, and - // instead, the wrapper will get focused and not through a bubbling event. - const isKeyboardFocus = !isClickFocusRef.current; - if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) { - const entryFocusEvent = new CustomEvent($0063afae63b3fa70$var$ENTRY_FOCUS, $0063afae63b3fa70$var$EVENT_OPTIONS); - event.currentTarget.dispatchEvent(entryFocusEvent); - if (!entryFocusEvent.defaultPrevented) { - const items = getItems().filter(item => item.focusable); - const activeItem = items.find(item => item.active); - const currentItem = items.find(item => item.id === currentTabStopId); - const candidateItems = [activeItem, currentItem, ...items].filter(Boolean); - const candidateNodes = candidateItems.map(item => item.ref.current); - $0063afae63b3fa70$var$focusFirst(candidateNodes); - } - } - isClickFocusRef.current = false; - }), - onBlur: $9QJ9Y$radixuiprimitive.composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false)) - }))); -}); -/* ------------------------------------------------------------------------------------------------- - * RovingFocusGroupItem - * -----------------------------------------------------------------------------------------------*/ -const $0063afae63b3fa70$var$ITEM_NAME = 'RovingFocusGroupItem'; -const $0063afae63b3fa70$export$ab9df7c53fe8454 = /*#__PURE__*/$9QJ9Y$react.forwardRef((props, forwardedRef) => { - const { - __scopeRovingFocusGroup: __scopeRovingFocusGroup, - focusable = true, - active = false, - tabStopId: tabStopId, - ...itemProps - } = props; - const autoId = $9QJ9Y$radixuireactid.useId(); - const id = tabStopId || autoId; - const context = $0063afae63b3fa70$var$useRovingFocusContext($0063afae63b3fa70$var$ITEM_NAME, __scopeRovingFocusGroup); - const isCurrentTabStop = context.currentTabStopId === id; - const getItems = $0063afae63b3fa70$var$useCollection(__scopeRovingFocusGroup); - const { - onFocusableItemAdd: onFocusableItemAdd, - onFocusableItemRemove: onFocusableItemRemove - } = context; - $9QJ9Y$react.useEffect(() => { - if (focusable) { - onFocusableItemAdd(); - return () => onFocusableItemRemove(); - } - }, [focusable, onFocusableItemAdd, onFocusableItemRemove]); - return /*#__PURE__*/$9QJ9Y$react.createElement($0063afae63b3fa70$var$Collection.ItemSlot, { - scope: __scopeRovingFocusGroup, - id: id, - focusable: focusable, - active: active - }, /*#__PURE__*/$9QJ9Y$react.createElement($9QJ9Y$radixuireactprimitive.Primitive.span, $parcel$interopDefault($9QJ9Y$babelruntimehelpersextends)({ - tabIndex: isCurrentTabStop ? 0 : -1, - "data-orientation": context.orientation - }, itemProps, { - ref: forwardedRef, - onMouseDown: $9QJ9Y$radixuiprimitive.composeEventHandlers(props.onMouseDown, event => { - // We prevent focusing non-focusable items on `mousedown`. - // Even though the item has tabIndex={-1}, that only means take it out of the tab order. - if (!focusable) event.preventDefault(); // Safari doesn't focus a button when clicked so we run our logic on mousedown also - else context.onItemFocus(id); - }), - onFocus: $9QJ9Y$radixuiprimitive.composeEventHandlers(props.onFocus, () => context.onItemFocus(id)), - onKeyDown: $9QJ9Y$radixuiprimitive.composeEventHandlers(props.onKeyDown, event => { - if (event.key === 'Tab' && event.shiftKey) { - context.onItemShiftTab(); - return; - } - if (event.target !== event.currentTarget) return; - const focusIntent = $0063afae63b3fa70$var$getFocusIntent(event, context.orientation, context.dir); - if (focusIntent !== undefined) { - event.preventDefault(); - const items = getItems().filter(item => item.focusable); - let candidateNodes = items.map(item => item.ref.current); - if (focusIntent === 'last') candidateNodes.reverse();else if (focusIntent === 'prev' || focusIntent === 'next') { - if (focusIntent === 'prev') candidateNodes.reverse(); - const currentIndex = candidateNodes.indexOf(event.currentTarget); - candidateNodes = context.loop ? $0063afae63b3fa70$var$wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1); - } - /** - * Imperative focus during keydown is risky so we prevent React's batching updates - * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332 - */ - setTimeout(() => $0063afae63b3fa70$var$focusFirst(candidateNodes)); - } - }) - }))); -}); -/*#__PURE__*/ -Object.assign($0063afae63b3fa70$export$ab9df7c53fe8454, { - displayName: $0063afae63b3fa70$var$ITEM_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ // prettier-ignore -const $0063afae63b3fa70$var$MAP_KEY_TO_FOCUS_INTENT = { - ArrowLeft: 'prev', - ArrowUp: 'prev', - ArrowRight: 'next', - ArrowDown: 'next', - PageUp: 'first', - Home: 'first', - PageDown: 'last', - End: 'last' -}; -function $0063afae63b3fa70$var$getDirectionAwareKey(key, dir) { - if (dir !== 'rtl') return key; - return key === 'ArrowLeft' ? 'ArrowRight' : key === 'ArrowRight' ? 'ArrowLeft' : key; -} -function $0063afae63b3fa70$var$getFocusIntent(event, orientation, dir) { - const key = $0063afae63b3fa70$var$getDirectionAwareKey(event.key, dir); - if (orientation === 'vertical' && ['ArrowLeft', 'ArrowRight'].includes(key)) return undefined; - if (orientation === 'horizontal' && ['ArrowUp', 'ArrowDown'].includes(key)) return undefined; - return $0063afae63b3fa70$var$MAP_KEY_TO_FOCUS_INTENT[key]; -} -function $0063afae63b3fa70$var$focusFirst(candidates) { - const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement; - for (const candidate of candidates) { - // if focus is already where we want to go, we don't want to keep going through the candidates - if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return; - candidate.focus(); - if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return; - } -} -/** - * Wraps an array around itself at a given start index - * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']` - */ -function $0063afae63b3fa70$var$wrapArray(array, startIndex) { - return array.map((_, index) => array[(startIndex + index) % array.length]); -} -const $0063afae63b3fa70$export$be92b6f5f03c0fe9 = $0063afae63b3fa70$export$8699f7c8af148338; -const $0063afae63b3fa70$export$6d08773d2e66f8f2 = $0063afae63b3fa70$export$ab9df7c53fe8454; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-slot/dist/index.js": -/*!****************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-slot/dist/index.js ***! - \****************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $dAvBt$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $dAvBt$react = __webpack_require__(/*! react */ "react"); -var $dAvBt$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "Slot", () => $82dc8d030dec7549$export$8c6ed5c666ac1360); -$parcel$export(module.exports, "Slottable", () => $82dc8d030dec7549$export$d9f1ccf0bdb05d45); -$parcel$export(module.exports, "Root", () => $82dc8d030dec7549$export$be92b6f5f03c0fe9); - -/* ------------------------------------------------------------------------------------------------- - * Slot - * -----------------------------------------------------------------------------------------------*/ -const $82dc8d030dec7549$export$8c6ed5c666ac1360 = /*#__PURE__*/$dAvBt$react.forwardRef((props, forwardedRef) => { - const { - children: children, - ...slotProps - } = props; - const childrenArray = $dAvBt$react.Children.toArray(children); - const slottable = childrenArray.find($82dc8d030dec7549$var$isSlottable); - if (slottable) { - // the new element to render is the one passed as a child of `Slottable` - const newElement = slottable.props.children; - const newChildren = childrenArray.map(child => { - if (child === slottable) { - // because the new element will be the one rendered, we are only interested - // in grabbing its children (`newElement.props.children`) - if ($dAvBt$react.Children.count(newElement) > 1) return $dAvBt$react.Children.only(null); - return /*#__PURE__*/$dAvBt$react.isValidElement(newElement) ? newElement.props.children : null; - } else return child; - }); - return /*#__PURE__*/$dAvBt$react.createElement($82dc8d030dec7549$var$SlotClone, $parcel$interopDefault($dAvBt$babelruntimehelpersextends)({}, slotProps, { - ref: forwardedRef - }), /*#__PURE__*/$dAvBt$react.isValidElement(newElement) ? /*#__PURE__*/$dAvBt$react.cloneElement(newElement, undefined, newChildren) : null); - } - return /*#__PURE__*/$dAvBt$react.createElement($82dc8d030dec7549$var$SlotClone, $parcel$interopDefault($dAvBt$babelruntimehelpersextends)({}, slotProps, { - ref: forwardedRef - }), children); -}); -$82dc8d030dec7549$export$8c6ed5c666ac1360.displayName = 'Slot'; -/* ------------------------------------------------------------------------------------------------- - * SlotClone - * -----------------------------------------------------------------------------------------------*/ -const $82dc8d030dec7549$var$SlotClone = /*#__PURE__*/$dAvBt$react.forwardRef((props, forwardedRef) => { - const { - children: children, - ...slotProps - } = props; - if ( /*#__PURE__*/$dAvBt$react.isValidElement(children)) return /*#__PURE__*/$dAvBt$react.cloneElement(children, { - ...$82dc8d030dec7549$var$mergeProps(slotProps, children.props), - ref: forwardedRef ? $dAvBt$radixuireactcomposerefs.composeRefs(forwardedRef, children.ref) : children.ref - }); - return $dAvBt$react.Children.count(children) > 1 ? $dAvBt$react.Children.only(null) : null; -}); -$82dc8d030dec7549$var$SlotClone.displayName = 'SlotClone'; -/* ------------------------------------------------------------------------------------------------- - * Slottable - * -----------------------------------------------------------------------------------------------*/ -const $82dc8d030dec7549$export$d9f1ccf0bdb05d45 = _ref => { - let { - children: children - } = _ref; - return /*#__PURE__*/$dAvBt$react.createElement($dAvBt$react.Fragment, null, children); -}; -/* ---------------------------------------------------------------------------------------------- */ -function $82dc8d030dec7549$var$isSlottable(child) { - return /*#__PURE__*/$dAvBt$react.isValidElement(child) && child.type === $82dc8d030dec7549$export$d9f1ccf0bdb05d45; -} -function $82dc8d030dec7549$var$mergeProps(slotProps, childProps) { - // all child props should override - const overrideProps = { - ...childProps - }; - for (const propName in childProps) { - const slotPropValue = slotProps[propName]; - const childPropValue = childProps[propName]; - const isHandler = /^on[A-Z]/.test(propName); - if (isHandler) { - // if the handler exists on both, we compose them - if (slotPropValue && childPropValue) overrideProps[propName] = function () { - childPropValue(...arguments); - slotPropValue(...arguments); - };else if (slotPropValue) overrideProps[propName] = slotPropValue; - } else if (propName === 'style') overrideProps[propName] = { - ...slotPropValue, - ...childPropValue - };else if (propName === 'className') overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' '); - } - return { - ...slotProps, - ...overrideProps - }; -} -const $82dc8d030dec7549$export$be92b6f5f03c0fe9 = $82dc8d030dec7549$export$8c6ed5c666ac1360; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-tooltip/dist/index.js": -/*!*******************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-tooltip/dist/index.js ***! - \*******************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $iVrL9$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $iVrL9$react = __webpack_require__(/*! react */ "react"); -var $iVrL9$radixuiprimitive = __webpack_require__(/*! @radix-ui/primitive */ "../../../node_modules/@radix-ui/primitive/dist/index.js"); -var $iVrL9$radixuireactcomposerefs = __webpack_require__(/*! @radix-ui/react-compose-refs */ "../../../node_modules/@radix-ui/react-compose-refs/dist/index.js"); -var $iVrL9$radixuireactcontext = __webpack_require__(/*! @radix-ui/react-context */ "../../../node_modules/@radix-ui/react-context/dist/index.js"); -var $iVrL9$radixuireactdismissablelayer = __webpack_require__(/*! @radix-ui/react-dismissable-layer */ "../../../node_modules/@radix-ui/react-dismissable-layer/dist/index.js"); -var $iVrL9$radixuireactid = __webpack_require__(/*! @radix-ui/react-id */ "../../../node_modules/@radix-ui/react-id/dist/index.js"); -var $iVrL9$radixuireactpopper = __webpack_require__(/*! @radix-ui/react-popper */ "../../../node_modules/@radix-ui/react-popper/dist/index.js"); -var $iVrL9$radixuireactportal = __webpack_require__(/*! @radix-ui/react-portal */ "../../../node_modules/@radix-ui/react-portal/dist/index.js"); -var $iVrL9$radixuireactpresence = __webpack_require__(/*! @radix-ui/react-presence */ "../../../node_modules/@radix-ui/react-presence/dist/index.js"); -var $iVrL9$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -var $iVrL9$radixuireactslot = __webpack_require__(/*! @radix-ui/react-slot */ "../../../node_modules/@radix-ui/react-slot/dist/index.js"); -var $iVrL9$radixuireactusecontrollablestate = __webpack_require__(/*! @radix-ui/react-use-controllable-state */ "../../../node_modules/@radix-ui/react-use-controllable-state/dist/index.js"); -var $iVrL9$radixuireactvisuallyhidden = __webpack_require__(/*! @radix-ui/react-visually-hidden */ "../../../node_modules/@radix-ui/react-visually-hidden/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "createTooltipScope", () => $c34afbc43c90cc6f$export$1c540a2224f0d865); -$parcel$export(module.exports, "TooltipProvider", () => $c34afbc43c90cc6f$export$f78649fb9ca566b8); -$parcel$export(module.exports, "Tooltip", () => $c34afbc43c90cc6f$export$28c660c63b792dea); -$parcel$export(module.exports, "TooltipTrigger", () => $c34afbc43c90cc6f$export$8c610744efcf8a1d); -$parcel$export(module.exports, "TooltipPortal", () => $c34afbc43c90cc6f$export$7b36b8f925ab7497); -$parcel$export(module.exports, "TooltipContent", () => $c34afbc43c90cc6f$export$e9003e2be37ec060); -$parcel$export(module.exports, "TooltipArrow", () => $c34afbc43c90cc6f$export$c27ee0ad710f7559); -$parcel$export(module.exports, "Provider", () => $c34afbc43c90cc6f$export$2881499e37b75b9a); -$parcel$export(module.exports, "Root", () => $c34afbc43c90cc6f$export$be92b6f5f03c0fe9); -$parcel$export(module.exports, "Trigger", () => $c34afbc43c90cc6f$export$41fb9f06171c75f4); -$parcel$export(module.exports, "Portal", () => $c34afbc43c90cc6f$export$602eac185826482c); -$parcel$export(module.exports, "Content", () => $c34afbc43c90cc6f$export$7c6e2c02157bb7d2); -$parcel$export(module.exports, "Arrow", () => $c34afbc43c90cc6f$export$21b07c8f274aebd5); -const [$c34afbc43c90cc6f$var$createTooltipContext, $c34afbc43c90cc6f$export$1c540a2224f0d865] = $iVrL9$radixuireactcontext.createContextScope('Tooltip', [$iVrL9$radixuireactpopper.createPopperScope]); -const $c34afbc43c90cc6f$var$usePopperScope = $iVrL9$radixuireactpopper.createPopperScope(); -/* ------------------------------------------------------------------------------------------------- - * TooltipProvider - * -----------------------------------------------------------------------------------------------*/ -const $c34afbc43c90cc6f$var$PROVIDER_NAME = 'TooltipProvider'; -const $c34afbc43c90cc6f$var$DEFAULT_DELAY_DURATION = 700; -const $c34afbc43c90cc6f$var$TOOLTIP_OPEN = 'tooltip.open'; -const [$c34afbc43c90cc6f$var$TooltipProviderContextProvider, $c34afbc43c90cc6f$var$useTooltipProviderContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$PROVIDER_NAME); -const $c34afbc43c90cc6f$export$f78649fb9ca566b8 = props => { - const { - __scopeTooltip: __scopeTooltip, - delayDuration = $c34afbc43c90cc6f$var$DEFAULT_DELAY_DURATION, - skipDelayDuration = 300, - disableHoverableContent = false, - children: children - } = props; - const [isOpenDelayed, setIsOpenDelayed] = $iVrL9$react.useState(true); - const isPointerInTransitRef = $iVrL9$react.useRef(false); - const skipDelayTimerRef = $iVrL9$react.useRef(0); - $iVrL9$react.useEffect(() => { - const skipDelayTimer = skipDelayTimerRef.current; - return () => window.clearTimeout(skipDelayTimer); - }, []); - return /*#__PURE__*/$iVrL9$react.createElement($c34afbc43c90cc6f$var$TooltipProviderContextProvider, { - scope: __scopeTooltip, - isOpenDelayed: isOpenDelayed, - delayDuration: delayDuration, - onOpen: $iVrL9$react.useCallback(() => { - window.clearTimeout(skipDelayTimerRef.current); - setIsOpenDelayed(false); - }, []), - onClose: $iVrL9$react.useCallback(() => { - window.clearTimeout(skipDelayTimerRef.current); - skipDelayTimerRef.current = window.setTimeout(() => setIsOpenDelayed(true), skipDelayDuration); - }, [skipDelayDuration]), - isPointerInTransitRef: isPointerInTransitRef, - onPointerInTransitChange: $iVrL9$react.useCallback(inTransit => { - isPointerInTransitRef.current = inTransit; - }, []), - disableHoverableContent: disableHoverableContent - }, children); -}; -/*#__PURE__*/ -Object.assign($c34afbc43c90cc6f$export$f78649fb9ca566b8, { - displayName: $c34afbc43c90cc6f$var$PROVIDER_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * Tooltip - * -----------------------------------------------------------------------------------------------*/ -const $c34afbc43c90cc6f$var$TOOLTIP_NAME = 'Tooltip'; -const [$c34afbc43c90cc6f$var$TooltipContextProvider, $c34afbc43c90cc6f$var$useTooltipContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$TOOLTIP_NAME); -const $c34afbc43c90cc6f$export$28c660c63b792dea = props => { - const { - __scopeTooltip: __scopeTooltip, - children: children, - open: openProp, - defaultOpen = false, - onOpenChange: onOpenChange, - disableHoverableContent: disableHoverableContentProp, - delayDuration: delayDurationProp - } = props; - const providerContext = $c34afbc43c90cc6f$var$useTooltipProviderContext($c34afbc43c90cc6f$var$TOOLTIP_NAME, props.__scopeTooltip); - const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip); - const [trigger, setTrigger] = $iVrL9$react.useState(null); - const contentId = $iVrL9$radixuireactid.useId(); - const openTimerRef = $iVrL9$react.useRef(0); - const disableHoverableContent = disableHoverableContentProp !== null && disableHoverableContentProp !== void 0 ? disableHoverableContentProp : providerContext.disableHoverableContent; - const delayDuration = delayDurationProp !== null && delayDurationProp !== void 0 ? delayDurationProp : providerContext.delayDuration; - const wasOpenDelayedRef = $iVrL9$react.useRef(false); - const [open1 = false, setOpen] = $iVrL9$radixuireactusecontrollablestate.useControllableState({ - prop: openProp, - defaultProp: defaultOpen, - onChange: open => { - if (open) { - providerContext.onOpen(); // as `onChange` is called within a lifecycle method we - // avoid dispatching via `dispatchDiscreteCustomEvent`. - document.dispatchEvent(new CustomEvent($c34afbc43c90cc6f$var$TOOLTIP_OPEN)); - } else providerContext.onClose(); - onOpenChange === null || onOpenChange === void 0 || onOpenChange(open); - } - }); - const stateAttribute = $iVrL9$react.useMemo(() => { - return open1 ? wasOpenDelayedRef.current ? 'delayed-open' : 'instant-open' : 'closed'; - }, [open1]); - const handleOpen = $iVrL9$react.useCallback(() => { - window.clearTimeout(openTimerRef.current); - wasOpenDelayedRef.current = false; - setOpen(true); - }, [setOpen]); - const handleClose = $iVrL9$react.useCallback(() => { - window.clearTimeout(openTimerRef.current); - setOpen(false); - }, [setOpen]); - const handleDelayedOpen = $iVrL9$react.useCallback(() => { - window.clearTimeout(openTimerRef.current); - openTimerRef.current = window.setTimeout(() => { - wasOpenDelayedRef.current = true; - setOpen(true); - }, delayDuration); - }, [delayDuration, setOpen]); - $iVrL9$react.useEffect(() => { - return () => window.clearTimeout(openTimerRef.current); - }, []); - return /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactpopper.Root, popperScope, /*#__PURE__*/$iVrL9$react.createElement($c34afbc43c90cc6f$var$TooltipContextProvider, { - scope: __scopeTooltip, - contentId: contentId, - open: open1, - stateAttribute: stateAttribute, - trigger: trigger, - onTriggerChange: setTrigger, - onTriggerEnter: $iVrL9$react.useCallback(() => { - if (providerContext.isOpenDelayed) handleDelayedOpen();else handleOpen(); - }, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen]), - onTriggerLeave: $iVrL9$react.useCallback(() => { - if (disableHoverableContent) handleClose();else - // Clear the timer in case the pointer leaves the trigger before the tooltip is opened. - window.clearTimeout(openTimerRef.current); - }, [handleClose, disableHoverableContent]), - onOpen: handleOpen, - onClose: handleClose, - disableHoverableContent: disableHoverableContent - }, children)); -}; -/*#__PURE__*/ -Object.assign($c34afbc43c90cc6f$export$28c660c63b792dea, { - displayName: $c34afbc43c90cc6f$var$TOOLTIP_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * TooltipTrigger - * -----------------------------------------------------------------------------------------------*/ -const $c34afbc43c90cc6f$var$TRIGGER_NAME = 'TooltipTrigger'; -const $c34afbc43c90cc6f$export$8c610744efcf8a1d = /*#__PURE__*/$iVrL9$react.forwardRef((props, forwardedRef) => { - const { - __scopeTooltip: __scopeTooltip, - ...triggerProps - } = props; - const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$TRIGGER_NAME, __scopeTooltip); - const providerContext = $c34afbc43c90cc6f$var$useTooltipProviderContext($c34afbc43c90cc6f$var$TRIGGER_NAME, __scopeTooltip); - const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip); - const ref = $iVrL9$react.useRef(null); - const composedRefs = $iVrL9$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref, context.onTriggerChange); - const isPointerDownRef = $iVrL9$react.useRef(false); - const hasPointerMoveOpenedRef = $iVrL9$react.useRef(false); - const handlePointerUp = $iVrL9$react.useCallback(() => isPointerDownRef.current = false, []); - $iVrL9$react.useEffect(() => { - return () => document.removeEventListener('pointerup', handlePointerUp); - }, [handlePointerUp]); - return /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactpopper.Anchor, $parcel$interopDefault($iVrL9$babelruntimehelpersextends)({ - asChild: true - }, popperScope), /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactprimitive.Primitive.button, $parcel$interopDefault($iVrL9$babelruntimehelpersextends)({ - // We purposefully avoid adding `type=button` here because tooltip triggers are also - // commonly anchors and the anchor `type` attribute signifies MIME type. - "aria-describedby": context.open ? context.contentId : undefined, - "data-state": context.stateAttribute - }, triggerProps, { - ref: composedRefs, - onPointerMove: $iVrL9$radixuiprimitive.composeEventHandlers(props.onPointerMove, event => { - if (event.pointerType === 'touch') return; - if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) { - context.onTriggerEnter(); - hasPointerMoveOpenedRef.current = true; - } - }), - onPointerLeave: $iVrL9$radixuiprimitive.composeEventHandlers(props.onPointerLeave, () => { - context.onTriggerLeave(); - hasPointerMoveOpenedRef.current = false; - }), - onPointerDown: $iVrL9$radixuiprimitive.composeEventHandlers(props.onPointerDown, () => { - isPointerDownRef.current = true; - document.addEventListener('pointerup', handlePointerUp, { - once: true - }); - }), - onFocus: $iVrL9$radixuiprimitive.composeEventHandlers(props.onFocus, () => { - if (!isPointerDownRef.current) context.onOpen(); - }), - onBlur: $iVrL9$radixuiprimitive.composeEventHandlers(props.onBlur, context.onClose), - onClick: $iVrL9$radixuiprimitive.composeEventHandlers(props.onClick, context.onClose) - }))); -}); -/*#__PURE__*/ -Object.assign($c34afbc43c90cc6f$export$8c610744efcf8a1d, { - displayName: $c34afbc43c90cc6f$var$TRIGGER_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * TooltipPortal - * -----------------------------------------------------------------------------------------------*/ -const $c34afbc43c90cc6f$var$PORTAL_NAME = 'TooltipPortal'; -const [$c34afbc43c90cc6f$var$PortalProvider, $c34afbc43c90cc6f$var$usePortalContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$PORTAL_NAME, { - forceMount: undefined -}); -const $c34afbc43c90cc6f$export$7b36b8f925ab7497 = props => { - const { - __scopeTooltip: __scopeTooltip, - forceMount: forceMount, - children: children, - container: container - } = props; - const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$PORTAL_NAME, __scopeTooltip); - return /*#__PURE__*/$iVrL9$react.createElement($c34afbc43c90cc6f$var$PortalProvider, { - scope: __scopeTooltip, - forceMount: forceMount - }, /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactpresence.Presence, { - present: forceMount || context.open - }, /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactportal.Portal, { - asChild: true, - container: container - }, children))); -}; -/*#__PURE__*/ -Object.assign($c34afbc43c90cc6f$export$7b36b8f925ab7497, { - displayName: $c34afbc43c90cc6f$var$PORTAL_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * TooltipContent - * -----------------------------------------------------------------------------------------------*/ -const $c34afbc43c90cc6f$var$CONTENT_NAME = 'TooltipContent'; -const $c34afbc43c90cc6f$export$e9003e2be37ec060 = /*#__PURE__*/$iVrL9$react.forwardRef((props, forwardedRef) => { - const portalContext = $c34afbc43c90cc6f$var$usePortalContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip); - const { - forceMount = portalContext.forceMount, - side = 'top', - ...contentProps - } = props; - const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip); - return /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactpresence.Presence, { - present: forceMount || context.open - }, context.disableHoverableContent ? /*#__PURE__*/$iVrL9$react.createElement($c34afbc43c90cc6f$var$TooltipContentImpl, $parcel$interopDefault($iVrL9$babelruntimehelpersextends)({ - side: side - }, contentProps, { - ref: forwardedRef - })) : /*#__PURE__*/$iVrL9$react.createElement($c34afbc43c90cc6f$var$TooltipContentHoverable, $parcel$interopDefault($iVrL9$babelruntimehelpersextends)({ - side: side - }, contentProps, { - ref: forwardedRef - }))); -}); -const $c34afbc43c90cc6f$var$TooltipContentHoverable = /*#__PURE__*/$iVrL9$react.forwardRef((props, forwardedRef) => { - const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip); - const providerContext = $c34afbc43c90cc6f$var$useTooltipProviderContext($c34afbc43c90cc6f$var$CONTENT_NAME, props.__scopeTooltip); - const ref = $iVrL9$react.useRef(null); - const composedRefs = $iVrL9$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); - const [pointerGraceArea, setPointerGraceArea] = $iVrL9$react.useState(null); - const { - trigger: trigger, - onClose: onClose - } = context; - const content = ref.current; - const { - onPointerInTransitChange: onPointerInTransitChange - } = providerContext; - const handleRemoveGraceArea = $iVrL9$react.useCallback(() => { - setPointerGraceArea(null); - onPointerInTransitChange(false); - }, [onPointerInTransitChange]); - const handleCreateGraceArea = $iVrL9$react.useCallback((event, hoverTarget) => { - const currentTarget = event.currentTarget; - const exitPoint = { - x: event.clientX, - y: event.clientY - }; - const exitSide = $c34afbc43c90cc6f$var$getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect()); - const paddedExitPoints = $c34afbc43c90cc6f$var$getPaddedExitPoints(exitPoint, exitSide); - const hoverTargetPoints = $c34afbc43c90cc6f$var$getPointsFromRect(hoverTarget.getBoundingClientRect()); - const graceArea = $c34afbc43c90cc6f$var$getHull([...paddedExitPoints, ...hoverTargetPoints]); - setPointerGraceArea(graceArea); - onPointerInTransitChange(true); - }, [onPointerInTransitChange]); - $iVrL9$react.useEffect(() => { - return () => handleRemoveGraceArea(); - }, [handleRemoveGraceArea]); - $iVrL9$react.useEffect(() => { - if (trigger && content) { - const handleTriggerLeave = event => handleCreateGraceArea(event, content); - const handleContentLeave = event => handleCreateGraceArea(event, trigger); - trigger.addEventListener('pointerleave', handleTriggerLeave); - content.addEventListener('pointerleave', handleContentLeave); - return () => { - trigger.removeEventListener('pointerleave', handleTriggerLeave); - content.removeEventListener('pointerleave', handleContentLeave); - }; - } - }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]); - $iVrL9$react.useEffect(() => { - if (pointerGraceArea) { - const handleTrackPointerGrace = event => { - const target = event.target; - const pointerPosition = { - x: event.clientX, - y: event.clientY - }; - const hasEnteredTarget = (trigger === null || trigger === void 0 ? void 0 : trigger.contains(target)) || (content === null || content === void 0 ? void 0 : content.contains(target)); - const isPointerOutsideGraceArea = !$c34afbc43c90cc6f$var$isPointInPolygon(pointerPosition, pointerGraceArea); - if (hasEnteredTarget) handleRemoveGraceArea();else if (isPointerOutsideGraceArea) { - handleRemoveGraceArea(); - onClose(); - } - }; - document.addEventListener('pointermove', handleTrackPointerGrace); - return () => document.removeEventListener('pointermove', handleTrackPointerGrace); - } - }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]); - return /*#__PURE__*/$iVrL9$react.createElement($c34afbc43c90cc6f$var$TooltipContentImpl, $parcel$interopDefault($iVrL9$babelruntimehelpersextends)({}, props, { - ref: composedRefs - })); -}); -const [$c34afbc43c90cc6f$var$VisuallyHiddenContentContextProvider, $c34afbc43c90cc6f$var$useVisuallyHiddenContentContext] = $c34afbc43c90cc6f$var$createTooltipContext($c34afbc43c90cc6f$var$TOOLTIP_NAME, { - isInside: false -}); -const $c34afbc43c90cc6f$var$TooltipContentImpl = /*#__PURE__*/$iVrL9$react.forwardRef((props, forwardedRef) => { - const { - __scopeTooltip: __scopeTooltip, - children: children, - 'aria-label': ariaLabel, - onEscapeKeyDown: onEscapeKeyDown, - onPointerDownOutside: onPointerDownOutside, - ...contentProps - } = props; - const context = $c34afbc43c90cc6f$var$useTooltipContext($c34afbc43c90cc6f$var$CONTENT_NAME, __scopeTooltip); - const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip); - const { - onClose: onClose - } = context; // Close this tooltip if another one opens - $iVrL9$react.useEffect(() => { - document.addEventListener($c34afbc43c90cc6f$var$TOOLTIP_OPEN, onClose); - return () => document.removeEventListener($c34afbc43c90cc6f$var$TOOLTIP_OPEN, onClose); - }, [onClose]); // Close the tooltip if the trigger is scrolled - $iVrL9$react.useEffect(() => { - if (context.trigger) { - const handleScroll = event => { - const target = event.target; - if (target !== null && target !== void 0 && target.contains(context.trigger)) onClose(); - }; - window.addEventListener('scroll', handleScroll, { - capture: true - }); - return () => window.removeEventListener('scroll', handleScroll, { - capture: true - }); - } - }, [context.trigger, onClose]); - return /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactdismissablelayer.DismissableLayer, { - asChild: true, - disableOutsidePointerEvents: false, - onEscapeKeyDown: onEscapeKeyDown, - onPointerDownOutside: onPointerDownOutside, - onFocusOutside: event => event.preventDefault(), - onDismiss: onClose - }, /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactpopper.Content, $parcel$interopDefault($iVrL9$babelruntimehelpersextends)({ - "data-state": context.stateAttribute - }, popperScope, contentProps, { - ref: forwardedRef, - style: { - ...contentProps.style, - '--radix-tooltip-content-transform-origin': 'var(--radix-popper-transform-origin)', - '--radix-tooltip-content-available-width': 'var(--radix-popper-available-width)', - '--radix-tooltip-content-available-height': 'var(--radix-popper-available-height)', - '--radix-tooltip-trigger-width': 'var(--radix-popper-anchor-width)', - '--radix-tooltip-trigger-height': 'var(--radix-popper-anchor-height)' - } - }), /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactslot.Slottable, null, children), /*#__PURE__*/$iVrL9$react.createElement($c34afbc43c90cc6f$var$VisuallyHiddenContentContextProvider, { - scope: __scopeTooltip, - isInside: true - }, /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactvisuallyhidden.Root, { - id: context.contentId, - role: "tooltip" - }, ariaLabel || children)))); -}); -/*#__PURE__*/ -Object.assign($c34afbc43c90cc6f$export$e9003e2be37ec060, { - displayName: $c34afbc43c90cc6f$var$CONTENT_NAME -}); -/* ------------------------------------------------------------------------------------------------- - * TooltipArrow - * -----------------------------------------------------------------------------------------------*/ -const $c34afbc43c90cc6f$var$ARROW_NAME = 'TooltipArrow'; -const $c34afbc43c90cc6f$export$c27ee0ad710f7559 = /*#__PURE__*/$iVrL9$react.forwardRef((props, forwardedRef) => { - const { - __scopeTooltip: __scopeTooltip, - ...arrowProps - } = props; - const popperScope = $c34afbc43c90cc6f$var$usePopperScope(__scopeTooltip); - const visuallyHiddenContentContext = $c34afbc43c90cc6f$var$useVisuallyHiddenContentContext($c34afbc43c90cc6f$var$ARROW_NAME, __scopeTooltip); // if the arrow is inside the `VisuallyHidden`, we don't want to render it all to - // prevent issues in positioning the arrow due to the duplicate - return visuallyHiddenContentContext.isInside ? null : /*#__PURE__*/$iVrL9$react.createElement($iVrL9$radixuireactpopper.Arrow, $parcel$interopDefault($iVrL9$babelruntimehelpersextends)({}, popperScope, arrowProps, { - ref: forwardedRef - })); -}); -/*#__PURE__*/ -Object.assign($c34afbc43c90cc6f$export$c27ee0ad710f7559, { - displayName: $c34afbc43c90cc6f$var$ARROW_NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -function $c34afbc43c90cc6f$var$getExitSideFromRect(point, rect) { - const top = Math.abs(rect.top - point.y); - const bottom = Math.abs(rect.bottom - point.y); - const right = Math.abs(rect.right - point.x); - const left = Math.abs(rect.left - point.x); - switch (Math.min(top, bottom, right, left)) { - case left: - return 'left'; - case right: - return 'right'; - case top: - return 'top'; - case bottom: - return 'bottom'; - default: - throw new Error('unreachable'); - } -} -function $c34afbc43c90cc6f$var$getPaddedExitPoints(exitPoint, exitSide) { - let padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 5; - const paddedExitPoints = []; - switch (exitSide) { - case 'top': - paddedExitPoints.push({ - x: exitPoint.x - padding, - y: exitPoint.y + padding - }, { - x: exitPoint.x + padding, - y: exitPoint.y + padding - }); - break; - case 'bottom': - paddedExitPoints.push({ - x: exitPoint.x - padding, - y: exitPoint.y - padding - }, { - x: exitPoint.x + padding, - y: exitPoint.y - padding - }); - break; - case 'left': - paddedExitPoints.push({ - x: exitPoint.x + padding, - y: exitPoint.y - padding - }, { - x: exitPoint.x + padding, - y: exitPoint.y + padding - }); - break; - case 'right': - paddedExitPoints.push({ - x: exitPoint.x - padding, - y: exitPoint.y - padding - }, { - x: exitPoint.x - padding, - y: exitPoint.y + padding - }); - break; - } - return paddedExitPoints; -} -function $c34afbc43c90cc6f$var$getPointsFromRect(rect) { - const { - top: top, - right: right, - bottom: bottom, - left: left - } = rect; - return [{ - x: left, - y: top - }, { - x: right, - y: top - }, { - x: right, - y: bottom - }, { - x: left, - y: bottom - }]; -} // Determine if a point is inside of a polygon. -// Based on https://github.com/substack/point-in-polygon -function $c34afbc43c90cc6f$var$isPointInPolygon(point, polygon) { - const { - x: x, - y: y - } = point; - let inside = false; - for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { - const xi = polygon[i].x; - const yi = polygon[i].y; - const xj = polygon[j].x; - const yj = polygon[j].y; // prettier-ignore - const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi; - if (intersect) inside = !inside; - } - return inside; -} // Returns a new array of points representing the convex hull of the given set of points. -// https://www.nayuki.io/page/convex-hull-algorithm -function $c34afbc43c90cc6f$var$getHull(points) { - const newPoints = points.slice(); - newPoints.sort((a, b) => { - if (a.x < b.x) return -1;else if (a.x > b.x) return 1;else if (a.y < b.y) return -1;else if (a.y > b.y) return 1;else return 0; - }); - return $c34afbc43c90cc6f$var$getHullPresorted(newPoints); -} // Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time. -function $c34afbc43c90cc6f$var$getHullPresorted(points) { - if (points.length <= 1) return points.slice(); - const upperHull = []; - for (let i = 0; i < points.length; i++) { - const p = points[i]; - while (upperHull.length >= 2) { - const q = upperHull[upperHull.length - 1]; - const r = upperHull[upperHull.length - 2]; - if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();else break; - } - upperHull.push(p); - } - upperHull.pop(); - const lowerHull = []; - for (let i1 = points.length - 1; i1 >= 0; i1--) { - const p = points[i1]; - while (lowerHull.length >= 2) { - const q = lowerHull[lowerHull.length - 1]; - const r = lowerHull[lowerHull.length - 2]; - if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();else break; - } - lowerHull.push(p); - } - lowerHull.pop(); - if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) return upperHull;else return upperHull.concat(lowerHull); -} -const $c34afbc43c90cc6f$export$2881499e37b75b9a = $c34afbc43c90cc6f$export$f78649fb9ca566b8; -const $c34afbc43c90cc6f$export$be92b6f5f03c0fe9 = $c34afbc43c90cc6f$export$28c660c63b792dea; -const $c34afbc43c90cc6f$export$41fb9f06171c75f4 = $c34afbc43c90cc6f$export$8c610744efcf8a1d; -const $c34afbc43c90cc6f$export$602eac185826482c = $c34afbc43c90cc6f$export$7b36b8f925ab7497; -const $c34afbc43c90cc6f$export$7c6e2c02157bb7d2 = $c34afbc43c90cc6f$export$e9003e2be37ec060; -const $c34afbc43c90cc6f$export$21b07c8f274aebd5 = $c34afbc43c90cc6f$export$c27ee0ad710f7559; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.js": -/*!****************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.js ***! - \****************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $92muK$react = __webpack_require__(/*! react */ "react"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "useCallbackRef", () => $28e03942f763e819$export$25bec8c6f54ee79a); - -/** - * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a - * prop or avoid re-executing effects when passed as a dependency - */ -function $28e03942f763e819$export$25bec8c6f54ee79a(callback) { - const callbackRef = $92muK$react.useRef(callback); - $92muK$react.useEffect(() => { - callbackRef.current = callback; - }); // https://github.com/facebook/react/issues/19240 - return $92muK$react.useMemo(() => function () { - var _callbackRef$current; - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - return (_callbackRef$current = callbackRef.current) === null || _callbackRef$current === void 0 ? void 0 : _callbackRef$current.call(callbackRef, ...args); - }, []); -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-use-controllable-state/dist/index.js": -/*!**********************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-use-controllable-state/dist/index.js ***! - \**********************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $ijazI$react = __webpack_require__(/*! react */ "react"); -var $ijazI$radixuireactusecallbackref = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "useControllableState", () => $b84d42d44371bff7$export$6f32135080cb4c3); -function $b84d42d44371bff7$export$6f32135080cb4c3(_ref) { - let { - prop: prop, - defaultProp: defaultProp, - onChange = () => {} - } = _ref; - const [uncontrolledProp, setUncontrolledProp] = $b84d42d44371bff7$var$useUncontrolledState({ - defaultProp: defaultProp, - onChange: onChange - }); - const isControlled = prop !== undefined; - const value1 = isControlled ? prop : uncontrolledProp; - const handleChange = $ijazI$radixuireactusecallbackref.useCallbackRef(onChange); - const setValue = $ijazI$react.useCallback(nextValue => { - if (isControlled) { - const setter = nextValue; - const value = typeof nextValue === 'function' ? setter(prop) : nextValue; - if (value !== prop) handleChange(value); - } else setUncontrolledProp(nextValue); - }, [isControlled, prop, setUncontrolledProp, handleChange]); - return [value1, setValue]; -} -function $b84d42d44371bff7$var$useUncontrolledState(_ref2) { - let { - defaultProp: defaultProp, - onChange: onChange - } = _ref2; - const uncontrolledState = $ijazI$react.useState(defaultProp); - const [value] = uncontrolledState; - const prevValueRef = $ijazI$react.useRef(value); - const handleChange = $ijazI$radixuireactusecallbackref.useCallbackRef(onChange); - $ijazI$react.useEffect(() => { - if (prevValueRef.current !== value) { - handleChange(value); - prevValueRef.current = value; - } - }, [value, prevValueRef, handleChange]); - return uncontrolledState; -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-use-escape-keydown/dist/index.js": -/*!******************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-use-escape-keydown/dist/index.js ***! - \******************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $b0gz3$react = __webpack_require__(/*! react */ "react"); -var $b0gz3$radixuireactusecallbackref = __webpack_require__(/*! @radix-ui/react-use-callback-ref */ "../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "useEscapeKeydown", () => $24c84e9f83c4454f$export$3a72a57244d6e765); - -/** - * Listens for when the escape key is down - */ -function $24c84e9f83c4454f$export$3a72a57244d6e765(onEscapeKeyDownProp) { - let ownerDocument = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : globalThis === null || globalThis === void 0 ? void 0 : globalThis.document; - const onEscapeKeyDown = $b0gz3$radixuireactusecallbackref.useCallbackRef(onEscapeKeyDownProp); - $b0gz3$react.useEffect(() => { - const handleKeyDown = event => { - if (event.key === 'Escape') onEscapeKeyDown(event); - }; - ownerDocument.addEventListener('keydown', handleKeyDown); - return () => ownerDocument.removeEventListener('keydown', handleKeyDown); - }, [onEscapeKeyDown, ownerDocument]); -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-use-layout-effect/dist/index.js": -/*!*****************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-use-layout-effect/dist/index.js ***! - \*****************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $caHyQ$react = __webpack_require__(/*! react */ "react"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "useLayoutEffect", () => $ca21affb0542a8a4$export$e5c5a5f917a5871c); - -/** - * On the server, React emits a warning when calling `useLayoutEffect`. - * This is because neither `useLayoutEffect` nor `useEffect` run on the server. - * We use this safe version which suppresses the warning by replacing it with a noop on the server. - * - * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect - */ -const $ca21affb0542a8a4$export$e5c5a5f917a5871c = Boolean(globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) ? $caHyQ$react.useLayoutEffect : () => {}; - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-use-size/dist/index.js": -/*!********************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-use-size/dist/index.js ***! - \********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $ksDzM$react = __webpack_require__(/*! react */ "react"); -var $ksDzM$radixuireactuselayouteffect = __webpack_require__(/*! @radix-ui/react-use-layout-effect */ "../../../node_modules/@radix-ui/react-use-layout-effect/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -$parcel$export(module.exports, "useSize", () => $d2c1d285af17635b$export$1ab7ae714698c4b8); -function $d2c1d285af17635b$export$1ab7ae714698c4b8(element) { - const [size, setSize] = $ksDzM$react.useState(undefined); - $ksDzM$radixuireactuselayouteffect.useLayoutEffect(() => { - if (element) { - // provide size as early as possible - setSize({ - width: element.offsetWidth, - height: element.offsetHeight - }); - const resizeObserver = new ResizeObserver(entries => { - if (!Array.isArray(entries)) return; - // Since we only observe the one element, we don't need to loop over the - // array - if (!entries.length) return; - const entry = entries[0]; - let width; - let height; - if ('borderBoxSize' in entry) { - const borderSizeEntry = entry['borderBoxSize']; // iron out differences between browsers - const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry; - width = borderSize['inlineSize']; - height = borderSize['blockSize']; - } else { - // for browsers that don't support `borderBoxSize` - // we calculate it ourselves to get the correct border box. - width = element.offsetWidth; - height = element.offsetHeight; - } - setSize({ - width: width, - height: height - }); - }); - resizeObserver.observe(element, { - box: 'border-box' - }); - return () => resizeObserver.unobserve(element); - } else - // We only want to reset to `undefined` when the element becomes `null`, - // not if it changes to another element. - setSize(undefined); - }, [element]); - return size; -} - -/***/ }), - -/***/ "../../../node_modules/@radix-ui/react-visually-hidden/dist/index.js": -/*!***************************************************************************!*\ - !*** ../../../node_modules/@radix-ui/react-visually-hidden/dist/index.js ***! - \***************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var $awrN2$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); -var $awrN2$react = __webpack_require__(/*! react */ "react"); -var $awrN2$radixuireactprimitive = __webpack_require__(/*! @radix-ui/react-primitive */ "../../../node_modules/@radix-ui/react-primitive/dist/index.js"); -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, { - get: v, - set: s, - enumerable: true, - configurable: true - }); -} -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -$parcel$export(module.exports, "VisuallyHidden", () => $685371e9c20848e2$export$439d29a4e110a164); -$parcel$export(module.exports, "Root", () => $685371e9c20848e2$export$be92b6f5f03c0fe9); - -/* ------------------------------------------------------------------------------------------------- - * VisuallyHidden - * -----------------------------------------------------------------------------------------------*/ -const $685371e9c20848e2$var$NAME = 'VisuallyHidden'; -const $685371e9c20848e2$export$439d29a4e110a164 = /*#__PURE__*/$awrN2$react.forwardRef((props, forwardedRef) => { - return /*#__PURE__*/$awrN2$react.createElement($awrN2$radixuireactprimitive.Primitive.span, $parcel$interopDefault($awrN2$babelruntimehelpersextends)({}, props, { - ref: forwardedRef, - style: { - // See: https://github.com/twbs/bootstrap/blob/master/scss/mixins/_screen-reader.scss - position: 'absolute', - border: 0, - width: 1, - height: 1, - padding: 0, - margin: -1, - overflow: 'hidden', - clip: 'rect(0, 0, 0, 0)', - whiteSpace: 'nowrap', - wordWrap: 'normal', - ...props.style - } - })); -}); -/*#__PURE__*/ -Object.assign($685371e9c20848e2$export$439d29a4e110a164, { - displayName: $685371e9c20848e2$var$NAME -}); -/* -----------------------------------------------------------------------------------------------*/ -const $685371e9c20848e2$export$be92b6f5f03c0fe9 = $685371e9c20848e2$export$439d29a4e110a164; - -/***/ }), - -/***/ "../../../node_modules/aria-hidden/dist/es2015/index.js": -/*!**************************************************************!*\ - !*** ../../../node_modules/aria-hidden/dist/es2015/index.js ***! - \**************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.suppressOthers = exports.supportsInert = exports.inertOthers = exports.hideOthers = void 0; -var getDefaultParent = function (originalTarget) { - if (typeof document === 'undefined') { - return null; - } - var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget; - return sampleTarget.ownerDocument.body; -}; -var counterMap = new WeakMap(); -var uncontrolledNodes = new WeakMap(); -var markerMap = {}; -var lockCount = 0; -var unwrapHost = function (node) { - return node && (node.host || unwrapHost(node.parentNode)); -}; -var correctTargets = function (parent, targets) { - return targets.map(function (target) { - if (parent.contains(target)) { - return target; - } - var correctedTarget = unwrapHost(target); - if (correctedTarget && parent.contains(correctedTarget)) { - return correctedTarget; - } - console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing'); - return null; - }).filter(function (x) { - return Boolean(x); - }); -}; -/** - * Marks everything except given node(or nodes) as aria-hidden - * @param {Element | Element[]} originalTarget - elements to keep on the page - * @param [parentNode] - top element, defaults to document.body - * @param {String} [markerName] - a special attribute to mark every node - * @param {String} [controlAttribute] - html Attribute to control - * @return {Undo} undo command - */ -var applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) { - var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]); - if (!markerMap[markerName]) { - markerMap[markerName] = new WeakMap(); - } - var markerCounter = markerMap[markerName]; - var hiddenNodes = []; - var elementsToKeep = new Set(); - var elementsToStop = new Set(targets); - var keep = function (el) { - if (!el || elementsToKeep.has(el)) { - return; - } - elementsToKeep.add(el); - keep(el.parentNode); - }; - targets.forEach(keep); - var deep = function (parent) { - if (!parent || elementsToStop.has(parent)) { - return; - } - Array.prototype.forEach.call(parent.children, function (node) { - if (elementsToKeep.has(node)) { - deep(node); - } else { - var attr = node.getAttribute(controlAttribute); - var alreadyHidden = attr !== null && attr !== 'false'; - var counterValue = (counterMap.get(node) || 0) + 1; - var markerValue = (markerCounter.get(node) || 0) + 1; - counterMap.set(node, counterValue); - markerCounter.set(node, markerValue); - hiddenNodes.push(node); - if (counterValue === 1 && alreadyHidden) { - uncontrolledNodes.set(node, true); - } - if (markerValue === 1) { - node.setAttribute(markerName, 'true'); - } - if (!alreadyHidden) { - node.setAttribute(controlAttribute, 'true'); - } - } - }); - }; - deep(parentNode); - elementsToKeep.clear(); - lockCount++; - return function () { - hiddenNodes.forEach(function (node) { - var counterValue = counterMap.get(node) - 1; - var markerValue = markerCounter.get(node) - 1; - counterMap.set(node, counterValue); - markerCounter.set(node, markerValue); - if (!counterValue) { - if (!uncontrolledNodes.has(node)) { - node.removeAttribute(controlAttribute); - } - uncontrolledNodes.delete(node); - } - if (!markerValue) { - node.removeAttribute(markerName); - } - }); - lockCount--; - if (!lockCount) { - // clear - counterMap = new WeakMap(); - counterMap = new WeakMap(); - uncontrolledNodes = new WeakMap(); - markerMap = {}; - } - }; -}; -/** - * Marks everything except given node(or nodes) as aria-hidden - * @param {Element | Element[]} originalTarget - elements to keep on the page - * @param [parentNode] - top element, defaults to document.body - * @param {String} [markerName] - a special attribute to mark every node - * @return {Undo} undo command - */ -var hideOthers = function (originalTarget, parentNode, markerName) { - if (markerName === void 0) { - markerName = 'data-aria-hidden'; - } - var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]); - var activeParentNode = parentNode || getDefaultParent(originalTarget); - if (!activeParentNode) { - return function () { - return null; - }; - } - // we should not hide ariaLive elements - https://github.com/theKashey/aria-hidden/issues/10 - targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]'))); - return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden'); -}; -/** - * Marks everything except given node(or nodes) as inert - * @param {Element | Element[]} originalTarget - elements to keep on the page - * @param [parentNode] - top element, defaults to document.body - * @param {String} [markerName] - a special attribute to mark every node - * @return {Undo} undo command - */ -exports.hideOthers = hideOthers; -var inertOthers = function (originalTarget, parentNode, markerName) { - if (markerName === void 0) { - markerName = 'data-inert-ed'; - } - var activeParentNode = parentNode || getDefaultParent(originalTarget); - if (!activeParentNode) { - return function () { - return null; - }; - } - return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert'); -}; -/** - * @returns if current browser supports inert - */ -exports.inertOthers = inertOthers; -var supportsInert = function () { - return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert'); -}; -/** - * Automatic function to "suppress" DOM elements - _hide_ or _inert_ in the best possible way - * @param {Element | Element[]} originalTarget - elements to keep on the page - * @param [parentNode] - top element, defaults to document.body - * @param {String} [markerName] - a special attribute to mark every node - * @return {Undo} undo command - */ -exports.supportsInert = supportsInert; -var suppressOthers = function (originalTarget, parentNode, markerName) { - if (markerName === void 0) { - markerName = 'data-suppressed'; - } - return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName); -}; -exports.suppressOthers = suppressOthers; - -/***/ }), - -/***/ "../../../node_modules/clsx/dist/clsx.m.js": -/*!*************************************************!*\ - !*** ../../../node_modules/clsx/dist/clsx.m.js ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.clsx = clsx; -exports["default"] = void 0; -function r(e) { - var t, - f, - n = ""; - if ("string" == typeof e || "number" == typeof e) n += e;else if ("object" == typeof e) if (Array.isArray(e)) for (t = 0; t < e.length; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);else for (t in e) e[t] && (n && (n += " "), n += t); - return n; -} -function clsx() { - for (var e, t, f = 0, n = ""; f < arguments.length;) (e = arguments[f++]) && (t = r(e)) && (n && (n += " "), n += t); - return n; -} -var _default = clsx; -exports["default"] = _default; - -/***/ }), - -/***/ "../../../node_modules/copy-to-clipboard/index.js": -/*!********************************************************!*\ - !*** ../../../node_modules/copy-to-clipboard/index.js ***! - \********************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - - -var deselectCurrent = __webpack_require__(/*! toggle-selection */ "../../../node_modules/toggle-selection/index.js"); -var clipboardToIE11Formatting = { - "text/plain": "Text", - "text/html": "Url", - "default": "Text" -}; -var defaultMessage = "Copy to clipboard: #{key}, Enter"; -function format(message) { - var copyKey = (/mac os x/i.test(navigator.userAgent) ? "⌘" : "Ctrl") + "+C"; - return message.replace(/#{\s*key\s*}/g, copyKey); -} -function copy(text, options) { - var debug, - message, - reselectPrevious, - range, - selection, - mark, - success = false; - if (!options) { - options = {}; - } - debug = options.debug || false; - try { - reselectPrevious = deselectCurrent(); - range = document.createRange(); - selection = document.getSelection(); - mark = document.createElement("span"); - mark.textContent = text; - // avoid screen readers from reading out loud the text - mark.ariaHidden = "true"; - // reset user styles for span element - mark.style.all = "unset"; - // prevents scrolling to the end of the page - mark.style.position = "fixed"; - mark.style.top = 0; - mark.style.clip = "rect(0, 0, 0, 0)"; - // used to preserve spaces and line breaks - mark.style.whiteSpace = "pre"; - // do not inherit user-select (it may be `none`) - mark.style.webkitUserSelect = "text"; - mark.style.MozUserSelect = "text"; - mark.style.msUserSelect = "text"; - mark.style.userSelect = "text"; - mark.addEventListener("copy", function (e) { - e.stopPropagation(); - if (options.format) { - e.preventDefault(); - if (typeof e.clipboardData === "undefined") { - // IE 11 - debug && console.warn("unable to use e.clipboardData"); - debug && console.warn("trying IE specific stuff"); - window.clipboardData.clearData(); - var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting["default"]; - window.clipboardData.setData(format, text); - } else { - // all other browsers - e.clipboardData.clearData(); - e.clipboardData.setData(options.format, text); - } - } - if (options.onCopy) { - e.preventDefault(); - options.onCopy(e.clipboardData); - } - }); - document.body.appendChild(mark); - range.selectNodeContents(mark); - selection.addRange(range); - var successful = document.execCommand("copy"); - if (!successful) { - throw new Error("copy command was unsuccessful"); - } - success = true; - } catch (err) { - debug && console.error("unable to copy using execCommand: ", err); - debug && console.warn("trying IE specific stuff"); - try { - window.clipboardData.setData(options.format || "text", text); - options.onCopy && options.onCopy(window.clipboardData); - success = true; - } catch (err) { - debug && console.error("unable to copy using clipboardData: ", err); - debug && console.error("falling back to prompt"); - message = format("message" in options ? options.message : defaultMessage); - window.prompt(message, text); - } - } finally { - if (selection) { - if (typeof selection.removeRange == "function") { - selection.removeRange(range); - } else { - selection.removeAllRanges(); - } - } - if (mark) { - document.body.removeChild(mark); - } - reselectPrevious(); - } - return success; -} -module.exports = copy; - -/***/ }), - -/***/ "../../../node_modules/detect-node-es/esm/browser.js": -/*!***********************************************************!*\ - !*** ../../../node_modules/detect-node-es/esm/browser.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isNode = void 0; -const isNode = false; -exports.isNode = isNode; - -/***/ }), - -/***/ "../../../node_modules/framer-motion/dist/cjs/index.js": -/*!*************************************************************!*\ - !*** ../../../node_modules/framer-motion/dist/cjs/index.js ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -var tslib = __webpack_require__(/*! tslib */ "../../../node_modules/tslib/tslib.es6.js"); -var React = __webpack_require__(/*! react */ "react"); -var heyListen = __webpack_require__(/*! hey-listen */ "../../../node_modules/hey-listen/dist/hey-listen.es.js"); -var styleValueTypes = __webpack_require__(/*! style-value-types */ "../../../node_modules/style-value-types/dist/valueTypes.cjs.js"); -var popmotion = __webpack_require__(/*! popmotion */ "../../../node_modules/popmotion/dist/popmotion.cjs.js"); -var sync = __webpack_require__(/*! framesync */ "../../../node_modules/framesync/dist/framesync.cjs.js"); -var dom = __webpack_require__(/*! @motionone/dom */ "../../../node_modules/@motionone/dom/dist/index.es.js"); -function _interopDefaultLegacy(e) { - return e && typeof e === 'object' && 'default' in e ? e : { - 'default': e - }; -} -function _interopNamespace(e) { - if (e && e.__esModule) return e; - var n = Object.create(null); - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { - return e[k]; - } - }); - } - }); - } - n["default"] = e; - return Object.freeze(n); -} -var React__namespace = /*#__PURE__*/_interopNamespace(React); -var React__default = /*#__PURE__*/_interopDefaultLegacy(React); -var sync__default = /*#__PURE__*/_interopDefaultLegacy(sync); - -/** - * Browser-safe usage of process - */ -var defaultEnvironment = "production"; -var env = typeof process === "undefined" || process.env === undefined ? defaultEnvironment : "development" || 0; -var createDefinition = function (propNames) { - return { - isEnabled: function (props) { - return propNames.some(function (name) { - return !!props[name]; - }); - } - }; -}; -var featureDefinitions = { - measureLayout: createDefinition(["layout", "layoutId", "drag"]), - animation: createDefinition(["animate", "exit", "variants", "whileHover", "whileTap", "whileFocus", "whileDrag", "whileInView"]), - exit: createDefinition(["exit"]), - drag: createDefinition(["drag", "dragControls"]), - focus: createDefinition(["whileFocus"]), - hover: createDefinition(["whileHover", "onHoverStart", "onHoverEnd"]), - tap: createDefinition(["whileTap", "onTap", "onTapStart", "onTapCancel"]), - pan: createDefinition(["onPan", "onPanStart", "onPanSessionStart", "onPanEnd"]), - inView: createDefinition(["whileInView", "onViewportEnter", "onViewportLeave"]) -}; -function loadFeatures(features) { - for (var key in features) { - if (features[key] === null) continue; - if (key === "projectionNodeConstructor") { - featureDefinitions.projectionNodeConstructor = features[key]; - } else { - featureDefinitions[key].Component = features[key]; - } - } -} -var LazyContext = React.createContext({ - strict: false -}); -var featureNames = Object.keys(featureDefinitions); -var numFeatures = featureNames.length; -/** - * Load features via renderless components based on the provided MotionProps. - */ -function useFeatures(props, visualElement, preloadedFeatures) { - var features = []; - var lazyContext = React.useContext(LazyContext); - if (!visualElement) return null; - /** - * If we're in development mode, check to make sure we're not rendering a motion component - * as a child of LazyMotion, as this will break the file-size benefits of using it. - */ - if (env !== "production" && preloadedFeatures && lazyContext.strict) { - heyListen.invariant(false, "You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead."); - } - for (var i = 0; i < numFeatures; i++) { - var name_1 = featureNames[i]; - var _a = featureDefinitions[name_1], - isEnabled = _a.isEnabled, - Component = _a.Component; - /** - * It might be possible in the future to use this moment to - * dynamically request functionality. In initial tests this - * was producing a lot of duplication amongst bundles. - */ - if (isEnabled(props) && Component) { - features.push(React__namespace.createElement(Component, tslib.__assign({ - key: name_1 - }, props, { - visualElement: visualElement - }))); - } - } - return features; -} - -/** - * @public - */ -var MotionConfigContext = React.createContext({ - transformPagePoint: function (p) { - return p; - }, - isStatic: false, - reducedMotion: "never" -}); -var MotionContext = React.createContext({}); -function useVisualElementContext() { - return React.useContext(MotionContext).visualElement; -} - -/** - * @public - */ -var PresenceContext = React.createContext(null); -var isBrowser = typeof document !== "undefined"; -var useIsomorphicLayoutEffect = isBrowser ? React.useLayoutEffect : React.useEffect; - -// Does this device prefer reduced motion? Returns `null` server-side. -var prefersReducedMotion = { - current: null -}; -var hasDetected = false; -function initPrefersReducedMotion() { - hasDetected = true; - if (!isBrowser) return; - if (window.matchMedia) { - var motionMediaQuery_1 = window.matchMedia("(prefers-reduced-motion)"); - var setReducedMotionPreferences = function () { - return prefersReducedMotion.current = motionMediaQuery_1.matches; - }; - motionMediaQuery_1.addListener(setReducedMotionPreferences); - setReducedMotionPreferences(); - } else { - prefersReducedMotion.current = false; - } -} -/** - * A hook that returns `true` if we should be using reduced motion based on the current device's Reduced Motion setting. - * - * This can be used to implement changes to your UI based on Reduced Motion. For instance, replacing motion-sickness inducing - * `x`/`y` animations with `opacity`, disabling the autoplay of background videos, or turning off parallax motion. - * - * It will actively respond to changes and re-render your components with the latest setting. - * - * ```jsx - * export function Sidebar({ isOpen }) { - * const shouldReduceMotion = useReducedMotion() - * const closedX = shouldReduceMotion ? 0 : "-100%" - * - * return ( - * - * ) - * } - * ``` - * - * @return boolean - * - * @public - */ -function useReducedMotion() { - /** - * Lazy initialisation of prefersReducedMotion - */ - !hasDetected && initPrefersReducedMotion(); - var _a = tslib.__read(React.useState(prefersReducedMotion.current), 1), - shouldReduceMotion = _a[0]; - /** - * TODO See if people miss automatically updating shouldReduceMotion setting - */ - return shouldReduceMotion; -} -function useReducedMotionConfig() { - var reducedMotionPreference = useReducedMotion(); - var reducedMotion = React.useContext(MotionConfigContext).reducedMotion; - if (reducedMotion === "never") { - return false; - } else if (reducedMotion === "always") { - return true; - } else { - return reducedMotionPreference; - } -} -function useVisualElement(Component, visualState, props, createVisualElement) { - var lazyContext = React.useContext(LazyContext); - var parent = useVisualElementContext(); - var presenceContext = React.useContext(PresenceContext); - var shouldReduceMotion = useReducedMotionConfig(); - var visualElementRef = React.useRef(undefined); - /** - * If we haven't preloaded a renderer, check to see if we have one lazy-loaded - */ - if (!createVisualElement) createVisualElement = lazyContext.renderer; - if (!visualElementRef.current && createVisualElement) { - visualElementRef.current = createVisualElement(Component, { - visualState: visualState, - parent: parent, - props: props, - presenceId: presenceContext === null || presenceContext === void 0 ? void 0 : presenceContext.id, - blockInitialAnimation: (presenceContext === null || presenceContext === void 0 ? void 0 : presenceContext.initial) === false, - shouldReduceMotion: shouldReduceMotion - }); - } - var visualElement = visualElementRef.current; - useIsomorphicLayoutEffect(function () { - visualElement === null || visualElement === void 0 ? void 0 : visualElement.syncRender(); - }); - React.useEffect(function () { - var _a; - (_a = visualElement === null || visualElement === void 0 ? void 0 : visualElement.animationState) === null || _a === void 0 ? void 0 : _a.animateChanges(); - }); - useIsomorphicLayoutEffect(function () { - return function () { - return visualElement === null || visualElement === void 0 ? void 0 : visualElement.notifyUnmount(); - }; - }, []); - return visualElement; -} -function isRefObject(ref) { - return typeof ref === "object" && Object.prototype.hasOwnProperty.call(ref, "current"); -} - -/** - * Creates a ref function that, when called, hydrates the provided - * external ref and VisualElement. - */ -function useMotionRef(visualState, visualElement, externalRef) { - return React.useCallback(function (instance) { - var _a; - instance && ((_a = visualState.mount) === null || _a === void 0 ? void 0 : _a.call(visualState, instance)); - if (visualElement) { - instance ? visualElement.mount(instance) : visualElement.unmount(); - } - if (externalRef) { - if (typeof externalRef === "function") { - externalRef(instance); - } else if (isRefObject(externalRef)) { - externalRef.current = instance; - } - } - }, - /** - * Only pass a new ref callback to React if we've received a visual element - * factory. Otherwise we'll be mounting/remounting every time externalRef - * or other dependencies change. - */ - [visualElement]); -} - -/** - * Decides if the supplied variable is an array of variant labels - */ -function isVariantLabels(v) { - return Array.isArray(v); -} -/** - * Decides if the supplied variable is variant label - */ -function isVariantLabel(v) { - return typeof v === "string" || isVariantLabels(v); -} -/** - * Creates an object containing the latest state of every MotionValue on a VisualElement - */ -function getCurrent(visualElement) { - var current = {}; - visualElement.forEachValue(function (value, key) { - return current[key] = value.get(); - }); - return current; -} -/** - * Creates an object containing the latest velocity of every MotionValue on a VisualElement - */ -function getVelocity$1(visualElement) { - var velocity = {}; - visualElement.forEachValue(function (value, key) { - return velocity[key] = value.getVelocity(); - }); - return velocity; -} -function resolveVariantFromProps(props, definition, custom, currentValues, currentVelocity) { - var _a; - if (currentValues === void 0) { - currentValues = {}; - } - if (currentVelocity === void 0) { - currentVelocity = {}; - } - /** - * If the variant definition is a function, resolve. - */ - if (typeof definition === "function") { - definition = definition(custom !== null && custom !== void 0 ? custom : props.custom, currentValues, currentVelocity); - } - /** - * If the variant definition is a variant label, or - * the function returned a variant label, resolve. - */ - if (typeof definition === "string") { - definition = (_a = props.variants) === null || _a === void 0 ? void 0 : _a[definition]; - } - /** - * At this point we've resolved both functions and variant labels, - * but the resolved variant label might itself have been a function. - * If so, resolve. This can only have returned a valid target object. - */ - if (typeof definition === "function") { - definition = definition(custom !== null && custom !== void 0 ? custom : props.custom, currentValues, currentVelocity); - } - return definition; -} -function resolveVariant(visualElement, definition, custom) { - var props = visualElement.getProps(); - return resolveVariantFromProps(props, definition, custom !== null && custom !== void 0 ? custom : props.custom, getCurrent(visualElement), getVelocity$1(visualElement)); -} -function checkIfControllingVariants(props) { - var _a; - return typeof ((_a = props.animate) === null || _a === void 0 ? void 0 : _a.start) === "function" || isVariantLabel(props.initial) || isVariantLabel(props.animate) || isVariantLabel(props.whileHover) || isVariantLabel(props.whileDrag) || isVariantLabel(props.whileTap) || isVariantLabel(props.whileFocus) || isVariantLabel(props.exit); -} -function checkIfVariantNode(props) { - return Boolean(checkIfControllingVariants(props) || props.variants); -} -function getCurrentTreeVariants(props, context) { - if (checkIfControllingVariants(props)) { - var initial = props.initial, - animate = props.animate; - return { - initial: initial === false || isVariantLabel(initial) ? initial : undefined, - animate: isVariantLabel(animate) ? animate : undefined - }; - } - return props.inherit !== false ? context : {}; -} -function useCreateMotionContext(props) { - var _a = getCurrentTreeVariants(props, React.useContext(MotionContext)), - initial = _a.initial, - animate = _a.animate; - return React.useMemo(function () { - return { - initial: initial, - animate: animate - }; - }, [variantLabelsAsDependency(initial), variantLabelsAsDependency(animate)]); -} -function variantLabelsAsDependency(prop) { - return Array.isArray(prop) ? prop.join(" ") : prop; -} - -/** - * Creates a constant value over the lifecycle of a component. - * - * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer - * a guarantee that it won't re-run for performance reasons later on. By using `useConstant` - * you can ensure that initialisers don't execute twice or more. - */ -function useConstant(init) { - var ref = React.useRef(null); - if (ref.current === null) { - ref.current = init(); - } - return ref.current; -} - -/** - * This should only ever be modified on the client otherwise it'll - * persist through server requests. If we need instanced states we - * could lazy-init via root. - */ -var globalProjectionState = { - /** - * Global flag as to whether the tree has animated since the last time - * we resized the window - */ - hasAnimatedSinceResize: true, - /** - * We set this to true once, on the first update. Any nodes added to the tree beyond that - * update will be given a `data-projection-id` attribute. - */ - hasEverUpdated: false -}; -var id$1 = 1; -function useProjectionId() { - return useConstant(function () { - if (globalProjectionState.hasEverUpdated) { - return id$1++; - } - }); -} -var LayoutGroupContext = React.createContext({}); - -/** - * Internal, exported only for usage in Framer - */ -var SwitchLayoutGroupContext = React.createContext({}); -function useProjection(projectionId, _a, visualElement, ProjectionNodeConstructor) { - var _b; - var layoutId = _a.layoutId, - layout = _a.layout, - drag = _a.drag, - dragConstraints = _a.dragConstraints, - layoutScroll = _a.layoutScroll; - var initialPromotionConfig = React.useContext(SwitchLayoutGroupContext); - if (!ProjectionNodeConstructor || !visualElement || (visualElement === null || visualElement === void 0 ? void 0 : visualElement.projection)) { - return; - } - visualElement.projection = new ProjectionNodeConstructor(projectionId, visualElement.getLatestValues(), (_b = visualElement.parent) === null || _b === void 0 ? void 0 : _b.projection); - visualElement.projection.setOptions({ - layoutId: layoutId, - layout: layout, - alwaysMeasureLayout: Boolean(drag) || dragConstraints && isRefObject(dragConstraints), - visualElement: visualElement, - scheduleRender: function () { - return visualElement.scheduleRender(); - }, - /** - * TODO: Update options in an effect. This could be tricky as it'll be too late - * to update by the time layout animations run. - * We also need to fix this safeToRemove by linking it up to the one returned by usePresence, - * ensuring it gets called if there's no potential layout animations. - * - */ - animationType: typeof layout === "string" ? layout : "both", - initialPromotionConfig: initialPromotionConfig, - layoutScroll: layoutScroll - }); -} -var VisualElementHandler = /** @class */function (_super) { - tslib.__extends(VisualElementHandler, _super); - function VisualElementHandler() { - return _super !== null && _super.apply(this, arguments) || this; - } - /** - * Update visual element props as soon as we know this update is going to be commited. - */ - VisualElementHandler.prototype.getSnapshotBeforeUpdate = function () { - this.updateProps(); - return null; - }; - VisualElementHandler.prototype.componentDidUpdate = function () {}; - VisualElementHandler.prototype.updateProps = function () { - var _a = this.props, - visualElement = _a.visualElement, - props = _a.props; - if (visualElement) visualElement.setProps(props); - }; - VisualElementHandler.prototype.render = function () { - return this.props.children; - }; - return VisualElementHandler; -}(React__default["default"].Component); - -/** - * Create a `motion` component. - * - * This function accepts a Component argument, which can be either a string (ie "div" - * for `motion.div`), or an actual React component. - * - * Alongside this is a config option which provides a way of rendering the provided - * component "offline", or outside the React render cycle. - */ -function createMotionComponent(_a) { - var preloadedFeatures = _a.preloadedFeatures, - createVisualElement = _a.createVisualElement, - projectionNodeConstructor = _a.projectionNodeConstructor, - useRender = _a.useRender, - useVisualState = _a.useVisualState, - Component = _a.Component; - preloadedFeatures && loadFeatures(preloadedFeatures); - function MotionComponent(props, externalRef) { - var layoutId = useLayoutId(props); - props = tslib.__assign(tslib.__assign({}, props), { - layoutId: layoutId - }); - /** - * If we're rendering in a static environment, we only visually update the component - * as a result of a React-rerender rather than interactions or animations. This - * means we don't need to load additional memory structures like VisualElement, - * or any gesture/animation features. - */ - var config = React.useContext(MotionConfigContext); - var features = null; - var context = useCreateMotionContext(props); - /** - * Create a unique projection ID for this component. If a new component is added - * during a layout animation we'll use this to query the DOM and hydrate its ref early, allowing - * us to measure it as soon as any layout effect flushes pending layout animations. - * - * Performance note: It'd be better not to have to search the DOM for these elements. - * For newly-entering components it could be enough to only correct treeScale, in which - * case we could mount in a scale-correction mode. This wouldn't be enough for - * shared element transitions however. Perhaps for those we could revert to a root node - * that gets forceRendered and layout animations are triggered on its layout effect. - */ - var projectionId = config.isStatic ? undefined : useProjectionId(); - /** - * - */ - var visualState = useVisualState(props, config.isStatic); - if (!config.isStatic && isBrowser) { - /** - * Create a VisualElement for this component. A VisualElement provides a common - * interface to renderer-specific APIs (ie DOM/Three.js etc) as well as - * providing a way of rendering to these APIs outside of the React render loop - * for more performant animations and interactions - */ - context.visualElement = useVisualElement(Component, visualState, tslib.__assign(tslib.__assign({}, config), props), createVisualElement); - useProjection(projectionId, props, context.visualElement, projectionNodeConstructor || featureDefinitions.projectionNodeConstructor); - /** - * Load Motion gesture and animation features. These are rendered as renderless - * components so each feature can optionally make use of React lifecycle methods. - */ - features = useFeatures(props, context.visualElement, preloadedFeatures); - } - /** - * The mount order and hierarchy is specific to ensure our element ref - * is hydrated by the time features fire their effects. - */ - return React__namespace.createElement(VisualElementHandler, { - visualElement: context.visualElement, - props: tslib.__assign(tslib.__assign({}, config), props) - }, features, React__namespace.createElement(MotionContext.Provider, { - value: context - }, useRender(Component, props, projectionId, useMotionRef(visualState, context.visualElement, externalRef), visualState, config.isStatic, context.visualElement))); - } - return React.forwardRef(MotionComponent); -} -function useLayoutId(_a) { - var _b; - var layoutId = _a.layoutId; - var layoutGroupId = (_b = React.useContext(LayoutGroupContext)) === null || _b === void 0 ? void 0 : _b.id; - return layoutGroupId && layoutId !== undefined ? layoutGroupId + "-" + layoutId : layoutId; -} - -/** - * Convert any React component into a `motion` component. The provided component - * **must** use `React.forwardRef` to the underlying DOM component you want to animate. - * - * ```jsx - * const Component = React.forwardRef((props, ref) => { - * return
- * }) - * - * const MotionComponent = motion(Component) - * ``` - * - * @public - */ -function createMotionProxy(createConfig) { - function custom(Component, customMotionComponentConfig) { - if (customMotionComponentConfig === void 0) { - customMotionComponentConfig = {}; - } - return createMotionComponent(createConfig(Component, customMotionComponentConfig)); - } - if (typeof Proxy === "undefined") { - return custom; - } - /** - * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc. - * Rather than generating them anew every render. - */ - var componentCache = new Map(); - return new Proxy(custom, { - /** - * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc. - * The prop name is passed through as `key` and we can use that to generate a `motion` - * DOM component with that name. - */ - get: function (_target, key) { - /** - * If this element doesn't exist in the component cache, create it and cache. - */ - if (!componentCache.has(key)) { - componentCache.set(key, custom(key)); - } - return componentCache.get(key); - } - }); -} - -/** - * We keep these listed seperately as we use the lowercase tag names as part - * of the runtime bundle to detect SVG components - */ -var lowercaseSVGElements = ["animate", "circle", "defs", "desc", "ellipse", "g", "image", "line", "filter", "marker", "mask", "metadata", "path", "pattern", "polygon", "polyline", "rect", "stop", "svg", "switch", "symbol", "text", "tspan", "use", "view"]; -function isSVGComponent(Component) { - if ( - /** - * If it's not a string, it's a custom React component. Currently we only support - * HTML custom React components. - */ - typeof Component !== "string" || - /** - * If it contains a dash, the element is a custom HTML webcomponent. - */ - Component.includes("-")) { - return false; - } else if ( - /** - * If it's in our list of lowercase SVG tags, it's an SVG component - */ - lowercaseSVGElements.indexOf(Component) > -1 || - /** - * If it contains a capital letter, it's an SVG component - */ - /[A-Z]/.test(Component)) { - return true; - } - return false; -} -var scaleCorrectors = {}; -function addScaleCorrector(correctors) { - Object.assign(scaleCorrectors, correctors); -} - -/** - * A list of all transformable axes. We'll use this list to generated a version - * of each axes for each transform. - */ -var transformAxes = ["", "X", "Y", "Z"]; -/** - * An ordered array of each transformable value. By default, transform values - * will be sorted to this order. - */ -var order = ["translate", "scale", "rotate", "skew"]; -/** - * Generate a list of every possible transform key. - */ -var transformProps = ["transformPerspective", "x", "y", "z"]; -order.forEach(function (operationKey) { - return transformAxes.forEach(function (axesKey) { - return transformProps.push(operationKey + axesKey); - }); -}); -/** - * A function to use with Array.sort to sort transform keys by their default order. - */ -function sortTransformProps(a, b) { - return transformProps.indexOf(a) - transformProps.indexOf(b); -} -/** - * A quick lookup for transform props. - */ -var transformPropSet = new Set(transformProps); -function isTransformProp(key) { - return transformPropSet.has(key); -} -/** - * A quick lookup for transform origin props - */ -var transformOriginProps = new Set(["originX", "originY", "originZ"]); -function isTransformOriginProp(key) { - return transformOriginProps.has(key); -} -function isForcedMotionValue(key, _a) { - var layout = _a.layout, - layoutId = _a.layoutId; - return isTransformProp(key) || isTransformOriginProp(key) || (layout || layoutId !== undefined) && (!!scaleCorrectors[key] || key === "opacity"); -} -var isMotionValue = function (value) { - return Boolean(value !== null && typeof value === "object" && value.getVelocity); -}; -var translateAlias = { - x: "translateX", - y: "translateY", - z: "translateZ", - transformPerspective: "perspective" -}; -/** - * Build a CSS transform style from individual x/y/scale etc properties. - * - * This outputs with a default order of transforms/scales/rotations, this can be customised by - * providing a transformTemplate function. - */ -function buildTransform(_a, _b, transformIsDefault, transformTemplate) { - var transform = _a.transform, - transformKeys = _a.transformKeys; - var _c = _b.enableHardwareAcceleration, - enableHardwareAcceleration = _c === void 0 ? true : _c, - _d = _b.allowTransformNone, - allowTransformNone = _d === void 0 ? true : _d; - // The transform string we're going to build into. - var transformString = ""; - // Transform keys into their default order - this will determine the output order. - transformKeys.sort(sortTransformProps); - // Track whether the defined transform has a defined z so we don't add a - // second to enable hardware acceleration - var transformHasZ = false; - // Loop over each transform and build them into transformString - var numTransformKeys = transformKeys.length; - for (var i = 0; i < numTransformKeys; i++) { - var key = transformKeys[i]; - transformString += "".concat(translateAlias[key] || key, "(").concat(transform[key], ") "); - if (key === "z") transformHasZ = true; - } - if (!transformHasZ && enableHardwareAcceleration) { - transformString += "translateZ(0)"; - } else { - transformString = transformString.trim(); - } - // If we have a custom `transform` template, pass our transform values and - // generated transformString to that before returning - if (transformTemplate) { - transformString = transformTemplate(transform, transformIsDefault ? "" : transformString); - } else if (allowTransformNone && transformIsDefault) { - transformString = "none"; - } - return transformString; -} -/** - * Build a transformOrigin style. Uses the same defaults as the browser for - * undefined origins. - */ -function buildTransformOrigin(_a) { - var _b = _a.originX, - originX = _b === void 0 ? "50%" : _b, - _c = _a.originY, - originY = _c === void 0 ? "50%" : _c, - _d = _a.originZ, - originZ = _d === void 0 ? 0 : _d; - return "".concat(originX, " ").concat(originY, " ").concat(originZ); -} - -/** - * Returns true if the provided key is a CSS variable - */ -function isCSSVariable$1(key) { - return key.startsWith("--"); -} - -/** - * Provided a value and a ValueType, returns the value as that value type. - */ -var getValueAsType = function (value, type) { - return type && typeof value === "number" ? type.transform(value) : value; -}; -var int = tslib.__assign(tslib.__assign({}, styleValueTypes.number), { - transform: Math.round -}); -var numberValueTypes = { - // Border props - borderWidth: styleValueTypes.px, - borderTopWidth: styleValueTypes.px, - borderRightWidth: styleValueTypes.px, - borderBottomWidth: styleValueTypes.px, - borderLeftWidth: styleValueTypes.px, - borderRadius: styleValueTypes.px, - radius: styleValueTypes.px, - borderTopLeftRadius: styleValueTypes.px, - borderTopRightRadius: styleValueTypes.px, - borderBottomRightRadius: styleValueTypes.px, - borderBottomLeftRadius: styleValueTypes.px, - // Positioning props - width: styleValueTypes.px, - maxWidth: styleValueTypes.px, - height: styleValueTypes.px, - maxHeight: styleValueTypes.px, - size: styleValueTypes.px, - top: styleValueTypes.px, - right: styleValueTypes.px, - bottom: styleValueTypes.px, - left: styleValueTypes.px, - // Spacing props - padding: styleValueTypes.px, - paddingTop: styleValueTypes.px, - paddingRight: styleValueTypes.px, - paddingBottom: styleValueTypes.px, - paddingLeft: styleValueTypes.px, - margin: styleValueTypes.px, - marginTop: styleValueTypes.px, - marginRight: styleValueTypes.px, - marginBottom: styleValueTypes.px, - marginLeft: styleValueTypes.px, - // Transform props - rotate: styleValueTypes.degrees, - rotateX: styleValueTypes.degrees, - rotateY: styleValueTypes.degrees, - rotateZ: styleValueTypes.degrees, - scale: styleValueTypes.scale, - scaleX: styleValueTypes.scale, - scaleY: styleValueTypes.scale, - scaleZ: styleValueTypes.scale, - skew: styleValueTypes.degrees, - skewX: styleValueTypes.degrees, - skewY: styleValueTypes.degrees, - distance: styleValueTypes.px, - translateX: styleValueTypes.px, - translateY: styleValueTypes.px, - translateZ: styleValueTypes.px, - x: styleValueTypes.px, - y: styleValueTypes.px, - z: styleValueTypes.px, - perspective: styleValueTypes.px, - transformPerspective: styleValueTypes.px, - opacity: styleValueTypes.alpha, - originX: styleValueTypes.progressPercentage, - originY: styleValueTypes.progressPercentage, - originZ: styleValueTypes.px, - // Misc - zIndex: int, - // SVG - fillOpacity: styleValueTypes.alpha, - strokeOpacity: styleValueTypes.alpha, - numOctaves: int -}; -function buildHTMLStyles(state, latestValues, options, transformTemplate) { - var _a; - var style = state.style, - vars = state.vars, - transform = state.transform, - transformKeys = state.transformKeys, - transformOrigin = state.transformOrigin; - // Empty the transformKeys array. As we're throwing out refs to its items - // this might not be as cheap as suspected. Maybe using the array as a buffer - // with a manual incrementation would be better. - transformKeys.length = 0; - // Track whether we encounter any transform or transformOrigin values. - var hasTransform = false; - var hasTransformOrigin = false; - // Does the calculated transform essentially equal "none"? - var transformIsNone = true; - /** - * Loop over all our latest animated values and decide whether to handle them - * as a style or CSS variable. - * - * Transforms and transform origins are kept seperately for further processing. - */ - for (var key in latestValues) { - var value = latestValues[key]; - /** - * If this is a CSS variable we don't do any further processing. - */ - if (isCSSVariable$1(key)) { - vars[key] = value; - continue; - } - // Convert the value to its default value type, ie 0 -> "0px" - var valueType = numberValueTypes[key]; - var valueAsType = getValueAsType(value, valueType); - if (isTransformProp(key)) { - // If this is a transform, flag to enable further transform processing - hasTransform = true; - transform[key] = valueAsType; - transformKeys.push(key); - // If we already know we have a non-default transform, early return - if (!transformIsNone) continue; - // Otherwise check to see if this is a default transform - if (value !== ((_a = valueType.default) !== null && _a !== void 0 ? _a : 0)) transformIsNone = false; - } else if (isTransformOriginProp(key)) { - transformOrigin[key] = valueAsType; - // If this is a transform origin, flag and enable further transform-origin processing - hasTransformOrigin = true; - } else { - style[key] = valueAsType; - } - } - if (hasTransform) { - style.transform = buildTransform(state, options, transformIsNone, transformTemplate); - } else if (transformTemplate) { - style.transform = transformTemplate({}, ""); - } else if (!latestValues.transform && style.transform) { - style.transform = "none"; - } - if (hasTransformOrigin) { - style.transformOrigin = buildTransformOrigin(transformOrigin); - } -} -var createHtmlRenderState = function () { - return { - style: {}, - transform: {}, - transformKeys: [], - transformOrigin: {}, - vars: {} - }; -}; -function copyRawValuesOnly(target, source, props) { - for (var key in source) { - if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) { - target[key] = source[key]; - } - } -} -function useInitialMotionValues(_a, visualState, isStatic) { - var transformTemplate = _a.transformTemplate; - return React.useMemo(function () { - var state = createHtmlRenderState(); - buildHTMLStyles(state, visualState, { - enableHardwareAcceleration: !isStatic - }, transformTemplate); - var vars = state.vars, - style = state.style; - return tslib.__assign(tslib.__assign({}, vars), style); - }, [visualState]); -} -function useStyle(props, visualState, isStatic) { - var styleProp = props.style || {}; - var style = {}; - /** - * Copy non-Motion Values straight into style - */ - copyRawValuesOnly(style, styleProp, props); - Object.assign(style, useInitialMotionValues(props, visualState, isStatic)); - if (props.transformValues) { - style = props.transformValues(style); - } - return style; -} -function useHTMLProps(props, visualState, isStatic) { - // The `any` isn't ideal but it is the type of createElement props argument - var htmlProps = {}; - var style = useStyle(props, visualState, isStatic); - if (Boolean(props.drag) && props.dragListener !== false) { - // Disable the ghost element when a user drags - htmlProps.draggable = false; - // Disable text selection - style.userSelect = style.WebkitUserSelect = style.WebkitTouchCallout = "none"; - // Disable scrolling on the draggable direction - style.touchAction = props.drag === true ? "none" : "pan-".concat(props.drag === "x" ? "y" : "x"); - } - htmlProps.style = style; - return htmlProps; -} - -/** - * A list of all valid MotionProps. - * - * @privateRemarks - * This doesn't throw if a `MotionProp` name is missing - it should. - */ -var validMotionProps = new Set(["initial", "animate", "exit", "style", "variants", "transition", "transformTemplate", "transformValues", "custom", "inherit", "layout", "layoutId", "layoutDependency", "onLayoutAnimationStart", "onLayoutAnimationComplete", "onLayoutMeasure", "onBeforeLayoutMeasure", "onAnimationStart", "onAnimationComplete", "onUpdate", "onDragStart", "onDrag", "onDragEnd", "onMeasureDragConstraints", "onDirectionLock", "onDragTransitionEnd", "drag", "dragControls", "dragListener", "dragConstraints", "dragDirectionLock", "dragSnapToOrigin", "_dragX", "_dragY", "dragElastic", "dragMomentum", "dragPropagation", "dragTransition", "whileDrag", "onPan", "onPanStart", "onPanEnd", "onPanSessionStart", "onTap", "onTapStart", "onTapCancel", "onHoverStart", "onHoverEnd", "whileFocus", "whileTap", "whileHover", "whileInView", "onViewportEnter", "onViewportLeave", "viewport", "layoutScroll"]); -/** - * Check whether a prop name is a valid `MotionProp` key. - * - * @param key - Name of the property to check - * @returns `true` is key is a valid `MotionProp`. - * - * @public - */ -function isValidMotionProp(key) { - return validMotionProps.has(key); -} -var shouldForward = function (key) { - return !isValidMotionProp(key); -}; -function loadExternalIsValidProp(isValidProp) { - if (!isValidProp) return; - // Explicitly filter our events - shouldForward = function (key) { - return key.startsWith("on") ? !isValidMotionProp(key) : isValidProp(key); - }; -} -/** - * Emotion and Styled Components both allow users to pass through arbitrary props to their components - * to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which - * of these should be passed to the underlying DOM node. - * - * However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props - * as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props - * passed through the `custom` prop so it doesn't *need* the payload or computational overhead of - * `@emotion/is-prop-valid`, however to fix this problem we need to use it. - * - * By making it an optionalDependency we can offer this functionality only in the situations where it's - * actually required. - */ -try { - /** - * We attempt to import this package but require won't be defined in esm environments, in that case - * isPropValid will have to be provided via `MotionContext`. In a 6.0.0 this should probably be removed - * in favour of explicit injection. - */ - loadExternalIsValidProp((__webpack_require__(/*! @emotion/is-prop-valid */ "../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js")["default"])); -} catch (_a) { - // We don't need to actually do anything here - the fallback is the existing `isPropValid`. -} -function filterProps(props, isDom, forwardMotionProps) { - var filteredProps = {}; - for (var key in props) { - if (shouldForward(key) || forwardMotionProps === true && isValidMotionProp(key) || !isDom && !isValidMotionProp(key) || - // If trying to use native HTML drag events, forward drag listeners - props["draggable"] && key.startsWith("onDrag")) { - filteredProps[key] = props[key]; - } - } - return filteredProps; -} -function calcOrigin$1(origin, offset, size) { - return typeof origin === "string" ? origin : styleValueTypes.px.transform(offset + size * origin); -} -/** - * The SVG transform origin defaults are different to CSS and is less intuitive, - * so we use the measured dimensions of the SVG to reconcile these. - */ -function calcSVGTransformOrigin(dimensions, originX, originY) { - var pxOriginX = calcOrigin$1(originX, dimensions.x, dimensions.width); - var pxOriginY = calcOrigin$1(originY, dimensions.y, dimensions.height); - return "".concat(pxOriginX, " ").concat(pxOriginY); -} -var dashKeys = { - offset: "stroke-dashoffset", - array: "stroke-dasharray" -}; -var camelKeys = { - offset: "strokeDashoffset", - array: "strokeDasharray" -}; -/** - * Build SVG path properties. Uses the path's measured length to convert - * our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset - * and stroke-dasharray attributes. - * - * This function is mutative to reduce per-frame GC. - */ -function buildSVGPath(attrs, length, spacing, offset, useDashCase) { - if (spacing === void 0) { - spacing = 1; - } - if (offset === void 0) { - offset = 0; - } - if (useDashCase === void 0) { - useDashCase = true; - } - // Normalise path length by setting SVG attribute pathLength to 1 - attrs.pathLength = 1; - // We use dash case when setting attributes directly to the DOM node and camel case - // when defining props on a React component. - var keys = useDashCase ? dashKeys : camelKeys; - // Build the dash offset - attrs[keys.offset] = styleValueTypes.px.transform(-offset); - // Build the dash array - var pathLength = styleValueTypes.px.transform(length); - var pathSpacing = styleValueTypes.px.transform(spacing); - attrs[keys.array] = "".concat(pathLength, " ").concat(pathSpacing); -} - -/** - * Build SVG visual attrbutes, like cx and style.transform - */ -function buildSVGAttrs(state, _a, options, transformTemplate) { - var attrX = _a.attrX, - attrY = _a.attrY, - originX = _a.originX, - originY = _a.originY, - pathLength = _a.pathLength, - _b = _a.pathSpacing, - pathSpacing = _b === void 0 ? 1 : _b, - _c = _a.pathOffset, - pathOffset = _c === void 0 ? 0 : _c, - // This is object creation, which we try to avoid per-frame. - latest = tslib.__rest(_a, ["attrX", "attrY", "originX", "originY", "pathLength", "pathSpacing", "pathOffset"]); - buildHTMLStyles(state, latest, options, transformTemplate); - state.attrs = state.style; - state.style = {}; - var attrs = state.attrs, - style = state.style, - dimensions = state.dimensions; - /** - * However, we apply transforms as CSS transforms. So if we detect a transform we take it from attrs - * and copy it into style. - */ - if (attrs.transform) { - if (dimensions) style.transform = attrs.transform; - delete attrs.transform; - } - // Parse transformOrigin - if (dimensions && (originX !== undefined || originY !== undefined || style.transform)) { - style.transformOrigin = calcSVGTransformOrigin(dimensions, originX !== undefined ? originX : 0.5, originY !== undefined ? originY : 0.5); - } - // Treat x/y not as shortcuts but as actual attributes - if (attrX !== undefined) attrs.x = attrX; - if (attrY !== undefined) attrs.y = attrY; - // Build SVG path if one has been defined - if (pathLength !== undefined) { - buildSVGPath(attrs, pathLength, pathSpacing, pathOffset, false); - } -} -var createSvgRenderState = function () { - return tslib.__assign(tslib.__assign({}, createHtmlRenderState()), { - attrs: {} - }); -}; -function useSVGProps(props, visualState) { - var visualProps = React.useMemo(function () { - var state = createSvgRenderState(); - buildSVGAttrs(state, visualState, { - enableHardwareAcceleration: false - }, props.transformTemplate); - return tslib.__assign(tslib.__assign({}, state.attrs), { - style: tslib.__assign({}, state.style) - }); - }, [visualState]); - if (props.style) { - var rawStyles = {}; - copyRawValuesOnly(rawStyles, props.style, props); - visualProps.style = tslib.__assign(tslib.__assign({}, rawStyles), visualProps.style); - } - return visualProps; -} -function createUseRender(forwardMotionProps) { - if (forwardMotionProps === void 0) { - forwardMotionProps = false; - } - var useRender = function (Component, props, projectionId, ref, _a, isStatic) { - var latestValues = _a.latestValues; - var useVisualProps = isSVGComponent(Component) ? useSVGProps : useHTMLProps; - var visualProps = useVisualProps(props, latestValues, isStatic); - var filteredProps = filterProps(props, typeof Component === "string", forwardMotionProps); - var elementProps = tslib.__assign(tslib.__assign(tslib.__assign({}, filteredProps), visualProps), { - ref: ref - }); - if (projectionId) { - elementProps["data-projection-id"] = projectionId; - } - return React.createElement(Component, elementProps); - }; - return useRender; -} -var CAMEL_CASE_PATTERN = /([a-z])([A-Z])/g; -var REPLACE_TEMPLATE = "$1-$2"; -/** - * Convert camelCase to dash-case properties. - */ -var camelToDash = function (str) { - return str.replace(CAMEL_CASE_PATTERN, REPLACE_TEMPLATE).toLowerCase(); -}; -function renderHTML(element, _a, styleProp, projection) { - var style = _a.style, - vars = _a.vars; - Object.assign(element.style, style, projection && projection.getProjectionStyles(styleProp)); - // Loop over any CSS variables and assign those. - for (var key in vars) { - element.style.setProperty(key, vars[key]); - } -} - -/** - * A set of attribute names that are always read/written as camel case. - */ -var camelCaseAttributes = new Set(["baseFrequency", "diffuseConstant", "kernelMatrix", "kernelUnitLength", "keySplines", "keyTimes", "limitingConeAngle", "markerHeight", "markerWidth", "numOctaves", "targetX", "targetY", "surfaceScale", "specularConstant", "specularExponent", "stdDeviation", "tableValues", "viewBox", "gradientTransform", "pathLength"]); -function renderSVG(element, renderState, _styleProp, projection) { - renderHTML(element, renderState, undefined, projection); - for (var key in renderState.attrs) { - element.setAttribute(!camelCaseAttributes.has(key) ? camelToDash(key) : key, renderState.attrs[key]); - } -} -function scrapeMotionValuesFromProps$1(props) { - var style = props.style; - var newValues = {}; - for (var key in style) { - if (isMotionValue(style[key]) || isForcedMotionValue(key, props)) { - newValues[key] = style[key]; - } - } - return newValues; -} -function scrapeMotionValuesFromProps(props) { - var newValues = scrapeMotionValuesFromProps$1(props); - for (var key in props) { - if (isMotionValue(props[key])) { - var targetKey = key === "x" || key === "y" ? "attr" + key.toUpperCase() : key; - newValues[targetKey] = props[key]; - } - } - return newValues; -} -function isAnimationControls(v) { - return typeof v === "object" && typeof v.start === "function"; -} -var isKeyframesTarget = function (v) { - return Array.isArray(v); -}; -var isCustomValue = function (v) { - return Boolean(v && typeof v === "object" && v.mix && v.toValue); -}; -var resolveFinalValueInKeyframes = function (v) { - // TODO maybe throw if v.length - 1 is placeholder token? - return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v; -}; - -/** - * If the provided value is a MotionValue, this returns the actual value, otherwise just the value itself - * - * TODO: Remove and move to library - */ -function resolveMotionValue(value) { - var unwrappedValue = isMotionValue(value) ? value.get() : value; - return isCustomValue(unwrappedValue) ? unwrappedValue.toValue() : unwrappedValue; -} -function makeState(_a, props, context, presenceContext) { - var scrapeMotionValuesFromProps = _a.scrapeMotionValuesFromProps, - createRenderState = _a.createRenderState, - onMount = _a.onMount; - var state = { - latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps), - renderState: createRenderState() - }; - if (onMount) { - state.mount = function (instance) { - return onMount(props, instance, state); - }; - } - return state; -} -var makeUseVisualState = function (config) { - return function (props, isStatic) { - var context = React.useContext(MotionContext); - var presenceContext = React.useContext(PresenceContext); - return isStatic ? makeState(config, props, context, presenceContext) : useConstant(function () { - return makeState(config, props, context, presenceContext); - }); - }; -}; -function makeLatestValues(props, context, presenceContext, scrapeMotionValues) { - var values = {}; - var blockInitialAnimation = (presenceContext === null || presenceContext === void 0 ? void 0 : presenceContext.initial) === false; - var motionValues = scrapeMotionValues(props); - for (var key in motionValues) { - values[key] = resolveMotionValue(motionValues[key]); - } - var initial = props.initial, - animate = props.animate; - var isControllingVariants = checkIfControllingVariants(props); - var isVariantNode = checkIfVariantNode(props); - if (context && isVariantNode && !isControllingVariants && props.inherit !== false) { - initial !== null && initial !== void 0 ? initial : initial = context.initial; - animate !== null && animate !== void 0 ? animate : animate = context.animate; - } - var initialAnimationIsBlocked = blockInitialAnimation || initial === false; - var variantToSet = initialAnimationIsBlocked ? animate : initial; - if (variantToSet && typeof variantToSet !== "boolean" && !isAnimationControls(variantToSet)) { - var list = Array.isArray(variantToSet) ? variantToSet : [variantToSet]; - list.forEach(function (definition) { - var resolved = resolveVariantFromProps(props, definition); - if (!resolved) return; - var transitionEnd = resolved.transitionEnd; - resolved.transition; - var target = tslib.__rest(resolved, ["transitionEnd", "transition"]); - for (var key in target) { - var valueTarget = target[key]; - if (Array.isArray(valueTarget)) { - /** - * Take final keyframe if the initial animation is blocked because - * we want to initialise at the end of that blocked animation. - */ - var index = initialAnimationIsBlocked ? valueTarget.length - 1 : 0; - valueTarget = valueTarget[index]; - } - if (valueTarget !== null) { - values[key] = valueTarget; - } - } - for (var key in transitionEnd) values[key] = transitionEnd[key]; - }); - } - return values; -} -var svgMotionConfig = { - useVisualState: makeUseVisualState({ - scrapeMotionValuesFromProps: scrapeMotionValuesFromProps, - createRenderState: createSvgRenderState, - onMount: function (props, instance, _a) { - var renderState = _a.renderState, - latestValues = _a.latestValues; - try { - renderState.dimensions = typeof instance.getBBox === "function" ? instance.getBBox() : instance.getBoundingClientRect(); - } catch (e) { - // Most likely trying to measure an unrendered element under Firefox - renderState.dimensions = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - } - buildSVGAttrs(renderState, latestValues, { - enableHardwareAcceleration: false - }, props.transformTemplate); - renderSVG(instance, renderState); - } - }) -}; -var htmlMotionConfig = { - useVisualState: makeUseVisualState({ - scrapeMotionValuesFromProps: scrapeMotionValuesFromProps$1, - createRenderState: createHtmlRenderState - }) -}; -function createDomMotionConfig(Component, _a, preloadedFeatures, createVisualElement, projectionNodeConstructor) { - var _b = _a.forwardMotionProps, - forwardMotionProps = _b === void 0 ? false : _b; - var baseConfig = isSVGComponent(Component) ? svgMotionConfig : htmlMotionConfig; - return tslib.__assign(tslib.__assign({}, baseConfig), { - preloadedFeatures: preloadedFeatures, - useRender: createUseRender(forwardMotionProps), - createVisualElement: createVisualElement, - projectionNodeConstructor: projectionNodeConstructor, - Component: Component - }); -} -exports.AnimationType = void 0; -(function (AnimationType) { - AnimationType["Animate"] = "animate"; - AnimationType["Hover"] = "whileHover"; - AnimationType["Tap"] = "whileTap"; - AnimationType["Drag"] = "whileDrag"; - AnimationType["Focus"] = "whileFocus"; - AnimationType["InView"] = "whileInView"; - AnimationType["Exit"] = "exit"; -})(exports.AnimationType || (exports.AnimationType = {})); -function addDomEvent(target, eventName, handler, options) { - if (options === void 0) { - options = { - passive: true - }; - } - target.addEventListener(eventName, handler, options); - return function () { - return target.removeEventListener(eventName, handler); - }; -} -/** - * Attaches an event listener directly to the provided DOM element. - * - * Bypassing React's event system can be desirable, for instance when attaching non-passive - * event handlers. - * - * ```jsx - * const ref = useRef(null) - * - * useDomEvent(ref, 'wheel', onWheel, { passive: false }) - * - * return
- * ``` - * - * @param ref - React.RefObject that's been provided to the element you want to bind the listener to. - * @param eventName - Name of the event you want listen for. - * @param handler - Function to fire when receiving the event. - * @param options - Options to pass to `Event.addEventListener`. - * - * @public - */ -function useDomEvent(ref, eventName, handler, options) { - React.useEffect(function () { - var element = ref.current; - if (handler && element) { - return addDomEvent(element, eventName, handler, options); - } - }, [ref, eventName, handler, options]); -} - -/** - * - * @param props - * @param ref - * @internal - */ -function useFocusGesture(_a) { - var whileFocus = _a.whileFocus, - visualElement = _a.visualElement; - var onFocus = function () { - var _a; - (_a = visualElement.animationState) === null || _a === void 0 ? void 0 : _a.setActive(exports.AnimationType.Focus, true); - }; - var onBlur = function () { - var _a; - (_a = visualElement.animationState) === null || _a === void 0 ? void 0 : _a.setActive(exports.AnimationType.Focus, false); - }; - useDomEvent(visualElement, "focus", whileFocus ? onFocus : undefined); - useDomEvent(visualElement, "blur", whileFocus ? onBlur : undefined); -} -function isMouseEvent(event) { - // PointerEvent inherits from MouseEvent so we can't use a straight instanceof check. - if (typeof PointerEvent !== "undefined" && event instanceof PointerEvent) { - return !!(event.pointerType === "mouse"); - } - return event instanceof MouseEvent; -} -function isTouchEvent(event) { - var hasTouches = !!event.touches; - return hasTouches; -} - -/** - * Filters out events not attached to the primary pointer (currently left mouse button) - * @param eventHandler - */ -function filterPrimaryPointer(eventHandler) { - return function (event) { - var isMouseEvent = event instanceof MouseEvent; - var isPrimaryPointer = !isMouseEvent || isMouseEvent && event.button === 0; - if (isPrimaryPointer) { - eventHandler(event); - } - }; -} -var defaultPagePoint = { - pageX: 0, - pageY: 0 -}; -function pointFromTouch(e, pointType) { - if (pointType === void 0) { - pointType = "page"; - } - var primaryTouch = e.touches[0] || e.changedTouches[0]; - var point = primaryTouch || defaultPagePoint; - return { - x: point[pointType + "X"], - y: point[pointType + "Y"] - }; -} -function pointFromMouse(point, pointType) { - if (pointType === void 0) { - pointType = "page"; - } - return { - x: point[pointType + "X"], - y: point[pointType + "Y"] - }; -} -function extractEventInfo(event, pointType) { - if (pointType === void 0) { - pointType = "page"; - } - return { - point: isTouchEvent(event) ? pointFromTouch(event, pointType) : pointFromMouse(event, pointType) - }; -} -var wrapHandler = function (handler, shouldFilterPrimaryPointer) { - if (shouldFilterPrimaryPointer === void 0) { - shouldFilterPrimaryPointer = false; - } - var listener = function (event) { - return handler(event, extractEventInfo(event)); - }; - return shouldFilterPrimaryPointer ? filterPrimaryPointer(listener) : listener; -}; - -// We check for event support via functions in case they've been mocked by a testing suite. -var supportsPointerEvents = function () { - return isBrowser && window.onpointerdown === null; -}; -var supportsTouchEvents = function () { - return isBrowser && window.ontouchstart === null; -}; -var supportsMouseEvents = function () { - return isBrowser && window.onmousedown === null; -}; -var mouseEventNames = { - pointerdown: "mousedown", - pointermove: "mousemove", - pointerup: "mouseup", - pointercancel: "mousecancel", - pointerover: "mouseover", - pointerout: "mouseout", - pointerenter: "mouseenter", - pointerleave: "mouseleave" -}; -var touchEventNames = { - pointerdown: "touchstart", - pointermove: "touchmove", - pointerup: "touchend", - pointercancel: "touchcancel" -}; -function getPointerEventName(name) { - if (supportsPointerEvents()) { - return name; - } else if (supportsTouchEvents()) { - return touchEventNames[name]; - } else if (supportsMouseEvents()) { - return mouseEventNames[name]; - } - return name; -} -function addPointerEvent(target, eventName, handler, options) { - return addDomEvent(target, getPointerEventName(eventName), wrapHandler(handler, eventName === "pointerdown"), options); -} -function usePointerEvent(ref, eventName, handler, options) { - return useDomEvent(ref, getPointerEventName(eventName), handler && wrapHandler(handler, eventName === "pointerdown"), options); -} -function createLock(name) { - var lock = null; - return function () { - var openLock = function () { - lock = null; - }; - if (lock === null) { - lock = name; - return openLock; - } - return false; - }; -} -var globalHorizontalLock = createLock("dragHorizontal"); -var globalVerticalLock = createLock("dragVertical"); -function getGlobalLock(drag) { - var lock = false; - if (drag === "y") { - lock = globalVerticalLock(); - } else if (drag === "x") { - lock = globalHorizontalLock(); - } else { - var openHorizontal_1 = globalHorizontalLock(); - var openVertical_1 = globalVerticalLock(); - if (openHorizontal_1 && openVertical_1) { - lock = function () { - openHorizontal_1(); - openVertical_1(); - }; - } else { - // Release the locks because we don't use them - if (openHorizontal_1) openHorizontal_1(); - if (openVertical_1) openVertical_1(); - } - } - return lock; -} -function isDragActive() { - // Check the gesture lock - if we get it, it means no drag gesture is active - // and we can safely fire the tap gesture. - var openGestureLock = getGlobalLock(true); - if (!openGestureLock) return true; - openGestureLock(); - return false; -} -function createHoverEvent(visualElement, isActive, callback) { - return function (event, info) { - var _a; - if (!isMouseEvent(event) || isDragActive()) return; - /** - * Ensure we trigger animations before firing event callback - */ - (_a = visualElement.animationState) === null || _a === void 0 ? void 0 : _a.setActive(exports.AnimationType.Hover, isActive); - callback === null || callback === void 0 ? void 0 : callback(event, info); - }; -} -function useHoverGesture(_a) { - var onHoverStart = _a.onHoverStart, - onHoverEnd = _a.onHoverEnd, - whileHover = _a.whileHover, - visualElement = _a.visualElement; - usePointerEvent(visualElement, "pointerenter", onHoverStart || whileHover ? createHoverEvent(visualElement, true, onHoverStart) : undefined, { - passive: !onHoverStart - }); - usePointerEvent(visualElement, "pointerleave", onHoverEnd || whileHover ? createHoverEvent(visualElement, false, onHoverEnd) : undefined, { - passive: !onHoverEnd - }); -} - -/** - * Recursively traverse up the tree to check whether the provided child node - * is the parent or a descendant of it. - * - * @param parent - Element to find - * @param child - Element to test against parent - */ -var isNodeOrChild = function (parent, child) { - if (!child) { - return false; - } else if (parent === child) { - return true; - } else { - return isNodeOrChild(parent, child.parentElement); - } -}; -function useUnmountEffect(callback) { - return React.useEffect(function () { - return function () { - return callback(); - }; - }, []); -} - -/** - * @param handlers - - * @internal - */ -function useTapGesture(_a) { - var onTap = _a.onTap, - onTapStart = _a.onTapStart, - onTapCancel = _a.onTapCancel, - whileTap = _a.whileTap, - visualElement = _a.visualElement; - var hasPressListeners = onTap || onTapStart || onTapCancel || whileTap; - var isPressing = React.useRef(false); - var cancelPointerEndListeners = React.useRef(null); - /** - * Only set listener to passive if there are no external listeners. - */ - var eventOptions = { - passive: !(onTapStart || onTap || onTapCancel || onPointerDown) - }; - function removePointerEndListener() { - var _a; - (_a = cancelPointerEndListeners.current) === null || _a === void 0 ? void 0 : _a.call(cancelPointerEndListeners); - cancelPointerEndListeners.current = null; - } - function checkPointerEnd() { - var _a; - removePointerEndListener(); - isPressing.current = false; - (_a = visualElement.animationState) === null || _a === void 0 ? void 0 : _a.setActive(exports.AnimationType.Tap, false); - return !isDragActive(); - } - function onPointerUp(event, info) { - if (!checkPointerEnd()) return; - /** - * We only count this as a tap gesture if the event.target is the same - * as, or a child of, this component's element - */ - !isNodeOrChild(visualElement.getInstance(), event.target) ? onTapCancel === null || onTapCancel === void 0 ? void 0 : onTapCancel(event, info) : onTap === null || onTap === void 0 ? void 0 : onTap(event, info); - } - function onPointerCancel(event, info) { - if (!checkPointerEnd()) return; - onTapCancel === null || onTapCancel === void 0 ? void 0 : onTapCancel(event, info); - } - function onPointerDown(event, info) { - var _a; - removePointerEndListener(); - if (isPressing.current) return; - isPressing.current = true; - cancelPointerEndListeners.current = popmotion.pipe(addPointerEvent(window, "pointerup", onPointerUp, eventOptions), addPointerEvent(window, "pointercancel", onPointerCancel, eventOptions)); - /** - * Ensure we trigger animations before firing event callback - */ - (_a = visualElement.animationState) === null || _a === void 0 ? void 0 : _a.setActive(exports.AnimationType.Tap, true); - onTapStart === null || onTapStart === void 0 ? void 0 : onTapStart(event, info); - } - usePointerEvent(visualElement, "pointerdown", hasPressListeners ? onPointerDown : undefined, eventOptions); - useUnmountEffect(removePointerEndListener); -} -var warned = new Set(); -function warnOnce(condition, message, element) { - if (condition || warned.has(message)) return; - console.warn(message); - if (element) console.warn(element); - warned.add(message); -} - -/** - * Map an IntersectionHandler callback to an element. We only ever make one handler for one - * element, so even though these handlers might all be triggered by different - * observers, we can keep them in the same map. - */ -var observerCallbacks = new WeakMap(); -/** - * Multiple observers can be created for multiple element/document roots. Each with - * different settings. So here we store dictionaries of observers to each root, - * using serialised settings (threshold/margin) as lookup keys. - */ -var observers = new WeakMap(); -var fireObserverCallback = function (entry) { - var _a; - (_a = observerCallbacks.get(entry.target)) === null || _a === void 0 ? void 0 : _a(entry); -}; -var fireAllObserverCallbacks = function (entries) { - entries.forEach(fireObserverCallback); -}; -function initIntersectionObserver(_a) { - var root = _a.root, - options = tslib.__rest(_a, ["root"]); - var lookupRoot = root || document; - /** - * If we don't have an observer lookup map for this root, create one. - */ - if (!observers.has(lookupRoot)) { - observers.set(lookupRoot, {}); - } - var rootObservers = observers.get(lookupRoot); - var key = JSON.stringify(options); - /** - * If we don't have an observer for this combination of root and settings, - * create one. - */ - if (!rootObservers[key]) { - rootObservers[key] = new IntersectionObserver(fireAllObserverCallbacks, tslib.__assign({ - root: root - }, options)); - } - return rootObservers[key]; -} -function observeIntersection(element, options, callback) { - var rootInteresectionObserver = initIntersectionObserver(options); - observerCallbacks.set(element, callback); - rootInteresectionObserver.observe(element); - return function () { - observerCallbacks.delete(element); - rootInteresectionObserver.unobserve(element); - }; -} -function useViewport(_a) { - var visualElement = _a.visualElement, - whileInView = _a.whileInView, - onViewportEnter = _a.onViewportEnter, - onViewportLeave = _a.onViewportLeave, - _b = _a.viewport, - viewport = _b === void 0 ? {} : _b; - var state = React.useRef({ - hasEnteredView: false, - isInView: false - }); - var shouldObserve = Boolean(whileInView || onViewportEnter || onViewportLeave); - if (viewport.once && state.current.hasEnteredView) shouldObserve = false; - var useObserver = typeof IntersectionObserver === "undefined" ? useMissingIntersectionObserver : useIntersectionObserver; - useObserver(shouldObserve, state.current, visualElement, viewport); -} -var thresholdNames = { - some: 0, - all: 1 -}; -function useIntersectionObserver(shouldObserve, state, visualElement, _a) { - var root = _a.root, - rootMargin = _a.margin, - _b = _a.amount, - amount = _b === void 0 ? "some" : _b, - once = _a.once; - React.useEffect(function () { - if (!shouldObserve) return; - var options = { - root: root === null || root === void 0 ? void 0 : root.current, - rootMargin: rootMargin, - threshold: typeof amount === "number" ? amount : thresholdNames[amount] - }; - var intersectionCallback = function (entry) { - var _a; - var isIntersecting = entry.isIntersecting; - /** - * If there's been no change in the viewport state, early return. - */ - if (state.isInView === isIntersecting) return; - state.isInView = isIntersecting; - /** - * Handle hasEnteredView. If this is only meant to run once, and - * element isn't visible, early return. Otherwise set hasEnteredView to true. - */ - if (once && !isIntersecting && state.hasEnteredView) { - return; - } else if (isIntersecting) { - state.hasEnteredView = true; - } - (_a = visualElement.animationState) === null || _a === void 0 ? void 0 : _a.setActive(exports.AnimationType.InView, isIntersecting); - /** - * Use the latest committed props rather than the ones in scope - * when this observer is created - */ - var props = visualElement.getProps(); - var callback = isIntersecting ? props.onViewportEnter : props.onViewportLeave; - callback === null || callback === void 0 ? void 0 : callback(entry); - }; - return observeIntersection(visualElement.getInstance(), options, intersectionCallback); - }, [shouldObserve, root, rootMargin, amount]); -} -/** - * If IntersectionObserver is missing, we activate inView and fire onViewportEnter - * on mount. This way, the page will be in the state the author expects users - * to see it in for everyone. - */ -function useMissingIntersectionObserver(shouldObserve, state, visualElement, _a) { - var _b = _a.fallback, - fallback = _b === void 0 ? true : _b; - React.useEffect(function () { - if (!shouldObserve || !fallback) return; - if (env !== "production") { - warnOnce(false, "IntersectionObserver not available on this device. whileInView animations will trigger on mount."); - } - /** - * Fire this in an rAF because, at this point, the animation state - * won't have flushed for the first time and there's certain logic in - * there that behaves differently on the initial animation. - * - * This hook should be quite rarely called so setting this in an rAF - * is preferred to changing the behaviour of the animation state. - */ - requestAnimationFrame(function () { - var _a; - state.hasEnteredView = true; - var onViewportEnter = visualElement.getProps().onViewportEnter; - onViewportEnter === null || onViewportEnter === void 0 ? void 0 : onViewportEnter(null); - (_a = visualElement.animationState) === null || _a === void 0 ? void 0 : _a.setActive(exports.AnimationType.InView, true); - }); - }, [shouldObserve]); -} -var makeRenderlessComponent = function (hook) { - return function (props) { - hook(props); - return null; - }; -}; -var gestureAnimations = { - inView: makeRenderlessComponent(useViewport), - tap: makeRenderlessComponent(useTapGesture), - focus: makeRenderlessComponent(useFocusGesture), - hover: makeRenderlessComponent(useHoverGesture) -}; -var counter = 0; -var incrementId = function () { - return counter++; -}; -var useId = function () { - return useConstant(incrementId); -}; -/** - * Ideally we'd use the following code to support React 18 optionally. - * But this fairly fails in Webpack (otherwise treeshaking wouldn't work at all). - * Need to come up with a different way of figuring this out. - */ -// export const useId = (React as any).useId -// ? (React as any).useId -// : () => useConstant(incrementId) - -/** - * When a component is the child of `AnimatePresence`, it can use `usePresence` - * to access information about whether it's still present in the React tree. - * - * ```jsx - * import { usePresence } from "framer-motion" - * - * export const Component = () => { - * const [isPresent, safeToRemove] = usePresence() - * - * useEffect(() => { - * !isPresent && setTimeout(safeToRemove, 1000) - * }, [isPresent]) - * - * return
- * } - * ``` - * - * If `isPresent` is `false`, it means that a component has been removed the tree, but - * `AnimatePresence` won't really remove it until `safeToRemove` has been called. - * - * @public - */ -function usePresence() { - var context = React.useContext(PresenceContext); - if (context === null) return [true, null]; - var isPresent = context.isPresent, - onExitComplete = context.onExitComplete, - register = context.register; - // It's safe to call the following hooks conditionally (after an early return) because the context will always - // either be null or non-null for the lifespan of the component. - // Replace with useId when released in React - var id = useId(); - React.useEffect(function () { - return register(id); - }, []); - var safeToRemove = function () { - return onExitComplete === null || onExitComplete === void 0 ? void 0 : onExitComplete(id); - }; - return !isPresent && onExitComplete ? [false, safeToRemove] : [true]; -} -/** - * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present. - * There is no `safeToRemove` function. - * - * ```jsx - * import { useIsPresent } from "framer-motion" - * - * export const Component = () => { - * const isPresent = useIsPresent() - * - * useEffect(() => { - * !isPresent && console.log("I've been removed!") - * }, [isPresent]) - * - * return
- * } - * ``` - * - * @public - */ -function useIsPresent() { - return isPresent(React.useContext(PresenceContext)); -} -function isPresent(context) { - return context === null ? true : context.isPresent; -} -function shallowCompare(next, prev) { - if (!Array.isArray(prev)) return false; - var prevLength = prev.length; - if (prevLength !== next.length) return false; - for (var i = 0; i < prevLength; i++) { - if (prev[i] !== next[i]) return false; - } - return true; -} - -/** - * Converts seconds to milliseconds - * - * @param seconds - Time in seconds. - * @return milliseconds - Converted time in milliseconds. - */ -var secondsToMilliseconds = function (seconds) { - return seconds * 1000; -}; -var easingLookup = { - linear: popmotion.linear, - easeIn: popmotion.easeIn, - easeInOut: popmotion.easeInOut, - easeOut: popmotion.easeOut, - circIn: popmotion.circIn, - circInOut: popmotion.circInOut, - circOut: popmotion.circOut, - backIn: popmotion.backIn, - backInOut: popmotion.backInOut, - backOut: popmotion.backOut, - anticipate: popmotion.anticipate, - bounceIn: popmotion.bounceIn, - bounceInOut: popmotion.bounceInOut, - bounceOut: popmotion.bounceOut -}; -var easingDefinitionToFunction = function (definition) { - if (Array.isArray(definition)) { - // If cubic bezier definition, create bezier curve - heyListen.invariant(definition.length === 4, "Cubic bezier arrays must contain four numerical values."); - var _a = tslib.__read(definition, 4), - x1 = _a[0], - y1 = _a[1], - x2 = _a[2], - y2 = _a[3]; - return popmotion.cubicBezier(x1, y1, x2, y2); - } else if (typeof definition === "string") { - // Else lookup from table - heyListen.invariant(easingLookup[definition] !== undefined, "Invalid easing type '".concat(definition, "'")); - return easingLookup[definition]; - } - return definition; -}; -var isEasingArray = function (ease) { - return Array.isArray(ease) && typeof ease[0] !== "number"; -}; - -/** - * Check if a value is animatable. Examples: - * - * ✅: 100, "100px", "#fff" - * ❌: "block", "url(2.jpg)" - * @param value - * - * @internal - */ -var isAnimatable = function (key, value) { - // If the list of keys tat might be non-animatable grows, replace with Set - if (key === "zIndex") return false; - // If it's a number or a keyframes array, we can animate it. We might at some point - // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this, - // but for now lets leave it like this for performance reasons - if (typeof value === "number" || Array.isArray(value)) return true; - if (typeof value === "string" && - // It's animatable if we have a string - styleValueTypes.complex.test(value) && - // And it contains numbers and/or colors - !value.startsWith("url(") // Unless it starts with "url(" - ) { - return true; - } - return false; -}; -var underDampedSpring = function () { - return { - type: "spring", - stiffness: 500, - damping: 25, - restSpeed: 10 - }; -}; -var criticallyDampedSpring = function (to) { - return { - type: "spring", - stiffness: 550, - damping: to === 0 ? 2 * Math.sqrt(550) : 30, - restSpeed: 10 - }; -}; -var linearTween = function () { - return { - type: "keyframes", - ease: "linear", - duration: 0.3 - }; -}; -var keyframes = function (values) { - return { - type: "keyframes", - duration: 0.8, - values: values - }; -}; -var defaultTransitions = { - x: underDampedSpring, - y: underDampedSpring, - z: underDampedSpring, - rotate: underDampedSpring, - rotateX: underDampedSpring, - rotateY: underDampedSpring, - rotateZ: underDampedSpring, - scaleX: criticallyDampedSpring, - scaleY: criticallyDampedSpring, - scale: criticallyDampedSpring, - opacity: linearTween, - backgroundColor: linearTween, - color: linearTween, - default: criticallyDampedSpring -}; -var getDefaultTransition = function (valueKey, to) { - var transitionFactory; - if (isKeyframesTarget(to)) { - transitionFactory = keyframes; - } else { - transitionFactory = defaultTransitions[valueKey] || defaultTransitions.default; - } - return tslib.__assign({ - to: to - }, transitionFactory(to)); -}; - -/** - * A map of default value types for common values - */ -var defaultValueTypes = tslib.__assign(tslib.__assign({}, numberValueTypes), { - // Color props - color: styleValueTypes.color, - backgroundColor: styleValueTypes.color, - outlineColor: styleValueTypes.color, - fill: styleValueTypes.color, - stroke: styleValueTypes.color, - // Border props - borderColor: styleValueTypes.color, - borderTopColor: styleValueTypes.color, - borderRightColor: styleValueTypes.color, - borderBottomColor: styleValueTypes.color, - borderLeftColor: styleValueTypes.color, - filter: styleValueTypes.filter, - WebkitFilter: styleValueTypes.filter -}); -/** - * Gets the default ValueType for the provided value key - */ -var getDefaultValueType = function (key) { - return defaultValueTypes[key]; -}; -function getAnimatableNone(key, value) { - var _a; - var defaultValueType = getDefaultValueType(key); - if (defaultValueType !== styleValueTypes.filter) defaultValueType = styleValueTypes.complex; - // If value is not recognised as animatable, ie "none", create an animatable version origin based on the target - return (_a = defaultValueType.getAnimatableNone) === null || _a === void 0 ? void 0 : _a.call(defaultValueType, value); -} -var instantAnimationState = { - current: false -}; - -/** - * Decide whether a transition is defined on a given Transition. - * This filters out orchestration options and returns true - * if any options are left. - */ -function isTransitionDefined(_a) { - _a.when; - _a.delay; - _a.delayChildren; - _a.staggerChildren; - _a.staggerDirection; - _a.repeat; - _a.repeatType; - _a.repeatDelay; - _a.from; - var transition = tslib.__rest(_a, ["when", "delay", "delayChildren", "staggerChildren", "staggerDirection", "repeat", "repeatType", "repeatDelay", "from"]); - return !!Object.keys(transition).length; -} -var legacyRepeatWarning = false; -/** - * Convert Framer Motion's Transition type into Popmotion-compatible options. - */ -function convertTransitionToAnimationOptions(_a) { - var ease = _a.ease, - times = _a.times, - yoyo = _a.yoyo, - flip = _a.flip, - loop = _a.loop, - transition = tslib.__rest(_a, ["ease", "times", "yoyo", "flip", "loop"]); - var options = tslib.__assign({}, transition); - if (times) options["offset"] = times; - /** - * Convert any existing durations from seconds to milliseconds - */ - if (transition.duration) options["duration"] = secondsToMilliseconds(transition.duration); - if (transition.repeatDelay) options.repeatDelay = secondsToMilliseconds(transition.repeatDelay); - /** - * Map easing names to Popmotion's easing functions - */ - if (ease) { - options["ease"] = isEasingArray(ease) ? ease.map(easingDefinitionToFunction) : easingDefinitionToFunction(ease); - } - /** - * Support legacy transition API - */ - if (transition.type === "tween") options.type = "keyframes"; - /** - * TODO: These options are officially removed from the API. - */ - if (yoyo || loop || flip) { - heyListen.warning(!legacyRepeatWarning, "yoyo, loop and flip have been removed from the API. Replace with repeat and repeatType options."); - legacyRepeatWarning = true; - if (yoyo) { - options.repeatType = "reverse"; - } else if (loop) { - options.repeatType = "loop"; - } else if (flip) { - options.repeatType = "mirror"; - } - options.repeat = loop || yoyo || flip || transition.repeat; - } - /** - * TODO: Popmotion 9 has the ability to automatically detect whether to use - * a keyframes or spring animation, but does so by detecting velocity and other spring options. - * It'd be good to introduce a similar thing here. - */ - if (transition.type !== "spring") options.type = "keyframes"; - return options; -} -/** - * Get the delay for a value by checking Transition with decreasing specificity. - */ -function getDelayFromTransition(transition, key) { - var _a, _b; - var valueTransition = getValueTransition(transition, key) || {}; - return (_b = (_a = valueTransition.delay) !== null && _a !== void 0 ? _a : transition.delay) !== null && _b !== void 0 ? _b : 0; -} -function hydrateKeyframes(options) { - if (Array.isArray(options.to) && options.to[0] === null) { - options.to = tslib.__spreadArray([], tslib.__read(options.to), false); - options.to[0] = options.from; - } - return options; -} -function getPopmotionAnimationOptions(transition, options, key) { - var _a; - if (Array.isArray(options.to)) { - (_a = transition.duration) !== null && _a !== void 0 ? _a : transition.duration = 0.8; - } - hydrateKeyframes(options); - /** - * Get a default transition if none is determined to be defined. - */ - if (!isTransitionDefined(transition)) { - transition = tslib.__assign(tslib.__assign({}, transition), getDefaultTransition(key, options.to)); - } - return tslib.__assign(tslib.__assign({}, options), convertTransitionToAnimationOptions(transition)); -} -/** - * - */ -function getAnimation(key, value, target, transition, onComplete) { - var _a; - var valueTransition = getValueTransition(transition, key); - var origin = (_a = valueTransition.from) !== null && _a !== void 0 ? _a : value.get(); - var isTargetAnimatable = isAnimatable(key, target); - if (origin === "none" && isTargetAnimatable && typeof target === "string") { - /** - * If we're trying to animate from "none", try and get an animatable version - * of the target. This could be improved to work both ways. - */ - origin = getAnimatableNone(key, target); - } else if (isZero(origin) && typeof target === "string") { - origin = getZeroUnit(target); - } else if (!Array.isArray(target) && isZero(target) && typeof origin === "string") { - target = getZeroUnit(origin); - } - var isOriginAnimatable = isAnimatable(key, origin); - heyListen.warning(isOriginAnimatable === isTargetAnimatable, "You are trying to animate ".concat(key, " from \"").concat(origin, "\" to \"").concat(target, "\". ").concat(origin, " is not an animatable value - to enable this animation set ").concat(origin, " to a value animatable to ").concat(target, " via the `style` property.")); - function start() { - var options = { - from: origin, - to: target, - velocity: value.getVelocity(), - onComplete: onComplete, - onUpdate: function (v) { - return value.set(v); - } - }; - return valueTransition.type === "inertia" || valueTransition.type === "decay" ? popmotion.inertia(tslib.__assign(tslib.__assign({}, options), valueTransition)) : popmotion.animate(tslib.__assign(tslib.__assign({}, getPopmotionAnimationOptions(valueTransition, options, key)), { - onUpdate: function (v) { - var _a; - options.onUpdate(v); - (_a = valueTransition.onUpdate) === null || _a === void 0 ? void 0 : _a.call(valueTransition, v); - }, - onComplete: function () { - var _a; - options.onComplete(); - (_a = valueTransition.onComplete) === null || _a === void 0 ? void 0 : _a.call(valueTransition); - } - })); - } - function set() { - var _a, _b; - var finalTarget = resolveFinalValueInKeyframes(target); - value.set(finalTarget); - onComplete(); - (_a = valueTransition === null || valueTransition === void 0 ? void 0 : valueTransition.onUpdate) === null || _a === void 0 ? void 0 : _a.call(valueTransition, finalTarget); - (_b = valueTransition === null || valueTransition === void 0 ? void 0 : valueTransition.onComplete) === null || _b === void 0 ? void 0 : _b.call(valueTransition); - return { - stop: function () {} - }; - } - return !isOriginAnimatable || !isTargetAnimatable || valueTransition.type === false ? set : start; -} -function isZero(value) { - return value === 0 || typeof value === "string" && parseFloat(value) === 0 && value.indexOf(" ") === -1; -} -function getZeroUnit(potentialUnitType) { - return typeof potentialUnitType === "number" ? 0 : getAnimatableNone("", potentialUnitType); -} -function getValueTransition(transition, key) { - return transition[key] || transition["default"] || transition; -} -/** - * Start animation on a MotionValue. This function is an interface between - * Framer Motion and Popmotion - */ -function startAnimation(key, value, target, transition) { - if (transition === void 0) { - transition = {}; - } - if (instantAnimationState.current) { - transition = { - type: false - }; - } - return value.start(function (onComplete) { - var delayTimer; - var controls; - var animation = getAnimation(key, value, target, transition, onComplete); - var delay = getDelayFromTransition(transition, key); - var start = function () { - return controls = animation(); - }; - if (delay) { - delayTimer = window.setTimeout(start, secondsToMilliseconds(delay)); - } else { - start(); - } - return function () { - clearTimeout(delayTimer); - controls === null || controls === void 0 ? void 0 : controls.stop(); - }; - }); -} - -/** - * Check if value is a numerical string, ie a string that is purely a number eg "100" or "-100.1" - */ -var isNumericalString = function (v) { - return /^\-?\d*\.?\d+$/.test(v); -}; - -/** - * Check if the value is a zero value string like "0px" or "0%" - */ -var isZeroValueString = function (v) { - return /^0[^.\s]+$/.test(v); -}; -function addUniqueItem(arr, item) { - arr.indexOf(item) === -1 && arr.push(item); -} -function removeItem(arr, item) { - var index = arr.indexOf(item); - index > -1 && arr.splice(index, 1); -} -// Adapted from array-move -function moveItem(_a, fromIndex, toIndex) { - var _b = tslib.__read(_a), - arr = _b.slice(0); - var startIndex = fromIndex < 0 ? arr.length + fromIndex : fromIndex; - if (startIndex >= 0 && startIndex < arr.length) { - var endIndex = toIndex < 0 ? arr.length + toIndex : toIndex; - var _c = tslib.__read(arr.splice(fromIndex, 1), 1), - item = _c[0]; - arr.splice(endIndex, 0, item); - } - return arr; -} -var SubscriptionManager = /** @class */function () { - function SubscriptionManager() { - this.subscriptions = []; - } - SubscriptionManager.prototype.add = function (handler) { - var _this = this; - addUniqueItem(this.subscriptions, handler); - return function () { - return removeItem(_this.subscriptions, handler); - }; - }; - SubscriptionManager.prototype.notify = function (a, b, c) { - var numSubscriptions = this.subscriptions.length; - if (!numSubscriptions) return; - if (numSubscriptions === 1) { - /** - * If there's only a single handler we can just call it without invoking a loop. - */ - this.subscriptions[0](a, b, c); - } else { - for (var i = 0; i < numSubscriptions; i++) { - /** - * Check whether the handler exists before firing as it's possible - * the subscriptions were modified during this loop running. - */ - var handler = this.subscriptions[i]; - handler && handler(a, b, c); - } - } - }; - SubscriptionManager.prototype.getSize = function () { - return this.subscriptions.length; - }; - SubscriptionManager.prototype.clear = function () { - this.subscriptions.length = 0; - }; - return SubscriptionManager; -}(); -var isFloat = function (value) { - return !isNaN(parseFloat(value)); -}; -/** - * `MotionValue` is used to track the state and velocity of motion values. - * - * @public - */ -var MotionValue = /** @class */function () { - /** - * @param init - The initiating value - * @param config - Optional configuration options - * - * - `transformer`: A function to transform incoming values with. - * - * @internal - */ - function MotionValue(init) { - var _this = this; - /** - * This will be replaced by the build step with the latest version number. - * When MotionValues are provided to motion components, warn if versions are mixed. - */ - this.version = "6.5.1"; - /** - * Duration, in milliseconds, since last updating frame. - * - * @internal - */ - this.timeDelta = 0; - /** - * Timestamp of the last time this `MotionValue` was updated. - * - * @internal - */ - this.lastUpdated = 0; - /** - * Functions to notify when the `MotionValue` updates. - * - * @internal - */ - this.updateSubscribers = new SubscriptionManager(); - /** - * Functions to notify when the velocity updates. - * - * @internal - */ - this.velocityUpdateSubscribers = new SubscriptionManager(); - /** - * Functions to notify when the `MotionValue` updates and `render` is set to `true`. - * - * @internal - */ - this.renderSubscribers = new SubscriptionManager(); - /** - * Tracks whether this value can output a velocity. Currently this is only true - * if the value is numerical, but we might be able to widen the scope here and support - * other value types. - * - * @internal - */ - this.canTrackVelocity = false; - this.updateAndNotify = function (v, render) { - if (render === void 0) { - render = true; - } - _this.prev = _this.current; - _this.current = v; - // Update timestamp - var _a = sync.getFrameData(), - delta = _a.delta, - timestamp = _a.timestamp; - if (_this.lastUpdated !== timestamp) { - _this.timeDelta = delta; - _this.lastUpdated = timestamp; - sync__default["default"].postRender(_this.scheduleVelocityCheck); - } - // Update update subscribers - if (_this.prev !== _this.current) { - _this.updateSubscribers.notify(_this.current); - } - // Update velocity subscribers - if (_this.velocityUpdateSubscribers.getSize()) { - _this.velocityUpdateSubscribers.notify(_this.getVelocity()); - } - // Update render subscribers - if (render) { - _this.renderSubscribers.notify(_this.current); - } - }; - /** - * Schedule a velocity check for the next frame. - * - * This is an instanced and bound function to prevent generating a new - * function once per frame. - * - * @internal - */ - this.scheduleVelocityCheck = function () { - return sync__default["default"].postRender(_this.velocityCheck); - }; - /** - * Updates `prev` with `current` if the value hasn't been updated this frame. - * This ensures velocity calculations return `0`. - * - * This is an instanced and bound function to prevent generating a new - * function once per frame. - * - * @internal - */ - this.velocityCheck = function (_a) { - var timestamp = _a.timestamp; - if (timestamp !== _this.lastUpdated) { - _this.prev = _this.current; - _this.velocityUpdateSubscribers.notify(_this.getVelocity()); - } - }; - this.hasAnimated = false; - this.prev = this.current = init; - this.canTrackVelocity = isFloat(this.current); - } - /** - * Adds a function that will be notified when the `MotionValue` is updated. - * - * It returns a function that, when called, will cancel the subscription. - * - * When calling `onChange` inside a React component, it should be wrapped with the - * `useEffect` hook. As it returns an unsubscribe function, this should be returned - * from the `useEffect` function to ensure you don't add duplicate subscribers.. - * - * ```jsx - * export const MyComponent = () => { - * const x = useMotionValue(0) - * const y = useMotionValue(0) - * const opacity = useMotionValue(1) - * - * useEffect(() => { - * function updateOpacity() { - * const maxXY = Math.max(x.get(), y.get()) - * const newOpacity = transform(maxXY, [0, 100], [1, 0]) - * opacity.set(newOpacity) - * } - * - * const unsubscribeX = x.onChange(updateOpacity) - * const unsubscribeY = y.onChange(updateOpacity) - * - * return () => { - * unsubscribeX() - * unsubscribeY() - * } - * }, []) - * - * return - * } - * ``` - * - * @privateRemarks - * - * We could look into a `useOnChange` hook if the above lifecycle management proves confusing. - * - * ```jsx - * useOnChange(x, () => {}) - * ``` - * - * @param subscriber - A function that receives the latest value. - * @returns A function that, when called, will cancel this subscription. - * - * @public - */ - MotionValue.prototype.onChange = function (subscription) { - return this.updateSubscribers.add(subscription); - }; - MotionValue.prototype.clearListeners = function () { - this.updateSubscribers.clear(); - }; - /** - * Adds a function that will be notified when the `MotionValue` requests a render. - * - * @param subscriber - A function that's provided the latest value. - * @returns A function that, when called, will cancel this subscription. - * - * @internal - */ - MotionValue.prototype.onRenderRequest = function (subscription) { - // Render immediately - subscription(this.get()); - return this.renderSubscribers.add(subscription); - }; - /** - * Attaches a passive effect to the `MotionValue`. - * - * @internal - */ - MotionValue.prototype.attach = function (passiveEffect) { - this.passiveEffect = passiveEffect; - }; - /** - * Sets the state of the `MotionValue`. - * - * @remarks - * - * ```jsx - * const x = useMotionValue(0) - * x.set(10) - * ``` - * - * @param latest - Latest value to set. - * @param render - Whether to notify render subscribers. Defaults to `true` - * - * @public - */ - MotionValue.prototype.set = function (v, render) { - if (render === void 0) { - render = true; - } - if (!render || !this.passiveEffect) { - this.updateAndNotify(v, render); - } else { - this.passiveEffect(v, this.updateAndNotify); - } - }; - /** - * Returns the latest state of `MotionValue` - * - * @returns - The latest state of `MotionValue` - * - * @public - */ - MotionValue.prototype.get = function () { - return this.current; - }; - /** - * @public - */ - MotionValue.prototype.getPrevious = function () { - return this.prev; - }; - /** - * Returns the latest velocity of `MotionValue` - * - * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical. - * - * @public - */ - MotionValue.prototype.getVelocity = function () { - // This could be isFloat(this.prev) && isFloat(this.current), but that would be wasteful - return this.canTrackVelocity ? - // These casts could be avoided if parseFloat would be typed better - popmotion.velocityPerSecond(parseFloat(this.current) - parseFloat(this.prev), this.timeDelta) : 0; - }; - /** - * Registers a new animation to control this `MotionValue`. Only one - * animation can drive a `MotionValue` at one time. - * - * ```jsx - * value.start() - * ``` - * - * @param animation - A function that starts the provided animation - * - * @internal - */ - MotionValue.prototype.start = function (animation) { - var _this = this; - this.stop(); - return new Promise(function (resolve) { - _this.hasAnimated = true; - _this.stopAnimation = animation(resolve); - }).then(function () { - return _this.clearAnimation(); - }); - }; - /** - * Stop the currently active animation. - * - * @public - */ - MotionValue.prototype.stop = function () { - if (this.stopAnimation) this.stopAnimation(); - this.clearAnimation(); - }; - /** - * Returns `true` if this value is currently animating. - * - * @public - */ - MotionValue.prototype.isAnimating = function () { - return !!this.stopAnimation; - }; - MotionValue.prototype.clearAnimation = function () { - this.stopAnimation = null; - }; - /** - * Destroy and clean up subscribers to this `MotionValue`. - * - * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically - * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually - * created a `MotionValue` via the `motionValue` function. - * - * @public - */ - MotionValue.prototype.destroy = function () { - this.updateSubscribers.clear(); - this.renderSubscribers.clear(); - this.stop(); - }; - return MotionValue; -}(); -function motionValue(init) { - return new MotionValue(init); -} - -/** - * Tests a provided value against a ValueType - */ -var testValueType = function (v) { - return function (type) { - return type.test(v); - }; -}; - -/** - * ValueType for "auto" - */ -var auto = { - test: function (v) { - return v === "auto"; - }, - parse: function (v) { - return v; - } -}; - -/** - * A list of value types commonly used for dimensions - */ -var dimensionValueTypes = [styleValueTypes.number, styleValueTypes.px, styleValueTypes.percent, styleValueTypes.degrees, styleValueTypes.vw, styleValueTypes.vh, auto]; -/** - * Tests a dimensional value against the list of dimension ValueTypes - */ -var findDimensionValueType = function (v) { - return dimensionValueTypes.find(testValueType(v)); -}; - -/** - * A list of all ValueTypes - */ -var valueTypes = tslib.__spreadArray(tslib.__spreadArray([], tslib.__read(dimensionValueTypes), false), [styleValueTypes.color, styleValueTypes.complex], false); -/** - * Tests a value against the list of ValueTypes - */ -var findValueType = function (v) { - return valueTypes.find(testValueType(v)); -}; - -/** - * Set VisualElement's MotionValue, creating a new MotionValue for it if - * it doesn't exist. - */ -function setMotionValue(visualElement, key, value) { - if (visualElement.hasValue(key)) { - visualElement.getValue(key).set(value); - } else { - visualElement.addValue(key, motionValue(value)); - } -} -function setTarget(visualElement, definition) { - var resolved = resolveVariant(visualElement, definition); - var _a = resolved ? visualElement.makeTargetAnimatable(resolved, false) : {}, - _b = _a.transitionEnd, - transitionEnd = _b === void 0 ? {} : _b; - _a.transition; - var target = tslib.__rest(_a, ["transitionEnd", "transition"]); - target = tslib.__assign(tslib.__assign({}, target), transitionEnd); - for (var key in target) { - var value = resolveFinalValueInKeyframes(target[key]); - setMotionValue(visualElement, key, value); - } -} -function setVariants(visualElement, variantLabels) { - var reversedLabels = tslib.__spreadArray([], tslib.__read(variantLabels), false).reverse(); - reversedLabels.forEach(function (key) { - var _a; - var variant = visualElement.getVariant(key); - variant && setTarget(visualElement, variant); - (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach(function (child) { - setVariants(child, variantLabels); - }); - }); -} -function setValues(visualElement, definition) { - if (Array.isArray(definition)) { - return setVariants(visualElement, definition); - } else if (typeof definition === "string") { - return setVariants(visualElement, [definition]); - } else { - setTarget(visualElement, definition); - } -} -function checkTargetForNewValues(visualElement, target, origin) { - var _a, _b, _c; - var _d; - var newValueKeys = Object.keys(target).filter(function (key) { - return !visualElement.hasValue(key); - }); - var numNewValues = newValueKeys.length; - if (!numNewValues) return; - for (var i = 0; i < numNewValues; i++) { - var key = newValueKeys[i]; - var targetValue = target[key]; - var value = null; - /** - * If the target is a series of keyframes, we can use the first value - * in the array. If this first value is null, we'll still need to read from the DOM. - */ - if (Array.isArray(targetValue)) { - value = targetValue[0]; - } - /** - * If the target isn't keyframes, or the first keyframe was null, we need to - * first check if an origin value was explicitly defined in the transition as "from", - * if not read the value from the DOM. As an absolute fallback, take the defined target value. - */ - if (value === null) { - value = (_b = (_a = origin[key]) !== null && _a !== void 0 ? _a : visualElement.readValue(key)) !== null && _b !== void 0 ? _b : target[key]; - } - /** - * If value is still undefined or null, ignore it. Preferably this would throw, - * but this was causing issues in Framer. - */ - if (value === undefined || value === null) continue; - if (typeof value === "string" && (isNumericalString(value) || isZeroValueString(value))) { - // If this is a number read as a string, ie "0" or "200", convert it to a number - value = parseFloat(value); - } else if (!findValueType(value) && styleValueTypes.complex.test(targetValue)) { - value = getAnimatableNone(key, targetValue); - } - visualElement.addValue(key, motionValue(value)); - (_c = (_d = origin)[key]) !== null && _c !== void 0 ? _c : _d[key] = value; - visualElement.setBaseTarget(key, value); - } -} -function getOriginFromTransition(key, transition) { - if (!transition) return; - var valueTransition = transition[key] || transition["default"] || transition; - return valueTransition.from; -} -function getOrigin(target, transition, visualElement) { - var _a, _b; - var origin = {}; - for (var key in target) { - origin[key] = (_a = getOriginFromTransition(key, transition)) !== null && _a !== void 0 ? _a : (_b = visualElement.getValue(key)) === null || _b === void 0 ? void 0 : _b.get(); - } - return origin; -} -function animateVisualElement(visualElement, definition, options) { - if (options === void 0) { - options = {}; - } - visualElement.notifyAnimationStart(definition); - var animation; - if (Array.isArray(definition)) { - var animations = definition.map(function (variant) { - return animateVariant(visualElement, variant, options); - }); - animation = Promise.all(animations); - } else if (typeof definition === "string") { - animation = animateVariant(visualElement, definition, options); - } else { - var resolvedDefinition = typeof definition === "function" ? resolveVariant(visualElement, definition, options.custom) : definition; - animation = animateTarget(visualElement, resolvedDefinition, options); - } - return animation.then(function () { - return visualElement.notifyAnimationComplete(definition); - }); -} -function animateVariant(visualElement, variant, options) { - var _a; - if (options === void 0) { - options = {}; - } - var resolved = resolveVariant(visualElement, variant, options.custom); - var _b = (resolved || {}).transition, - transition = _b === void 0 ? visualElement.getDefaultTransition() || {} : _b; - if (options.transitionOverride) { - transition = options.transitionOverride; - } - /** - * If we have a variant, create a callback that runs it as an animation. - * Otherwise, we resolve a Promise immediately for a composable no-op. - */ - var getAnimation = resolved ? function () { - return animateTarget(visualElement, resolved, options); - } : function () { - return Promise.resolve(); - }; - /** - * If we have children, create a callback that runs all their animations. - * Otherwise, we resolve a Promise immediately for a composable no-op. - */ - var getChildAnimations = ((_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.size) ? function (forwardDelay) { - if (forwardDelay === void 0) { - forwardDelay = 0; - } - var _a = transition.delayChildren, - delayChildren = _a === void 0 ? 0 : _a, - staggerChildren = transition.staggerChildren, - staggerDirection = transition.staggerDirection; - return animateChildren(visualElement, variant, delayChildren + forwardDelay, staggerChildren, staggerDirection, options); - } : function () { - return Promise.resolve(); - }; - /** - * If the transition explicitly defines a "when" option, we need to resolve either - * this animation or all children animations before playing the other. - */ - var when = transition.when; - if (when) { - var _c = tslib.__read(when === "beforeChildren" ? [getAnimation, getChildAnimations] : [getChildAnimations, getAnimation], 2), - first = _c[0], - last = _c[1]; - return first().then(last); - } else { - return Promise.all([getAnimation(), getChildAnimations(options.delay)]); - } -} -/** - * @internal - */ -function animateTarget(visualElement, definition, _a) { - var _b; - var _c = _a === void 0 ? {} : _a, - _d = _c.delay, - delay = _d === void 0 ? 0 : _d, - transitionOverride = _c.transitionOverride, - type = _c.type; - var _e = visualElement.makeTargetAnimatable(definition), - _f = _e.transition, - transition = _f === void 0 ? visualElement.getDefaultTransition() : _f, - transitionEnd = _e.transitionEnd, - target = tslib.__rest(_e, ["transition", "transitionEnd"]); - if (transitionOverride) transition = transitionOverride; - var animations = []; - var animationTypeState = type && ((_b = visualElement.animationState) === null || _b === void 0 ? void 0 : _b.getState()[type]); - for (var key in target) { - var value = visualElement.getValue(key); - var valueTarget = target[key]; - if (!value || valueTarget === undefined || animationTypeState && shouldBlockAnimation(animationTypeState, key)) { - continue; - } - var valueTransition = tslib.__assign({ - delay: delay - }, transition); - /** - * Make animation instant if this is a transform prop and we should reduce motion. - */ - if (visualElement.shouldReduceMotion && isTransformProp(key)) { - valueTransition = tslib.__assign(tslib.__assign({}, valueTransition), { - type: false, - delay: 0 - }); - } - var animation = startAnimation(key, value, valueTarget, valueTransition); - animations.push(animation); - } - return Promise.all(animations).then(function () { - transitionEnd && setTarget(visualElement, transitionEnd); - }); -} -function animateChildren(visualElement, variant, delayChildren, staggerChildren, staggerDirection, options) { - if (delayChildren === void 0) { - delayChildren = 0; - } - if (staggerChildren === void 0) { - staggerChildren = 0; - } - if (staggerDirection === void 0) { - staggerDirection = 1; - } - var animations = []; - var maxStaggerDuration = (visualElement.variantChildren.size - 1) * staggerChildren; - var generateStaggerDuration = staggerDirection === 1 ? function (i) { - if (i === void 0) { - i = 0; - } - return i * staggerChildren; - } : function (i) { - if (i === void 0) { - i = 0; - } - return maxStaggerDuration - i * staggerChildren; - }; - Array.from(visualElement.variantChildren).sort(sortByTreeOrder).forEach(function (child, i) { - animations.push(animateVariant(child, variant, tslib.__assign(tslib.__assign({}, options), { - delay: delayChildren + generateStaggerDuration(i) - })).then(function () { - return child.notifyAnimationComplete(variant); - })); - }); - return Promise.all(animations); -} -function stopAnimation(visualElement) { - visualElement.forEachValue(function (value) { - return value.stop(); - }); -} -function sortByTreeOrder(a, b) { - return a.sortNodePosition(b); -} -/** - * Decide whether we should block this animation. Previously, we achieved this - * just by checking whether the key was listed in protectedKeys, but this - * posed problems if an animation was triggered by afterChildren and protectedKeys - * had been set to true in the meantime. - */ -function shouldBlockAnimation(_a, key) { - var protectedKeys = _a.protectedKeys, - needsAnimating = _a.needsAnimating; - var shouldBlock = protectedKeys.hasOwnProperty(key) && needsAnimating[key] !== true; - needsAnimating[key] = false; - return shouldBlock; -} -var variantPriorityOrder = [exports.AnimationType.Animate, exports.AnimationType.InView, exports.AnimationType.Focus, exports.AnimationType.Hover, exports.AnimationType.Tap, exports.AnimationType.Drag, exports.AnimationType.Exit]; -var reversePriorityOrder = tslib.__spreadArray([], tslib.__read(variantPriorityOrder), false).reverse(); -var numAnimationTypes = variantPriorityOrder.length; -function animateList(visualElement) { - return function (animations) { - return Promise.all(animations.map(function (_a) { - var animation = _a.animation, - options = _a.options; - return animateVisualElement(visualElement, animation, options); - })); - }; -} -function createAnimationState(visualElement) { - var animate = animateList(visualElement); - var state = createState(); - var allAnimatedKeys = {}; - var isInitialRender = true; - /** - * This function will be used to reduce the animation definitions for - * each active animation type into an object of resolved values for it. - */ - var buildResolvedTypeValues = function (acc, definition) { - var resolved = resolveVariant(visualElement, definition); - if (resolved) { - resolved.transition; - var transitionEnd = resolved.transitionEnd, - target = tslib.__rest(resolved, ["transition", "transitionEnd"]); - acc = tslib.__assign(tslib.__assign(tslib.__assign({}, acc), target), transitionEnd); - } - return acc; - }; - function isAnimated(key) { - return allAnimatedKeys[key] !== undefined; - } - /** - * This just allows us to inject mocked animation functions - * @internal - */ - function setAnimateFunction(makeAnimator) { - animate = makeAnimator(visualElement); - } - /** - * When we receive new props, we need to: - * 1. Create a list of protected keys for each type. This is a directory of - * value keys that are currently being "handled" by types of a higher priority - * so that whenever an animation is played of a given type, these values are - * protected from being animated. - * 2. Determine if an animation type needs animating. - * 3. Determine if any values have been removed from a type and figure out - * what to animate those to. - */ - function animateChanges(options, changedActiveType) { - var _a; - var props = visualElement.getProps(); - var context = visualElement.getVariantContext(true) || {}; - /** - * A list of animations that we'll build into as we iterate through the animation - * types. This will get executed at the end of the function. - */ - var animations = []; - /** - * Keep track of which values have been removed. Then, as we hit lower priority - * animation types, we can check if they contain removed values and animate to that. - */ - var removedKeys = new Set(); - /** - * A dictionary of all encountered keys. This is an object to let us build into and - * copy it without iteration. Each time we hit an animation type we set its protected - * keys - the keys its not allowed to animate - to the latest version of this object. - */ - var encounteredKeys = {}; - /** - * If a variant has been removed at a given index, and this component is controlling - * variant animations, we want to ensure lower-priority variants are forced to animate. - */ - var removedVariantIndex = Infinity; - var _loop_1 = function (i) { - var type = reversePriorityOrder[i]; - var typeState = state[type]; - var prop = (_a = props[type]) !== null && _a !== void 0 ? _a : context[type]; - var propIsVariant = isVariantLabel(prop); - /** - * If this type has *just* changed isActive status, set activeDelta - * to that status. Otherwise set to null. - */ - var activeDelta = type === changedActiveType ? typeState.isActive : null; - if (activeDelta === false) removedVariantIndex = i; - /** - * If this prop is an inherited variant, rather than been set directly on the - * component itself, we want to make sure we allow the parent to trigger animations. - * - * TODO: Can probably change this to a !isControllingVariants check - */ - var isInherited = prop === context[type] && prop !== props[type] && propIsVariant; - /** - * - */ - if (isInherited && isInitialRender && visualElement.manuallyAnimateOnMount) { - isInherited = false; - } - /** - * Set all encountered keys so far as the protected keys for this type. This will - * be any key that has been animated or otherwise handled by active, higher-priortiy types. - */ - typeState.protectedKeys = tslib.__assign({}, encounteredKeys); - // Check if we can skip analysing this prop early - if ( - // If it isn't active and hasn't *just* been set as inactive - !typeState.isActive && activeDelta === null || - // If we didn't and don't have any defined prop for this animation type - !prop && !typeState.prevProp || - // Or if the prop doesn't define an animation - isAnimationControls(prop) || typeof prop === "boolean") { - return "continue"; - } - /** - * As we go look through the values defined on this type, if we detect - * a changed value or a value that was removed in a higher priority, we set - * this to true and add this prop to the animation list. - */ - var variantDidChange = checkVariantsDidChange(typeState.prevProp, prop); - var shouldAnimateType = variantDidChange || - // If we're making this variant active, we want to always make it active - type === changedActiveType && typeState.isActive && !isInherited && propIsVariant || - // If we removed a higher-priority variant (i is in reverse order) - i > removedVariantIndex && propIsVariant; - /** - * As animations can be set as variant lists, variants or target objects, we - * coerce everything to an array if it isn't one already - */ - var definitionList = Array.isArray(prop) ? prop : [prop]; - /** - * Build an object of all the resolved values. We'll use this in the subsequent - * animateChanges calls to determine whether a value has changed. - */ - var resolvedValues = definitionList.reduce(buildResolvedTypeValues, {}); - if (activeDelta === false) resolvedValues = {}; - /** - * Now we need to loop through all the keys in the prev prop and this prop, - * and decide: - * 1. If the value has changed, and needs animating - * 2. If it has been removed, and needs adding to the removedKeys set - * 3. If it has been removed in a higher priority type and needs animating - * 4. If it hasn't been removed in a higher priority but hasn't changed, and - * needs adding to the type's protectedKeys list. - */ - var _b = typeState.prevResolvedValues, - prevResolvedValues = _b === void 0 ? {} : _b; - var allKeys = tslib.__assign(tslib.__assign({}, prevResolvedValues), resolvedValues); - var markToAnimate = function (key) { - shouldAnimateType = true; - removedKeys.delete(key); - typeState.needsAnimating[key] = true; - }; - for (var key in allKeys) { - var next = resolvedValues[key]; - var prev = prevResolvedValues[key]; - // If we've already handled this we can just skip ahead - if (encounteredKeys.hasOwnProperty(key)) continue; - /** - * If the value has changed, we probably want to animate it. - */ - if (next !== prev) { - /** - * If both values are keyframes, we need to shallow compare them to - * detect whether any value has changed. If it has, we animate it. - */ - if (isKeyframesTarget(next) && isKeyframesTarget(prev)) { - if (!shallowCompare(next, prev) || variantDidChange) { - markToAnimate(key); - } else { - /** - * If it hasn't changed, we want to ensure it doesn't animate by - * adding it to the list of protected keys. - */ - typeState.protectedKeys[key] = true; - } - } else if (next !== undefined) { - // If next is defined and doesn't equal prev, it needs animating - markToAnimate(key); - } else { - // If it's undefined, it's been removed. - removedKeys.add(key); - } - } else if (next !== undefined && removedKeys.has(key)) { - /** - * If next hasn't changed and it isn't undefined, we want to check if it's - * been removed by a higher priority - */ - markToAnimate(key); - } else { - /** - * If it hasn't changed, we add it to the list of protected values - * to ensure it doesn't get animated. - */ - typeState.protectedKeys[key] = true; - } - } - /** - * Update the typeState so next time animateChanges is called we can compare the - * latest prop and resolvedValues to these. - */ - typeState.prevProp = prop; - typeState.prevResolvedValues = resolvedValues; - /** - * - */ - if (typeState.isActive) { - encounteredKeys = tslib.__assign(tslib.__assign({}, encounteredKeys), resolvedValues); - } - if (isInitialRender && visualElement.blockInitialAnimation) { - shouldAnimateType = false; - } - /** - * If this is an inherited prop we want to hard-block animations - * TODO: Test as this should probably still handle animations triggered - * by removed values? - */ - if (shouldAnimateType && !isInherited) { - animations.push.apply(animations, tslib.__spreadArray([], tslib.__read(definitionList.map(function (animation) { - return { - animation: animation, - options: tslib.__assign({ - type: type - }, options) - }; - })), false)); - } - }; - /** - * Iterate through all animation types in reverse priority order. For each, we want to - * detect which values it's handling and whether or not they've changed (and therefore - * need to be animated). If any values have been removed, we want to detect those in - * lower priority props and flag for animation. - */ - for (var i = 0; i < numAnimationTypes; i++) { - _loop_1(i); - } - allAnimatedKeys = tslib.__assign({}, encounteredKeys); - /** - * If there are some removed value that haven't been dealt with, - * we need to create a new animation that falls back either to the value - * defined in the style prop, or the last read value. - */ - if (removedKeys.size) { - var fallbackAnimation_1 = {}; - removedKeys.forEach(function (key) { - var fallbackTarget = visualElement.getBaseTarget(key); - if (fallbackTarget !== undefined) { - fallbackAnimation_1[key] = fallbackTarget; - } - }); - animations.push({ - animation: fallbackAnimation_1 - }); - } - var shouldAnimate = Boolean(animations.length); - if (isInitialRender && props.initial === false && !visualElement.manuallyAnimateOnMount) { - shouldAnimate = false; - } - isInitialRender = false; - return shouldAnimate ? animate(animations) : Promise.resolve(); - } - /** - * Change whether a certain animation type is active. - */ - function setActive(type, isActive, options) { - var _a; - // If the active state hasn't changed, we can safely do nothing here - if (state[type].isActive === isActive) return Promise.resolve(); - // Propagate active change to children - (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach(function (child) { - var _a; - return (_a = child.animationState) === null || _a === void 0 ? void 0 : _a.setActive(type, isActive); - }); - state[type].isActive = isActive; - var animations = animateChanges(options, type); - for (var key in state) { - state[key].protectedKeys = {}; - } - return animations; - } - return { - isAnimated: isAnimated, - animateChanges: animateChanges, - setActive: setActive, - setAnimateFunction: setAnimateFunction, - getState: function () { - return state; - } - }; -} -function checkVariantsDidChange(prev, next) { - if (typeof next === "string") { - return next !== prev; - } else if (isVariantLabels(next)) { - return !shallowCompare(next, prev); - } - return false; -} -function createTypeState(isActive) { - if (isActive === void 0) { - isActive = false; - } - return { - isActive: isActive, - protectedKeys: {}, - needsAnimating: {}, - prevResolvedValues: {} - }; -} -function createState() { - var _a; - return _a = {}, _a[exports.AnimationType.Animate] = createTypeState(true), _a[exports.AnimationType.InView] = createTypeState(), _a[exports.AnimationType.Hover] = createTypeState(), _a[exports.AnimationType.Tap] = createTypeState(), _a[exports.AnimationType.Drag] = createTypeState(), _a[exports.AnimationType.Focus] = createTypeState(), _a[exports.AnimationType.Exit] = createTypeState(), _a; -} -var animations = { - animation: makeRenderlessComponent(function (_a) { - var visualElement = _a.visualElement, - animate = _a.animate; - /** - * We dynamically generate the AnimationState manager as it contains a reference - * to the underlying animation library. We only want to load that if we load this, - * so people can optionally code split it out using the `m` component. - */ - visualElement.animationState || (visualElement.animationState = createAnimationState(visualElement)); - /** - * Subscribe any provided AnimationControls to the component's VisualElement - */ - if (isAnimationControls(animate)) { - React.useEffect(function () { - return animate.subscribe(visualElement); - }, [animate]); - } - }), - exit: makeRenderlessComponent(function (props) { - var custom = props.custom, - visualElement = props.visualElement; - var _a = tslib.__read(usePresence(), 2), - isPresent = _a[0], - safeToRemove = _a[1]; - var presenceContext = React.useContext(PresenceContext); - React.useEffect(function () { - var _a, _b; - visualElement.isPresent = isPresent; - var animation = (_a = visualElement.animationState) === null || _a === void 0 ? void 0 : _a.setActive(exports.AnimationType.Exit, !isPresent, { - custom: (_b = presenceContext === null || presenceContext === void 0 ? void 0 : presenceContext.custom) !== null && _b !== void 0 ? _b : custom - }); - !isPresent && (animation === null || animation === void 0 ? void 0 : animation.then(safeToRemove)); - }, [isPresent]); - }) -}; - -/** - * @internal - */ -var PanSession = /** @class */function () { - function PanSession(event, handlers, _a) { - var _this = this; - var _b = _a === void 0 ? {} : _a, - transformPagePoint = _b.transformPagePoint; - /** - * @internal - */ - this.startEvent = null; - /** - * @internal - */ - this.lastMoveEvent = null; - /** - * @internal - */ - this.lastMoveEventInfo = null; - /** - * @internal - */ - this.handlers = {}; - this.updatePoint = function () { - if (!(_this.lastMoveEvent && _this.lastMoveEventInfo)) return; - var info = getPanInfo(_this.lastMoveEventInfo, _this.history); - var isPanStarted = _this.startEvent !== null; - // Only start panning if the offset is larger than 3 pixels. If we make it - // any larger than this we'll want to reset the pointer history - // on the first update to avoid visual snapping to the cursoe. - var isDistancePastThreshold = popmotion.distance(info.offset, { - x: 0, - y: 0 - }) >= 3; - if (!isPanStarted && !isDistancePastThreshold) return; - var point = info.point; - var timestamp = sync.getFrameData().timestamp; - _this.history.push(tslib.__assign(tslib.__assign({}, point), { - timestamp: timestamp - })); - var _a = _this.handlers, - onStart = _a.onStart, - onMove = _a.onMove; - if (!isPanStarted) { - onStart && onStart(_this.lastMoveEvent, info); - _this.startEvent = _this.lastMoveEvent; - } - onMove && onMove(_this.lastMoveEvent, info); - }; - this.handlePointerMove = function (event, info) { - _this.lastMoveEvent = event; - _this.lastMoveEventInfo = transformPoint(info, _this.transformPagePoint); - // Because Safari doesn't trigger mouseup events when it's above a ` ' + e.phrase("(Use line:column or scroll% syntax)") + ""; - } - c(i, "getJumpDialog"); - function a(e, t) { - var n = Number(t); - return /^[-+]/.test(t) ? e.getCursor().line + n : n - 1; - } - c(a, "interpretLine"), o.commands.jumpToLine = function (e) { - var t = e.getCursor(); - s(e, i(e), e.phrase("Jump to line:"), t.line + 1 + ":" + t.ch, function (n) { - if (n) { - var r; - if (r = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(n)) e.setCursor(a(e, r[1]), Number(r[2]));else if (r = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(n)) { - var l = Math.round(e.lineCount() * Number(r[1]) / 100); - /^[-+]/.test(r[1]) && (l = t.line + l + 1), e.setCursor(l - 1, t.ch); - } else (r = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(n)) && e.setCursor(a(e, r[1]), t.ch); - } - }); - }, o.keyMap.default["Alt-G"] = "jumpToLine"; - }); -})(); -var d = b.exports; -const j = f.getDefaultExportFromCjs(d), - y = h({ - __proto__: null, - default: j - }, [d]); -exports.jumpToLine = y; - -/***/ }), - -/***/ "../../graphiql-react/dist/jump.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/jump.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -var c = Object.defineProperty; -var s = (e, r) => c(e, "name", { - value: r, - configurable: !0 -}); -const u = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"), - d = __webpack_require__(/*! ./SchemaReference.cjs.js */ "../../graphiql-react/dist/SchemaReference.cjs.js"); -__webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -__webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -__webpack_require__(/*! ./forEachState.cjs.js */ "../../graphiql-react/dist/forEachState.cjs.js"); -u.CodeMirror.defineOption("jump", !1, (e, r, n) => { - if (n && n !== u.CodeMirror.Init) { - const t = e.state.jump.onMouseOver; - u.CodeMirror.off(e.getWrapperElement(), "mouseover", t); - const i = e.state.jump.onMouseOut; - u.CodeMirror.off(e.getWrapperElement(), "mouseout", i), u.CodeMirror.off(document, "keydown", e.state.jump.onKeyDown), delete e.state.jump; - } - if (r) { - const t = e.state.jump = { - options: r, - onMouseOver: M.bind(null, e), - onMouseOut: m.bind(null, e), - onKeyDown: g.bind(null, e) - }; - u.CodeMirror.on(e.getWrapperElement(), "mouseover", t.onMouseOver), u.CodeMirror.on(e.getWrapperElement(), "mouseout", t.onMouseOut), u.CodeMirror.on(document, "keydown", t.onKeyDown); - } -}); -function M(e, r) { - const n = r.target || r.srcElement; - if (!(n instanceof HTMLElement) || (n == null ? void 0 : n.nodeName) !== "SPAN") return; - const t = n.getBoundingClientRect(), - i = { - left: (t.left + t.right) / 2, - top: (t.top + t.bottom) / 2 - }; - e.state.jump.cursor = i, e.state.jump.isHoldingModifier && l(e); -} -s(M, "onMouseOver"); -function m(e) { - if (!e.state.jump.isHoldingModifier && e.state.jump.cursor) { - e.state.jump.cursor = null; - return; - } - e.state.jump.isHoldingModifier && e.state.jump.marker && p(e); -} -s(m, "onMouseOut"); -function g(e, r) { - if (e.state.jump.isHoldingModifier || !k(r.key)) return; - e.state.jump.isHoldingModifier = !0, e.state.jump.cursor && l(e); - const n = s(o => { - o.code === r.code && (e.state.jump.isHoldingModifier = !1, e.state.jump.marker && p(e), u.CodeMirror.off(document, "keyup", n), u.CodeMirror.off(document, "click", t), e.off("mousedown", i)); - }, "onKeyUp"), - t = s(o => { - const { - destination: a, - options: f - } = e.state.jump; - a && f.onClick(a, o); - }, "onClick"), - i = s((o, a) => { - e.state.jump.destination && (a.codemirrorIgnore = !0); - }, "onMouseDown"); - u.CodeMirror.on(document, "keyup", n), u.CodeMirror.on(document, "click", t), e.on("mousedown", i); -} -s(g, "onKeyDown"); -const j = typeof navigator < "u" && navigator && navigator.appVersion.includes("Mac"); -function k(e) { - return e === (j ? "Meta" : "Control"); -} -s(k, "isJumpModifier"); -function l(e) { - if (e.state.jump.marker) return; - const { - cursor: r, - options: n - } = e.state.jump, - t = e.coordsChar(r), - i = e.getTokenAt(t, !0), - o = n.getDestination || e.getHelper(t, "jump"); - if (o) { - const a = o(i, n, e); - if (a) { - const f = e.markText({ - line: t.line, - ch: i.start - }, { - line: t.line, - ch: i.end - }, { - className: "CodeMirror-jump-token" - }); - e.state.jump.marker = f, e.state.jump.destination = a; - } - } -} -s(l, "enableJumpMode"); -function p(e) { - const { - marker: r - } = e.state.jump; - e.state.jump.marker = null, e.state.jump.destination = null, r.clear(); -} -s(p, "disableJumpMode"); -u.CodeMirror.registerHelper("jump", "graphql", (e, r) => { - if (!r.schema || !r.onClick || !e.state) return; - const { - state: n - } = e, - { - kind: t, - step: i - } = n, - o = d.getTypeInfo(r.schema, n); - if (t === "Field" && i === 0 && o.fieldDef || t === "AliasedField" && i === 2 && o.fieldDef) return d.getFieldReference(o); - if (t === "Directive" && i === 1 && o.directiveDef) return d.getDirectiveReference(o); - if (t === "Argument" && i === 0 && o.argDef) return d.getArgumentReference(o); - if (t === "EnumValue" && o.enumValue) return d.getEnumValueReference(o); - if (t === "NamedType" && o.type) return d.getTypeReference(o); -}); - -/***/ }), - -/***/ "../../graphiql-react/dist/lint.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/lint.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var W = Object.defineProperty; -var s = (h, v) => W(h, "name", { - value: v, - configurable: !0 -}); -const x = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function q(h, v) { - for (var l = 0; l < v.length; l++) { - const u = v[l]; - if (typeof u != "string" && !Array.isArray(u)) { - for (const g in u) if (g !== "default" && !(g in h)) { - const c = Object.getOwnPropertyDescriptor(u, g); - c && Object.defineProperty(h, g, c.get ? c : { - enumerable: !0, - get: () => u[g] - }); - } - } - } - return Object.freeze(Object.defineProperty(h, Symbol.toStringTag, { - value: "Module" - })); -} -s(q, "_mergeNamespaces"); -var B = { - exports: {} -}; -(function (h, v) { - (function (l) { - l(x.requireCodemirror()); - })(function (l) { - var u = "CodeMirror-lint-markers", - g = "CodeMirror-lint-line-"; - function c(t, e, r) { - var n = document.createElement("div"); - n.className = "CodeMirror-lint-tooltip cm-s-" + t.options.theme, n.appendChild(r.cloneNode(!0)), t.state.lint.options.selfContain ? t.getWrapperElement().appendChild(n) : document.body.appendChild(n); - function i(o) { - if (!n.parentNode) return l.off(document, "mousemove", i); - n.style.top = Math.max(0, o.clientY - n.offsetHeight - 5) + "px", n.style.left = o.clientX + 5 + "px"; - } - return s(i, "position"), l.on(document, "mousemove", i), i(e), n.style.opacity != null && (n.style.opacity = 1), n; - } - s(c, "showTooltip"); - function L(t) { - t.parentNode && t.parentNode.removeChild(t); - } - s(L, "rm"); - function A(t) { - t.parentNode && (t.style.opacity == null && L(t), t.style.opacity = 0, setTimeout(function () { - L(t); - }, 600)); - } - s(A, "hideTooltip"); - function M(t, e, r, n) { - var i = c(t, e, r); - function o() { - l.off(n, "mouseout", o), i && (A(i), i = null); - } - s(o, "hide"); - var a = setInterval(function () { - if (i) for (var f = n;; f = f.parentNode) { - if (f && f.nodeType == 11 && (f = f.host), f == document.body) return; - if (!f) { - o(); - break; - } - } - if (!i) return clearInterval(a); - }, 400); - l.on(n, "mouseout", o); - } - s(M, "showTooltipFor"); - function F(t, e, r) { - this.marked = [], e instanceof Function && (e = { - getAnnotations: e - }), (!e || e === !0) && (e = {}), this.options = {}, this.linterOptions = e.options || {}; - for (var n in C) this.options[n] = C[n]; - for (var n in e) C.hasOwnProperty(n) ? e[n] != null && (this.options[n] = e[n]) : e.options || (this.linterOptions[n] = e[n]); - this.timeout = null, this.hasGutter = r, this.onMouseOver = function (i) { - U(t, i); - }, this.waitingFor = 0; - } - s(F, "LintState"); - var C = { - highlightLines: !1, - tooltips: !0, - delay: 500, - lintOnChange: !0, - getAnnotations: null, - async: !1, - selfContain: null, - formatAnnotation: null, - onUpdateLinting: null - }; - function E(t) { - var e = t.state.lint; - e.hasGutter && t.clearGutter(u), e.options.highlightLines && G(t); - for (var r = 0; r < e.marked.length; ++r) e.marked[r].clear(); - e.marked.length = 0; - } - s(E, "clearMarks"); - function G(t) { - t.eachLine(function (e) { - var r = e.wrapClass && /\bCodeMirror-lint-line-\w+\b/.exec(e.wrapClass); - r && t.removeLineClass(e, "wrap", r[0]); - }); - } - s(G, "clearErrorLines"); - function I(t, e, r, n, i) { - var o = document.createElement("div"), - a = o; - return o.className = "CodeMirror-lint-marker CodeMirror-lint-marker-" + r, n && (a = o.appendChild(document.createElement("div")), a.className = "CodeMirror-lint-marker CodeMirror-lint-marker-multiple"), i != !1 && l.on(a, "mouseover", function (f) { - M(t, f, e, a); - }), o; - } - s(I, "makeMarker"); - function D(t, e) { - return t == "error" ? t : e; - } - s(D, "getMaxSeverity"); - function j(t) { - for (var e = [], r = 0; r < t.length; ++r) { - var n = t[r], - i = n.from.line; - (e[i] || (e[i] = [])).push(n); - } - return e; - } - s(j, "groupByLine"); - function N(t) { - var e = t.severity; - e || (e = "error"); - var r = document.createElement("div"); - return r.className = "CodeMirror-lint-message CodeMirror-lint-message-" + e, typeof t.messageHTML < "u" ? r.innerHTML = t.messageHTML : r.appendChild(document.createTextNode(t.message)), r; - } - s(N, "annotationTooltip"); - function H(t, e) { - var r = t.state.lint, - n = ++r.waitingFor; - function i() { - n = -1, t.off("change", i); - } - s(i, "abort"), t.on("change", i), e(t.getValue(), function (o, a) { - t.off("change", i), r.waitingFor == n && (a && o instanceof l && (o = a), t.operation(function () { - O(t, o); - })); - }, r.linterOptions, t); - } - s(H, "lintAsync"); - function k(t) { - var e = t.state.lint; - if (e) { - var r = e.options, - n = r.getAnnotations || t.getHelper(l.Pos(0, 0), "lint"); - if (n) if (r.async || n.async) H(t, n);else { - var i = n(t.getValue(), e.linterOptions, t); - if (!i) return; - i.then ? i.then(function (o) { - t.operation(function () { - O(t, o); - }); - }) : t.operation(function () { - O(t, i); - }); - } - } - } - s(k, "startLinting"); - function O(t, e) { - var r = t.state.lint; - if (r) { - var n = r.options; - E(t); - for (var i = j(e), o = 0; o < i.length; ++o) { - var a = i[o]; - if (a) { - var f = []; - a = a.filter(function (w) { - return f.indexOf(w.message) > -1 ? !1 : f.push(w.message); - }); - for (var p = null, m = r.hasGutter && document.createDocumentFragment(), T = 0; T < a.length; ++T) { - var d = a[T], - y = d.severity; - y || (y = "error"), p = D(p, y), n.formatAnnotation && (d = n.formatAnnotation(d)), r.hasGutter && m.appendChild(N(d)), d.to && r.marked.push(t.markText(d.from, d.to, { - className: "CodeMirror-lint-mark CodeMirror-lint-mark-" + y, - __annotation: d - })); - } - r.hasGutter && t.setGutterMarker(o, u, I(t, m, p, i[o].length > 1, n.tooltips)), n.highlightLines && t.addLineClass(o, "wrap", g + p); - } - } - n.onUpdateLinting && n.onUpdateLinting(e, i, t); - } - } - s(O, "updateLinting"); - function b(t) { - var e = t.state.lint; - e && (clearTimeout(e.timeout), e.timeout = setTimeout(function () { - k(t); - }, e.options.delay)); - } - s(b, "onChange"); - function P(t, e, r) { - for (var n = r.target || r.srcElement, i = document.createDocumentFragment(), o = 0; o < e.length; o++) { - var a = e[o]; - i.appendChild(N(a)); - } - M(t, r, i, n); - } - s(P, "popupTooltips"); - function U(t, e) { - var r = e.target || e.srcElement; - if (/\bCodeMirror-lint-mark-/.test(r.className)) { - for (var n = r.getBoundingClientRect(), i = (n.left + n.right) / 2, o = (n.top + n.bottom) / 2, a = t.findMarksAt(t.coordsChar({ - left: i, - top: o - }, "client")), f = [], p = 0; p < a.length; ++p) { - var m = a[p].__annotation; - m && f.push(m); - } - f.length && P(t, f, e); - } - } - s(U, "onMouseOver"), l.defineOption("lint", !1, function (t, e, r) { - if (r && r != l.Init && (E(t), t.state.lint.options.lintOnChange !== !1 && t.off("change", b), l.off(t.getWrapperElement(), "mouseover", t.state.lint.onMouseOver), clearTimeout(t.state.lint.timeout), delete t.state.lint), e) { - for (var n = t.getOption("gutters"), i = !1, o = 0; o < n.length; ++o) n[o] == u && (i = !0); - var a = t.state.lint = new F(t, e, i); - a.options.lintOnChange && t.on("change", b), a.options.tooltips != !1 && a.options.tooltips != "gutter" && l.on(t.getWrapperElement(), "mouseover", a.onMouseOver), k(t); - } - }), l.defineExtension("performLint", function () { - k(this); - }); - }); -})(); -var _ = B.exports; -const R = x.getDefaultExportFromCjs(_), - V = q({ - __proto__: null, - default: R - }, [_]); -exports.lint = V; - -/***/ }), - -/***/ "../../graphiql-react/dist/lint.cjs2.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/lint.cjs2.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const t = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"), - c = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -__webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const a = ["error", "warning", "information", "hint"], - g = { - "GraphQL: Validation": "validation", - "GraphQL: Deprecation": "deprecation", - "GraphQL: Syntax": "syntax" - }; -t.CodeMirror.registerHelper("lint", "graphql", (n, s) => { - const { - schema: r, - validationRules: i, - externalFragments: o - } = s; - return c.getDiagnostics(n, r, i, void 0, o).map(e => ({ - message: e.message, - severity: e.severity ? a[e.severity - 1] : a[0], - type: e.source ? g[e.source] : void 0, - from: t.CodeMirror.Pos(e.range.start.line, e.range.start.character), - to: t.CodeMirror.Pos(e.range.end.line, e.range.end.character) - })); -}); - -/***/ }), - -/***/ "../../graphiql-react/dist/lint.cjs3.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/lint.cjs3.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -var V = Object.defineProperty; -var t = (e, n) => V(e, "name", { - value: n, - configurable: !0 -}); -const I = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"), - b = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -__webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function C(e) { - d = e, E = e.length, s = u = N = -1, o(), y(); - const n = q(); - return p("EOF"), n; -} -t(C, "jsonParse"); -let d, E, s, u, N, r, l; -function q() { - const e = s, - n = []; - if (p("{"), !x("}")) { - do n.push(M()); while (x(",")); - p("}"); - } - return { - kind: "Object", - start: e, - end: N, - members: n - }; -} -t(q, "parseObj"); -function M() { - const e = s, - n = l === "String" ? G() : null; - p("String"), p(":"); - const i = B(); - return { - kind: "Member", - start: e, - end: N, - key: n, - value: i - }; -} -t(M, "parseMember"); -function v() { - const e = s, - n = []; - if (p("["), !x("]")) { - do n.push(B()); while (x(",")); - p("]"); - } - return { - kind: "Array", - start: e, - end: N, - values: n - }; -} -t(v, "parseArr"); -function B() { - switch (l) { - case "[": - return v(); - case "{": - return q(); - case "String": - case "Number": - case "Boolean": - case "Null": - const e = G(); - return y(), e; - } - p("Value"); -} -t(B, "parseVal"); -function G() { - return { - kind: l, - start: s, - end: u, - value: JSON.parse(d.slice(s, u)) - }; -} -t(G, "curToken"); -function p(e) { - if (l === e) { - y(); - return; - } - let n; - if (l === "EOF") n = "[end of file]";else if (u - s > 1) n = "`" + d.slice(s, u) + "`";else { - const i = d.slice(s).match(/^.+?\b/); - n = "`" + (i ? i[0] : d[s]) + "`"; - } - throw k(`Expected ${e} but found ${n}.`); -} -t(p, "expect"); -class j extends Error { - constructor(n, i) { - super(n), this.position = i; - } -} -t(j, "JSONSyntaxError"); -function k(e) { - return new j(e, { - start: s, - end: u - }); -} -t(k, "syntaxError"); -function x(e) { - if (l === e) return y(), !0; -} -t(x, "skip"); -function o() { - return u < E && (u++, r = u === E ? 0 : d.charCodeAt(u)), r; -} -t(o, "ch"); -function y() { - for (N = u; r === 9 || r === 10 || r === 13 || r === 32;) o(); - if (r === 0) { - l = "EOF"; - return; - } - switch (s = u, r) { - case 34: - return l = "String", D(); - case 45: - case 48: - case 49: - case 50: - case 51: - case 52: - case 53: - case 54: - case 55: - case 56: - case 57: - return l = "Number", H(); - case 102: - if (d.slice(s, s + 5) !== "false") break; - u += 4, o(), l = "Boolean"; - return; - case 110: - if (d.slice(s, s + 4) !== "null") break; - u += 3, o(), l = "Null"; - return; - case 116: - if (d.slice(s, s + 4) !== "true") break; - u += 3, o(), l = "Boolean"; - return; - } - l = d[s], o(); -} -t(y, "lex"); -function D() { - for (o(); r !== 34 && r > 31;) if (r === 92) switch (r = o(), r) { - case 34: - case 47: - case 92: - case 98: - case 102: - case 110: - case 114: - case 116: - o(); - break; - case 117: - o(), w(), w(), w(), w(); - break; - default: - throw k("Bad character escape sequence."); - } else { - if (u === E) throw k("Unterminated string."); - o(); - } - if (r === 34) { - o(); - return; - } - throw k("Unterminated string."); -} -t(D, "readString"); -function w() { - if (r >= 48 && r <= 57 || r >= 65 && r <= 70 || r >= 97 && r <= 102) return o(); - throw k("Expected hexadecimal digit."); -} -t(w, "readHex"); -function H() { - r === 45 && o(), r === 48 ? o() : $(), r === 46 && (o(), $()), (r === 69 || r === 101) && (r = o(), (r === 43 || r === 45) && o(), $()); -} -t(H, "readNumber"); -function $() { - if (r < 48 || r > 57) throw k("Expected decimal digit."); - do o(); while (r >= 48 && r <= 57); -} -t($, "readDigits"); -I.CodeMirror.registerHelper("lint", "graphql-variables", (e, n, i) => { - if (!e) return []; - let f; - try { - f = C(e); - } catch (c) { - if (c instanceof j) return [F(i, c.position, c.message)]; - throw c; - } - const { - variableToType: a - } = n; - return a ? U(i, a, f) : []; -}); -function U(e, n, i) { - var f; - const a = []; - for (const c of i.members) if (c) { - const h = (f = c.key) === null || f === void 0 ? void 0 : f.value, - m = n[h]; - if (m) for (const [O, Q] of g(m, c.value)) a.push(F(e, O, Q));else a.push(F(e, c.key, `Variable "$${h}" does not appear in any GraphQL query.`)); - } - return a; -} -t(U, "validateVariables"); -function g(e, n) { - if (!e || !n) return []; - if (e instanceof b.GraphQLNonNull) return n.kind === "Null" ? [[n, `Type "${e}" is non-nullable and cannot be null.`]] : g(e.ofType, n); - if (n.kind === "Null") return []; - if (e instanceof b.GraphQLList) { - const i = e.ofType; - if (n.kind === "Array") { - const f = n.values || []; - return L(f, a => g(i, a)); - } - return g(i, n); - } - if (e instanceof b.GraphQLInputObjectType) { - if (n.kind !== "Object") return [[n, `Type "${e}" must be an Object.`]]; - const i = Object.create(null), - f = L(n.members, a => { - var c; - const h = (c = a == null ? void 0 : a.key) === null || c === void 0 ? void 0 : c.value; - i[h] = !0; - const m = e.getFields()[h]; - if (!m) return [[a.key, `Type "${e}" does not have a field "${h}".`]]; - const O = m ? m.type : void 0; - return g(O, a.value); - }); - for (const a of Object.keys(e.getFields())) { - const c = e.getFields()[a]; - !i[a] && c.type instanceof b.GraphQLNonNull && !c.defaultValue && f.push([n, `Object of type "${e}" is missing required field "${a}".`]); - } - return f; - } - return e.name === "Boolean" && n.kind !== "Boolean" || e.name === "String" && n.kind !== "String" || e.name === "ID" && n.kind !== "Number" && n.kind !== "String" || e.name === "Float" && n.kind !== "Number" || e.name === "Int" && (n.kind !== "Number" || (n.value | 0) !== n.value) ? [[n, `Expected value of type "${e}".`]] : (e instanceof b.GraphQLEnumType || e instanceof b.GraphQLScalarType) && (n.kind !== "String" && n.kind !== "Number" && n.kind !== "Boolean" && n.kind !== "Null" || _(e.parseValue(n.value))) ? [[n, `Expected value of type "${e}".`]] : []; -} -t(g, "validateValue"); -function F(e, n, i) { - return { - message: i, - severity: "error", - type: "validation", - from: e.posFromIndex(n.start), - to: e.posFromIndex(n.end) - }; -} -t(F, "lintError"); -function _(e) { - return e == null || e !== e; -} -t(_, "isNullish"); -function L(e, n) { - return Array.prototype.concat.apply([], e.map(n)); -} -t(L, "mapCat"); - -/***/ }), - -/***/ "../../graphiql-react/dist/matchbrackets.cjs.js": -/*!******************************************************!*\ - !*** ../../graphiql-react/dist/matchbrackets.cjs.js ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var i = Object.defineProperty; -var s = (e, c) => i(e, "name", { - value: c, - configurable: !0 -}); -const u = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"), - f = __webpack_require__(/*! ./matchbrackets.cjs2.js */ "../../graphiql-react/dist/matchbrackets.cjs2.js"); -function b(e, c) { - for (var o = 0; o < c.length; o++) { - const t = c[o]; - if (typeof t != "string" && !Array.isArray(t)) { - for (const r in t) if (r !== "default" && !(r in e)) { - const a = Object.getOwnPropertyDescriptor(t, r); - a && Object.defineProperty(e, r, a.get ? a : { - enumerable: !0, - get: () => t[r] - }); - } - } - } - return Object.freeze(Object.defineProperty(e, Symbol.toStringTag, { - value: "Module" - })); -} -s(b, "_mergeNamespaces"); -var n = f.requireMatchbrackets(); -const l = u.getDefaultExportFromCjs(n), - m = b({ - __proto__: null, - default: l - }, [n]); -exports.matchbrackets = m; - -/***/ }), - -/***/ "../../graphiql-react/dist/matchbrackets.cjs2.js": -/*!*******************************************************!*\ - !*** ../../graphiql-react/dist/matchbrackets.cjs2.js ***! - \*******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var R = Object.defineProperty; -var f = (L, y) => R(L, "name", { - value: y, - configurable: !0 -}); -const F = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -var T = { - exports: {} - }, - E; -function I() { - return E || (E = 1, function (L, y) { - (function (o) { - o(F.requireCodemirror()); - })(function (o) { - var S = /MSIE \d/.test(navigator.userAgent) && (document.documentMode == null || document.documentMode < 8), - g = o.Pos, - B = { - "(": ")>", - ")": "(<", - "[": "]>", - "]": "[<", - "{": "}>", - "}": "{<", - "<": ">>", - ">": "<<" - }; - function A(t) { - return t && t.bracketRegex || /[(){}[\]]/; - } - f(A, "bracketRegex"); - function b(t, r, e) { - var s = t.getLineHandle(r.line), - n = r.ch - 1, - h = e && e.afterCursor; - h == null && (h = /(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className)); - var l = A(e), - u = !h && n >= 0 && l.test(s.text.charAt(n)) && B[s.text.charAt(n)] || l.test(s.text.charAt(n + 1)) && B[s.text.charAt(++n)]; - if (!u) return null; - var a = u.charAt(1) == ">" ? 1 : -1; - if (e && e.strict && a > 0 != (n == r.ch)) return null; - var k = t.getTokenTypeAt(g(r.line, n + 1)), - i = H(t, g(r.line, n + (a > 0 ? 1 : 0)), a, k, e); - return i == null ? null : { - from: g(r.line, n), - to: i && i.pos, - match: i && i.ch == u.charAt(0), - forward: a > 0 - }; - } - f(b, "findMatchingBracket"); - function H(t, r, e, s, n) { - for (var h = n && n.maxScanLineLength || 1e4, l = n && n.maxScanLines || 1e3, u = [], a = A(n), k = e > 0 ? Math.min(r.line + l, t.lastLine() + 1) : Math.max(t.firstLine() - 1, r.line - l), i = r.line; i != k; i += e) { - var c = t.getLine(i); - if (c) { - var v = e > 0 ? 0 : c.length - 1, - q = e > 0 ? c.length : -1; - if (!(c.length > h)) for (i == r.line && (v = r.ch - (e < 0 ? 1 : 0)); v != q; v += e) { - var d = c.charAt(v); - if (a.test(d) && (s === void 0 || (t.getTokenTypeAt(g(i, v + 1)) || "") == (s || ""))) { - var m = B[d]; - if (m && m.charAt(1) == ">" == e > 0) u.push(d);else if (u.length) u.pop();else return { - pos: g(i, v), - ch: d - }; - } - } - } - } - return i - e == (e > 0 ? t.lastLine() : t.firstLine()) ? !1 : null; - } - f(H, "scanForBracket"); - function M(t, r, e) { - for (var s = t.state.matchBrackets.maxHighlightLineLength || 1e3, n = e && e.highlightNonMatching, h = [], l = t.listSelections(), u = 0; u < l.length; u++) { - var a = l[u].empty() && b(t, l[u].head, e); - if (a && (a.match || n !== !1) && t.getLine(a.from.line).length <= s) { - var k = a.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; - h.push(t.markText(a.from, g(a.from.line, a.from.ch + 1), { - className: k - })), a.to && t.getLine(a.to.line).length <= s && h.push(t.markText(a.to, g(a.to.line, a.to.ch + 1), { - className: k - })); - } - } - if (h.length) { - S && t.state.focused && t.focus(); - var i = f(function () { - t.operation(function () { - for (var c = 0; c < h.length; c++) h[c].clear(); - }); - }, "clear"); - if (r) setTimeout(i, 800);else return i; - } - } - f(M, "matchBrackets"); - function x(t) { - t.operation(function () { - t.state.matchBrackets.currentlyHighlighted && (t.state.matchBrackets.currentlyHighlighted(), t.state.matchBrackets.currentlyHighlighted = null), t.state.matchBrackets.currentlyHighlighted = M(t, !1, t.state.matchBrackets); - }); - } - f(x, "doMatchBrackets"); - function p(t) { - t.state.matchBrackets && t.state.matchBrackets.currentlyHighlighted && (t.state.matchBrackets.currentlyHighlighted(), t.state.matchBrackets.currentlyHighlighted = null); - } - f(p, "clearHighlighted"), o.defineOption("matchBrackets", !1, function (t, r, e) { - e && e != o.Init && (t.off("cursorActivity", x), t.off("focus", x), t.off("blur", p), p(t)), r && (t.state.matchBrackets = typeof r == "object" ? r : {}, t.on("cursorActivity", x), t.on("focus", x), t.on("blur", p)); - }), o.defineExtension("matchBrackets", function () { - M(this, !0); - }), o.defineExtension("findMatchingBracket", function (t, r, e) { - return (e || typeof r == "boolean") && (e ? (e.strict = r, r = e) : r = r ? { - strict: !0 - } : null), b(this, t, r); - }), o.defineExtension("scanForBracket", function (t, r, e, s) { - return H(this, t, r, e, s); - }); - }); - }()), T.exports; -} -f(I, "requireMatchbrackets"); -exports.requireMatchbrackets = I; - -/***/ }), - -/***/ "../../graphiql-react/dist/mode-indent.cjs.js": -/*!****************************************************!*\ - !*** ../../graphiql-react/dist/mode-indent.cjs.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -var o = Object.defineProperty; -var v = (n, t) => o(n, "name", { - value: t, - configurable: !0 -}); -function s(n, t) { - var e, i; - const { - levels: l, - indentLevel: d - } = n; - return ((!l || l.length === 0 ? d : l.at(-1) - (!((e = this.electricInput) === null || e === void 0) && e.test(t) ? 1 : 0)) || 0) * (((i = this.config) === null || i === void 0 ? void 0 : i.indentUnit) || 0); -} -v(s, "indent"); -exports.indent = s; - -/***/ }), - -/***/ "../../graphiql-react/dist/mode.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/mode.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -var n = Object.defineProperty; -var s = (e, r) => n(e, "name", { - value: r, - configurable: !0 -}); -const o = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"), - t = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"), - i = __webpack_require__(/*! ./mode-indent.cjs.js */ "../../graphiql-react/dist/mode-indent.cjs.js"); -__webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const l = s(e => { - const r = t.onlineParser({ - eatWhitespace: a => a.eatWhile(t.isIgnored), - lexRules: t.LexRules, - parseRules: t.ParseRules, - editorConfig: { - tabSize: e.tabSize - } - }); - return { - config: e, - startState: r.startState, - token: r.token, - indent: i.indent, - electricInput: /^\s*[})\]]/, - fold: "brace", - lineComment: "#", - closeBrackets: { - pairs: '()[]{}""', - explode: "()[]{}" - } - }; -}, "graphqlModeFactory"); -o.CodeMirror.defineMode("graphql", l); - -/***/ }), - -/***/ "../../graphiql-react/dist/mode.cjs2.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/mode.cjs2.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -var n = Object.defineProperty; -var u = (t, r) => n(t, "name", { - value: r, - configurable: !0 -}); -const i = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"), - e = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"), - s = __webpack_require__(/*! ./mode-indent.cjs.js */ "../../graphiql-react/dist/mode-indent.cjs.js"); -__webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -i.CodeMirror.defineMode("graphql-variables", t => { - const r = e.onlineParser({ - eatWhitespace: a => a.eatSpace(), - lexRules: c, - parseRules: o, - editorConfig: { - tabSize: t.tabSize - } - }); - return { - config: t, - startState: r.startState, - token: r.token, - indent: s.indent, - electricInput: /^\s*[}\]]/, - fold: "brace", - closeBrackets: { - pairs: '[]{}""', - explode: "[]{}" - } - }; -}); -const c = { - Punctuation: /^\[|]|\{|\}|:|,/, - Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, - String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, - Keyword: /^true|false|null/ - }, - o = { - Document: [e.p("{"), e.list("Variable", e.opt(e.p(","))), e.p("}")], - Variable: [l("variable"), e.p(":"), "Value"], - Value(t) { - switch (t.kind) { - case "Number": - return "NumberValue"; - case "String": - return "StringValue"; - case "Punctuation": - switch (t.value) { - case "[": - return "ListValue"; - case "{": - return "ObjectValue"; - } - return null; - case "Keyword": - switch (t.value) { - case "true": - case "false": - return "BooleanValue"; - case "null": - return "NullValue"; - } - return null; - } - }, - NumberValue: [e.t("Number", "number")], - StringValue: [e.t("String", "string")], - BooleanValue: [e.t("Keyword", "builtin")], - NullValue: [e.t("Keyword", "keyword")], - ListValue: [e.p("["), e.list("Value", e.opt(e.p(","))), e.p("]")], - ObjectValue: [e.p("{"), e.list("ObjectField", e.opt(e.p(","))), e.p("}")], - ObjectField: [l("attribute"), e.p(":"), "Value"] - }; -function l(t) { - return { - style: t, - match: r => r.kind === "String", - update(r, a) { - r.name = a.value.slice(1, -1); - } - }; -} -u(l, "namedKey"); - -/***/ }), - -/***/ "../../graphiql-react/dist/mode.cjs3.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/mode.cjs3.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const a = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"), - e = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"), - l = __webpack_require__(/*! ./mode-indent.cjs.js */ "../../graphiql-react/dist/mode-indent.cjs.js"); -__webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -a.CodeMirror.defineMode("graphql-results", r => { - const t = e.onlineParser({ - eatWhitespace: u => u.eatSpace(), - lexRules: n, - parseRules: s, - editorConfig: { - tabSize: r.tabSize - } - }); - return { - config: r, - startState: t.startState, - token: t.token, - indent: l.indent, - electricInput: /^\s*[}\]]/, - fold: "brace", - closeBrackets: { - pairs: '[]{}""', - explode: "[]{}" - } - }; -}); -const n = { - Punctuation: /^\[|]|\{|\}|:|,/, - Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, - String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, - Keyword: /^true|false|null/ - }, - s = { - Document: [e.p("{"), e.list("Entry", e.p(",")), e.p("}")], - Entry: [e.t("String", "def"), e.p(":"), "Value"], - Value(r) { - switch (r.kind) { - case "Number": - return "NumberValue"; - case "String": - return "StringValue"; - case "Punctuation": - switch (r.value) { - case "[": - return "ListValue"; - case "{": - return "ObjectValue"; - } - return null; - case "Keyword": - switch (r.value) { - case "true": - case "false": - return "BooleanValue"; - case "null": - return "NullValue"; - } - return null; - } - }, - NumberValue: [e.t("Number", "number")], - StringValue: [e.t("String", "string")], - BooleanValue: [e.t("Keyword", "builtin")], - NullValue: [e.t("Keyword", "keyword")], - ListValue: [e.p("["), e.list("Value", e.p(",")), e.p("]")], - ObjectValue: [e.p("{"), e.list("ObjectField", e.p(",")), e.p("}")], - ObjectField: [e.t("String", "property"), e.p(":"), "Value"] - }; - -/***/ }), - -/***/ "../../graphiql-react/dist/search.cjs.js": -/*!***********************************************!*\ - !*** ../../graphiql-react/dist/search.cjs.js ***! - \***********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var K = Object.defineProperty; -var a = (S, O) => K(S, "name", { - value: O, - configurable: !0 -}); -const Q = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"), - L = __webpack_require__(/*! ./searchcursor.cjs2.js */ "../../graphiql-react/dist/searchcursor.cjs2.js"), - z = __webpack_require__(/*! ./dialog.cjs2.js */ "../../graphiql-react/dist/dialog.cjs2.js"); -function U(S, O) { - for (var i = 0; i < O.length; i++) { - const y = O[i]; - if (typeof y != "string" && !Array.isArray(y)) { - for (const v in y) if (v !== "default" && !(v in S)) { - const h = Object.getOwnPropertyDescriptor(y, v); - h && Object.defineProperty(S, v, h.get ? h : { - enumerable: !0, - get: () => y[v] - }); - } - } - } - return Object.freeze(Object.defineProperty(S, Symbol.toStringTag, { - value: "Module" - })); -} -a(U, "_mergeNamespaces"); -var B = { - exports: {} -}; -(function (S, O) { - (function (i) { - i(Q.requireCodemirror(), L.requireSearchcursor(), z.requireDialog()); - })(function (i) { - i.defineOption("search", { - bottom: !1 - }); - function y(e, n) { - return typeof e == "string" ? e = new RegExp(e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), n ? "gi" : "g") : e.global || (e = new RegExp(e.source, e.ignoreCase ? "gi" : "g")), { - token: function (t) { - e.lastIndex = t.pos; - var o = e.exec(t.string); - if (o && o.index == t.pos) return t.pos += o[0].length || 1, "searching"; - o ? t.pos = o.index : t.skipToEnd(); - } - }; - } - a(y, "searchOverlay"); - function v() { - this.posFrom = this.posTo = this.lastQuery = this.query = null, this.overlay = null; - } - a(v, "SearchState"); - function h(e) { - return e.state.search || (e.state.search = new v()); - } - a(h, "getSearchState"); - function m(e) { - return typeof e == "string" && e == e.toLowerCase(); - } - a(m, "queryCaseInsensitive"); - function N(e, n, t) { - return e.getSearchCursor(n, t, { - caseFold: m(n), - multiline: !0 - }); - } - a(N, "getSearchCursor"); - function j(e, n, t, o, r) { - e.openDialog(n, o, { - value: t, - selectValueOnOpen: !0, - closeOnEnter: !1, - onClose: function () { - w(e); - }, - onKeyDown: r, - bottom: e.options.search.bottom - }); - } - a(j, "persistentDialog"); - function R(e, n, t, o, r) { - e.openDialog ? e.openDialog(n, r, { - value: o, - selectValueOnOpen: !0, - bottom: e.options.search.bottom - }) : r(prompt(t, o)); - } - a(R, "dialog"); - function k(e, n, t, o) { - e.openConfirm ? e.openConfirm(n, o) : confirm(t) && o[0](); - } - a(k, "confirmDialog"); - function C(e) { - return e.replace(/\\([nrt\\])/g, function (n, t) { - return t == "n" ? ` -` : t == "r" ? "\r" : t == "t" ? " " : t == "\\" ? "\\" : n; - }); - } - a(C, "parseString"); - function T(e) { - var n = e.match(/^\/(.*)\/([a-z]*)$/); - if (n) try { - e = new RegExp(n[1], n[2].indexOf("i") == -1 ? "" : "i"); - } catch {} else e = C(e); - return (typeof e == "string" ? e == "" : e.test("")) && (e = /x^/), e; - } - a(T, "parseQuery"); - function D(e, n, t) { - n.queryText = t, n.query = T(t), e.removeOverlay(n.overlay, m(n.query)), n.overlay = y(n.query, m(n.query)), e.addOverlay(n.overlay), e.showMatchesOnScrollbar && (n.annotate && (n.annotate.clear(), n.annotate = null), n.annotate = e.showMatchesOnScrollbar(n.query, m(n.query))); - } - a(D, "startSearch"); - function b(e, n, t, o) { - var r = h(e); - if (r.query) return P(e, n); - var s = e.getSelection() || r.lastQuery; - if (s instanceof RegExp && s.source == "x^" && (s = null), t && e.openDialog) { - var c = null, - u = a(function (f, x) { - i.e_stop(x), f && (f != r.queryText && (D(e, r, f), r.posFrom = r.posTo = e.getCursor()), c && (c.style.opacity = 1), P(e, x.shiftKey, function (d, g) { - var p; - g.line < 3 && document.querySelector && (p = e.display.wrapper.querySelector(".CodeMirror-dialog")) && p.getBoundingClientRect().bottom - 4 > e.cursorCoords(g, "window").top && ((c = p).style.opacity = .4); - })); - }, "searchNext"); - j(e, _(e), s, u, function (f, x) { - var d = i.keyName(f), - g = e.getOption("extraKeys"), - p = g && g[d] || i.keyMap[e.getOption("keyMap")][d]; - p == "findNext" || p == "findPrev" || p == "findPersistentNext" || p == "findPersistentPrev" ? (i.e_stop(f), D(e, h(e), x), e.execCommand(p)) : (p == "find" || p == "findPersistent") && (i.e_stop(f), u(x, f)); - }), o && s && (D(e, r, s), P(e, n)); - } else R(e, _(e), "Search for:", s, function (f) { - f && !r.query && e.operation(function () { - D(e, r, f), r.posFrom = r.posTo = e.getCursor(), P(e, n); - }); - }); - } - a(b, "doSearch"); - function P(e, n, t) { - e.operation(function () { - var o = h(e), - r = N(e, o.query, n ? o.posFrom : o.posTo); - !r.find(n) && (r = N(e, o.query, n ? i.Pos(e.lastLine()) : i.Pos(e.firstLine(), 0)), !r.find(n)) || (e.setSelection(r.from(), r.to()), e.scrollIntoView({ - from: r.from(), - to: r.to() - }, 20), o.posFrom = r.from(), o.posTo = r.to(), t && t(r.from(), r.to())); - }); - } - a(P, "findNext"); - function w(e) { - e.operation(function () { - var n = h(e); - n.lastQuery = n.query, n.query && (n.query = n.queryText = null, e.removeOverlay(n.overlay), n.annotate && (n.annotate.clear(), n.annotate = null)); - }); - } - a(w, "clearSearch"); - function l(e, n) { - var t = e ? document.createElement(e) : document.createDocumentFragment(); - for (var o in n) t[o] = n[o]; - for (var r = 2; r < arguments.length; r++) { - var s = arguments[r]; - t.appendChild(typeof s == "string" ? document.createTextNode(s) : s); - } - return t; - } - a(l, "el"); - function _(e) { - return l("", null, l("span", { - className: "CodeMirror-search-label" - }, e.phrase("Search:")), " ", l("input", { - type: "text", - style: "width: 10em", - className: "CodeMirror-search-field" - }), " ", l("span", { - style: "color: #888", - className: "CodeMirror-search-hint" - }, e.phrase("(Use /re/ syntax for regexp search)"))); - } - a(_, "getQueryDialog"); - function A(e) { - return l("", null, " ", l("input", { - type: "text", - style: "width: 10em", - className: "CodeMirror-search-field" - }), " ", l("span", { - style: "color: #888", - className: "CodeMirror-search-hint" - }, e.phrase("(Use /re/ syntax for regexp search)"))); - } - a(A, "getReplaceQueryDialog"); - function I(e) { - return l("", null, l("span", { - className: "CodeMirror-search-label" - }, e.phrase("With:")), " ", l("input", { - type: "text", - style: "width: 10em", - className: "CodeMirror-search-field" - })); - } - a(I, "getReplacementQueryDialog"); - function V(e) { - return l("", null, l("span", { - className: "CodeMirror-search-label" - }, e.phrase("Replace?")), " ", l("button", {}, e.phrase("Yes")), " ", l("button", {}, e.phrase("No")), " ", l("button", {}, e.phrase("All")), " ", l("button", {}, e.phrase("Stop"))); - } - a(V, "getDoReplaceConfirm"); - function E(e, n, t) { - e.operation(function () { - for (var o = N(e, n); o.findNext();) if (typeof n != "string") { - var r = e.getRange(o.from(), o.to()).match(n); - o.replace(t.replace(/\$(\d)/g, function (s, c) { - return r[c]; - })); - } else o.replace(t); - }); - } - a(E, "replaceAll"); - function F(e, n) { - if (!e.getOption("readOnly")) { - var t = e.getSelection() || h(e).lastQuery, - o = n ? e.phrase("Replace all:") : e.phrase("Replace:"), - r = l("", null, l("span", { - className: "CodeMirror-search-label" - }, o), A(e)); - R(e, r, o, t, function (s) { - s && (s = T(s), R(e, I(e), e.phrase("Replace with:"), "", function (c) { - if (c = C(c), n) E(e, s, c);else { - w(e); - var u = N(e, s, e.getCursor("from")), - f = a(function () { - var d = u.from(), - g; - !(g = u.findNext()) && (u = N(e, s), !(g = u.findNext()) || d && u.from().line == d.line && u.from().ch == d.ch) || (e.setSelection(u.from(), u.to()), e.scrollIntoView({ - from: u.from(), - to: u.to() - }), k(e, V(e), e.phrase("Replace?"), [function () { - x(g); - }, f, function () { - E(e, s, c); - }])); - }, "advance"), - x = a(function (d) { - u.replace(typeof s == "string" ? c : c.replace(/\$(\d)/g, function (g, p) { - return d[p]; - })), f(); - }, "doReplace"); - f(); - } - })); - }); - } - } - a(F, "replace"), i.commands.find = function (e) { - w(e), b(e); - }, i.commands.findPersistent = function (e) { - w(e), b(e, !1, !0); - }, i.commands.findPersistentNext = function (e) { - b(e, !1, !0, !0); - }, i.commands.findPersistentPrev = function (e) { - b(e, !0, !0, !0); - }, i.commands.findNext = b, i.commands.findPrev = function (e) { - b(e, !0); - }, i.commands.clearSearch = w, i.commands.replace = F, i.commands.replaceAll = function (e) { - F(e, !0); - }; - }); -})(); -var $ = B.exports; -const W = Q.getDefaultExportFromCjs($), - Y = U({ - __proto__: null, - default: W - }, [$]); -exports.search = Y; - -/***/ }), - -/***/ "../../graphiql-react/dist/searchcursor.cjs.js": -/*!*****************************************************!*\ - !*** ../../graphiql-react/dist/searchcursor.cjs.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var n = Object.defineProperty; -var u = (r, o) => n(r, "name", { - value: o, - configurable: !0 -}); -const i = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"), - f = __webpack_require__(/*! ./searchcursor.cjs2.js */ "../../graphiql-react/dist/searchcursor.cjs2.js"); -function l(r, o) { - for (var c = 0; c < o.length; c++) { - const e = o[c]; - if (typeof e != "string" && !Array.isArray(e)) { - for (const t in e) if (t !== "default" && !(t in r)) { - const s = Object.getOwnPropertyDescriptor(e, t); - s && Object.defineProperty(r, t, s.get ? s : { - enumerable: !0, - get: () => e[t] - }); - } - } - } - return Object.freeze(Object.defineProperty(r, Symbol.toStringTag, { - value: "Module" - })); -} -u(l, "_mergeNamespaces"); -var a = f.requireSearchcursor(); -const g = i.getDefaultExportFromCjs(a), - p = l({ - __proto__: null, - default: g - }, [a]); -exports.searchcursor = p; - -/***/ }), - -/***/ "../../graphiql-react/dist/searchcursor.cjs2.js": -/*!******************************************************!*\ - !*** ../../graphiql-react/dist/searchcursor.cjs2.js ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var W = Object.defineProperty; -var o = (d, E) => W(d, "name", { - value: E, - configurable: !0 -}); -const G = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -var N = { - exports: {} - }, - b; -function H() { - return b || (b = 1, function (d, E) { - (function (m) { - m(G.requireCodemirror()); - })(function (m) { - var a = m.Pos; - function B(e) { - var t = e.flags; - return t !== null && t !== void 0 ? t : (e.ignoreCase ? "i" : "") + (e.global ? "g" : "") + (e.multiline ? "m" : ""); - } - o(B, "regexpFlags"); - function F(e, t) { - for (var n = B(e), r = n, l = 0; l < t.length; l++) r.indexOf(t.charAt(l)) == -1 && (r += t.charAt(l)); - return n == r ? e : new RegExp(e.source, r); - } - o(F, "ensureFlags"); - function R(e) { - return /\\s|\\n|\n|\\W|\\D|\[\^/.test(e.source); - } - o(R, "maybeMultiline"); - function I(e, t, n) { - t = F(t, "g"); - for (var r = n.line, l = n.ch, i = e.lastLine(); r <= i; r++, l = 0) { - t.lastIndex = l; - var h = e.getLine(r), - f = t.exec(h); - if (f) return { - from: a(r, f.index), - to: a(r, f.index + f[0].length), - match: f - }; - } - } - o(I, "searchRegexpForward"); - function j(e, t, n) { - if (!R(t)) return I(e, t, n); - t = F(t, "gm"); - for (var r, l = 1, i = n.line, h = e.lastLine(); i <= h;) { - for (var f = 0; f < l && !(i > h); f++) { - var p = e.getLine(i++); - r = r == null ? p : r + ` -` + p; - } - l = l * 2, t.lastIndex = n.ch; - var u = t.exec(r); - if (u) { - var s = r.slice(0, u.index).split(` -`), - c = u[0].split(` -`), - g = n.line + s.length - 1, - v = s[s.length - 1].length; - return { - from: a(g, v), - to: a(g + c.length - 1, c.length == 1 ? v + c[0].length : c[c.length - 1].length), - match: u - }; - } - } - } - o(j, "searchRegexpForwardMultiline"); - function z(e, t, n) { - for (var r, l = 0; l <= e.length;) { - t.lastIndex = l; - var i = t.exec(e); - if (!i) break; - var h = i.index + i[0].length; - if (h > e.length - n) break; - (!r || h > r.index + r[0].length) && (r = i), l = i.index + 1; - } - return r; - } - o(z, "lastMatchIn"); - function D(e, t, n) { - t = F(t, "g"); - for (var r = n.line, l = n.ch, i = e.firstLine(); r >= i; r--, l = -1) { - var h = e.getLine(r), - f = z(h, t, l < 0 ? 0 : h.length - l); - if (f) return { - from: a(r, f.index), - to: a(r, f.index + f[0].length), - match: f - }; - } - } - o(D, "searchRegexpBackward"); - function A(e, t, n) { - if (!R(t)) return D(e, t, n); - t = F(t, "gm"); - for (var r, l = 1, i = e.getLine(n.line).length - n.ch, h = n.line, f = e.firstLine(); h >= f;) { - for (var p = 0; p < l && h >= f; p++) { - var u = e.getLine(h--); - r = r == null ? u : u + ` -` + r; - } - l *= 2; - var s = z(r, t, i); - if (s) { - var c = r.slice(0, s.index).split(` -`), - g = s[0].split(` -`), - v = h + c.length, - x = c[c.length - 1].length; - return { - from: a(v, x), - to: a(v + g.length - 1, g.length == 1 ? x + g[0].length : g[g.length - 1].length), - match: s - }; - } - } - } - o(A, "searchRegexpBackwardMultiline"); - var P, k; - String.prototype.normalize ? (P = o(function (e) { - return e.normalize("NFD").toLowerCase(); - }, "doFold"), k = o(function (e) { - return e.normalize("NFD"); - }, "noFold")) : (P = o(function (e) { - return e.toLowerCase(); - }, "doFold"), k = o(function (e) { - return e; - }, "noFold")); - function L(e, t, n, r) { - if (e.length == t.length) return n; - for (var l = 0, i = n + Math.max(0, e.length - t.length);;) { - if (l == i) return l; - var h = l + i >> 1, - f = r(e.slice(0, h)).length; - if (f == n) return h; - f > n ? i = h : l = h + 1; - } - } - o(L, "adjustPos"); - function y(e, t, n, r) { - if (!t.length) return null; - var l = r ? P : k, - i = l(t).split(/\r|\n\r?/); - t: for (var h = n.line, f = n.ch, p = e.lastLine() + 1 - i.length; h <= p; h++, f = 0) { - var u = e.getLine(h).slice(f), - s = l(u); - if (i.length == 1) { - var c = s.indexOf(i[0]); - if (c == -1) continue t; - var n = L(u, s, c, l) + f; - return { - from: a(h, L(u, s, c, l) + f), - to: a(h, L(u, s, c + i[0].length, l) + f) - }; - } else { - var g = s.length - i[0].length; - if (s.slice(g) != i[0]) continue t; - for (var v = 1; v < i.length - 1; v++) if (l(e.getLine(h + v)) != i[v]) continue t; - var x = e.getLine(h + i.length - 1), - O = l(x), - S = i[i.length - 1]; - if (O.slice(0, S.length) != S) continue t; - return { - from: a(h, L(u, s, g, l) + f), - to: a(h + i.length - 1, L(x, O, S.length, l)) - }; - } - } - } - o(y, "searchStringForward"); - function C(e, t, n, r) { - if (!t.length) return null; - var l = r ? P : k, - i = l(t).split(/\r|\n\r?/); - t: for (var h = n.line, f = n.ch, p = e.firstLine() - 1 + i.length; h >= p; h--, f = -1) { - var u = e.getLine(h); - f > -1 && (u = u.slice(0, f)); - var s = l(u); - if (i.length == 1) { - var c = s.lastIndexOf(i[0]); - if (c == -1) continue t; - return { - from: a(h, L(u, s, c, l)), - to: a(h, L(u, s, c + i[0].length, l)) - }; - } else { - var g = i[i.length - 1]; - if (s.slice(0, g.length) != g) continue t; - for (var v = 1, n = h - i.length + 1; v < i.length - 1; v++) if (l(e.getLine(n + v)) != i[v]) continue t; - var x = e.getLine(h + 1 - i.length), - O = l(x); - if (O.slice(O.length - i[0].length) != i[0]) continue t; - return { - from: a(h + 1 - i.length, L(x, O, x.length - i[0].length, l)), - to: a(h, L(u, s, g.length, l)) - }; - } - } - } - o(C, "searchStringBackward"); - function w(e, t, n, r) { - this.atOccurrence = !1, this.afterEmptyMatch = !1, this.doc = e, n = n ? e.clipPos(n) : a(0, 0), this.pos = { - from: n, - to: n - }; - var l; - typeof r == "object" ? l = r.caseFold : (l = r, r = null), typeof t == "string" ? (l == null && (l = !1), this.matches = function (i, h) { - return (i ? C : y)(e, t, h, l); - }) : (t = F(t, "gm"), !r || r.multiline !== !1 ? this.matches = function (i, h) { - return (i ? A : j)(e, t, h); - } : this.matches = function (i, h) { - return (i ? D : I)(e, t, h); - }); - } - o(w, "SearchCursor"), w.prototype = { - findNext: function () { - return this.find(!1); - }, - findPrevious: function () { - return this.find(!0); - }, - find: function (e) { - var t = this.doc.clipPos(e ? this.pos.from : this.pos.to); - if (this.afterEmptyMatch && this.atOccurrence && (t = a(t.line, t.ch), e ? (t.ch--, t.ch < 0 && (t.line--, t.ch = (this.doc.getLine(t.line) || "").length)) : (t.ch++, t.ch > (this.doc.getLine(t.line) || "").length && (t.ch = 0, t.line++)), m.cmpPos(t, this.doc.clipPos(t)) != 0)) return this.atOccurrence = !1; - var n = this.matches(e, t); - if (this.afterEmptyMatch = n && m.cmpPos(n.from, n.to) == 0, n) return this.pos = n, this.atOccurrence = !0, this.pos.match || !0; - var r = a(e ? this.doc.firstLine() : this.doc.lastLine() + 1, 0); - return this.pos = { - from: r, - to: r - }, this.atOccurrence = !1; - }, - from: function () { - if (this.atOccurrence) return this.pos.from; - }, - to: function () { - if (this.atOccurrence) return this.pos.to; - }, - replace: function (e, t) { - if (this.atOccurrence) { - var n = m.splitLines(e); - this.doc.replaceRange(n, this.pos.from, this.pos.to, t), this.pos.to = a(this.pos.from.line + n.length - 1, n[n.length - 1].length + (n.length == 1 ? this.pos.from.ch : 0)); - } - } - }, m.defineExtension("getSearchCursor", function (e, t, n) { - return new w(this.doc, e, t, n); - }), m.defineDocExtension("getSearchCursor", function (e, t, n) { - return new w(this, e, t, n); - }), m.defineExtension("selectMatches", function (e, t) { - for (var n = [], r = this.getSearchCursor(e, this.getCursor("from"), t); r.findNext() && !(m.cmpPos(r.to(), this.getCursor("to")) > 0);) n.push({ - anchor: r.from(), - head: r.to() - }); - n.length && this.setSelections(n, 0); - }); - }); - }()), N.exports; -} -o(H, "requireSearchcursor"); -exports.requireSearchcursor = H; - -/***/ }), - -/***/ "../../graphiql-react/dist/show-hint.cjs.js": -/*!**************************************************!*\ - !*** ../../graphiql-react/dist/show-hint.cjs.js ***! - \**************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var ct = Object.defineProperty; -var p = (H, A) => ct(H, "name", { - value: A, - configurable: !0 -}); -const G = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function lt(H, A) { - for (var r = 0; r < A.length; r++) { - const w = A[r]; - if (typeof w != "string" && !Array.isArray(w)) { - for (const v in w) if (v !== "default" && !(v in H)) { - const b = Object.getOwnPropertyDescriptor(w, v); - b && Object.defineProperty(H, v, b.get ? b : { - enumerable: !0, - get: () => w[v] - }); - } - } - } - return Object.freeze(Object.defineProperty(H, Symbol.toStringTag, { - value: "Module" - })); -} -p(lt, "_mergeNamespaces"); -var ht = { - exports: {} -}; -(function (H, A) { - (function (r) { - r(G.requireCodemirror()); - })(function (r) { - var w = "CodeMirror-hint", - v = "CodeMirror-hint-active"; - r.showHint = function (t, e, i) { - if (!e) return t.showHint(i); - i && i.async && (e.async = !0); - var n = { - hint: e - }; - if (i) for (var s in i) n[s] = i[s]; - return t.showHint(n); - }, r.defineExtension("showHint", function (t) { - t = tt(this, this.getCursor("start"), t); - var e = this.listSelections(); - if (!(e.length > 1)) { - if (this.somethingSelected()) { - if (!t.hint.supportsSelection) return; - for (var i = 0; i < e.length; i++) if (e[i].head.line != e[i].anchor.line) return; - } - this.state.completionActive && this.state.completionActive.close(); - var n = this.state.completionActive = new b(this, t); - n.options.hint && (r.signal(this, "startCompletion", this), n.update(!0)); - } - }), r.defineExtension("closeHint", function () { - this.state.completionActive && this.state.completionActive.close(); - }); - function b(t, e) { - if (this.cm = t, this.options = e, this.widget = null, this.debounce = 0, this.tick = 0, this.startPos = this.cm.getCursor("start"), this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length, this.options.updateOnCursorActivity) { - var i = this; - t.on("cursorActivity", this.activityFunc = function () { - i.cursorActivity(); - }); - } - } - p(b, "Completion"); - var Q = window.requestAnimationFrame || function (t) { - return setTimeout(t, 1e3 / 60); - }, - Z = window.cancelAnimationFrame || clearTimeout; - b.prototype = { - close: function () { - this.active() && (this.cm.state.completionActive = null, this.tick = null, this.options.updateOnCursorActivity && this.cm.off("cursorActivity", this.activityFunc), this.widget && this.data && r.signal(this.data, "close"), this.widget && this.widget.close(), r.signal(this.cm, "endCompletion", this.cm)); - }, - active: function () { - return this.cm.state.completionActive == this; - }, - pick: function (t, e) { - var i = t.list[e], - n = this; - this.cm.operation(function () { - i.hint ? i.hint(n.cm, t, i) : n.cm.replaceRange(_(i), i.from || t.from, i.to || t.to, "complete"), r.signal(t, "pick", i), n.cm.scrollIntoView(); - }), this.options.closeOnPick && this.close(); - }, - cursorActivity: function () { - this.debounce && (Z(this.debounce), this.debounce = 0); - var t = this.startPos; - this.data && (t = this.data.from); - var e = this.cm.getCursor(), - i = this.cm.getLine(e.line); - if (e.line != this.startPos.line || i.length - e.ch != this.startLen - this.startPos.ch || e.ch < t.ch || this.cm.somethingSelected() || !e.ch || this.options.closeCharacters.test(i.charAt(e.ch - 1))) this.close();else { - var n = this; - this.debounce = Q(function () { - n.update(); - }), this.widget && this.widget.disable(); - } - }, - update: function (t) { - if (this.tick != null) { - var e = this, - i = ++this.tick; - U(this.options.hint, this.cm, this.options, function (n) { - e.tick == i && e.finishUpdate(n, t); - }); - } - }, - finishUpdate: function (t, e) { - this.data && r.signal(this.data, "update"); - var i = this.widget && this.widget.picked || e && this.options.completeSingle; - this.widget && this.widget.close(), this.data = t, t && t.list.length && (i && t.list.length == 1 ? this.pick(t, 0) : (this.widget = new K(this, t), r.signal(t, "shown"))); - } - }; - function tt(t, e, i) { - var n = t.options.hintOptions, - s = {}; - for (var c in D) s[c] = D[c]; - if (n) for (var c in n) n[c] !== void 0 && (s[c] = n[c]); - if (i) for (var c in i) i[c] !== void 0 && (s[c] = i[c]); - return s.hint.resolve && (s.hint = s.hint.resolve(t, e)), s; - } - p(tt, "parseOptions"); - function _(t) { - return typeof t == "string" ? t : t.text; - } - p(_, "getText"); - function et(t, e) { - var i = { - Up: function () { - e.moveFocus(-1); - }, - Down: function () { - e.moveFocus(1); - }, - PageUp: function () { - e.moveFocus(-e.menuSize() + 1, !0); - }, - PageDown: function () { - e.moveFocus(e.menuSize() - 1, !0); - }, - Home: function () { - e.setFocus(0); - }, - End: function () { - e.setFocus(e.length - 1); - }, - Enter: e.pick, - Tab: e.pick, - Esc: e.close - }, - n = /Mac/.test(navigator.platform); - n && (i["Ctrl-P"] = function () { - e.moveFocus(-1); - }, i["Ctrl-N"] = function () { - e.moveFocus(1); - }); - var s = t.options.customKeys, - c = s ? {} : i; - function o(u, l) { - var a; - typeof l != "string" ? a = p(function (S) { - return l(S, e); - }, "bound") : i.hasOwnProperty(l) ? a = i[l] : a = l, c[u] = a; - } - if (p(o, "addBinding"), s) for (var f in s) s.hasOwnProperty(f) && o(f, s[f]); - var h = t.options.extraKeys; - if (h) for (var f in h) h.hasOwnProperty(f) && o(f, h[f]); - return c; - } - p(et, "buildKeyMap"); - function B(t, e) { - for (; e && e != t;) { - if (e.nodeName.toUpperCase() === "LI" && e.parentNode == t) return e; - e = e.parentNode; - } - } - p(B, "getHintElement"); - function K(t, e) { - this.id = "cm-complete-" + Math.floor(Math.random(1e6)), this.completion = t, this.data = e, this.picked = !1; - var i = this, - n = t.cm, - s = n.getInputField().ownerDocument, - c = s.defaultView || s.parentWindow, - o = this.hints = s.createElement("ul"); - o.setAttribute("role", "listbox"), o.setAttribute("aria-expanded", "true"), o.id = this.id; - var f = t.cm.options.theme; - o.className = "CodeMirror-hints " + f, this.selectedHint = e.selectedHint || 0; - for (var h = e.list, u = 0; u < h.length; ++u) { - var l = o.appendChild(s.createElement("li")), - a = h[u], - S = w + (u != this.selectedHint ? "" : " " + v); - a.className != null && (S = a.className + " " + S), l.className = S, u == this.selectedHint && l.setAttribute("aria-selected", "true"), l.id = this.id + "-" + u, l.setAttribute("role", "option"), a.render ? a.render(l, e, a) : l.appendChild(s.createTextNode(a.displayText || _(a))), l.hintId = u; - } - var T = t.options.container || s.body, - y = n.cursorCoords(t.options.alignWithWord ? e.from : null), - k = y.left, - O = y.bottom, - j = !0, - F = 0, - E = 0; - if (T !== s.body) { - var st = ["absolute", "relative", "fixed"].indexOf(c.getComputedStyle(T).position) !== -1, - W = st ? T : T.offsetParent, - M = W.getBoundingClientRect(), - q = s.body.getBoundingClientRect(); - F = M.left - q.left - W.scrollLeft, E = M.top - q.top - W.scrollTop; - } - o.style.left = k - F + "px", o.style.top = O - E + "px"; - var N = c.innerWidth || Math.max(s.body.offsetWidth, s.documentElement.offsetWidth), - L = c.innerHeight || Math.max(s.body.offsetHeight, s.documentElement.offsetHeight); - T.appendChild(o), n.getInputField().setAttribute("aria-autocomplete", "list"), n.getInputField().setAttribute("aria-owns", this.id), n.getInputField().setAttribute("aria-activedescendant", this.id + "-" + this.selectedHint); - var m = t.options.moveOnOverlap ? o.getBoundingClientRect() : new DOMRect(), - z = t.options.paddingForScrollbar ? o.scrollHeight > o.clientHeight + 1 : !1, - x; - setTimeout(function () { - x = n.getScrollInfo(); - }); - var ot = m.bottom - L; - if (ot > 0) { - var P = m.bottom - m.top, - rt = y.top - (y.bottom - m.top); - if (rt - P > 0) o.style.top = (O = y.top - P - E) + "px", j = !1;else if (P > L) { - o.style.height = L - 5 + "px", o.style.top = (O = y.bottom - m.top - E) + "px"; - var V = n.getCursor(); - e.from.ch != V.ch && (y = n.cursorCoords(V), o.style.left = (k = y.left - F) + "px", m = o.getBoundingClientRect()); - } - } - var C = m.right - N; - if (z && (C += n.display.nativeBarWidth), C > 0 && (m.right - m.left > N && (o.style.width = N - 5 + "px", C -= m.right - m.left - N), o.style.left = (k = y.left - C - F) + "px"), z) for (var I = o.firstChild; I; I = I.nextSibling) I.style.paddingRight = n.display.nativeBarWidth + "px"; - if (n.addKeyMap(this.keyMap = et(t, { - moveFocus: function (d, g) { - i.changeActive(i.selectedHint + d, g); - }, - setFocus: function (d) { - i.changeActive(d); - }, - menuSize: function () { - return i.screenAmount(); - }, - length: h.length, - close: function () { - t.close(); - }, - pick: function () { - i.pick(); - }, - data: e - })), t.options.closeOnUnfocus) { - var Y; - n.on("blur", this.onBlur = function () { - Y = setTimeout(function () { - t.close(); - }, 100); - }), n.on("focus", this.onFocus = function () { - clearTimeout(Y); - }); - } - n.on("scroll", this.onScroll = function () { - var d = n.getScrollInfo(), - g = n.getWrapperElement().getBoundingClientRect(); - x || (x = n.getScrollInfo()); - var X = O + x.top - d.top, - R = X - (c.pageYOffset || (s.documentElement || s.body).scrollTop); - if (j || (R += o.offsetHeight), R <= g.top || R >= g.bottom) return t.close(); - o.style.top = X + "px", o.style.left = k + x.left - d.left + "px"; - }), r.on(o, "dblclick", function (d) { - var g = B(o, d.target || d.srcElement); - g && g.hintId != null && (i.changeActive(g.hintId), i.pick()); - }), r.on(o, "click", function (d) { - var g = B(o, d.target || d.srcElement); - g && g.hintId != null && (i.changeActive(g.hintId), t.options.completeOnSingleClick && i.pick()); - }), r.on(o, "mousedown", function () { - setTimeout(function () { - n.focus(); - }, 20); - }); - var $ = this.getSelectedHintRange(); - return ($.from !== 0 || $.to !== 0) && this.scrollToActive(), r.signal(e, "select", h[this.selectedHint], o.childNodes[this.selectedHint]), !0; - } - p(K, "Widget"), K.prototype = { - close: function () { - if (this.completion.widget == this) { - this.completion.widget = null, this.hints.parentNode && this.hints.parentNode.removeChild(this.hints), this.completion.cm.removeKeyMap(this.keyMap); - var t = this.completion.cm.getInputField(); - t.removeAttribute("aria-activedescendant"), t.removeAttribute("aria-owns"); - var e = this.completion.cm; - this.completion.options.closeOnUnfocus && (e.off("blur", this.onBlur), e.off("focus", this.onFocus)), e.off("scroll", this.onScroll); - } - }, - disable: function () { - this.completion.cm.removeKeyMap(this.keyMap); - var t = this; - this.keyMap = { - Enter: function () { - t.picked = !0; - } - }, this.completion.cm.addKeyMap(this.keyMap); - }, - pick: function () { - this.completion.pick(this.data, this.selectedHint); - }, - changeActive: function (t, e) { - if (t >= this.data.list.length ? t = e ? this.data.list.length - 1 : 0 : t < 0 && (t = e ? 0 : this.data.list.length - 1), this.selectedHint != t) { - var i = this.hints.childNodes[this.selectedHint]; - i && (i.className = i.className.replace(" " + v, ""), i.removeAttribute("aria-selected")), i = this.hints.childNodes[this.selectedHint = t], i.className += " " + v, i.setAttribute("aria-selected", "true"), this.completion.cm.getInputField().setAttribute("aria-activedescendant", i.id), this.scrollToActive(), r.signal(this.data, "select", this.data.list[this.selectedHint], i); - } - }, - scrollToActive: function () { - var t = this.getSelectedHintRange(), - e = this.hints.childNodes[t.from], - i = this.hints.childNodes[t.to], - n = this.hints.firstChild; - e.offsetTop < this.hints.scrollTop ? this.hints.scrollTop = e.offsetTop - n.offsetTop : i.offsetTop + i.offsetHeight > this.hints.scrollTop + this.hints.clientHeight && (this.hints.scrollTop = i.offsetTop + i.offsetHeight - this.hints.clientHeight + n.offsetTop); - }, - screenAmount: function () { - return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; - }, - getSelectedHintRange: function () { - var t = this.completion.options.scrollMargin || 0; - return { - from: Math.max(0, this.selectedHint - t), - to: Math.min(this.data.list.length - 1, this.selectedHint + t) - }; - } - }; - function it(t, e) { - if (!t.somethingSelected()) return e; - for (var i = [], n = 0; n < e.length; n++) e[n].supportsSelection && i.push(e[n]); - return i; - } - p(it, "applicableHelpers"); - function U(t, e, i, n) { - if (t.async) t(e, n, i);else { - var s = t(e, i); - s && s.then ? s.then(n) : n(s); - } - } - p(U, "fetchHints"); - function nt(t, e) { - var i = t.getHelpers(e, "hint"), - n; - if (i.length) { - var s = p(function (c, o, f) { - var h = it(c, i); - function u(l) { - if (l == h.length) return o(null); - U(h[l], c, f, function (a) { - a && a.list.length > 0 ? o(a) : u(l + 1); - }); - } - p(u, "run"), u(0); - }, "resolved"); - return s.async = !0, s.supportsSelection = !0, s; - } else return (n = t.getHelper(t.getCursor(), "hintWords")) ? function (c) { - return r.hint.fromList(c, { - words: n - }); - } : r.hint.anyword ? function (c, o) { - return r.hint.anyword(c, o); - } : function () {}; - } - p(nt, "resolveAutoHints"), r.registerHelper("hint", "auto", { - resolve: nt - }), r.registerHelper("hint", "fromList", function (t, e) { - var i = t.getCursor(), - n = t.getTokenAt(i), - s, - c = r.Pos(i.line, n.start), - o = i; - n.start < i.ch && /\w/.test(n.string.charAt(i.ch - n.start - 1)) ? s = n.string.substr(0, i.ch - n.start) : (s = "", c = i); - for (var f = [], h = 0; h < e.words.length; h++) { - var u = e.words[h]; - u.slice(0, s.length) == s && f.push(u); - } - if (f.length) return { - list: f, - from: c, - to: o - }; - }), r.commands.autocomplete = r.showHint; - var D = { - hint: r.hint.auto, - completeSingle: !0, - alignWithWord: !0, - closeCharacters: /[\s()\[\]{};:>,]/, - closeOnPick: !0, - closeOnUnfocus: !0, - updateOnCursorActivity: !0, - completeOnSingleClick: !0, - container: null, - customKeys: null, - extraKeys: null, - paddingForScrollbar: !0, - moveOnOverlap: !0 - }; - r.defineOption("hintOptions", null); - }); -})(); -var J = ht.exports; -const at = G.getDefaultExportFromCjs(J), - ft = lt({ - __proto__: null, - default: at - }, [J]); -exports.showHint = ft; - -/***/ }), - -/***/ "../../graphiql-react/dist/sublime.cjs.js": -/*!************************************************!*\ - !*** ../../graphiql-react/dist/sublime.cjs.js ***! - \************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var _ = Object.defineProperty; -var v = (m, B) => _(m, "name", { - value: B, - configurable: !0 -}); -const E = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"), - Y = __webpack_require__(/*! ./searchcursor.cjs2.js */ "../../graphiql-react/dist/searchcursor.cjs2.js"), - z = __webpack_require__(/*! ./matchbrackets.cjs2.js */ "../../graphiql-react/dist/matchbrackets.cjs2.js"); -function J(m, B) { - for (var h = 0; h < B.length; h++) { - const a = B[h]; - if (typeof a != "string" && !Array.isArray(a)) { - for (const f in a) if (f !== "default" && !(f in m)) { - const A = Object.getOwnPropertyDescriptor(a, f); - A && Object.defineProperty(m, f, A.get ? A : { - enumerable: !0, - get: () => a[f] - }); - } - } - } - return Object.freeze(Object.defineProperty(m, Symbol.toStringTag, { - value: "Module" - })); -} -v(J, "_mergeNamespaces"); -var G = { - exports: {} -}; -(function (m, B) { - (function (h) { - h(E.requireCodemirror(), Y.requireSearchcursor(), z.requireMatchbrackets()); - })(function (h) { - var a = h.commands, - f = h.Pos; - function A(e, t, n) { - if (n < 0 && t.ch == 0) return e.clipPos(f(t.line - 1)); - var r = e.getLine(t.line); - if (n > 0 && t.ch >= r.length) return e.clipPos(f(t.line + 1, 0)); - for (var l = "start", i, o = t.ch, s = o, u = n < 0 ? 0 : r.length, d = 0; s != u; s += n, d++) { - var p = r.charAt(n < 0 ? s - 1 : s), - c = p != "_" && h.isWordChar(p) ? "w" : "o"; - if (c == "w" && p.toUpperCase() == p && (c = "W"), l == "start") c != "o" ? (l = "in", i = c) : o = s + n;else if (l == "in" && i != c) { - if (i == "w" && c == "W" && n < 0 && s--, i == "W" && c == "w" && n > 0) if (s == o + 1) { - i = "w"; - continue; - } else s--; - break; - } - } - return f(t.line, s); - } - v(A, "findPosSubword"); - function T(e, t) { - e.extendSelectionsBy(function (n) { - return e.display.shift || e.doc.extend || n.empty() ? A(e.doc, n.head, t) : t < 0 ? n.from() : n.to(); - }); - } - v(T, "moveSubword"), a.goSubwordLeft = function (e) { - T(e, -1); - }, a.goSubwordRight = function (e) { - T(e, 1); - }, a.scrollLineUp = function (e) { - var t = e.getScrollInfo(); - if (!e.somethingSelected()) { - var n = e.lineAtHeight(t.top + t.clientHeight, "local"); - e.getCursor().line >= n && e.execCommand("goLineUp"); - } - e.scrollTo(null, t.top - e.defaultTextHeight()); - }, a.scrollLineDown = function (e) { - var t = e.getScrollInfo(); - if (!e.somethingSelected()) { - var n = e.lineAtHeight(t.top, "local") + 1; - e.getCursor().line <= n && e.execCommand("goLineDown"); - } - e.scrollTo(null, t.top + e.defaultTextHeight()); - }, a.splitSelectionByLine = function (e) { - for (var t = e.listSelections(), n = [], r = 0; r < t.length; r++) for (var l = t[r].from(), i = t[r].to(), o = l.line; o <= i.line; ++o) i.line > l.line && o == i.line && i.ch == 0 || n.push({ - anchor: o == l.line ? l : f(o, 0), - head: o == i.line ? i : f(o) - }); - e.setSelections(n, 0); - }, a.singleSelectionTop = function (e) { - var t = e.listSelections()[0]; - e.setSelection(t.anchor, t.head, { - scroll: !1 - }); - }, a.selectLine = function (e) { - for (var t = e.listSelections(), n = [], r = 0; r < t.length; r++) { - var l = t[r]; - n.push({ - anchor: f(l.from().line, 0), - head: f(l.to().line + 1, 0) - }); - } - e.setSelections(n); - }; - function x(e, t) { - if (e.isReadOnly()) return h.Pass; - e.operation(function () { - for (var n = e.listSelections().length, r = [], l = -1, i = 0; i < n; i++) { - var o = e.listSelections()[i].head; - if (!(o.line <= l)) { - var s = f(o.line + (t ? 0 : 1), 0); - e.replaceRange(` -`, s, null, "+insertLine"), e.indentLine(s.line, null, !0), r.push({ - head: s, - anchor: s - }), l = o.line + 1; - } - } - e.setSelections(r); - }), e.execCommand("indentAuto"); - } - v(x, "insertLine"), a.insertLineAfter = function (e) { - return x(e, !1); - }, a.insertLineBefore = function (e) { - return x(e, !0); - }; - function K(e, t) { - for (var n = t.ch, r = n, l = e.getLine(t.line); n && h.isWordChar(l.charAt(n - 1));) --n; - for (; r < l.length && h.isWordChar(l.charAt(r));) ++r; - return { - from: f(t.line, n), - to: f(t.line, r), - word: l.slice(n, r) - }; - } - v(K, "wordAt"), a.selectNextOccurrence = function (e) { - var t = e.getCursor("from"), - n = e.getCursor("to"), - r = e.state.sublimeFindFullWord == e.doc.sel; - if (h.cmpPos(t, n) == 0) { - var l = K(e, t); - if (!l.word) return; - e.setSelection(l.from, l.to), r = !0; - } else { - var i = e.getRange(t, n), - o = r ? new RegExp("\\b" + i + "\\b") : i, - s = e.getSearchCursor(o, n), - u = s.findNext(); - if (u || (s = e.getSearchCursor(o, f(e.firstLine(), 0)), u = s.findNext()), !u || H(e.listSelections(), s.from(), s.to())) return; - e.addSelection(s.from(), s.to()); - } - r && (e.state.sublimeFindFullWord = e.doc.sel); - }, a.skipAndSelectNextOccurrence = function (e) { - var t = e.getCursor("anchor"), - n = e.getCursor("head"); - a.selectNextOccurrence(e), h.cmpPos(t, n) != 0 && e.doc.setSelections(e.doc.listSelections().filter(function (r) { - return r.anchor != t || r.head != n; - })); - }; - function y(e, t) { - for (var n = e.listSelections(), r = [], l = 0; l < n.length; l++) { - var i = n[l], - o = e.findPosV(i.anchor, t, "line", i.anchor.goalColumn), - s = e.findPosV(i.head, t, "line", i.head.goalColumn); - o.goalColumn = i.anchor.goalColumn != null ? i.anchor.goalColumn : e.cursorCoords(i.anchor, "div").left, s.goalColumn = i.head.goalColumn != null ? i.head.goalColumn : e.cursorCoords(i.head, "div").left; - var u = { - anchor: o, - head: s - }; - r.push(i), r.push(u); - } - e.setSelections(r); - } - v(y, "addCursorToSelection"), a.addCursorToPrevLine = function (e) { - y(e, -1); - }, a.addCursorToNextLine = function (e) { - y(e, 1); - }; - function H(e, t, n) { - for (var r = 0; r < e.length; r++) if (h.cmpPos(e[r].from(), t) == 0 && h.cmpPos(e[r].to(), n) == 0) return !0; - return !1; - } - v(H, "isSelectedRange"); - var P = "(){}[]"; - function U(e) { - for (var t = e.listSelections(), n = [], r = 0; r < t.length; r++) { - var l = t[r], - i = l.head, - o = e.scanForBracket(i, -1); - if (!o) return !1; - for (;;) { - var s = e.scanForBracket(i, 1); - if (!s) return !1; - if (s.ch == P.charAt(P.indexOf(o.ch) + 1)) { - var u = f(o.pos.line, o.pos.ch + 1); - if (h.cmpPos(u, l.from()) == 0 && h.cmpPos(s.pos, l.to()) == 0) { - if (o = e.scanForBracket(o.pos, -1), !o) return !1; - } else { - n.push({ - anchor: u, - head: s.pos - }); - break; - } - } - i = f(s.pos.line, s.pos.ch + 1); - } - } - return e.setSelections(n), !0; - } - v(U, "selectBetweenBrackets"), a.selectScope = function (e) { - U(e) || e.execCommand("selectAll"); - }, a.selectBetweenBrackets = function (e) { - if (!U(e)) return h.Pass; - }; - function I(e) { - return e ? /\bpunctuation\b/.test(e) ? e : void 0 : null; - } - v(I, "puncType"), a.goToBracket = function (e) { - e.extendSelectionsBy(function (t) { - var n = e.scanForBracket(t.head, 1, I(e.getTokenTypeAt(t.head))); - if (n && h.cmpPos(n.pos, t.head) != 0) return n.pos; - var r = e.scanForBracket(t.head, -1, I(e.getTokenTypeAt(f(t.head.line, t.head.ch + 1)))); - return r && f(r.pos.line, r.pos.ch + 1) || t.head; - }); - }, a.swapLineUp = function (e) { - if (e.isReadOnly()) return h.Pass; - for (var t = e.listSelections(), n = [], r = e.firstLine() - 1, l = [], i = 0; i < t.length; i++) { - var o = t[i], - s = o.from().line - 1, - u = o.to().line; - l.push({ - anchor: f(o.anchor.line - 1, o.anchor.ch), - head: f(o.head.line - 1, o.head.ch) - }), o.to().ch == 0 && !o.empty() && --u, s > r ? n.push(s, u) : n.length && (n[n.length - 1] = u), r = u; - } - e.operation(function () { - for (var d = 0; d < n.length; d += 2) { - var p = n[d], - c = n[d + 1], - b = e.getLine(p); - e.replaceRange("", f(p, 0), f(p + 1, 0), "+swapLine"), c > e.lastLine() ? e.replaceRange(` -` + b, f(e.lastLine()), null, "+swapLine") : e.replaceRange(b + ` -`, f(c, 0), null, "+swapLine"); - } - e.setSelections(l), e.scrollIntoView(); - }); - }, a.swapLineDown = function (e) { - if (e.isReadOnly()) return h.Pass; - for (var t = e.listSelections(), n = [], r = e.lastLine() + 1, l = t.length - 1; l >= 0; l--) { - var i = t[l], - o = i.to().line + 1, - s = i.from().line; - i.to().ch == 0 && !i.empty() && o--, o < r ? n.push(o, s) : n.length && (n[n.length - 1] = s), r = s; - } - e.operation(function () { - for (var u = n.length - 2; u >= 0; u -= 2) { - var d = n[u], - p = n[u + 1], - c = e.getLine(d); - d == e.lastLine() ? e.replaceRange("", f(d - 1), f(d), "+swapLine") : e.replaceRange("", f(d, 0), f(d + 1, 0), "+swapLine"), e.replaceRange(c + ` -`, f(p, 0), null, "+swapLine"); - } - e.scrollIntoView(); - }); - }, a.toggleCommentIndented = function (e) { - e.toggleComment({ - indent: !0 - }); - }, a.joinLines = function (e) { - for (var t = e.listSelections(), n = [], r = 0; r < t.length; r++) { - for (var l = t[r], i = l.from(), o = i.line, s = l.to().line; r < t.length - 1 && t[r + 1].from().line == s;) s = t[++r].to().line; - n.push({ - start: o, - end: s, - anchor: !l.empty() && i - }); - } - e.operation(function () { - for (var u = 0, d = [], p = 0; p < n.length; p++) { - for (var c = n[p], b = c.anchor && f(c.anchor.line - u, c.anchor.ch), w, g = c.start; g <= c.end; g++) { - var S = g - u; - g == c.end && (w = f(S, e.getLine(S).length + 1)), S < e.lastLine() && (e.replaceRange(" ", f(S), f(S + 1, /^\s*/.exec(e.getLine(S + 1))[0].length)), ++u); - } - d.push({ - anchor: b || w, - head: w - }); - } - e.setSelections(d, 0); - }); - }, a.duplicateLine = function (e) { - e.operation(function () { - for (var t = e.listSelections().length, n = 0; n < t; n++) { - var r = e.listSelections()[n]; - r.empty() ? e.replaceRange(e.getLine(r.head.line) + ` -`, f(r.head.line, 0)) : e.replaceRange(e.getRange(r.from(), r.to()), r.from()); - } - e.scrollIntoView(); - }); - }; - function R(e, t, n) { - if (e.isReadOnly()) return h.Pass; - for (var r = e.listSelections(), l = [], i, o = 0; o < r.length; o++) { - var s = r[o]; - if (!s.empty()) { - for (var u = s.from().line, d = s.to().line; o < r.length - 1 && r[o + 1].from().line == d;) d = r[++o].to().line; - r[o].to().ch || d--, l.push(u, d); - } - } - l.length ? i = !0 : l.push(e.firstLine(), e.lastLine()), e.operation(function () { - for (var p = [], c = 0; c < l.length; c += 2) { - var b = l[c], - w = l[c + 1], - g = f(b, 0), - S = f(w), - F = e.getRange(g, S, !1); - t ? F.sort(function (k, L) { - return k < L ? -n : k == L ? 0 : n; - }) : F.sort(function (k, L) { - var W = k.toUpperCase(), - M = L.toUpperCase(); - return W != M && (k = W, L = M), k < L ? -n : k == L ? 0 : n; - }), e.replaceRange(F, g, S), i && p.push({ - anchor: g, - head: f(w + 1, 0) - }); - } - i && e.setSelections(p, 0); - }); - } - v(R, "sortLines"), a.sortLines = function (e) { - R(e, !0, 1); - }, a.reverseSortLines = function (e) { - R(e, !0, -1); - }, a.sortLinesInsensitive = function (e) { - R(e, !1, 1); - }, a.reverseSortLinesInsensitive = function (e) { - R(e, !1, -1); - }, a.nextBookmark = function (e) { - var t = e.state.sublimeBookmarks; - if (t) for (; t.length;) { - var n = t.shift(), - r = n.find(); - if (r) return t.push(n), e.setSelection(r.from, r.to); - } - }, a.prevBookmark = function (e) { - var t = e.state.sublimeBookmarks; - if (t) for (; t.length;) { - t.unshift(t.pop()); - var n = t[t.length - 1].find(); - if (!n) t.pop();else return e.setSelection(n.from, n.to); - } - }, a.toggleBookmark = function (e) { - for (var t = e.listSelections(), n = e.state.sublimeBookmarks || (e.state.sublimeBookmarks = []), r = 0; r < t.length; r++) { - for (var l = t[r].from(), i = t[r].to(), o = t[r].empty() ? e.findMarksAt(l) : e.findMarks(l, i), s = 0; s < o.length; s++) if (o[s].sublimeBookmark) { - o[s].clear(); - for (var u = 0; u < n.length; u++) n[u] == o[s] && n.splice(u--, 1); - break; - } - s == o.length && n.push(e.markText(l, i, { - sublimeBookmark: !0, - clearWhenEmpty: !1 - })); - } - }, a.clearBookmarks = function (e) { - var t = e.state.sublimeBookmarks; - if (t) for (var n = 0; n < t.length; n++) t[n].clear(); - t.length = 0; - }, a.selectBookmarks = function (e) { - var t = e.state.sublimeBookmarks, - n = []; - if (t) for (var r = 0; r < t.length; r++) { - var l = t[r].find(); - l ? n.push({ - anchor: l.from, - head: l.to - }) : t.splice(r--, 0); - } - n.length && e.setSelections(n, 0); - }; - function D(e, t) { - e.operation(function () { - for (var n = e.listSelections(), r = [], l = [], i = 0; i < n.length; i++) { - var o = n[i]; - o.empty() ? (r.push(i), l.push("")) : l.push(t(e.getRange(o.from(), o.to()))); - } - e.replaceSelections(l, "around", "case"); - for (var i = r.length - 1, s; i >= 0; i--) { - var o = n[r[i]]; - if (!(s && h.cmpPos(o.head, s) > 0)) { - var u = K(e, o.head); - s = u.from, e.replaceRange(t(u.word), u.from, u.to); - } - } - }); - } - v(D, "modifyWordOrSelection"), a.smartBackspace = function (e) { - if (e.somethingSelected()) return h.Pass; - e.operation(function () { - for (var t = e.listSelections(), n = e.getOption("indentUnit"), r = t.length - 1; r >= 0; r--) { - var l = t[r].head, - i = e.getRange({ - line: l.line, - ch: 0 - }, l), - o = h.countColumn(i, null, e.getOption("tabSize")), - s = e.findPosH(l, -1, "char", !1); - if (i && !/\S/.test(i) && o % n == 0) { - var u = new f(l.line, h.findColumn(i, o - n, n)); - u.ch != l.ch && (s = u); - } - e.replaceRange("", s, l, "+delete"); - } - }); - }, a.delLineRight = function (e) { - e.operation(function () { - for (var t = e.listSelections(), n = t.length - 1; n >= 0; n--) e.replaceRange("", t[n].anchor, f(t[n].to().line), "+delete"); - e.scrollIntoView(); - }); - }, a.upcaseAtCursor = function (e) { - D(e, function (t) { - return t.toUpperCase(); - }); - }, a.downcaseAtCursor = function (e) { - D(e, function (t) { - return t.toLowerCase(); - }); - }, a.setSublimeMark = function (e) { - e.state.sublimeMark && e.state.sublimeMark.clear(), e.state.sublimeMark = e.setBookmark(e.getCursor()); - }, a.selectToSublimeMark = function (e) { - var t = e.state.sublimeMark && e.state.sublimeMark.find(); - t && e.setSelection(e.getCursor(), t); - }, a.deleteToSublimeMark = function (e) { - var t = e.state.sublimeMark && e.state.sublimeMark.find(); - if (t) { - var n = e.getCursor(), - r = t; - if (h.cmpPos(n, r) > 0) { - var l = r; - r = n, n = l; - } - e.state.sublimeKilled = e.getRange(n, r), e.replaceRange("", n, r); - } - }, a.swapWithSublimeMark = function (e) { - var t = e.state.sublimeMark && e.state.sublimeMark.find(); - t && (e.state.sublimeMark.clear(), e.state.sublimeMark = e.setBookmark(e.getCursor()), e.setCursor(t)); - }, a.sublimeYank = function (e) { - e.state.sublimeKilled != null && e.replaceSelection(e.state.sublimeKilled, null, "paste"); - }, a.showInCenter = function (e) { - var t = e.cursorCoords(null, "local"); - e.scrollTo(null, (t.top + t.bottom) / 2 - e.getScrollInfo().clientHeight / 2); - }; - function N(e) { - var t = e.getCursor("from"), - n = e.getCursor("to"); - if (h.cmpPos(t, n) == 0) { - var r = K(e, t); - if (!r.word) return; - t = r.from, n = r.to; - } - return { - from: t, - to: n, - query: e.getRange(t, n), - word: r - }; - } - v(N, "getTarget"); - function O(e, t) { - var n = N(e); - if (n) { - var r = n.query, - l = e.getSearchCursor(r, t ? n.to : n.from); - (t ? l.findNext() : l.findPrevious()) ? e.setSelection(l.from(), l.to()) : (l = e.getSearchCursor(r, t ? f(e.firstLine(), 0) : e.clipPos(f(e.lastLine()))), (t ? l.findNext() : l.findPrevious()) ? e.setSelection(l.from(), l.to()) : n.word && e.setSelection(n.from, n.to)); - } - } - v(O, "findAndGoTo"), a.findUnder = function (e) { - O(e, !0); - }, a.findUnderPrevious = function (e) { - O(e, !1); - }, a.findAllUnder = function (e) { - var t = N(e); - if (t) { - for (var n = e.getSearchCursor(t.query), r = [], l = -1; n.findNext();) r.push({ - anchor: n.from(), - head: n.to() - }), n.from().line <= t.from.line && n.from().ch <= t.from.ch && l++; - e.setSelections(r, l); - } - }; - var C = h.keyMap; - C.macSublime = { - "Cmd-Left": "goLineStartSmart", - "Shift-Tab": "indentLess", - "Shift-Ctrl-K": "deleteLine", - "Alt-Q": "wrapLines", - "Ctrl-Left": "goSubwordLeft", - "Ctrl-Right": "goSubwordRight", - "Ctrl-Alt-Up": "scrollLineUp", - "Ctrl-Alt-Down": "scrollLineDown", - "Cmd-L": "selectLine", - "Shift-Cmd-L": "splitSelectionByLine", - Esc: "singleSelectionTop", - "Cmd-Enter": "insertLineAfter", - "Shift-Cmd-Enter": "insertLineBefore", - "Cmd-D": "selectNextOccurrence", - "Shift-Cmd-Space": "selectScope", - "Shift-Cmd-M": "selectBetweenBrackets", - "Cmd-M": "goToBracket", - "Cmd-Ctrl-Up": "swapLineUp", - "Cmd-Ctrl-Down": "swapLineDown", - "Cmd-/": "toggleCommentIndented", - "Cmd-J": "joinLines", - "Shift-Cmd-D": "duplicateLine", - F5: "sortLines", - "Shift-F5": "reverseSortLines", - "Cmd-F5": "sortLinesInsensitive", - "Shift-Cmd-F5": "reverseSortLinesInsensitive", - F2: "nextBookmark", - "Shift-F2": "prevBookmark", - "Cmd-F2": "toggleBookmark", - "Shift-Cmd-F2": "clearBookmarks", - "Alt-F2": "selectBookmarks", - Backspace: "smartBackspace", - "Cmd-K Cmd-D": "skipAndSelectNextOccurrence", - "Cmd-K Cmd-K": "delLineRight", - "Cmd-K Cmd-U": "upcaseAtCursor", - "Cmd-K Cmd-L": "downcaseAtCursor", - "Cmd-K Cmd-Space": "setSublimeMark", - "Cmd-K Cmd-A": "selectToSublimeMark", - "Cmd-K Cmd-W": "deleteToSublimeMark", - "Cmd-K Cmd-X": "swapWithSublimeMark", - "Cmd-K Cmd-Y": "sublimeYank", - "Cmd-K Cmd-C": "showInCenter", - "Cmd-K Cmd-G": "clearBookmarks", - "Cmd-K Cmd-Backspace": "delLineLeft", - "Cmd-K Cmd-1": "foldAll", - "Cmd-K Cmd-0": "unfoldAll", - "Cmd-K Cmd-J": "unfoldAll", - "Ctrl-Shift-Up": "addCursorToPrevLine", - "Ctrl-Shift-Down": "addCursorToNextLine", - "Cmd-F3": "findUnder", - "Shift-Cmd-F3": "findUnderPrevious", - "Alt-F3": "findAllUnder", - "Shift-Cmd-[": "fold", - "Shift-Cmd-]": "unfold", - "Cmd-I": "findIncremental", - "Shift-Cmd-I": "findIncrementalReverse", - "Cmd-H": "replace", - F3: "findNext", - "Shift-F3": "findPrev", - fallthrough: "macDefault" - }, h.normalizeKeyMap(C.macSublime), C.pcSublime = { - "Shift-Tab": "indentLess", - "Shift-Ctrl-K": "deleteLine", - "Alt-Q": "wrapLines", - "Ctrl-T": "transposeChars", - "Alt-Left": "goSubwordLeft", - "Alt-Right": "goSubwordRight", - "Ctrl-Up": "scrollLineUp", - "Ctrl-Down": "scrollLineDown", - "Ctrl-L": "selectLine", - "Shift-Ctrl-L": "splitSelectionByLine", - Esc: "singleSelectionTop", - "Ctrl-Enter": "insertLineAfter", - "Shift-Ctrl-Enter": "insertLineBefore", - "Ctrl-D": "selectNextOccurrence", - "Shift-Ctrl-Space": "selectScope", - "Shift-Ctrl-M": "selectBetweenBrackets", - "Ctrl-M": "goToBracket", - "Shift-Ctrl-Up": "swapLineUp", - "Shift-Ctrl-Down": "swapLineDown", - "Ctrl-/": "toggleCommentIndented", - "Ctrl-J": "joinLines", - "Shift-Ctrl-D": "duplicateLine", - F9: "sortLines", - "Shift-F9": "reverseSortLines", - "Ctrl-F9": "sortLinesInsensitive", - "Shift-Ctrl-F9": "reverseSortLinesInsensitive", - F2: "nextBookmark", - "Shift-F2": "prevBookmark", - "Ctrl-F2": "toggleBookmark", - "Shift-Ctrl-F2": "clearBookmarks", - "Alt-F2": "selectBookmarks", - Backspace: "smartBackspace", - "Ctrl-K Ctrl-D": "skipAndSelectNextOccurrence", - "Ctrl-K Ctrl-K": "delLineRight", - "Ctrl-K Ctrl-U": "upcaseAtCursor", - "Ctrl-K Ctrl-L": "downcaseAtCursor", - "Ctrl-K Ctrl-Space": "setSublimeMark", - "Ctrl-K Ctrl-A": "selectToSublimeMark", - "Ctrl-K Ctrl-W": "deleteToSublimeMark", - "Ctrl-K Ctrl-X": "swapWithSublimeMark", - "Ctrl-K Ctrl-Y": "sublimeYank", - "Ctrl-K Ctrl-C": "showInCenter", - "Ctrl-K Ctrl-G": "clearBookmarks", - "Ctrl-K Ctrl-Backspace": "delLineLeft", - "Ctrl-K Ctrl-1": "foldAll", - "Ctrl-K Ctrl-0": "unfoldAll", - "Ctrl-K Ctrl-J": "unfoldAll", - "Ctrl-Alt-Up": "addCursorToPrevLine", - "Ctrl-Alt-Down": "addCursorToNextLine", - "Ctrl-F3": "findUnder", - "Shift-Ctrl-F3": "findUnderPrevious", - "Alt-F3": "findAllUnder", - "Shift-Ctrl-[": "fold", - "Shift-Ctrl-]": "unfold", - "Ctrl-I": "findIncremental", - "Shift-Ctrl-I": "findIncrementalReverse", - "Ctrl-H": "replace", - F3: "findNext", - "Shift-F3": "findPrev", - fallthrough: "pcDefault" - }, h.normalizeKeyMap(C.pcSublime); - var V = C.default == C.macDefault; - C.sublime = V ? C.macSublime : C.pcSublime; - }); -})(); -var q = G.exports; -const Q = E.getDefaultExportFromCjs(q), - X = J({ - __proto__: null, - default: Q - }, [q]); -exports.sublime = X; - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/async-helpers/index.js": -/*!*********************************************************!*\ - !*** ../../graphiql-toolkit/esm/async-helpers/index.js ***! - \*********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.fetcherReturnToPromise = fetcherReturnToPromise; -exports.isAsyncIterable = isAsyncIterable; -exports.isObservable = isObservable; -exports.isPromise = isPromise; -var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function (resolve) { - resolve(value); - }); - } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -function isPromise(value) { - return typeof value === 'object' && value !== null && typeof value.then === 'function'; -} -function observableToPromise(observable) { - return new Promise((resolve, reject) => { - const subscription = observable.subscribe({ - next(v) { - resolve(v); - subscription.unsubscribe(); - }, - error: reject, - complete() { - reject(new Error('no value resolved')); - } - }); - }); -} -function isObservable(value) { - return typeof value === 'object' && value !== null && 'subscribe' in value && typeof value.subscribe === 'function'; -} -function isAsyncIterable(input) { - return typeof input === 'object' && input !== null && (input[Symbol.toStringTag] === 'AsyncGenerator' || Symbol.asyncIterator in input); -} -function asyncIterableToPromise(input) { - var _a; - return __awaiter(this, void 0, void 0, function* () { - const iteratorReturn = (_a = ('return' in input ? input : input[Symbol.asyncIterator]()).return) === null || _a === void 0 ? void 0 : _a.bind(input); - const iteratorNext = ('next' in input ? input : input[Symbol.asyncIterator]()).next.bind(input); - const result = yield iteratorNext(); - void (iteratorReturn === null || iteratorReturn === void 0 ? void 0 : iteratorReturn()); - return result.value; - }); -} -function fetcherReturnToPromise(fetcherResult) { - return __awaiter(this, void 0, void 0, function* () { - const result = yield fetcherResult; - if (isAsyncIterable(result)) { - return asyncIterableToPromise(result); - } - if (isObservable(result)) { - return observableToPromise(result); - } - return result; - }); -} - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/create-fetcher/createFetcher.js": -/*!******************************************************************!*\ - !*** ../../graphiql-toolkit/esm/create-fetcher/createFetcher.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createGraphiQLFetcher = createGraphiQLFetcher; -var _lib = __webpack_require__(/*! ./lib */ "../../graphiql-toolkit/esm/create-fetcher/lib.js"); -function createGraphiQLFetcher(options) { - let httpFetch; - if (typeof window !== 'undefined' && window.fetch) { - httpFetch = window.fetch; - } - if ((options === null || options === void 0 ? void 0 : options.enableIncrementalDelivery) === null || options.enableIncrementalDelivery !== false) { - options.enableIncrementalDelivery = true; - } - if (options.fetch) { - httpFetch = options.fetch; - } - if (!httpFetch) { - throw new Error('No valid fetcher implementation available'); - } - const simpleFetcher = (0, _lib.createSimpleFetcher)(options, httpFetch); - const httpFetcher = options.enableIncrementalDelivery ? (0, _lib.createMultipartFetcher)(options, httpFetch) : simpleFetcher; - return (graphQLParams, fetcherOpts) => { - if (graphQLParams.operationName === 'IntrospectionQuery') { - return (options.schemaFetcher || simpleFetcher)(graphQLParams, fetcherOpts); - } - const isSubscription = (fetcherOpts === null || fetcherOpts === void 0 ? void 0 : fetcherOpts.documentAST) ? (0, _lib.isSubscriptionWithName)(fetcherOpts.documentAST, graphQLParams.operationName || undefined) : false; - if (isSubscription) { - const wsFetcher = (0, _lib.getWsFetcher)(options, fetcherOpts); - if (!wsFetcher) { - throw new Error(`Your GraphiQL createFetcher is not properly configured for websocket subscriptions yet. ${options.subscriptionUrl ? `Provided URL ${options.subscriptionUrl} failed` : 'Please provide subscriptionUrl, wsClient or legacyClient option first.'}`); - } - return wsFetcher(graphQLParams); - } - return httpFetcher(graphQLParams, fetcherOpts); - }; -} - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/create-fetcher/index.js": -/*!**********************************************************!*\ - !*** ../../graphiql-toolkit/esm/create-fetcher/index.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -var _exportNames = { - createGraphiQLFetcher: true -}; -Object.defineProperty(exports, "createGraphiQLFetcher", ({ - enumerable: true, - get: function () { - return _createFetcher.createGraphiQLFetcher; - } -})); -var _types = __webpack_require__(/*! ./types */ "../../graphiql-toolkit/esm/create-fetcher/types.js"); -Object.keys(_types).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; - if (key in exports && exports[key] === _types[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _types[key]; - } - }); -}); -var _createFetcher = __webpack_require__(/*! ./createFetcher */ "../../graphiql-toolkit/esm/create-fetcher/createFetcher.js"); - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/create-fetcher/lib.js": -/*!********************************************************!*\ - !*** ../../graphiql-toolkit/esm/create-fetcher/lib.js ***! - \********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isSubscriptionWithName = exports.getWsFetcher = exports.createWebsocketsFetcherFromUrl = exports.createWebsocketsFetcherFromClient = exports.createSimpleFetcher = exports.createMultipartFetcher = exports.createLegacyWebsocketsFetcher = void 0; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -var _meros = __webpack_require__(/*! meros */ "../../../node_modules/meros/browser/index.mjs"); -var _pushPullAsyncIterableIterator = __webpack_require__(/*! @n1ru4l/push-pull-async-iterable-iterator */ "../../../node_modules/@n1ru4l/push-pull-async-iterable-iterator/index.js"); -var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function (resolve) { - resolve(value); - }); - } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __await = void 0 && (void 0).__await || function (v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); -}; -var __asyncValues = void 0 && (void 0).__asyncValues || function (o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], - i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { - return this; - }, i); - function verb(n) { - i[n] = o[n] && function (v) { - return new Promise(function (resolve, reject) { - v = o[n](v), settle(resolve, reject, v.done, v.value); - }); - }; - } - function settle(resolve, reject, d, v) { - Promise.resolve(v).then(function (v) { - resolve({ - value: v, - done: d - }); - }, reject); - } -}; -var __asyncGenerator = void 0 && (void 0).__asyncGenerator || function (thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), - i, - q = []; - return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { - return this; - }, i; - function verb(n) { - if (g[n]) i[n] = function (v) { - return new Promise(function (a, b) { - q.push([n, v, a, b]) > 1 || resume(n, v); - }); - }; - } - function resume(n, v) { - try { - step(g[n](v)); - } catch (e) { - settle(q[0][3], e); - } - } - function step(r) { - r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); - } - function fulfill(value) { - resume("next", value); - } - function reject(value) { - resume("throw", value); - } - function settle(f, v) { - if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); - } -}; -const errorHasCode = err => { - return typeof err === 'object' && err !== null && 'code' in err; -}; -const isSubscriptionWithName = (document, name) => { - let isSubscription = false; - (0, _graphql.visit)(document, { - OperationDefinition(node) { - var _a; - if (name === ((_a = node.name) === null || _a === void 0 ? void 0 : _a.value) && node.operation === 'subscription') { - isSubscription = true; - } - } - }); - return isSubscription; -}; -exports.isSubscriptionWithName = isSubscriptionWithName; -const createSimpleFetcher = (options, httpFetch) => (graphQLParams, fetcherOpts) => __awaiter(void 0, void 0, void 0, function* () { - const data = yield httpFetch(options.url, { - method: 'POST', - body: JSON.stringify(graphQLParams), - headers: Object.assign(Object.assign({ - 'content-type': 'application/json' - }, options.headers), fetcherOpts === null || fetcherOpts === void 0 ? void 0 : fetcherOpts.headers) - }); - return data.json(); -}); -exports.createSimpleFetcher = createSimpleFetcher; -const createWebsocketsFetcherFromUrl = (url, connectionParams) => { - let wsClient; - try { - const { - createClient - } = __webpack_require__(/*! graphql-ws */ "../../../node_modules/graphql-ws/lib/index.js"); - wsClient = createClient({ - url, - connectionParams - }); - return createWebsocketsFetcherFromClient(wsClient); - } catch (err) { - if (errorHasCode(err) && err.code === 'MODULE_NOT_FOUND') { - throw new Error("You need to install the 'graphql-ws' package to use websockets when passing a 'subscriptionUrl'"); - } - console.error(`Error creating websocket client for ${url}`, err); - } -}; -exports.createWebsocketsFetcherFromUrl = createWebsocketsFetcherFromUrl; -const createWebsocketsFetcherFromClient = wsClient => graphQLParams => (0, _pushPullAsyncIterableIterator.makeAsyncIterableIteratorFromSink)(sink => wsClient.subscribe(graphQLParams, Object.assign(Object.assign({}, sink), { - error(err) { - if (err instanceof CloseEvent) { - sink.error(new Error(`Socket closed with event ${err.code} ${err.reason || ''}`.trim())); - } else { - sink.error(err); - } - } -}))); -exports.createWebsocketsFetcherFromClient = createWebsocketsFetcherFromClient; -const createLegacyWebsocketsFetcher = legacyWsClient => graphQLParams => { - const observable = legacyWsClient.request(graphQLParams); - return (0, _pushPullAsyncIterableIterator.makeAsyncIterableIteratorFromSink)(sink => observable.subscribe(sink).unsubscribe); -}; -exports.createLegacyWebsocketsFetcher = createLegacyWebsocketsFetcher; -const createMultipartFetcher = (options, httpFetch) => function (graphQLParams, fetcherOpts) { - return __asyncGenerator(this, arguments, function* () { - var e_1, _a; - const response = yield __await(httpFetch(options.url, { - method: 'POST', - body: JSON.stringify(graphQLParams), - headers: Object.assign(Object.assign({ - 'content-type': 'application/json', - accept: 'application/json, multipart/mixed' - }, options.headers), fetcherOpts === null || fetcherOpts === void 0 ? void 0 : fetcherOpts.headers) - }).then(r => (0, _meros.meros)(r, { - multiple: true - }))); - if (!(0, _pushPullAsyncIterableIterator.isAsyncIterable)(response)) { - return yield __await(yield yield __await(response.json())); - } - try { - for (var response_1 = __asyncValues(response), response_1_1; response_1_1 = yield __await(response_1.next()), !response_1_1.done;) { - const chunk = response_1_1.value; - if (chunk.some(part => !part.json)) { - const message = chunk.map(part => `Headers::\n${part.headers}\n\nBody::\n${part.body}`); - throw new Error(`Expected multipart chunks to be of json type. got:\n${message}`); - } - yield yield __await(chunk.map(part => part.body)); - } - } catch (e_1_1) { - e_1 = { - error: e_1_1 - }; - } finally { - try { - if (response_1_1 && !response_1_1.done && (_a = response_1.return)) yield __await(_a.call(response_1)); - } finally { - if (e_1) throw e_1.error; - } - } - }); -}; -exports.createMultipartFetcher = createMultipartFetcher; -const getWsFetcher = (options, fetcherOpts) => { - if (options.wsClient) { - return createWebsocketsFetcherFromClient(options.wsClient); - } - if (options.subscriptionUrl) { - return createWebsocketsFetcherFromUrl(options.subscriptionUrl, Object.assign(Object.assign({}, options.wsConnectionParams), fetcherOpts === null || fetcherOpts === void 0 ? void 0 : fetcherOpts.headers)); - } - const legacyWebsocketsClient = options.legacyClient || options.legacyWsClient; - if (legacyWebsocketsClient) { - return createLegacyWebsocketsFetcher(legacyWebsocketsClient); - } -}; -exports.getWsFetcher = getWsFetcher; - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/create-fetcher/types.js": -/*!**********************************************************!*\ - !*** ../../graphiql-toolkit/esm/create-fetcher/types.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/format/index.js": -/*!**************************************************!*\ - !*** ../../graphiql-toolkit/esm/format/index.js ***! - \**************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.formatError = formatError; -exports.formatResult = formatResult; -function stringify(obj) { - return JSON.stringify(obj, null, 2); -} -function formatSingleError(error) { - return Object.assign(Object.assign({}, error), { - message: error.message, - stack: error.stack - }); -} -function handleSingleError(error) { - if (error instanceof Error) { - return formatSingleError(error); - } - return error; -} -function formatError(error) { - if (Array.isArray(error)) { - return stringify({ - errors: error.map(e => handleSingleError(e)) - }); - } - return stringify({ - errors: [handleSingleError(error)] - }); -} -function formatResult(result) { - return stringify(result); -} - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/graphql-helpers/auto-complete.js": -/*!*******************************************************************!*\ - !*** ../../graphiql-toolkit/esm/graphql-helpers/auto-complete.js ***! - \*******************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.fillLeafs = fillLeafs; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -function fillLeafs(schema, docString, getDefaultFieldNames) { - const insertions = []; - if (!schema || !docString) { - return { - insertions, - result: docString - }; - } - let ast; - try { - ast = (0, _graphql.parse)(docString); - } catch (_a) { - return { - insertions, - result: docString - }; - } - const fieldNameFn = getDefaultFieldNames || defaultGetDefaultFieldNames; - const typeInfo = new _graphql.TypeInfo(schema); - (0, _graphql.visit)(ast, { - leave(node) { - typeInfo.leave(node); - }, - enter(node) { - typeInfo.enter(node); - if (node.kind === 'Field' && !node.selectionSet) { - const fieldType = typeInfo.getType(); - const selectionSet = buildSelectionSet(isFieldType(fieldType), fieldNameFn); - if (selectionSet && node.loc) { - const indent = getIndentation(docString, node.loc.start); - insertions.push({ - index: node.loc.end, - string: ' ' + (0, _graphql.print)(selectionSet).replaceAll('\n', '\n' + indent) - }); - } - } - } - }); - return { - insertions, - result: withInsertions(docString, insertions) - }; -} -function defaultGetDefaultFieldNames(type) { - if (!('getFields' in type)) { - return []; - } - const fields = type.getFields(); - if (fields.id) { - return ['id']; - } - if (fields.edges) { - return ['edges']; - } - if (fields.node) { - return ['node']; - } - const leafFieldNames = []; - for (const fieldName of Object.keys(fields)) { - if ((0, _graphql.isLeafType)(fields[fieldName].type)) { - leafFieldNames.push(fieldName); - } - } - return leafFieldNames; -} -function buildSelectionSet(type, getDefaultFieldNames) { - const namedType = (0, _graphql.getNamedType)(type); - if (!type || (0, _graphql.isLeafType)(type)) { - return; - } - const fieldNames = getDefaultFieldNames(namedType); - if (!Array.isArray(fieldNames) || fieldNames.length === 0 || !('getFields' in namedType)) { - return; - } - return { - kind: _graphql.Kind.SELECTION_SET, - selections: fieldNames.map(fieldName => { - const fieldDef = namedType.getFields()[fieldName]; - const fieldType = fieldDef ? fieldDef.type : null; - return { - kind: _graphql.Kind.FIELD, - name: { - kind: _graphql.Kind.NAME, - value: fieldName - }, - selectionSet: buildSelectionSet(fieldType, getDefaultFieldNames) - }; - }) - }; -} -function withInsertions(initial, insertions) { - if (insertions.length === 0) { - return initial; - } - let edited = ''; - let prevIndex = 0; - for (const { - index, - string - } of insertions) { - edited += initial.slice(prevIndex, index) + string; - prevIndex = index; - } - edited += initial.slice(prevIndex); - return edited; -} -function getIndentation(str, index) { - let indentStart = index; - let indentEnd = index; - while (indentStart) { - const c = str.charCodeAt(indentStart - 1); - if (c === 10 || c === 13 || c === 0x2028 || c === 0x2029) { - break; - } - indentStart--; - if (c !== 9 && c !== 11 && c !== 12 && c !== 32 && c !== 160) { - indentEnd = indentStart; - } - } - return str.slice(indentStart, indentEnd); -} -function isFieldType(fieldType) { - if (fieldType) { - return fieldType; - } -} - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/graphql-helpers/index.js": -/*!***********************************************************!*\ - !*** ../../graphiql-toolkit/esm/graphql-helpers/index.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -var _autoComplete = __webpack_require__(/*! ./auto-complete */ "../../graphiql-toolkit/esm/graphql-helpers/auto-complete.js"); -Object.keys(_autoComplete).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _autoComplete[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _autoComplete[key]; - } - }); -}); -var _mergeAst = __webpack_require__(/*! ./merge-ast */ "../../graphiql-toolkit/esm/graphql-helpers/merge-ast.js"); -Object.keys(_mergeAst).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _mergeAst[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _mergeAst[key]; - } - }); -}); -var _operationName = __webpack_require__(/*! ./operation-name */ "../../graphiql-toolkit/esm/graphql-helpers/operation-name.js"); -Object.keys(_operationName).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _operationName[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _operationName[key]; - } - }); -}); - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/graphql-helpers/merge-ast.js": -/*!***************************************************************!*\ - !*** ../../graphiql-toolkit/esm/graphql-helpers/merge-ast.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.mergeAst = mergeAst; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -function uniqueBy(array, iteratee) { - var _a; - const FilteredMap = new Map(); - const result = []; - for (const item of array) { - if (item.kind === 'Field') { - const uniqueValue = iteratee(item); - const existing = FilteredMap.get(uniqueValue); - if ((_a = item.directives) === null || _a === void 0 ? void 0 : _a.length) { - const itemClone = Object.assign({}, item); - result.push(itemClone); - } else if ((existing === null || existing === void 0 ? void 0 : existing.selectionSet) && item.selectionSet) { - existing.selectionSet.selections = [...existing.selectionSet.selections, ...item.selectionSet.selections]; - } else if (!existing) { - const itemClone = Object.assign({}, item); - FilteredMap.set(uniqueValue, itemClone); - result.push(itemClone); - } - } else { - result.push(item); - } - } - return result; -} -function inlineRelevantFragmentSpreads(fragmentDefinitions, selections, selectionSetType) { - var _a; - const selectionSetTypeName = selectionSetType ? (0, _graphql.getNamedType)(selectionSetType).name : null; - const outputSelections = []; - const seenSpreads = []; - for (let selection of selections) { - if (selection.kind === 'FragmentSpread') { - const fragmentName = selection.name.value; - if (!selection.directives || selection.directives.length === 0) { - if (seenSpreads.includes(fragmentName)) { - continue; - } else { - seenSpreads.push(fragmentName); - } - } - const fragmentDefinition = fragmentDefinitions[selection.name.value]; - if (fragmentDefinition) { - const { - typeCondition, - directives, - selectionSet - } = fragmentDefinition; - selection = { - kind: _graphql.Kind.INLINE_FRAGMENT, - typeCondition, - directives, - selectionSet - }; - } - } - if (selection.kind === _graphql.Kind.INLINE_FRAGMENT && (!selection.directives || ((_a = selection.directives) === null || _a === void 0 ? void 0 : _a.length) === 0)) { - const fragmentTypeName = selection.typeCondition ? selection.typeCondition.name.value : null; - if (!fragmentTypeName || fragmentTypeName === selectionSetTypeName) { - outputSelections.push(...inlineRelevantFragmentSpreads(fragmentDefinitions, selection.selectionSet.selections, selectionSetType)); - continue; - } - } - outputSelections.push(selection); - } - return outputSelections; -} -function mergeAst(documentAST, schema) { - const typeInfo = schema ? new _graphql.TypeInfo(schema) : null; - const fragmentDefinitions = Object.create(null); - for (const definition of documentAST.definitions) { - if (definition.kind === _graphql.Kind.FRAGMENT_DEFINITION) { - fragmentDefinitions[definition.name.value] = definition; - } - } - const flattenVisitors = { - SelectionSet(node) { - const selectionSetType = typeInfo ? typeInfo.getParentType() : null; - let { - selections - } = node; - selections = inlineRelevantFragmentSpreads(fragmentDefinitions, selections, selectionSetType); - return Object.assign(Object.assign({}, node), { - selections - }); - }, - FragmentDefinition() { - return null; - } - }; - const flattenedAST = (0, _graphql.visit)(documentAST, typeInfo ? (0, _graphql.visitWithTypeInfo)(typeInfo, flattenVisitors) : flattenVisitors); - const deduplicateVisitors = { - SelectionSet(node) { - let { - selections - } = node; - selections = uniqueBy(selections, selection => selection.alias ? selection.alias.value : selection.name.value); - return Object.assign(Object.assign({}, node), { - selections - }); - }, - FragmentDefinition() { - return null; - } - }; - return (0, _graphql.visit)(flattenedAST, deduplicateVisitors); -} - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/graphql-helpers/operation-name.js": -/*!********************************************************************!*\ - !*** ../../graphiql-toolkit/esm/graphql-helpers/operation-name.js ***! - \********************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getSelectedOperationName = getSelectedOperationName; -function getSelectedOperationName(prevOperations, prevSelectedOperationName, operations) { - if (!operations || operations.length < 1) { - return; - } - const names = operations.map(op => { - var _a; - return (_a = op.name) === null || _a === void 0 ? void 0 : _a.value; - }); - if (prevSelectedOperationName && names.includes(prevSelectedOperationName)) { - return prevSelectedOperationName; - } - if (prevSelectedOperationName && prevOperations) { - const prevNames = prevOperations.map(op => { - var _a; - return (_a = op.name) === null || _a === void 0 ? void 0 : _a.value; - }); - const prevIndex = prevNames.indexOf(prevSelectedOperationName); - if (prevIndex !== -1 && prevIndex < names.length) { - return names[prevIndex]; - } - } - return names[0]; -} - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/index.js": -/*!*******************************************!*\ - !*** ../../graphiql-toolkit/esm/index.js ***! - \*******************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -var _asyncHelpers = __webpack_require__(/*! ./async-helpers */ "../../graphiql-toolkit/esm/async-helpers/index.js"); -Object.keys(_asyncHelpers).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _asyncHelpers[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _asyncHelpers[key]; - } - }); -}); -var _createFetcher = __webpack_require__(/*! ./create-fetcher */ "../../graphiql-toolkit/esm/create-fetcher/index.js"); -Object.keys(_createFetcher).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _createFetcher[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _createFetcher[key]; - } - }); -}); -var _format = __webpack_require__(/*! ./format */ "../../graphiql-toolkit/esm/format/index.js"); -Object.keys(_format).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _format[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _format[key]; - } - }); -}); -var _graphqlHelpers = __webpack_require__(/*! ./graphql-helpers */ "../../graphiql-toolkit/esm/graphql-helpers/index.js"); -Object.keys(_graphqlHelpers).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _graphqlHelpers[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _graphqlHelpers[key]; - } - }); -}); -var _storage = __webpack_require__(/*! ./storage */ "../../graphiql-toolkit/esm/storage/index.js"); -Object.keys(_storage).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _storage[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _storage[key]; - } - }); -}); - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/storage/base.js": -/*!**************************************************!*\ - !*** ../../graphiql-toolkit/esm/storage/base.js ***! - \**************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StorageAPI = void 0; -function isQuotaError(storage, e) { - return e instanceof DOMException && (e.code === 22 || e.code === 1014 || e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && storage.length !== 0; -} -class StorageAPI { - constructor(storage) { - if (storage) { - this.storage = storage; - } else if (storage === null) { - this.storage = null; - } else if (typeof window === 'undefined') { - this.storage = null; - } else { - this.storage = { - getItem: window.localStorage.getItem.bind(window.localStorage), - setItem: window.localStorage.setItem.bind(window.localStorage), - removeItem: window.localStorage.removeItem.bind(window.localStorage), - get length() { - let keys = 0; - for (const key in window.localStorage) { - if (key.indexOf(`${STORAGE_NAMESPACE}:`) === 0) { - keys += 1; - } - } - return keys; - }, - clear() { - for (const key in window.localStorage) { - if (key.indexOf(`${STORAGE_NAMESPACE}:`) === 0) { - window.localStorage.removeItem(key); - } - } - } - }; - } - } - get(name) { - if (!this.storage) { - return null; - } - const key = `${STORAGE_NAMESPACE}:${name}`; - const value = this.storage.getItem(key); - if (value === 'null' || value === 'undefined') { - this.storage.removeItem(key); - return null; - } - return value || null; - } - set(name, value) { - let quotaError = false; - let error = null; - if (this.storage) { - const key = `${STORAGE_NAMESPACE}:${name}`; - if (value) { - try { - this.storage.setItem(key, value); - } catch (e) { - error = e instanceof Error ? e : new Error(`${e}`); - quotaError = isQuotaError(this.storage, e); - } - } else { - this.storage.removeItem(key); - } - } - return { - isQuotaError: quotaError, - error - }; - } - clear() { - if (this.storage) { - this.storage.clear(); - } - } -} -exports.StorageAPI = StorageAPI; -const STORAGE_NAMESPACE = 'graphiql'; - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/storage/custom.js": -/*!****************************************************!*\ - !*** ../../graphiql-toolkit/esm/storage/custom.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createLocalStorage = createLocalStorage; -function createLocalStorage(_ref) { - let { - namespace - } = _ref; - const storageKeyPrefix = `${namespace}:`; - const getStorageKey = key => `${storageKeyPrefix}${key}`; - const storage = { - setItem: (key, value) => localStorage.setItem(getStorageKey(key), value), - getItem: key => localStorage.getItem(getStorageKey(key)), - removeItem: key => localStorage.removeItem(getStorageKey(key)), - get length() { - let keys = 0; - for (const key in window.localStorage) { - if (key.indexOf(storageKeyPrefix) === 0) { - keys += 1; - } - } - return keys; - }, - clear() { - for (const key in window.localStorage) { - if (key.indexOf(storageKeyPrefix) === 0) { - window.localStorage.removeItem(key); - } - } - } - }; - return storage; -} - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/storage/history.js": -/*!*****************************************************!*\ - !*** ../../graphiql-toolkit/esm/storage/history.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.HistoryStore = void 0; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -var _query = __webpack_require__(/*! ./query */ "../../graphiql-toolkit/esm/storage/query.js"); -const MAX_QUERY_SIZE = 100000; -class HistoryStore { - constructor(storage, maxHistoryLength) { - var _this = this; - this.storage = storage; - this.maxHistoryLength = maxHistoryLength; - this.updateHistory = _ref => { - let { - query, - variables, - headers, - operationName - } = _ref; - if (!this.shouldSaveQuery(query, variables, headers, this.history.fetchRecent())) { - return; - } - this.history.push({ - query, - variables, - headers, - operationName - }); - const historyQueries = this.history.items; - const favoriteQueries = this.favorite.items; - this.queries = historyQueries.concat(favoriteQueries); - }; - this.deleteHistory = function (_ref2) { - let { - query, - variables, - headers, - operationName, - favorite - } = _ref2; - let clearFavorites = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - function deleteFromStore(store) { - const found = store.items.find(x => x.query === query && x.variables === variables && x.headers === headers && x.operationName === operationName); - if (found) { - store.delete(found); - } - } - if (favorite || clearFavorites) { - deleteFromStore(_this.favorite); - } - if (!favorite || clearFavorites) { - deleteFromStore(_this.history); - } - _this.queries = [..._this.history.items, ..._this.favorite.items]; - }; - this.history = new _query.QueryStore('queries', this.storage, this.maxHistoryLength); - this.favorite = new _query.QueryStore('favorites', this.storage, null); - this.queries = [...this.history.fetchAll(), ...this.favorite.fetchAll()]; - } - shouldSaveQuery(query, variables, headers, lastQuerySaved) { - if (!query) { - return false; - } - try { - (0, _graphql.parse)(query); - } catch (_a) { - return false; - } - if (query.length > MAX_QUERY_SIZE) { - return false; - } - if (!lastQuerySaved) { - return true; - } - if (JSON.stringify(query) === JSON.stringify(lastQuerySaved.query)) { - if (JSON.stringify(variables) === JSON.stringify(lastQuerySaved.variables)) { - if (JSON.stringify(headers) === JSON.stringify(lastQuerySaved.headers)) { - return false; - } - if (headers && !lastQuerySaved.headers) { - return false; - } - } - if (variables && !lastQuerySaved.variables) { - return false; - } - } - return true; - } - toggleFavorite(_ref3) { - let { - query, - variables, - headers, - operationName, - label, - favorite - } = _ref3; - const item = { - query, - variables, - headers, - operationName, - label - }; - if (favorite) { - item.favorite = false; - this.favorite.delete(item); - this.history.push(item); - } else { - item.favorite = true; - this.favorite.push(item); - this.history.delete(item); - } - this.queries = [...this.history.items, ...this.favorite.items]; - } - editLabel(_ref4, index) { - let { - query, - variables, - headers, - operationName, - label, - favorite - } = _ref4; - const item = { - query, - variables, - headers, - operationName, - label - }; - if (favorite) { - this.favorite.edit(Object.assign(Object.assign({}, item), { - favorite - }), index); - } else { - this.history.edit(item, index); - } - this.queries = [...this.history.items, ...this.favorite.items]; - } -} -exports.HistoryStore = HistoryStore; - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/storage/index.js": -/*!***************************************************!*\ - !*** ../../graphiql-toolkit/esm/storage/index.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -var _base = __webpack_require__(/*! ./base */ "../../graphiql-toolkit/esm/storage/base.js"); -Object.keys(_base).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _base[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _base[key]; - } - }); -}); -var _history = __webpack_require__(/*! ./history */ "../../graphiql-toolkit/esm/storage/history.js"); -Object.keys(_history).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _history[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _history[key]; - } - }); -}); -var _query = __webpack_require__(/*! ./query */ "../../graphiql-toolkit/esm/storage/query.js"); -Object.keys(_query).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _query[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _query[key]; - } - }); -}); -var _custom = __webpack_require__(/*! ./custom */ "../../graphiql-toolkit/esm/storage/custom.js"); -Object.keys(_custom).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (key in exports && exports[key] === _custom[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _custom[key]; - } - }); -}); - -/***/ }), - -/***/ "../../graphiql-toolkit/esm/storage/query.js": -/*!***************************************************!*\ - !*** ../../graphiql-toolkit/esm/storage/query.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.QueryStore = void 0; -class QueryStore { - constructor(key, storage) { - let maxSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - this.key = key; - this.storage = storage; - this.maxSize = maxSize; - this.items = this.fetchAll(); - } - get length() { - return this.items.length; - } - contains(item) { - return this.items.some(x => x.query === item.query && x.variables === item.variables && x.headers === item.headers && x.operationName === item.operationName); - } - edit(item, index) { - if (typeof index === 'number' && this.items[index]) { - const found = this.items[index]; - if (found.query === item.query && found.variables === item.variables && found.headers === item.headers && found.operationName === item.operationName) { - this.items.splice(index, 1, item); - this.save(); - return; - } - } - const itemIndex = this.items.findIndex(x => x.query === item.query && x.variables === item.variables && x.headers === item.headers && x.operationName === item.operationName); - if (itemIndex !== -1) { - this.items.splice(itemIndex, 1, item); - this.save(); - } - } - delete(item) { - const itemIndex = this.items.findIndex(x => x.query === item.query && x.variables === item.variables && x.headers === item.headers && x.operationName === item.operationName); - if (itemIndex !== -1) { - this.items.splice(itemIndex, 1); - this.save(); - } - } - fetchRecent() { - return this.items.at(-1); - } - fetchAll() { - const raw = this.storage.get(this.key); - if (raw) { - return JSON.parse(raw)[this.key]; - } - return []; - } - push(item) { - const items = [...this.items, item]; - if (this.maxSize && items.length > this.maxSize) { - items.shift(); - } - for (let attempts = 0; attempts < 5; attempts++) { - const response = this.storage.set(this.key, JSON.stringify({ - [this.key]: items - })); - if (!(response === null || response === void 0 ? void 0 : response.error)) { - this.items = items; - } else if (response.isQuotaError && this.maxSize) { - items.shift(); - } else { - return; - } - } - } - save() { - this.storage.set(this.key, JSON.stringify({ - [this.key]: this.items - })); - } -} -exports.QueryStore = QueryStore; - -/***/ }), - -/***/ "./components/GraphiQL.tsx": -/*!*********************************!*\ - !*** ./components/GraphiQL.tsx ***! - \*********************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.GraphiQL = GraphiQL; -exports.GraphiQLInterface = GraphiQLInterface; -var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); -var _react2 = __webpack_require__(/*! @graphiql/react */ "../../graphiql-react/dist/index.js"); -function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } -function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } -const majorVersion = parseInt(_react.default.version.slice(0, 2), 10); -if (majorVersion < 16) { - throw new Error(['GraphiQL 0.18.0 and after is not compatible with React 15 or below.', 'If you are using a CDN source (jsdelivr, unpkg, etc), follow this example:', 'https://github.com/graphql/graphiql/blob/master/examples/graphiql-cdn/index.html#L49'].join('\n')); -} -/** - * The top-level React component for GraphiQL, intended to encompass the entire - * browser viewport. - * - * @see https://github.com/graphql/graphiql#usage - */ - -function GraphiQL(_ref) { - let { - dangerouslyAssumeSchemaIsValid, - defaultQuery, - defaultTabs, - externalFragments, - fetcher, - getDefaultFieldNames, - headers, - inputValueDeprecation, - introspectionQueryName, - maxHistoryLength, - onEditOperationName, - onSchemaChange, - onTabChange, - onTogglePluginVisibility, - operationName, - plugins, - query, - response, - schema, - schemaDescription, - shouldPersistHeaders, - storage, - validationRules, - variables, - visiblePlugin, - defaultHeaders, - ...props - } = _ref; - // Ensure props are correct - if (typeof fetcher !== 'function') { - throw new TypeError('The `GraphiQL` component requires a `fetcher` function to be passed as prop.'); - } - return /*#__PURE__*/_react.default.createElement(_react2.GraphiQLProvider, { - getDefaultFieldNames: getDefaultFieldNames, - dangerouslyAssumeSchemaIsValid: dangerouslyAssumeSchemaIsValid, - defaultQuery: defaultQuery, - defaultHeaders: defaultHeaders, - defaultTabs: defaultTabs, - externalFragments: externalFragments, - fetcher: fetcher, - headers: headers, - inputValueDeprecation: inputValueDeprecation, - introspectionQueryName: introspectionQueryName, - maxHistoryLength: maxHistoryLength, - onEditOperationName: onEditOperationName, - onSchemaChange: onSchemaChange, - onTabChange: onTabChange, - onTogglePluginVisibility: onTogglePluginVisibility, - plugins: plugins, - visiblePlugin: visiblePlugin, - operationName: operationName, - query: query, - response: response, - schema: schema, - schemaDescription: schemaDescription, - shouldPersistHeaders: shouldPersistHeaders, - storage: storage, - validationRules: validationRules, - variables: variables - }, /*#__PURE__*/_react.default.createElement(GraphiQLInterface, _extends({ - showPersistHeadersSettings: shouldPersistHeaders !== false - }, props))); -} - -// Export main windows/panes to be used separately if desired. -GraphiQL.Logo = GraphiQLLogo; -GraphiQL.Toolbar = GraphiQLToolbar; -GraphiQL.Footer = GraphiQLFooter; -function GraphiQLInterface(props) { - var _props$isHeadersEdito, _pluginContext$visibl, _props$toolbar, _props$toolbar2; - const isHeadersEditorEnabled = (_props$isHeadersEdito = props.isHeadersEditorEnabled) !== null && _props$isHeadersEdito !== void 0 ? _props$isHeadersEdito : true; - const editorContext = (0, _react2.useEditorContext)({ - nonNull: true - }); - const executionContext = (0, _react2.useExecutionContext)({ - nonNull: true - }); - const schemaContext = (0, _react2.useSchemaContext)({ - nonNull: true - }); - const storageContext = (0, _react2.useStorageContext)(); - const pluginContext = (0, _react2.usePluginContext)(); - const copy = (0, _react2.useCopyQuery)({ - onCopyQuery: props.onCopyQuery - }); - const merge = (0, _react2.useMergeQuery)(); - const prettify = (0, _react2.usePrettifyEditors)(); - const { - theme, - setTheme - } = (0, _react2.useTheme)(); - const PluginContent = pluginContext === null || pluginContext === void 0 ? void 0 : (_pluginContext$visibl = pluginContext.visiblePlugin) === null || _pluginContext$visibl === void 0 ? void 0 : _pluginContext$visibl.content; - const pluginResize = (0, _react2.useDragResize)({ - defaultSizeRelation: 1 / 3, - direction: 'horizontal', - initiallyHidden: pluginContext !== null && pluginContext !== void 0 && pluginContext.visiblePlugin ? undefined : 'first', - onHiddenElementChange(resizableElement) { - if (resizableElement === 'first') { - pluginContext === null || pluginContext === void 0 ? void 0 : pluginContext.setVisiblePlugin(null); - } - }, - sizeThresholdSecond: 200, - storageKey: 'docExplorerFlex' - }); - const editorResize = (0, _react2.useDragResize)({ - direction: 'horizontal', - storageKey: 'editorFlex' - }); - const editorToolsResize = (0, _react2.useDragResize)({ - defaultSizeRelation: 3, - direction: 'vertical', - initiallyHidden: (() => { - if (props.defaultEditorToolsVisibility === 'variables' || props.defaultEditorToolsVisibility === 'headers') { - return; - } - if (typeof props.defaultEditorToolsVisibility === 'boolean') { - return props.defaultEditorToolsVisibility ? undefined : 'second'; - } - return editorContext.initialVariables || editorContext.initialHeaders ? undefined : 'second'; - })(), - sizeThresholdSecond: 60, - storageKey: 'secondaryEditorFlex' - }); - const [activeSecondaryEditor, setActiveSecondaryEditor] = (0, _react.useState)(() => { - if (props.defaultEditorToolsVisibility === 'variables' || props.defaultEditorToolsVisibility === 'headers') { - return props.defaultEditorToolsVisibility; - } - return !editorContext.initialVariables && editorContext.initialHeaders && isHeadersEditorEnabled ? 'headers' : 'variables'; - }); - const [showDialog, setShowDialog] = (0, _react.useState)(null); - const [clearStorageStatus, setClearStorageStatus] = (0, _react.useState)(null); - const children = _react.default.Children.toArray(props.children); - const logo = children.find(child => isChildComponentType(child, GraphiQL.Logo)) || /*#__PURE__*/_react.default.createElement(GraphiQL.Logo, null); - const toolbar = children.find(child => isChildComponentType(child, GraphiQL.Toolbar)) || /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_react2.ToolbarButton, { - onClick: prettify, - label: "Prettify query (Shift-Ctrl-P)" - }, /*#__PURE__*/_react.default.createElement(_react2.PrettifyIcon, { - className: "graphiql-toolbar-icon", - "aria-hidden": "true" - })), /*#__PURE__*/_react.default.createElement(_react2.ToolbarButton, { - onClick: merge, - label: "Merge fragments into query (Shift-Ctrl-M)" - }, /*#__PURE__*/_react.default.createElement(_react2.MergeIcon, { - className: "graphiql-toolbar-icon", - "aria-hidden": "true" - })), /*#__PURE__*/_react.default.createElement(_react2.ToolbarButton, { - onClick: copy, - label: "Copy query (Shift-Ctrl-C)" - }, /*#__PURE__*/_react.default.createElement(_react2.CopyIcon, { - className: "graphiql-toolbar-icon", - "aria-hidden": "true" - })), ((_props$toolbar = props.toolbar) === null || _props$toolbar === void 0 ? void 0 : _props$toolbar.additionalContent) && props.toolbar.additionalContent, ((_props$toolbar2 = props.toolbar) === null || _props$toolbar2 === void 0 ? void 0 : _props$toolbar2.additionalComponent) && /*#__PURE__*/_react.default.createElement(props.toolbar.additionalComponent, null)); - const footer = children.find(child => isChildComponentType(child, GraphiQL.Footer)); - const onClickReference = (0, _react.useCallback)(() => { - if (pluginResize.hiddenElement === 'first') { - pluginResize.setHiddenElement(null); - } - }, [pluginResize]); - const handleClearData = (0, _react.useCallback)(() => { - try { - storageContext === null || storageContext === void 0 ? void 0 : storageContext.clear(); - setClearStorageStatus('success'); - } catch { - setClearStorageStatus('error'); - } - }, [storageContext]); - const handlePersistHeaders = (0, _react.useCallback)(event => { - editorContext.setShouldPersistHeaders(event.currentTarget.dataset.value === 'true'); - }, [editorContext]); - const handleChangeTheme = (0, _react.useCallback)(event => { - const selectedTheme = event.currentTarget.dataset.theme; - setTheme(selectedTheme || null); - }, [setTheme]); - const handleAddTab = editorContext.addTab; - const handleRefetchSchema = schemaContext.introspect; - const handleReorder = editorContext.moveTab; - const handleShowDialog = (0, _react.useCallback)(event => { - setShowDialog(event.currentTarget.dataset.value); - }, []); - const handlePluginClick = (0, _react.useCallback)(e => { - const context = pluginContext; - const pluginIndex = Number(e.currentTarget.dataset.index); - const plugin = context.plugins.find((_, index) => pluginIndex === index); - const isVisible = plugin === context.visiblePlugin; - if (isVisible) { - context.setVisiblePlugin(null); - pluginResize.setHiddenElement('first'); - } else { - context.setVisiblePlugin(plugin); - pluginResize.setHiddenElement(null); - } - }, [pluginContext, pluginResize]); - const handleToolsTabClick = (0, _react.useCallback)(event => { - if (editorToolsResize.hiddenElement === 'second') { - editorToolsResize.setHiddenElement(null); - } - setActiveSecondaryEditor(event.currentTarget.dataset.name); - }, [editorToolsResize]); - const toggleEditorTools = (0, _react.useCallback)(() => { - editorToolsResize.setHiddenElement(editorToolsResize.hiddenElement === 'second' ? null : 'second'); - }, [editorToolsResize]); - const handleOpenShortKeysDialog = (0, _react.useCallback)(isOpen => { - if (!isOpen) { - setShowDialog(null); - } - }, []); - const handleOpenSettingsDialog = (0, _react.useCallback)(isOpen => { - if (!isOpen) { - setShowDialog(null); - setClearStorageStatus(null); - } - }, []); - const addTab = /*#__PURE__*/_react.default.createElement(_react2.Tooltip, { - label: "Add tab" - }, /*#__PURE__*/_react.default.createElement(_react2.UnStyledButton, { - type: "button", - className: "graphiql-tab-add", - onClick: handleAddTab, - "aria-label": "Add tab" - }, /*#__PURE__*/_react.default.createElement(_react2.PlusIcon, { - "aria-hidden": "true" - }))); - return /*#__PURE__*/_react.default.createElement(_react2.Tooltip.Provider, null, /*#__PURE__*/_react.default.createElement("div", { - "data-testid": "graphiql-container", - className: "graphiql-container" - }, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-sidebar" - }, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-sidebar-section" - }, pluginContext === null || pluginContext === void 0 ? void 0 : pluginContext.plugins.map((plugin, index) => { - const isVisible = plugin === pluginContext.visiblePlugin; - const label = `${isVisible ? 'Hide' : 'Show'} ${plugin.title}`; - const Icon = plugin.icon; - return /*#__PURE__*/_react.default.createElement(_react2.Tooltip, { - key: plugin.title, - label: label - }, /*#__PURE__*/_react.default.createElement(_react2.UnStyledButton, { - type: "button", - className: isVisible ? 'active' : '', - onClick: handlePluginClick, - "data-index": index, - "aria-label": label - }, /*#__PURE__*/_react.default.createElement(Icon, { - "aria-hidden": "true" - }))); - })), /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-sidebar-section" - }, /*#__PURE__*/_react.default.createElement(_react2.Tooltip, { - label: "Re-fetch GraphQL schema" - }, /*#__PURE__*/_react.default.createElement(_react2.UnStyledButton, { - type: "button", - disabled: schemaContext.isFetching, - onClick: handleRefetchSchema, - "aria-label": "Re-fetch GraphQL schema" - }, /*#__PURE__*/_react.default.createElement(_react2.ReloadIcon, { - className: schemaContext.isFetching ? 'graphiql-spin' : '', - "aria-hidden": "true" - }))), /*#__PURE__*/_react.default.createElement(_react2.Tooltip, { - label: "Open short keys dialog" - }, /*#__PURE__*/_react.default.createElement(_react2.UnStyledButton, { - type: "button", - "data-value": "short-keys", - onClick: handleShowDialog, - "aria-label": "Open short keys dialog" - }, /*#__PURE__*/_react.default.createElement(_react2.KeyboardShortcutIcon, { - "aria-hidden": "true" - }))), /*#__PURE__*/_react.default.createElement(_react2.Tooltip, { - label: "Open settings dialog" - }, /*#__PURE__*/_react.default.createElement(_react2.UnStyledButton, { - type: "button", - "data-value": "settings", - onClick: handleShowDialog, - "aria-label": "Open settings dialog" - }, /*#__PURE__*/_react.default.createElement(_react2.SettingsIcon, { - "aria-hidden": "true" - }))))), /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-main" - }, /*#__PURE__*/_react.default.createElement("div", { - ref: pluginResize.firstRef, - style: { - // Make sure the container shrinks when containing long - // non-breaking texts - minWidth: '200px' - } - }, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-plugin" - }, PluginContent ? /*#__PURE__*/_react.default.createElement(PluginContent, null) : null)), (pluginContext === null || pluginContext === void 0 ? void 0 : pluginContext.visiblePlugin) && /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-horizontal-drag-bar", - ref: pluginResize.dragBarRef - }), /*#__PURE__*/_react.default.createElement("div", { - ref: pluginResize.secondRef, - className: "graphiql-sessions" - }, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-session-header" - }, /*#__PURE__*/_react.default.createElement(_react2.Tabs, { - values: editorContext.tabs, - onReorder: handleReorder, - "aria-label": "Select active operation" - }, editorContext.tabs.length > 1 && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, editorContext.tabs.map((tab, index) => /*#__PURE__*/_react.default.createElement(_react2.Tab, { - key: tab.id, - value: tab, - isActive: index === editorContext.activeTabIndex - }, /*#__PURE__*/_react.default.createElement(_react2.Tab.Button, { - "aria-controls": "graphiql-session", - id: `graphiql-session-tab-${index}`, - onClick: () => { - executionContext.stop(); - editorContext.changeTab(index); - } - }, tab.title), /*#__PURE__*/_react.default.createElement(_react2.Tab.Close, { - onClick: () => { - if (editorContext.activeTabIndex === index) { - executionContext.stop(); - } - editorContext.closeTab(index); - } - }))), addTab)), /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-session-header-right" - }, editorContext.tabs.length === 1 && addTab, logo)), /*#__PURE__*/_react.default.createElement("div", { - role: "tabpanel", - id: "graphiql-session", - className: "graphiql-session", - "aria-labelledby": `graphiql-session-tab-${editorContext.activeTabIndex}` - }, /*#__PURE__*/_react.default.createElement("div", { - ref: editorResize.firstRef - }, /*#__PURE__*/_react.default.createElement("div", { - className: `graphiql-editors${editorContext.tabs.length === 1 ? ' full-height' : ''}` - }, /*#__PURE__*/_react.default.createElement("div", { - ref: editorToolsResize.firstRef - }, /*#__PURE__*/_react.default.createElement("section", { - className: "graphiql-query-editor", - "aria-label": "Query Editor" - }, /*#__PURE__*/_react.default.createElement(_react2.QueryEditor, { - editorTheme: props.editorTheme, - keyMap: props.keyMap, - onClickReference: onClickReference, - onCopyQuery: props.onCopyQuery, - onEdit: props.onEditQuery, - readOnly: props.readOnly - }), /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-toolbar", - role: "toolbar", - "aria-label": "Editor Commands" - }, /*#__PURE__*/_react.default.createElement(_react2.ExecuteButton, null), toolbar))), /*#__PURE__*/_react.default.createElement("div", { - ref: editorToolsResize.dragBarRef - }, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-editor-tools" - }, /*#__PURE__*/_react.default.createElement(_react2.UnStyledButton, { - type: "button", - className: activeSecondaryEditor === 'variables' && editorToolsResize.hiddenElement !== 'second' ? 'active' : '', - onClick: handleToolsTabClick, - "data-name": "variables" - }, "Variables"), isHeadersEditorEnabled && /*#__PURE__*/_react.default.createElement(_react2.UnStyledButton, { - type: "button", - className: activeSecondaryEditor === 'headers' && editorToolsResize.hiddenElement !== 'second' ? 'active' : '', - onClick: handleToolsTabClick, - "data-name": "headers" - }, "Headers"), /*#__PURE__*/_react.default.createElement(_react2.Tooltip, { - label: editorToolsResize.hiddenElement === 'second' ? 'Show editor tools' : 'Hide editor tools' - }, /*#__PURE__*/_react.default.createElement(_react2.UnStyledButton, { - type: "button", - onClick: toggleEditorTools, - "aria-label": editorToolsResize.hiddenElement === 'second' ? 'Show editor tools' : 'Hide editor tools', - className: "graphiql-toggle-editor-tools" - }, editorToolsResize.hiddenElement === 'second' ? /*#__PURE__*/_react.default.createElement(_react2.ChevronUpIcon, { - className: "graphiql-chevron-icon", - "aria-hidden": "true" - }) : /*#__PURE__*/_react.default.createElement(_react2.ChevronDownIcon, { - className: "graphiql-chevron-icon", - "aria-hidden": "true" - }))))), /*#__PURE__*/_react.default.createElement("div", { - ref: editorToolsResize.secondRef - }, /*#__PURE__*/_react.default.createElement("section", { - className: "graphiql-editor-tool", - "aria-label": activeSecondaryEditor === 'variables' ? 'Variables' : 'Headers' - }, /*#__PURE__*/_react.default.createElement(_react2.VariableEditor, { - editorTheme: props.editorTheme, - isHidden: activeSecondaryEditor !== 'variables', - keyMap: props.keyMap, - onEdit: props.onEditVariables, - onClickReference: onClickReference, - readOnly: props.readOnly - }), isHeadersEditorEnabled && /*#__PURE__*/_react.default.createElement(_react2.HeaderEditor, { - editorTheme: props.editorTheme, - isHidden: activeSecondaryEditor !== 'headers', - keyMap: props.keyMap, - onEdit: props.onEditHeaders, - readOnly: props.readOnly - }))))), /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-horizontal-drag-bar", - ref: editorResize.dragBarRef - }), /*#__PURE__*/_react.default.createElement("div", { - ref: editorResize.secondRef - }, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-response" - }, executionContext.isFetching ? /*#__PURE__*/_react.default.createElement(_react2.Spinner, null) : null, /*#__PURE__*/_react.default.createElement(_react2.ResponseEditor, { - editorTheme: props.editorTheme, - responseTooltip: props.responseTooltip, - keyMap: props.keyMap - }), footer))))), /*#__PURE__*/_react.default.createElement(_react2.Dialog, { - open: showDialog === 'short-keys', - onOpenChange: handleOpenShortKeysDialog - }, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-header" - }, /*#__PURE__*/_react.default.createElement(_react2.Dialog.Title, { - className: "graphiql-dialog-title" - }, "Short Keys"), /*#__PURE__*/_react.default.createElement(_react2.Dialog.Close, null)), /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section" - }, /*#__PURE__*/_react.default.createElement(ShortKeys, { - keyMap: props.keyMap || 'sublime' - }))), /*#__PURE__*/_react.default.createElement(_react2.Dialog, { - open: showDialog === 'settings', - onOpenChange: handleOpenSettingsDialog - }, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-header" - }, /*#__PURE__*/_react.default.createElement(_react2.Dialog.Title, { - className: "graphiql-dialog-title" - }, "Settings"), /*#__PURE__*/_react.default.createElement(_react2.Dialog.Close, null)), props.showPersistHeadersSettings ? /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section" - }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section-title" - }, "Persist headers"), /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section-caption" - }, "Save headers upon reloading.", ' ', /*#__PURE__*/_react.default.createElement("span", { - className: "graphiql-warning-text" - }, "Only enable if you trust this device."))), /*#__PURE__*/_react.default.createElement(_react2.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_react2.Button, { - type: "button", - id: "enable-persist-headers", - className: editorContext.shouldPersistHeaders ? 'active' : '', - "data-value": "true", - onClick: handlePersistHeaders - }, "On"), /*#__PURE__*/_react.default.createElement(_react2.Button, { - type: "button", - id: "disable-persist-headers", - className: editorContext.shouldPersistHeaders ? '' : 'active', - onClick: handlePersistHeaders - }, "Off"))) : null, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section" - }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section-title" - }, "Theme"), /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section-caption" - }, "Adjust how the interface looks like.")), /*#__PURE__*/_react.default.createElement(_react2.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_react2.Button, { - type: "button", - className: theme === null ? 'active' : '', - onClick: handleChangeTheme - }, "System"), /*#__PURE__*/_react.default.createElement(_react2.Button, { - type: "button", - className: theme === 'light' ? 'active' : '', - "data-theme": "light", - onClick: handleChangeTheme - }, "Light"), /*#__PURE__*/_react.default.createElement(_react2.Button, { - type: "button", - className: theme === 'dark' ? 'active' : '', - "data-theme": "dark", - onClick: handleChangeTheme - }, "Dark"))), storageContext ? /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section" - }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section-title" - }, "Clear storage"), /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-dialog-section-caption" - }, "Remove all locally stored data and start fresh.")), /*#__PURE__*/_react.default.createElement(_react2.Button, { - type: "button", - state: clearStorageStatus || undefined, - disabled: clearStorageStatus === 'success', - onClick: handleClearData - }, { - success: 'Cleared data', - error: 'Failed' - }[clearStorageStatus] || 'Clear data')) : null))); -} -const modifier = typeof window !== 'undefined' && window.navigator.platform.toLowerCase().indexOf('mac') === 0 ? 'Cmd' : 'Ctrl'; -const SHORT_KEYS = Object.entries({ - 'Search in editor': [modifier, 'F'], - 'Search in documentation': [modifier, 'K'], - 'Execute query': [modifier, 'Enter'], - 'Prettify editors': ['Ctrl', 'Shift', 'P'], - 'Merge fragments definitions into operation definition': ['Ctrl', 'Shift', 'M'], - 'Copy query': ['Ctrl', 'Shift', 'C'], - 'Re-fetch schema using introspection': ['Ctrl', 'Shift', 'R'] -}); -function ShortKeys(_ref2) { - let { - keyMap - } = _ref2; - return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("table", { - className: "graphiql-table" - }, /*#__PURE__*/_react.default.createElement("thead", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("th", null, "Short Key"), /*#__PURE__*/_react.default.createElement("th", null, "Function"))), /*#__PURE__*/_react.default.createElement("tbody", null, SHORT_KEYS.map(_ref3 => { - let [title, keys] = _ref3; - return /*#__PURE__*/_react.default.createElement("tr", { - key: title - }, /*#__PURE__*/_react.default.createElement("td", null, keys.map((key, index, array) => /*#__PURE__*/_react.default.createElement(_react.Fragment, { - key: key - }, /*#__PURE__*/_react.default.createElement("code", { - className: "graphiql-key" - }, key), index !== array.length - 1 && ' + '))), /*#__PURE__*/_react.default.createElement("td", null, title)); - }))), /*#__PURE__*/_react.default.createElement("p", null, "The editors use", ' ', /*#__PURE__*/_react.default.createElement("a", { - href: "https://codemirror.net/5/doc/manual.html#keymaps", - target: "_blank", - rel: "noopener noreferrer" - }, "CodeMirror Key Maps"), ' ', "that add more short keys. This instance of Graph", /*#__PURE__*/_react.default.createElement("em", null, "i"), "QL uses", ' ', /*#__PURE__*/_react.default.createElement("code", null, keyMap), ".")); -} - -// Configure the UI by providing this Component as a child of GraphiQL. -function GraphiQLLogo(props) { - return /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-logo" - }, props.children || /*#__PURE__*/_react.default.createElement("a", { - className: "graphiql-logo-link", - href: "https://github.com/graphql/graphiql", - target: "_blank", - rel: "noreferrer" - }, "Graph", /*#__PURE__*/_react.default.createElement("em", null, "i"), "QL")); -} -GraphiQLLogo.displayName = 'GraphiQLLogo'; - -// Configure the UI by providing this Component as a child of GraphiQL. -function GraphiQLToolbar(props) { - // eslint-disable-next-line react/jsx-no-useless-fragment - return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, props.children); -} -GraphiQLToolbar.displayName = 'GraphiQLToolbar'; - -// Configure the UI by providing this Component as a child of GraphiQL. -function GraphiQLFooter(props) { - return /*#__PURE__*/_react.default.createElement("div", { - className: "graphiql-footer" - }, props.children); -} -GraphiQLFooter.displayName = 'GraphiQLFooter'; - -// Determines if the React child is of the same type of the provided React component -function isChildComponentType(child, component) { - var _child$type; - if (child !== null && child !== void 0 && (_child$type = child.type) !== null && _child$type !== void 0 && _child$type.displayName && child.type.displayName === component.displayName) { - return true; - } - return child.type === component; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/index.js": -/*!***************************************************!*\ - !*** ../../graphql-language-service/esm/index.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "CharacterStream", ({ - enumerable: true, - get: function () { - return _parser.CharacterStream; - } -})); -Object.defineProperty(exports, "CompletionItemKind", ({ - enumerable: true, - get: function () { - return _types.CompletionItemKind; - } -})); -Object.defineProperty(exports, "DIAGNOSTIC_SEVERITY", ({ - enumerable: true, - get: function () { - return _interface.DIAGNOSTIC_SEVERITY; - } -})); -Object.defineProperty(exports, "FileChangeTypeKind", ({ - enumerable: true, - get: function () { - return _types.FileChangeTypeKind; - } -})); -Object.defineProperty(exports, "LexRules", ({ - enumerable: true, - get: function () { - return _parser.LexRules; - } -})); -Object.defineProperty(exports, "ParseRules", ({ - enumerable: true, - get: function () { - return _parser.ParseRules; - } -})); -Object.defineProperty(exports, "Position", ({ - enumerable: true, - get: function () { - return _utils.Position; - } -})); -Object.defineProperty(exports, "Range", ({ - enumerable: true, - get: function () { - return _utils.Range; - } -})); -Object.defineProperty(exports, "RuleKinds", ({ - enumerable: true, - get: function () { - return _parser.RuleKinds; - } -})); -Object.defineProperty(exports, "SEVERITY", ({ - enumerable: true, - get: function () { - return _interface.SEVERITY; - } -})); -Object.defineProperty(exports, "SuggestionCommand", ({ - enumerable: true, - get: function () { - return _interface.SuggestionCommand; - } -})); -Object.defineProperty(exports, "canUseDirective", ({ - enumerable: true, - get: function () { - return _interface.canUseDirective; - } -})); -Object.defineProperty(exports, "collectVariables", ({ - enumerable: true, - get: function () { - return _utils.collectVariables; - } -})); -Object.defineProperty(exports, "getASTNodeAtPosition", ({ - enumerable: true, - get: function () { - return _utils.getASTNodeAtPosition; - } -})); -Object.defineProperty(exports, "getAutocompleteSuggestions", ({ - enumerable: true, - get: function () { - return _interface.getAutocompleteSuggestions; - } -})); -Object.defineProperty(exports, "getDefinitionQueryResultForDefinitionNode", ({ - enumerable: true, - get: function () { - return _interface.getDefinitionQueryResultForDefinitionNode; - } -})); -Object.defineProperty(exports, "getDefinitionQueryResultForField", ({ - enumerable: true, - get: function () { - return _interface.getDefinitionQueryResultForField; - } -})); -Object.defineProperty(exports, "getDefinitionQueryResultForFragmentSpread", ({ - enumerable: true, - get: function () { - return _interface.getDefinitionQueryResultForFragmentSpread; - } -})); -Object.defineProperty(exports, "getDefinitionQueryResultForNamedType", ({ - enumerable: true, - get: function () { - return _interface.getDefinitionQueryResultForNamedType; - } -})); -Object.defineProperty(exports, "getDefinitionState", ({ - enumerable: true, - get: function () { - return _interface.getDefinitionState; - } -})); -Object.defineProperty(exports, "getDiagnostics", ({ - enumerable: true, - get: function () { - return _interface.getDiagnostics; - } -})); -Object.defineProperty(exports, "getFieldDef", ({ - enumerable: true, - get: function () { - return _interface.getFieldDef; - } -})); -Object.defineProperty(exports, "getFragmentDefinitions", ({ - enumerable: true, - get: function () { - return _interface.getFragmentDefinitions; - } -})); -Object.defineProperty(exports, "getFragmentDependencies", ({ - enumerable: true, - get: function () { - return _utils.getFragmentDependencies; - } -})); -Object.defineProperty(exports, "getFragmentDependenciesForAST", ({ - enumerable: true, - get: function () { - return _utils.getFragmentDependenciesForAST; - } -})); -Object.defineProperty(exports, "getHoverInformation", ({ - enumerable: true, - get: function () { - return _interface.getHoverInformation; - } -})); -Object.defineProperty(exports, "getOperationASTFacts", ({ - enumerable: true, - get: function () { - return _utils.getOperationASTFacts; - } -})); -Object.defineProperty(exports, "getOperationFacts", ({ - enumerable: true, - get: function () { - return _utils.getOperationFacts; - } -})); -Object.defineProperty(exports, "getOutline", ({ - enumerable: true, - get: function () { - return _interface.getOutline; - } -})); -Object.defineProperty(exports, "getQueryFacts", ({ - enumerable: true, - get: function () { - return _utils.getQueryFacts; - } -})); -Object.defineProperty(exports, "getRange", ({ - enumerable: true, - get: function () { - return _interface.getRange; - } -})); -Object.defineProperty(exports, "getTokenAtPosition", ({ - enumerable: true, - get: function () { - return _interface.getTokenAtPosition; - } -})); -Object.defineProperty(exports, "getTypeInfo", ({ - enumerable: true, - get: function () { - return _interface.getTypeInfo; - } -})); -Object.defineProperty(exports, "getVariableCompletions", ({ - enumerable: true, - get: function () { - return _interface.getVariableCompletions; - } -})); -Object.defineProperty(exports, "getVariablesJSONSchema", ({ - enumerable: true, - get: function () { - return _utils.getVariablesJSONSchema; - } -})); -Object.defineProperty(exports, "isIgnored", ({ - enumerable: true, - get: function () { - return _parser.isIgnored; - } -})); -Object.defineProperty(exports, "list", ({ - enumerable: true, - get: function () { - return _parser.list; - } -})); -Object.defineProperty(exports, "offsetToPosition", ({ - enumerable: true, - get: function () { - return _utils.offsetToPosition; - } -})); -Object.defineProperty(exports, "onlineParser", ({ - enumerable: true, - get: function () { - return _parser.onlineParser; - } -})); -Object.defineProperty(exports, "opt", ({ - enumerable: true, - get: function () { - return _parser.opt; - } -})); -Object.defineProperty(exports, "p", ({ - enumerable: true, - get: function () { - return _parser.p; - } -})); -Object.defineProperty(exports, "pointToOffset", ({ - enumerable: true, - get: function () { - return _utils.pointToOffset; - } -})); -Object.defineProperty(exports, "t", ({ - enumerable: true, - get: function () { - return _parser.t; - } -})); -Object.defineProperty(exports, "validateQuery", ({ - enumerable: true, - get: function () { - return _interface.validateQuery; - } -})); -Object.defineProperty(exports, "validateWithCustomRules", ({ - enumerable: true, - get: function () { - return _utils.validateWithCustomRules; - } -})); -var _interface = __webpack_require__(/*! ./interface */ "../../graphql-language-service/esm/interface/index.js"); -var _parser = __webpack_require__(/*! ./parser */ "../../graphql-language-service/esm/parser/index.js"); -var _types = __webpack_require__(/*! ./types */ "../../graphql-language-service/esm/types.js"); -var _utils = __webpack_require__(/*! ./utils */ "../../graphql-language-service/esm/utils/index.js"); - -/***/ }), - -/***/ "../../graphql-language-service/esm/interface/autocompleteUtils.js": -/*!*************************************************************************!*\ - !*** ../../graphql-language-service/esm/interface/autocompleteUtils.js ***! - \*************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.forEachState = forEachState; -exports.getDefinitionState = getDefinitionState; -exports.getFieldDef = getFieldDef; -exports.hintList = hintList; -exports.objectValues = objectValues; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -function getDefinitionState(tokenState) { - let definitionState; - forEachState(tokenState, state => { - switch (state.kind) { - case 'Query': - case 'ShortQuery': - case 'Mutation': - case 'Subscription': - case 'FragmentDefinition': - definitionState = state; - break; - } - }); - return definitionState; -} -function getFieldDef(schema, type, fieldName) { - if (fieldName === _graphql.SchemaMetaFieldDef.name && schema.getQueryType() === type) { - return _graphql.SchemaMetaFieldDef; - } - if (fieldName === _graphql.TypeMetaFieldDef.name && schema.getQueryType() === type) { - return _graphql.TypeMetaFieldDef; - } - if (fieldName === _graphql.TypeNameMetaFieldDef.name && (0, _graphql.isCompositeType)(type)) { - return _graphql.TypeNameMetaFieldDef; - } - if ('getFields' in type) { - return type.getFields()[fieldName]; - } - return null; -} -function forEachState(stack, fn) { - const reverseStateStack = []; - let state = stack; - while (state === null || state === void 0 ? void 0 : state.kind) { - reverseStateStack.push(state); - state = state.prevState; - } - for (let i = reverseStateStack.length - 1; i >= 0; i--) { - fn(reverseStateStack[i]); - } -} -function objectValues(object) { - const keys = Object.keys(object); - const len = keys.length; - const values = new Array(len); - for (let i = 0; i < len; ++i) { - values[i] = object[keys[i]]; - } - return values; -} -function hintList(token, list) { - return filterAndSortList(list, normalizeText(token.string)); -} -function filterAndSortList(list, text) { - if (!text) { - return filterNonEmpty(list, entry => !entry.isDeprecated); - } - const byProximity = list.map(entry => ({ - proximity: getProximity(normalizeText(entry.label), text), - entry - })); - return filterNonEmpty(filterNonEmpty(byProximity, pair => pair.proximity <= 2), pair => !pair.entry.isDeprecated).sort((a, b) => (a.entry.isDeprecated ? 1 : 0) - (b.entry.isDeprecated ? 1 : 0) || a.proximity - b.proximity || a.entry.label.length - b.entry.label.length).map(pair => pair.entry); -} -function filterNonEmpty(array, predicate) { - const filtered = array.filter(predicate); - return filtered.length === 0 ? array : filtered; -} -function normalizeText(text) { - return text.toLowerCase().replaceAll(/\W/g, ''); -} -function getProximity(suggestion, text) { - let proximity = lexicalDistance(text, suggestion); - if (suggestion.length > text.length) { - proximity -= suggestion.length - text.length - 1; - proximity += suggestion.indexOf(text) === 0 ? 0 : 0.5; - } - return proximity; -} -function lexicalDistance(a, b) { - let i; - let j; - const d = []; - const aLength = a.length; - const bLength = b.length; - for (i = 0; i <= aLength; i++) { - d[i] = [i]; - } - for (j = 1; j <= bLength; j++) { - d[0][j] = j; - } - for (i = 1; i <= aLength; i++) { - for (j = 1; j <= bLength; j++) { - const cost = a[i - 1] === b[j - 1] ? 0 : 1; - d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost); - if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) { - d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost); - } - } - } - return d[aLength][bLength]; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/interface/getAutocompleteSuggestions.js": -/*!**********************************************************************************!*\ - !*** ../../graphql-language-service/esm/interface/getAutocompleteSuggestions.js ***! - \**********************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SuggestionCommand = exports.GraphQLDocumentMode = void 0; -exports.canUseDirective = canUseDirective; -exports.getAutocompleteSuggestions = getAutocompleteSuggestions; -exports.getFragmentDefinitions = getFragmentDefinitions; -exports.getTokenAtPosition = getTokenAtPosition; -exports.getTypeInfo = getTypeInfo; -exports.getVariableCompletions = getVariableCompletions; -exports.runOnlineParser = runOnlineParser; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -var _types = __webpack_require__(/*! ../types */ "../../graphql-language-service/esm/types.js"); -var _parser = __webpack_require__(/*! ../parser */ "../../graphql-language-service/esm/parser/index.js"); -var _autocompleteUtils = __webpack_require__(/*! ./autocompleteUtils */ "../../graphql-language-service/esm/interface/autocompleteUtils.js"); -const SuggestionCommand = { - command: 'editor.action.triggerSuggest', - title: 'Suggestions' -}; -exports.SuggestionCommand = SuggestionCommand; -const collectFragmentDefs = op => { - const externalFragments = []; - if (op) { - try { - (0, _graphql.visit)((0, _graphql.parse)(op), { - FragmentDefinition(def) { - externalFragments.push(def); - } - }); - } catch (_a) { - return []; - } - } - return externalFragments; -}; -const typeSystemKinds = [_graphql.Kind.SCHEMA_DEFINITION, _graphql.Kind.OPERATION_TYPE_DEFINITION, _graphql.Kind.SCALAR_TYPE_DEFINITION, _graphql.Kind.OBJECT_TYPE_DEFINITION, _graphql.Kind.INTERFACE_TYPE_DEFINITION, _graphql.Kind.UNION_TYPE_DEFINITION, _graphql.Kind.ENUM_TYPE_DEFINITION, _graphql.Kind.INPUT_OBJECT_TYPE_DEFINITION, _graphql.Kind.DIRECTIVE_DEFINITION, _graphql.Kind.SCHEMA_EXTENSION, _graphql.Kind.SCALAR_TYPE_EXTENSION, _graphql.Kind.OBJECT_TYPE_EXTENSION, _graphql.Kind.INTERFACE_TYPE_EXTENSION, _graphql.Kind.UNION_TYPE_EXTENSION, _graphql.Kind.ENUM_TYPE_EXTENSION, _graphql.Kind.INPUT_OBJECT_TYPE_EXTENSION]; -const hasTypeSystemDefinitions = sdl => { - let hasTypeSystemDef = false; - if (sdl) { - try { - (0, _graphql.visit)((0, _graphql.parse)(sdl), { - enter(node) { - if (node.kind === 'Document') { - return; - } - if (typeSystemKinds.includes(node.kind)) { - hasTypeSystemDef = true; - return _graphql.BREAK; - } - return false; - } - }); - } catch (_a) { - return hasTypeSystemDef; - } - } - return hasTypeSystemDef; -}; -function getAutocompleteSuggestions(schema, queryText, cursor, contextToken, fragmentDefs, options) { - var _a; - const opts = Object.assign(Object.assign({}, options), { - schema - }); - const token = contextToken || getTokenAtPosition(queryText, cursor, 1); - const state = token.state.kind === 'Invalid' ? token.state.prevState : token.state; - const mode = (options === null || options === void 0 ? void 0 : options.mode) || getDocumentMode(queryText, options === null || options === void 0 ? void 0 : options.uri); - if (!state) { - return []; - } - const { - kind, - step, - prevState - } = state; - const typeInfo = getTypeInfo(schema, token.state); - if (kind === _parser.RuleKinds.DOCUMENT) { - if (mode === GraphQLDocumentMode.TYPE_SYSTEM) { - return getSuggestionsForTypeSystemDefinitions(token); - } - return getSuggestionsForExecutableDefinitions(token); - } - if (kind === _parser.RuleKinds.EXTEND_DEF) { - return getSuggestionsForExtensionDefinitions(token); - } - if (((_a = prevState === null || prevState === void 0 ? void 0 : prevState.prevState) === null || _a === void 0 ? void 0 : _a.kind) === _parser.RuleKinds.EXTENSION_DEFINITION && state.name) { - return (0, _autocompleteUtils.hintList)(token, []); - } - if ((prevState === null || prevState === void 0 ? void 0 : prevState.kind) === _graphql.Kind.SCALAR_TYPE_EXTENSION) { - return (0, _autocompleteUtils.hintList)(token, Object.values(schema.getTypeMap()).filter(_graphql.isScalarType).map(type => ({ - label: type.name, - kind: _types.CompletionItemKind.Function - }))); - } - if ((prevState === null || prevState === void 0 ? void 0 : prevState.kind) === _graphql.Kind.OBJECT_TYPE_EXTENSION) { - return (0, _autocompleteUtils.hintList)(token, Object.values(schema.getTypeMap()).filter(type => (0, _graphql.isObjectType)(type) && !type.name.startsWith('__')).map(type => ({ - label: type.name, - kind: _types.CompletionItemKind.Function - }))); - } - if ((prevState === null || prevState === void 0 ? void 0 : prevState.kind) === _graphql.Kind.INTERFACE_TYPE_EXTENSION) { - return (0, _autocompleteUtils.hintList)(token, Object.values(schema.getTypeMap()).filter(_graphql.isInterfaceType).map(type => ({ - label: type.name, - kind: _types.CompletionItemKind.Function - }))); - } - if ((prevState === null || prevState === void 0 ? void 0 : prevState.kind) === _graphql.Kind.UNION_TYPE_EXTENSION) { - return (0, _autocompleteUtils.hintList)(token, Object.values(schema.getTypeMap()).filter(_graphql.isUnionType).map(type => ({ - label: type.name, - kind: _types.CompletionItemKind.Function - }))); - } - if ((prevState === null || prevState === void 0 ? void 0 : prevState.kind) === _graphql.Kind.ENUM_TYPE_EXTENSION) { - return (0, _autocompleteUtils.hintList)(token, Object.values(schema.getTypeMap()).filter(type => (0, _graphql.isEnumType)(type) && !type.name.startsWith('__')).map(type => ({ - label: type.name, - kind: _types.CompletionItemKind.Function - }))); - } - if ((prevState === null || prevState === void 0 ? void 0 : prevState.kind) === _graphql.Kind.INPUT_OBJECT_TYPE_EXTENSION) { - return (0, _autocompleteUtils.hintList)(token, Object.values(schema.getTypeMap()).filter(_graphql.isInputObjectType).map(type => ({ - label: type.name, - kind: _types.CompletionItemKind.Function - }))); - } - if (kind === _parser.RuleKinds.IMPLEMENTS || kind === _parser.RuleKinds.NAMED_TYPE && (prevState === null || prevState === void 0 ? void 0 : prevState.kind) === _parser.RuleKinds.IMPLEMENTS) { - return getSuggestionsForImplements(token, state, schema, queryText, typeInfo); - } - if (kind === _parser.RuleKinds.SELECTION_SET || kind === _parser.RuleKinds.FIELD || kind === _parser.RuleKinds.ALIASED_FIELD) { - return getSuggestionsForFieldNames(token, typeInfo, opts); - } - if (kind === _parser.RuleKinds.ARGUMENTS || kind === _parser.RuleKinds.ARGUMENT && step === 0) { - const { - argDefs - } = typeInfo; - if (argDefs) { - return (0, _autocompleteUtils.hintList)(token, argDefs.map(argDef => { - var _a; - return { - label: argDef.name, - insertText: argDef.name + ': ', - command: SuggestionCommand, - detail: String(argDef.type), - documentation: (_a = argDef.description) !== null && _a !== void 0 ? _a : undefined, - kind: _types.CompletionItemKind.Variable, - type: argDef.type - }; - })); - } - } - if ((kind === _parser.RuleKinds.OBJECT_VALUE || kind === _parser.RuleKinds.OBJECT_FIELD && step === 0) && typeInfo.objectFieldDefs) { - const objectFields = (0, _autocompleteUtils.objectValues)(typeInfo.objectFieldDefs); - const completionKind = kind === _parser.RuleKinds.OBJECT_VALUE ? _types.CompletionItemKind.Value : _types.CompletionItemKind.Field; - return (0, _autocompleteUtils.hintList)(token, objectFields.map(field => { - var _a; - return { - label: field.name, - detail: String(field.type), - documentation: (_a = field.description) !== null && _a !== void 0 ? _a : undefined, - kind: completionKind, - type: field.type - }; - })); - } - if (kind === _parser.RuleKinds.ENUM_VALUE || kind === _parser.RuleKinds.LIST_VALUE && step === 1 || kind === _parser.RuleKinds.OBJECT_FIELD && step === 2 || kind === _parser.RuleKinds.ARGUMENT && step === 2) { - return getSuggestionsForInputValues(token, typeInfo, queryText, schema); - } - if (kind === _parser.RuleKinds.VARIABLE && step === 1) { - const namedInputType = (0, _graphql.getNamedType)(typeInfo.inputType); - const variableDefinitions = getVariableCompletions(queryText, schema, token); - return (0, _autocompleteUtils.hintList)(token, variableDefinitions.filter(v => v.detail === (namedInputType === null || namedInputType === void 0 ? void 0 : namedInputType.name))); - } - if (kind === _parser.RuleKinds.TYPE_CONDITION && step === 1 || kind === _parser.RuleKinds.NAMED_TYPE && prevState != null && prevState.kind === _parser.RuleKinds.TYPE_CONDITION) { - return getSuggestionsForFragmentTypeConditions(token, typeInfo, schema, kind); - } - if (kind === _parser.RuleKinds.FRAGMENT_SPREAD && step === 1) { - return getSuggestionsForFragmentSpread(token, typeInfo, schema, queryText, Array.isArray(fragmentDefs) ? fragmentDefs : collectFragmentDefs(fragmentDefs)); - } - const unwrappedState = unwrapType(state); - if (mode === GraphQLDocumentMode.TYPE_SYSTEM && !unwrappedState.needsAdvance && kind === _parser.RuleKinds.NAMED_TYPE || kind === _parser.RuleKinds.LIST_TYPE) { - if (unwrappedState.kind === _parser.RuleKinds.FIELD_DEF) { - return (0, _autocompleteUtils.hintList)(token, Object.values(schema.getTypeMap()).filter(type => (0, _graphql.isOutputType)(type) && !type.name.startsWith('__')).map(type => ({ - label: type.name, - kind: _types.CompletionItemKind.Function - }))); - } - if (unwrappedState.kind === _parser.RuleKinds.INPUT_VALUE_DEF) { - return (0, _autocompleteUtils.hintList)(token, Object.values(schema.getTypeMap()).filter(type => (0, _graphql.isInputType)(type) && !type.name.startsWith('__')).map(type => ({ - label: type.name, - kind: _types.CompletionItemKind.Function - }))); - } - } - if (kind === _parser.RuleKinds.VARIABLE_DEFINITION && step === 2 || kind === _parser.RuleKinds.LIST_TYPE && step === 1 || kind === _parser.RuleKinds.NAMED_TYPE && prevState && (prevState.kind === _parser.RuleKinds.VARIABLE_DEFINITION || prevState.kind === _parser.RuleKinds.LIST_TYPE || prevState.kind === _parser.RuleKinds.NON_NULL_TYPE)) { - return getSuggestionsForVariableDefinition(token, schema, kind); - } - if (kind === _parser.RuleKinds.DIRECTIVE) { - return getSuggestionsForDirective(token, state, schema, kind); - } - return []; -} -const insertSuffix = ' {\n $1\n}'; -const getInsertText = field => { - const { - type - } = field; - if ((0, _graphql.isCompositeType)(type)) { - return insertSuffix; - } - if ((0, _graphql.isListType)(type) && (0, _graphql.isCompositeType)(type.ofType)) { - return insertSuffix; - } - if ((0, _graphql.isNonNullType)(type)) { - if ((0, _graphql.isCompositeType)(type.ofType)) { - return insertSuffix; - } - if ((0, _graphql.isListType)(type.ofType) && (0, _graphql.isCompositeType)(type.ofType.ofType)) { - return insertSuffix; - } - } - return null; -}; -function getSuggestionsForTypeSystemDefinitions(token) { - return (0, _autocompleteUtils.hintList)(token, [{ - label: 'extend', - kind: _types.CompletionItemKind.Function - }, { - label: 'type', - kind: _types.CompletionItemKind.Function - }, { - label: 'interface', - kind: _types.CompletionItemKind.Function - }, { - label: 'union', - kind: _types.CompletionItemKind.Function - }, { - label: 'input', - kind: _types.CompletionItemKind.Function - }, { - label: 'scalar', - kind: _types.CompletionItemKind.Function - }, { - label: 'schema', - kind: _types.CompletionItemKind.Function - }]); -} -function getSuggestionsForExecutableDefinitions(token) { - return (0, _autocompleteUtils.hintList)(token, [{ - label: 'query', - kind: _types.CompletionItemKind.Function - }, { - label: 'mutation', - kind: _types.CompletionItemKind.Function - }, { - label: 'subscription', - kind: _types.CompletionItemKind.Function - }, { - label: 'fragment', - kind: _types.CompletionItemKind.Function - }, { - label: '{', - kind: _types.CompletionItemKind.Constructor - }]); -} -function getSuggestionsForExtensionDefinitions(token) { - return (0, _autocompleteUtils.hintList)(token, [{ - label: 'type', - kind: _types.CompletionItemKind.Function - }, { - label: 'interface', - kind: _types.CompletionItemKind.Function - }, { - label: 'union', - kind: _types.CompletionItemKind.Function - }, { - label: 'input', - kind: _types.CompletionItemKind.Function - }, { - label: 'scalar', - kind: _types.CompletionItemKind.Function - }, { - label: 'schema', - kind: _types.CompletionItemKind.Function - }]); -} -function getSuggestionsForFieldNames(token, typeInfo, options) { - var _a; - if (typeInfo.parentType) { - const { - parentType - } = typeInfo; - let fields = []; - if ('getFields' in parentType) { - fields = (0, _autocompleteUtils.objectValues)(parentType.getFields()); - } - if ((0, _graphql.isCompositeType)(parentType)) { - fields.push(_graphql.TypeNameMetaFieldDef); - } - if (parentType === ((_a = options === null || options === void 0 ? void 0 : options.schema) === null || _a === void 0 ? void 0 : _a.getQueryType())) { - fields.push(_graphql.SchemaMetaFieldDef, _graphql.TypeMetaFieldDef); - } - return (0, _autocompleteUtils.hintList)(token, fields.map((field, index) => { - var _a; - const suggestion = { - sortText: String(index) + field.name, - label: field.name, - detail: String(field.type), - documentation: (_a = field.description) !== null && _a !== void 0 ? _a : undefined, - deprecated: Boolean(field.deprecationReason), - isDeprecated: Boolean(field.deprecationReason), - deprecationReason: field.deprecationReason, - kind: _types.CompletionItemKind.Field, - type: field.type - }; - if (options === null || options === void 0 ? void 0 : options.fillLeafsOnComplete) { - const insertText = getInsertText(field); - if (insertText) { - suggestion.insertText = field.name + insertText; - suggestion.insertTextFormat = _types.InsertTextFormat.Snippet; - suggestion.command = SuggestionCommand; - } - } - return suggestion; - })); - } - return []; -} -function getSuggestionsForInputValues(token, typeInfo, queryText, schema) { - const namedInputType = (0, _graphql.getNamedType)(typeInfo.inputType); - const queryVariables = getVariableCompletions(queryText, schema, token).filter(v => v.detail === namedInputType.name); - if (namedInputType instanceof _graphql.GraphQLEnumType) { - const values = namedInputType.getValues(); - return (0, _autocompleteUtils.hintList)(token, values.map(value => { - var _a; - return { - label: value.name, - detail: String(namedInputType), - documentation: (_a = value.description) !== null && _a !== void 0 ? _a : undefined, - deprecated: Boolean(value.deprecationReason), - isDeprecated: Boolean(value.deprecationReason), - deprecationReason: value.deprecationReason, - kind: _types.CompletionItemKind.EnumMember, - type: namedInputType - }; - }).concat(queryVariables)); - } - if (namedInputType === _graphql.GraphQLBoolean) { - return (0, _autocompleteUtils.hintList)(token, queryVariables.concat([{ - label: 'true', - detail: String(_graphql.GraphQLBoolean), - documentation: 'Not false.', - kind: _types.CompletionItemKind.Variable, - type: _graphql.GraphQLBoolean - }, { - label: 'false', - detail: String(_graphql.GraphQLBoolean), - documentation: 'Not true.', - kind: _types.CompletionItemKind.Variable, - type: _graphql.GraphQLBoolean - }])); - } - return queryVariables; -} -function getSuggestionsForImplements(token, tokenState, schema, documentText, typeInfo) { - if (tokenState.needsSeparator) { - return []; - } - const typeMap = schema.getTypeMap(); - const schemaInterfaces = (0, _autocompleteUtils.objectValues)(typeMap).filter(_graphql.isInterfaceType); - const schemaInterfaceNames = schemaInterfaces.map(_ref => { - let { - name - } = _ref; - return name; - }); - const inlineInterfaces = new Set(); - runOnlineParser(documentText, (_, state) => { - var _a, _b, _c, _d, _e; - if (state.name) { - if (state.kind === _parser.RuleKinds.INTERFACE_DEF && !schemaInterfaceNames.includes(state.name)) { - inlineInterfaces.add(state.name); - } - if (state.kind === _parser.RuleKinds.NAMED_TYPE && ((_a = state.prevState) === null || _a === void 0 ? void 0 : _a.kind) === _parser.RuleKinds.IMPLEMENTS) { - if (typeInfo.interfaceDef) { - const existingType = (_b = typeInfo.interfaceDef) === null || _b === void 0 ? void 0 : _b.getInterfaces().find(_ref2 => { - let { - name - } = _ref2; - return name === state.name; - }); - if (existingType) { - return; - } - const type = schema.getType(state.name); - const interfaceConfig = (_c = typeInfo.interfaceDef) === null || _c === void 0 ? void 0 : _c.toConfig(); - typeInfo.interfaceDef = new _graphql.GraphQLInterfaceType(Object.assign(Object.assign({}, interfaceConfig), { - interfaces: [...interfaceConfig.interfaces, type || new _graphql.GraphQLInterfaceType({ - name: state.name, - fields: {} - })] - })); - } else if (typeInfo.objectTypeDef) { - const existingType = (_d = typeInfo.objectTypeDef) === null || _d === void 0 ? void 0 : _d.getInterfaces().find(_ref3 => { - let { - name - } = _ref3; - return name === state.name; - }); - if (existingType) { - return; - } - const type = schema.getType(state.name); - const objectTypeConfig = (_e = typeInfo.objectTypeDef) === null || _e === void 0 ? void 0 : _e.toConfig(); - typeInfo.objectTypeDef = new _graphql.GraphQLObjectType(Object.assign(Object.assign({}, objectTypeConfig), { - interfaces: [...objectTypeConfig.interfaces, type || new _graphql.GraphQLInterfaceType({ - name: state.name, - fields: {} - })] - })); - } - } - } - }); - const currentTypeToExtend = typeInfo.interfaceDef || typeInfo.objectTypeDef; - const siblingInterfaces = (currentTypeToExtend === null || currentTypeToExtend === void 0 ? void 0 : currentTypeToExtend.getInterfaces()) || []; - const siblingInterfaceNames = siblingInterfaces.map(_ref4 => { - let { - name - } = _ref4; - return name; - }); - const possibleInterfaces = schemaInterfaces.concat([...inlineInterfaces].map(name => ({ - name - }))).filter(_ref5 => { - let { - name - } = _ref5; - return name !== (currentTypeToExtend === null || currentTypeToExtend === void 0 ? void 0 : currentTypeToExtend.name) && !siblingInterfaceNames.includes(name); - }); - return (0, _autocompleteUtils.hintList)(token, possibleInterfaces.map(type => { - const result = { - label: type.name, - kind: _types.CompletionItemKind.Interface, - type - }; - if (type === null || type === void 0 ? void 0 : type.description) { - result.documentation = type.description; - } - return result; - })); -} -function getSuggestionsForFragmentTypeConditions(token, typeInfo, schema, _kind) { - let possibleTypes; - if (typeInfo.parentType) { - if ((0, _graphql.isAbstractType)(typeInfo.parentType)) { - const abstractType = (0, _graphql.assertAbstractType)(typeInfo.parentType); - const possibleObjTypes = schema.getPossibleTypes(abstractType); - const possibleIfaceMap = Object.create(null); - for (const type of possibleObjTypes) { - for (const iface of type.getInterfaces()) { - possibleIfaceMap[iface.name] = iface; - } - } - possibleTypes = possibleObjTypes.concat((0, _autocompleteUtils.objectValues)(possibleIfaceMap)); - } else { - possibleTypes = [typeInfo.parentType]; - } - } else { - const typeMap = schema.getTypeMap(); - possibleTypes = (0, _autocompleteUtils.objectValues)(typeMap).filter(type => (0, _graphql.isCompositeType)(type) && !type.name.startsWith('__')); - } - return (0, _autocompleteUtils.hintList)(token, possibleTypes.map(type => { - const namedType = (0, _graphql.getNamedType)(type); - return { - label: String(type), - documentation: (namedType === null || namedType === void 0 ? void 0 : namedType.description) || '', - kind: _types.CompletionItemKind.Field - }; - })); -} -function getSuggestionsForFragmentSpread(token, typeInfo, schema, queryText, fragmentDefs) { - if (!queryText) { - return []; - } - const typeMap = schema.getTypeMap(); - const defState = (0, _autocompleteUtils.getDefinitionState)(token.state); - const fragments = getFragmentDefinitions(queryText); - if (fragmentDefs && fragmentDefs.length > 0) { - fragments.push(...fragmentDefs); - } - const relevantFrags = fragments.filter(frag => typeMap[frag.typeCondition.name.value] && !(defState && defState.kind === _parser.RuleKinds.FRAGMENT_DEFINITION && defState.name === frag.name.value) && (0, _graphql.isCompositeType)(typeInfo.parentType) && (0, _graphql.isCompositeType)(typeMap[frag.typeCondition.name.value]) && (0, _graphql.doTypesOverlap)(schema, typeInfo.parentType, typeMap[frag.typeCondition.name.value])); - return (0, _autocompleteUtils.hintList)(token, relevantFrags.map(frag => ({ - label: frag.name.value, - detail: String(typeMap[frag.typeCondition.name.value]), - documentation: `fragment ${frag.name.value} on ${frag.typeCondition.name.value}`, - kind: _types.CompletionItemKind.Field, - type: typeMap[frag.typeCondition.name.value] - }))); -} -const getParentDefinition = (state, kind) => { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; - if (((_a = state.prevState) === null || _a === void 0 ? void 0 : _a.kind) === kind) { - return state.prevState; - } - if (((_c = (_b = state.prevState) === null || _b === void 0 ? void 0 : _b.prevState) === null || _c === void 0 ? void 0 : _c.kind) === kind) { - return state.prevState.prevState; - } - if (((_f = (_e = (_d = state.prevState) === null || _d === void 0 ? void 0 : _d.prevState) === null || _e === void 0 ? void 0 : _e.prevState) === null || _f === void 0 ? void 0 : _f.kind) === kind) { - return state.prevState.prevState.prevState; - } - if (((_k = (_j = (_h = (_g = state.prevState) === null || _g === void 0 ? void 0 : _g.prevState) === null || _h === void 0 ? void 0 : _h.prevState) === null || _j === void 0 ? void 0 : _j.prevState) === null || _k === void 0 ? void 0 : _k.kind) === kind) { - return state.prevState.prevState.prevState.prevState; - } -}; -function getVariableCompletions(queryText, schema, token) { - let variableName = null; - let variableType; - const definitions = Object.create({}); - runOnlineParser(queryText, (_, state) => { - if ((state === null || state === void 0 ? void 0 : state.kind) === _parser.RuleKinds.VARIABLE && state.name) { - variableName = state.name; - } - if ((state === null || state === void 0 ? void 0 : state.kind) === _parser.RuleKinds.NAMED_TYPE && variableName) { - const parentDefinition = getParentDefinition(state, _parser.RuleKinds.TYPE); - if (parentDefinition === null || parentDefinition === void 0 ? void 0 : parentDefinition.type) { - variableType = schema.getType(parentDefinition === null || parentDefinition === void 0 ? void 0 : parentDefinition.type); - } - } - if (variableName && variableType && !definitions[variableName]) { - definitions[variableName] = { - detail: variableType.toString(), - insertText: token.string === '$' ? variableName : '$' + variableName, - label: variableName, - type: variableType, - kind: _types.CompletionItemKind.Variable - }; - variableName = null; - variableType = null; - } - }); - return (0, _autocompleteUtils.objectValues)(definitions); -} -function getFragmentDefinitions(queryText) { - const fragmentDefs = []; - runOnlineParser(queryText, (_, state) => { - if (state.kind === _parser.RuleKinds.FRAGMENT_DEFINITION && state.name && state.type) { - fragmentDefs.push({ - kind: _parser.RuleKinds.FRAGMENT_DEFINITION, - name: { - kind: _graphql.Kind.NAME, - value: state.name - }, - selectionSet: { - kind: _parser.RuleKinds.SELECTION_SET, - selections: [] - }, - typeCondition: { - kind: _parser.RuleKinds.NAMED_TYPE, - name: { - kind: _graphql.Kind.NAME, - value: state.type - } - } - }); - } - }); - return fragmentDefs; -} -function getSuggestionsForVariableDefinition(token, schema, _kind) { - const inputTypeMap = schema.getTypeMap(); - const inputTypes = (0, _autocompleteUtils.objectValues)(inputTypeMap).filter(_graphql.isInputType); - return (0, _autocompleteUtils.hintList)(token, inputTypes.map(type => ({ - label: type.name, - documentation: type.description, - kind: _types.CompletionItemKind.Variable - }))); -} -function getSuggestionsForDirective(token, state, schema, _kind) { - var _a; - if ((_a = state.prevState) === null || _a === void 0 ? void 0 : _a.kind) { - const directives = schema.getDirectives().filter(directive => canUseDirective(state.prevState, directive)); - return (0, _autocompleteUtils.hintList)(token, directives.map(directive => ({ - label: directive.name, - documentation: directive.description || '', - kind: _types.CompletionItemKind.Function - }))); - } - return []; -} -function getTokenAtPosition(queryText, cursor) { - let offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - let styleAtCursor = null; - let stateAtCursor = null; - let stringAtCursor = null; - const token = runOnlineParser(queryText, (stream, state, style, index) => { - if (index !== cursor.line || stream.getCurrentPosition() + offset < cursor.character + 1) { - return; - } - styleAtCursor = style; - stateAtCursor = Object.assign({}, state); - stringAtCursor = stream.current(); - return 'BREAK'; - }); - return { - start: token.start, - end: token.end, - string: stringAtCursor || token.string, - state: stateAtCursor || token.state, - style: styleAtCursor || token.style - }; -} -function runOnlineParser(queryText, callback) { - const lines = queryText.split('\n'); - const parser = (0, _parser.onlineParser)(); - let state = parser.startState(); - let style = ''; - let stream = new _parser.CharacterStream(''); - for (let i = 0; i < lines.length; i++) { - stream = new _parser.CharacterStream(lines[i]); - while (!stream.eol()) { - style = parser.token(stream, state); - const code = callback(stream, state, style, i); - if (code === 'BREAK') { - break; - } - } - callback(stream, state, style, i); - if (!state.kind) { - state = parser.startState(); - } - } - return { - start: stream.getStartOfToken(), - end: stream.getCurrentPosition(), - string: stream.current(), - state, - style - }; -} -function canUseDirective(state, directive) { - if (!(state === null || state === void 0 ? void 0 : state.kind)) { - return false; - } - const { - kind, - prevState - } = state; - const { - locations - } = directive; - switch (kind) { - case _parser.RuleKinds.QUERY: - return locations.includes(_graphql.DirectiveLocation.QUERY); - case _parser.RuleKinds.MUTATION: - return locations.includes(_graphql.DirectiveLocation.MUTATION); - case _parser.RuleKinds.SUBSCRIPTION: - return locations.includes(_graphql.DirectiveLocation.SUBSCRIPTION); - case _parser.RuleKinds.FIELD: - case _parser.RuleKinds.ALIASED_FIELD: - return locations.includes(_graphql.DirectiveLocation.FIELD); - case _parser.RuleKinds.FRAGMENT_DEFINITION: - return locations.includes(_graphql.DirectiveLocation.FRAGMENT_DEFINITION); - case _parser.RuleKinds.FRAGMENT_SPREAD: - return locations.includes(_graphql.DirectiveLocation.FRAGMENT_SPREAD); - case _parser.RuleKinds.INLINE_FRAGMENT: - return locations.includes(_graphql.DirectiveLocation.INLINE_FRAGMENT); - case _parser.RuleKinds.SCHEMA_DEF: - return locations.includes(_graphql.DirectiveLocation.SCHEMA); - case _parser.RuleKinds.SCALAR_DEF: - return locations.includes(_graphql.DirectiveLocation.SCALAR); - case _parser.RuleKinds.OBJECT_TYPE_DEF: - return locations.includes(_graphql.DirectiveLocation.OBJECT); - case _parser.RuleKinds.FIELD_DEF: - return locations.includes(_graphql.DirectiveLocation.FIELD_DEFINITION); - case _parser.RuleKinds.INTERFACE_DEF: - return locations.includes(_graphql.DirectiveLocation.INTERFACE); - case _parser.RuleKinds.UNION_DEF: - return locations.includes(_graphql.DirectiveLocation.UNION); - case _parser.RuleKinds.ENUM_DEF: - return locations.includes(_graphql.DirectiveLocation.ENUM); - case _parser.RuleKinds.ENUM_VALUE: - return locations.includes(_graphql.DirectiveLocation.ENUM_VALUE); - case _parser.RuleKinds.INPUT_DEF: - return locations.includes(_graphql.DirectiveLocation.INPUT_OBJECT); - case _parser.RuleKinds.INPUT_VALUE_DEF: - const prevStateKind = prevState === null || prevState === void 0 ? void 0 : prevState.kind; - switch (prevStateKind) { - case _parser.RuleKinds.ARGUMENTS_DEF: - return locations.includes(_graphql.DirectiveLocation.ARGUMENT_DEFINITION); - case _parser.RuleKinds.INPUT_DEF: - return locations.includes(_graphql.DirectiveLocation.INPUT_FIELD_DEFINITION); - } - } - return false; -} -function getTypeInfo(schema, tokenState) { - let argDef; - let argDefs; - let directiveDef; - let enumValue; - let fieldDef; - let inputType; - let objectTypeDef; - let objectFieldDefs; - let parentType; - let type; - let interfaceDef; - (0, _autocompleteUtils.forEachState)(tokenState, state => { - var _a; - switch (state.kind) { - case _parser.RuleKinds.QUERY: - case 'ShortQuery': - type = schema.getQueryType(); - break; - case _parser.RuleKinds.MUTATION: - type = schema.getMutationType(); - break; - case _parser.RuleKinds.SUBSCRIPTION: - type = schema.getSubscriptionType(); - break; - case _parser.RuleKinds.INLINE_FRAGMENT: - case _parser.RuleKinds.FRAGMENT_DEFINITION: - if (state.type) { - type = schema.getType(state.type); - } - break; - case _parser.RuleKinds.FIELD: - case _parser.RuleKinds.ALIASED_FIELD: - { - if (!type || !state.name) { - fieldDef = null; - } else { - fieldDef = parentType ? (0, _autocompleteUtils.getFieldDef)(schema, parentType, state.name) : null; - type = fieldDef ? fieldDef.type : null; - } - break; - } - case _parser.RuleKinds.SELECTION_SET: - parentType = (0, _graphql.getNamedType)(type); - break; - case _parser.RuleKinds.DIRECTIVE: - directiveDef = state.name ? schema.getDirective(state.name) : null; - break; - case _parser.RuleKinds.INTERFACE_DEF: - if (state.name) { - objectTypeDef = null; - interfaceDef = new _graphql.GraphQLInterfaceType({ - name: state.name, - interfaces: [], - fields: {} - }); - } - break; - case _parser.RuleKinds.OBJECT_TYPE_DEF: - if (state.name) { - interfaceDef = null; - objectTypeDef = new _graphql.GraphQLObjectType({ - name: state.name, - interfaces: [], - fields: {} - }); - } - break; - case _parser.RuleKinds.ARGUMENTS: - { - if (state.prevState) { - switch (state.prevState.kind) { - case _parser.RuleKinds.FIELD: - argDefs = fieldDef && fieldDef.args; - break; - case _parser.RuleKinds.DIRECTIVE: - argDefs = directiveDef && directiveDef.args; - break; - case _parser.RuleKinds.ALIASED_FIELD: - { - const name = (_a = state.prevState) === null || _a === void 0 ? void 0 : _a.name; - if (!name) { - argDefs = null; - break; - } - const field = parentType ? (0, _autocompleteUtils.getFieldDef)(schema, parentType, name) : null; - if (!field) { - argDefs = null; - break; - } - argDefs = field.args; - break; - } - default: - argDefs = null; - break; - } - } else { - argDefs = null; - } - break; - } - case _parser.RuleKinds.ARGUMENT: - if (argDefs) { - for (let i = 0; i < argDefs.length; i++) { - if (argDefs[i].name === state.name) { - argDef = argDefs[i]; - break; - } - } - } - inputType = argDef === null || argDef === void 0 ? void 0 : argDef.type; - break; - case _parser.RuleKinds.ENUM_VALUE: - const enumType = (0, _graphql.getNamedType)(inputType); - enumValue = enumType instanceof _graphql.GraphQLEnumType ? enumType.getValues().find(val => val.value === state.name) : null; - break; - case _parser.RuleKinds.LIST_VALUE: - const nullableType = (0, _graphql.getNullableType)(inputType); - inputType = nullableType instanceof _graphql.GraphQLList ? nullableType.ofType : null; - break; - case _parser.RuleKinds.OBJECT_VALUE: - const objectType = (0, _graphql.getNamedType)(inputType); - objectFieldDefs = objectType instanceof _graphql.GraphQLInputObjectType ? objectType.getFields() : null; - break; - case _parser.RuleKinds.OBJECT_FIELD: - const objectField = state.name && objectFieldDefs ? objectFieldDefs[state.name] : null; - inputType = objectField === null || objectField === void 0 ? void 0 : objectField.type; - break; - case _parser.RuleKinds.NAMED_TYPE: - if (state.name) { - type = schema.getType(state.name); - } - break; - } - }); - return { - argDef, - argDefs, - directiveDef, - enumValue, - fieldDef, - inputType, - objectFieldDefs, - parentType, - type, - interfaceDef, - objectTypeDef - }; -} -var GraphQLDocumentMode; -exports.GraphQLDocumentMode = GraphQLDocumentMode; -(function (GraphQLDocumentMode) { - GraphQLDocumentMode["TYPE_SYSTEM"] = "TYPE_SYSTEM"; - GraphQLDocumentMode["EXECUTABLE"] = "EXECUTABLE"; -})(GraphQLDocumentMode || (exports.GraphQLDocumentMode = GraphQLDocumentMode = {})); -function getDocumentMode(documentText, uri) { - if (uri === null || uri === void 0 ? void 0 : uri.endsWith('.graphqls')) { - return GraphQLDocumentMode.TYPE_SYSTEM; - } - return hasTypeSystemDefinitions(documentText) ? GraphQLDocumentMode.TYPE_SYSTEM : GraphQLDocumentMode.EXECUTABLE; -} -function unwrapType(state) { - if (state.prevState && state.kind && [_parser.RuleKinds.NAMED_TYPE, _parser.RuleKinds.LIST_TYPE, _parser.RuleKinds.TYPE, _parser.RuleKinds.NON_NULL_TYPE].includes(state.kind)) { - return unwrapType(state.prevState); - } - return state; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/interface/getDefinition.js": -/*!*********************************************************************!*\ - !*** ../../graphql-language-service/esm/interface/getDefinition.js ***! - \*********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.LANGUAGE = void 0; -exports.getDefinitionQueryResultForDefinitionNode = getDefinitionQueryResultForDefinitionNode; -exports.getDefinitionQueryResultForField = getDefinitionQueryResultForField; -exports.getDefinitionQueryResultForFragmentSpread = getDefinitionQueryResultForFragmentSpread; -exports.getDefinitionQueryResultForNamedType = getDefinitionQueryResultForNamedType; -var _utils = __webpack_require__(/*! ../utils */ "../../graphql-language-service/esm/utils/index.js"); -var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function (resolve) { - resolve(value); - }); - } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -const LANGUAGE = 'GraphQL'; -exports.LANGUAGE = LANGUAGE; -function assert(value, message) { - if (!value) { - throw new Error(message); - } -} -function getRange(text, node) { - const location = node.loc; - assert(location, 'Expected ASTNode to have a location.'); - return (0, _utils.locToRange)(text, location); -} -function getPosition(text, node) { - const location = node.loc; - assert(location, 'Expected ASTNode to have a location.'); - return (0, _utils.offsetToPosition)(text, location.start); -} -function getDefinitionQueryResultForNamedType(text, node, dependencies) { - return __awaiter(this, void 0, void 0, function* () { - const name = node.name.value; - const defNodes = dependencies.filter(_ref => { - let { - definition - } = _ref; - return definition.name && definition.name.value === name; - }); - if (defNodes.length === 0) { - throw new Error(`Definition not found for GraphQL type ${name}`); - } - const definitions = defNodes.map(_ref2 => { - let { - filePath, - content, - definition - } = _ref2; - return getDefinitionForNodeDefinition(filePath || '', content, definition); - }); - return { - definitions, - queryRange: definitions.map(_ => getRange(text, node)) - }; - }); -} -function getDefinitionQueryResultForField(fieldName, typeName, dependencies) { - var _a; - return __awaiter(this, void 0, void 0, function* () { - const defNodes = dependencies.filter(_ref3 => { - let { - definition - } = _ref3; - return definition.name && definition.name.value === typeName; - }); - if (defNodes.length === 0) { - throw new Error(`Definition not found for GraphQL type ${typeName}`); - } - const definitions = []; - for (const { - filePath, - content, - definition - } of defNodes) { - const fieldDefinition = (_a = definition.fields) === null || _a === void 0 ? void 0 : _a.find(item => item.name.value === fieldName); - if (fieldDefinition == null) { - continue; - } - definitions.push(getDefinitionForFieldDefinition(filePath || '', content, fieldDefinition)); - } - return { - definitions, - queryRange: [] - }; - }); -} -function getDefinitionQueryResultForFragmentSpread(text, fragment, dependencies) { - return __awaiter(this, void 0, void 0, function* () { - const name = fragment.name.value; - const defNodes = dependencies.filter(_ref4 => { - let { - definition - } = _ref4; - return definition.name.value === name; - }); - if (defNodes.length === 0) { - throw new Error(`Definition not found for GraphQL fragment ${name}`); - } - const definitions = defNodes.map(_ref5 => { - let { - filePath, - content, - definition - } = _ref5; - return getDefinitionForFragmentDefinition(filePath || '', content, definition); - }); - return { - definitions, - queryRange: definitions.map(_ => getRange(text, fragment)) - }; - }); -} -function getDefinitionQueryResultForDefinitionNode(path, text, definition) { - return { - definitions: [getDefinitionForFragmentDefinition(path, text, definition)], - queryRange: definition.name ? [getRange(text, definition.name)] : [] - }; -} -function getDefinitionForFragmentDefinition(path, text, definition) { - const { - name - } = definition; - if (!name) { - throw new Error('Expected ASTNode to have a Name.'); - } - return { - path, - position: getPosition(text, definition), - range: getRange(text, definition), - name: name.value || '', - language: LANGUAGE, - projectRoot: path - }; -} -function getDefinitionForNodeDefinition(path, text, definition) { - const { - name - } = definition; - assert(name, 'Expected ASTNode to have a Name.'); - return { - path, - position: getPosition(text, definition), - range: getRange(text, definition), - name: name.value || '', - language: LANGUAGE, - projectRoot: path - }; -} -function getDefinitionForFieldDefinition(path, text, definition) { - const { - name - } = definition; - assert(name, 'Expected ASTNode to have a Name.'); - return { - path, - position: getPosition(text, definition), - range: getRange(text, definition), - name: name.value || '', - language: LANGUAGE, - projectRoot: path - }; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/interface/getDiagnostics.js": -/*!**********************************************************************!*\ - !*** ../../graphql-language-service/esm/interface/getDiagnostics.js ***! - \**********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SEVERITY = exports.DIAGNOSTIC_SEVERITY = void 0; -exports.getDiagnostics = getDiagnostics; -exports.getRange = getRange; -exports.validateQuery = validateQuery; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -var _parser = __webpack_require__(/*! ../parser */ "../../graphql-language-service/esm/parser/index.js"); -var _utils = __webpack_require__(/*! ../utils */ "../../graphql-language-service/esm/utils/index.js"); -const SEVERITY = { - Error: 'Error', - Warning: 'Warning', - Information: 'Information', - Hint: 'Hint' -}; -exports.SEVERITY = SEVERITY; -const DIAGNOSTIC_SEVERITY = { - [SEVERITY.Error]: 1, - [SEVERITY.Warning]: 2, - [SEVERITY.Information]: 3, - [SEVERITY.Hint]: 4 -}; -exports.DIAGNOSTIC_SEVERITY = DIAGNOSTIC_SEVERITY; -const invariant = (condition, message) => { - if (!condition) { - throw new Error(message); - } -}; -function getDiagnostics(query) { - let schema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - let customRules = arguments.length > 2 ? arguments[2] : undefined; - let isRelayCompatMode = arguments.length > 3 ? arguments[3] : undefined; - let externalFragments = arguments.length > 4 ? arguments[4] : undefined; - var _a, _b; - let ast = null; - let fragments = ''; - if (externalFragments) { - fragments = typeof externalFragments === 'string' ? externalFragments : externalFragments.reduce((acc, node) => acc + (0, _graphql.print)(node) + '\n\n', ''); - } - const enhancedQuery = fragments ? `${query}\n\n${fragments}` : query; - try { - ast = (0, _graphql.parse)(enhancedQuery); - } catch (error) { - if (error instanceof _graphql.GraphQLError) { - const range = getRange((_b = (_a = error.locations) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : { - line: 0, - column: 0 - }, enhancedQuery); - return [{ - severity: DIAGNOSTIC_SEVERITY.Error, - message: error.message, - source: 'GraphQL: Syntax', - range - }]; - } - throw error; - } - return validateQuery(ast, schema, customRules, isRelayCompatMode); -} -function validateQuery(ast) { - let schema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - let customRules = arguments.length > 2 ? arguments[2] : undefined; - let isRelayCompatMode = arguments.length > 3 ? arguments[3] : undefined; - if (!schema) { - return []; - } - const validationErrorAnnotations = (0, _utils.validateWithCustomRules)(schema, ast, customRules, isRelayCompatMode).flatMap(error => annotations(error, DIAGNOSTIC_SEVERITY.Error, 'Validation')); - const deprecationWarningAnnotations = (0, _graphql.validate)(schema, ast, [_graphql.NoDeprecatedCustomRule]).flatMap(error => annotations(error, DIAGNOSTIC_SEVERITY.Warning, 'Deprecation')); - return validationErrorAnnotations.concat(deprecationWarningAnnotations); -} -function annotations(error, severity, type) { - if (!error.nodes) { - return []; - } - const highlightedNodes = []; - for (const [i, node] of error.nodes.entries()) { - const highlightNode = node.kind !== 'Variable' && 'name' in node && node.name !== undefined ? node.name : 'variable' in node && node.variable !== undefined ? node.variable : node; - if (highlightNode) { - invariant(error.locations, 'GraphQL validation error requires locations.'); - const loc = error.locations[i]; - const highlightLoc = getLocation(highlightNode); - const end = loc.column + (highlightLoc.end - highlightLoc.start); - highlightedNodes.push({ - source: `GraphQL: ${type}`, - message: error.message, - severity, - range: new _utils.Range(new _utils.Position(loc.line - 1, loc.column - 1), new _utils.Position(loc.line - 1, end)) - }); - } - } - return highlightedNodes; -} -function getRange(location, queryText) { - const parser = (0, _parser.onlineParser)(); - const state = parser.startState(); - const lines = queryText.split('\n'); - invariant(lines.length >= location.line, 'Query text must have more lines than where the error happened'); - let stream = null; - for (let i = 0; i < location.line; i++) { - stream = new _parser.CharacterStream(lines[i]); - while (!stream.eol()) { - const style = parser.token(stream, state); - if (style === 'invalidchar') { - break; - } - } - } - invariant(stream, 'Expected Parser stream to be available.'); - const line = location.line - 1; - const start = stream.getStartOfToken(); - const end = stream.getCurrentPosition(); - return new _utils.Range(new _utils.Position(line, start), new _utils.Position(line, end)); -} -function getLocation(node) { - const typeCastedNode = node; - const location = typeCastedNode.loc; - invariant(location, 'Expected ASTNode to have a location.'); - return location; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/interface/getHoverInformation.js": -/*!***************************************************************************!*\ - !*** ../../graphql-language-service/esm/interface/getHoverInformation.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getHoverInformation = getHoverInformation; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -var _getAutocompleteSuggestions = __webpack_require__(/*! ./getAutocompleteSuggestions */ "../../graphql-language-service/esm/interface/getAutocompleteSuggestions.js"); -function getHoverInformation(schema, queryText, cursor, contextToken, config) { - const token = contextToken || (0, _getAutocompleteSuggestions.getTokenAtPosition)(queryText, cursor); - if (!schema || !token || !token.state) { - return ''; - } - const { - kind, - step - } = token.state; - const typeInfo = (0, _getAutocompleteSuggestions.getTypeInfo)(schema, token.state); - const options = Object.assign(Object.assign({}, config), { - schema - }); - if (kind === 'Field' && step === 0 && typeInfo.fieldDef || kind === 'AliasedField' && step === 2 && typeInfo.fieldDef) { - const into = []; - renderMdCodeStart(into, options); - renderField(into, typeInfo, options); - renderMdCodeEnd(into, options); - renderDescription(into, options, typeInfo.fieldDef); - return into.join('').trim(); - } - if (kind === 'Directive' && step === 1 && typeInfo.directiveDef) { - const into = []; - renderMdCodeStart(into, options); - renderDirective(into, typeInfo, options); - renderMdCodeEnd(into, options); - renderDescription(into, options, typeInfo.directiveDef); - return into.join('').trim(); - } - if (kind === 'Argument' && step === 0 && typeInfo.argDef) { - const into = []; - renderMdCodeStart(into, options); - renderArg(into, typeInfo, options); - renderMdCodeEnd(into, options); - renderDescription(into, options, typeInfo.argDef); - return into.join('').trim(); - } - if (kind === 'EnumValue' && typeInfo.enumValue && 'description' in typeInfo.enumValue) { - const into = []; - renderMdCodeStart(into, options); - renderEnumValue(into, typeInfo, options); - renderMdCodeEnd(into, options); - renderDescription(into, options, typeInfo.enumValue); - return into.join('').trim(); - } - if (kind === 'NamedType' && typeInfo.type && 'description' in typeInfo.type) { - const into = []; - renderMdCodeStart(into, options); - renderType(into, typeInfo, options, typeInfo.type); - renderMdCodeEnd(into, options); - renderDescription(into, options, typeInfo.type); - return into.join('').trim(); - } - return ''; -} -function renderMdCodeStart(into, options) { - if (options.useMarkdown) { - text(into, '```graphql\n'); - } -} -function renderMdCodeEnd(into, options) { - if (options.useMarkdown) { - text(into, '\n```'); - } -} -function renderField(into, typeInfo, options) { - renderQualifiedField(into, typeInfo, options); - renderTypeAnnotation(into, typeInfo, options, typeInfo.type); -} -function renderQualifiedField(into, typeInfo, options) { - if (!typeInfo.fieldDef) { - return; - } - const fieldName = typeInfo.fieldDef.name; - if (fieldName.slice(0, 2) !== '__') { - renderType(into, typeInfo, options, typeInfo.parentType); - text(into, '.'); - } - text(into, fieldName); -} -function renderDirective(into, typeInfo, _options) { - if (!typeInfo.directiveDef) { - return; - } - const name = '@' + typeInfo.directiveDef.name; - text(into, name); -} -function renderArg(into, typeInfo, options) { - if (typeInfo.directiveDef) { - renderDirective(into, typeInfo, options); - } else if (typeInfo.fieldDef) { - renderQualifiedField(into, typeInfo, options); - } - if (!typeInfo.argDef) { - return; - } - const { - name - } = typeInfo.argDef; - text(into, '('); - text(into, name); - renderTypeAnnotation(into, typeInfo, options, typeInfo.inputType); - text(into, ')'); -} -function renderTypeAnnotation(into, typeInfo, options, t) { - text(into, ': '); - renderType(into, typeInfo, options, t); -} -function renderEnumValue(into, typeInfo, options) { - if (!typeInfo.enumValue) { - return; - } - const { - name - } = typeInfo.enumValue; - renderType(into, typeInfo, options, typeInfo.inputType); - text(into, '.'); - text(into, name); -} -function renderType(into, typeInfo, options, t) { - if (!t) { - return; - } - if (t instanceof _graphql.GraphQLNonNull) { - renderType(into, typeInfo, options, t.ofType); - text(into, '!'); - } else if (t instanceof _graphql.GraphQLList) { - text(into, '['); - renderType(into, typeInfo, options, t.ofType); - text(into, ']'); - } else { - text(into, t.name); - } -} -function renderDescription(into, options, def) { - if (!def) { - return; - } - const description = typeof def.description === 'string' ? def.description : null; - if (description) { - text(into, '\n\n'); - text(into, description); - } - renderDeprecation(into, options, def); -} -function renderDeprecation(into, _options, def) { - if (!def) { - return; - } - const reason = def.deprecationReason || null; - if (!reason) { - return; - } - text(into, '\n\n'); - text(into, 'Deprecated: '); - text(into, reason); -} -function text(into, content) { - into.push(content); -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/interface/getOutline.js": -/*!******************************************************************!*\ - !*** ../../graphql-language-service/esm/interface/getOutline.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getOutline = getOutline; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -var _utils = __webpack_require__(/*! ../utils */ "../../graphql-language-service/esm/utils/index.js"); -const { - INLINE_FRAGMENT -} = _graphql.Kind; -const OUTLINEABLE_KINDS = { - Field: true, - OperationDefinition: true, - Document: true, - SelectionSet: true, - Name: true, - FragmentDefinition: true, - FragmentSpread: true, - InlineFragment: true, - ObjectTypeDefinition: true, - InputObjectTypeDefinition: true, - InterfaceTypeDefinition: true, - EnumTypeDefinition: true, - EnumValueDefinition: true, - InputValueDefinition: true, - FieldDefinition: true -}; -function getOutline(documentText) { - let ast; - try { - ast = (0, _graphql.parse)(documentText); - } catch (_a) { - return null; - } - const visitorFns = outlineTreeConverter(documentText); - const outlineTrees = (0, _graphql.visit)(ast, { - leave(node) { - if (visitorFns !== undefined && node.kind in visitorFns) { - return visitorFns[node.kind](node); - } - return null; - } - }); - return { - outlineTrees - }; -} -function outlineTreeConverter(docText) { - const meta = node => { - return { - representativeName: node.name, - startPosition: (0, _utils.offsetToPosition)(docText, node.loc.start), - endPosition: (0, _utils.offsetToPosition)(docText, node.loc.end), - kind: node.kind, - children: node.selectionSet || node.fields || node.values || node.arguments || [] - }; - }; - return { - Field(node) { - const tokenizedText = node.alias ? [buildToken('plain', node.alias), buildToken('plain', ': ')] : []; - tokenizedText.push(buildToken('plain', node.name)); - return Object.assign({ - tokenizedText - }, meta(node)); - }, - OperationDefinition: node => Object.assign({ - tokenizedText: [buildToken('keyword', node.operation), buildToken('whitespace', ' '), buildToken('class-name', node.name)] - }, meta(node)), - Document: node => node.definitions, - SelectionSet: node => concatMap(node.selections, child => { - return child.kind === INLINE_FRAGMENT ? child.selectionSet : child; - }), - Name: node => node.value, - FragmentDefinition: node => Object.assign({ - tokenizedText: [buildToken('keyword', 'fragment'), buildToken('whitespace', ' '), buildToken('class-name', node.name)] - }, meta(node)), - InterfaceTypeDefinition: node => Object.assign({ - tokenizedText: [buildToken('keyword', 'interface'), buildToken('whitespace', ' '), buildToken('class-name', node.name)] - }, meta(node)), - EnumTypeDefinition: node => Object.assign({ - tokenizedText: [buildToken('keyword', 'enum'), buildToken('whitespace', ' '), buildToken('class-name', node.name)] - }, meta(node)), - EnumValueDefinition: node => Object.assign({ - tokenizedText: [buildToken('plain', node.name)] - }, meta(node)), - ObjectTypeDefinition: node => Object.assign({ - tokenizedText: [buildToken('keyword', 'type'), buildToken('whitespace', ' '), buildToken('class-name', node.name)] - }, meta(node)), - InputObjectTypeDefinition: node => Object.assign({ - tokenizedText: [buildToken('keyword', 'input'), buildToken('whitespace', ' '), buildToken('class-name', node.name)] - }, meta(node)), - FragmentSpread: node => Object.assign({ - tokenizedText: [buildToken('plain', '...'), buildToken('class-name', node.name)] - }, meta(node)), - InputValueDefinition(node) { - return Object.assign({ - tokenizedText: [buildToken('plain', node.name)] - }, meta(node)); - }, - FieldDefinition(node) { - return Object.assign({ - tokenizedText: [buildToken('plain', node.name)] - }, meta(node)); - }, - InlineFragment: node => node.selectionSet - }; -} -function buildToken(kind, value) { - return { - kind, - value - }; -} -function concatMap(arr, fn) { - const res = []; - for (let i = 0; i < arr.length; i++) { - const x = fn(arr[i], i); - if (Array.isArray(x)) { - res.push(...x); - } else { - res.push(x); - } - } - return res; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/interface/index.js": -/*!*************************************************************!*\ - !*** ../../graphql-language-service/esm/interface/index.js ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -var _exportNames = { - getOutline: true, - getHoverInformation: true -}; -Object.defineProperty(exports, "getHoverInformation", ({ - enumerable: true, - get: function () { - return _getHoverInformation.getHoverInformation; - } -})); -Object.defineProperty(exports, "getOutline", ({ - enumerable: true, - get: function () { - return _getOutline.getOutline; - } -})); -var _autocompleteUtils = __webpack_require__(/*! ./autocompleteUtils */ "../../graphql-language-service/esm/interface/autocompleteUtils.js"); -Object.keys(_autocompleteUtils).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; - if (key in exports && exports[key] === _autocompleteUtils[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _autocompleteUtils[key]; - } - }); -}); -var _getAutocompleteSuggestions = __webpack_require__(/*! ./getAutocompleteSuggestions */ "../../graphql-language-service/esm/interface/getAutocompleteSuggestions.js"); -Object.keys(_getAutocompleteSuggestions).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; - if (key in exports && exports[key] === _getAutocompleteSuggestions[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _getAutocompleteSuggestions[key]; - } - }); -}); -var _getDefinition = __webpack_require__(/*! ./getDefinition */ "../../graphql-language-service/esm/interface/getDefinition.js"); -Object.keys(_getDefinition).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; - if (key in exports && exports[key] === _getDefinition[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _getDefinition[key]; - } - }); -}); -var _getDiagnostics = __webpack_require__(/*! ./getDiagnostics */ "../../graphql-language-service/esm/interface/getDiagnostics.js"); -Object.keys(_getDiagnostics).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; - if (key in exports && exports[key] === _getDiagnostics[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _getDiagnostics[key]; - } - }); -}); -var _getOutline = __webpack_require__(/*! ./getOutline */ "../../graphql-language-service/esm/interface/getOutline.js"); -var _getHoverInformation = __webpack_require__(/*! ./getHoverInformation */ "../../graphql-language-service/esm/interface/getHoverInformation.js"); - -/***/ }), - -/***/ "../../graphql-language-service/esm/parser/CharacterStream.js": -/*!********************************************************************!*\ - !*** ../../graphql-language-service/esm/parser/CharacterStream.js ***! - \********************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = void 0; -class CharacterStream { - constructor(sourceText) { - var _this = this; - this._start = 0; - this._pos = 0; - this.getStartOfToken = () => this._start; - this.getCurrentPosition = () => this._pos; - this.eol = () => this._sourceText.length === this._pos; - this.sol = () => this._pos === 0; - this.peek = () => { - return this._sourceText.charAt(this._pos) || null; - }; - this.next = () => { - const char = this._sourceText.charAt(this._pos); - this._pos++; - return char; - }; - this.eat = pattern => { - const isMatched = this._testNextCharacter(pattern); - if (isMatched) { - this._start = this._pos; - this._pos++; - return this._sourceText.charAt(this._pos - 1); - } - return undefined; - }; - this.eatWhile = match => { - let isMatched = this._testNextCharacter(match); - let didEat = false; - if (isMatched) { - didEat = isMatched; - this._start = this._pos; - } - while (isMatched) { - this._pos++; - isMatched = this._testNextCharacter(match); - didEat = true; - } - return didEat; - }; - this.eatSpace = () => this.eatWhile(/[\s\u00a0]/); - this.skipToEnd = () => { - this._pos = this._sourceText.length; - }; - this.skipTo = position => { - this._pos = position; - }; - this.match = function (pattern) { - let consume = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - let caseFold = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - let token = null; - let match = null; - if (typeof pattern === 'string') { - const regex = new RegExp(pattern, caseFold ? 'i' : 'g'); - match = regex.test(_this._sourceText.slice(_this._pos, _this._pos + pattern.length)); - token = pattern; - } else if (pattern instanceof RegExp) { - match = _this._sourceText.slice(_this._pos).match(pattern); - token = match === null || match === void 0 ? void 0 : match[0]; - } - if (match != null && (typeof pattern === 'string' || match instanceof Array && _this._sourceText.startsWith(match[0], _this._pos))) { - if (consume) { - _this._start = _this._pos; - if (token && token.length) { - _this._pos += token.length; - } - } - return match; - } - return false; - }; - this.backUp = num => { - this._pos -= num; - }; - this.column = () => this._pos; - this.indentation = () => { - const match = this._sourceText.match(/\s*/); - let indent = 0; - if (match && match.length !== 0) { - const whiteSpaces = match[0]; - let pos = 0; - while (whiteSpaces.length > pos) { - if (whiteSpaces.charCodeAt(pos) === 9) { - indent += 2; - } else { - indent++; - } - pos++; - } - } - return indent; - }; - this.current = () => this._sourceText.slice(this._start, this._pos); - this._sourceText = sourceText; - } - _testNextCharacter(pattern) { - const character = this._sourceText.charAt(this._pos); - let isMatched = false; - if (typeof pattern === 'string') { - isMatched = character === pattern; - } else { - isMatched = pattern instanceof RegExp ? pattern.test(character) : pattern(character); - } - return isMatched; - } -} -exports["default"] = CharacterStream; - -/***/ }), - -/***/ "../../graphql-language-service/esm/parser/RuleHelpers.js": -/*!****************************************************************!*\ - !*** ../../graphql-language-service/esm/parser/RuleHelpers.js ***! - \****************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.butNot = butNot; -exports.list = list; -exports.opt = opt; -exports.p = p; -exports.t = t; -function opt(ofRule) { - return { - ofRule - }; -} -function list(ofRule, separator) { - return { - ofRule, - isList: true, - separator - }; -} -function butNot(rule, exclusions) { - const ruleMatch = rule.match; - rule.match = token => { - let check = false; - if (ruleMatch) { - check = ruleMatch(token); - } - return check && exclusions.every(exclusion => exclusion.match && !exclusion.match(token)); - }; - return rule; -} -function t(kind, style) { - return { - style, - match: token => token.kind === kind - }; -} -function p(value, style) { - return { - style: style || 'punctuation', - match: token => token.kind === 'Punctuation' && token.value === value - }; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/parser/Rules.js": -/*!**********************************************************!*\ - !*** ../../graphql-language-service/esm/parser/Rules.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isIgnored = exports.ParseRules = exports.LexRules = void 0; -var _RuleHelpers = __webpack_require__(/*! ./RuleHelpers */ "../../graphql-language-service/esm/parser/RuleHelpers.js"); -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const isIgnored = ch => ch === ' ' || ch === '\t' || ch === ',' || ch === '\n' || ch === '\r' || ch === '\uFEFF' || ch === '\u00A0'; -exports.isIgnored = isIgnored; -const LexRules = { - Name: /^[_A-Za-z][_0-9A-Za-z]*/, - Punctuation: /^(?:!|\$|\(|\)|\.\.\.|:|=|&|@|\[|]|\{|\||\})/, - Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, - String: /^(?:"""(?:\\"""|[^"]|"[^"]|""[^"])*(?:""")?|"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?)/, - Comment: /^#.*/ -}; -exports.LexRules = LexRules; -const ParseRules = { - Document: [(0, _RuleHelpers.list)('Definition')], - Definition(token) { - switch (token.value) { - case '{': - return 'ShortQuery'; - case 'query': - return 'Query'; - case 'mutation': - return 'Mutation'; - case 'subscription': - return 'Subscription'; - case 'fragment': - return _graphql.Kind.FRAGMENT_DEFINITION; - case 'schema': - return 'SchemaDef'; - case 'scalar': - return 'ScalarDef'; - case 'type': - return 'ObjectTypeDef'; - case 'interface': - return 'InterfaceDef'; - case 'union': - return 'UnionDef'; - case 'enum': - return 'EnumDef'; - case 'input': - return 'InputDef'; - case 'extend': - return 'ExtendDef'; - case 'directive': - return 'DirectiveDef'; - } - }, - ShortQuery: ['SelectionSet'], - Query: [word('query'), (0, _RuleHelpers.opt)(name('def')), (0, _RuleHelpers.opt)('VariableDefinitions'), (0, _RuleHelpers.list)('Directive'), 'SelectionSet'], - Mutation: [word('mutation'), (0, _RuleHelpers.opt)(name('def')), (0, _RuleHelpers.opt)('VariableDefinitions'), (0, _RuleHelpers.list)('Directive'), 'SelectionSet'], - Subscription: [word('subscription'), (0, _RuleHelpers.opt)(name('def')), (0, _RuleHelpers.opt)('VariableDefinitions'), (0, _RuleHelpers.list)('Directive'), 'SelectionSet'], - VariableDefinitions: [(0, _RuleHelpers.p)('('), (0, _RuleHelpers.list)('VariableDefinition'), (0, _RuleHelpers.p)(')')], - VariableDefinition: ['Variable', (0, _RuleHelpers.p)(':'), 'Type', (0, _RuleHelpers.opt)('DefaultValue')], - Variable: [(0, _RuleHelpers.p)('$', 'variable'), name('variable')], - DefaultValue: [(0, _RuleHelpers.p)('='), 'Value'], - SelectionSet: [(0, _RuleHelpers.p)('{'), (0, _RuleHelpers.list)('Selection'), (0, _RuleHelpers.p)('}')], - Selection(token, stream) { - return token.value === '...' ? stream.match(/[\s\u00a0,]*(on\b|@|{)/, false) ? 'InlineFragment' : 'FragmentSpread' : stream.match(/[\s\u00a0,]*:/, false) ? 'AliasedField' : 'Field'; - }, - AliasedField: [name('property'), (0, _RuleHelpers.p)(':'), name('qualifier'), (0, _RuleHelpers.opt)('Arguments'), (0, _RuleHelpers.list)('Directive'), (0, _RuleHelpers.opt)('SelectionSet')], - Field: [name('property'), (0, _RuleHelpers.opt)('Arguments'), (0, _RuleHelpers.list)('Directive'), (0, _RuleHelpers.opt)('SelectionSet')], - Arguments: [(0, _RuleHelpers.p)('('), (0, _RuleHelpers.list)('Argument'), (0, _RuleHelpers.p)(')')], - Argument: [name('attribute'), (0, _RuleHelpers.p)(':'), 'Value'], - FragmentSpread: [(0, _RuleHelpers.p)('...'), name('def'), (0, _RuleHelpers.list)('Directive')], - InlineFragment: [(0, _RuleHelpers.p)('...'), (0, _RuleHelpers.opt)('TypeCondition'), (0, _RuleHelpers.list)('Directive'), 'SelectionSet'], - FragmentDefinition: [word('fragment'), (0, _RuleHelpers.opt)((0, _RuleHelpers.butNot)(name('def'), [word('on')])), 'TypeCondition', (0, _RuleHelpers.list)('Directive'), 'SelectionSet'], - TypeCondition: [word('on'), 'NamedType'], - Value(token) { - switch (token.kind) { - case 'Number': - return 'NumberValue'; - case 'String': - return 'StringValue'; - case 'Punctuation': - switch (token.value) { - case '[': - return 'ListValue'; - case '{': - return 'ObjectValue'; - case '$': - return 'Variable'; - case '&': - return 'NamedType'; - } - return null; - case 'Name': - switch (token.value) { - case 'true': - case 'false': - return 'BooleanValue'; - } - if (token.value === 'null') { - return 'NullValue'; - } - return 'EnumValue'; - } - }, - NumberValue: [(0, _RuleHelpers.t)('Number', 'number')], - StringValue: [{ - style: 'string', - match: token => token.kind === 'String', - update(state, token) { - if (token.value.startsWith('"""')) { - state.inBlockstring = !token.value.slice(3).endsWith('"""'); - } - } - }], - BooleanValue: [(0, _RuleHelpers.t)('Name', 'builtin')], - NullValue: [(0, _RuleHelpers.t)('Name', 'keyword')], - EnumValue: [name('string-2')], - ListValue: [(0, _RuleHelpers.p)('['), (0, _RuleHelpers.list)('Value'), (0, _RuleHelpers.p)(']')], - ObjectValue: [(0, _RuleHelpers.p)('{'), (0, _RuleHelpers.list)('ObjectField'), (0, _RuleHelpers.p)('}')], - ObjectField: [name('attribute'), (0, _RuleHelpers.p)(':'), 'Value'], - Type(token) { - return token.value === '[' ? 'ListType' : 'NonNullType'; - }, - ListType: [(0, _RuleHelpers.p)('['), 'Type', (0, _RuleHelpers.p)(']'), (0, _RuleHelpers.opt)((0, _RuleHelpers.p)('!'))], - NonNullType: ['NamedType', (0, _RuleHelpers.opt)((0, _RuleHelpers.p)('!'))], - NamedType: [type('atom')], - Directive: [(0, _RuleHelpers.p)('@', 'meta'), name('meta'), (0, _RuleHelpers.opt)('Arguments')], - DirectiveDef: [word('directive'), (0, _RuleHelpers.p)('@', 'meta'), name('meta'), (0, _RuleHelpers.opt)('ArgumentsDef'), word('on'), (0, _RuleHelpers.list)('DirectiveLocation', (0, _RuleHelpers.p)('|'))], - InterfaceDef: [word('interface'), name('atom'), (0, _RuleHelpers.opt)('Implements'), (0, _RuleHelpers.list)('Directive'), (0, _RuleHelpers.p)('{'), (0, _RuleHelpers.list)('FieldDef'), (0, _RuleHelpers.p)('}')], - Implements: [word('implements'), (0, _RuleHelpers.list)('NamedType', (0, _RuleHelpers.p)('&'))], - DirectiveLocation: [name('string-2')], - SchemaDef: [word('schema'), (0, _RuleHelpers.list)('Directive'), (0, _RuleHelpers.p)('{'), (0, _RuleHelpers.list)('OperationTypeDef'), (0, _RuleHelpers.p)('}')], - OperationTypeDef: [name('keyword'), (0, _RuleHelpers.p)(':'), name('atom')], - ScalarDef: [word('scalar'), name('atom'), (0, _RuleHelpers.list)('Directive')], - ObjectTypeDef: [word('type'), name('atom'), (0, _RuleHelpers.opt)('Implements'), (0, _RuleHelpers.list)('Directive'), (0, _RuleHelpers.p)('{'), (0, _RuleHelpers.list)('FieldDef'), (0, _RuleHelpers.p)('}')], - FieldDef: [name('property'), (0, _RuleHelpers.opt)('ArgumentsDef'), (0, _RuleHelpers.p)(':'), 'Type', (0, _RuleHelpers.list)('Directive')], - ArgumentsDef: [(0, _RuleHelpers.p)('('), (0, _RuleHelpers.list)('InputValueDef'), (0, _RuleHelpers.p)(')')], - InputValueDef: [name('attribute'), (0, _RuleHelpers.p)(':'), 'Type', (0, _RuleHelpers.opt)('DefaultValue'), (0, _RuleHelpers.list)('Directive')], - UnionDef: [word('union'), name('atom'), (0, _RuleHelpers.list)('Directive'), (0, _RuleHelpers.p)('='), (0, _RuleHelpers.list)('UnionMember', (0, _RuleHelpers.p)('|'))], - UnionMember: ['NamedType'], - EnumDef: [word('enum'), name('atom'), (0, _RuleHelpers.list)('Directive'), (0, _RuleHelpers.p)('{'), (0, _RuleHelpers.list)('EnumValueDef'), (0, _RuleHelpers.p)('}')], - EnumValueDef: [name('string-2'), (0, _RuleHelpers.list)('Directive')], - InputDef: [word('input'), name('atom'), (0, _RuleHelpers.list)('Directive'), (0, _RuleHelpers.p)('{'), (0, _RuleHelpers.list)('InputValueDef'), (0, _RuleHelpers.p)('}')], - ExtendDef: [word('extend'), 'ExtensionDefinition'], - ExtensionDefinition(token) { - switch (token.value) { - case 'schema': - return _graphql.Kind.SCHEMA_EXTENSION; - case 'scalar': - return _graphql.Kind.SCALAR_TYPE_EXTENSION; - case 'type': - return _graphql.Kind.OBJECT_TYPE_EXTENSION; - case 'interface': - return _graphql.Kind.INTERFACE_TYPE_EXTENSION; - case 'union': - return _graphql.Kind.UNION_TYPE_EXTENSION; - case 'enum': - return _graphql.Kind.ENUM_TYPE_EXTENSION; - case 'input': - return _graphql.Kind.INPUT_OBJECT_TYPE_EXTENSION; - } - }, - [_graphql.Kind.SCHEMA_EXTENSION]: ['SchemaDef'], - [_graphql.Kind.SCALAR_TYPE_EXTENSION]: ['ScalarDef'], - [_graphql.Kind.OBJECT_TYPE_EXTENSION]: ['ObjectTypeDef'], - [_graphql.Kind.INTERFACE_TYPE_EXTENSION]: ['InterfaceDef'], - [_graphql.Kind.UNION_TYPE_EXTENSION]: ['UnionDef'], - [_graphql.Kind.ENUM_TYPE_EXTENSION]: ['EnumDef'], - [_graphql.Kind.INPUT_OBJECT_TYPE_EXTENSION]: ['InputDef'] -}; -exports.ParseRules = ParseRules; -function word(value) { - return { - style: 'keyword', - match: token => token.kind === 'Name' && token.value === value - }; -} -function name(style) { - return { - style, - match: token => token.kind === 'Name', - update(state, token) { - state.name = token.value; - } - }; -} -function type(style) { - return { - style, - match: token => token.kind === 'Name', - update(state, token) { - var _a; - if ((_a = state.prevState) === null || _a === void 0 ? void 0 : _a.prevState) { - state.name = token.value; - state.prevState.prevState.type = token.value; - } - } - }; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/parser/index.js": -/*!**********************************************************!*\ - !*** ../../graphql-language-service/esm/parser/index.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -var _exportNames = { - CharacterStream: true, - LexRules: true, - ParseRules: true, - isIgnored: true, - butNot: true, - list: true, - opt: true, - p: true, - t: true, - onlineParser: true -}; -Object.defineProperty(exports, "CharacterStream", ({ - enumerable: true, - get: function () { - return _CharacterStream.default; - } -})); -Object.defineProperty(exports, "LexRules", ({ - enumerable: true, - get: function () { - return _Rules.LexRules; - } -})); -Object.defineProperty(exports, "ParseRules", ({ - enumerable: true, - get: function () { - return _Rules.ParseRules; - } -})); -Object.defineProperty(exports, "butNot", ({ - enumerable: true, - get: function () { - return _RuleHelpers.butNot; - } -})); -Object.defineProperty(exports, "isIgnored", ({ - enumerable: true, - get: function () { - return _Rules.isIgnored; - } -})); -Object.defineProperty(exports, "list", ({ - enumerable: true, - get: function () { - return _RuleHelpers.list; - } -})); -Object.defineProperty(exports, "onlineParser", ({ - enumerable: true, - get: function () { - return _onlineParser.default; - } -})); -Object.defineProperty(exports, "opt", ({ - enumerable: true, - get: function () { - return _RuleHelpers.opt; - } -})); -Object.defineProperty(exports, "p", ({ - enumerable: true, - get: function () { - return _RuleHelpers.p; - } -})); -Object.defineProperty(exports, "t", ({ - enumerable: true, - get: function () { - return _RuleHelpers.t; - } -})); -var _CharacterStream = _interopRequireDefault(__webpack_require__(/*! ./CharacterStream */ "../../graphql-language-service/esm/parser/CharacterStream.js")); -var _Rules = __webpack_require__(/*! ./Rules */ "../../graphql-language-service/esm/parser/Rules.js"); -var _RuleHelpers = __webpack_require__(/*! ./RuleHelpers */ "../../graphql-language-service/esm/parser/RuleHelpers.js"); -var _onlineParser = _interopRequireDefault(__webpack_require__(/*! ./onlineParser */ "../../graphql-language-service/esm/parser/onlineParser.js")); -var _types = __webpack_require__(/*! ./types */ "../../graphql-language-service/esm/parser/types.js"); -Object.keys(_types).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; - if (key in exports && exports[key] === _types[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _types[key]; - } - }); -}); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/***/ }), - -/***/ "../../graphql-language-service/esm/parser/onlineParser.js": -/*!*****************************************************************!*\ - !*** ../../graphql-language-service/esm/parser/onlineParser.js ***! - \*****************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = onlineParser; -var _Rules = __webpack_require__(/*! ./Rules */ "../../graphql-language-service/esm/parser/Rules.js"); -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -function onlineParser() { - let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { - eatWhitespace: stream => stream.eatWhile(_Rules.isIgnored), - lexRules: _Rules.LexRules, - parseRules: _Rules.ParseRules, - editorConfig: {} - }; - return { - startState() { - const initialState = { - level: 0, - step: 0, - name: null, - kind: null, - type: null, - rule: null, - needsSeparator: false, - prevState: null - }; - pushRule(options.parseRules, initialState, _graphql.Kind.DOCUMENT); - return initialState; - }, - token(stream, state) { - return getToken(stream, state, options); - } - }; -} -function getToken(stream, state, options) { - var _a; - if (state.inBlockstring) { - if (stream.match(/.*"""/)) { - state.inBlockstring = false; - return 'string'; - } - stream.skipToEnd(); - return 'string'; - } - const { - lexRules, - parseRules, - eatWhitespace, - editorConfig - } = options; - if (state.rule && state.rule.length === 0) { - popRule(state); - } else if (state.needsAdvance) { - state.needsAdvance = false; - advanceRule(state, true); - } - if (stream.sol()) { - const tabSize = (editorConfig === null || editorConfig === void 0 ? void 0 : editorConfig.tabSize) || 2; - state.indentLevel = Math.floor(stream.indentation() / tabSize); - } - if (eatWhitespace(stream)) { - return 'ws'; - } - const token = lex(lexRules, stream); - if (!token) { - const matchedSomething = stream.match(/\S+/); - if (!matchedSomething) { - stream.match(/\s/); - } - pushRule(SpecialParseRules, state, 'Invalid'); - return 'invalidchar'; - } - if (token.kind === 'Comment') { - pushRule(SpecialParseRules, state, 'Comment'); - return 'comment'; - } - const backupState = assign({}, state); - if (token.kind === 'Punctuation') { - if (/^[{([]/.test(token.value)) { - if (state.indentLevel !== undefined) { - state.levels = (state.levels || []).concat(state.indentLevel + 1); - } - } else if (/^[})\]]/.test(token.value)) { - const levels = state.levels = (state.levels || []).slice(0, -1); - if (state.indentLevel && levels.length > 0 && levels.at(-1) < state.indentLevel) { - state.indentLevel = levels.at(-1); - } - } - } - while (state.rule) { - let expected = typeof state.rule === 'function' ? state.step === 0 ? state.rule(token, stream) : null : state.rule[state.step]; - if (state.needsSeparator) { - expected = expected === null || expected === void 0 ? void 0 : expected.separator; - } - if (expected) { - if (expected.ofRule) { - expected = expected.ofRule; - } - if (typeof expected === 'string') { - pushRule(parseRules, state, expected); - continue; - } - if ((_a = expected.match) === null || _a === void 0 ? void 0 : _a.call(expected, token)) { - if (expected.update) { - expected.update(state, token); - } - if (token.kind === 'Punctuation') { - advanceRule(state, true); - } else { - state.needsAdvance = true; - } - return expected.style; - } - } - unsuccessful(state); - } - assign(state, backupState); - pushRule(SpecialParseRules, state, 'Invalid'); - return 'invalidchar'; -} -function assign(to, from) { - const keys = Object.keys(from); - for (let i = 0; i < keys.length; i++) { - to[keys[i]] = from[keys[i]]; - } - return to; -} -const SpecialParseRules = { - Invalid: [], - Comment: [] -}; -function pushRule(rules, state, ruleKind) { - if (!rules[ruleKind]) { - throw new TypeError('Unknown rule: ' + ruleKind); - } - state.prevState = Object.assign({}, state); - state.kind = ruleKind; - state.name = null; - state.type = null; - state.rule = rules[ruleKind]; - state.step = 0; - state.needsSeparator = false; -} -function popRule(state) { - if (!state.prevState) { - return; - } - state.kind = state.prevState.kind; - state.name = state.prevState.name; - state.type = state.prevState.type; - state.rule = state.prevState.rule; - state.step = state.prevState.step; - state.needsSeparator = state.prevState.needsSeparator; - state.prevState = state.prevState.prevState; -} -function advanceRule(state, successful) { - var _a; - if (isList(state) && state.rule) { - const step = state.rule[state.step]; - if (step.separator) { - const { - separator - } = step; - state.needsSeparator = !state.needsSeparator; - if (!state.needsSeparator && separator.ofRule) { - return; - } - } - if (successful) { - return; - } - } - state.needsSeparator = false; - state.step++; - while (state.rule && !(Array.isArray(state.rule) && state.step < state.rule.length)) { - popRule(state); - if (state.rule) { - if (isList(state)) { - if ((_a = state.rule) === null || _a === void 0 ? void 0 : _a[state.step].separator) { - state.needsSeparator = !state.needsSeparator; - } - } else { - state.needsSeparator = false; - state.step++; - } - } - } -} -function isList(state) { - const step = Array.isArray(state.rule) && typeof state.rule[state.step] !== 'string' && state.rule[state.step]; - return step && step.isList; -} -function unsuccessful(state) { - while (state.rule && !(Array.isArray(state.rule) && state.rule[state.step].ofRule)) { - popRule(state); - } - if (state.rule) { - advanceRule(state, false); - } -} -function lex(lexRules, stream) { - const kinds = Object.keys(lexRules); - for (let i = 0; i < kinds.length; i++) { - const match = stream.match(lexRules[kinds[i]]); - if (match && match instanceof Array) { - return { - kind: kinds[i], - value: match[0] - }; - } - } -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/parser/types.js": -/*!**********************************************************!*\ - !*** ../../graphql-language-service/esm/parser/types.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.RuleKinds = exports.AdditionalRuleKinds = void 0; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const AdditionalRuleKinds = { - ALIASED_FIELD: 'AliasedField', - ARGUMENTS: 'Arguments', - SHORT_QUERY: 'ShortQuery', - QUERY: 'Query', - MUTATION: 'Mutation', - SUBSCRIPTION: 'Subscription', - TYPE_CONDITION: 'TypeCondition', - INVALID: 'Invalid', - COMMENT: 'Comment', - SCHEMA_DEF: 'SchemaDef', - SCALAR_DEF: 'ScalarDef', - OBJECT_TYPE_DEF: 'ObjectTypeDef', - OBJECT_VALUE: 'ObjectValue', - LIST_VALUE: 'ListValue', - INTERFACE_DEF: 'InterfaceDef', - UNION_DEF: 'UnionDef', - ENUM_DEF: 'EnumDef', - ENUM_VALUE: 'EnumValue', - FIELD_DEF: 'FieldDef', - INPUT_DEF: 'InputDef', - INPUT_VALUE_DEF: 'InputValueDef', - ARGUMENTS_DEF: 'ArgumentsDef', - EXTEND_DEF: 'ExtendDef', - EXTENSION_DEFINITION: 'ExtensionDefinition', - DIRECTIVE_DEF: 'DirectiveDef', - IMPLEMENTS: 'Implements', - VARIABLE_DEFINITIONS: 'VariableDefinitions', - TYPE: 'Type' -}; -exports.AdditionalRuleKinds = AdditionalRuleKinds; -const RuleKinds = Object.assign(Object.assign({}, _graphql.Kind), AdditionalRuleKinds); -exports.RuleKinds = RuleKinds; - -/***/ }), - -/***/ "../../graphql-language-service/esm/types.js": -/*!***************************************************!*\ - !*** ../../graphql-language-service/esm/types.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FileChangeTypeKind = exports.CompletionItemKind = void 0; -Object.defineProperty(exports, "InsertTextFormat", ({ - enumerable: true, - get: function () { - return _vscodeLanguageserverTypes.InsertTextFormat; - } -})); -var _vscodeLanguageserverTypes = __webpack_require__(/*! vscode-languageserver-types */ "../../../node_modules/vscode-languageserver-types/lib/esm/main.js"); -const FileChangeTypeKind = { - Created: 1, - Changed: 2, - Deleted: 3 -}; -exports.FileChangeTypeKind = FileChangeTypeKind; -var CompletionItemKind; -exports.CompletionItemKind = CompletionItemKind; -(function (CompletionItemKind) { - CompletionItemKind.Text = 1; - CompletionItemKind.Method = 2; - CompletionItemKind.Function = 3; - CompletionItemKind.Constructor = 4; - CompletionItemKind.Field = 5; - CompletionItemKind.Variable = 6; - CompletionItemKind.Class = 7; - CompletionItemKind.Interface = 8; - CompletionItemKind.Module = 9; - CompletionItemKind.Property = 10; - CompletionItemKind.Unit = 11; - CompletionItemKind.Value = 12; - CompletionItemKind.Enum = 13; - CompletionItemKind.Keyword = 14; - CompletionItemKind.Snippet = 15; - CompletionItemKind.Color = 16; - CompletionItemKind.File = 17; - CompletionItemKind.Reference = 18; - CompletionItemKind.Folder = 19; - CompletionItemKind.EnumMember = 20; - CompletionItemKind.Constant = 21; - CompletionItemKind.Struct = 22; - CompletionItemKind.Event = 23; - CompletionItemKind.Operator = 24; - CompletionItemKind.TypeParameter = 25; -})(CompletionItemKind || (exports.CompletionItemKind = CompletionItemKind = {})); - -/***/ }), - -/***/ "../../graphql-language-service/esm/utils/Range.js": -/*!*********************************************************!*\ - !*** ../../graphql-language-service/esm/utils/Range.js ***! - \*********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Range = exports.Position = void 0; -exports.locToRange = locToRange; -exports.offsetToPosition = offsetToPosition; -class Range { - constructor(start, end) { - this.containsPosition = position => { - if (this.start.line === position.line) { - return this.start.character <= position.character; - } - if (this.end.line === position.line) { - return this.end.character >= position.character; - } - return this.start.line <= position.line && this.end.line >= position.line; - }; - this.start = start; - this.end = end; - } - setStart(line, character) { - this.start = new Position(line, character); - } - setEnd(line, character) { - this.end = new Position(line, character); - } -} -exports.Range = Range; -class Position { - constructor(line, character) { - this.lessThanOrEqualTo = position => this.line < position.line || this.line === position.line && this.character <= position.character; - this.line = line; - this.character = character; - } - setLine(line) { - this.line = line; - } - setCharacter(character) { - this.character = character; - } -} -exports.Position = Position; -function offsetToPosition(text, loc) { - const EOL = '\n'; - const buf = text.slice(0, loc); - const lines = buf.split(EOL).length - 1; - const lastLineIndex = buf.lastIndexOf(EOL); - return new Position(lines, loc - lastLineIndex - 1); -} -function locToRange(text, loc) { - const start = offsetToPosition(text, loc.start); - const end = offsetToPosition(text, loc.end); - return new Range(start, end); -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/utils/collectVariables.js": -/*!********************************************************************!*\ - !*** ../../graphql-language-service/esm/utils/collectVariables.js ***! - \********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.collectVariables = collectVariables; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -function collectVariables(schema, documentAST) { - const variableToType = Object.create(null); - for (const definition of documentAST.definitions) { - if (definition.kind === 'OperationDefinition') { - const { - variableDefinitions - } = definition; - if (variableDefinitions) { - for (const { - variable, - type - } of variableDefinitions) { - const inputType = (0, _graphql.typeFromAST)(schema, type); - if (inputType) { - variableToType[variable.name.value] = inputType; - } else if (type.kind === _graphql.Kind.NAMED_TYPE && type.name.value === 'Float') { - variableToType[variable.name.value] = _graphql.GraphQLFloat; - } - } - } - } - } - return variableToType; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/utils/fragmentDependencies.js": -/*!************************************************************************!*\ - !*** ../../graphql-language-service/esm/utils/fragmentDependencies.js ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getFragmentDependenciesForAST = exports.getFragmentDependencies = void 0; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -var _nullthrows = _interopRequireDefault(__webpack_require__(/*! nullthrows */ "../../../node_modules/nullthrows/nullthrows.js")); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -const getFragmentDependencies = (operationString, fragmentDefinitions) => { - if (!fragmentDefinitions) { - return []; - } - let parsedOperation; - try { - parsedOperation = (0, _graphql.parse)(operationString); - } catch (_a) { - return []; - } - return getFragmentDependenciesForAST(parsedOperation, fragmentDefinitions); -}; -exports.getFragmentDependencies = getFragmentDependencies; -const getFragmentDependenciesForAST = (parsedOperation, fragmentDefinitions) => { - if (!fragmentDefinitions) { - return []; - } - const existingFrags = new Map(); - const referencedFragNames = new Set(); - (0, _graphql.visit)(parsedOperation, { - FragmentDefinition(node) { - existingFrags.set(node.name.value, true); - }, - FragmentSpread(node) { - if (!referencedFragNames.has(node.name.value)) { - referencedFragNames.add(node.name.value); - } - } - }); - const asts = new Set(); - for (const name of referencedFragNames) { - if (!existingFrags.has(name) && fragmentDefinitions.has(name)) { - asts.add((0, _nullthrows.default)(fragmentDefinitions.get(name))); - } - } - const referencedFragments = []; - for (const ast of asts) { - (0, _graphql.visit)(ast, { - FragmentSpread(node) { - if (!referencedFragNames.has(node.name.value) && fragmentDefinitions.get(node.name.value)) { - asts.add((0, _nullthrows.default)(fragmentDefinitions.get(node.name.value))); - referencedFragNames.add(node.name.value); - } - } - }); - if (!existingFrags.has(ast.name.value)) { - referencedFragments.push(ast); - } - } - return referencedFragments; -}; -exports.getFragmentDependenciesForAST = getFragmentDependenciesForAST; - -/***/ }), - -/***/ "../../graphql-language-service/esm/utils/getASTNodeAtPosition.js": -/*!************************************************************************!*\ - !*** ../../graphql-language-service/esm/utils/getASTNodeAtPosition.js ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getASTNodeAtPosition = getASTNodeAtPosition; -exports.pointToOffset = pointToOffset; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -function getASTNodeAtPosition(query, ast, point) { - const offset = pointToOffset(query, point); - let nodeContainingPosition; - (0, _graphql.visit)(ast, { - enter(node) { - if (node.kind !== 'Name' && node.loc && node.loc.start <= offset && offset <= node.loc.end) { - nodeContainingPosition = node; - } else { - return false; - } - }, - leave(node) { - if (node.loc && node.loc.start <= offset && offset <= node.loc.end) { - return false; - } - } - }); - return nodeContainingPosition; -} -function pointToOffset(text, point) { - const linesUntilPosition = text.split('\n').slice(0, point.line); - return point.character + linesUntilPosition.map(line => line.length + 1).reduce((a, b) => a + b, 0); -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/utils/getOperationFacts.js": -/*!*********************************************************************!*\ - !*** ../../graphql-language-service/esm/utils/getOperationFacts.js ***! - \*********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports["default"] = getOperationFacts; -exports.getOperationASTFacts = getOperationASTFacts; -exports.getQueryFacts = void 0; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -var _collectVariables = __webpack_require__(/*! ./collectVariables */ "../../graphql-language-service/esm/utils/collectVariables.js"); -function getOperationASTFacts(documentAST, schema) { - const variableToType = schema ? (0, _collectVariables.collectVariables)(schema, documentAST) : undefined; - const operations = []; - (0, _graphql.visit)(documentAST, { - OperationDefinition(node) { - operations.push(node); - } - }); - return { - variableToType, - operations - }; -} -function getOperationFacts(schema, documentString) { - if (!documentString) { - return; - } - try { - const documentAST = (0, _graphql.parse)(documentString); - return Object.assign(Object.assign({}, getOperationASTFacts(documentAST, schema)), { - documentAST - }); - } catch (_a) { - return; - } -} -const getQueryFacts = getOperationFacts; -exports.getQueryFacts = getQueryFacts; - -/***/ }), - -/***/ "../../graphql-language-service/esm/utils/getVariablesJSONSchema.js": -/*!**************************************************************************!*\ - !*** ../../graphql-language-service/esm/utils/getVariablesJSONSchema.js ***! - \**************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.defaultJSONSchemaOptions = void 0; -exports.getVariablesJSONSchema = getVariablesJSONSchema; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const defaultJSONSchemaOptions = { - useMarkdownDescription: false -}; -exports.defaultJSONSchemaOptions = defaultJSONSchemaOptions; -function text(into, newText) { - into.push(newText); -} -function renderType(into, t) { - if ((0, _graphql.isNonNullType)(t)) { - renderType(into, t.ofType); - text(into, '!'); - } else if ((0, _graphql.isListType)(t)) { - text(into, '['); - renderType(into, t.ofType); - text(into, ']'); - } else { - text(into, t.name); - } -} -function renderDefinitionDescription(t, useMarkdown, description) { - const into = []; - const type = 'type' in t ? t.type : t; - if ('type' in t && t.description) { - text(into, t.description); - text(into, '\n\n'); - } - text(into, renderTypeToString(type, useMarkdown)); - if (description) { - text(into, '\n'); - text(into, description); - } else if (!(0, _graphql.isScalarType)(type) && 'description' in type && type.description) { - text(into, '\n'); - text(into, type.description); - } else if ('ofType' in type && !(0, _graphql.isScalarType)(type.ofType) && 'description' in type.ofType && type.ofType.description) { - text(into, '\n'); - text(into, type.ofType.description); - } - return into.join(''); -} -function renderTypeToString(t, useMarkdown) { - const into = []; - if (useMarkdown) { - text(into, '```graphql\n'); - } - renderType(into, t); - if (useMarkdown) { - text(into, '\n```'); - } - return into.join(''); -} -const defaultScalarTypesMap = { - Int: { - type: 'integer' - }, - String: { - type: 'string' - }, - Float: { - type: 'number' - }, - ID: { - type: 'string' - }, - Boolean: { - type: 'boolean' - }, - DateTime: { - type: 'string' - } -}; -class Marker { - constructor() { - this.set = new Set(); - } - mark(name) { - if (this.set.has(name)) { - return false; - } - this.set.add(name); - return true; - } -} -function getJSONSchemaFromGraphQLType(fieldOrType, options) { - var _a, _b; - let definition = Object.create(null); - const definitions = Object.create(null); - const isField = ('type' in fieldOrType); - const type = isField ? fieldOrType.type : fieldOrType; - const baseType = (0, _graphql.isNonNullType)(type) ? type.ofType : type; - const required = (0, _graphql.isNonNullType)(type); - if ((0, _graphql.isScalarType)(baseType)) { - if ((_a = options === null || options === void 0 ? void 0 : options.scalarSchemas) === null || _a === void 0 ? void 0 : _a[baseType.name]) { - definition = JSON.parse(JSON.stringify(options.scalarSchemas[baseType.name])); - } else { - definition.type = ['string', 'number', 'boolean', 'integer']; - } - if (!required) { - if (Array.isArray(definition.type)) { - definition.type.push('null'); - } else if (definition.type) { - definition.type = [definition.type, 'null']; - } else if (definition.enum) { - definition.enum.push(null); - } else if (definition.oneOf) { - definition.oneOf.push({ - type: 'null' - }); - } else { - definition = { - oneOf: [definition, { - type: 'null' - }] - }; - } - } - } else if ((0, _graphql.isEnumType)(baseType)) { - definition.enum = baseType.getValues().map(val => val.name); - if (!required) { - definition.enum.push(null); - } - } else if ((0, _graphql.isListType)(baseType)) { - if (required) { - definition.type = 'array'; - } else { - definition.type = ['array', 'null']; - } - const { - definition: def, - definitions: defs - } = getJSONSchemaFromGraphQLType(baseType.ofType, options); - definition.items = def; - if (defs) { - for (const defName of Object.keys(defs)) { - definitions[defName] = defs[defName]; - } - } - } else if ((0, _graphql.isInputObjectType)(baseType)) { - if (required) { - definition.$ref = `#/definitions/${baseType.name}`; - } else { - definition.oneOf = [{ - $ref: `#/definitions/${baseType.name}` - }, { - type: 'null' - }]; - } - if ((_b = options === null || options === void 0 ? void 0 : options.definitionMarker) === null || _b === void 0 ? void 0 : _b.mark(baseType.name)) { - const fields = baseType.getFields(); - const fieldDef = { - type: 'object', - properties: {}, - required: [] - }; - fieldDef.description = renderDefinitionDescription(baseType); - if (options === null || options === void 0 ? void 0 : options.useMarkdownDescription) { - fieldDef.markdownDescription = renderDefinitionDescription(baseType, true); - } - for (const fieldName of Object.keys(fields)) { - const field = fields[fieldName]; - const { - required: fieldRequired, - definition: fieldDefinition, - definitions: typeDefinitions - } = getJSONSchemaFromGraphQLType(field, options); - fieldDef.properties[fieldName] = fieldDefinition; - if (fieldRequired) { - fieldDef.required.push(fieldName); - } - if (typeDefinitions) { - for (const [defName, value] of Object.entries(typeDefinitions)) { - definitions[defName] = value; - } - } - } - definitions[baseType.name] = fieldDef; - } - } - if ('defaultValue' in fieldOrType && fieldOrType.defaultValue !== undefined) { - definition.default = fieldOrType.defaultValue; - } - const { - description - } = definition; - definition.description = renderDefinitionDescription(fieldOrType, false, description); - if (options === null || options === void 0 ? void 0 : options.useMarkdownDescription) { - definition.markdownDescription = renderDefinitionDescription(fieldOrType, true, description); - } - return { - required, - definition, - definitions - }; -} -function getVariablesJSONSchema(variableToType, options) { - var _a; - const jsonSchema = { - $schema: 'http://json-schema.org/draft-04/schema', - type: 'object', - properties: {}, - required: [] - }; - const runtimeOptions = Object.assign(Object.assign({}, options), { - definitionMarker: new Marker(), - scalarSchemas: Object.assign(Object.assign({}, defaultScalarTypesMap), options === null || options === void 0 ? void 0 : options.scalarSchemas) - }); - if (variableToType) { - for (const [variableName, type] of Object.entries(variableToType)) { - const { - definition, - required, - definitions - } = getJSONSchemaFromGraphQLType(type, runtimeOptions); - jsonSchema.properties[variableName] = definition; - if (required) { - (_a = jsonSchema.required) === null || _a === void 0 ? void 0 : _a.push(variableName); - } - if (definitions) { - jsonSchema.definitions = Object.assign(Object.assign({}, jsonSchema === null || jsonSchema === void 0 ? void 0 : jsonSchema.definitions), definitions); - } - } - } - return jsonSchema; -} - -/***/ }), - -/***/ "../../graphql-language-service/esm/utils/index.js": -/*!*********************************************************!*\ - !*** ../../graphql-language-service/esm/utils/index.js ***! - \*********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "Position", ({ - enumerable: true, - get: function () { - return _Range.Position; - } -})); -Object.defineProperty(exports, "Range", ({ - enumerable: true, - get: function () { - return _Range.Range; - } -})); -Object.defineProperty(exports, "collectVariables", ({ - enumerable: true, - get: function () { - return _collectVariables.collectVariables; - } -})); -Object.defineProperty(exports, "getASTNodeAtPosition", ({ - enumerable: true, - get: function () { - return _getASTNodeAtPosition.getASTNodeAtPosition; - } -})); -Object.defineProperty(exports, "getFragmentDependencies", ({ - enumerable: true, - get: function () { - return _fragmentDependencies.getFragmentDependencies; - } -})); -Object.defineProperty(exports, "getFragmentDependenciesForAST", ({ - enumerable: true, - get: function () { - return _fragmentDependencies.getFragmentDependenciesForAST; - } -})); -Object.defineProperty(exports, "getOperationASTFacts", ({ - enumerable: true, - get: function () { - return _getOperationFacts.getOperationASTFacts; - } -})); -Object.defineProperty(exports, "getOperationFacts", ({ - enumerable: true, - get: function () { - return _getOperationFacts.default; - } -})); -Object.defineProperty(exports, "getQueryFacts", ({ - enumerable: true, - get: function () { - return _getOperationFacts.getQueryFacts; - } -})); -Object.defineProperty(exports, "getVariablesJSONSchema", ({ - enumerable: true, - get: function () { - return _getVariablesJSONSchema.getVariablesJSONSchema; - } -})); -Object.defineProperty(exports, "locToRange", ({ - enumerable: true, - get: function () { - return _Range.locToRange; - } -})); -Object.defineProperty(exports, "offsetToPosition", ({ - enumerable: true, - get: function () { - return _Range.offsetToPosition; - } -})); -Object.defineProperty(exports, "pointToOffset", ({ - enumerable: true, - get: function () { - return _getASTNodeAtPosition.pointToOffset; - } -})); -Object.defineProperty(exports, "validateWithCustomRules", ({ - enumerable: true, - get: function () { - return _validateWithCustomRules.validateWithCustomRules; - } -})); -var _fragmentDependencies = __webpack_require__(/*! ./fragmentDependencies */ "../../graphql-language-service/esm/utils/fragmentDependencies.js"); -var _getVariablesJSONSchema = __webpack_require__(/*! ./getVariablesJSONSchema */ "../../graphql-language-service/esm/utils/getVariablesJSONSchema.js"); -var _getASTNodeAtPosition = __webpack_require__(/*! ./getASTNodeAtPosition */ "../../graphql-language-service/esm/utils/getASTNodeAtPosition.js"); -var _Range = __webpack_require__(/*! ./Range */ "../../graphql-language-service/esm/utils/Range.js"); -var _validateWithCustomRules = __webpack_require__(/*! ./validateWithCustomRules */ "../../graphql-language-service/esm/utils/validateWithCustomRules.js"); -var _collectVariables = __webpack_require__(/*! ./collectVariables */ "../../graphql-language-service/esm/utils/collectVariables.js"); -var _getOperationFacts = _interopRequireWildcard(__webpack_require__(/*! ./getOperationFacts */ "../../graphql-language-service/esm/utils/getOperationFacts.js")); -function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } -function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } - -/***/ }), - -/***/ "../../graphql-language-service/esm/utils/validateWithCustomRules.js": -/*!***************************************************************************!*\ - !*** ../../graphql-language-service/esm/utils/validateWithCustomRules.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.validateWithCustomRules = validateWithCustomRules; -var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const specifiedSDLRules = [_graphql.LoneSchemaDefinitionRule, _graphql.UniqueOperationTypesRule, _graphql.UniqueTypeNamesRule, _graphql.UniqueEnumValueNamesRule, _graphql.UniqueFieldDefinitionNamesRule, _graphql.UniqueDirectiveNamesRule, _graphql.KnownTypeNamesRule, _graphql.KnownDirectivesRule, _graphql.UniqueDirectivesPerLocationRule, _graphql.PossibleTypeExtensionsRule, _graphql.UniqueArgumentNamesRule, _graphql.UniqueInputFieldNamesRule]; -function validateWithCustomRules(schema, ast, customRules, isRelayCompatMode, isSchemaDocument) { - const rules = _graphql.specifiedRules.filter(rule => { - if (rule === _graphql.NoUnusedFragmentsRule || rule === _graphql.ExecutableDefinitionsRule) { - return false; - } - if (isRelayCompatMode && rule === _graphql.KnownFragmentNamesRule) { - return false; - } - return true; - }); - if (customRules) { - Array.prototype.push.apply(rules, customRules); - } - if (isSchemaDocument) { - Array.prototype.push.apply(rules, specifiedSDLRules); - } - const errors = (0, _graphql.validate)(schema, ast, rules); - return errors.filter(error => { - if (error.message.includes('Unknown directive') && error.nodes) { - const node = error.nodes[0]; - if (node && node.kind === _graphql.Kind.DIRECTIVE) { - const name = node.name.value; - if (name === 'arguments' || name === 'argumentDefinitions') { - return false; - } - } - } - return true; - }); -} - -/***/ }), - -/***/ "./style.css": -/*!*******************!*\ - !*** ./style.css ***! - \*******************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -__webpack_require__.r(__webpack_exports__); -// extracted by mini-css-extract-plugin - - -/***/ }), - -/***/ "../../graphiql-react/dist/style.css": -/*!*******************************************!*\ - !*** ../../graphiql-react/dist/style.css ***! - \*******************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -__webpack_require__.r(__webpack_exports__); -// extracted by mini-css-extract-plugin - - -/***/ }), - -/***/ "../../graphiql-react/font/fira-code.css": -/*!***********************************************!*\ - !*** ../../graphiql-react/font/fira-code.css ***! - \***********************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -__webpack_require__.r(__webpack_exports__); -// extracted by mini-css-extract-plugin - - -/***/ }), - -/***/ "../../graphiql-react/font/roboto.css": -/*!********************************************!*\ - !*** ../../graphiql-react/font/roboto.css ***! - \********************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -__webpack_require__.r(__webpack_exports__); -// extracted by mini-css-extract-plugin - - -/***/ }), - -/***/ "react": -/*!************************!*\ - !*** external "React" ***! - \************************/ -/***/ (function(module) { - -module.exports = window["React"]; - -/***/ }), - -/***/ "react-dom": -/*!***************************!*\ - !*** external "ReactDOM" ***! - \***************************/ -/***/ (function(module) { - -module.exports = window["ReactDOM"]; - -/***/ }), - -/***/ "../../../node_modules/@headlessui/react/dist/headlessui.dev.cjs": -/*!***********************************************************************!*\ - !*** ../../../node_modules/@headlessui/react/dist/headlessui.dev.cjs ***! - \***********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; - -// src/index.ts -var src_exports = {}; -__export(src_exports, { - Combobox: () => Combobox, - Dialog: () => Dialog, - Disclosure: () => Disclosure, - FocusTrap: () => FocusTrap, - Listbox: () => Listbox, - Menu: () => Menu, - Popover: () => Popover, - Portal: () => Portal, - RadioGroup: () => RadioGroup, - Switch: () => Switch, - Tab: () => Tab, - Transition: () => Transition -}); -module.exports = __toCommonJS(src_exports); - -// src/components/combobox/combobox.tsx -var import_react19 = __toESM(__webpack_require__(/*! react */ "react"), 1); - -// src/hooks/use-computed.ts -var import_react3 = __webpack_require__(/*! react */ "react"); - -// src/hooks/use-iso-morphic-effect.ts -var import_react = __webpack_require__(/*! react */ "react"); - -// src/utils/env.ts -var Env = class { - constructor() { - __publicField(this, "current", this.detect()); - __publicField(this, "handoffState", "pending"); - __publicField(this, "currentId", 0); - } - set(env2) { - if (this.current === env2) - return; - this.handoffState = "pending"; - this.currentId = 0; - this.current = env2; - } - reset() { - this.set(this.detect()); - } - nextId() { - return ++this.currentId; - } - get isServer() { - return this.current === "server"; - } - get isClient() { - return this.current === "client"; - } - detect() { - if (typeof window === "undefined" || typeof document === "undefined") { - return "server"; - } - return "client"; - } - handoff() { - if (this.handoffState === "pending") { - this.handoffState = "complete"; - } - } - get isHandoffComplete() { - return this.handoffState === "complete"; - } -}; -var env = new Env(); - -// src/hooks/use-iso-morphic-effect.ts -var useIsoMorphicEffect = (effect, deps) => { - if (env.isServer) { - (0, import_react.useEffect)(effect, deps); - } else { - (0, import_react.useLayoutEffect)(effect, deps); - } -}; - -// src/hooks/use-latest-value.ts -var import_react2 = __webpack_require__(/*! react */ "react"); -function useLatestValue(value) { - let cache = (0, import_react2.useRef)(value); - useIsoMorphicEffect(() => { - cache.current = value; - }, [value]); - return cache; -} - -// src/hooks/use-computed.ts -function useComputed(cb, dependencies) { - let [value, setValue] = (0, import_react3.useState)(cb); - let cbRef = useLatestValue(cb); - useIsoMorphicEffect(() => setValue(cbRef.current), [cbRef, setValue, ...dependencies]); - return value; -} - -// src/hooks/use-disposables.ts -var import_react4 = __webpack_require__(/*! react */ "react"); - -// src/utils/micro-task.ts -function microTask(cb) { - if (typeof queueMicrotask === "function") { - queueMicrotask(cb); - } else { - Promise.resolve().then(cb).catch( - (e) => setTimeout(() => { - throw e; - }) - ); - } -} - -// src/utils/disposables.ts -function disposables() { - let _disposables = []; - let api = { - addEventListener(element, name, listener, options) { - element.addEventListener(name, listener, options); - return api.add(() => element.removeEventListener(name, listener, options)); - }, - requestAnimationFrame(...args) { - let raf = requestAnimationFrame(...args); - return api.add(() => cancelAnimationFrame(raf)); - }, - nextFrame(...args) { - return api.requestAnimationFrame(() => { - return api.requestAnimationFrame(...args); - }); - }, - setTimeout(...args) { - let timer = setTimeout(...args); - return api.add(() => clearTimeout(timer)); - }, - microTask(...args) { - let task = { current: true }; - microTask(() => { - if (task.current) { - args[0](); - } - }); - return api.add(() => { - task.current = false; - }); - }, - style(node, property, value) { - let previous = node.style.getPropertyValue(property); - Object.assign(node.style, { [property]: value }); - return this.add(() => { - Object.assign(node.style, { [property]: previous }); - }); - }, - group(cb) { - let d = disposables(); - cb(d); - return this.add(() => d.dispose()); - }, - add(cb) { - _disposables.push(cb); - return () => { - let idx = _disposables.indexOf(cb); - if (idx >= 0) { - for (let dispose of _disposables.splice(idx, 1)) { - dispose(); - } - } - }; - }, - dispose() { - for (let dispose of _disposables.splice(0)) { - dispose(); - } - } - }; - return api; -} - -// src/hooks/use-disposables.ts -function useDisposables() { - let [d] = (0, import_react4.useState)(disposables); - (0, import_react4.useEffect)(() => () => d.dispose(), [d]); - return d; -} - -// src/hooks/use-event.ts -var import_react5 = __toESM(__webpack_require__(/*! react */ "react"), 1); -var useEvent = ( - // TODO: Add React.useEvent ?? once the useEvent hook is available - function useEvent2(cb) { - let cache = useLatestValue(cb); - return import_react5.default.useCallback((...args) => cache.current(...args), [cache]); - } -); - -// src/hooks/use-id.ts -var import_react7 = __toESM(__webpack_require__(/*! react */ "react"), 1); - -// src/hooks/use-server-handoff-complete.ts -var import_react6 = __webpack_require__(/*! react */ "react"); -function useServerHandoffComplete() { - let [complete, setComplete] = (0, import_react6.useState)(env.isHandoffComplete); - if (complete && env.isHandoffComplete === false) { - setComplete(false); - } - (0, import_react6.useEffect)(() => { - if (complete === true) - return; - setComplete(true); - }, [complete]); - (0, import_react6.useEffect)(() => env.handoff(), []); - return complete; -} - -// src/hooks/use-id.ts -var _a; -var useId = ( - // Prefer React's `useId` if it's available. - // @ts-expect-error - `useId` doesn't exist in React < 18. - (_a = import_react7.default.useId) != null ? _a : function useId2() { - let ready = useServerHandoffComplete(); - let [id, setId] = import_react7.default.useState(ready ? () => env.nextId() : null); - useIsoMorphicEffect(() => { - if (id === null) - setId(env.nextId()); - }, [id]); - return id != null ? "" + id : void 0; - } -); - -// src/hooks/use-outside-click.ts -var import_react10 = __webpack_require__(/*! react */ "react"); - -// src/utils/match.ts -function match(value, lookup, ...args) { - if (value in lookup) { - let returnValue = lookup[value]; - return typeof returnValue === "function" ? returnValue(...args) : returnValue; - } - let error = new Error( - `Tried to handle "${value}" but there is no handler defined. Only defined handlers are: ${Object.keys( - lookup - ).map((key) => `"${key}"`).join(", ")}.` - ); - if (Error.captureStackTrace) - Error.captureStackTrace(error, match); - throw error; -} - -// src/utils/owner.ts -function getOwnerDocument(element) { - if (env.isServer) - return null; - if (element instanceof Node) - return element.ownerDocument; - if (element == null ? void 0 : element.hasOwnProperty("current")) { - if (element.current instanceof Node) - return element.current.ownerDocument; - } - return document; -} - -// src/utils/focus-management.ts -var focusableSelector = [ - "[contentEditable=true]", - "[tabindex]", - "a[href]", - "area[href]", - "button:not([disabled])", - "iframe", - "input:not([disabled])", - "select:not([disabled])", - "textarea:not([disabled])" -].map( - false ? ( - // TODO: Remove this once JSDOM fixes the issue where an element that is - // "hidden" can be the document.activeElement, because this is not possible - // in real browsers. - 0 - ) : (selector) => `${selector}:not([tabindex='-1'])` -).join(","); -function getFocusableElements(container = document.body) { - if (container == null) - return []; - return Array.from(container.querySelectorAll(focusableSelector)).sort( - // We want to move `tabIndex={0}` to the end of the list, this is what the browser does as well. - (a, z) => Math.sign((a.tabIndex || Number.MAX_SAFE_INTEGER) - (z.tabIndex || Number.MAX_SAFE_INTEGER)) - ); -} -function isFocusableElement(element, mode = 0 /* Strict */) { - var _a3; - if (element === ((_a3 = getOwnerDocument(element)) == null ? void 0 : _a3.body)) - return false; - return match(mode, { - [0 /* Strict */]() { - return element.matches(focusableSelector); - }, - [1 /* Loose */]() { - let next = element; - while (next !== null) { - if (next.matches(focusableSelector)) - return true; - next = next.parentElement; - } - return false; - } - }); -} -function restoreFocusIfNecessary(element) { - let ownerDocument = getOwnerDocument(element); - disposables().nextFrame(() => { - if (ownerDocument && !isFocusableElement(ownerDocument.activeElement, 0 /* Strict */)) { - focusElement(element); - } - }); -} -if (typeof window !== "undefined" && typeof document !== "undefined") { - document.addEventListener( - "keydown", - (event) => { - if (event.metaKey || event.altKey || event.ctrlKey) { - return; - } - document.documentElement.dataset.headlessuiFocusVisible = ""; - }, - true - ); - document.addEventListener( - "click", - (event) => { - if (event.detail === 1 /* Mouse */) { - delete document.documentElement.dataset.headlessuiFocusVisible; - } else if (event.detail === 0 /* Keyboard */) { - document.documentElement.dataset.headlessuiFocusVisible = ""; - } - }, - true - ); -} -function focusElement(element) { - element == null ? void 0 : element.focus({ preventScroll: true }); -} -var selectableSelector = ["textarea", "input"].join(","); -function isSelectableElement(element) { - var _a3, _b; - return (_b = (_a3 = element == null ? void 0 : element.matches) == null ? void 0 : _a3.call(element, selectableSelector)) != null ? _b : false; -} -function sortByDomNode(nodes, resolveKey = (i) => i) { - return nodes.slice().sort((aItem, zItem) => { - let a = resolveKey(aItem); - let z = resolveKey(zItem); - if (a === null || z === null) - return 0; - let position = a.compareDocumentPosition(z); - if (position & Node.DOCUMENT_POSITION_FOLLOWING) - return -1; - if (position & Node.DOCUMENT_POSITION_PRECEDING) - return 1; - return 0; - }); -} -function focusFrom(current, focus) { - return focusIn(getFocusableElements(), focus, { relativeTo: current }); -} -function focusIn(container, focus, { - sorted = true, - relativeTo = null, - skipElements = [] -} = {}) { - let ownerDocument = Array.isArray(container) ? container.length > 0 ? container[0].ownerDocument : document : container.ownerDocument; - let elements = Array.isArray(container) ? sorted ? sortByDomNode(container) : container : getFocusableElements(container); - if (skipElements.length > 0 && elements.length > 1) { - elements = elements.filter((x) => !skipElements.includes(x)); - } - relativeTo = relativeTo != null ? relativeTo : ownerDocument.activeElement; - let direction = (() => { - if (focus & (1 /* First */ | 4 /* Next */)) - return 1 /* Next */; - if (focus & (2 /* Previous */ | 8 /* Last */)) - return -1 /* Previous */; - throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last"); - })(); - let startIndex = (() => { - if (focus & 1 /* First */) - return 0; - if (focus & 2 /* Previous */) - return Math.max(0, elements.indexOf(relativeTo)) - 1; - if (focus & 4 /* Next */) - return Math.max(0, elements.indexOf(relativeTo)) + 1; - if (focus & 8 /* Last */) - return elements.length - 1; - throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last"); - })(); - let focusOptions = focus & 32 /* NoScroll */ ? { preventScroll: true } : {}; - let offset = 0; - let total = elements.length; - let next = void 0; - do { - if (offset >= total || offset + total <= 0) - return 0 /* Error */; - let nextIdx = startIndex + offset; - if (focus & 16 /* WrapAround */) { - nextIdx = (nextIdx + total) % total; - } else { - if (nextIdx < 0) - return 3 /* Underflow */; - if (nextIdx >= total) - return 1 /* Overflow */; - } - next = elements[nextIdx]; - next == null ? void 0 : next.focus(focusOptions); - offset += direction; - } while (next !== ownerDocument.activeElement); - if (focus & (4 /* Next */ | 2 /* Previous */) && isSelectableElement(next)) { - next.select(); - } - return 2 /* Success */; -} - -// src/hooks/use-document-event.ts -var import_react8 = __webpack_require__(/*! react */ "react"); -function useDocumentEvent(type, listener, options) { - let listenerRef = useLatestValue(listener); - (0, import_react8.useEffect)(() => { - function handler(event) { - listenerRef.current(event); - } - document.addEventListener(type, handler, options); - return () => document.removeEventListener(type, handler, options); - }, [type, options]); -} - -// src/hooks/use-window-event.ts -var import_react9 = __webpack_require__(/*! react */ "react"); -function useWindowEvent(type, listener, options) { - let listenerRef = useLatestValue(listener); - (0, import_react9.useEffect)(() => { - function handler(event) { - listenerRef.current(event); - } - window.addEventListener(type, handler, options); - return () => window.removeEventListener(type, handler, options); - }, [type, options]); -} - -// src/hooks/use-outside-click.ts -function useOutsideClick(containers, cb, enabled = true) { - let enabledRef = (0, import_react10.useRef)(false); - (0, import_react10.useEffect)( - false ? 0 : () => { - requestAnimationFrame(() => { - enabledRef.current = enabled; - }); - }, - [enabled] - ); - function handleOutsideClick(event, resolveTarget) { - if (!enabledRef.current) - return; - if (event.defaultPrevented) - return; - let target = resolveTarget(event); - if (target === null) { - return; - } - if (!target.getRootNode().contains(target)) - return; - let _containers = function resolve(containers2) { - if (typeof containers2 === "function") { - return resolve(containers2()); - } - if (Array.isArray(containers2)) { - return containers2; - } - if (containers2 instanceof Set) { - return containers2; - } - return [containers2]; - }(containers); - for (let container of _containers) { - if (container === null) - continue; - let domNode = container instanceof HTMLElement ? container : container.current; - if (domNode == null ? void 0 : domNode.contains(target)) { - return; - } - if (event.composed && event.composedPath().includes(domNode)) { - return; - } - } - if ( - // This check alllows us to know whether or not we clicked on a "focusable" element like a - // button or an input. This is a backwards compatibility check so that you can open a and click on another which should close Menu A and open Menu B. We might - // revisit that so that you will require 2 clicks instead. - !isFocusableElement(target, 1 /* Loose */) && // This could be improved, but the `Combobox.Button` adds tabIndex={-1} to make it - // unfocusable via the keyboard so that tabbing to the next item from the input doesn't - // first go to the button. - target.tabIndex !== -1 - ) { - event.preventDefault(); - } - return cb(event, target); - } - let initialClickTarget = (0, import_react10.useRef)(null); - useDocumentEvent( - "mousedown", - (event) => { - var _a3, _b; - if (enabledRef.current) { - initialClickTarget.current = ((_b = (_a3 = event.composedPath) == null ? void 0 : _a3.call(event)) == null ? void 0 : _b[0]) || event.target; - } - }, - true - ); - useDocumentEvent( - "click", - (event) => { - if (!initialClickTarget.current) { - return; - } - handleOutsideClick(event, () => { - return initialClickTarget.current; - }); - initialClickTarget.current = null; - }, - // We will use the `capture` phase so that layers in between with `event.stopPropagation()` - // don't "cancel" this outside click check. E.g.: A `Menu` inside a `DialogPanel` if the `Menu` - // is open, and you click outside of it in the `DialogPanel` the `Menu` should close. However, - // the `DialogPanel` has a `onClick(e) { e.stopPropagation() }` which would cancel this. - true - ); - useWindowEvent( - "blur", - (event) => handleOutsideClick( - event, - () => window.document.activeElement instanceof HTMLIFrameElement ? window.document.activeElement : null - ), - true - ); -} - -// src/hooks/use-resolve-button-type.ts -var import_react11 = __webpack_require__(/*! react */ "react"); -function resolveType(props) { - var _a3; - if (props.type) - return props.type; - let tag = (_a3 = props.as) != null ? _a3 : "button"; - if (typeof tag === "string" && tag.toLowerCase() === "button") - return "button"; - return void 0; -} -function useResolveButtonType(props, ref) { - let [type, setType] = (0, import_react11.useState)(() => resolveType(props)); - useIsoMorphicEffect(() => { - setType(resolveType(props)); - }, [props.type, props.as]); - useIsoMorphicEffect(() => { - if (type) - return; - if (!ref.current) - return; - if (ref.current instanceof HTMLButtonElement && !ref.current.hasAttribute("type")) { - setType("button"); - } - }, [type, ref]); - return type; -} - -// src/hooks/use-sync-refs.ts -var import_react12 = __webpack_require__(/*! react */ "react"); -var Optional = Symbol(); -function optionalRef(cb, isOptional = true) { - return Object.assign(cb, { [Optional]: isOptional }); -} -function useSyncRefs(...refs) { - let cache = (0, import_react12.useRef)(refs); - (0, import_react12.useEffect)(() => { - cache.current = refs; - }, [refs]); - let syncRefs = useEvent((value) => { - for (let ref of cache.current) { - if (ref == null) - continue; - if (typeof ref === "function") - ref(value); - else - ref.current = value; - } - }); - return refs.every( - (ref) => ref == null || // @ts-expect-error - (ref == null ? void 0 : ref[Optional]) - ) ? void 0 : syncRefs; -} - -// src/hooks/use-tree-walker.ts -var import_react13 = __webpack_require__(/*! react */ "react"); -function useTreeWalker({ - container, - accept, - walk, - enabled = true -}) { - let acceptRef = (0, import_react13.useRef)(accept); - let walkRef = (0, import_react13.useRef)(walk); - (0, import_react13.useEffect)(() => { - acceptRef.current = accept; - walkRef.current = walk; - }, [accept, walk]); - useIsoMorphicEffect(() => { - if (!container) - return; - if (!enabled) - return; - let ownerDocument = getOwnerDocument(container); - if (!ownerDocument) - return; - let accept2 = acceptRef.current; - let walk2 = walkRef.current; - let acceptNode = Object.assign((node) => accept2(node), { acceptNode: accept2 }); - let walker = ownerDocument.createTreeWalker( - container, - NodeFilter.SHOW_ELEMENT, - acceptNode, - // @ts-expect-error This `false` is a simple small fix for older browsers - false - ); - while (walker.nextNode()) - walk2(walker.currentNode); - }, [container, enabled, acceptRef, walkRef]); -} - -// src/utils/calculate-active-index.ts -function assertNever(x) { - throw new Error("Unexpected object: " + x); -} -function calculateActiveIndex(action, resolvers) { - let items = resolvers.resolveItems(); - if (items.length <= 0) - return null; - let currentActiveIndex = resolvers.resolveActiveIndex(); - let activeIndex = currentActiveIndex != null ? currentActiveIndex : -1; - let nextActiveIndex = (() => { - switch (action.focus) { - case 0 /* First */: - return items.findIndex((item) => !resolvers.resolveDisabled(item)); - case 1 /* Previous */: { - let idx = items.slice().reverse().findIndex((item, idx2, all) => { - if (activeIndex !== -1 && all.length - idx2 - 1 >= activeIndex) - return false; - return !resolvers.resolveDisabled(item); - }); - if (idx === -1) - return idx; - return items.length - 1 - idx; - } - case 2 /* Next */: - return items.findIndex((item, idx) => { - if (idx <= activeIndex) - return false; - return !resolvers.resolveDisabled(item); - }); - case 3 /* Last */: { - let idx = items.slice().reverse().findIndex((item) => !resolvers.resolveDisabled(item)); - if (idx === -1) - return idx; - return items.length - 1 - idx; - } - case 4 /* Specific */: - return items.findIndex((item) => resolvers.resolveId(item) === action.id); - case 5 /* Nothing */: - return null; - default: - assertNever(action); - } - })(); - return nextActiveIndex === -1 ? currentActiveIndex : nextActiveIndex; -} - -// src/utils/render.ts -var import_react14 = __webpack_require__(/*! react */ "react"); - -// src/utils/class-names.ts -function classNames(...classes) { - return classes.filter(Boolean).join(" "); -} - -// src/utils/render.ts -function render({ - ourProps, - theirProps, - slot, - defaultTag, - features, - visible = true, - name -}) { - let props = mergeProps(theirProps, ourProps); - if (visible) - return _render(props, slot, defaultTag, name); - let featureFlags = features != null ? features : 0 /* None */; - if (featureFlags & 2 /* Static */) { - let { static: isStatic = false, ...rest } = props; - if (isStatic) - return _render(rest, slot, defaultTag, name); - } - if (featureFlags & 1 /* RenderStrategy */) { - let { unmount = true, ...rest } = props; - let strategy = unmount ? 0 /* Unmount */ : 1 /* Hidden */; - return match(strategy, { - [0 /* Unmount */]() { - return null; - }, - [1 /* Hidden */]() { - return _render( - { ...rest, ...{ hidden: true, style: { display: "none" } } }, - slot, - defaultTag, - name - ); - } - }); - } - return _render(props, slot, defaultTag, name); -} -function _render(props, slot = {}, tag, name) { - let { - as: Component = tag, - children, - refName = "ref", - ...rest - } = omit(props, ["unmount", "static"]); - let refRelatedProps = props.ref !== void 0 ? { [refName]: props.ref } : {}; - let resolvedChildren = typeof children === "function" ? children(slot) : children; - if ("className" in rest && rest.className && typeof rest.className === "function") { - rest.className = rest.className(slot); - } - let dataAttributes = {}; - if (slot) { - let exposeState = false; - let states = []; - for (let [k, v] of Object.entries(slot)) { - if (typeof v === "boolean") { - exposeState = true; - } - if (v === true) { - states.push(k); - } - } - if (exposeState) - dataAttributes[`data-headlessui-state`] = states.join(" "); - } - if (Component === import_react14.Fragment) { - if (Object.keys(compact(rest)).length > 0) { - if (!(0, import_react14.isValidElement)(resolvedChildren) || Array.isArray(resolvedChildren) && resolvedChildren.length > 1) { - throw new Error( - [ - 'Passing props on "Fragment"!', - "", - `The current component <${name} /> is rendering a "Fragment".`, - `However we need to passthrough the following props:`, - Object.keys(rest).map((line) => ` - ${line}`).join("\n"), - "", - "You can apply a few solutions:", - [ - 'Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".', - "Render a single element as the child so that we can forward the props onto that element." - ].map((line) => ` - ${line}`).join("\n") - ].join("\n") - ); - } - let childProps = resolvedChildren.props; - let newClassName = typeof (childProps == null ? void 0 : childProps.className) === "function" ? (...args) => classNames(childProps == null ? void 0 : childProps.className(...args), rest.className) : classNames(childProps == null ? void 0 : childProps.className, rest.className); - let classNameProps = newClassName ? { className: newClassName } : {}; - return (0, import_react14.cloneElement)( - resolvedChildren, - Object.assign( - {}, - // Filter out undefined values so that they don't override the existing values - mergeProps(resolvedChildren.props, compact(omit(rest, ["ref"]))), - dataAttributes, - refRelatedProps, - mergeRefs(resolvedChildren.ref, refRelatedProps.ref), - classNameProps - ) - ); - } - } - return (0, import_react14.createElement)( - Component, - Object.assign( - {}, - omit(rest, ["ref"]), - Component !== import_react14.Fragment && refRelatedProps, - Component !== import_react14.Fragment && dataAttributes - ), - resolvedChildren - ); -} -function mergeRefs(...refs) { - return { - ref: refs.every((ref) => ref == null) ? void 0 : (value) => { - for (let ref of refs) { - if (ref == null) - continue; - if (typeof ref === "function") - ref(value); - else - ref.current = value; - } - } - }; -} -function mergeProps(...listOfProps) { - var _a3; - if (listOfProps.length === 0) - return {}; - if (listOfProps.length === 1) - return listOfProps[0]; - let target = {}; - let eventHandlers = {}; - for (let props of listOfProps) { - for (let prop in props) { - if (prop.startsWith("on") && typeof props[prop] === "function") { - (_a3 = eventHandlers[prop]) != null ? _a3 : eventHandlers[prop] = []; - eventHandlers[prop].push(props[prop]); - } else { - target[prop] = props[prop]; - } - } - } - if (target.disabled || target["aria-disabled"]) { - return Object.assign( - target, - // Set all event listeners that we collected to `undefined`. This is - // important because of the `cloneElement` from above, which merges the - // existing and new props, they don't just override therefore we have to - // explicitly nullify them. - Object.fromEntries(Object.keys(eventHandlers).map((eventName) => [eventName, void 0])) - ); - } - for (let eventName in eventHandlers) { - Object.assign(target, { - [eventName](event, ...args) { - let handlers = eventHandlers[eventName]; - for (let handler of handlers) { - if ((event instanceof Event || (event == null ? void 0 : event.nativeEvent) instanceof Event) && event.defaultPrevented) { - return; - } - handler(event, ...args); - } - } - }); - } - return target; -} -function forwardRefWithAs(component) { - var _a3; - return Object.assign((0, import_react14.forwardRef)(component), { - displayName: (_a3 = component.displayName) != null ? _a3 : component.name - }); -} -function compact(object) { - let clone = Object.assign({}, object); - for (let key in clone) { - if (clone[key] === void 0) - delete clone[key]; - } - return clone; -} -function omit(object, keysToOmit = []) { - let clone = Object.assign({}, object); - for (let key of keysToOmit) { - if (key in clone) - delete clone[key]; - } - return clone; -} - -// src/utils/bugs.ts -function isDisabledReactIssue7711(element) { - let parent = element.parentElement; - let legend = null; - while (parent && !(parent instanceof HTMLFieldSetElement)) { - if (parent instanceof HTMLLegendElement) - legend = parent; - parent = parent.parentElement; - } - let isParentDisabled = (parent == null ? void 0 : parent.getAttribute("disabled")) === ""; - if (isParentDisabled && isFirstLegend(legend)) - return false; - return isParentDisabled; -} -function isFirstLegend(element) { - if (!element) - return false; - let previous = element.previousElementSibling; - while (previous !== null) { - if (previous instanceof HTMLLegendElement) - return false; - previous = previous.previousElementSibling; - } - return true; -} - -// src/utils/form.ts -function objectToFormEntries(source = {}, parentKey = null, entries = []) { - for (let [key, value] of Object.entries(source)) { - append(entries, composeKey(parentKey, key), value); - } - return entries; -} -function composeKey(parent, key) { - return parent ? parent + "[" + key + "]" : key; -} -function append(entries, key, value) { - if (Array.isArray(value)) { - for (let [subkey, subvalue] of value.entries()) { - append(entries, composeKey(key, subkey.toString()), subvalue); - } - } else if (value instanceof Date) { - entries.push([key, value.toISOString()]); - } else if (typeof value === "boolean") { - entries.push([key, value ? "1" : "0"]); - } else if (typeof value === "string") { - entries.push([key, value]); - } else if (typeof value === "number") { - entries.push([key, `${value}`]); - } else if (value === null || value === void 0) { - entries.push([key, ""]); - } else { - objectToFormEntries(value, key, entries); - } -} -function attemptSubmit(element) { - var _a3; - let form = (_a3 = element == null ? void 0 : element.form) != null ? _a3 : element.closest("form"); - if (!form) - return; - for (let element2 of form.elements) { - if (element2.tagName === "INPUT" && element2.type === "submit" || element2.tagName === "BUTTON" && element2.type === "submit" || element2.nodeName === "INPUT" && element2.type === "image") { - element2.click(); - return; - } - } -} - -// src/internal/hidden.tsx -var DEFAULT_VISUALLY_HIDDEN_TAG = "div"; -function VisuallyHidden(props, ref) { - let { features = 1 /* None */, ...theirProps } = props; - let ourProps = { - ref, - "aria-hidden": (features & 2 /* Focusable */) === 2 /* Focusable */ ? true : void 0, - style: { - position: "fixed", - top: 1, - left: 1, - width: 1, - height: 0, - padding: 0, - margin: -1, - overflow: "hidden", - clip: "rect(0, 0, 0, 0)", - whiteSpace: "nowrap", - borderWidth: "0", - ...(features & 4 /* Hidden */) === 4 /* Hidden */ && !((features & 2 /* Focusable */) === 2 /* Focusable */) && { display: "none" } - } - }; - return render({ - ourProps, - theirProps, - slot: {}, - defaultTag: DEFAULT_VISUALLY_HIDDEN_TAG, - name: "Hidden" - }); -} -var Hidden = forwardRefWithAs(VisuallyHidden); - -// src/internal/open-closed.tsx -var import_react15 = __toESM(__webpack_require__(/*! react */ "react"), 1); -var Context = (0, import_react15.createContext)(null); -Context.displayName = "OpenClosedContext"; -function useOpenClosed() { - return (0, import_react15.useContext)(Context); -} -function OpenClosedProvider({ value, children }) { - return /* @__PURE__ */ import_react15.default.createElement(Context.Provider, { value }, children); -} - -// src/hooks/use-controllable.ts -var import_react16 = __webpack_require__(/*! react */ "react"); -function useControllable(controlledValue, onChange, defaultValue) { - let [internalValue, setInternalValue] = (0, import_react16.useState)(defaultValue); - let isControlled = controlledValue !== void 0; - let wasControlled = (0, import_react16.useRef)(isControlled); - let didWarnOnUncontrolledToControlled = (0, import_react16.useRef)(false); - let didWarnOnControlledToUncontrolled = (0, import_react16.useRef)(false); - if (isControlled && !wasControlled.current && !didWarnOnUncontrolledToControlled.current) { - didWarnOnUncontrolledToControlled.current = true; - wasControlled.current = isControlled; - console.error( - "A component is changing from uncontrolled to controlled. This may be caused by the value changing from undefined to a defined value, which should not happen." - ); - } else if (!isControlled && wasControlled.current && !didWarnOnControlledToUncontrolled.current) { - didWarnOnControlledToUncontrolled.current = true; - wasControlled.current = isControlled; - console.error( - "A component is changing from controlled to uncontrolled. This may be caused by the value changing from a defined value to undefined, which should not happen." - ); - } - return [ - isControlled ? controlledValue : internalValue, - useEvent((value) => { - if (isControlled) { - return onChange == null ? void 0 : onChange(value); - } else { - setInternalValue(value); - return onChange == null ? void 0 : onChange(value); - } - }) - ]; -} - -// src/hooks/use-watch.ts -var import_react17 = __webpack_require__(/*! react */ "react"); -function useWatch(cb, dependencies) { - let track = (0, import_react17.useRef)([]); - let action = useEvent(cb); - (0, import_react17.useEffect)(() => { - let oldValues = [...track.current]; - for (let [idx, value] of dependencies.entries()) { - if (track.current[idx] !== value) { - let returnValue = action(dependencies, oldValues); - track.current = dependencies; - return returnValue; - } - } - }, [action, ...dependencies]); -} - -// src/hooks/use-tracked-pointer.ts -var import_react18 = __webpack_require__(/*! react */ "react"); -function eventToPosition(evt) { - return [evt.screenX, evt.screenY]; -} -function useTrackedPointer() { - let lastPos = (0, import_react18.useRef)([-1, -1]); - return { - wasMoved(evt) { - if (false) {} - let newPos = eventToPosition(evt); - if (lastPos.current[0] === newPos[0] && lastPos.current[1] === newPos[1]) { - return false; - } - lastPos.current = newPos; - return true; - }, - update(evt) { - lastPos.current = eventToPosition(evt); - } - }; -} - -// src/utils/platform.ts -function isIOS() { - return ( - // Check if it is an iPhone - /iPhone/gi.test(window.navigator.platform) || // Check if it is an iPad. iPad reports itself as "MacIntel", but we can check if it is a touch - // screen. Let's hope that Apple doesn't release a touch screen Mac (or maybe this would then - // work as expected 🤔). - /Mac/gi.test(window.navigator.platform) && window.navigator.maxTouchPoints > 0 - ); -} -function isAndroid() { - return /Android/gi.test(window.navigator.userAgent); -} -function isMobile() { - return isIOS() || isAndroid(); -} - -// src/components/combobox/combobox.tsx -function adjustOrderedState(state, adjustment = (i) => i) { - let currentActiveOption = state.activeOptionIndex !== null ? state.options[state.activeOptionIndex] : null; - let sortedOptions = sortByDomNode( - adjustment(state.options.slice()), - (option) => option.dataRef.current.domRef.current - ); - let adjustedActiveOptionIndex = currentActiveOption ? sortedOptions.indexOf(currentActiveOption) : null; - if (adjustedActiveOptionIndex === -1) { - adjustedActiveOptionIndex = null; - } - return { - options: sortedOptions, - activeOptionIndex: adjustedActiveOptionIndex - }; -} -var reducers = { - [1 /* CloseCombobox */](state) { - var _a3; - if ((_a3 = state.dataRef.current) == null ? void 0 : _a3.disabled) - return state; - if (state.comboboxState === 1 /* Closed */) - return state; - return { ...state, activeOptionIndex: null, comboboxState: 1 /* Closed */ }; - }, - [0 /* OpenCombobox */](state) { - var _a3; - if ((_a3 = state.dataRef.current) == null ? void 0 : _a3.disabled) - return state; - if (state.comboboxState === 0 /* Open */) - return state; - let activeOptionIndex = state.activeOptionIndex; - if (state.dataRef.current) { - let { isSelected } = state.dataRef.current; - let optionIdx = state.options.findIndex((option) => isSelected(option.dataRef.current.value)); - if (optionIdx !== -1) { - activeOptionIndex = optionIdx; - } - } - return { ...state, comboboxState: 0 /* Open */, activeOptionIndex }; - }, - [2 /* GoToOption */](state, action) { - var _a3, _b, _c, _d; - if ((_a3 = state.dataRef.current) == null ? void 0 : _a3.disabled) - return state; - if (((_b = state.dataRef.current) == null ? void 0 : _b.optionsRef.current) && !((_c = state.dataRef.current) == null ? void 0 : _c.optionsPropsRef.current.static) && state.comboboxState === 1 /* Closed */) { - return state; - } - let adjustedState = adjustOrderedState(state); - if (adjustedState.activeOptionIndex === null) { - let localActiveOptionIndex = adjustedState.options.findIndex( - (option) => !option.dataRef.current.disabled - ); - if (localActiveOptionIndex !== -1) { - adjustedState.activeOptionIndex = localActiveOptionIndex; - } - } - let activeOptionIndex = calculateActiveIndex(action, { - resolveItems: () => adjustedState.options, - resolveActiveIndex: () => adjustedState.activeOptionIndex, - resolveId: (item) => item.id, - resolveDisabled: (item) => item.dataRef.current.disabled - }); - return { - ...state, - ...adjustedState, - activeOptionIndex, - activationTrigger: (_d = action.trigger) != null ? _d : 1 /* Other */ - }; - }, - [3 /* RegisterOption */]: (state, action) => { - var _a3, _b; - let option = { id: action.id, dataRef: action.dataRef }; - let adjustedState = adjustOrderedState(state, (options) => [...options, option]); - if (state.activeOptionIndex === null) { - if ((_a3 = state.dataRef.current) == null ? void 0 : _a3.isSelected(action.dataRef.current.value)) { - adjustedState.activeOptionIndex = adjustedState.options.indexOf(option); - } - } - let nextState = { - ...state, - ...adjustedState, - activationTrigger: 1 /* Other */ - }; - if (((_b = state.dataRef.current) == null ? void 0 : _b.__demoMode) && state.dataRef.current.value === void 0) { - nextState.activeOptionIndex = 0; - } - return nextState; - }, - [4 /* UnregisterOption */]: (state, action) => { - let adjustedState = adjustOrderedState(state, (options) => { - let idx = options.findIndex((a) => a.id === action.id); - if (idx !== -1) - options.splice(idx, 1); - return options; - }); - return { - ...state, - ...adjustedState, - activationTrigger: 1 /* Other */ - }; - }, - [5 /* RegisterLabel */]: (state, action) => { - return { - ...state, - labelId: action.id - }; - } -}; -var ComboboxActionsContext = (0, import_react19.createContext)(null); -ComboboxActionsContext.displayName = "ComboboxActionsContext"; -function useActions(component) { - let context = (0, import_react19.useContext)(ComboboxActionsContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, useActions); - throw err; - } - return context; -} -var ComboboxDataContext = (0, import_react19.createContext)(null); -ComboboxDataContext.displayName = "ComboboxDataContext"; -function useData(component) { - let context = (0, import_react19.useContext)(ComboboxDataContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, useData); - throw err; - } - return context; -} -function stateReducer(state, action) { - return match(action.type, reducers, state, action); -} -var DEFAULT_COMBOBOX_TAG = import_react19.Fragment; -function ComboboxFn(props, ref) { - let { - value: controlledValue, - defaultValue, - onChange: controlledOnChange, - form: formName, - name, - by = (a, z) => a === z, - disabled = false, - __demoMode = false, - nullable = false, - multiple = false, - ...theirProps - } = props; - let [value = multiple ? [] : void 0, theirOnChange] = useControllable( - controlledValue, - controlledOnChange, - defaultValue - ); - let [state, dispatch] = (0, import_react19.useReducer)(stateReducer, { - dataRef: (0, import_react19.createRef)(), - comboboxState: __demoMode ? 0 /* Open */ : 1 /* Closed */, - options: [], - activeOptionIndex: null, - activationTrigger: 1 /* Other */, - labelId: null - }); - let defaultToFirstOption = (0, import_react19.useRef)(false); - let optionsPropsRef = (0, import_react19.useRef)({ static: false, hold: false }); - let labelRef = (0, import_react19.useRef)(null); - let inputRef = (0, import_react19.useRef)(null); - let buttonRef = (0, import_react19.useRef)(null); - let optionsRef = (0, import_react19.useRef)(null); - let compare = useEvent( - // @ts-expect-error Eventually we'll want to tackle this, but for now this will do. - typeof by === "string" ? (a, z) => { - let property = by; - return (a == null ? void 0 : a[property]) === (z == null ? void 0 : z[property]); - } : by - ); - let isSelected = (0, import_react19.useCallback)( - (compareValue) => match(data.mode, { - [1 /* Multi */]: () => value.some((option) => compare(option, compareValue)), - [0 /* Single */]: () => compare(value, compareValue) - }), - [value] - ); - let data = (0, import_react19.useMemo)( - () => ({ - ...state, - optionsPropsRef, - labelRef, - inputRef, - buttonRef, - optionsRef, - value, - defaultValue, - disabled, - mode: multiple ? 1 /* Multi */ : 0 /* Single */, - get activeOptionIndex() { - if (defaultToFirstOption.current && state.activeOptionIndex === null && state.options.length > 0) { - let localActiveOptionIndex = state.options.findIndex( - (option) => !option.dataRef.current.disabled - ); - if (localActiveOptionIndex !== -1) { - return localActiveOptionIndex; - } - } - return state.activeOptionIndex; - }, - compare, - isSelected, - nullable, - __demoMode - }), - [value, defaultValue, disabled, multiple, nullable, __demoMode, state] - ); - let lastActiveOption = (0, import_react19.useRef)( - data.activeOptionIndex !== null ? data.options[data.activeOptionIndex] : null - ); - (0, import_react19.useEffect)(() => { - let currentActiveOption = data.activeOptionIndex !== null ? data.options[data.activeOptionIndex] : null; - if (lastActiveOption.current !== currentActiveOption) { - lastActiveOption.current = currentActiveOption; - } - }); - useIsoMorphicEffect(() => { - state.dataRef.current = data; - }, [data]); - useOutsideClick( - [data.buttonRef, data.inputRef, data.optionsRef], - () => actions.closeCombobox(), - data.comboboxState === 0 /* Open */ - ); - let slot = (0, import_react19.useMemo)( - () => ({ - open: data.comboboxState === 0 /* Open */, - disabled, - activeIndex: data.activeOptionIndex, - activeOption: data.activeOptionIndex === null ? null : data.options[data.activeOptionIndex].dataRef.current.value, - value - }), - [data, disabled, value] - ); - let selectOption = useEvent((id) => { - let option = data.options.find((item) => item.id === id); - if (!option) - return; - onChange(option.dataRef.current.value); - }); - let selectActiveOption = useEvent(() => { - if (data.activeOptionIndex !== null) { - let { dataRef, id } = data.options[data.activeOptionIndex]; - onChange(dataRef.current.value); - actions.goToOption(4 /* Specific */, id); - } - }); - let openCombobox = useEvent(() => { - dispatch({ type: 0 /* OpenCombobox */ }); - defaultToFirstOption.current = true; - }); - let closeCombobox = useEvent(() => { - dispatch({ type: 1 /* CloseCombobox */ }); - defaultToFirstOption.current = false; - }); - let goToOption = useEvent((focus, id, trigger) => { - defaultToFirstOption.current = false; - if (focus === 4 /* Specific */) { - return dispatch({ type: 2 /* GoToOption */, focus: 4 /* Specific */, id, trigger }); - } - return dispatch({ type: 2 /* GoToOption */, focus, trigger }); - }); - let registerOption = useEvent((id, dataRef) => { - dispatch({ type: 3 /* RegisterOption */, id, dataRef }); - return () => { - var _a3; - if (((_a3 = lastActiveOption.current) == null ? void 0 : _a3.id) === id) { - defaultToFirstOption.current = true; - } - dispatch({ type: 4 /* UnregisterOption */, id }); - }; - }); - let registerLabel = useEvent((id) => { - dispatch({ type: 5 /* RegisterLabel */, id }); - return () => dispatch({ type: 5 /* RegisterLabel */, id: null }); - }); - let onChange = useEvent((value2) => { - return match(data.mode, { - [0 /* Single */]() { - return theirOnChange == null ? void 0 : theirOnChange(value2); - }, - [1 /* Multi */]() { - let copy = data.value.slice(); - let idx = copy.findIndex((item) => compare(item, value2)); - if (idx === -1) { - copy.push(value2); - } else { - copy.splice(idx, 1); - } - return theirOnChange == null ? void 0 : theirOnChange(copy); - } - }); - }); - let actions = (0, import_react19.useMemo)( - () => ({ - onChange, - registerOption, - registerLabel, - goToOption, - closeCombobox, - openCombobox, - selectActiveOption, - selectOption - }), - [] - ); - let ourProps = ref === null ? {} : { ref }; - let form = (0, import_react19.useRef)(null); - let d = useDisposables(); - (0, import_react19.useEffect)(() => { - if (!form.current) - return; - if (defaultValue === void 0) - return; - d.addEventListener(form.current, "reset", () => { - onChange(defaultValue); - }); - }, [ - form, - onChange - /* Explicitly ignoring `defaultValue` */ - ]); - return /* @__PURE__ */ import_react19.default.createElement(ComboboxActionsContext.Provider, { value: actions }, /* @__PURE__ */ import_react19.default.createElement(ComboboxDataContext.Provider, { value: data }, /* @__PURE__ */ import_react19.default.createElement( - OpenClosedProvider, - { - value: match(data.comboboxState, { - [0 /* Open */]: 1 /* Open */, - [1 /* Closed */]: 2 /* Closed */ - }) - }, - name != null && value != null && objectToFormEntries({ [name]: value }).map(([name2, value2], idx) => /* @__PURE__ */ import_react19.default.createElement( - Hidden, - { - features: 4 /* Hidden */, - ref: idx === 0 ? (element) => { - var _a3; - form.current = (_a3 = element == null ? void 0 : element.closest("form")) != null ? _a3 : null; - } : void 0, - ...compact({ - key: name2, - as: "input", - type: "hidden", - hidden: true, - readOnly: true, - form: formName, - name: name2, - value: value2 - }) - } - )), - render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_COMBOBOX_TAG, - name: "Combobox" - }) - ))); -} -var DEFAULT_INPUT_TAG = "input"; -function InputFn(props, ref) { - var _a3, _b, _c, _d; - let internalId = useId(); - let { - id = `headlessui-combobox-input-${internalId}`, - onChange, - displayValue, - // @ts-ignore: We know this MAY NOT exist for a given tag but we only care when it _does_ exist. - type = "text", - ...theirProps - } = props; - let data = useData("Combobox.Input"); - let actions = useActions("Combobox.Input"); - let inputRef = useSyncRefs(data.inputRef, ref); - let isTyping = (0, import_react19.useRef)(false); - let d = useDisposables(); - let currentDisplayValue = function() { - var _a4; - if (typeof displayValue === "function" && data.value !== void 0) { - return (_a4 = displayValue(data.value)) != null ? _a4 : ""; - } else if (typeof data.value === "string") { - return data.value; - } else { - return ""; - } - }(); - useWatch( - ([currentDisplayValue2, state], [oldCurrentDisplayValue, oldState]) => { - if (isTyping.current) - return; - if (!data.inputRef.current) - return; - if (oldState === 0 /* Open */ && state === 1 /* Closed */) { - data.inputRef.current.value = currentDisplayValue2; - } else if (currentDisplayValue2 !== oldCurrentDisplayValue) { - data.inputRef.current.value = currentDisplayValue2; - } - }, - [currentDisplayValue, data.comboboxState] - ); - useWatch( - ([newState], [oldState]) => { - if (newState === 0 /* Open */ && oldState === 1 /* Closed */) { - let input = data.inputRef.current; - if (!input) - return; - let currentValue = input.value; - let { selectionStart, selectionEnd, selectionDirection } = input; - input.value = ""; - input.value = currentValue; - if (selectionDirection !== null) { - input.setSelectionRange(selectionStart, selectionEnd, selectionDirection); - } else { - input.setSelectionRange(selectionStart, selectionEnd); - } - } - }, - [data.comboboxState] - ); - let isComposing = (0, import_react19.useRef)(false); - let composedChangeEvent = (0, import_react19.useRef)(null); - let handleCompositionStart = useEvent(() => { - isComposing.current = true; - }); - let handleCompositionEnd = useEvent(() => { - d.nextFrame(() => { - isComposing.current = false; - if (composedChangeEvent.current) { - actions.openCombobox(); - onChange == null ? void 0 : onChange(composedChangeEvent.current); - composedChangeEvent.current = null; - } - }); - }); - let handleKeyDown = useEvent((event) => { - isTyping.current = true; - switch (event.key) { - case "Backspace" /* Backspace */: - case "Delete" /* Delete */: - if (data.mode !== 0 /* Single */) - return; - if (!data.nullable) - return; - let input = event.currentTarget; - d.requestAnimationFrame(() => { - if (input.value === "") { - actions.onChange(null); - if (data.optionsRef.current) { - data.optionsRef.current.scrollTop = 0; - } - actions.goToOption(5 /* Nothing */); - } - }); - break; - case "Enter" /* Enter */: - isTyping.current = false; - if (data.comboboxState !== 0 /* Open */) - return; - if (isComposing.current) - return; - event.preventDefault(); - event.stopPropagation(); - if (data.activeOptionIndex === null) { - actions.closeCombobox(); - return; - } - actions.selectActiveOption(); - if (data.mode === 0 /* Single */) { - actions.closeCombobox(); - } - break; - case "ArrowDown" /* ArrowDown */: - isTyping.current = false; - event.preventDefault(); - event.stopPropagation(); - return match(data.comboboxState, { - [0 /* Open */]: () => { - actions.goToOption(2 /* Next */); - }, - [1 /* Closed */]: () => { - actions.openCombobox(); - } - }); - case "ArrowUp" /* ArrowUp */: - isTyping.current = false; - event.preventDefault(); - event.stopPropagation(); - return match(data.comboboxState, { - [0 /* Open */]: () => { - actions.goToOption(1 /* Previous */); - }, - [1 /* Closed */]: () => { - actions.openCombobox(); - d.nextFrame(() => { - if (!data.value) { - actions.goToOption(3 /* Last */); - } - }); - } - }); - case "Home" /* Home */: - if (event.shiftKey) { - break; - } - isTyping.current = false; - event.preventDefault(); - event.stopPropagation(); - return actions.goToOption(0 /* First */); - case "PageUp" /* PageUp */: - isTyping.current = false; - event.preventDefault(); - event.stopPropagation(); - return actions.goToOption(0 /* First */); - case "End" /* End */: - if (event.shiftKey) { - break; - } - isTyping.current = false; - event.preventDefault(); - event.stopPropagation(); - return actions.goToOption(3 /* Last */); - case "PageDown" /* PageDown */: - isTyping.current = false; - event.preventDefault(); - event.stopPropagation(); - return actions.goToOption(3 /* Last */); - case "Escape" /* Escape */: - isTyping.current = false; - if (data.comboboxState !== 0 /* Open */) - return; - event.preventDefault(); - if (data.optionsRef.current && !data.optionsPropsRef.current.static) { - event.stopPropagation(); - } - return actions.closeCombobox(); - case "Tab" /* Tab */: - isTyping.current = false; - if (data.comboboxState !== 0 /* Open */) - return; - if (data.mode === 0 /* Single */) - actions.selectActiveOption(); - actions.closeCombobox(); - break; - } - }); - let handleChange = useEvent((event) => { - if (isComposing.current) { - composedChangeEvent.current = event; - return; - } - actions.openCombobox(); - onChange == null ? void 0 : onChange(event); - }); - let handleBlur = useEvent(() => { - isTyping.current = false; - }); - let labelledby = useComputed(() => { - if (!data.labelId) - return void 0; - return [data.labelId].join(" "); - }, [data.labelId]); - let slot = (0, import_react19.useMemo)( - () => ({ open: data.comboboxState === 0 /* Open */, disabled: data.disabled }), - [data] - ); - let ourProps = { - ref: inputRef, - id, - role: "combobox", - type, - "aria-controls": (_a3 = data.optionsRef.current) == null ? void 0 : _a3.id, - "aria-expanded": data.disabled ? void 0 : data.comboboxState === 0 /* Open */, - "aria-activedescendant": data.activeOptionIndex === null ? void 0 : (_b = data.options[data.activeOptionIndex]) == null ? void 0 : _b.id, - "aria-labelledby": labelledby, - "aria-autocomplete": "list", - defaultValue: (_d = (_c = props.defaultValue) != null ? _c : data.defaultValue !== void 0 ? displayValue == null ? void 0 : displayValue(data.defaultValue) : null) != null ? _d : data.defaultValue, - disabled: data.disabled, - onCompositionStart: handleCompositionStart, - onCompositionEnd: handleCompositionEnd, - onKeyDown: handleKeyDown, - onChange: handleChange, - onBlur: handleBlur - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_INPUT_TAG, - name: "Combobox.Input" - }); -} -var DEFAULT_BUTTON_TAG = "button"; -function ButtonFn(props, ref) { - var _a3; - let data = useData("Combobox.Button"); - let actions = useActions("Combobox.Button"); - let buttonRef = useSyncRefs(data.buttonRef, ref); - let internalId = useId(); - let { id = `headlessui-combobox-button-${internalId}`, ...theirProps } = props; - let d = useDisposables(); - let handleKeyDown = useEvent((event) => { - switch (event.key) { - case "ArrowDown" /* ArrowDown */: - event.preventDefault(); - event.stopPropagation(); - if (data.comboboxState === 1 /* Closed */) { - actions.openCombobox(); - } - return d.nextFrame(() => { - var _a4; - return (_a4 = data.inputRef.current) == null ? void 0 : _a4.focus({ preventScroll: true }); - }); - case "ArrowUp" /* ArrowUp */: - event.preventDefault(); - event.stopPropagation(); - if (data.comboboxState === 1 /* Closed */) { - actions.openCombobox(); - d.nextFrame(() => { - if (!data.value) { - actions.goToOption(3 /* Last */); - } - }); - } - return d.nextFrame(() => { - var _a4; - return (_a4 = data.inputRef.current) == null ? void 0 : _a4.focus({ preventScroll: true }); - }); - case "Escape" /* Escape */: - if (data.comboboxState !== 0 /* Open */) - return; - event.preventDefault(); - if (data.optionsRef.current && !data.optionsPropsRef.current.static) { - event.stopPropagation(); - } - actions.closeCombobox(); - return d.nextFrame(() => { - var _a4; - return (_a4 = data.inputRef.current) == null ? void 0 : _a4.focus({ preventScroll: true }); - }); - default: - return; - } - }); - let handleClick = useEvent((event) => { - if (isDisabledReactIssue7711(event.currentTarget)) - return event.preventDefault(); - if (data.comboboxState === 0 /* Open */) { - actions.closeCombobox(); - } else { - event.preventDefault(); - actions.openCombobox(); - } - d.nextFrame(() => { - var _a4; - return (_a4 = data.inputRef.current) == null ? void 0 : _a4.focus({ preventScroll: true }); - }); - }); - let labelledby = useComputed(() => { - if (!data.labelId) - return void 0; - return [data.labelId, id].join(" "); - }, [data.labelId, id]); - let slot = (0, import_react19.useMemo)( - () => ({ - open: data.comboboxState === 0 /* Open */, - disabled: data.disabled, - value: data.value - }), - [data] - ); - let ourProps = { - ref: buttonRef, - id, - type: useResolveButtonType(props, data.buttonRef), - tabIndex: -1, - "aria-haspopup": "listbox", - "aria-controls": (_a3 = data.optionsRef.current) == null ? void 0 : _a3.id, - "aria-expanded": data.disabled ? void 0 : data.comboboxState === 0 /* Open */, - "aria-labelledby": labelledby, - disabled: data.disabled, - onClick: handleClick, - onKeyDown: handleKeyDown - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_BUTTON_TAG, - name: "Combobox.Button" - }); -} -var DEFAULT_LABEL_TAG = "label"; -function LabelFn(props, ref) { - let internalId = useId(); - let { id = `headlessui-combobox-label-${internalId}`, ...theirProps } = props; - let data = useData("Combobox.Label"); - let actions = useActions("Combobox.Label"); - let labelRef = useSyncRefs(data.labelRef, ref); - useIsoMorphicEffect(() => actions.registerLabel(id), [id]); - let handleClick = useEvent(() => { - var _a3; - return (_a3 = data.inputRef.current) == null ? void 0 : _a3.focus({ preventScroll: true }); - }); - let slot = (0, import_react19.useMemo)( - () => ({ open: data.comboboxState === 0 /* Open */, disabled: data.disabled }), - [data] - ); - let ourProps = { ref: labelRef, id, onClick: handleClick }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_LABEL_TAG, - name: "Combobox.Label" - }); -} -var DEFAULT_OPTIONS_TAG = "ul"; -var OptionsRenderFeatures = 1 /* RenderStrategy */ | 2 /* Static */; -function OptionsFn(props, ref) { - let internalId = useId(); - let { id = `headlessui-combobox-options-${internalId}`, hold = false, ...theirProps } = props; - let data = useData("Combobox.Options"); - let optionsRef = useSyncRefs(data.optionsRef, ref); - let usesOpenClosedState = useOpenClosed(); - let visible = (() => { - if (usesOpenClosedState !== null) { - return (usesOpenClosedState & 1 /* Open */) === 1 /* Open */; - } - return data.comboboxState === 0 /* Open */; - })(); - useIsoMorphicEffect(() => { - var _a3; - data.optionsPropsRef.current.static = (_a3 = props.static) != null ? _a3 : false; - }, [data.optionsPropsRef, props.static]); - useIsoMorphicEffect(() => { - data.optionsPropsRef.current.hold = hold; - }, [data.optionsPropsRef, hold]); - useTreeWalker({ - container: data.optionsRef.current, - enabled: data.comboboxState === 0 /* Open */, - accept(node) { - if (node.getAttribute("role") === "option") - return NodeFilter.FILTER_REJECT; - if (node.hasAttribute("role")) - return NodeFilter.FILTER_SKIP; - return NodeFilter.FILTER_ACCEPT; - }, - walk(node) { - node.setAttribute("role", "none"); - } - }); - let labelledby = useComputed( - () => { - var _a3, _b; - return (_b = data.labelId) != null ? _b : (_a3 = data.buttonRef.current) == null ? void 0 : _a3.id; - }, - [data.labelId, data.buttonRef.current] - ); - let slot = (0, import_react19.useMemo)( - () => ({ open: data.comboboxState === 0 /* Open */ }), - [data] - ); - let ourProps = { - "aria-labelledby": labelledby, - role: "listbox", - "aria-multiselectable": data.mode === 1 /* Multi */ ? true : void 0, - id, - ref: optionsRef - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_OPTIONS_TAG, - features: OptionsRenderFeatures, - visible, - name: "Combobox.Options" - }); -} -var DEFAULT_OPTION_TAG = "li"; -function OptionFn(props, ref) { - var _a3, _b; - let internalId = useId(); - let { - id = `headlessui-combobox-option-${internalId}`, - disabled = false, - value, - ...theirProps - } = props; - let data = useData("Combobox.Option"); - let actions = useActions("Combobox.Option"); - let active = data.activeOptionIndex !== null ? data.options[data.activeOptionIndex].id === id : false; - let selected = data.isSelected(value); - let internalOptionRef = (0, import_react19.useRef)(null); - let bag = useLatestValue({ - disabled, - value, - domRef: internalOptionRef, - textValue: (_b = (_a3 = internalOptionRef.current) == null ? void 0 : _a3.textContent) == null ? void 0 : _b.toLowerCase() - }); - let optionRef = useSyncRefs(ref, internalOptionRef); - let select = useEvent(() => actions.selectOption(id)); - useIsoMorphicEffect(() => actions.registerOption(id, bag), [bag, id]); - let enableScrollIntoView = (0, import_react19.useRef)(data.__demoMode ? false : true); - useIsoMorphicEffect(() => { - if (!data.__demoMode) - return; - let d = disposables(); - d.requestAnimationFrame(() => { - enableScrollIntoView.current = true; - }); - return d.dispose; - }, []); - useIsoMorphicEffect(() => { - if (data.comboboxState !== 0 /* Open */) - return; - if (!active) - return; - if (!enableScrollIntoView.current) - return; - if (data.activationTrigger === 0 /* Pointer */) - return; - let d = disposables(); - d.requestAnimationFrame(() => { - var _a4, _b2; - (_b2 = (_a4 = internalOptionRef.current) == null ? void 0 : _a4.scrollIntoView) == null ? void 0 : _b2.call(_a4, { block: "nearest" }); - }); - return d.dispose; - }, [ - internalOptionRef, - active, - data.comboboxState, - data.activationTrigger, - /* We also want to trigger this when the position of the active item changes so that we can re-trigger the scrollIntoView */ - data.activeOptionIndex - ]); - let handleClick = useEvent((event) => { - if (disabled) - return event.preventDefault(); - select(); - if (data.mode === 0 /* Single */) { - actions.closeCombobox(); - } - if (!isMobile()) { - requestAnimationFrame(() => { - var _a4; - return (_a4 = data.inputRef.current) == null ? void 0 : _a4.focus(); - }); - } - }); - let handleFocus = useEvent(() => { - if (disabled) - return actions.goToOption(5 /* Nothing */); - actions.goToOption(4 /* Specific */, id); - }); - let pointer = useTrackedPointer(); - let handleEnter = useEvent((evt) => pointer.update(evt)); - let handleMove = useEvent((evt) => { - if (!pointer.wasMoved(evt)) - return; - if (disabled) - return; - if (active) - return; - actions.goToOption(4 /* Specific */, id, 0 /* Pointer */); - }); - let handleLeave = useEvent((evt) => { - if (!pointer.wasMoved(evt)) - return; - if (disabled) - return; - if (!active) - return; - if (data.optionsPropsRef.current.hold) - return; - actions.goToOption(5 /* Nothing */); - }); - let slot = (0, import_react19.useMemo)( - () => ({ active, selected, disabled }), - [active, selected, disabled] - ); - let ourProps = { - id, - ref: optionRef, - role: "option", - tabIndex: disabled === true ? void 0 : -1, - "aria-disabled": disabled === true ? true : void 0, - // According to the WAI-ARIA best practices, we should use aria-checked for - // multi-select,but Voice-Over disagrees. So we use aria-checked instead for - // both single and multi-select. - "aria-selected": selected, - disabled: void 0, - // Never forward the `disabled` prop - onClick: handleClick, - onFocus: handleFocus, - onPointerEnter: handleEnter, - onMouseEnter: handleEnter, - onPointerMove: handleMove, - onMouseMove: handleMove, - onPointerLeave: handleLeave, - onMouseLeave: handleLeave - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_OPTION_TAG, - name: "Combobox.Option" - }); -} -var ComboboxRoot = forwardRefWithAs(ComboboxFn); -var Button = forwardRefWithAs(ButtonFn); -var Input = forwardRefWithAs(InputFn); -var Label = forwardRefWithAs(LabelFn); -var Options = forwardRefWithAs(OptionsFn); -var Option = forwardRefWithAs(OptionFn); -var Combobox = Object.assign(ComboboxRoot, { Input, Button, Label, Options, Option }); - -// src/components/dialog/dialog.tsx -var import_react31 = __toESM(__webpack_require__(/*! react */ "react"), 1); - -// src/components/focus-trap/focus-trap.tsx -var import_react25 = __toESM(__webpack_require__(/*! react */ "react"), 1); - -// src/hooks/use-tab-direction.ts -var import_react20 = __webpack_require__(/*! react */ "react"); -function useTabDirection() { - let direction = (0, import_react20.useRef)(0 /* Forwards */); - useWindowEvent( - "keydown", - (event) => { - if (event.key === "Tab") { - direction.current = event.shiftKey ? 1 /* Backwards */ : 0 /* Forwards */; - } - }, - true - ); - return direction; -} - -// src/hooks/use-is-mounted.ts -var import_react21 = __webpack_require__(/*! react */ "react"); -function useIsMounted() { - let mounted = (0, import_react21.useRef)(false); - useIsoMorphicEffect(() => { - mounted.current = true; - return () => { - mounted.current = false; - }; - }, []); - return mounted; -} - -// src/hooks/use-owner.ts -var import_react22 = __webpack_require__(/*! react */ "react"); -function useOwnerDocument(...args) { - return (0, import_react22.useMemo)(() => getOwnerDocument(...args), [...args]); -} - -// src/hooks/use-event-listener.ts -var import_react23 = __webpack_require__(/*! react */ "react"); -function useEventListener(element, type, listener, options) { - let listenerRef = useLatestValue(listener); - (0, import_react23.useEffect)(() => { - element = element != null ? element : window; - function handler(event) { - listenerRef.current(event); - } - element.addEventListener(type, handler, options); - return () => element.removeEventListener(type, handler, options); - }, [element, type, options]); -} - -// src/utils/document-ready.ts -function onDocumentReady(cb) { - function check() { - if (document.readyState === "loading") - return; - cb(); - document.removeEventListener("DOMContentLoaded", check); - } - if (typeof window !== "undefined" && typeof document !== "undefined") { - document.addEventListener("DOMContentLoaded", check); - check(); - } -} - -// src/hooks/use-on-unmount.ts -var import_react24 = __webpack_require__(/*! react */ "react"); -function useOnUnmount(cb) { - let stableCb = useEvent(cb); - let trulyUnmounted = (0, import_react24.useRef)(false); - (0, import_react24.useEffect)(() => { - trulyUnmounted.current = false; - return () => { - trulyUnmounted.current = true; - microTask(() => { - if (!trulyUnmounted.current) - return; - stableCb(); - }); - }; - }, [stableCb]); -} - -// src/components/focus-trap/focus-trap.tsx -function resolveContainers(containers) { - if (!containers) - return /* @__PURE__ */ new Set(); - if (typeof containers === "function") - return new Set(containers()); - let all = /* @__PURE__ */ new Set(); - for (let container of containers.current) { - if (container.current instanceof HTMLElement) { - all.add(container.current); - } - } - return all; -} -var DEFAULT_FOCUS_TRAP_TAG = "div"; -var Features3 = /* @__PURE__ */ ((Features4) => { - Features4[Features4["None"] = 1] = "None"; - Features4[Features4["InitialFocus"] = 2] = "InitialFocus"; - Features4[Features4["TabLock"] = 4] = "TabLock"; - Features4[Features4["FocusLock"] = 8] = "FocusLock"; - Features4[Features4["RestoreFocus"] = 16] = "RestoreFocus"; - Features4[Features4["All"] = 30] = "All"; - return Features4; -})(Features3 || {}); -function FocusTrapFn(props, ref) { - let container = (0, import_react25.useRef)(null); - let focusTrapRef = useSyncRefs(container, ref); - let { initialFocus, containers, features = 30 /* All */, ...theirProps } = props; - if (!useServerHandoffComplete()) { - features = 1 /* None */; - } - let ownerDocument = useOwnerDocument(container); - useRestoreFocus({ ownerDocument }, Boolean(features & 16 /* RestoreFocus */)); - let previousActiveElement = useInitialFocus( - { ownerDocument, container, initialFocus }, - Boolean(features & 2 /* InitialFocus */) - ); - useFocusLock( - { ownerDocument, container, containers, previousActiveElement }, - Boolean(features & 8 /* FocusLock */) - ); - let direction = useTabDirection(); - let handleFocus = useEvent((e) => { - let el = container.current; - if (!el) - return; - let wrapper = false ? 0 : (cb) => cb(); - wrapper(() => { - match(direction.current, { - [0 /* Forwards */]: () => { - focusIn(el, 1 /* First */, { skipElements: [e.relatedTarget] }); - }, - [1 /* Backwards */]: () => { - focusIn(el, 8 /* Last */, { skipElements: [e.relatedTarget] }); - } - }); - }); - }); - let d = useDisposables(); - let recentlyUsedTabKey = (0, import_react25.useRef)(false); - let ourProps = { - ref: focusTrapRef, - onKeyDown(e) { - if (e.key == "Tab") { - recentlyUsedTabKey.current = true; - d.requestAnimationFrame(() => { - recentlyUsedTabKey.current = false; - }); - } - }, - onBlur(e) { - let allContainers = resolveContainers(containers); - if (container.current instanceof HTMLElement) - allContainers.add(container.current); - let relatedTarget = e.relatedTarget; - if (!(relatedTarget instanceof HTMLElement)) - return; - if (relatedTarget.dataset.headlessuiFocusGuard === "true") { - return; - } - if (!contains(allContainers, relatedTarget)) { - if (recentlyUsedTabKey.current) { - focusIn( - container.current, - match(direction.current, { - [0 /* Forwards */]: () => 4 /* Next */, - [1 /* Backwards */]: () => 2 /* Previous */ - }) | 16 /* WrapAround */, - { relativeTo: e.target } - ); - } else if (e.target instanceof HTMLElement) { - focusElement(e.target); - } - } - } - }; - return /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, Boolean(features & 4 /* TabLock */) && /* @__PURE__ */ import_react25.default.createElement( - Hidden, - { - as: "button", - type: "button", - "data-headlessui-focus-guard": true, - onFocus: handleFocus, - features: 2 /* Focusable */ - } - ), render({ - ourProps, - theirProps, - defaultTag: DEFAULT_FOCUS_TRAP_TAG, - name: "FocusTrap" - }), Boolean(features & 4 /* TabLock */) && /* @__PURE__ */ import_react25.default.createElement( - Hidden, - { - as: "button", - type: "button", - "data-headlessui-focus-guard": true, - onFocus: handleFocus, - features: 2 /* Focusable */ - } - )); -} -var FocusTrapRoot = forwardRefWithAs(FocusTrapFn); -var FocusTrap = Object.assign(FocusTrapRoot, { - features: Features3 -}); -var history = []; -onDocumentReady(() => { - function handle(e) { - if (!(e.target instanceof HTMLElement)) - return; - if (e.target === document.body) - return; - if (history[0] === e.target) - return; - history.unshift(e.target); - history = history.filter((x) => x != null && x.isConnected); - history.splice(10); - } - window.addEventListener("click", handle, { capture: true }); - window.addEventListener("mousedown", handle, { capture: true }); - window.addEventListener("focus", handle, { capture: true }); - document.body.addEventListener("click", handle, { capture: true }); - document.body.addEventListener("mousedown", handle, { capture: true }); - document.body.addEventListener("focus", handle, { capture: true }); -}); -function useRestoreElement(enabled = true) { - let localHistory = (0, import_react25.useRef)(history.slice()); - useWatch( - ([newEnabled], [oldEnabled]) => { - if (oldEnabled === true && newEnabled === false) { - microTask(() => { - localHistory.current.splice(0); - }); - } - if (oldEnabled === false && newEnabled === true) { - localHistory.current = history.slice(); - } - }, - [enabled, history, localHistory] - ); - return useEvent(() => { - var _a3; - return (_a3 = localHistory.current.find((x) => x != null && x.isConnected)) != null ? _a3 : null; - }); -} -function useRestoreFocus({ ownerDocument }, enabled) { - let getRestoreElement = useRestoreElement(enabled); - useWatch(() => { - if (enabled) - return; - if ((ownerDocument == null ? void 0 : ownerDocument.activeElement) === (ownerDocument == null ? void 0 : ownerDocument.body)) { - focusElement(getRestoreElement()); - } - }, [enabled]); - useOnUnmount(() => { - if (!enabled) - return; - focusElement(getRestoreElement()); - }); -} -function useInitialFocus({ - ownerDocument, - container, - initialFocus -}, enabled) { - let previousActiveElement = (0, import_react25.useRef)(null); - let mounted = useIsMounted(); - useWatch(() => { - if (!enabled) - return; - let containerElement = container.current; - if (!containerElement) - return; - microTask(() => { - if (!mounted.current) { - return; - } - let activeElement = ownerDocument == null ? void 0 : ownerDocument.activeElement; - if (initialFocus == null ? void 0 : initialFocus.current) { - if ((initialFocus == null ? void 0 : initialFocus.current) === activeElement) { - previousActiveElement.current = activeElement; - return; - } - } else if (containerElement.contains(activeElement)) { - previousActiveElement.current = activeElement; - return; - } - if (initialFocus == null ? void 0 : initialFocus.current) { - focusElement(initialFocus.current); - } else { - if (focusIn(containerElement, 1 /* First */) === 0 /* Error */) { - console.warn("There are no focusable elements inside the "); - } - } - previousActiveElement.current = ownerDocument == null ? void 0 : ownerDocument.activeElement; - }); - }, [enabled]); - return previousActiveElement; -} -function useFocusLock({ - ownerDocument, - container, - containers, - previousActiveElement -}, enabled) { - let mounted = useIsMounted(); - useEventListener( - ownerDocument == null ? void 0 : ownerDocument.defaultView, - "focus", - (event) => { - if (!enabled) - return; - if (!mounted.current) - return; - let allContainers = resolveContainers(containers); - if (container.current instanceof HTMLElement) - allContainers.add(container.current); - let previous = previousActiveElement.current; - if (!previous) - return; - let toElement = event.target; - if (toElement && toElement instanceof HTMLElement) { - if (!contains(allContainers, toElement)) { - event.preventDefault(); - event.stopPropagation(); - focusElement(previous); - } else { - previousActiveElement.current = toElement; - focusElement(toElement); - } - } else { - focusElement(previousActiveElement.current); - } - }, - true - ); -} -function contains(containers, element) { - for (let container of containers) { - if (container.contains(element)) - return true; - } - return false; -} - -// src/components/portal/portal.tsx -var import_react27 = __toESM(__webpack_require__(/*! react */ "react"), 1); -var import_react_dom = __webpack_require__(/*! react-dom */ "react-dom"); - -// src/internal/portal-force-root.tsx -var import_react26 = __toESM(__webpack_require__(/*! react */ "react"), 1); -var ForcePortalRootContext = (0, import_react26.createContext)(false); -function usePortalRoot() { - return (0, import_react26.useContext)(ForcePortalRootContext); -} -function ForcePortalRoot(props) { - return /* @__PURE__ */ import_react26.default.createElement(ForcePortalRootContext.Provider, { value: props.force }, props.children); -} - -// src/components/portal/portal.tsx -function usePortalTarget(ref) { - let forceInRoot = usePortalRoot(); - let groupTarget = (0, import_react27.useContext)(PortalGroupContext); - let ownerDocument = useOwnerDocument(ref); - let [target, setTarget] = (0, import_react27.useState)(() => { - if (!forceInRoot && groupTarget !== null) - return null; - if (env.isServer) - return null; - let existingRoot = ownerDocument == null ? void 0 : ownerDocument.getElementById("headlessui-portal-root"); - if (existingRoot) - return existingRoot; - if (ownerDocument === null) - return null; - let root = ownerDocument.createElement("div"); - root.setAttribute("id", "headlessui-portal-root"); - return ownerDocument.body.appendChild(root); - }); - (0, import_react27.useEffect)(() => { - if (target === null) - return; - if (!(ownerDocument == null ? void 0 : ownerDocument.body.contains(target))) { - ownerDocument == null ? void 0 : ownerDocument.body.appendChild(target); - } - }, [target, ownerDocument]); - (0, import_react27.useEffect)(() => { - if (forceInRoot) - return; - if (groupTarget === null) - return; - setTarget(groupTarget.current); - }, [groupTarget, setTarget, forceInRoot]); - return target; -} -var DEFAULT_PORTAL_TAG = import_react27.Fragment; -function PortalFn(props, ref) { - let theirProps = props; - let internalPortalRootRef = (0, import_react27.useRef)(null); - let portalRef = useSyncRefs( - optionalRef((ref2) => { - internalPortalRootRef.current = ref2; - }), - ref - ); - let ownerDocument = useOwnerDocument(internalPortalRootRef); - let target = usePortalTarget(internalPortalRootRef); - let [element] = (0, import_react27.useState)( - () => { - var _a3; - return env.isServer ? null : (_a3 = ownerDocument == null ? void 0 : ownerDocument.createElement("div")) != null ? _a3 : null; - } - ); - let parent = (0, import_react27.useContext)(PortalParentContext); - let ready = useServerHandoffComplete(); - useIsoMorphicEffect(() => { - if (!target || !element) - return; - if (!target.contains(element)) { - element.setAttribute("data-headlessui-portal", ""); - target.appendChild(element); - } - }, [target, element]); - useIsoMorphicEffect(() => { - if (!element) - return; - if (!parent) - return; - return parent.register(element); - }, [parent, element]); - useOnUnmount(() => { - var _a3; - if (!target || !element) - return; - if (element instanceof Node && target.contains(element)) { - target.removeChild(element); - } - if (target.childNodes.length <= 0) { - (_a3 = target.parentElement) == null ? void 0 : _a3.removeChild(target); - } - }); - if (!ready) - return null; - let ourProps = { ref: portalRef }; - return !target || !element ? null : (0, import_react_dom.createPortal)( - render({ - ourProps, - theirProps, - defaultTag: DEFAULT_PORTAL_TAG, - name: "Portal" - }), - element - ); -} -var DEFAULT_GROUP_TAG = import_react27.Fragment; -var PortalGroupContext = (0, import_react27.createContext)(null); -function GroupFn(props, ref) { - let { target, ...theirProps } = props; - let groupRef = useSyncRefs(ref); - let ourProps = { ref: groupRef }; - return /* @__PURE__ */ import_react27.default.createElement(PortalGroupContext.Provider, { value: target }, render({ - ourProps, - theirProps, - defaultTag: DEFAULT_GROUP_TAG, - name: "Popover.Group" - })); -} -var PortalParentContext = (0, import_react27.createContext)(null); -function useNestedPortals() { - let parent = (0, import_react27.useContext)(PortalParentContext); - let portals = (0, import_react27.useRef)([]); - let register = useEvent((portal) => { - portals.current.push(portal); - if (parent) - parent.register(portal); - return () => unregister(portal); - }); - let unregister = useEvent((portal) => { - let idx = portals.current.indexOf(portal); - if (idx !== -1) - portals.current.splice(idx, 1); - if (parent) - parent.unregister(portal); - }); - let api = (0, import_react27.useMemo)( - () => ({ register, unregister, portals }), - [register, unregister, portals] - ); - return [ - portals, - (0, import_react27.useMemo)(() => { - return function PortalWrapper({ children }) { - return /* @__PURE__ */ import_react27.default.createElement(PortalParentContext.Provider, { value: api }, children); - }; - }, [api]) - ]; -} -var PortalRoot = forwardRefWithAs(PortalFn); -var Group = forwardRefWithAs(GroupFn); -var Portal = Object.assign(PortalRoot, { Group }); - -// src/components/description/description.tsx -var import_react28 = __toESM(__webpack_require__(/*! react */ "react"), 1); -var DescriptionContext = (0, import_react28.createContext)(null); -function useDescriptionContext() { - let context = (0, import_react28.useContext)(DescriptionContext); - if (context === null) { - let err = new Error( - "You used a component, but it is not inside a relevant parent." - ); - if (Error.captureStackTrace) - Error.captureStackTrace(err, useDescriptionContext); - throw err; - } - return context; -} -function useDescriptions() { - let [descriptionIds, setDescriptionIds] = (0, import_react28.useState)([]); - return [ - // The actual id's as string or undefined - descriptionIds.length > 0 ? descriptionIds.join(" ") : void 0, - // The provider component - (0, import_react28.useMemo)(() => { - return function DescriptionProvider(props) { - let register = useEvent((value) => { - setDescriptionIds((existing) => [...existing, value]); - return () => setDescriptionIds((existing) => { - let clone = existing.slice(); - let idx = clone.indexOf(value); - if (idx !== -1) - clone.splice(idx, 1); - return clone; - }); - }); - let contextBag = (0, import_react28.useMemo)( - () => ({ register, slot: props.slot, name: props.name, props: props.props }), - [register, props.slot, props.name, props.props] - ); - return /* @__PURE__ */ import_react28.default.createElement(DescriptionContext.Provider, { value: contextBag }, props.children); - }; - }, [setDescriptionIds]) - ]; -} -var DEFAULT_DESCRIPTION_TAG = "p"; -function DescriptionFn(props, ref) { - let internalId = useId(); - let { id = `headlessui-description-${internalId}`, ...theirProps } = props; - let context = useDescriptionContext(); - let descriptionRef = useSyncRefs(ref); - useIsoMorphicEffect(() => context.register(id), [id, context.register]); - let ourProps = { ref: descriptionRef, ...context.props, id }; - return render({ - ourProps, - theirProps, - slot: context.slot || {}, - defaultTag: DEFAULT_DESCRIPTION_TAG, - name: context.name || "Description" - }); -} -var DescriptionRoot = forwardRefWithAs(DescriptionFn); -var Description = Object.assign(DescriptionRoot, { - // -}); - -// src/internal/stack-context.tsx -var import_react29 = __toESM(__webpack_require__(/*! react */ "react"), 1); -var StackContext = (0, import_react29.createContext)(() => { -}); -StackContext.displayName = "StackContext"; -function useStackContext() { - return (0, import_react29.useContext)(StackContext); -} -function StackProvider({ - children, - onUpdate, - type, - element, - enabled -}) { - let parentUpdate = useStackContext(); - let notify = useEvent((...args) => { - onUpdate == null ? void 0 : onUpdate(...args); - parentUpdate(...args); - }); - useIsoMorphicEffect(() => { - let shouldNotify = enabled === void 0 || enabled === true; - shouldNotify && notify(0 /* Add */, type, element); - return () => { - shouldNotify && notify(1 /* Remove */, type, element); - }; - }, [notify, type, element, enabled]); - return /* @__PURE__ */ import_react29.default.createElement(StackContext.Provider, { value: notify }, children); -} - -// src/use-sync-external-store-shim/index.ts -var React11 = __toESM(__webpack_require__(/*! react */ "react"), 1); - -// src/use-sync-external-store-shim/useSyncExternalStoreShimClient.ts -var React10 = __toESM(__webpack_require__(/*! react */ "react"), 1); -function isPolyfill(x, y) { - return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y; -} -var is = typeof Object.is === "function" ? Object.is : isPolyfill; -var { useState: useState8, useEffect: useEffect14, useLayoutEffect: useLayoutEffect2, useDebugValue } = React10; -var didWarnOld18Alpha = false; -var didWarnUncachedGetSnapshot = false; -function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) { - if (true) { - if (!didWarnOld18Alpha) { - if ("startTransition" in React10) { - didWarnOld18Alpha = true; - console.error( - "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release." - ); - } - } - } - const value = getSnapshot(); - if (true) { - if (!didWarnUncachedGetSnapshot) { - const cachedValue = getSnapshot(); - if (!is(value, cachedValue)) { - console.error("The result of getSnapshot should be cached to avoid an infinite loop"); - didWarnUncachedGetSnapshot = true; - } - } - } - const [{ inst }, forceUpdate] = useState8({ inst: { value, getSnapshot } }); - useLayoutEffect2(() => { - inst.value = value; - inst.getSnapshot = getSnapshot; - if (checkIfSnapshotChanged(inst)) { - forceUpdate({ inst }); - } - }, [subscribe, value, getSnapshot]); - useEffect14(() => { - if (checkIfSnapshotChanged(inst)) { - forceUpdate({ inst }); - } - const handleStoreChange = () => { - if (checkIfSnapshotChanged(inst)) { - forceUpdate({ inst }); - } - }; - return subscribe(handleStoreChange); - }, [subscribe]); - useDebugValue(value); - return value; -} -function checkIfSnapshotChanged(inst) { - const latestGetSnapshot = inst.getSnapshot; - const prevValue = inst.value; - try { - const nextValue = latestGetSnapshot(); - return !is(prevValue, nextValue); - } catch (error) { - return true; - } -} - -// src/use-sync-external-store-shim/useSyncExternalStoreShimServer.ts -function useSyncExternalStore2(subscribe, getSnapshot, getServerSnapshot) { - return getSnapshot(); -} - -// src/use-sync-external-store-shim/index.ts -var canUseDOM = !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined"); -var isServerEnvironment = !canUseDOM; -var shim = isServerEnvironment ? useSyncExternalStore2 : useSyncExternalStore; -var useSyncExternalStore3 = "useSyncExternalStore" in React11 ? ((r) => r.useSyncExternalStore)(React11) : shim; - -// src/hooks/use-store.ts -function useStore(store) { - return useSyncExternalStore3(store.subscribe, store.getSnapshot, store.getSnapshot); -} - -// src/utils/store.ts -function createStore(initial, actions) { - let state = initial(); - let listeners = /* @__PURE__ */ new Set(); - return { - getSnapshot() { - return state; - }, - subscribe(onChange) { - listeners.add(onChange); - return () => listeners.delete(onChange); - }, - dispatch(key, ...args) { - let newState = actions[key].call(state, ...args); - if (newState) { - state = newState; - listeners.forEach((listener) => listener()); - } - } - }; -} - -// src/hooks/document-overflow/adjust-scrollbar-padding.ts -function adjustScrollbarPadding() { - let scrollbarWidthBefore; - return { - before({ doc }) { - var _a3; - let documentElement = doc.documentElement; - let ownerWindow = (_a3 = doc.defaultView) != null ? _a3 : window; - scrollbarWidthBefore = ownerWindow.innerWidth - documentElement.clientWidth; - }, - after({ doc, d }) { - let documentElement = doc.documentElement; - let scrollbarWidthAfter = documentElement.clientWidth - documentElement.offsetWidth; - let scrollbarWidth = scrollbarWidthBefore - scrollbarWidthAfter; - d.style(documentElement, "paddingRight", `${scrollbarWidth}px`); - } - }; -} - -// src/hooks/document-overflow/handle-ios-locking.ts -function handleIOSLocking() { - if (!isIOS()) { - return {}; - } - let scrollPosition; - return { - before() { - scrollPosition = window.pageYOffset; - }, - after({ doc, d, meta }) { - function inAllowedContainer(el) { - return meta.containers.flatMap((resolve) => resolve()).some((container) => container.contains(el)); - } - d.style(doc.body, "marginTop", `-${scrollPosition}px`); - window.scrollTo(0, 0); - let scrollToElement = null; - d.addEventListener( - doc, - "click", - (e) => { - if (!(e.target instanceof HTMLElement)) { - return; - } - try { - let anchor = e.target.closest("a"); - if (!anchor) - return; - let { hash } = new URL(anchor.href); - let el = doc.querySelector(hash); - if (el && !inAllowedContainer(el)) { - scrollToElement = el; - } - } catch (err) { - } - }, - true - ); - d.addEventListener( - doc, - "touchmove", - (e) => { - if (e.target instanceof HTMLElement && !inAllowedContainer(e.target)) { - e.preventDefault(); - } - }, - { passive: false } - ); - d.add(() => { - window.scrollTo(0, window.pageYOffset + scrollPosition); - if (scrollToElement && scrollToElement.isConnected) { - scrollToElement.scrollIntoView({ block: "nearest" }); - scrollToElement = null; - } - }); - } - }; -} - -// src/hooks/document-overflow/prevent-scroll.ts -function preventScroll() { - return { - before({ doc, d }) { - d.style(doc.documentElement, "overflow", "hidden"); - } - }; -} - -// src/hooks/document-overflow/overflow-store.ts -function buildMeta(fns) { - let tmp = {}; - for (let fn of fns) { - Object.assign(tmp, fn(tmp)); - } - return tmp; -} -var overflows = createStore(() => /* @__PURE__ */ new Map(), { - PUSH(doc, meta) { - var _a3; - let entry = (_a3 = this.get(doc)) != null ? _a3 : { - doc, - count: 0, - d: disposables(), - meta: /* @__PURE__ */ new Set() - }; - entry.count++; - entry.meta.add(meta); - this.set(doc, entry); - return this; - }, - POP(doc, meta) { - let entry = this.get(doc); - if (entry) { - entry.count--; - entry.meta.delete(meta); - } - return this; - }, - SCROLL_PREVENT({ doc, d, meta }) { - let ctx = { - doc, - d, - meta: buildMeta(meta) - }; - let steps = [ - handleIOSLocking(), - adjustScrollbarPadding(), - preventScroll() - ]; - steps.forEach(({ before }) => before == null ? void 0 : before(ctx)); - steps.forEach(({ after }) => after == null ? void 0 : after(ctx)); - }, - SCROLL_ALLOW({ d }) { - d.dispose(); - }, - TEARDOWN({ doc }) { - this.delete(doc); - } -}); -overflows.subscribe(() => { - let docs = overflows.getSnapshot(); - let styles = /* @__PURE__ */ new Map(); - for (let [doc] of docs) { - styles.set(doc, doc.documentElement.style.overflow); - } - for (let entry of docs.values()) { - let isHidden = styles.get(entry.doc) === "hidden"; - let isLocked = entry.count !== 0; - let willChange = isLocked && !isHidden || !isLocked && isHidden; - if (willChange) { - overflows.dispatch(entry.count > 0 ? "SCROLL_PREVENT" : "SCROLL_ALLOW", entry); - } - if (entry.count === 0) { - overflows.dispatch("TEARDOWN", entry); - } - } -}); - -// src/hooks/document-overflow/use-document-overflow.ts -function useDocumentOverflowLockedEffect(doc, shouldBeLocked, meta) { - let store = useStore(overflows); - let entry = doc ? store.get(doc) : void 0; - let locked = entry ? entry.count > 0 : false; - useIsoMorphicEffect(() => { - if (!doc || !shouldBeLocked) { - return; - } - overflows.dispatch("PUSH", doc, meta); - return () => overflows.dispatch("POP", doc, meta); - }, [shouldBeLocked, doc]); - return locked; -} - -// src/hooks/use-inert.tsx -var originals = /* @__PURE__ */ new Map(); -var counts = /* @__PURE__ */ new Map(); -function useInert(node, enabled = true) { - useIsoMorphicEffect(() => { - var _a3; - if (!enabled) - return; - let element = typeof node === "function" ? node() : node.current; - if (!element) - return; - function cleanup() { - var _a4; - if (!element) - return; - let count2 = (_a4 = counts.get(element)) != null ? _a4 : 1; - if (count2 === 1) - counts.delete(element); - else - counts.set(element, count2 - 1); - if (count2 !== 1) - return; - let original = originals.get(element); - if (!original) - return; - if (original["aria-hidden"] === null) - element.removeAttribute("aria-hidden"); - else - element.setAttribute("aria-hidden", original["aria-hidden"]); - element.inert = original.inert; - originals.delete(element); - } - let count = (_a3 = counts.get(element)) != null ? _a3 : 0; - counts.set(element, count + 1); - if (count !== 0) - return cleanup; - originals.set(element, { - "aria-hidden": element.getAttribute("aria-hidden"), - inert: element.inert - }); - element.setAttribute("aria-hidden", "true"); - element.inert = true; - return cleanup; - }, [node, enabled]); -} - -// src/hooks/use-root-containers.tsx -var import_react30 = __toESM(__webpack_require__(/*! react */ "react"), 1); -function useRootContainers({ - defaultContainers = [], - portals -} = {}) { - let mainTreeNodeRef = (0, import_react30.useRef)(null); - let ownerDocument = useOwnerDocument(mainTreeNodeRef); - let resolveContainers2 = useEvent(() => { - var _a3; - let containers = []; - for (let container of defaultContainers) { - if (container === null) - continue; - if (container instanceof HTMLElement) { - containers.push(container); - } else if ("current" in container && container.current instanceof HTMLElement) { - containers.push(container.current); - } - } - if (portals == null ? void 0 : portals.current) { - for (let portal of portals.current) { - containers.push(portal); - } - } - for (let container of (_a3 = ownerDocument == null ? void 0 : ownerDocument.querySelectorAll("html > *, body > *")) != null ? _a3 : []) { - if (container === document.body) - continue; - if (container === document.head) - continue; - if (!(container instanceof HTMLElement)) - continue; - if (container.id === "headlessui-portal-root") - continue; - if (container.contains(mainTreeNodeRef.current)) - continue; - if (containers.some((defaultContainer) => container.contains(defaultContainer))) - continue; - containers.push(container); - } - return containers; - }); - return { - resolveContainers: resolveContainers2, - contains: useEvent( - (element) => resolveContainers2().some((container) => container.contains(element)) - ), - mainTreeNodeRef, - MainTreeNode: (0, import_react30.useMemo)(() => { - return function MainTreeNode() { - return /* @__PURE__ */ import_react30.default.createElement(Hidden, { features: 4 /* Hidden */, ref: mainTreeNodeRef }); - }; - }, [mainTreeNodeRef]) - }; -} - -// src/components/dialog/dialog.tsx -var reducers2 = { - [0 /* SetTitleId */](state, action) { - if (state.titleId === action.id) - return state; - return { ...state, titleId: action.id }; - } -}; -var DialogContext = (0, import_react31.createContext)(null); -DialogContext.displayName = "DialogContext"; -function useDialogContext(component) { - let context = (0, import_react31.useContext)(DialogContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, useDialogContext); - throw err; - } - return context; -} -function useScrollLock(ownerDocument, enabled, resolveAllowedContainers = () => [document.body]) { - useDocumentOverflowLockedEffect(ownerDocument, enabled, (meta) => { - var _a3; - return { - containers: [...(_a3 = meta.containers) != null ? _a3 : [], resolveAllowedContainers] - }; - }); -} -function stateReducer2(state, action) { - return match(action.type, reducers2, state, action); -} -var DEFAULT_DIALOG_TAG = "div"; -var DialogRenderFeatures = 1 /* RenderStrategy */ | 2 /* Static */; -function DialogFn(props, ref) { - var _a3; - let internalId = useId(); - let { - id = `headlessui-dialog-${internalId}`, - open, - onClose, - initialFocus, - __demoMode = false, - ...theirProps - } = props; - let [nestedDialogCount, setNestedDialogCount] = (0, import_react31.useState)(0); - let usesOpenClosedState = useOpenClosed(); - if (open === void 0 && usesOpenClosedState !== null) { - open = (usesOpenClosedState & 1 /* Open */) === 1 /* Open */; - } - let internalDialogRef = (0, import_react31.useRef)(null); - let dialogRef = useSyncRefs(internalDialogRef, ref); - let ownerDocument = useOwnerDocument(internalDialogRef); - let hasOpen = props.hasOwnProperty("open") || usesOpenClosedState !== null; - let hasOnClose = props.hasOwnProperty("onClose"); - if (!hasOpen && !hasOnClose) { - throw new Error( - `You have to provide an \`open\` and an \`onClose\` prop to the \`Dialog\` component.` - ); - } - if (!hasOpen) { - throw new Error( - `You provided an \`onClose\` prop to the \`Dialog\`, but forgot an \`open\` prop.` - ); - } - if (!hasOnClose) { - throw new Error( - `You provided an \`open\` prop to the \`Dialog\`, but forgot an \`onClose\` prop.` - ); - } - if (typeof open !== "boolean") { - throw new Error( - `You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${open}` - ); - } - if (typeof onClose !== "function") { - throw new Error( - `You provided an \`onClose\` prop to the \`Dialog\`, but the value is not a function. Received: ${onClose}` - ); - } - let dialogState = open ? 0 /* Open */ : 1 /* Closed */; - let [state, dispatch] = (0, import_react31.useReducer)(stateReducer2, { - titleId: null, - descriptionId: null, - panelRef: (0, import_react31.createRef)() - }); - let close = useEvent(() => onClose(false)); - let setTitleId = useEvent((id2) => dispatch({ type: 0 /* SetTitleId */, id: id2 })); - let ready = useServerHandoffComplete(); - let enabled = ready ? __demoMode ? false : dialogState === 0 /* Open */ : false; - let hasNestedDialogs = nestedDialogCount > 1; - let hasParentDialog = (0, import_react31.useContext)(DialogContext) !== null; - let [portals, PortalWrapper] = useNestedPortals(); - let { - resolveContainers: resolveRootContainers, - mainTreeNodeRef, - MainTreeNode - } = useRootContainers({ - portals, - defaultContainers: [(_a3 = state.panelRef.current) != null ? _a3 : internalDialogRef.current] - }); - let position = !hasNestedDialogs ? "leaf" : "parent"; - let isClosing = usesOpenClosedState !== null ? (usesOpenClosedState & 4 /* Closing */) === 4 /* Closing */ : false; - let inertOthersEnabled = (() => { - if (hasParentDialog) - return false; - if (isClosing) - return false; - return enabled; - })(); - let resolveRootOfMainTreeNode = (0, import_react31.useCallback)(() => { - var _a4, _b; - return (_b = Array.from((_a4 = ownerDocument == null ? void 0 : ownerDocument.querySelectorAll("body > *")) != null ? _a4 : []).find((root) => { - if (root.id === "headlessui-portal-root") - return false; - return root.contains(mainTreeNodeRef.current) && root instanceof HTMLElement; - })) != null ? _b : null; - }, [mainTreeNodeRef]); - useInert(resolveRootOfMainTreeNode, inertOthersEnabled); - let inertParentDialogs = (() => { - if (hasNestedDialogs) - return true; - return enabled; - })(); - let resolveRootOfParentDialog = (0, import_react31.useCallback)(() => { - var _a4, _b; - return (_b = Array.from((_a4 = ownerDocument == null ? void 0 : ownerDocument.querySelectorAll("[data-headlessui-portal]")) != null ? _a4 : []).find( - (root) => root.contains(mainTreeNodeRef.current) && root instanceof HTMLElement - )) != null ? _b : null; - }, [mainTreeNodeRef]); - useInert(resolveRootOfParentDialog, inertParentDialogs); - let outsideClickEnabled = (() => { - if (!enabled) - return false; - if (hasNestedDialogs) - return false; - return true; - })(); - useOutsideClick(resolveRootContainers, close, outsideClickEnabled); - let escapeToCloseEnabled = (() => { - if (hasNestedDialogs) - return false; - if (dialogState !== 0 /* Open */) - return false; - return true; - })(); - useEventListener(ownerDocument == null ? void 0 : ownerDocument.defaultView, "keydown", (event) => { - if (!escapeToCloseEnabled) - return; - if (event.defaultPrevented) - return; - if (event.key !== "Escape" /* Escape */) - return; - event.preventDefault(); - event.stopPropagation(); - close(); - }); - let scrollLockEnabled = (() => { - if (isClosing) - return false; - if (dialogState !== 0 /* Open */) - return false; - if (hasParentDialog) - return false; - return true; - })(); - useScrollLock(ownerDocument, scrollLockEnabled, resolveRootContainers); - (0, import_react31.useEffect)(() => { - if (dialogState !== 0 /* Open */) - return; - if (!internalDialogRef.current) - return; - let observer = new ResizeObserver((entries) => { - for (let entry of entries) { - let rect = entry.target.getBoundingClientRect(); - if (rect.x === 0 && rect.y === 0 && rect.width === 0 && rect.height === 0) { - close(); - } - } - }); - observer.observe(internalDialogRef.current); - return () => observer.disconnect(); - }, [dialogState, internalDialogRef, close]); - let [describedby, DescriptionProvider] = useDescriptions(); - let contextBag = (0, import_react31.useMemo)( - () => [{ dialogState, close, setTitleId }, state], - [dialogState, state, close, setTitleId] - ); - let slot = (0, import_react31.useMemo)( - () => ({ open: dialogState === 0 /* Open */ }), - [dialogState] - ); - let ourProps = { - ref: dialogRef, - id, - role: "dialog", - "aria-modal": dialogState === 0 /* Open */ ? true : void 0, - "aria-labelledby": state.titleId, - "aria-describedby": describedby - }; - return /* @__PURE__ */ import_react31.default.createElement( - StackProvider, - { - type: "Dialog", - enabled: dialogState === 0 /* Open */, - element: internalDialogRef, - onUpdate: useEvent((message, type) => { - if (type !== "Dialog") - return; - match(message, { - [0 /* Add */]: () => setNestedDialogCount((count) => count + 1), - [1 /* Remove */]: () => setNestedDialogCount((count) => count - 1) - }); - }) - }, - /* @__PURE__ */ import_react31.default.createElement(ForcePortalRoot, { force: true }, /* @__PURE__ */ import_react31.default.createElement(Portal, null, /* @__PURE__ */ import_react31.default.createElement(DialogContext.Provider, { value: contextBag }, /* @__PURE__ */ import_react31.default.createElement(Portal.Group, { target: internalDialogRef }, /* @__PURE__ */ import_react31.default.createElement(ForcePortalRoot, { force: false }, /* @__PURE__ */ import_react31.default.createElement(DescriptionProvider, { slot, name: "Dialog.Description" }, /* @__PURE__ */ import_react31.default.createElement( - FocusTrap, - { - initialFocus, - containers: resolveRootContainers, - features: enabled ? match(position, { - parent: FocusTrap.features.RestoreFocus, - leaf: FocusTrap.features.All & ~FocusTrap.features.FocusLock - }) : FocusTrap.features.None - }, - /* @__PURE__ */ import_react31.default.createElement(PortalWrapper, null, render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_DIALOG_TAG, - features: DialogRenderFeatures, - visible: dialogState === 0 /* Open */, - name: "Dialog" - })) - ))))))), - /* @__PURE__ */ import_react31.default.createElement(MainTreeNode, null) - ); -} -var DEFAULT_OVERLAY_TAG = "div"; -function OverlayFn(props, ref) { - let internalId = useId(); - let { id = `headlessui-dialog-overlay-${internalId}`, ...theirProps } = props; - let [{ dialogState, close }] = useDialogContext("Dialog.Overlay"); - let overlayRef = useSyncRefs(ref); - let handleClick = useEvent((event) => { - if (event.target !== event.currentTarget) - return; - if (isDisabledReactIssue7711(event.currentTarget)) - return event.preventDefault(); - event.preventDefault(); - event.stopPropagation(); - close(); - }); - let slot = (0, import_react31.useMemo)( - () => ({ open: dialogState === 0 /* Open */ }), - [dialogState] - ); - let ourProps = { - ref: overlayRef, - id, - "aria-hidden": true, - onClick: handleClick - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_OVERLAY_TAG, - name: "Dialog.Overlay" - }); -} -var DEFAULT_BACKDROP_TAG = "div"; -function BackdropFn(props, ref) { - let internalId = useId(); - let { id = `headlessui-dialog-backdrop-${internalId}`, ...theirProps } = props; - let [{ dialogState }, state] = useDialogContext("Dialog.Backdrop"); - let backdropRef = useSyncRefs(ref); - (0, import_react31.useEffect)(() => { - if (state.panelRef.current === null) { - throw new Error( - `A component is being used, but a component is missing.` - ); - } - }, [state.panelRef]); - let slot = (0, import_react31.useMemo)( - () => ({ open: dialogState === 0 /* Open */ }), - [dialogState] - ); - let ourProps = { - ref: backdropRef, - id, - "aria-hidden": true - }; - return /* @__PURE__ */ import_react31.default.createElement(ForcePortalRoot, { force: true }, /* @__PURE__ */ import_react31.default.createElement(Portal, null, render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_BACKDROP_TAG, - name: "Dialog.Backdrop" - }))); -} -var DEFAULT_PANEL_TAG = "div"; -function PanelFn(props, ref) { - let internalId = useId(); - let { id = `headlessui-dialog-panel-${internalId}`, ...theirProps } = props; - let [{ dialogState }, state] = useDialogContext("Dialog.Panel"); - let panelRef = useSyncRefs(ref, state.panelRef); - let slot = (0, import_react31.useMemo)( - () => ({ open: dialogState === 0 /* Open */ }), - [dialogState] - ); - let handleClick = useEvent((event) => { - event.stopPropagation(); - }); - let ourProps = { - ref: panelRef, - id, - onClick: handleClick - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_PANEL_TAG, - name: "Dialog.Panel" - }); -} -var DEFAULT_TITLE_TAG = "h2"; -function TitleFn(props, ref) { - let internalId = useId(); - let { id = `headlessui-dialog-title-${internalId}`, ...theirProps } = props; - let [{ dialogState, setTitleId }] = useDialogContext("Dialog.Title"); - let titleRef = useSyncRefs(ref); - (0, import_react31.useEffect)(() => { - setTitleId(id); - return () => setTitleId(null); - }, [id, setTitleId]); - let slot = (0, import_react31.useMemo)( - () => ({ open: dialogState === 0 /* Open */ }), - [dialogState] - ); - let ourProps = { ref: titleRef, id }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_TITLE_TAG, - name: "Dialog.Title" - }); -} -var DialogRoot = forwardRefWithAs(DialogFn); -var Backdrop = forwardRefWithAs(BackdropFn); -var Panel = forwardRefWithAs(PanelFn); -var Overlay = forwardRefWithAs(OverlayFn); -var Title = forwardRefWithAs(TitleFn); -var Dialog = Object.assign(DialogRoot, { - Backdrop, - Panel, - Overlay, - Title, - Description -}); - -// src/components/disclosure/disclosure.tsx -var import_react33 = __toESM(__webpack_require__(/*! react */ "react"), 1); - -// src/utils/start-transition.ts -var import_react32 = __toESM(__webpack_require__(/*! react */ "react"), 1); -var _a2; -var startTransition = ( - // Prefer React's `startTransition` if it's available. - // @ts-expect-error - `startTransition` doesn't exist in React < 18. - (_a2 = import_react32.default.startTransition) != null ? _a2 : function startTransition2(cb) { - cb(); - } -); - -// src/components/disclosure/disclosure.tsx -var reducers3 = { - [0 /* ToggleDisclosure */]: (state) => ({ - ...state, - disclosureState: match(state.disclosureState, { - [0 /* Open */]: 1 /* Closed */, - [1 /* Closed */]: 0 /* Open */ - }) - }), - [1 /* CloseDisclosure */]: (state) => { - if (state.disclosureState === 1 /* Closed */) - return state; - return { ...state, disclosureState: 1 /* Closed */ }; - }, - [4 /* LinkPanel */](state) { - if (state.linkedPanel === true) - return state; - return { ...state, linkedPanel: true }; - }, - [5 /* UnlinkPanel */](state) { - if (state.linkedPanel === false) - return state; - return { ...state, linkedPanel: false }; - }, - [2 /* SetButtonId */](state, action) { - if (state.buttonId === action.buttonId) - return state; - return { ...state, buttonId: action.buttonId }; - }, - [3 /* SetPanelId */](state, action) { - if (state.panelId === action.panelId) - return state; - return { ...state, panelId: action.panelId }; - } -}; -var DisclosureContext = (0, import_react33.createContext)(null); -DisclosureContext.displayName = "DisclosureContext"; -function useDisclosureContext(component) { - let context = (0, import_react33.useContext)(DisclosureContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, useDisclosureContext); - throw err; - } - return context; -} -var DisclosureAPIContext = (0, import_react33.createContext)(null); -DisclosureAPIContext.displayName = "DisclosureAPIContext"; -function useDisclosureAPIContext(component) { - let context = (0, import_react33.useContext)(DisclosureAPIContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, useDisclosureAPIContext); - throw err; - } - return context; -} -var DisclosurePanelContext = (0, import_react33.createContext)(null); -DisclosurePanelContext.displayName = "DisclosurePanelContext"; -function useDisclosurePanelContext() { - return (0, import_react33.useContext)(DisclosurePanelContext); -} -function stateReducer3(state, action) { - return match(action.type, reducers3, state, action); -} -var DEFAULT_DISCLOSURE_TAG = import_react33.Fragment; -function DisclosureFn(props, ref) { - let { defaultOpen = false, ...theirProps } = props; - let internalDisclosureRef = (0, import_react33.useRef)(null); - let disclosureRef = useSyncRefs( - ref, - optionalRef( - (ref2) => { - internalDisclosureRef.current = ref2; - }, - props.as === void 0 || // @ts-expect-error The `as` prop _can_ be a Fragment - props.as === import_react33.Fragment - ) - ); - let panelRef = (0, import_react33.useRef)(null); - let buttonRef = (0, import_react33.useRef)(null); - let reducerBag = (0, import_react33.useReducer)(stateReducer3, { - disclosureState: defaultOpen ? 0 /* Open */ : 1 /* Closed */, - linkedPanel: false, - buttonRef, - panelRef, - buttonId: null, - panelId: null - }); - let [{ disclosureState, buttonId }, dispatch] = reducerBag; - let close = useEvent((focusableElement) => { - dispatch({ type: 1 /* CloseDisclosure */ }); - let ownerDocument = getOwnerDocument(internalDisclosureRef); - if (!ownerDocument) - return; - if (!buttonId) - return; - let restoreElement = (() => { - if (!focusableElement) - return ownerDocument.getElementById(buttonId); - if (focusableElement instanceof HTMLElement) - return focusableElement; - if (focusableElement.current instanceof HTMLElement) - return focusableElement.current; - return ownerDocument.getElementById(buttonId); - })(); - restoreElement == null ? void 0 : restoreElement.focus(); - }); - let api = (0, import_react33.useMemo)(() => ({ close }), [close]); - let slot = (0, import_react33.useMemo)( - () => ({ open: disclosureState === 0 /* Open */, close }), - [disclosureState, close] - ); - let ourProps = { - ref: disclosureRef - }; - return /* @__PURE__ */ import_react33.default.createElement(DisclosureContext.Provider, { value: reducerBag }, /* @__PURE__ */ import_react33.default.createElement(DisclosureAPIContext.Provider, { value: api }, /* @__PURE__ */ import_react33.default.createElement( - OpenClosedProvider, - { - value: match(disclosureState, { - [0 /* Open */]: 1 /* Open */, - [1 /* Closed */]: 2 /* Closed */ - }) - }, - render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_DISCLOSURE_TAG, - name: "Disclosure" - }) - ))); -} -var DEFAULT_BUTTON_TAG2 = "button"; -function ButtonFn2(props, ref) { - let internalId = useId(); - let { id = `headlessui-disclosure-button-${internalId}`, ...theirProps } = props; - let [state, dispatch] = useDisclosureContext("Disclosure.Button"); - let panelContext = useDisclosurePanelContext(); - let isWithinPanel = panelContext === null ? false : panelContext === state.panelId; - let internalButtonRef = (0, import_react33.useRef)(null); - let buttonRef = useSyncRefs(internalButtonRef, ref, !isWithinPanel ? state.buttonRef : null); - (0, import_react33.useEffect)(() => { - if (isWithinPanel) - return; - dispatch({ type: 2 /* SetButtonId */, buttonId: id }); - return () => { - dispatch({ type: 2 /* SetButtonId */, buttonId: null }); - }; - }, [id, dispatch, isWithinPanel]); - let handleKeyDown = useEvent((event) => { - var _a3; - if (isWithinPanel) { - if (state.disclosureState === 1 /* Closed */) - return; - switch (event.key) { - case " " /* Space */: - case "Enter" /* Enter */: - event.preventDefault(); - event.stopPropagation(); - dispatch({ type: 0 /* ToggleDisclosure */ }); - (_a3 = state.buttonRef.current) == null ? void 0 : _a3.focus(); - break; - } - } else { - switch (event.key) { - case " " /* Space */: - case "Enter" /* Enter */: - event.preventDefault(); - event.stopPropagation(); - dispatch({ type: 0 /* ToggleDisclosure */ }); - break; - } - } - }); - let handleKeyUp = useEvent((event) => { - switch (event.key) { - case " " /* Space */: - event.preventDefault(); - break; - } - }); - let handleClick = useEvent((event) => { - var _a3; - if (isDisabledReactIssue7711(event.currentTarget)) - return; - if (props.disabled) - return; - if (isWithinPanel) { - dispatch({ type: 0 /* ToggleDisclosure */ }); - (_a3 = state.buttonRef.current) == null ? void 0 : _a3.focus(); - } else { - dispatch({ type: 0 /* ToggleDisclosure */ }); - } - }); - let slot = (0, import_react33.useMemo)( - () => ({ open: state.disclosureState === 0 /* Open */ }), - [state] - ); - let type = useResolveButtonType(props, internalButtonRef); - let ourProps = isWithinPanel ? { ref: buttonRef, type, onKeyDown: handleKeyDown, onClick: handleClick } : { - ref: buttonRef, - id, - type, - "aria-expanded": props.disabled ? void 0 : state.disclosureState === 0 /* Open */, - "aria-controls": state.linkedPanel ? state.panelId : void 0, - onKeyDown: handleKeyDown, - onKeyUp: handleKeyUp, - onClick: handleClick - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_BUTTON_TAG2, - name: "Disclosure.Button" - }); -} -var DEFAULT_PANEL_TAG2 = "div"; -var PanelRenderFeatures = 1 /* RenderStrategy */ | 2 /* Static */; -function PanelFn2(props, ref) { - let internalId = useId(); - let { id = `headlessui-disclosure-panel-${internalId}`, ...theirProps } = props; - let [state, dispatch] = useDisclosureContext("Disclosure.Panel"); - let { close } = useDisclosureAPIContext("Disclosure.Panel"); - let panelRef = useSyncRefs(ref, state.panelRef, (el) => { - startTransition(() => dispatch({ type: el ? 4 /* LinkPanel */ : 5 /* UnlinkPanel */ })); - }); - (0, import_react33.useEffect)(() => { - dispatch({ type: 3 /* SetPanelId */, panelId: id }); - return () => { - dispatch({ type: 3 /* SetPanelId */, panelId: null }); - }; - }, [id, dispatch]); - let usesOpenClosedState = useOpenClosed(); - let visible = (() => { - if (usesOpenClosedState !== null) { - return (usesOpenClosedState & 1 /* Open */) === 1 /* Open */; - } - return state.disclosureState === 0 /* Open */; - })(); - let slot = (0, import_react33.useMemo)( - () => ({ open: state.disclosureState === 0 /* Open */, close }), - [state, close] - ); - let ourProps = { - ref: panelRef, - id - }; - return /* @__PURE__ */ import_react33.default.createElement(DisclosurePanelContext.Provider, { value: state.panelId }, render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_PANEL_TAG2, - features: PanelRenderFeatures, - visible, - name: "Disclosure.Panel" - })); -} -var DisclosureRoot = forwardRefWithAs(DisclosureFn); -var Button2 = forwardRefWithAs(ButtonFn2); -var Panel2 = forwardRefWithAs(PanelFn2); -var Disclosure = Object.assign(DisclosureRoot, { Button: Button2, Panel: Panel2 }); - -// src/components/listbox/listbox.tsx -var import_react35 = __toESM(__webpack_require__(/*! react */ "react"), 1); - -// src/hooks/use-text-value.ts -var import_react34 = __webpack_require__(/*! react */ "react"); - -// src/utils/get-text-value.ts -var emojiRegex = /([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g; -function getTextContents(element) { - var _a3, _b; - let currentInnerText = (_a3 = element.innerText) != null ? _a3 : ""; - let copy = element.cloneNode(true); - if (!(copy instanceof HTMLElement)) { - return currentInnerText; - } - let dropped = false; - for (let child of copy.querySelectorAll('[hidden],[aria-hidden],[role="img"]')) { - child.remove(); - dropped = true; - } - let value = dropped ? (_b = copy.innerText) != null ? _b : "" : currentInnerText; - if (emojiRegex.test(value)) { - value = value.replace(emojiRegex, ""); - } - return value; -} -function getTextValue(element) { - let label = element.getAttribute("aria-label"); - if (typeof label === "string") - return label.trim(); - let labelledby = element.getAttribute("aria-labelledby"); - if (labelledby) { - let labels = labelledby.split(" ").map((labelledby2) => { - let labelEl = document.getElementById(labelledby2); - if (labelEl) { - let label2 = labelEl.getAttribute("aria-label"); - if (typeof label2 === "string") - return label2.trim(); - return getTextContents(labelEl).trim(); - } - return null; - }).filter(Boolean); - if (labels.length > 0) - return labels.join(", "); - } - return getTextContents(element).trim(); -} - -// src/hooks/use-text-value.ts -function useTextValue(element) { - let cacheKey = (0, import_react34.useRef)(""); - let cacheValue = (0, import_react34.useRef)(""); - return useEvent(() => { - let el = element.current; - if (!el) - return ""; - let currentKey = el.innerText; - if (cacheKey.current === currentKey) { - return cacheValue.current; - } - let value = getTextValue(el).trim().toLowerCase(); - cacheKey.current = currentKey; - cacheValue.current = value; - return value; - }); -} - -// src/components/listbox/listbox.tsx -function adjustOrderedState2(state, adjustment = (i) => i) { - let currentActiveOption = state.activeOptionIndex !== null ? state.options[state.activeOptionIndex] : null; - let sortedOptions = sortByDomNode( - adjustment(state.options.slice()), - (option) => option.dataRef.current.domRef.current - ); - let adjustedActiveOptionIndex = currentActiveOption ? sortedOptions.indexOf(currentActiveOption) : null; - if (adjustedActiveOptionIndex === -1) { - adjustedActiveOptionIndex = null; - } - return { - options: sortedOptions, - activeOptionIndex: adjustedActiveOptionIndex - }; -} -var reducers4 = { - [1 /* CloseListbox */](state) { - if (state.dataRef.current.disabled) - return state; - if (state.listboxState === 1 /* Closed */) - return state; - return { ...state, activeOptionIndex: null, listboxState: 1 /* Closed */ }; - }, - [0 /* OpenListbox */](state) { - if (state.dataRef.current.disabled) - return state; - if (state.listboxState === 0 /* Open */) - return state; - let activeOptionIndex = state.activeOptionIndex; - let { isSelected } = state.dataRef.current; - let optionIdx = state.options.findIndex((option) => isSelected(option.dataRef.current.value)); - if (optionIdx !== -1) { - activeOptionIndex = optionIdx; - } - return { ...state, listboxState: 0 /* Open */, activeOptionIndex }; - }, - [2 /* GoToOption */](state, action) { - var _a3; - if (state.dataRef.current.disabled) - return state; - if (state.listboxState === 1 /* Closed */) - return state; - let adjustedState = adjustOrderedState2(state); - let activeOptionIndex = calculateActiveIndex(action, { - resolveItems: () => adjustedState.options, - resolveActiveIndex: () => adjustedState.activeOptionIndex, - resolveId: (option) => option.id, - resolveDisabled: (option) => option.dataRef.current.disabled - }); - return { - ...state, - ...adjustedState, - searchQuery: "", - activeOptionIndex, - activationTrigger: (_a3 = action.trigger) != null ? _a3 : 1 /* Other */ - }; - }, - [3 /* Search */]: (state, action) => { - if (state.dataRef.current.disabled) - return state; - if (state.listboxState === 1 /* Closed */) - return state; - let wasAlreadySearching = state.searchQuery !== ""; - let offset = wasAlreadySearching ? 0 : 1; - let searchQuery = state.searchQuery + action.value.toLowerCase(); - let reOrderedOptions = state.activeOptionIndex !== null ? state.options.slice(state.activeOptionIndex + offset).concat(state.options.slice(0, state.activeOptionIndex + offset)) : state.options; - let matchingOption = reOrderedOptions.find( - (option) => { - var _a3; - return !option.dataRef.current.disabled && ((_a3 = option.dataRef.current.textValue) == null ? void 0 : _a3.startsWith(searchQuery)); - } - ); - let matchIdx = matchingOption ? state.options.indexOf(matchingOption) : -1; - if (matchIdx === -1 || matchIdx === state.activeOptionIndex) - return { ...state, searchQuery }; - return { - ...state, - searchQuery, - activeOptionIndex: matchIdx, - activationTrigger: 1 /* Other */ - }; - }, - [4 /* ClearSearch */](state) { - if (state.dataRef.current.disabled) - return state; - if (state.listboxState === 1 /* Closed */) - return state; - if (state.searchQuery === "") - return state; - return { ...state, searchQuery: "" }; - }, - [5 /* RegisterOption */]: (state, action) => { - let option = { id: action.id, dataRef: action.dataRef }; - let adjustedState = adjustOrderedState2(state, (options) => [...options, option]); - if (state.activeOptionIndex === null) { - if (state.dataRef.current.isSelected(action.dataRef.current.value)) { - adjustedState.activeOptionIndex = adjustedState.options.indexOf(option); - } - } - return { ...state, ...adjustedState }; - }, - [6 /* UnregisterOption */]: (state, action) => { - let adjustedState = adjustOrderedState2(state, (options) => { - let idx = options.findIndex((a) => a.id === action.id); - if (idx !== -1) - options.splice(idx, 1); - return options; - }); - return { - ...state, - ...adjustedState, - activationTrigger: 1 /* Other */ - }; - }, - [7 /* RegisterLabel */]: (state, action) => { - return { - ...state, - labelId: action.id - }; - } -}; -var ListboxActionsContext = (0, import_react35.createContext)(null); -ListboxActionsContext.displayName = "ListboxActionsContext"; -function useActions2(component) { - let context = (0, import_react35.useContext)(ListboxActionsContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, useActions2); - throw err; - } - return context; -} -var ListboxDataContext = (0, import_react35.createContext)(null); -ListboxDataContext.displayName = "ListboxDataContext"; -function useData2(component) { - let context = (0, import_react35.useContext)(ListboxDataContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, useData2); - throw err; - } - return context; -} -function stateReducer4(state, action) { - return match(action.type, reducers4, state, action); -} -var DEFAULT_LISTBOX_TAG = import_react35.Fragment; -function ListboxFn(props, ref) { - let { - value: controlledValue, - defaultValue, - form: formName, - name, - onChange: controlledOnChange, - by = (a, z) => a === z, - disabled = false, - horizontal = false, - multiple = false, - ...theirProps - } = props; - const orientation = horizontal ? "horizontal" : "vertical"; - let listboxRef = useSyncRefs(ref); - let [value = multiple ? [] : void 0, theirOnChange] = useControllable( - controlledValue, - controlledOnChange, - defaultValue - ); - let [state, dispatch] = (0, import_react35.useReducer)(stateReducer4, { - dataRef: (0, import_react35.createRef)(), - listboxState: 1 /* Closed */, - options: [], - searchQuery: "", - labelId: null, - activeOptionIndex: null, - activationTrigger: 1 /* Other */ - }); - let optionsPropsRef = (0, import_react35.useRef)({ static: false, hold: false }); - let labelRef = (0, import_react35.useRef)(null); - let buttonRef = (0, import_react35.useRef)(null); - let optionsRef = (0, import_react35.useRef)(null); - let compare = useEvent( - typeof by === "string" ? (a, z) => { - let property = by; - return (a == null ? void 0 : a[property]) === (z == null ? void 0 : z[property]); - } : by - ); - let isSelected = (0, import_react35.useCallback)( - (compareValue) => match(data.mode, { - [1 /* Multi */]: () => value.some((option) => compare(option, compareValue)), - [0 /* Single */]: () => compare(value, compareValue) - }), - [value] - ); - let data = (0, import_react35.useMemo)( - () => ({ - ...state, - value, - disabled, - mode: multiple ? 1 /* Multi */ : 0 /* Single */, - orientation, - compare, - isSelected, - optionsPropsRef, - labelRef, - buttonRef, - optionsRef - }), - [value, disabled, multiple, state] - ); - useIsoMorphicEffect(() => { - state.dataRef.current = data; - }, [data]); - useOutsideClick( - [data.buttonRef, data.optionsRef], - (event, target) => { - var _a3; - dispatch({ type: 1 /* CloseListbox */ }); - if (!isFocusableElement(target, 1 /* Loose */)) { - event.preventDefault(); - (_a3 = data.buttonRef.current) == null ? void 0 : _a3.focus(); - } - }, - data.listboxState === 0 /* Open */ - ); - let slot = (0, import_react35.useMemo)( - () => ({ open: data.listboxState === 0 /* Open */, disabled, value }), - [data, disabled, value] - ); - let selectOption = useEvent((id) => { - let option = data.options.find((item) => item.id === id); - if (!option) - return; - onChange(option.dataRef.current.value); - }); - let selectActiveOption = useEvent(() => { - if (data.activeOptionIndex !== null) { - let { dataRef, id } = data.options[data.activeOptionIndex]; - onChange(dataRef.current.value); - dispatch({ type: 2 /* GoToOption */, focus: 4 /* Specific */, id }); - } - }); - let openListbox = useEvent(() => dispatch({ type: 0 /* OpenListbox */ })); - let closeListbox = useEvent(() => dispatch({ type: 1 /* CloseListbox */ })); - let goToOption = useEvent((focus, id, trigger) => { - if (focus === 4 /* Specific */) { - return dispatch({ type: 2 /* GoToOption */, focus: 4 /* Specific */, id, trigger }); - } - return dispatch({ type: 2 /* GoToOption */, focus, trigger }); - }); - let registerOption = useEvent((id, dataRef) => { - dispatch({ type: 5 /* RegisterOption */, id, dataRef }); - return () => dispatch({ type: 6 /* UnregisterOption */, id }); - }); - let registerLabel = useEvent((id) => { - dispatch({ type: 7 /* RegisterLabel */, id }); - return () => dispatch({ type: 7 /* RegisterLabel */, id: null }); - }); - let onChange = useEvent((value2) => { - return match(data.mode, { - [0 /* Single */]() { - return theirOnChange == null ? void 0 : theirOnChange(value2); - }, - [1 /* Multi */]() { - let copy = data.value.slice(); - let idx = copy.findIndex((item) => compare(item, value2)); - if (idx === -1) { - copy.push(value2); - } else { - copy.splice(idx, 1); - } - return theirOnChange == null ? void 0 : theirOnChange(copy); - } - }); - }); - let search = useEvent((value2) => dispatch({ type: 3 /* Search */, value: value2 })); - let clearSearch = useEvent(() => dispatch({ type: 4 /* ClearSearch */ })); - let actions = (0, import_react35.useMemo)( - () => ({ - onChange, - registerOption, - registerLabel, - goToOption, - closeListbox, - openListbox, - selectActiveOption, - selectOption, - search, - clearSearch - }), - [] - ); - let ourProps = { ref: listboxRef }; - let form = (0, import_react35.useRef)(null); - let d = useDisposables(); - (0, import_react35.useEffect)(() => { - if (!form.current) - return; - if (defaultValue === void 0) - return; - d.addEventListener(form.current, "reset", () => { - onChange(defaultValue); - }); - }, [ - form, - onChange - /* Explicitly ignoring `defaultValue` */ - ]); - return /* @__PURE__ */ import_react35.default.createElement(ListboxActionsContext.Provider, { value: actions }, /* @__PURE__ */ import_react35.default.createElement(ListboxDataContext.Provider, { value: data }, /* @__PURE__ */ import_react35.default.createElement( - OpenClosedProvider, - { - value: match(data.listboxState, { - [0 /* Open */]: 1 /* Open */, - [1 /* Closed */]: 2 /* Closed */ - }) - }, - name != null && value != null && objectToFormEntries({ [name]: value }).map(([name2, value2], idx) => /* @__PURE__ */ import_react35.default.createElement( - Hidden, - { - features: 4 /* Hidden */, - ref: idx === 0 ? (element) => { - var _a3; - form.current = (_a3 = element == null ? void 0 : element.closest("form")) != null ? _a3 : null; - } : void 0, - ...compact({ - key: name2, - as: "input", - type: "hidden", - hidden: true, - readOnly: true, - form: formName, - name: name2, - value: value2 - }) - } - )), - render({ ourProps, theirProps, slot, defaultTag: DEFAULT_LISTBOX_TAG, name: "Listbox" }) - ))); -} -var DEFAULT_BUTTON_TAG3 = "button"; -function ButtonFn3(props, ref) { - var _a3; - let internalId = useId(); - let { id = `headlessui-listbox-button-${internalId}`, ...theirProps } = props; - let data = useData2("Listbox.Button"); - let actions = useActions2("Listbox.Button"); - let buttonRef = useSyncRefs(data.buttonRef, ref); - let d = useDisposables(); - let handleKeyDown = useEvent((event) => { - switch (event.key) { - case " " /* Space */: - case "Enter" /* Enter */: - case "ArrowDown" /* ArrowDown */: - event.preventDefault(); - actions.openListbox(); - d.nextFrame(() => { - if (!data.value) - actions.goToOption(0 /* First */); - }); - break; - case "ArrowUp" /* ArrowUp */: - event.preventDefault(); - actions.openListbox(); - d.nextFrame(() => { - if (!data.value) - actions.goToOption(3 /* Last */); - }); - break; - } - }); - let handleKeyUp = useEvent((event) => { - switch (event.key) { - case " " /* Space */: - event.preventDefault(); - break; - } - }); - let handleClick = useEvent((event) => { - if (isDisabledReactIssue7711(event.currentTarget)) - return event.preventDefault(); - if (data.listboxState === 0 /* Open */) { - actions.closeListbox(); - d.nextFrame(() => { - var _a4; - return (_a4 = data.buttonRef.current) == null ? void 0 : _a4.focus({ preventScroll: true }); - }); - } else { - event.preventDefault(); - actions.openListbox(); - } - }); - let labelledby = useComputed(() => { - if (!data.labelId) - return void 0; - return [data.labelId, id].join(" "); - }, [data.labelId, id]); - let slot = (0, import_react35.useMemo)( - () => ({ - open: data.listboxState === 0 /* Open */, - disabled: data.disabled, - value: data.value - }), - [data] - ); - let ourProps = { - ref: buttonRef, - id, - type: useResolveButtonType(props, data.buttonRef), - "aria-haspopup": "listbox", - "aria-controls": (_a3 = data.optionsRef.current) == null ? void 0 : _a3.id, - "aria-expanded": data.disabled ? void 0 : data.listboxState === 0 /* Open */, - "aria-labelledby": labelledby, - disabled: data.disabled, - onKeyDown: handleKeyDown, - onKeyUp: handleKeyUp, - onClick: handleClick - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_BUTTON_TAG3, - name: "Listbox.Button" - }); -} -var DEFAULT_LABEL_TAG2 = "label"; -function LabelFn2(props, ref) { - let internalId = useId(); - let { id = `headlessui-listbox-label-${internalId}`, ...theirProps } = props; - let data = useData2("Listbox.Label"); - let actions = useActions2("Listbox.Label"); - let labelRef = useSyncRefs(data.labelRef, ref); - useIsoMorphicEffect(() => actions.registerLabel(id), [id]); - let handleClick = useEvent(() => { - var _a3; - return (_a3 = data.buttonRef.current) == null ? void 0 : _a3.focus({ preventScroll: true }); - }); - let slot = (0, import_react35.useMemo)( - () => ({ open: data.listboxState === 0 /* Open */, disabled: data.disabled }), - [data] - ); - let ourProps = { ref: labelRef, id, onClick: handleClick }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_LABEL_TAG2, - name: "Listbox.Label" - }); -} -var DEFAULT_OPTIONS_TAG2 = "ul"; -var OptionsRenderFeatures2 = 1 /* RenderStrategy */ | 2 /* Static */; -function OptionsFn2(props, ref) { - var _a3; - let internalId = useId(); - let { id = `headlessui-listbox-options-${internalId}`, ...theirProps } = props; - let data = useData2("Listbox.Options"); - let actions = useActions2("Listbox.Options"); - let optionsRef = useSyncRefs(data.optionsRef, ref); - let d = useDisposables(); - let searchDisposables = useDisposables(); - let usesOpenClosedState = useOpenClosed(); - let visible = (() => { - if (usesOpenClosedState !== null) { - return (usesOpenClosedState & 1 /* Open */) === 1 /* Open */; - } - return data.listboxState === 0 /* Open */; - })(); - (0, import_react35.useEffect)(() => { - var _a4; - let container = data.optionsRef.current; - if (!container) - return; - if (data.listboxState !== 0 /* Open */) - return; - if (container === ((_a4 = getOwnerDocument(container)) == null ? void 0 : _a4.activeElement)) - return; - container.focus({ preventScroll: true }); - }, [data.listboxState, data.optionsRef]); - let handleKeyDown = useEvent((event) => { - searchDisposables.dispose(); - switch (event.key) { - case " " /* Space */: - if (data.searchQuery !== "") { - event.preventDefault(); - event.stopPropagation(); - return actions.search(event.key); - } - case "Enter" /* Enter */: - event.preventDefault(); - event.stopPropagation(); - if (data.activeOptionIndex !== null) { - let { dataRef } = data.options[data.activeOptionIndex]; - actions.onChange(dataRef.current.value); - } - if (data.mode === 0 /* Single */) { - actions.closeListbox(); - disposables().nextFrame(() => { - var _a4; - return (_a4 = data.buttonRef.current) == null ? void 0 : _a4.focus({ preventScroll: true }); - }); - } - break; - case match(data.orientation, { vertical: "ArrowDown" /* ArrowDown */, horizontal: "ArrowRight" /* ArrowRight */ }): - event.preventDefault(); - event.stopPropagation(); - return actions.goToOption(2 /* Next */); - case match(data.orientation, { vertical: "ArrowUp" /* ArrowUp */, horizontal: "ArrowLeft" /* ArrowLeft */ }): - event.preventDefault(); - event.stopPropagation(); - return actions.goToOption(1 /* Previous */); - case "Home" /* Home */: - case "PageUp" /* PageUp */: - event.preventDefault(); - event.stopPropagation(); - return actions.goToOption(0 /* First */); - case "End" /* End */: - case "PageDown" /* PageDown */: - event.preventDefault(); - event.stopPropagation(); - return actions.goToOption(3 /* Last */); - case "Escape" /* Escape */: - event.preventDefault(); - event.stopPropagation(); - actions.closeListbox(); - return d.nextFrame(() => { - var _a4; - return (_a4 = data.buttonRef.current) == null ? void 0 : _a4.focus({ preventScroll: true }); - }); - case "Tab" /* Tab */: - event.preventDefault(); - event.stopPropagation(); - break; - default: - if (event.key.length === 1) { - actions.search(event.key); - searchDisposables.setTimeout(() => actions.clearSearch(), 350); - } - break; - } - }); - let labelledby = useComputed( - () => { - var _a4, _b, _c; - return (_c = (_a4 = data.labelRef.current) == null ? void 0 : _a4.id) != null ? _c : (_b = data.buttonRef.current) == null ? void 0 : _b.id; - }, - [data.labelRef.current, data.buttonRef.current] - ); - let slot = (0, import_react35.useMemo)( - () => ({ open: data.listboxState === 0 /* Open */ }), - [data] - ); - let ourProps = { - "aria-activedescendant": data.activeOptionIndex === null ? void 0 : (_a3 = data.options[data.activeOptionIndex]) == null ? void 0 : _a3.id, - "aria-multiselectable": data.mode === 1 /* Multi */ ? true : void 0, - "aria-labelledby": labelledby, - "aria-orientation": data.orientation, - id, - onKeyDown: handleKeyDown, - role: "listbox", - tabIndex: 0, - ref: optionsRef - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_OPTIONS_TAG2, - features: OptionsRenderFeatures2, - visible, - name: "Listbox.Options" - }); -} -var DEFAULT_OPTION_TAG2 = "li"; -function OptionFn2(props, ref) { - let internalId = useId(); - let { - id = `headlessui-listbox-option-${internalId}`, - disabled = false, - value, - ...theirProps - } = props; - let data = useData2("Listbox.Option"); - let actions = useActions2("Listbox.Option"); - let active = data.activeOptionIndex !== null ? data.options[data.activeOptionIndex].id === id : false; - let selected = data.isSelected(value); - let internalOptionRef = (0, import_react35.useRef)(null); - let getTextValue2 = useTextValue(internalOptionRef); - let bag = useLatestValue({ - disabled, - value, - domRef: internalOptionRef, - get textValue() { - return getTextValue2(); - } - }); - let optionRef = useSyncRefs(ref, internalOptionRef); - useIsoMorphicEffect(() => { - if (data.listboxState !== 0 /* Open */) - return; - if (!active) - return; - if (data.activationTrigger === 0 /* Pointer */) - return; - let d = disposables(); - d.requestAnimationFrame(() => { - var _a3, _b; - (_b = (_a3 = internalOptionRef.current) == null ? void 0 : _a3.scrollIntoView) == null ? void 0 : _b.call(_a3, { block: "nearest" }); - }); - return d.dispose; - }, [ - internalOptionRef, - active, - data.listboxState, - data.activationTrigger, - /* We also want to trigger this when the position of the active item changes so that we can re-trigger the scrollIntoView */ - data.activeOptionIndex - ]); - useIsoMorphicEffect(() => actions.registerOption(id, bag), [bag, id]); - let handleClick = useEvent((event) => { - if (disabled) - return event.preventDefault(); - actions.onChange(value); - if (data.mode === 0 /* Single */) { - actions.closeListbox(); - disposables().nextFrame(() => { - var _a3; - return (_a3 = data.buttonRef.current) == null ? void 0 : _a3.focus({ preventScroll: true }); - }); - } - }); - let handleFocus = useEvent(() => { - if (disabled) - return actions.goToOption(5 /* Nothing */); - actions.goToOption(4 /* Specific */, id); - }); - let pointer = useTrackedPointer(); - let handleEnter = useEvent((evt) => pointer.update(evt)); - let handleMove = useEvent((evt) => { - if (!pointer.wasMoved(evt)) - return; - if (disabled) - return; - if (active) - return; - actions.goToOption(4 /* Specific */, id, 0 /* Pointer */); - }); - let handleLeave = useEvent((evt) => { - if (!pointer.wasMoved(evt)) - return; - if (disabled) - return; - if (!active) - return; - actions.goToOption(5 /* Nothing */); - }); - let slot = (0, import_react35.useMemo)( - () => ({ active, selected, disabled }), - [active, selected, disabled] - ); - let ourProps = { - id, - ref: optionRef, - role: "option", - tabIndex: disabled === true ? void 0 : -1, - "aria-disabled": disabled === true ? true : void 0, - // According to the WAI-ARIA best practices, we should use aria-checked for - // multi-select,but Voice-Over disagrees. So we use aria-checked instead for - // both single and multi-select. - "aria-selected": selected, - disabled: void 0, - // Never forward the `disabled` prop - onClick: handleClick, - onFocus: handleFocus, - onPointerEnter: handleEnter, - onMouseEnter: handleEnter, - onPointerMove: handleMove, - onMouseMove: handleMove, - onPointerLeave: handleLeave, - onMouseLeave: handleLeave - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_OPTION_TAG2, - name: "Listbox.Option" - }); -} -var ListboxRoot = forwardRefWithAs(ListboxFn); -var Button3 = forwardRefWithAs(ButtonFn3); -var Label2 = forwardRefWithAs(LabelFn2); -var Options2 = forwardRefWithAs(OptionsFn2); -var Option2 = forwardRefWithAs(OptionFn2); -var Listbox = Object.assign(ListboxRoot, { Button: Button3, Label: Label2, Options: Options2, Option: Option2 }); - -// src/components/menu/menu.tsx -var import_react36 = __toESM(__webpack_require__(/*! react */ "react"), 1); -function adjustOrderedState3(state, adjustment = (i) => i) { - let currentActiveItem = state.activeItemIndex !== null ? state.items[state.activeItemIndex] : null; - let sortedItems = sortByDomNode( - adjustment(state.items.slice()), - (item) => item.dataRef.current.domRef.current - ); - let adjustedActiveItemIndex = currentActiveItem ? sortedItems.indexOf(currentActiveItem) : null; - if (adjustedActiveItemIndex === -1) { - adjustedActiveItemIndex = null; - } - return { - items: sortedItems, - activeItemIndex: adjustedActiveItemIndex - }; -} -var reducers5 = { - [1 /* CloseMenu */](state) { - if (state.menuState === 1 /* Closed */) - return state; - return { ...state, activeItemIndex: null, menuState: 1 /* Closed */ }; - }, - [0 /* OpenMenu */](state) { - if (state.menuState === 0 /* Open */) - return state; - return { - ...state, - /* We can turn off demo mode once we re-open the `Menu` */ - __demoMode: false, - menuState: 0 /* Open */ - }; - }, - [2 /* GoToItem */]: (state, action) => { - var _a3; - let adjustedState = adjustOrderedState3(state); - let activeItemIndex = calculateActiveIndex(action, { - resolveItems: () => adjustedState.items, - resolveActiveIndex: () => adjustedState.activeItemIndex, - resolveId: (item) => item.id, - resolveDisabled: (item) => item.dataRef.current.disabled - }); - return { - ...state, - ...adjustedState, - searchQuery: "", - activeItemIndex, - activationTrigger: (_a3 = action.trigger) != null ? _a3 : 1 /* Other */ - }; - }, - [3 /* Search */]: (state, action) => { - let wasAlreadySearching = state.searchQuery !== ""; - let offset = wasAlreadySearching ? 0 : 1; - let searchQuery = state.searchQuery + action.value.toLowerCase(); - let reOrderedItems = state.activeItemIndex !== null ? state.items.slice(state.activeItemIndex + offset).concat(state.items.slice(0, state.activeItemIndex + offset)) : state.items; - let matchingItem = reOrderedItems.find( - (item) => { - var _a3; - return ((_a3 = item.dataRef.current.textValue) == null ? void 0 : _a3.startsWith(searchQuery)) && !item.dataRef.current.disabled; - } - ); - let matchIdx = matchingItem ? state.items.indexOf(matchingItem) : -1; - if (matchIdx === -1 || matchIdx === state.activeItemIndex) - return { ...state, searchQuery }; - return { - ...state, - searchQuery, - activeItemIndex: matchIdx, - activationTrigger: 1 /* Other */ - }; - }, - [4 /* ClearSearch */](state) { - if (state.searchQuery === "") - return state; - return { ...state, searchQuery: "", searchActiveItemIndex: null }; - }, - [5 /* RegisterItem */]: (state, action) => { - let adjustedState = adjustOrderedState3(state, (items) => [ - ...items, - { id: action.id, dataRef: action.dataRef } - ]); - return { ...state, ...adjustedState }; - }, - [6 /* UnregisterItem */]: (state, action) => { - let adjustedState = adjustOrderedState3(state, (items) => { - let idx = items.findIndex((a) => a.id === action.id); - if (idx !== -1) - items.splice(idx, 1); - return items; - }); - return { - ...state, - ...adjustedState, - activationTrigger: 1 /* Other */ - }; - } -}; -var MenuContext = (0, import_react36.createContext)(null); -MenuContext.displayName = "MenuContext"; -function useMenuContext(component) { - let context = (0, import_react36.useContext)(MenuContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, useMenuContext); - throw err; - } - return context; -} -function stateReducer5(state, action) { - return match(action.type, reducers5, state, action); -} -var DEFAULT_MENU_TAG = import_react36.Fragment; -function MenuFn(props, ref) { - let { __demoMode = false, ...theirProps } = props; - let reducerBag = (0, import_react36.useReducer)(stateReducer5, { - __demoMode, - menuState: __demoMode ? 0 /* Open */ : 1 /* Closed */, - buttonRef: (0, import_react36.createRef)(), - itemsRef: (0, import_react36.createRef)(), - items: [], - searchQuery: "", - activeItemIndex: null, - activationTrigger: 1 /* Other */ - }); - let [{ menuState, itemsRef, buttonRef }, dispatch] = reducerBag; - let menuRef = useSyncRefs(ref); - useOutsideClick( - [buttonRef, itemsRef], - (event, target) => { - var _a3; - dispatch({ type: 1 /* CloseMenu */ }); - if (!isFocusableElement(target, 1 /* Loose */)) { - event.preventDefault(); - (_a3 = buttonRef.current) == null ? void 0 : _a3.focus(); - } - }, - menuState === 0 /* Open */ - ); - let close = useEvent(() => { - dispatch({ type: 1 /* CloseMenu */ }); - }); - let slot = (0, import_react36.useMemo)( - () => ({ open: menuState === 0 /* Open */, close }), - [menuState, close] - ); - let ourProps = { ref: menuRef }; - return /* @__PURE__ */ import_react36.default.createElement(MenuContext.Provider, { value: reducerBag }, /* @__PURE__ */ import_react36.default.createElement( - OpenClosedProvider, - { - value: match(menuState, { - [0 /* Open */]: 1 /* Open */, - [1 /* Closed */]: 2 /* Closed */ - }) - }, - render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_MENU_TAG, - name: "Menu" - }) - )); -} -var DEFAULT_BUTTON_TAG4 = "button"; -function ButtonFn4(props, ref) { - var _a3; - let internalId = useId(); - let { id = `headlessui-menu-button-${internalId}`, ...theirProps } = props; - let [state, dispatch] = useMenuContext("Menu.Button"); - let buttonRef = useSyncRefs(state.buttonRef, ref); - let d = useDisposables(); - let handleKeyDown = useEvent((event) => { - switch (event.key) { - case " " /* Space */: - case "Enter" /* Enter */: - case "ArrowDown" /* ArrowDown */: - event.preventDefault(); - event.stopPropagation(); - dispatch({ type: 0 /* OpenMenu */ }); - d.nextFrame(() => dispatch({ type: 2 /* GoToItem */, focus: 0 /* First */ })); - break; - case "ArrowUp" /* ArrowUp */: - event.preventDefault(); - event.stopPropagation(); - dispatch({ type: 0 /* OpenMenu */ }); - d.nextFrame(() => dispatch({ type: 2 /* GoToItem */, focus: 3 /* Last */ })); - break; - } - }); - let handleKeyUp = useEvent((event) => { - switch (event.key) { - case " " /* Space */: - event.preventDefault(); - break; - } - }); - let handleClick = useEvent((event) => { - if (isDisabledReactIssue7711(event.currentTarget)) - return event.preventDefault(); - if (props.disabled) - return; - if (state.menuState === 0 /* Open */) { - dispatch({ type: 1 /* CloseMenu */ }); - d.nextFrame(() => { - var _a4; - return (_a4 = state.buttonRef.current) == null ? void 0 : _a4.focus({ preventScroll: true }); - }); - } else { - event.preventDefault(); - dispatch({ type: 0 /* OpenMenu */ }); - } - }); - let slot = (0, import_react36.useMemo)( - () => ({ open: state.menuState === 0 /* Open */ }), - [state] - ); - let ourProps = { - ref: buttonRef, - id, - type: useResolveButtonType(props, state.buttonRef), - "aria-haspopup": "menu", - "aria-controls": (_a3 = state.itemsRef.current) == null ? void 0 : _a3.id, - "aria-expanded": props.disabled ? void 0 : state.menuState === 0 /* Open */, - onKeyDown: handleKeyDown, - onKeyUp: handleKeyUp, - onClick: handleClick - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_BUTTON_TAG4, - name: "Menu.Button" - }); -} -var DEFAULT_ITEMS_TAG = "div"; -var ItemsRenderFeatures = 1 /* RenderStrategy */ | 2 /* Static */; -function ItemsFn(props, ref) { - var _a3, _b; - let internalId = useId(); - let { id = `headlessui-menu-items-${internalId}`, ...theirProps } = props; - let [state, dispatch] = useMenuContext("Menu.Items"); - let itemsRef = useSyncRefs(state.itemsRef, ref); - let ownerDocument = useOwnerDocument(state.itemsRef); - let searchDisposables = useDisposables(); - let usesOpenClosedState = useOpenClosed(); - let visible = (() => { - if (usesOpenClosedState !== null) { - return (usesOpenClosedState & 1 /* Open */) === 1 /* Open */; - } - return state.menuState === 0 /* Open */; - })(); - (0, import_react36.useEffect)(() => { - let container = state.itemsRef.current; - if (!container) - return; - if (state.menuState !== 0 /* Open */) - return; - if (container === (ownerDocument == null ? void 0 : ownerDocument.activeElement)) - return; - container.focus({ preventScroll: true }); - }, [state.menuState, state.itemsRef, ownerDocument]); - useTreeWalker({ - container: state.itemsRef.current, - enabled: state.menuState === 0 /* Open */, - accept(node) { - if (node.getAttribute("role") === "menuitem") - return NodeFilter.FILTER_REJECT; - if (node.hasAttribute("role")) - return NodeFilter.FILTER_SKIP; - return NodeFilter.FILTER_ACCEPT; - }, - walk(node) { - node.setAttribute("role", "none"); - } - }); - let handleKeyDown = useEvent((event) => { - var _a4, _b2; - searchDisposables.dispose(); - switch (event.key) { - case " " /* Space */: - if (state.searchQuery !== "") { - event.preventDefault(); - event.stopPropagation(); - return dispatch({ type: 3 /* Search */, value: event.key }); - } - case "Enter" /* Enter */: - event.preventDefault(); - event.stopPropagation(); - dispatch({ type: 1 /* CloseMenu */ }); - if (state.activeItemIndex !== null) { - let { dataRef } = state.items[state.activeItemIndex]; - (_b2 = (_a4 = dataRef.current) == null ? void 0 : _a4.domRef.current) == null ? void 0 : _b2.click(); - } - restoreFocusIfNecessary(state.buttonRef.current); - break; - case "ArrowDown" /* ArrowDown */: - event.preventDefault(); - event.stopPropagation(); - return dispatch({ type: 2 /* GoToItem */, focus: 2 /* Next */ }); - case "ArrowUp" /* ArrowUp */: - event.preventDefault(); - event.stopPropagation(); - return dispatch({ type: 2 /* GoToItem */, focus: 1 /* Previous */ }); - case "Home" /* Home */: - case "PageUp" /* PageUp */: - event.preventDefault(); - event.stopPropagation(); - return dispatch({ type: 2 /* GoToItem */, focus: 0 /* First */ }); - case "End" /* End */: - case "PageDown" /* PageDown */: - event.preventDefault(); - event.stopPropagation(); - return dispatch({ type: 2 /* GoToItem */, focus: 3 /* Last */ }); - case "Escape" /* Escape */: - event.preventDefault(); - event.stopPropagation(); - dispatch({ type: 1 /* CloseMenu */ }); - disposables().nextFrame(() => { - var _a5; - return (_a5 = state.buttonRef.current) == null ? void 0 : _a5.focus({ preventScroll: true }); - }); - break; - case "Tab" /* Tab */: - event.preventDefault(); - event.stopPropagation(); - dispatch({ type: 1 /* CloseMenu */ }); - disposables().nextFrame(() => { - focusFrom( - state.buttonRef.current, - event.shiftKey ? 2 /* Previous */ : 4 /* Next */ - ); - }); - break; - default: - if (event.key.length === 1) { - dispatch({ type: 3 /* Search */, value: event.key }); - searchDisposables.setTimeout(() => dispatch({ type: 4 /* ClearSearch */ }), 350); - } - break; - } - }); - let handleKeyUp = useEvent((event) => { - switch (event.key) { - case " " /* Space */: - event.preventDefault(); - break; - } - }); - let slot = (0, import_react36.useMemo)( - () => ({ open: state.menuState === 0 /* Open */ }), - [state] - ); - let ourProps = { - "aria-activedescendant": state.activeItemIndex === null ? void 0 : (_a3 = state.items[state.activeItemIndex]) == null ? void 0 : _a3.id, - "aria-labelledby": (_b = state.buttonRef.current) == null ? void 0 : _b.id, - id, - onKeyDown: handleKeyDown, - onKeyUp: handleKeyUp, - role: "menu", - tabIndex: 0, - ref: itemsRef - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_ITEMS_TAG, - features: ItemsRenderFeatures, - visible, - name: "Menu.Items" - }); -} -var DEFAULT_ITEM_TAG = import_react36.Fragment; -function ItemFn(props, ref) { - let internalId = useId(); - let { id = `headlessui-menu-item-${internalId}`, disabled = false, ...theirProps } = props; - let [state, dispatch] = useMenuContext("Menu.Item"); - let active = state.activeItemIndex !== null ? state.items[state.activeItemIndex].id === id : false; - let internalItemRef = (0, import_react36.useRef)(null); - let itemRef = useSyncRefs(ref, internalItemRef); - useIsoMorphicEffect(() => { - if (state.__demoMode) - return; - if (state.menuState !== 0 /* Open */) - return; - if (!active) - return; - if (state.activationTrigger === 0 /* Pointer */) - return; - let d = disposables(); - d.requestAnimationFrame(() => { - var _a3, _b; - (_b = (_a3 = internalItemRef.current) == null ? void 0 : _a3.scrollIntoView) == null ? void 0 : _b.call(_a3, { block: "nearest" }); - }); - return d.dispose; - }, [ - state.__demoMode, - internalItemRef, - active, - state.menuState, - state.activationTrigger, - /* We also want to trigger this when the position of the active item changes so that we can re-trigger the scrollIntoView */ - state.activeItemIndex - ]); - let getTextValue2 = useTextValue(internalItemRef); - let bag = (0, import_react36.useRef)({ - disabled, - domRef: internalItemRef, - get textValue() { - return getTextValue2(); - } - }); - useIsoMorphicEffect(() => { - bag.current.disabled = disabled; - }, [bag, disabled]); - useIsoMorphicEffect(() => { - dispatch({ type: 5 /* RegisterItem */, id, dataRef: bag }); - return () => dispatch({ type: 6 /* UnregisterItem */, id }); - }, [bag, id]); - let close = useEvent(() => { - dispatch({ type: 1 /* CloseMenu */ }); - }); - let handleClick = useEvent((event) => { - if (disabled) - return event.preventDefault(); - dispatch({ type: 1 /* CloseMenu */ }); - restoreFocusIfNecessary(state.buttonRef.current); - }); - let handleFocus = useEvent(() => { - if (disabled) - return dispatch({ type: 2 /* GoToItem */, focus: 5 /* Nothing */ }); - dispatch({ type: 2 /* GoToItem */, focus: 4 /* Specific */, id }); - }); - let pointer = useTrackedPointer(); - let handleEnter = useEvent((evt) => pointer.update(evt)); - let handleMove = useEvent((evt) => { - if (!pointer.wasMoved(evt)) - return; - if (disabled) - return; - if (active) - return; - dispatch({ - type: 2 /* GoToItem */, - focus: 4 /* Specific */, - id, - trigger: 0 /* Pointer */ - }); - }); - let handleLeave = useEvent((evt) => { - if (!pointer.wasMoved(evt)) - return; - if (disabled) - return; - if (!active) - return; - dispatch({ type: 2 /* GoToItem */, focus: 5 /* Nothing */ }); - }); - let slot = (0, import_react36.useMemo)( - () => ({ active, disabled, close }), - [active, disabled, close] - ); - let ourProps = { - id, - ref: itemRef, - role: "menuitem", - tabIndex: disabled === true ? void 0 : -1, - "aria-disabled": disabled === true ? true : void 0, - disabled: void 0, - // Never forward the `disabled` prop - onClick: handleClick, - onFocus: handleFocus, - onPointerEnter: handleEnter, - onMouseEnter: handleEnter, - onPointerMove: handleMove, - onMouseMove: handleMove, - onPointerLeave: handleLeave, - onMouseLeave: handleLeave - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_ITEM_TAG, - name: "Menu.Item" - }); -} -var MenuRoot = forwardRefWithAs(MenuFn); -var Button4 = forwardRefWithAs(ButtonFn4); -var Items = forwardRefWithAs(ItemsFn); -var Item = forwardRefWithAs(ItemFn); -var Menu = Object.assign(MenuRoot, { Button: Button4, Items, Item }); - -// src/components/popover/popover.tsx -var import_react37 = __toESM(__webpack_require__(/*! react */ "react"), 1); -var reducers6 = { - [0 /* TogglePopover */]: (state) => { - let nextState = { - ...state, - popoverState: match(state.popoverState, { - [0 /* Open */]: 1 /* Closed */, - [1 /* Closed */]: 0 /* Open */ - }) - }; - if (nextState.popoverState === 0 /* Open */) { - nextState.__demoMode = false; - } - return nextState; - }, - [1 /* ClosePopover */](state) { - if (state.popoverState === 1 /* Closed */) - return state; - return { ...state, popoverState: 1 /* Closed */ }; - }, - [2 /* SetButton */](state, action) { - if (state.button === action.button) - return state; - return { ...state, button: action.button }; - }, - [3 /* SetButtonId */](state, action) { - if (state.buttonId === action.buttonId) - return state; - return { ...state, buttonId: action.buttonId }; - }, - [4 /* SetPanel */](state, action) { - if (state.panel === action.panel) - return state; - return { ...state, panel: action.panel }; - }, - [5 /* SetPanelId */](state, action) { - if (state.panelId === action.panelId) - return state; - return { ...state, panelId: action.panelId }; - } -}; -var PopoverContext = (0, import_react37.createContext)(null); -PopoverContext.displayName = "PopoverContext"; -function usePopoverContext(component) { - let context = (0, import_react37.useContext)(PopoverContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, usePopoverContext); - throw err; - } - return context; -} -var PopoverAPIContext = (0, import_react37.createContext)(null); -PopoverAPIContext.displayName = "PopoverAPIContext"; -function usePopoverAPIContext(component) { - let context = (0, import_react37.useContext)(PopoverAPIContext); - if (context === null) { - let err = new Error(`<${component} /> is missing a parent component.`); - if (Error.captureStackTrace) - Error.captureStackTrace(err, usePopoverAPIContext); - throw err; - } - return context; -} -var PopoverGroupContext = (0, import_react37.createContext)(null); -PopoverGroupContext.displayName = "PopoverGroupContext"; -function usePopoverGroupContext() { - return (0, import_react37.useContext)(PopoverGroupContext); -} -var PopoverPanelContext = (0, import_react37.createContext)(null); -PopoverPanelContext.displayName = "PopoverPanelContext"; -function usePopoverPanelContext() { - return (0, import_react37.useContext)(PopoverPanelContext); -} -function stateReducer6(state, action) { - return match(action.type, reducers6, state, action); -} -var DEFAULT_POPOVER_TAG = "div"; -function PopoverFn(props, ref) { - var _a3; - let { __demoMode = false, ...theirProps } = props; - let internalPopoverRef = (0, import_react37.useRef)(null); - let popoverRef = useSyncRefs( - ref, - optionalRef((ref2) => { - internalPopoverRef.current = ref2; - }) - ); - let buttons = (0, import_react37.useRef)([]); - let reducerBag = (0, import_react37.useReducer)(stateReducer6, { - __demoMode, - popoverState: __demoMode ? 0 /* Open */ : 1 /* Closed */, - buttons, - button: null, - buttonId: null, - panel: null, - panelId: null, - beforePanelSentinel: (0, import_react37.createRef)(), - afterPanelSentinel: (0, import_react37.createRef)() - }); - let [ - { popoverState, button, buttonId, panel, panelId, beforePanelSentinel, afterPanelSentinel }, - dispatch - ] = reducerBag; - let ownerDocument = useOwnerDocument((_a3 = internalPopoverRef.current) != null ? _a3 : button); - let isPortalled = (0, import_react37.useMemo)(() => { - if (!button) - return false; - if (!panel) - return false; - for (let root2 of document.querySelectorAll("body > *")) { - if (Number(root2 == null ? void 0 : root2.contains(button)) ^ Number(root2 == null ? void 0 : root2.contains(panel))) { - return true; - } - } - let elements = getFocusableElements(); - let buttonIdx = elements.indexOf(button); - let beforeIdx = (buttonIdx + elements.length - 1) % elements.length; - let afterIdx = (buttonIdx + 1) % elements.length; - let beforeElement = elements[beforeIdx]; - let afterElement = elements[afterIdx]; - if (!panel.contains(beforeElement) && !panel.contains(afterElement)) { - return true; - } - return false; - }, [button, panel]); - let buttonIdRef = useLatestValue(buttonId); - let panelIdRef = useLatestValue(panelId); - let registerBag = (0, import_react37.useMemo)( - () => ({ - buttonId: buttonIdRef, - panelId: panelIdRef, - close: () => dispatch({ type: 1 /* ClosePopover */ }) - }), - [buttonIdRef, panelIdRef, dispatch] - ); - let groupContext = usePopoverGroupContext(); - let registerPopover = groupContext == null ? void 0 : groupContext.registerPopover; - let isFocusWithinPopoverGroup = useEvent(() => { - var _a4; - return (_a4 = groupContext == null ? void 0 : groupContext.isFocusWithinPopoverGroup()) != null ? _a4 : (ownerDocument == null ? void 0 : ownerDocument.activeElement) && ((button == null ? void 0 : button.contains(ownerDocument.activeElement)) || (panel == null ? void 0 : panel.contains(ownerDocument.activeElement))); - }); - (0, import_react37.useEffect)(() => registerPopover == null ? void 0 : registerPopover(registerBag), [registerPopover, registerBag]); - let [portals, PortalWrapper] = useNestedPortals(); - let root = useRootContainers({ - portals, - defaultContainers: [button, panel] - }); - useEventListener( - ownerDocument == null ? void 0 : ownerDocument.defaultView, - "focus", - (event) => { - var _a4, _b, _c, _d; - if (event.target === window) - return; - if (!(event.target instanceof HTMLElement)) - return; - if (popoverState !== 0 /* Open */) - return; - if (isFocusWithinPopoverGroup()) - return; - if (!button) - return; - if (!panel) - return; - if (root.contains(event.target)) - return; - if ((_b = (_a4 = beforePanelSentinel.current) == null ? void 0 : _a4.contains) == null ? void 0 : _b.call(_a4, event.target)) - return; - if ((_d = (_c = afterPanelSentinel.current) == null ? void 0 : _c.contains) == null ? void 0 : _d.call(_c, event.target)) - return; - dispatch({ type: 1 /* ClosePopover */ }); - }, - true - ); - useOutsideClick( - root.resolveContainers, - (event, target) => { - dispatch({ type: 1 /* ClosePopover */ }); - if (!isFocusableElement(target, 1 /* Loose */)) { - event.preventDefault(); - button == null ? void 0 : button.focus(); - } - }, - popoverState === 0 /* Open */ - ); - let close = useEvent( - (focusableElement) => { - dispatch({ type: 1 /* ClosePopover */ }); - let restoreElement = (() => { - if (!focusableElement) - return button; - if (focusableElement instanceof HTMLElement) - return focusableElement; - if ("current" in focusableElement && focusableElement.current instanceof HTMLElement) - return focusableElement.current; - return button; - })(); - restoreElement == null ? void 0 : restoreElement.focus(); - } - ); - let api = (0, import_react37.useMemo)( - () => ({ close, isPortalled }), - [close, isPortalled] - ); - let slot = (0, import_react37.useMemo)( - () => ({ open: popoverState === 0 /* Open */, close }), - [popoverState, close] - ); - let ourProps = { ref: popoverRef }; - return /* @__PURE__ */ import_react37.default.createElement(PopoverPanelContext.Provider, { value: null }, /* @__PURE__ */ import_react37.default.createElement(PopoverContext.Provider, { value: reducerBag }, /* @__PURE__ */ import_react37.default.createElement(PopoverAPIContext.Provider, { value: api }, /* @__PURE__ */ import_react37.default.createElement( - OpenClosedProvider, - { - value: match(popoverState, { - [0 /* Open */]: 1 /* Open */, - [1 /* Closed */]: 2 /* Closed */ - }) - }, - /* @__PURE__ */ import_react37.default.createElement(PortalWrapper, null, render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_POPOVER_TAG, - name: "Popover" - }), /* @__PURE__ */ import_react37.default.createElement(root.MainTreeNode, null)) - )))); -} -var DEFAULT_BUTTON_TAG5 = "button"; -function ButtonFn5(props, ref) { - let internalId = useId(); - let { id = `headlessui-popover-button-${internalId}`, ...theirProps } = props; - let [state, dispatch] = usePopoverContext("Popover.Button"); - let { isPortalled } = usePopoverAPIContext("Popover.Button"); - let internalButtonRef = (0, import_react37.useRef)(null); - let sentinelId = `headlessui-focus-sentinel-${useId()}`; - let groupContext = usePopoverGroupContext(); - let closeOthers = groupContext == null ? void 0 : groupContext.closeOthers; - let panelContext = usePopoverPanelContext(); - let isWithinPanel = panelContext !== null; - (0, import_react37.useEffect)(() => { - if (isWithinPanel) - return; - dispatch({ type: 3 /* SetButtonId */, buttonId: id }); - return () => { - dispatch({ type: 3 /* SetButtonId */, buttonId: null }); - }; - }, [isWithinPanel, id, dispatch]); - let [uniqueIdentifier] = (0, import_react37.useState)(() => Symbol()); - let buttonRef = useSyncRefs( - internalButtonRef, - ref, - isWithinPanel ? null : (button) => { - if (button) { - state.buttons.current.push(uniqueIdentifier); - } else { - let idx = state.buttons.current.indexOf(uniqueIdentifier); - if (idx !== -1) - state.buttons.current.splice(idx, 1); - } - if (state.buttons.current.length > 1) { - console.warn( - "You are already using a but only 1 is supported." - ); - } - button && dispatch({ type: 2 /* SetButton */, button }); - } - ); - let withinPanelButtonRef = useSyncRefs(internalButtonRef, ref); - let ownerDocument = useOwnerDocument(internalButtonRef); - let handleKeyDown = useEvent((event) => { - var _a3, _b, _c; - if (isWithinPanel) { - if (state.popoverState === 1 /* Closed */) - return; - switch (event.key) { - case " " /* Space */: - case "Enter" /* Enter */: - event.preventDefault(); - (_b = (_a3 = event.target).click) == null ? void 0 : _b.call(_a3); - dispatch({ type: 1 /* ClosePopover */ }); - (_c = state.button) == null ? void 0 : _c.focus(); - break; - } - } else { - switch (event.key) { - case " " /* Space */: - case "Enter" /* Enter */: - event.preventDefault(); - event.stopPropagation(); - if (state.popoverState === 1 /* Closed */) - closeOthers == null ? void 0 : closeOthers(state.buttonId); - dispatch({ type: 0 /* TogglePopover */ }); - break; - case "Escape" /* Escape */: - if (state.popoverState !== 0 /* Open */) - return closeOthers == null ? void 0 : closeOthers(state.buttonId); - if (!internalButtonRef.current) - return; - if ((ownerDocument == null ? void 0 : ownerDocument.activeElement) && !internalButtonRef.current.contains(ownerDocument.activeElement)) { - return; - } - event.preventDefault(); - event.stopPropagation(); - dispatch({ type: 1 /* ClosePopover */ }); - break; - } - } - }); - let handleKeyUp = useEvent((event) => { - if (isWithinPanel) - return; - if (event.key === " " /* Space */) { - event.preventDefault(); - } - }); - let handleClick = useEvent((event) => { - var _a3, _b; - if (isDisabledReactIssue7711(event.currentTarget)) - return; - if (props.disabled) - return; - if (isWithinPanel) { - dispatch({ type: 1 /* ClosePopover */ }); - (_a3 = state.button) == null ? void 0 : _a3.focus(); - } else { - event.preventDefault(); - event.stopPropagation(); - if (state.popoverState === 1 /* Closed */) - closeOthers == null ? void 0 : closeOthers(state.buttonId); - dispatch({ type: 0 /* TogglePopover */ }); - (_b = state.button) == null ? void 0 : _b.focus(); - } - }); - let handleMouseDown = useEvent((event) => { - event.preventDefault(); - event.stopPropagation(); - }); - let visible = state.popoverState === 0 /* Open */; - let slot = (0, import_react37.useMemo)(() => ({ open: visible }), [visible]); - let type = useResolveButtonType(props, internalButtonRef); - let ourProps = isWithinPanel ? { - ref: withinPanelButtonRef, - type, - onKeyDown: handleKeyDown, - onClick: handleClick - } : { - ref: buttonRef, - id: state.buttonId, - type, - "aria-expanded": props.disabled ? void 0 : state.popoverState === 0 /* Open */, - "aria-controls": state.panel ? state.panelId : void 0, - onKeyDown: handleKeyDown, - onKeyUp: handleKeyUp, - onClick: handleClick, - onMouseDown: handleMouseDown - }; - let direction = useTabDirection(); - let handleFocus = useEvent(() => { - let el = state.panel; - if (!el) - return; - function run() { - let result = match(direction.current, { - [0 /* Forwards */]: () => focusIn(el, 1 /* First */), - [1 /* Backwards */]: () => focusIn(el, 8 /* Last */) - }); - if (result === 0 /* Error */) { - focusIn( - getFocusableElements().filter((el2) => el2.dataset.headlessuiFocusGuard !== "true"), - match(direction.current, { - [0 /* Forwards */]: 4 /* Next */, - [1 /* Backwards */]: 2 /* Previous */ - }), - { relativeTo: state.button } - ); - } - } - if (false) {} else { - run(); - } - }); - return /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_BUTTON_TAG5, - name: "Popover.Button" - }), visible && !isWithinPanel && isPortalled && /* @__PURE__ */ import_react37.default.createElement( - Hidden, - { - id: sentinelId, - features: 2 /* Focusable */, - "data-headlessui-focus-guard": true, - as: "button", - type: "button", - onFocus: handleFocus - } - )); -} -var DEFAULT_OVERLAY_TAG2 = "div"; -var OverlayRenderFeatures = 1 /* RenderStrategy */ | 2 /* Static */; -function OverlayFn2(props, ref) { - let internalId = useId(); - let { id = `headlessui-popover-overlay-${internalId}`, ...theirProps } = props; - let [{ popoverState }, dispatch] = usePopoverContext("Popover.Overlay"); - let overlayRef = useSyncRefs(ref); - let usesOpenClosedState = useOpenClosed(); - let visible = (() => { - if (usesOpenClosedState !== null) { - return (usesOpenClosedState & 1 /* Open */) === 1 /* Open */; - } - return popoverState === 0 /* Open */; - })(); - let handleClick = useEvent((event) => { - if (isDisabledReactIssue7711(event.currentTarget)) - return event.preventDefault(); - dispatch({ type: 1 /* ClosePopover */ }); - }); - let slot = (0, import_react37.useMemo)( - () => ({ open: popoverState === 0 /* Open */ }), - [popoverState] - ); - let ourProps = { - ref: overlayRef, - id, - "aria-hidden": true, - onClick: handleClick - }; - return render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_OVERLAY_TAG2, - features: OverlayRenderFeatures, - visible, - name: "Popover.Overlay" - }); -} -var DEFAULT_PANEL_TAG3 = "div"; -var PanelRenderFeatures2 = 1 /* RenderStrategy */ | 2 /* Static */; -function PanelFn3(props, ref) { - let internalId = useId(); - let { id = `headlessui-popover-panel-${internalId}`, focus = false, ...theirProps } = props; - let [state, dispatch] = usePopoverContext("Popover.Panel"); - let { close, isPortalled } = usePopoverAPIContext("Popover.Panel"); - let beforePanelSentinelId = `headlessui-focus-sentinel-before-${useId()}`; - let afterPanelSentinelId = `headlessui-focus-sentinel-after-${useId()}`; - let internalPanelRef = (0, import_react37.useRef)(null); - let panelRef = useSyncRefs(internalPanelRef, ref, (panel) => { - dispatch({ type: 4 /* SetPanel */, panel }); - }); - let ownerDocument = useOwnerDocument(internalPanelRef); - useIsoMorphicEffect(() => { - dispatch({ type: 5 /* SetPanelId */, panelId: id }); - return () => { - dispatch({ type: 5 /* SetPanelId */, panelId: null }); - }; - }, [id, dispatch]); - let usesOpenClosedState = useOpenClosed(); - let visible = (() => { - if (usesOpenClosedState !== null) { - return (usesOpenClosedState & 1 /* Open */) === 1 /* Open */; - } - return state.popoverState === 0 /* Open */; - })(); - let handleKeyDown = useEvent((event) => { - var _a3; - switch (event.key) { - case "Escape" /* Escape */: - if (state.popoverState !== 0 /* Open */) - return; - if (!internalPanelRef.current) - return; - if ((ownerDocument == null ? void 0 : ownerDocument.activeElement) && !internalPanelRef.current.contains(ownerDocument.activeElement)) { - return; - } - event.preventDefault(); - event.stopPropagation(); - dispatch({ type: 1 /* ClosePopover */ }); - (_a3 = state.button) == null ? void 0 : _a3.focus(); - break; - } - }); - (0, import_react37.useEffect)(() => { - var _a3; - if (props.static) - return; - if (state.popoverState === 1 /* Closed */ && ((_a3 = props.unmount) != null ? _a3 : true)) { - dispatch({ type: 4 /* SetPanel */, panel: null }); - } - }, [state.popoverState, props.unmount, props.static, dispatch]); - (0, import_react37.useEffect)(() => { - if (state.__demoMode) - return; - if (!focus) - return; - if (state.popoverState !== 0 /* Open */) - return; - if (!internalPanelRef.current) - return; - let activeElement = ownerDocument == null ? void 0 : ownerDocument.activeElement; - if (internalPanelRef.current.contains(activeElement)) - return; - focusIn(internalPanelRef.current, 1 /* First */); - }, [state.__demoMode, focus, internalPanelRef, state.popoverState]); - let slot = (0, import_react37.useMemo)( - () => ({ open: state.popoverState === 0 /* Open */, close }), - [state, close] - ); - let ourProps = { - ref: panelRef, - id, - onKeyDown: handleKeyDown, - onBlur: focus && state.popoverState === 0 /* Open */ ? (event) => { - var _a3, _b, _c, _d, _e; - let el = event.relatedTarget; - if (!el) - return; - if (!internalPanelRef.current) - return; - if ((_a3 = internalPanelRef.current) == null ? void 0 : _a3.contains(el)) - return; - dispatch({ type: 1 /* ClosePopover */ }); - if (((_c = (_b = state.beforePanelSentinel.current) == null ? void 0 : _b.contains) == null ? void 0 : _c.call(_b, el)) || ((_e = (_d = state.afterPanelSentinel.current) == null ? void 0 : _d.contains) == null ? void 0 : _e.call(_d, el))) { - el.focus({ preventScroll: true }); - } - } : void 0, - tabIndex: -1 - }; - let direction = useTabDirection(); - let handleBeforeFocus = useEvent(() => { - let el = internalPanelRef.current; - if (!el) - return; - function run() { - match(direction.current, { - [0 /* Forwards */]: () => { - var _a3; - let result = focusIn(el, 1 /* First */); - if (result === 0 /* Error */) { - (_a3 = state.afterPanelSentinel.current) == null ? void 0 : _a3.focus(); - } - }, - [1 /* Backwards */]: () => { - var _a3; - (_a3 = state.button) == null ? void 0 : _a3.focus({ preventScroll: true }); - } - }); - } - if (false) {} else { - run(); - } - }); - let handleAfterFocus = useEvent(() => { - let el = internalPanelRef.current; - if (!el) - return; - function run() { - match(direction.current, { - [0 /* Forwards */]: () => { - var _a3; - if (!state.button) - return; - let elements = getFocusableElements(); - let idx = elements.indexOf(state.button); - let before = elements.slice(0, idx + 1); - let after = elements.slice(idx + 1); - let combined = [...after, ...before]; - for (let element of combined.slice()) { - if (element.dataset.headlessuiFocusGuard === "true" || ((_a3 = state.panel) == null ? void 0 : _a3.contains(element))) { - let idx2 = combined.indexOf(element); - if (idx2 !== -1) - combined.splice(idx2, 1); - } - } - focusIn(combined, 1 /* First */, { sorted: false }); - }, - [1 /* Backwards */]: () => { - var _a3; - let result = focusIn(el, 2 /* Previous */); - if (result === 0 /* Error */) { - (_a3 = state.button) == null ? void 0 : _a3.focus(); - } - } - }); - } - if (false) {} else { - run(); - } - }); - return /* @__PURE__ */ import_react37.default.createElement(PopoverPanelContext.Provider, { value: id }, visible && isPortalled && /* @__PURE__ */ import_react37.default.createElement( - Hidden, - { - id: beforePanelSentinelId, - ref: state.beforePanelSentinel, - features: 2 /* Focusable */, - "data-headlessui-focus-guard": true, - as: "button", - type: "button", - onFocus: handleBeforeFocus - } - ), render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_PANEL_TAG3, - features: PanelRenderFeatures2, - visible, - name: "Popover.Panel" - }), visible && isPortalled && /* @__PURE__ */ import_react37.default.createElement( - Hidden, - { - id: afterPanelSentinelId, - ref: state.afterPanelSentinel, - features: 2 /* Focusable */, - "data-headlessui-focus-guard": true, - as: "button", - type: "button", - onFocus: handleAfterFocus - } - )); -} -var DEFAULT_GROUP_TAG2 = "div"; -function GroupFn2(props, ref) { - let internalGroupRef = (0, import_react37.useRef)(null); - let groupRef = useSyncRefs(internalGroupRef, ref); - let [popovers, setPopovers] = (0, import_react37.useState)([]); - let unregisterPopover = useEvent((registerbag) => { - setPopovers((existing) => { - let idx = existing.indexOf(registerbag); - if (idx !== -1) { - let clone = existing.slice(); - clone.splice(idx, 1); - return clone; - } - return existing; - }); - }); - let registerPopover = useEvent((registerbag) => { - setPopovers((existing) => [...existing, registerbag]); - return () => unregisterPopover(registerbag); - }); - let isFocusWithinPopoverGroup = useEvent(() => { - var _a3; - let ownerDocument = getOwnerDocument(internalGroupRef); - if (!ownerDocument) - return false; - let element = ownerDocument.activeElement; - if ((_a3 = internalGroupRef.current) == null ? void 0 : _a3.contains(element)) - return true; - return popovers.some((bag) => { - var _a4, _b; - return ((_a4 = ownerDocument.getElementById(bag.buttonId.current)) == null ? void 0 : _a4.contains(element)) || ((_b = ownerDocument.getElementById(bag.panelId.current)) == null ? void 0 : _b.contains(element)); - }); - }); - let closeOthers = useEvent((buttonId) => { - for (let popover of popovers) { - if (popover.buttonId.current !== buttonId) - popover.close(); - } - }); - let contextBag = (0, import_react37.useMemo)( - () => ({ - registerPopover, - unregisterPopover, - isFocusWithinPopoverGroup, - closeOthers - }), - [registerPopover, unregisterPopover, isFocusWithinPopoverGroup, closeOthers] - ); - let slot = (0, import_react37.useMemo)(() => ({}), []); - let theirProps = props; - let ourProps = { ref: groupRef }; - return /* @__PURE__ */ import_react37.default.createElement(PopoverGroupContext.Provider, { value: contextBag }, render({ - ourProps, - theirProps, - slot, - defaultTag: DEFAULT_GROUP_TAG2, - name: "Popover.Group" - })); -} -var PopoverRoot = forwardRefWithAs(PopoverFn); -var Button5 = forwardRefWithAs(ButtonFn5); -var Overlay2 = forwardRefWithAs(OverlayFn2); -var Panel3 = forwardRefWithAs(PanelFn3); -var Group2 = forwardRefWithAs(GroupFn2); -var Popover = Object.assign(PopoverRoot, { Button: Button5, Overlay: Overlay2, Panel: Panel3, Group: Group2 }); - -// src/components/radio-group/radio-group.tsx -var import_react40 = __toESM(__webpack_require__(/*! react */ "react"), 1); - -// src/hooks/use-flags.ts -var import_react38 = __webpack_require__(/*! react */ "react"); -function useFlags(initialFlags = 0) { - let [flags, setFlags] = (0, import_react38.useState)(initialFlags); - let mounted = useIsMounted(); - let addFlag = (0, import_react38.useCallback)( - (flag) => { - if (!mounted.current) - return; - setFlags((flags2) => flags2 | flag); - }, - [flags, mounted] - ); - let hasFlag = (0, import_react38.useCallback)((flag) => Boolean(flags & flag), [flags]); - let removeFlag = (0, import_react38.useCallback)( - (flag) => { - if (!mounted.current) - return; - setFlags((flags2) => flags2 & ~flag); - }, - [setFlags, mounted] - ); - let toggleFlag = (0, import_react38.useCallback)( - (flag) => { - if (!mounted.current) - return; - setFlags((flags2) => flags2 ^ flag); - }, - [setFlags] - ); - return { flags, addFlag, hasFlag, removeFlag, toggleFlag }; -} - -// src/components/label/label.tsx -var import_react39 = __toESM(__webpack_require__(/*! react */ "react"), 1); -var LabelContext = (0, import_react39.createContext)( - null -); -function useLabelContext() { - let context = (0, import_react39.useContext)(LabelContext); - if (context === null) { - let err = new Error("You used a