diff --git a/.circleci/config.yml b/.circleci/config.yml index 2774672e2..72d9c3de4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -23,7 +23,7 @@ jobs: name: Running Tests command: | . venv/bin/activate - CI=true coverage run \ + CI=true coverage run --branch \ --omit='venv/*,NearBeach/tests/*,NearBeach/migrations/*,*/__init__.py,manage.py,settings.py,NearBeach/admin.py,NearBeach/apps.py' \ manage.py test coverage report diff --git a/.github/deployment_files/generate_templates.py b/.github/deployment_files/generate_templates.py new file mode 100644 index 000000000..dc83745a4 --- /dev/null +++ b/.github/deployment_files/generate_templates.py @@ -0,0 +1,32 @@ +from string import Template + +import requests + + +# Get the latest version from Github +results = requests.get("https://api.github.com/repos/NearBeach/NearBeach/releases?page=1&per_page=1") +results_json = results.json() + +# Using the results, find the tag name (aka version) +version = results_json[0]['tag_name'] + +# Create the __init__.py file +with open('./.github/deployment_files/template__init__.txt', 'r') as input_file: + src = Template(input_file.read()) + result = src.substitute({'version': version}) + input_file.close() + + with open('./NearBeach/__init__.py', 'w') as output_file: + output_file.write(result) + output_file.close() + +# Create the pyproject.toml file +with open('./.github/deployment_files/template_pyproject.toml', 'r') as input_file: + src = Template(input_file.read()) + result = src.substitute({'version': version}) + input_file.close() + + with open('./pyproject.toml', 'w') as output_file: + output_file.write(result) + output_file.close() + diff --git a/.github/deployment_files/template__init__.txt b/.github/deployment_files/template__init__.txt new file mode 100644 index 000000000..2f0678d52 --- /dev/null +++ b/.github/deployment_files/template__init__.txt @@ -0,0 +1,2 @@ +name = "NearBeach" +__version__ = "$version" diff --git a/.github/deployment_files/template_pyproject.toml b/.github/deployment_files/template_pyproject.toml new file mode 100644 index 000000000..0f008ec1c --- /dev/null +++ b/.github/deployment_files/template_pyproject.toml @@ -0,0 +1,57 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "NearBeach" +version = "0.31.0-RC1" +dependencies = [ + "Django>=3.1", + "simplejson", + "pillow>=10.0.1", + "urllib3", + "boto3", + "azure-storage-blob", + "azure-identity", + "pip>=19.2", +] +requires-python = ">=3.8" +authors = [ + {name = "Luke Christopher Clarke", email = "luke@nearbeach.org"}, +] +maintainers = [ + {name = "Luke Christopher Clarke", email = "luke@nearbeach.org"}, +] +description = "NearBeach - an open source project management tool" +readme = "README.md" +license = {file = "LICENSE"} +keywords = [ + "project", + "task", + "project management", + "request for change", + "open source" +] +classifiers = [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", +] + +[project.optional-dependencies] +dev = [ + "black", + "bandit", + "python-dotenv", + "django-storages", +] + +[project.urls] +Homepage = "https://nearbeach.org" +Documentation = "https://nearbeach.readthedocs.org" +Repository = "https://github.com/NearBeach/NearBeach.git" +"Bug Tracker" = "https://nearbeach.youtrack.cloud" + +[project.scripts] +"manage.py" = "myproject:django_manage" diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index 9596e960b..000000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: "CodeQL" - -on: - push: - branches: [main] - pull_request: - # The branches below must be a subset of the branches above - branches: [main] - schedule: - - cron: '0 8 * * 1' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - # Override automatic language detection by changing the below list - # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] - language: ['javascript', 'python'] - # Learn more... - # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - # We must fetch at least the immediate parents so that if this is - # a pull request then we can checkout the head. - fetch-depth: 2 - - # If this run was triggered by a pull request event, then checkout - # the head of the pull request instead of the merge commit. - - run: git checkout HEAD^2 - if: ${{ github.event_name == 'pull_request' }} - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - # ℹī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/collect-static-files.yml b/.github/workflows/collect-static-files.yml deleted file mode 100644 index 70b3600c4..000000000 --- a/.github/workflows/collect-static-files.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Collect Static Files - -on: - release: - types: [published] - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.11.4 - - name: Install Dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements-dev.txt - - name: Collect Static files - env: - CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_STORAGE_BUCKET_NAME: ${{ secrets.AWS_STORAGE_BUCKET_NAME }} - run: | - python manage.py collectstatic --noinput diff --git a/.github/workflows/deploy-nearbeach.yml b/.github/workflows/deploy-nearbeach.yml new file mode 100644 index 000000000..7341018a7 --- /dev/null +++ b/.github/workflows/deploy-nearbeach.yml @@ -0,0 +1,73 @@ +name: Deploy NearBeach + +on: + release: + types: [published] + workflow_dispatch: + +jobs: + deploy-nearbeach: + runs-on: ubuntu-latest + environment: main + permissions: + # IMPORTANT: this permission is mandatory for trusted publishing + id-token: write + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12.1 + - name: Update Pip and Install Required Python Libraries + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade build + pip install requests setuptools wheel + - name: Create __init__.py and PyProject.toml files + run: | + python3 ./.github/deployment_files/generate_templates.py + - name: Build Package + run: | + python -m build + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + + deploy-static-files: + needs: deploy-nearbeach + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.12.1 + - name: Create __init__.py and PyProject.toml files + run: | + python3 ./.github/deployment_files/generate_templates.py + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + pip install --editable .[dev] + - name: Collect Static files + env: + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_STORAGE_BUCKET_NAME: ${{ secrets.AWS_STORAGE_BUCKET_NAME }} + run: | + python manage.py collectstatic --noinput + + trigger-docker-build: + needs: [deploy-static-files, deploy-nearbeach] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Use Curl to trigger docker deployment + run: | + curl -L \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{ secrets.BEARER_TOKEN_FOR_GITHUB_ACTIONS }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/NearBeach/nearbeach-docker/dispatches \ + -d '{"event_type":"deploy_nearbeach","client_payload":{"version":"${{ github.ref_name }}"}}' diff --git a/NearBeach/__init__.py b/NearBeach/__init__.py index 70af84f5c..f69a99a7c 100755 --- a/NearBeach/__init__.py +++ b/NearBeach/__init__.py @@ -1,2 +1,2 @@ name = "NearBeach" -__version__ = "0.30.35" +__version__ = "local_development" diff --git a/NearBeach/admin.py b/NearBeach/admin.py index 6bd648bd1..ffc6d1863 100755 --- a/NearBeach/admin.py +++ b/NearBeach/admin.py @@ -27,6 +27,7 @@ ListOfTitle, Notification, ObjectAssignment, + ObjectNote, Organisation, PermissionSet, Project, @@ -66,6 +67,7 @@ admin.site.register(ListOfTitle) admin.site.register(Notification) admin.site.register(ObjectAssignment) +admin.site.register(ObjectNote) admin.site.register(Organisation) admin.site.register(PermissionSet) admin.site.register(Project) diff --git a/NearBeach/decorators/check_user_permissions.py b/NearBeach/decorators/check_user_permissions.py deleted file mode 100644 index 63454bc18..000000000 --- a/NearBeach/decorators/check_user_permissions.py +++ /dev/null @@ -1,432 +0,0 @@ -from django.core.exceptions import PermissionDenied -from django.db.models import Q, Max -from functools import wraps - -from NearBeach.models import ( - UserGroup, - Group, - ObjectAssignment, - KanbanCard, - PermissionSet, - RequirementItem, - Requirement, - ChangeTask, -) - - -def check_change_task_permissions(min_permission_level): - """Check the user's ability to interact with change tasks via the RFC""" - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # If user is admin - grant them all permission - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # If we are passing in any args like change_task_id, we want to do the following - if len(kwargs) > 0: - # Get the rfc id - rfc_id = ChangeTask.objects.get( - change_task_id=kwargs["change_task_id"] - ).request_for_change_id - - # Determine if there are any cross over change tasks - group_results = Group.objects.filter( - Q( - is_deleted=False, - # The object_lookup groups - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - # **{object_lookup: kwargs[object_lookup]}, - request_for_change_id=rfc_id, - ).values("group_id"), - ) - & Q(group_id__in=user_group_results.values("group_id")) - ) - - # Check to make sure the user groups intersect - if len(group_results) == 0: - # There are no matching groups - i.e. the user does not have any permission - raise PermissionDenied - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__request_for_change") - )["permission_set__request_for_change__max"] - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_admin_permissions(min_permission_level, permission_lookup=""): - """ - Function is only used in the administration views. It is designed to make sure that - the user either; - 1. Is an admin or - 2. Has some administration permissions attributes associated with them - """ - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # If user is admin - full permission - if request.user.is_superuser: - return func(request, *args, **kwargs, user_level=4) - - # At this point - if permission lookup is an empty string - escape - if permission_lookup == "": - raise PermissionDenied - - # Look at the user's permission set table - permission_set_results = PermissionSet.objects.filter( - is_deleted=False, - permission_set_id__in=UserGroup.objects.filter( - is_deleted=False, username=request.user - ).values("permission_set_id"), - ) - - user_level = permission_set_results.aggregate(Max(permission_lookup))[ - f"{permission_lookup}__max" - ] - - if user_level >= min_permission_level: - # Everything is fine - move on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_customer_permissions(min_permission_level): - """ - Function is only used when checking user permissions against customers - - as they are different - """ - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # if user is admin -grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate(Max("permission_set__customer"))[ - "permission_set__customer__max" - ] - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_kanban_permissions(min_permission_level): - """ - Checks the user permissions for the kanban board. It returns the user's permission - levels, unless they have none. If there are none - it returns permission denied. - """ - def decorator(func): - @wraps(func) - def inner(request, kanban_card_id, *args, **kwargs): - # If user is admin - grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, kanban_card_id, *args, **kwargs, user_level=4) - - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # Determine if there are any cross over with user groups and object_lookup groups - group_results = Group.objects.filter( - Q( - is_deleted=False, - # The object_lookup groups - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - kanban_board_id__in=KanbanCard.objects.filter( - kanban_card_id=kanban_card_id, - ).values("kanban_board_id"), - ).values("group_id"), - ) - & Q(group_id__in=user_group_results.values("group_id")) - ) - - # Check to make sure the user groups intersect - if len(group_results) == 0: - # There are no matching groups - i.e. the user does not have any permission - raise PermissionDenied - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__kanban_board") - )["permission_set__kanban_board__max"] - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func( - request, kanban_card_id, *args, **kwargs, user_level=user_level - ) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_organisation_permissions(min_permission_level): - """ - Function is only used when checking user permissions against - customers - as they are different - """ - - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # if user is admin -grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__organisation") - )["permission_set__organisation__max"] - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_permissions(min_permission_level, object_lookup=""): - """ - Check the user permissions - if they pass they can implement the function. - Otherwise send them to the permission denied page - """ - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # If user is admin - grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # If we are passing the object_lookup through, we will use a different function - if len(kwargs) > 0: - # Determine if there are any cross over with user groups and object_lookup groups - group_results = Group.objects.filter( - Q( - is_deleted=False, - # The object_lookup groups - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - **{object_lookup: kwargs[object_lookup]}, - ).values("group_id"), - ) - & Q(group_id__in=user_group_results.values("group_id")) - ) - - # Check to make sure the user groups intersect - if len(group_results) == 0: - # There are no matching groups - i.e. the user does not have any permission - raise PermissionDenied - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max(f"permission_set__{object_lookup.replace('_id', '')}") - )[f"permission_set__{object_lookup.replace('_id', '')}__max"] - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_requirement_item_permissions(min_permission_level): - """ - Function is only used when checking user permissions against - customers - as they are different - """ - - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # if user is admin -grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - # Get the requirement_item instance - requirement_item_results = RequirementItem.objects.get( - **{"requirement_item_id": kwargs["requirement_item_id"]}, - ) - - # Get the requirement instance - requirement_results = Requirement.objects.get( - requirement_id=requirement_item_results.requirement_id, - ) - - # Get the requirement groups - user_group_results = UserGroup.objects.filter( - Q( - is_deleted=False, - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - group_id__isnull=False, - requirement_id=requirement_results.requirement_id, - ).values("group_id"), - ) - & Q( - username=request.user, - ) - ) - - # Check to see if there are any groups associated - if len(user_group_results) == 0: - # No groups - meaning no permissions - raise PermissionDenied - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__requirement") - )["permission_set__requirement__max"] - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_rfc_permissions(min_permission_level): - """Check the user's RFC permissions""" - - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # If user is admin - grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # If we are passing the object_lookup through, we will use a different function - if len(kwargs) > 0: - # Determine if there are any cross over with user groups and object_lookup groups - group_results = Group.objects.filter( - Q( - is_deleted=False, - # The object_lookup groups - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - # **{object_lookup: kwargs[object_lookup]}, - request_for_change_id=kwargs["rfc_id"], - ).values("group_id"), - ) - & Q(group_id__in=user_group_results.values("group_id")) - ) - - # Check to make sure the user groups intersect - if len(group_results) == 0: - # There are no matching groups - i.e. the user does not have any permission - raise PermissionDenied - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__request_for_change") - )["permission_set__request_for_change__max"] - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_permission_denied(): - """Just a test function - don't worry about it""" - - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator diff --git a/NearBeach/decorators/check_user_permissions/__init__.py b/NearBeach/decorators/check_user_permissions/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/NearBeach/decorators/check_user_permissions/admin_permissions.py b/NearBeach/decorators/check_user_permissions/admin_permissions.py new file mode 100644 index 000000000..8e6f94456 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/admin_permissions.py @@ -0,0 +1,49 @@ +from django.core.exceptions import PermissionDenied +from django.db.models import Max +from functools import wraps + +from NearBeach.models import PermissionSet, UserGroup + + +def check_user_admin_permissions(min_permission_level, permission_lookup=""): + """ + Function is only used in the administration views. It is designed to make sure that + the user either; + 1. Is an admin or + 2. Has some administration permissions attributes associated with them. + + Permission Lookup is the field we are looking up in the PermissionSet table + """ + def decorator(func): + @wraps(func) + def inner(request, *args, **kwargs): + # If user is admin - full permission + if request.user.is_superuser: + return func(request, *args, **kwargs, user_level=4) + + # At this point - if permission lookup is an empty string - escape + if permission_lookup == "": + raise PermissionDenied + + # Look at the user's permission set table + permission_set_results = PermissionSet.objects.filter( + is_deleted=False, + permission_set_id__in=UserGroup.objects.filter( + is_deleted=False, username=request.user + ).values("permission_set_id"), + ) + + user_level = permission_set_results.aggregate(Max(permission_lookup))[ + f"{permission_lookup}__max" + ] + + if user_level >= min_permission_level: + # Everything is fine - move on + return func(request, *args, **kwargs, user_level=user_level) + + # Does not meet conditions + raise PermissionDenied + + return inner + + return decorator diff --git a/NearBeach/decorators/check_user_permissions/check_user_permissions.py b/NearBeach/decorators/check_user_permissions/check_user_permissions.py new file mode 100644 index 000000000..7cddd80e7 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/check_user_permissions.py @@ -0,0 +1,151 @@ +# from django.core.exceptions import PermissionDenied +# from django.db.models import Q, Max +# from functools import wraps +# +# from NearBeach.models import ( +# UserGroup, +# Group, +# ObjectAssignment, +# KanbanCard, +# PermissionSet, +# RequirementItem, +# Requirement, +# ChangeTask, +# ) +# +# +# def check_change_task_permissions(min_permission_level): +# """Check the user's ability to interact with change tasks via the RFC""" +# def decorator(func): +# @wraps(func) +# def inner(request, *args, **kwargs): +# # If user is admin - grant them all permission +# if request.user.is_superuser: +# # Return the function with a user_level of 4 +# return func(request, *args, **kwargs, user_level=4) +# +# # Checks the user permissions +# passes, user_level = object_change_task(request, kwargs) +# +# if not passes: +# raise PermissionDenied +# +# if user_level >= min_permission_level: +# # Everything is fine - continue on +# return func(request, *args, **kwargs, user_level=user_level) +# +# # Does not meet conditions +# raise PermissionDenied +# +# return inner +# +# return decorator +# +# +# +# +# def check_user_kanban_permissions(min_permission_level): +# """ +# Checks the user permissions for the kanban board. It returns the user's permission +# levels, unless they have none. If there are none - it returns permission denied. +# """ +# def decorator(func): +# @wraps(func) +# def inner(request, kanban_card_id, *args, **kwargs): +# # If user is admin - grant them all permissions +# if request.user.is_superuser: +# # Return the function with a user_level of 4 +# return func(request, kanban_card_id, *args, **kwargs, user_level=4) +# +# passes, user_level = object_kanban_board(request, kanban_card_id) +# +# if not passes: +# raise PermissionDenied +# +# if user_level >= min_permission_level: +# # Everything is fine - continue on +# return func( +# request, kanban_card_id, *args, **kwargs, user_level=user_level +# ) +# +# # Does not meet conditions +# raise PermissionDenied +# +# return inner +# +# return decorator +# +# +# +# def check_user_permissions(min_permission_level, object_lookup=""): +# """ +# Check the user permissions - if they pass they can implement the function. +# Otherwise send them to the permission denied page +# """ +# +# +# +# def check_user_requirement_item_permissions(min_permission_level): +# """ +# Function is only used when checking user permissions against +# customers - as they are different +# """ +# +# def decorator(func): +# @wraps(func) +# def inner(request, *args, **kwargs): +# # if user is admin -grant them all permissions +# if request.user.is_superuser: +# # Return the function with a user_level of 4 +# return func(request, *args, **kwargs, user_level=4) +# +# passes, user_level = object_requirement_item(request, kwargs) +# +# if not passes: +# raise PermissionDenied +# +# if user_level >= min_permission_level: +# # Everything is fine - continue on +# return func(request, *args, **kwargs, user_level=user_level) +# +# # Does not meet conditions +# raise PermissionDenied +# +# return inner +# +# return decorator +# +# +# def check_rfc_permissions(min_permission_level): +# """Check the user's RFC permissions""" +# +# def decorator(func): +# @wraps(func) +# def inner(request, *args, **kwargs): +# # If user is admin - grant them all permissions +# if request.user.is_superuser: +# # Return the function with a user_level of 4 +# return func(request, *args, **kwargs, user_level=4) +# +# passes, user_level = object_rfc(request, kwargs) +# +# if not passes: +# raise PermissionDenied +# +# if user_level >= min_permission_level: +# # Everything is fine - continue on +# return func(request, *args, **kwargs, user_level=user_level) +# +# # Does not meet conditions +# raise PermissionDenied +# +# return inner +# +# return decorator +# +# +# # + + + + diff --git a/NearBeach/decorators/check_user_permissions/customer_permissions.py b/NearBeach/decorators/check_user_permissions/customer_permissions.py new file mode 100644 index 000000000..2552834db --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/customer_permissions.py @@ -0,0 +1,42 @@ +from django.core.exceptions import PermissionDenied +from django.db.models import Max +from functools import wraps + +from NearBeach.models import UserGroup + + +def check_user_customer_permissions(min_permission_level): + """ + Function is only used when checking user permissions against customers. + Min Permission Level determines the user permission and if they can + progress + """ + def decorator(func): + @wraps(func) + def inner(request, *args, **kwargs): + # if user is admin -grant them all permissions + if request.user.is_superuser: + # Return the function with a user_level of 4 + return func(request, *args, **kwargs, user_level=4) + + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate(Max("permission_set__customer"))[ + "permission_set__customer__max" + ] + + if user_level >= min_permission_level: + # Everything is fine - continue on + return func(request, *args, **kwargs, user_level=user_level) + + # Does not meet conditions + raise PermissionDenied + + return inner + + return decorator diff --git a/NearBeach/decorators/check_user_permissions/object_permissions.py b/NearBeach/decorators/check_user_permissions/object_permissions.py new file mode 100644 index 000000000..821857d87 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/object_permissions.py @@ -0,0 +1,110 @@ +from django.core.exceptions import PermissionDenied +from django.db.models import Max, Q +from functools import wraps +from .partials.change_task_permissions import change_task_permissions +from .partials.generic_permissions import generic_permissions +from .partials.kanban_board_permissions import kanban_board_permissions +from .partials.kanban_card_permissions import kanban_card_permissions +from .partials.request_for_change_permissions import request_for_change_permissions +from .partials.requirement_permissions import requirement_permissions +from .partials.requirement_item_permissions import requirement_item_permissions +from .partials.object_note_permissions import object_note_permissions +from .partials.project_permissions import project_permissions +from .partials.tag_permissions import tag_permissions +from .partials.task_permissions import task_permissions + + +FUNCTION_DICT = { + "change_task": change_task_permissions, + # "customer", + "kanban": kanban_board_permissions, + "kanban_board": kanban_board_permissions, + "kanban_card": kanban_card_permissions, + "request_for_change": request_for_change_permissions, + "requirement": requirement_permissions, + "requirement_item": requirement_item_permissions, + # "organisation", + "object_note": object_note_permissions, + "project": project_permissions, + "tag": tag_permissions, + "task": task_permissions, +} + + +def check_user_generic_permissions(min_permission_level): + """ + Checks the user's generic permissions. It will gather both the + - destination + - location id + from the *args and **kwargs. + From here it will determine which partial permission it should + be checking against. The result from the partial will determine + if the user is granted permission or denied. + """ + def decorator(func): + @wraps(func) + def inner(request, *args, **kwargs): + # If user is admin - grant them all permissions + if request.user.is_superuser: + # Return the function with a user_level of 4 + return func(request, *args, **kwargs, user_level=4) + + # Obtain destination from args + # Due to weird issue - we check the args length + if len(args) == 0: + destination = kwargs['destination'] + else: + destination = args[0] + + passes, user_level = generic_permissions(request, destination, kwargs) + + if not passes: + raise PermissionDenied + + if user_level >= min_permission_level: + # Everything is fine - continue on + return func(request, *args, **kwargs, user_level=user_level) + + # Does not meet conditions + raise PermissionDenied + + return inner + + return decorator + + +def check_specific_object_permissions(min_permission_level, object_lookup): + """ + Checks the user's permissions against the provided object_lookup. + From here it will determine which partial permission it should + be checking against. The result from the partial will determine + if the user is granted permission or denied. + """ + def decorator(func): + @wraps(func) + def inner(request, *args, **kwargs): + # If user is admin - grant them all permissions + if request.user.is_superuser: + # Return the function with a user_level of 4 + return func(request, *args, **kwargs, user_level=4) + + if object_lookup == "": + raise PermissionDenied + + # Use the FUNCTION_DICT to determine which partial permissions we need to + # reference + passes, user_level = FUNCTION_DICT[object_lookup](request, kwargs) + + if not passes: + raise PermissionDenied + + if user_level >= min_permission_level: + # Everything is fine - continue on + return func(request, *args, **kwargs, user_level=user_level) + + # Does not meet conditions + raise PermissionDenied + + return inner + + return decorator diff --git a/NearBeach/decorators/check_user_permissions/organisation_permissions.py b/NearBeach/decorators/check_user_permissions/organisation_permissions.py new file mode 100644 index 000000000..bde84218d --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/organisation_permissions.py @@ -0,0 +1,43 @@ +from django.core.exceptions import PermissionDenied +from django.db.models import Max +from functools import wraps + +from NearBeach.models import UserGroup + + +def check_user_organisation_permissions(min_permission_level): + """ + Function is only used when checking user permissions against + organisations. Min Permission Level determines if the user + will have enough permission to proceed. + """ + + def decorator(func): + @wraps(func) + def inner(request, *args, **kwargs): + # if user is admin -grant them all permissions + if request.user.is_superuser: + # Return the function with a user_level of 4 + return func(request, *args, **kwargs, user_level=4) + + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__organisation") + )["permission_set__organisation__max"] + + if user_level >= min_permission_level: + # Everything is fine - continue on + return func(request, *args, **kwargs, user_level=user_level) + + # Does not meet conditions + raise PermissionDenied + + return inner + + return decorator diff --git a/NearBeach/decorators/check_user_permissions/partials/__init__.py b/NearBeach/decorators/check_user_permissions/partials/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/NearBeach/decorators/check_user_permissions/partials/change_task_permissions.py b/NearBeach/decorators/check_user_permissions/partials/change_task_permissions.py new file mode 100644 index 000000000..b0eb55835 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/change_task_permissions.py @@ -0,0 +1,44 @@ +from NearBeach.models import ChangeTask, Group, ObjectAssignment, UserGroup +from django.db.models import Max, Q + + +def change_task_permissions(request, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + # If we are passing in any args like change_task_id, we want to do the following + if len(kwargs) > 0: + # Get the rfc id + rfc_id = ChangeTask.objects.get( + change_task_id=kwargs["change_task_id"] + ).request_for_change_id + + # Determine if there are any cross over change tasks + group_results = Group.objects.filter( + Q( + is_deleted=False, + # The object_lookup groups + group_id__in=ObjectAssignment.objects.filter( + is_deleted=False, + # **{object_lookup: kwargs[object_lookup]}, + request_for_change_id=rfc_id, + ).values("group_id"), + ) + & Q(group_id__in=user_group_results.values("group_id")) + ) + + # Check to make sure the user groups intersect + if len(group_results) == 0: + # There are no matching groups - i.e. the user does not have any permission + return False, 0 + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__request_for_change") + )["permission_set__request_for_change__max"] + + # Return + return True, user_level diff --git a/NearBeach/decorators/check_user_permissions/partials/generic_permissions.py b/NearBeach/decorators/check_user_permissions/partials/generic_permissions.py new file mode 100644 index 000000000..dab5191f7 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/generic_permissions.py @@ -0,0 +1,40 @@ +from django.core.exceptions import PermissionDenied +from django.db.models import Max, Q +from functools import wraps + +from NearBeach.models import Group, ObjectAssignment, UserGroup + + +def generic_permissions(request, object_lookup, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + # If we are passing the object_lookup through, we will use a different function + if len(kwargs) > 0: + # Determine if there are any cross over with user groups and object_lookup groups + group_results = Group.objects.filter( + Q( + is_deleted=False, + # The object_lookup groups + group_id__in=ObjectAssignment.objects.filter( + is_deleted=False, + **{object_lookup: kwargs["location_id"]}, + ).values("group_id"), + ) + & Q(group_id__in=user_group_results.values("group_id")) + ) + + # Check to make sure the user groups intersect + if len(group_results) == 0: + # There are no matching groups - i.e. the user does not have any permission + return False, 0 + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max(f"permission_set__{object_lookup.replace('_id', '')}") + )[f"permission_set__{object_lookup.replace('_id', '')}__max"] + + return True, user_level diff --git a/NearBeach/decorators/check_user_permissions/partials/kanban_board_permissions.py b/NearBeach/decorators/check_user_permissions/partials/kanban_board_permissions.py new file mode 100644 index 000000000..9093b75b1 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/kanban_board_permissions.py @@ -0,0 +1,37 @@ +from NearBeach.models import Group, KanbanCard, ObjectAssignment, UserGroup +from django.db.models import Max, Q + + +# Internal Function +def kanban_board_permissions(request, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + # Determine if there are any cross over with user groups and object_lookup groups + group_results = Group.objects.filter( + Q( + is_deleted=False, + # The object_lookup groups + group_id__in=ObjectAssignment.objects.filter( + is_deleted=False, + kanban_board_id=kwargs["kanban_board_id"] + ).values("group_id"), + ) + & Q(group_id__in=user_group_results.values("group_id")) + ) + + # Check to make sure the user groups intersect + if len(group_results) == 0: + # There are no matching groups - i.e. the user does not have any permission + return False, 0 + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__kanban_board") + )["permission_set__kanban_board__max"] + + return True, user_level + diff --git a/NearBeach/decorators/check_user_permissions/partials/kanban_card_permissions.py b/NearBeach/decorators/check_user_permissions/partials/kanban_card_permissions.py new file mode 100644 index 000000000..f9b0158d0 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/kanban_card_permissions.py @@ -0,0 +1,40 @@ +from NearBeach.models import Group, KanbanCard, ObjectAssignment, UserGroup +from django.db.models import Max, Q + + +# Internal Function +def kanban_card_permissions(request, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + if len(kwargs) > 0: + # Determine if there are any cross over with user groups and object_lookup groups + group_results = Group.objects.filter( + Q( + is_deleted=False, + # The object_lookup groups + group_id__in=ObjectAssignment.objects.filter( + is_deleted=False, + kanban_board_id__in=KanbanCard.objects.filter( + kanban_card_id=kwargs["kanban_card_id"], + ).values("kanban_board_id"), + ).values("group_id"), + ) + & Q(group_id__in=user_group_results.values("group_id")) + ) + + # Check to make sure the user groups intersect + if len(group_results) == 0: + # There are no matching groups - i.e. the user does not have any permission + return False, 0 + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__kanban_board") + )["permission_set__kanban_board__max"] + + return True, user_level + diff --git a/NearBeach/decorators/check_user_permissions/partials/object_note_permissions.py b/NearBeach/decorators/check_user_permissions/partials/object_note_permissions.py new file mode 100644 index 000000000..312a5a624 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/object_note_permissions.py @@ -0,0 +1,22 @@ +from NearBeach.models import ObjectAssignment, ObjectNote, UserGroup +from django.db.models import Max, Q + + +def object_note_permissions(request, kwargs): + """ + Checks the user's permission to determine if they have permission to delete this note. + Currently only; + - Note owner + Can delete the note + """ + + if len(kwargs) > 0: + # Get the requirement groups + object_results = ObjectNote.objects.filter( + object_note_id=kwargs["object_note_id"], + change_user=request.user, + ).count() + + return True, object_results + + return False, 0 diff --git a/NearBeach/decorators/check_user_permissions/partials/project_permissions.py b/NearBeach/decorators/check_user_permissions/partials/project_permissions.py new file mode 100644 index 000000000..1722cc423 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/project_permissions.py @@ -0,0 +1,38 @@ +from NearBeach.models import ObjectAssignment, Project, UserGroup +from django.db.models import Max, Q + + +def project_permissions(request, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + if len(kwargs) > 0: + # Get the requirement groups + user_group_results = UserGroup.objects.filter( + Q( + is_deleted=False, + group_id__in=ObjectAssignment.objects.filter( + is_deleted=False, + group_id__isnull=False, + project_id=kwargs["project_id"], + ).values("group_id"), + ) + & Q( + username=request.user, + ) + ) + + # Check to see if there are any groups associated + if len(user_group_results) == 0: + # No groups - meaning no permissions + return False, 0 + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__project") + )["permission_set__project__max"] + + return True, user_level diff --git a/NearBeach/decorators/check_user_permissions/partials/request_for_change_permissions.py b/NearBeach/decorators/check_user_permissions/partials/request_for_change_permissions.py new file mode 100644 index 000000000..cb0e9902a --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/request_for_change_permissions.py @@ -0,0 +1,38 @@ +from NearBeach.models import Group, ObjectAssignment, UserGroup +from django.db.models import Max, Q + + +# Internal Function +def request_for_change_permissions(request, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + # If we are passing the object_lookup through, we will use a different function + if len(kwargs) > 0: + # Determine if there are any cross over with user groups and object_lookup groups + group_results = Group.objects.filter( + Q( + is_deleted=False, + # The object_lookup groups + group_id__in=ObjectAssignment.objects.filter( + is_deleted=False, + # **{object_lookup: kwargs[object_lookup]}, + request_for_change_id=kwargs["rfc_id"], + ).values("group_id"), + ) + & Q(group_id__in=user_group_results.values("group_id")) + ) + + # Check to make sure the user groups intersect + if len(group_results) == 0: + return False, 0 + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__request_for_change") + )["permission_set__request_for_change__max"] + + return True, user_level diff --git a/NearBeach/decorators/check_user_permissions/partials/requirement_item_permissions.py b/NearBeach/decorators/check_user_permissions/partials/requirement_item_permissions.py new file mode 100644 index 000000000..6bab72d54 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/requirement_item_permissions.py @@ -0,0 +1,48 @@ +from NearBeach.models import ObjectAssignment, Requirement, RequirementItem, UserGroup +from django.db.models import Max, Q + + +def requirement_item_permissions(request, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + if len(kwargs) > 0: + # Get the requirement_item instance + requirement_item_results = RequirementItem.objects.get( + **{"requirement_item_id": kwargs["requirement_item_id"]}, + ) + + # Get the requirement instance + requirement_results = Requirement.objects.get( + requirement_id=requirement_item_results.requirement_id, + ) + + # Get the requirement groups + user_group_results = UserGroup.objects.filter( + Q( + is_deleted=False, + group_id__in=ObjectAssignment.objects.filter( + is_deleted=False, + group_id__isnull=False, + requirement_id=requirement_results.requirement_id, + ).values("group_id"), + ) + & Q( + username=request.user, + ) + ) + + # Check to see if there are any groups associated + if len(user_group_results) == 0: + # No groups - meaning no permissions + return False, 0 + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__requirement") + )["permission_set__requirement__max"] + + return True, user_level diff --git a/NearBeach/decorators/check_user_permissions/partials/requirement_permissions.py b/NearBeach/decorators/check_user_permissions/partials/requirement_permissions.py new file mode 100644 index 000000000..2ddfedd4b --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/requirement_permissions.py @@ -0,0 +1,38 @@ +from NearBeach.models import ObjectAssignment, Requirement, UserGroup +from django.db.models import Max, Q + + +def requirement_permissions(request, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + if len(kwargs) > 0: + # Get the requirement groups + user_group_results = user_group_results.filter( + Q( + is_deleted=False, + group_id__in=ObjectAssignment.objects.filter( + is_deleted=False, + group_id__isnull=False, + requirement_id=kwargs["requirement_id"], + ).values("group_id"), + ) + & Q( + username=request.user, + ) + ) + + # Check to see if there are any groups associated + if len(user_group_results) == 0: + # No groups - meaning no permissions + return False, 0 + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__requirement") + )["permission_set__requirement__max"] + + return True, user_level diff --git a/NearBeach/decorators/check_user_permissions/partials/tag_permissions.py b/NearBeach/decorators/check_user_permissions/partials/tag_permissions.py new file mode 100644 index 000000000..c6df3ae32 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/tag_permissions.py @@ -0,0 +1,17 @@ +from django.db.models import Max, Q +from NearBeach.models import UserGroup + + +def tag_permissions(request, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__tag") + )["permission_set__tag__max"] + + return True, user_level diff --git a/NearBeach/decorators/check_user_permissions/partials/task_permissions.py b/NearBeach/decorators/check_user_permissions/partials/task_permissions.py new file mode 100644 index 000000000..bcd812218 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/partials/task_permissions.py @@ -0,0 +1,39 @@ +from NearBeach.models import ObjectAssignment, Task, UserGroup +from django.db.models import Max, Q + + +def task_permissions(request, kwargs): + # Default user level is 0 + user_group_results = UserGroup.objects.filter( + is_deleted=False, + username=request.user, + ) + + # Check to see if we are passing the task id. + if len(kwargs) > 0: + # Get the requirement groups + user_group_results = user_group_results.filter( + Q( + is_deleted=False, + group_id__in=ObjectAssignment.objects.filter( + is_deleted=False, + group_id__isnull=False, + task_id=kwargs["task_id"], + ).values("group_id"), + ) + & Q( + username=request.user, + ) + ) + + # Check to see if there are any groups associated + if len(user_group_results) == 0: + # No groups - meaning no permissions + return False, 0 + + # Get the max permission value from user_group_results + user_level = user_group_results.aggregate( + Max("permission_set__task") + )["permission_set__task__max"] + + return True, user_level diff --git a/NearBeach/decorators/check_user_permissions/permission_denied.py b/NearBeach/decorators/check_user_permissions/permission_denied.py new file mode 100644 index 000000000..1b21a3f48 --- /dev/null +++ b/NearBeach/decorators/check_user_permissions/permission_denied.py @@ -0,0 +1,17 @@ +from django.core.exceptions import PermissionDenied +from functools import wraps + + +def check_permission_denied(): + """Just a test function - don't worry about it""" + + def decorator(func): + @wraps(func) + def inner(request, *args, **kwargs): + # Does not meet conditions + raise PermissionDenied + + return inner + + return decorator + diff --git a/NearBeach/decorators/check_user_permissions_new.py b/NearBeach/decorators/check_user_permissions_new.py deleted file mode 100644 index 881faf73c..000000000 --- a/NearBeach/decorators/check_user_permissions_new.py +++ /dev/null @@ -1,508 +0,0 @@ -from django.core.exceptions import PermissionDenied -from django.db.models import Q, Max -from functools import wraps - -from NearBeach.models import ( - UserGroup, - Group, - ObjectAssignment, - KanbanCard, - PermissionSet, - RequirementItem, - Requirement, - ChangeTask, -) - - -def check_change_task_permissions(min_permission_level): - """Check the user's ability to interact with change tasks via the RFC""" - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # If user is admin - grant them all permission - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - # Checks the user permissions - passes, user_level = object_change_task(request, kwargs) - - if not passes: - raise PermissionDenied - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_admin_permissions(min_permission_level, permission_lookup=""): - """ - Function is only used in the administration views. It is designed to make sure that - the user either; - 1. Is an admin or - 2. Has some administration permissions attributes associated with them - """ - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # If user is admin - full permission - if request.user.is_superuser: - return func(request, *args, **kwargs, user_level=4) - - # At this point - if permission lookup is an empty string - escape - if permission_lookup == "": - raise PermissionDenied - - # Look at the user's permission set table - permission_set_results = PermissionSet.objects.filter( - is_deleted=False, - permission_set_id__in=UserGroup.objects.filter( - is_deleted=False, username=request.user - ).values("permission_set_id"), - ) - - user_level = permission_set_results.aggregate(Max(permission_lookup))[ - f"{permission_lookup}__max" - ] - - if user_level >= min_permission_level: - # Everything is fine - move on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_customer_permissions(min_permission_level): - """ - Function is only used when checking user permissions against customers - - as they are different - """ - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # if user is admin -grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - passes, user_level = object_customer(request) - - if not passes: - raise PermissionDenied - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_kanban_permissions(min_permission_level): - """ - Checks the user permissions for the kanban board. It returns the user's permission - levels, unless they have none. If there are none - it returns permission denied. - """ - def decorator(func): - @wraps(func) - def inner(request, kanban_card_id, *args, **kwargs): - # If user is admin - grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, kanban_card_id, *args, **kwargs, user_level=4) - - passes, user_level = object_kanban_board(request, kanban_card_id) - - if not passes: - raise PermissionDenied - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func( - request, kanban_card_id, *args, **kwargs, user_level=user_level - ) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_organisation_permissions(min_permission_level): - """ - Function is only used when checking user permissions against - customers - as they are different - """ - - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # if user is admin -grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - _, user_level = object_organisation(request) - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_permissions(min_permission_level, object_lookup=""): - """ - Check the user permissions - if they pass they can implement the function. - Otherwise send them to the permission denied page - """ - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # If user is admin - grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - # Override object lookup - destination = object_lookup - if object_lookup == "": - destination = kwargs["destination"] - - # Depending on the destination - depends on the function we use to look up - # User permissions - ## TO DO - finish this code. - - passes, user_level = object_generic(request, destination, kwargs) - - if not passes: - raise PermissionDenied - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_user_requirement_item_permissions(min_permission_level): - """ - Function is only used when checking user permissions against - customers - as they are different - """ - - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # if user is admin -grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - passes, user_level = object_requirement_item(request, kwargs) - - if not passes: - raise PermissionDenied - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_rfc_permissions(min_permission_level): - """Check the user's RFC permissions""" - - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # If user is admin - grant them all permissions - if request.user.is_superuser: - # Return the function with a user_level of 4 - return func(request, *args, **kwargs, user_level=4) - - passes, user_level = object_rfc(request, kwargs) - - if not passes: - raise PermissionDenied - - if user_level >= min_permission_level: - # Everything is fine - continue on - return func(request, *args, **kwargs, user_level=user_level) - - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -def check_permission_denied(): - """Just a test function - don't worry about it""" - - def decorator(func): - @wraps(func) - def inner(request, *args, **kwargs): - # Does not meet conditions - raise PermissionDenied - - return inner - - return decorator - - -# Internal function -def object_change_task(request, kwargs): - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # If we are passing in any args like change_task_id, we want to do the following - if len(kwargs) > 0: - # Get the rfc id - rfc_id = ChangeTask.objects.get( - change_task_id=kwargs["change_task_id"] - ).request_for_change_id - - # Determine if there are any cross over change tasks - group_results = Group.objects.filter( - Q( - is_deleted=False, - # The object_lookup groups - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - # **{object_lookup: kwargs[object_lookup]}, - request_for_change_id=rfc_id, - ).values("group_id"), - ) - & Q(group_id__in=user_group_results.values("group_id")) - ) - - # Check to make sure the user groups intersect - if len(group_results) == 0: - # There are no matching groups - i.e. the user does not have any permission - return False, 0 - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__request_for_change") - )["permission_set__request_for_change__max"] - - # Return - return True, user_level - - -# Internal Function -def object_customer(request): - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate(Max("permission_set__customer"))[ - "permission_set__customer__max" - ] - - return True, user_level - - -# Internal Function -def object_generic(request, object_lookup, kwargs): - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # If we are passing the object_lookup through, we will use a different function - if len(kwargs) > 0: - # Determine if there are any cross over with user groups and object_lookup groups - group_results = Group.objects.filter( - Q( - is_deleted=False, - # The object_lookup groups - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - **{object_lookup: kwargs[object_lookup]}, - ).values("group_id"), - ) - & Q(group_id__in=user_group_results.values("group_id")) - ) - - # Check to make sure the user groups intersect - if len(group_results) == 0: - # There are no matching groups - i.e. the user does not have any permission - return False, 0 - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max(f"permission_set__{object_lookup.replace('_id', '')}") - )[f"permission_set__{object_lookup.replace('_id', '')}__max"] - - return True, user_level - - -# Internal Function -def object_kanban_board(request, kanban_card_id): - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # Determine if there are any cross over with user groups and object_lookup groups - group_results = Group.objects.filter( - Q( - is_deleted=False, - # The object_lookup groups - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - kanban_board_id__in=KanbanCard.objects.filter( - kanban_card_id=kanban_card_id, - ).values("kanban_board_id"), - ).values("group_id"), - ) - & Q(group_id__in=user_group_results.values("group_id")) - ) - - # Check to make sure the user groups intersect - if len(group_results) == 0: - # There are no matching groups - i.e. the user does not have any permission - return False, 0 - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__kanban_board") - )["permission_set__kanban_board__max"] - - return True, user_level - - -# Internal Function -def object_organisation(request): - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__organisation") - )["permission_set__organisation__max"] - - return True, user_level - - -# Internal Function -def object_requirement_item(request, kwargs): - # Get the requirement_item instance - requirement_item_results = RequirementItem.objects.get( - **{"requirement_item_id": kwargs["requirement_item_id"]}, - ) - - # Get the requirement instance - requirement_results = Requirement.objects.get( - requirement_id=requirement_item_results.requirement_id, - ) - - # Get the requirement groups - user_group_results = UserGroup.objects.filter( - Q( - is_deleted=False, - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - group_id__isnull=False, - requirement_id=requirement_results.requirement_id, - ).values("group_id"), - ) - & Q( - username=request.user, - ) - ) - - # Check to see if there are any groups associated - if len(user_group_results) == 0: - # No groups - meaning no permissions - return False, 0 - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__requirement") - )["permission_set__requirement__max"] - - return True, user_level - - -# Internal Function -def object_rfc(request, kwargs): - # Default user level is 0 - user_group_results = UserGroup.objects.filter( - is_deleted=False, - username=request.user, - ) - - # If we are passing the object_lookup through, we will use a different function - if len(kwargs) > 0: - # Determine if there are any cross over with user groups and object_lookup groups - group_results = Group.objects.filter( - Q( - is_deleted=False, - # The object_lookup groups - group_id__in=ObjectAssignment.objects.filter( - is_deleted=False, - # **{object_lookup: kwargs[object_lookup]}, - request_for_change_id=kwargs["rfc_id"], - ).values("group_id"), - ) - & Q(group_id__in=user_group_results.values("group_id")) - ) - - # Check to make sure the user groups intersect - if len(group_results) == 0: - # There are no matching groups - i.e. the user does not have any permission - raise PermissionDenied - - # Get the max permission value from user_group_results - user_level = user_group_results.aggregate( - Max("permission_set__request_for_change") - )["permission_set__request_for_change__max"] diff --git a/NearBeach/fixtures/NearBeach_basic_setup.json b/NearBeach/fixtures/NearBeach_basic_setup.json index 9808e4b1d..7e90a04f0 100644 --- a/NearBeach/fixtures/NearBeach_basic_setup.json +++ b/NearBeach/fixtures/NearBeach_basic_setup.json @@ -1,4 +1,17 @@ [ +{ + "model": "NearBeach.bugclient", + "pk": 1, + "fields": { + "bug_client_name": "NearBeach Bugzilla", + "list_of_bug_client": 1, + "bug_client_url": "https://bugzilla.nearbeach.org", + "date_created": "2024-02-03T00:53:25.871Z", + "date_modified": "2024-02-03T00:53:25.871Z", + "change_user": 1, + "is_deleted": false + } +}, { "model": "NearBeach.changetask", "pk": 1, @@ -215,7 +228,7 @@ "fields": { "kanban_card_text": "Administration Card", "kanban_card_description": "", - "kanban_card_sort_number": 2, + "kanban_card_sort_number": 0, "kanban_level": 1, "kanban_column": 1, "kanban_board": 1, @@ -225,7 +238,7 @@ "requirement": null, "is_archived": false, "date_created": "2023-02-15T09:12:40.336Z", - "date_modified": "2023-02-20T11:00:44.429Z", + "date_modified": "2024-02-05T09:45:14.014Z", "change_user": 1, "is_deleted": false } @@ -464,7 +477,7 @@ "fields": { "project_status": "New", "project_higher_order_status": "Backlog", - "project_status_order": 1, + "project_status_sort_order": 1, "date_created": "2023-12-28T04:35:43.322Z", "date_modified": "2023-12-28T04:35:43.323Z", "change_user": null, @@ -477,7 +490,7 @@ "fields": { "project_status": "Backlog", "project_higher_order_status": "Backlog", - "project_status_order": 2, + "project_status_sort_order": 2, "date_created": "2023-12-28T04:35:43.323Z", "date_modified": "2023-12-28T04:35:43.323Z", "change_user": null, @@ -490,7 +503,7 @@ "fields": { "project_status": "Blocked", "project_higher_order_status": "Blocked", - "project_status_order": 3, + "project_status_sort_order": 3, "date_created": "2023-12-28T04:35:43.323Z", "date_modified": "2023-12-28T04:35:43.323Z", "change_user": null, @@ -503,7 +516,7 @@ "fields": { "project_status": "In Progress", "project_higher_order_status": "Normal", - "project_status_order": 4, + "project_status_sort_order": 4, "date_created": "2023-12-28T04:35:43.323Z", "date_modified": "2023-12-28T04:35:43.323Z", "change_user": null, @@ -516,7 +529,7 @@ "fields": { "project_status": "Test/Review", "project_higher_order_status": "Normal", - "project_status_order": 5, + "project_status_sort_order": 5, "date_created": "2023-12-28T04:35:43.323Z", "date_modified": "2023-12-28T04:35:43.323Z", "change_user": null, @@ -529,7 +542,7 @@ "fields": { "project_status": "Closed", "project_higher_order_status": "Closed", - "project_status_order": 6, + "project_status_sort_order": 6, "date_created": "2023-12-28T04:35:43.323Z", "date_modified": "2023-12-28T04:35:43.323Z", "change_user": null, @@ -924,7 +937,7 @@ "fields": { "task_status": "New", "task_higher_order_status": "Backlog", - "task_status_order": 1, + "task_status_sort_order": 1, "date_created": "2023-12-28T04:35:43.324Z", "date_modified": "2023-12-28T04:35:43.324Z", "change_user": null, @@ -937,7 +950,7 @@ "fields": { "task_status": "Backlog", "task_higher_order_status": "Backlog", - "task_status_order": 2, + "task_status_sort_order": 2, "date_created": "2023-12-28T04:35:43.324Z", "date_modified": "2023-12-28T04:35:43.324Z", "change_user": null, @@ -950,7 +963,7 @@ "fields": { "task_status": "Blocked", "task_higher_order_status": "Blocked", - "task_status_order": 3, + "task_status_sort_order": 3, "date_created": "2023-12-28T04:35:43.324Z", "date_modified": "2023-12-28T04:35:43.324Z", "change_user": null, @@ -963,7 +976,7 @@ "fields": { "task_status": "In Progress", "task_higher_order_status": "Normal", - "task_status_order": 4, + "task_status_sort_order": 4, "date_created": "2023-12-28T04:35:43.324Z", "date_modified": "2023-12-28T04:35:43.324Z", "change_user": null, @@ -976,7 +989,7 @@ "fields": { "task_status": "Test/Review", "task_higher_order_status": "Normal", - "task_status_order": 5, + "task_status_sort_order": 5, "date_created": "2023-12-28T04:35:43.324Z", "date_modified": "2023-12-28T04:35:43.324Z", "change_user": null, @@ -989,7 +1002,7 @@ "fields": { "task_status": "Closed", "task_higher_order_status": "Closed", - "task_status_order": 6, + "task_status_sort_order": 6, "date_created": "2023-12-28T04:35:43.324Z", "date_modified": "2023-12-28T04:35:43.324Z", "change_user": null, @@ -1964,6 +1977,42 @@ "is_deleted": false } }, +{ + "model": "NearBeach.objectnote", + "pk": 2, + "fields": { + "object_note": "

Project Note 1 - will be deleted by unit testing.

\r\n

It will fail when an unprivileged user will try and delete it

", + "kanban_card": null, + "organisation": null, + "requirement": null, + "requirement_item": null, + "project": 1, + "task": null, + "request_for_change": null, + "date_created": "2024-02-05T08:08:34.257Z", + "date_modified": "2024-02-05T08:08:34.257Z", + "change_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.objectnote", + "pk": 3, + "fields": { + "object_note": "

Team leader note. Will pass. Hello World

", + "kanban_card": null, + "organisation": null, + "requirement": null, + "requirement_item": null, + "project": 2, + "task": null, + "request_for_change": null, + "date_created": "2024-02-05T08:09:07.922Z", + "date_modified": "2024-02-05T08:19:28.185Z", + "change_user": 2, + "is_deleted": false + } +}, { "model": "NearBeach.organisation", "pk": 1, @@ -2192,6 +2241,234 @@ "is_deleted": false } }, +{ + "model": "NearBeach.publiclink", + "pk": "1c1067e9-563f-4419-9dac-e87d757ecb37", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": null, + "project": null, + "task": 1, + "kanban_board": null, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T09:45:50.460Z", + "date_modified": "2024-02-05T09:45:50.460Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "37a7cf65-c732-4e67-b16f-97d77329bdda", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": null, + "project": null, + "task": null, + "kanban_board": null, + "kanban_card": 2, + "request_for_change": null, + "date_created": "2024-02-05T09:46:12.606Z", + "date_modified": "2024-02-05T09:46:12.606Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "3d7346c4-05b6-41df-816a-eff814d9bbd0", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": null, + "project": 1, + "task": null, + "kanban_board": null, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T08:23:24.147Z", + "date_modified": "2024-02-05T08:23:24.147Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "5435086c-a145-4540-bc71-35a0fd0ee171", + "fields": { + "public_link_is_active": true, + "requirement": 2, + "requirement_item": null, + "project": null, + "task": null, + "kanban_board": null, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T09:45:37.543Z", + "date_modified": "2024-02-05T09:45:37.543Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "57fea1be-1cbb-4583-8381-9609aa58334b", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": null, + "project": null, + "task": null, + "kanban_board": 2, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T09:46:15.468Z", + "date_modified": "2024-02-05T09:46:15.468Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "5f369dc9-a0bb-416d-9779-92576d0500bb", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": null, + "project": 2, + "task": null, + "kanban_board": null, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T08:23:08.239Z", + "date_modified": "2024-02-05T08:23:08.239Z", + "change_user": 2, + "creation_user": 2, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "755ee6ea-7eac-4e8b-9c19-fbdba2dd290d", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": null, + "project": null, + "task": null, + "kanban_board": 1, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T09:46:05.511Z", + "date_modified": "2024-02-05T09:46:05.511Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "9b6a9317-df46-453f-aa5b-6f33b77c28c4", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": 2, + "project": null, + "task": null, + "kanban_board": null, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T10:08:55.342Z", + "date_modified": "2024-02-05T10:08:55.342Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "aba74809-aae5-4fc4-8929-5fd835fefa22", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": 1, + "project": null, + "task": null, + "kanban_board": null, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T10:07:57.659Z", + "date_modified": "2024-02-05T10:07:57.659Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "c5994697-a7e6-4e54-b8b1-4dee7315d7ea", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": null, + "project": null, + "task": 2, + "kanban_board": null, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T09:45:53.661Z", + "date_modified": "2024-02-05T09:45:53.661Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "fbda2f94-be7b-41e5-b93a-3ce65516d09d", + "fields": { + "public_link_is_active": true, + "requirement": 1, + "requirement_item": null, + "project": null, + "task": null, + "kanban_board": null, + "kanban_card": null, + "request_for_change": null, + "date_created": "2024-02-05T09:45:34.525Z", + "date_modified": "2024-02-05T09:45:34.525Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, +{ + "model": "NearBeach.publiclink", + "pk": "feb8f0e1-369a-4934-8208-9de39f9dfa98", + "fields": { + "public_link_is_active": true, + "requirement": null, + "requirement_item": null, + "project": null, + "task": null, + "kanban_board": null, + "kanban_card": 1, + "request_for_change": null, + "date_created": "2024-02-05T09:46:02.249Z", + "date_modified": "2024-02-05T09:46:02.249Z", + "change_user": 1, + "creation_user": 1, + "is_deleted": false + } +}, { "model": "NearBeach.requestforchange", "pk": 1, @@ -2316,6 +2593,19 @@ "is_deleted": false } }, +{ + "model": "NearBeach.tag", + "pk": 1, + "fields": { + "tag_name": "default tag", + "tag_colour": "#37cbd2", + "tag_text_colour": "#ffffff", + "date_created": "2024-02-03T00:53:00.375Z", + "date_modified": "2024-02-03T00:53:00.375Z", + "change_user": 1, + "is_deleted": false + } +}, { "model": "NearBeach.task", "pk": 1, @@ -2472,6 +2762,19 @@ } } }, +{ + "model": "admin.logentry", + "pk": 1, + "fields": { + "action_time": "2024-02-03T00:53:25.872Z", + "user": 1, + "content_type": 35, + "object_id": "1", + "object_repr": "NearBeach Bugzilla", + "action_flag": 1, + "change_message": "[{\"added\": {}}]" + } +}, { "model": "auth.permission", "pk": 1, @@ -4132,8 +4435,8 @@ "model": "auth.user", "pk": 1, "fields": { - "password": "pbkdf2_sha256$600000$M7cJrfehXMKIRmew4XHwV7$HTkU5qu5YT+hDQG350mZ4qpKx9xibWv1e70PgXEWOOk=", - "last_login": "2023-11-15T11:04:56.330Z", + "password": "pbkdf2_sha256$720000$xBoXxSEeVXBdR0rm6efbo0$//JuZL1sOsIXbgd6qdboRpMTz0MgwRi9Oi5AsuaSVx8=", + "last_login": "2024-02-05T08:07:49.203Z", "is_superuser": true, "username": "admin", "first_name": "Admin", @@ -4150,8 +4453,8 @@ "model": "auth.user", "pk": 2, "fields": { - "password": "pbkdf2_sha256$390000$PRnYesAIIPtAXQ5owSSKBm$EzGAHpW1bc53Mfr/3AAnPxUm6MuDmswWm+4RgGE6GHk=", - "last_login": null, + "password": "pbkdf2_sha256$720000$qPwbmUsqdz96LSSCZoFdkm$yT30PhvOS91E/Jn/ZS0fstZYzWLSgvzLHLhJc8V4xSg=", + "last_login": "2024-02-05T08:08:56.971Z", "is_superuser": false, "username": "team_leader", "first_name": "Team", @@ -4622,6 +4925,14 @@ "model": "session" } }, +{ + "model": "sessions.session", + "pk": "4ihdjbrhcx7hokg3uisrpinxhca0e34d", + "fields": { + "session_data": ".eJxVjEEOwiAQRe_C2hAYoNQu3XsGwgyDrZrWQFkZ726bdKHb_95_bxFiW8fQKpcwJTEILU6_G0Z68LyDdI_zbZG0zGuZUO6KPGiV1yXx83K4f4Ex1nF7O0Ai68FFdqlPkdH1nBUmC-SzNqAUeaMMGtuBBsAz6q7LtrfaGqdoi0411PbismfFsJbGny-LGT7k:1rWvse:lyt6TXjJYt27JiKtOvUdRIF7rY3B9FsAx6nGOaFkuVA", + "expire_date": "2024-02-19T10:07:12.158Z" + } +}, { "model": "sessions.session", "pk": "6ijlztlbeuobpqj85nn5sz82nxb27b6e", @@ -4630,6 +4941,22 @@ "expire_date": "2023-11-29T11:04:56.353Z" } }, +{ + "model": "sessions.session", + "pk": "8m5uznyh101is14fmwrekdyh1rf0y6ft", + "fields": { + "session_data": ".eJxVjEEOwiAQRe_C2hAYoNQu3XsGwgyDrZrWQFkZ726bdKHb_95_bxFiW8fQKpcwJTEILU6_G0Z68LyDdI_zbZG0zGuZUO6KPGiV1yXx83K4f4Ex1nF7O0Ai68FFdqlPkdH1nBUmC-SzNqAUeaMMGtuBBsAz6q7LtrfaGqdoi0411PbismfFsJbGny-LGT7k:1rW4H5:z0s-sSFp5Omsk3ltbIEgBmp6Ll-0CCRZo0oHPsZgHl4", + "expire_date": "2024-02-17T00:52:51.968Z" + } +}, +{ + "model": "sessions.session", + "pk": "bjg85wdarjo3cgh7m5n5ghtyuml55cpw", + "fields": { + "session_data": ".eJxVjjsOwjAQRO_iGln-yklKes5gjb1rEkAJipMKcXewlALaeTNP8xIR-zbGvfIaJxKDMOL0myXkO88N0A3zdZF5mbd1SrJV5EGrvCzEj_PR_ROMqON3nYKzSoOSt9YA1rJP8KZouD4HogJCVlmHYgz3Fsjadz5rx0oF17VXU411f_LatGIoeFR-fwDnpUAT:1rWu2C:w9CQ0CqBFz3eAoPmkTJMR7Jl_30-3aTVL3156Fwm8UA", + "expire_date": "2024-02-19T08:08:56.987Z" + } +}, { "model": "sessions.session", "pk": "g9wggp3nsnnsn06gb2s4807w9536fmli", diff --git a/NearBeach/fixtures/NearBeach_no_setup.json b/NearBeach/fixtures/NearBeach_no_setup.json index 8447842f4..3ecebe77d 100644 --- a/NearBeach/fixtures/NearBeach_no_setup.json +++ b/NearBeach/fixtures/NearBeach_no_setup.json @@ -20,7 +20,7 @@ "fields": { "project_status": "New", "project_higher_order_status": "Backlog", - "project_status_order": 1, + "project_status_sort_order": 1, "date_created": "2023-12-28T03:12:34.023Z", "date_modified": "2023-12-28T03:12:34.023Z", "change_user": null, @@ -33,7 +33,7 @@ "fields": { "project_status": "Backlog", "project_higher_order_status": "Backlog", - "project_status_order": 2, + "project_status_sort_order": 2, "date_created": "2023-12-28T03:12:34.023Z", "date_modified": "2023-12-28T03:12:34.023Z", "change_user": null, @@ -46,7 +46,7 @@ "fields": { "project_status": "Blocked", "project_higher_order_status": "Blocked", - "project_status_order": 3, + "project_status_sort_order": 3, "date_created": "2023-12-28T03:12:34.023Z", "date_modified": "2023-12-28T03:12:34.023Z", "change_user": null, @@ -59,7 +59,7 @@ "fields": { "project_status": "In Progress", "project_higher_order_status": "Normal", - "project_status_order": 4, + "project_status_sort_order": 4, "date_created": "2023-12-28T03:12:34.023Z", "date_modified": "2023-12-28T03:12:34.023Z", "change_user": null, @@ -72,7 +72,7 @@ "fields": { "project_status": "Test/Review", "project_higher_order_status": "Normal", - "project_status_order": 5, + "project_status_sort_order": 5, "date_created": "2023-12-28T03:12:34.023Z", "date_modified": "2023-12-28T03:12:34.023Z", "change_user": null, @@ -85,7 +85,7 @@ "fields": { "project_status": "Closed", "project_higher_order_status": "Closed", - "project_status_order": 6, + "project_status_sort_order": 6, "date_created": "2023-12-28T03:12:34.023Z", "date_modified": "2023-12-28T03:12:34.023Z", "change_user": null, @@ -480,7 +480,7 @@ "fields": { "task_status": "New", "task_higher_order_status": "Backlog", - "task_status_order": 1, + "task_status_sort_order": 1, "date_created": "2023-12-28T03:12:34.024Z", "date_modified": "2023-12-28T03:12:34.024Z", "change_user": null, @@ -493,7 +493,7 @@ "fields": { "task_status": "Backlog", "task_higher_order_status": "Backlog", - "task_status_order": 2, + "task_status_sort_order": 2, "date_created": "2023-12-28T03:12:34.024Z", "date_modified": "2023-12-28T03:12:34.024Z", "change_user": null, @@ -506,7 +506,7 @@ "fields": { "task_status": "Blocked", "task_higher_order_status": "Blocked", - "task_status_order": 3, + "task_status_sort_order": 3, "date_created": "2023-12-28T03:12:34.024Z", "date_modified": "2023-12-28T03:12:34.024Z", "change_user": null, @@ -519,7 +519,7 @@ "fields": { "task_status": "In Progress", "task_higher_order_status": "Normal", - "task_status_order": 4, + "task_status_sort_order": 4, "date_created": "2023-12-28T03:12:34.024Z", "date_modified": "2023-12-28T03:12:34.024Z", "change_user": null, @@ -532,7 +532,7 @@ "fields": { "task_status": "Test/Review", "task_higher_order_status": "Normal", - "task_status_order": 5, + "task_status_sort_order": 5, "date_created": "2023-12-28T03:12:34.024Z", "date_modified": "2023-12-28T03:12:34.024Z", "change_user": null, @@ -545,7 +545,7 @@ "fields": { "task_status": "Closed", "task_higher_order_status": "Closed", - "task_status_order": 6, + "task_status_sort_order": 6, "date_created": "2023-12-28T03:12:34.024Z", "date_modified": "2023-12-28T03:12:34.024Z", "change_user": null, diff --git a/NearBeach/forms.py b/NearBeach/forms.py index c2f27d64f..bcb3a2d2e 100644 --- a/NearBeach/forms.py +++ b/NearBeach/forms.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals from django import forms +from django.contrib.auth import get_user_model from django.contrib.auth.password_validation import validate_password from django.db.models import Case, When @@ -9,7 +10,7 @@ Folder, Group, Tag, - User, + # User, ChangeTask, Customer, KanbanColumn, @@ -17,6 +18,10 @@ TagAssignment, KanbanCard, KanbanBoard, + ListOfRequirementItemStatus, + ListOfRequirementStatus, + ListOfProjectStatus, + ListOfTaskStatus, Notification, ObjectNote, PermissionSet, @@ -34,6 +39,15 @@ UserSetting, ) +USER_MODEL = get_user_model() + +OBJECT_STATUS_LOOKUP = { + "requirement_item": ListOfRequirementItemStatus, + "requirement": ListOfRequirementStatus, + "project": ListOfProjectStatus, + "task": ListOfTaskStatus, +} + # CUSTOM Fields # https://stackoverflow.com/questions/10296333/django-multiplechoicefield-does-not-preserve-order-of-selected-values @@ -45,7 +59,7 @@ def clean(self, value): # Create the preserved condition - where we order it in the same order the user has sent back preserved = Case(*[When(pk=pk, then=pos) for pos, pk in enumerate(value)]) - #Return the order + # Return the order return qs.filter(pk__in=value).order_by(preserved) @@ -202,7 +216,7 @@ class AdminAddUserForm(forms.Form): queryset=PermissionSet.objects.all(), ) username = forms.ModelChoiceField( - queryset=User.objects.all(), + queryset=USER_MODEL.objects.all(), ) @@ -308,16 +322,6 @@ class DeleteLinkForm(forms.Form): ) -class DeleteNoteForm(forms.ModelForm): - object_note_id=forms.IntegerField() - - class Meta: - model = ObjectNote - fields = { - "object_note_id", - } - - class DeleteTagForm(forms.ModelForm): class Meta: model = TagAssignment @@ -328,6 +332,15 @@ class Meta: } +class DiagnosticUploadTestForm(forms.Form): + document = forms.FileField( + required=True, + ) + uuid = forms.UUIDField( + required=False, + ) + + class DocumentRemoveForm(forms.Form): document_key = forms.ModelChoiceField( queryset=Document.objects.all(), @@ -356,7 +369,7 @@ class Meta: class EditNoteForm(forms.ModelForm): - object_note_id=forms.IntegerField() + object_note_id = forms.IntegerField() class Meta: model = ObjectNote @@ -426,7 +439,7 @@ class KanbanCardArchiveForm(forms.Form): class AddUserForm(forms.Form): user_list = forms.ModelMultipleChoiceField( required=True, - queryset=User.objects.all(), + queryset=USER_MODEL.objects.all(), ) @@ -719,7 +732,21 @@ class Meta: ] -class NewUserForm(forms.ModelForm): +class NewUserForm(forms.Form): + username = forms.CharField( + max_length=150, + required=True, + ) + email = forms.CharField( + required=True, + max_length=255, + ) + first_name = forms.CharField( + required=False, + ) + last_name = forms.CharField( + required=False, + ) password1 = forms.CharField( max_length=255, required=True, @@ -729,16 +756,6 @@ class NewUserForm(forms.ModelForm): required=True, ) - # Basic Meta data - class Meta: - model = User - fields = [ - "username", - "first_name", - "last_name", - "email", - ] - class NotificationDeleteForm(forms.Form): notification_id = forms.ModelChoiceField( @@ -764,6 +781,60 @@ class Meta: ] +class ObjectStatusCreateForm(forms.Form): + status = forms.CharField( + max_length=100, + required=True, + ) + higher_order_status = forms.CharField( + max_length=10, + required=True, + ) + + +class ObjectStatusDeleteForm(forms.Form): + def __init__(self, *args, **kwargs): + self.destination = kwargs.pop("destination") + super(ObjectStatusDeleteForm, self).__init__(*args, **kwargs) + self.fields["status_id"] = forms.ModelChoiceField( + required=True, + queryset=OBJECT_STATUS_LOOKUP[self.destination].objects.all(), + ) + self.fields["migration_status_id"] = forms.ModelChoiceField( + required=True, + queryset=OBJECT_STATUS_LOOKUP[self.destination].objects.all(), + ) + + +class ObjectStatusReorderForm(forms.Form): + def __init__(self, *args, **kwargs): + self.destination = kwargs.pop("destination") + super(ObjectStatusReorderForm, self).__init__(*args, **kwargs) + self.fields["status_id"] = forms.ModelMultipleChoiceField( + required=True, + queryset=OBJECT_STATUS_LOOKUP[self.destination].objects.all(), + ) + + +class ObjectStatusUpdateForm(forms.Form): + status = forms.CharField( + max_length=100, + required=True, + ) + higher_order_status = forms.CharField( + max_length=10, + required=True, + ) + + def __init__(self, *args, **kwargs): + self.destination = kwargs.pop("destination") + super(ObjectStatusUpdateForm, self).__init__(*args, **kwargs) + self.fields["status_id"] = forms.ModelChoiceField( + required=True, + queryset=OBJECT_STATUS_LOOKUP[self.destination].objects.all(), + ) + + class OrganisationForm(forms.ModelForm): # Basic Meta data class Meta: @@ -787,7 +858,7 @@ class PasswordResetForm(forms.Form): required=True, ) username = forms.ModelChoiceField( - queryset=User.objects.all(), + queryset=USER_MODEL.objects.all(), required=True, ) @@ -900,7 +971,7 @@ class RemoveUserForm(forms.Form): class RfcModuleForm(forms.Form): - # This form is for all the sub modules that need to be saved separately. + # This form is for all the submodules that need to be saved separately. text_input = forms.CharField( required=True, ) @@ -979,14 +1050,14 @@ class Meta: class UpdateChangeLeadForm(forms.Form): username = forms.ModelChoiceField( - queryset=User.objects.all(), + queryset=USER_MODEL.objects.all(), required=True, ) class UpdateGroupLeaderStatusForm(forms.Form): username = forms.ModelChoiceField( - queryset=User.objects.all(), + queryset=USER_MODEL.objects.all(), required=False, ) group = forms.ModelMultipleChoiceField( @@ -1056,7 +1127,7 @@ class UpdateUserForm(forms.ModelForm): # Basic Meta Data class Meta: - model = User + model = get_user_model() fields = [ "email", "first_name", diff --git a/NearBeach/migrations/0025_rename_project_status_order_listofprojectstatus_project_status_sort_order_and_more.py b/NearBeach/migrations/0025_rename_project_status_order_listofprojectstatus_project_status_sort_order_and_more.py new file mode 100644 index 000000000..9c9a4574a --- /dev/null +++ b/NearBeach/migrations/0025_rename_project_status_order_listofprojectstatus_project_status_sort_order_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 5.0.1 on 2024-02-16 10:06 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("NearBeach", "0024_documentpermission_is_profile_picture"), + ] + + operations = [ + migrations.RenameField( + model_name="listofprojectstatus", + old_name="project_status_order", + new_name="project_status_sort_order", + ), + migrations.RenameField( + model_name="listoftaskstatus", + old_name="task_status_order", + new_name="task_status_sort_order", + ), + ] diff --git a/NearBeach/models.py b/NearBeach/models.py index 5790edbce..e9c75be61 100644 --- a/NearBeach/models.py +++ b/NearBeach/models.py @@ -1,9 +1,16 @@ from __future__ import unicode_literals + +from django.contrib.auth.base_user import AbstractBaseUser from django.db import models from .private_media import FileStorage from django.contrib.auth.models import User from django.utils.translation import gettext_lazy as _ import uuid +from django.conf import settings + + +# If user has overwritten the AUTH_USER_MODEL, user that. Otherwise default to User +USER_MODEL = getattr(settings, "AUTH_USER_MODEL", User) # ENUM choices DISCOUNT_CHOICE = ( @@ -193,7 +200,7 @@ class Bug(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", ) @@ -216,7 +223,7 @@ class BugClient(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", ) @@ -248,12 +255,12 @@ class ChangeTask(models.Model): default=0, ) change_task_assigned_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="change_assigned_user", ) change_task_qa_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="change_qa_user", ) @@ -270,12 +277,12 @@ class ChangeTask(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", ) creation_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_creation_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_creation_user" ) is_deleted = models.BooleanField( default=False, @@ -300,12 +307,12 @@ class ChangeTaskBlock(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", ) creation_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_creation_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_creation_user" ) is_deleted = models.BooleanField( default=False, @@ -339,7 +346,7 @@ class Customer(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -379,7 +386,7 @@ class Document(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -443,7 +450,7 @@ class DocumentPermission(models.Model): null=True, on_delete=models.CASCADE, ) - user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True) + user = models.ForeignKey(USER_MODEL, on_delete=models.CASCADE, null=True, blank=True) new_object = models.UUIDField( blank=True, null=True, @@ -460,7 +467,7 @@ class DocumentPermission(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -516,7 +523,7 @@ class Folder(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -540,7 +547,7 @@ class Group(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -563,7 +570,7 @@ class GroupPermission(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -590,10 +597,10 @@ class KanbanBoard(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) creation_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_creation_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_creation_user" ) is_deleted = models.BooleanField( default=False, @@ -651,7 +658,7 @@ class KanbanCard(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -677,7 +684,7 @@ class KanbanColumn(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -698,7 +705,7 @@ class KanbanLevel(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -725,7 +732,7 @@ class ListOfBugClient(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -749,13 +756,13 @@ class ListOfProjectStatus(models.Model): choices=OBJECT_HIGHER_ORDER_STATUS, default="Backlog", ) - project_status_order = models.PositiveIntegerField( + project_status_sort_order = models.PositiveIntegerField( default=0, ) date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -784,7 +791,7 @@ class ListOfRequirementItemStatus(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -806,7 +813,7 @@ class ListOfRequirementItemType(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -836,7 +843,7 @@ class ListOfRequirementStatus(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -858,7 +865,7 @@ class ListOfRequirementType(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -880,7 +887,7 @@ class ListOfRFCStatus(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -904,13 +911,13 @@ class ListOfTaskStatus(models.Model): choices=OBJECT_HIGHER_ORDER_STATUS, default="Backlog", ) - task_status_order = models.PositiveIntegerField( + task_status_sort_order = models.PositiveIntegerField( default=0, ) date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -930,7 +937,7 @@ class ListOfTitle(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -972,7 +979,7 @@ class Notification(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user", blank=True, @@ -1000,7 +1007,7 @@ class ObjectAssignment(models.Model): object_assignment_id = models.BigAutoField(primary_key=True) assigned_user = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_assigned_user", null=True, @@ -1102,7 +1109,7 @@ class ObjectAssignment(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1162,7 +1169,7 @@ class ObjectNote(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1183,7 +1190,7 @@ class Organisation(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1278,7 +1285,7 @@ class PermissionSet(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1316,10 +1323,10 @@ class Project(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) creation_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_creation_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_creation_user" ) is_deleted = models.BooleanField( default=False, @@ -1382,10 +1389,10 @@ class PublicLink(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) creation_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_creation_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_creation_user" ) is_deleted = models.BooleanField( default=False, @@ -1422,7 +1429,7 @@ class RequestForChange(models.Model): on_delete=models.CASCADE, ) rfc_lead = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, related_name="RfcLead", ) @@ -1453,10 +1460,10 @@ class RequestForChange(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) creation_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_creation_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_creation_user" ) is_deleted = models.BooleanField( default=False, @@ -1483,7 +1490,7 @@ class RequestForChangeGroupApproval(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1521,10 +1528,10 @@ class Requirement(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) creation_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_creation_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_creation_user" ) is_deleted = models.BooleanField( default=False, @@ -1558,7 +1565,7 @@ class RequirementItem(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1584,7 +1591,7 @@ class Tag(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1622,7 +1629,7 @@ class ObjectEnum(models.TextChoices): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1642,7 +1649,7 @@ class Task(models.Model): task_start_date = models.DateTimeField() task_end_date = models.DateTimeField() task_assigned_to = models.ForeignKey( - User, + USER_MODEL, null=True, blank=True, on_delete=models.CASCADE, @@ -1656,10 +1663,10 @@ class Task(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) creation_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_creation_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_creation_user" ) is_deleted = models.BooleanField( default=False, @@ -1672,7 +1679,7 @@ def __str__(self): class UserGroup(models.Model): user_group_id = models.BigAutoField(primary_key=True) username = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, ) group = models.ForeignKey( @@ -1684,7 +1691,7 @@ class UserGroup(models.Model): on_delete=models.CASCADE, ) report_to = models.ForeignKey( - User, + USER_MODEL, related_name="report_to", on_delete=models.CASCADE, null=True, @@ -1696,7 +1703,7 @@ class UserGroup(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1705,7 +1712,7 @@ class UserGroup(models.Model): class UserProfilePicture(models.Model): username = models.OneToOneField( - User, + USER_MODEL, on_delete=models.CASCADE, primary_key=True, ) @@ -1716,7 +1723,7 @@ class UserProfilePicture(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = models.DateTimeField(auto_now=True) change_user = models.ForeignKey( - User, on_delete=models.CASCADE, related_name="%(class)s_change_user" + USER_MODEL, on_delete=models.CASCADE, related_name="%(class)s_change_user" ) is_deleted = models.BooleanField( default=False, @@ -1737,7 +1744,7 @@ class SettingType(models.TextChoices): user_setting_id = models.BigAutoField(primary_key=True) username = models.ForeignKey( - User, + USER_MODEL, on_delete=models.CASCADE, ) setting_type = models.CharField( diff --git a/NearBeach/static/NearBeach/1080.min.js b/NearBeach/static/NearBeach/1080.min.js new file mode 100644 index 000000000..857343f50 --- /dev/null +++ b/NearBeach/static/NearBeach/1080.min.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunknearbeach=self.webpackChunknearbeach||[]).push([[1080],{4041:(e,n,o)=>{function t(e){return"string"==typeof e?e.endsWith("px")?Number(e.slice(0,e.length-2)):Number(e):e}function r(e){if(null!=e)return"number"==typeof e?`${e}px`:e.endsWith("px")?e:`${e}px`}function l(e,n){const o=e.trim().split(/\s+/g),t={top:o[0]};switch(o.length){case 1:t.right=o[0],t.bottom=o[0],t.left=o[0];break;case 2:t.right=o[1],t.left=o[1],t.bottom=o[0];break;case 3:t.right=o[1],t.bottom=o[2],t.left=o[1];break;case 4:t.right=o[1],t.bottom=o[2],t.left=o[3];break;default:throw new Error("[seemly/getMargin]:"+e+" is not a valid value.")}return void 0===n?t:t[n]}function i(e,n){const[o,t]=e.split(" ");return n?"row"===n?o:t:{row:o,col:t||o}}o.d(n,{Cq:()=>l,Cw:()=>r,Tj:()=>l,eV:()=>t,t8:()=>i})},3587:(e,n,o)=>{function t(e,n){let{target:o}=e;for(;o;){if(o.dataset&&void 0!==o.dataset[n])return!0;o=o.parentElement}return!1}o.d(n,{d:()=>t})},2061:(e,n,o)=>{o.d(n,{A:()=>b});var t=o(641),r=o(953),l=o(4041),i=o(2033),a=o(9440),s=o(266),c=o(2074),d=o(8933);function u(e){return e&-e}class h{constructor(e,n){this.l=e,this.min=n;const o=new Array(e+1);for(let n=0;nt)throw new Error("[FinweckTree.sum]: `i` is larger than length.");let r=e*o;for(;e>0;)r+=n[e],e-=u(e);return r}getBound(e){let n=0,o=this.l;for(;o>n;){const t=Math.floor((n+o)/2),r=this.sum(t);if(r>e)o=t;else{if(!(r[]},itemSize:{type:Number,required:!0},itemResizable:Boolean,itemsStyle:[String,Object],visibleItemsTag:{type:[String,Object],default:"div"},visibleItemsProps:Object,ignoreItemResize:Boolean,onScroll:Function,onWheel:Function,onResize:Function,defaultScrollKey:[Number,String],defaultScrollIndex:Number,keyField:{type:String,default:"key"},paddingTop:{type:[Number,String],default:0},paddingBottom:{type:[Number,String],default:0}},setup(e){const n=(0,s.h)();g.mount({id:"vueuc/virtual-list",head:!0,anchorMetaName:d.r,ssr:n}),(0,t.sV)((()=>{const{defaultScrollIndex:n,defaultScrollKey:o}=e;null!=n?F({index:n}):null!=o&&F({key:o})}));let o=!1,c=!1;(0,t.n)((()=>{o=!1,c?F({top:x.value,left:w}):c=!0})),(0,t.Y4)((()=>{o=!0,c||(c=!0)}));const u=(0,t.EW)((()=>{const n=new Map,{keyField:o}=e;return e.items.forEach(((e,t)=>{n.set(e[o],t)})),n})),v=(0,r.KR)(null),b=(0,r.KR)(void 0),m=new Map,y=(0,t.EW)((()=>{const{items:n,itemSize:o,keyField:t}=e,r=new h(n.length,o);return n.forEach(((e,n)=>{const o=e[t],l=m.get(o);void 0!==l&&r.add(n,l)})),r})),C=(0,r.KR)(0);let w=0;const x=(0,r.KR)(0),k=(0,a.A)((()=>Math.max(y.value.getBound(x.value-(0,l.eV)(e.paddingTop))-1,0))),S=(0,t.EW)((()=>{const{value:n}=b;if(void 0===n)return[];const{items:o,itemSize:t}=e,r=k.value,l=Math.min(r+Math.ceil(n/t+1),o.length-1),i=[];for(let e=r;e<=l;++e)i.push(o[e]);return i})),F=(e,n)=>{if("number"==typeof e)return void B(e,n,"auto");const{left:o,top:t,index:r,key:l,position:i,behavior:a,debounce:s=!0}=e;if(void 0!==o||void 0!==t)B(o,t,a);else if(void 0!==r)P(r,a,s);else if(void 0!==l){const e=u.value.get(l);void 0!==e&&P(e,a,s)}else"bottom"===i?B(0,Number.MAX_SAFE_INTEGER,a):"top"===i&&B(0,0,a)};let z,R=null;function P(n,o,t){const{value:r}=y,i=r.sum(n)+(0,l.eV)(e.paddingTop);if(t){z=n,null!==R&&window.clearTimeout(R),R=window.setTimeout((()=>{z=void 0,R=null}),16);const{scrollTop:e,offsetHeight:t}=v.value;if(i>e){const l=r.get(n);i+l<=e+t||v.value.scrollTo({left:0,top:i+l-t,behavior:o})}else v.value.scrollTo({left:0,top:i,behavior:o})}else v.value.scrollTo({left:0,top:i,behavior:o})}function B(e,n,o){v.value.scrollTo({left:e,top:n,behavior:o})}const M=!("undefined"!=typeof document&&(void 0===p&&(p="matchMedia"in window&&window.matchMedia("(pointer:coarse)").matches),p));let T=!1;function A(){const{value:e}=v;null!=e&&(x.value=e.scrollTop,w=e.scrollLeft)}function E(e){let n=e;for(;null!==n;){if("none"===n.style.display)return!0;n=n.parentElement}return!1}return{listHeight:b,listStyle:{overflow:"auto"},keyToIndex:u,itemsStyle:(0,t.EW)((()=>{const{itemResizable:n}=e,o=(0,l.Cw)(y.value.sum());return C.value,[e.itemsStyle,{boxSizing:"content-box",height:n?"":o,minHeight:n?o:"",paddingTop:(0,l.Cw)(e.paddingTop),paddingBottom:(0,l.Cw)(e.paddingBottom)}]})),visibleItemsStyle:(0,t.EW)((()=>(C.value,{transform:`translateY(${(0,l.Cw)(y.value.sum(k.value))})`}))),viewportItems:S,listElRef:v,itemsElRef:(0,r.KR)(null),scrollTo:F,handleListResize:function(n){if(o)return;if(E(n.target))return;if(n.contentRect.height===b.value)return;b.value=n.contentRect.height;const{onResize:t}=e;void 0!==t&&t(n)},handleListScroll:function(n){var o;null===(o=e.onScroll)||void 0===o||o.call(e,n),M&&T||A()},handleListWheel:function(n){var o;if(null===(o=e.onWheel)||void 0===o||o.call(e,n),M){const e=v.value;if(null!=e){if(0===n.deltaX){if(0===e.scrollTop&&n.deltaY<=0)return;if(e.scrollTop+e.offsetHeight>=e.scrollHeight&&n.deltaY>=0)return}n.preventDefault(),e.scrollTop+=n.deltaY/f(),e.scrollLeft+=n.deltaX/f(),A(),T=!0,(0,i.B)((()=>{T=!1}))}}},handleItemResize:function(n,t){var r,l,i;if(o)return;if(e.ignoreItemResize)return;if(E(t.target))return;const{value:a}=y,s=u.value.get(n),c=a.get(s),d=null!==(i=null===(l=null===(r=t.borderBoxSize)||void 0===r?void 0:r[0])||void 0===l?void 0:l.blockSize)&&void 0!==i?i:t.contentRect.height;if(d===c)return;0==d-e.itemSize?m.delete(n):m.set(n,d-e.itemSize);const h=d-c;if(0===h)return;a.add(s,h);const p=v.value;if(null!=p){if(void 0===z){const e=a.sum(s);p.scrollTop>e&&p.scrollBy(0,h)}else(sp.scrollTop+p.offsetHeight)&&p.scrollBy(0,h);A()}C.value++}}},render(){const{itemResizable:e,keyField:n,keyToIndex:o,visibleItemsTag:r}=this;return(0,t.h)(c.A,{onResize:this.handleListResize},{default:()=>{var l,i;return(0,t.h)("div",(0,t.v6)(this.$attrs,{class:["v-vl",this.showScrollbar&&"v-vl--show-scrollbar"],onScroll:this.handleListScroll,onWheel:this.handleListWheel,ref:"listElRef"}),[0!==this.items.length?(0,t.h)("div",{ref:"itemsElRef",class:"v-vl-items",style:this.itemsStyle},[(0,t.h)(r,Object.assign({class:"v-vl-visible-items",style:this.visibleItemsStyle},this.visibleItemsProps),{default:()=>this.viewportItems.map((r=>{const l=r[n],i=o.get(l),a=this.$slots.default({item:r,index:i})[0];return e?(0,t.h)(c.A,{key:l,onResize:e=>this.handleItemResize(l,e)},{default:()=>a}):(a.key=l,a)}))})]):null===(i=(l=this.$slots).empty)||void 0===i?void 0:i.call(l)])}})}})},2897:(e,n,o)=>{o.d(n,{A:()=>p});var t=o(641),r=o(953),l=o(9521),i=o(2011);const a=(0,o(1392).l)("clear",(0,t.h)("svg",{viewBox:"0 0 16 16",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},(0,t.h)("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},(0,t.h)("g",{fill:"currentColor","fill-rule":"nonzero"},(0,t.h)("path",{d:"M8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 C2,4.6862915 4.6862915,2 8,2 Z M6.5343055,5.83859116 C6.33943736,5.70359511 6.07001296,5.72288026 5.89644661,5.89644661 L5.89644661,5.89644661 L5.83859116,5.9656945 C5.70359511,6.16056264 5.72288026,6.42998704 5.89644661,6.60355339 L5.89644661,6.60355339 L7.293,8 L5.89644661,9.39644661 L5.83859116,9.4656945 C5.70359511,9.66056264 5.72288026,9.92998704 5.89644661,10.1035534 L5.89644661,10.1035534 L5.9656945,10.1614088 C6.16056264,10.2964049 6.42998704,10.2771197 6.60355339,10.1035534 L6.60355339,10.1035534 L8,8.707 L9.39644661,10.1035534 L9.4656945,10.1614088 C9.66056264,10.2964049 9.92998704,10.2771197 10.1035534,10.1035534 L10.1035534,10.1035534 L10.1614088,10.0343055 C10.2964049,9.83943736 10.2771197,9.57001296 10.1035534,9.39644661 L10.1035534,9.39644661 L8.707,8 L10.1035534,6.60355339 L10.1614088,6.5343055 C10.2964049,6.33943736 10.2771197,6.07001296 10.1035534,5.89644661 L10.1035534,5.89644661 L10.0343055,5.83859116 C9.83943736,5.70359511 9.57001296,5.72288026 9.39644661,5.89644661 L9.39644661,5.89644661 L8,7.293 L6.60355339,5.89644661 Z"})))));var s=o(2494),c=o(9819),d=o(7872),u=o(8454);const h=(0,d.cB)("base-clear","\n flex-shrink: 0;\n height: 1em;\n width: 1em;\n position: relative;\n",[(0,d.c)(">",[(0,d.cE)("clear","\n font-size: var(--n-clear-size);\n height: 1em;\n width: 1em;\n cursor: pointer;\n color: var(--n-clear-color);\n transition: color .3s var(--n-bezier);\n display: flex;\n ",[(0,d.c)("&:hover","\n color: var(--n-clear-color-hover)!important;\n "),(0,d.c)("&:active","\n color: var(--n-clear-color-pressed)!important;\n ")]),(0,d.cE)("placeholder","\n display: flex;\n "),(0,d.cE)("clear, placeholder","\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n ",[(0,u.N)({originalTransform:"translateX(-50%) translateY(-50%)",left:"50%",top:"50%"})])])]),p=(0,t.pM)({name:"BaseClear",props:{clsPrefix:{type:String,required:!0},show:Boolean,onClear:Function},setup:e=>((0,i.A)("-base-clear",h,(0,r.lW)(e,"clsPrefix")),{handleMouseDown(e){e.preventDefault()}}),render(){const{clsPrefix:e}=this;return(0,t.h)("div",{class:`${e}-base-clear`},(0,t.h)(c.A,null,{default:()=>{var n,o;return this.show?(0,t.h)("div",{key:"dismiss",class:`${e}-base-clear__clear`,onClick:this.onClear,onMousedown:this.handleMouseDown,"data-clear":!0},(0,l.Nj)(this.$slots.icon,(()=>[(0,t.h)(s.A,{clsPrefix:e},{default:()=>(0,t.h)(a,null)})]))):(0,t.h)("div",{key:"icon",class:`${e}-base-clear__placeholder`},null===(o=(n=this.$slots).placeholder)||void 0===o?void 0:o.call(n))}}))}})},9104:(e,n,o)=>{o.d(n,{A:()=>r});var t=o(641);const r=(0,t.pM)({props:{onFocus:Function,onBlur:Function},setup:e=>()=>(0,t.h)("div",{style:"width: 0; height: 0",tabindex:0,onFocus:e.onFocus,onBlur:e.onBlur})})},1111:(e,n,o)=>{o.d(n,{A:()=>c});var t=o(641),r=o(2897),l=o(2778),i=o(2494);const a=(0,t.pM)({name:"ChevronDown",render:()=>(0,t.h)("svg",{viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,t.h)("path",{d:"M3.14645 5.64645C3.34171 5.45118 3.65829 5.45118 3.85355 5.64645L8 9.79289L12.1464 5.64645C12.3417 5.45118 12.6583 5.45118 12.8536 5.64645C13.0488 5.84171 13.0488 6.15829 12.8536 6.35355L8.35355 10.8536C8.15829 11.0488 7.84171 11.0488 7.64645 10.8536L3.14645 6.35355C2.95118 6.15829 2.95118 5.84171 3.14645 5.64645Z",fill:"currentColor"}))});var s=o(9521);const c=(0,t.pM)({name:"InternalSelectionSuffix",props:{clsPrefix:{type:String,required:!0},showArrow:{type:Boolean,default:void 0},showClear:{type:Boolean,default:void 0},loading:{type:Boolean,default:!1},onClear:Function},setup:(e,{slots:n})=>()=>{const{clsPrefix:o}=e;return(0,t.h)(l.A,{clsPrefix:o,class:`${o}-base-suffix`,strokeWidth:24,scale:.85,show:e.loading},{default:()=>e.showArrow?(0,t.h)(r.A,{clsPrefix:o,show:e.showClear,onClear:e.onClear},{placeholder:()=>(0,t.h)(i.A,{clsPrefix:o,class:`${o}-base-suffix__arrow`},{default:()=>(0,s.Nj)(n.default,(()=>[(0,t.h)(a,null)]))})}):null})}})},3832:(e,n,o)=>{o.d(n,{z:()=>r});const t=new WeakSet;function r(e){t.add(e)}},1080:(e,n,o)=>{o.d(n,{A:()=>Ye});var t=o(641),r=o(953),l=o(3751),i=o(6389),a=o(3587);function s(e){return Array.isArray(e)?e:[e]}const c={STOP:"STOP"};function d(e,n){const o=n(e);void 0!==e.children&&o!==c.STOP&&e.children.forEach((e=>d(e,n)))}function u(e){return e.children}function h(e){return e.key}function p(){return!1}function v(e){return!0===e.disabled}function f(e){var n;return null==e?[]:Array.isArray(e)?e:null!==(n=e.checkedKeys)&&void 0!==n?n:[]}function g(e){var n;return null==e||Array.isArray(e)?[]:null!==(n=e.indeterminateKeys)&&void 0!==n?n:[]}function b(e,n){const o=new Set(e);return n.forEach((e=>{o.has(e)||o.add(e)})),Array.from(o)}function m(e,n){const o=new Set(e);return n.forEach((e=>{o.has(e)&&o.delete(e)})),Array.from(o)}function y(e){return"group"===(null==e?void 0:e.type)}class C extends Error{constructor(){super(),this.message="SubtreeNotLoadedError: checking a subtree whose required nodes are not fully loaded."}}function w(e,n){const{checkedKeys:o,keysToCheck:t,keysToUncheck:r,indeterminateKeys:l,cascade:i,leafOnly:a,checkStrategy:s,allowNotLoaded:c}=e;if(!i)return void 0!==t?{checkedKeys:b(o,t),indeterminateKeys:Array.from(l)}:void 0!==r?{checkedKeys:m(o,r),indeterminateKeys:Array.from(l)}:{checkedKeys:Array.from(o),indeterminateKeys:Array.from(l)};const{levelTreeNodeMap:d}=n;let u;u=void 0!==r?function(e,n,o,t){const r=x(n,o,t,!1),l=x(e,o,t,!0),i=function(e,n){const o=new Set;return e.forEach((e=>{const t=n.treeNodeMap.get(e);if(void 0!==t){let e=t.parent;for(;null!==e&&!e.disabled&&!o.has(e.key);)o.add(e.key),e=e.parent}})),o}(e,o),a=[];return r.forEach((e=>{(l.has(e)||i.has(e))&&a.push(e)})),a.forEach((e=>r.delete(e))),r}(r,o,n,c):void 0!==t?function(e,n,o,t){return x(n.concat(e),o,t,!1)}(t,o,n,c):x(o,n,c,!1);const h="parent"===s,p="child"===s||a,v=u,f=new Set;for(let e=Math.max.apply(null,Array.from(d.keys()));e>=0;e-=1){const n=0===e,o=d.get(e);for(const e of o){if(e.isLeaf)continue;const{key:o,shallowLoaded:t}=e;if(p&&t&&e.children.forEach((e=>{!e.disabled&&!e.isLeaf&&e.shallowLoaded&&v.has(e.key)&&v.delete(e.key)})),e.disabled||!t)continue;let r=!0,l=!1,i=!0;for(const n of e.children){const e=n.key;if(!n.disabled)if(i&&(i=!1),v.has(e))l=!0;else{if(f.has(e)){l=!0,r=!1;break}if(r=!1,l)break}}r&&!i?(h&&e.children.forEach((e=>{!e.disabled&&v.has(e.key)&&v.delete(e.key)})),v.add(o)):l&&f.add(o),n&&p&&v.has(o)&&v.delete(o)}}return{checkedKeys:Array.from(v),indeterminateKeys:Array.from(f)}}function x(e,n,o,t){const{treeNodeMap:r,getChildren:l}=n,i=new Set,a=new Set(e);return e.forEach((e=>{const n=r.get(e);void 0!==n&&d(n,(e=>{if(e.disabled)return c.STOP;const{key:n}=e;if(!i.has(n)&&(i.add(n),a.add(n),function(e,n){return!1===e.isLeaf&&!Array.isArray(n(e))}(e.rawNode,l))){if(t)return c.STOP;if(!o)throw new C}}))})),a}function k(e,n){const o=e.siblings,t=o.length,{index:r}=e;return n?o[(r+1)%t]:r===o.length-1?null:o[r+1]}function S(e,n,{loop:o=!1,includeDisabled:t=!1}={}){const r="prev"===n?F:k,l={reverse:"prev"===n};let i=!1,a=null;return function n(s){if(null!==s){if(s===e)if(i){if(!e.disabled&&!e.isGroup)return void(a=e)}else i=!0;else if((!s.disabled||t)&&!s.ignored&&!s.isGroup)return void(a=s);if(s.isGroup){const e=z(s,l);null!==e?a=e:n(r(s,o))}else{const e=r(s,!1);if(null!==e)n(e);else{const e=function(e){return e.parent}(s);(null==e?void 0:e.isGroup)?n(r(e,o)):o&&n(r(s,!0))}}}}(e),a}function F(e,n){const o=e.siblings,t=o.length,{index:r}=e;return n?o[(r-1+t)%t]:0===r?null:o[r-1]}function z(e,n={}){const{reverse:o=!1}=n,{children:t}=e;if(t){const{length:e}=t,r=o?-1:e,l=o?-1:1;for(let i=o?e-1:0;i!==r;i+=l){const e=t[i];if(!e.disabled&&!e.ignored){if(!e.isGroup)return e;{const o=z(e,n);if(null!==o)return o}}}}return null}const R={getChild(){return this.ignored?null:z(this)},getParent(){const{parent:e}=this;return(null==e?void 0:e.isGroup)?e.getParent():e},getNext(e={}){return S(this,"next",e)},getPrev(e={}){return S(this,"prev",e)}};function P(e,n,o,t,r,l=null,i=0){const a=[];return e.forEach(((s,c)=>{var d;const u=Object.create(t);if(u.rawNode=s,u.siblings=a,u.level=i,u.index=c,u.isFirstChild=0===c,u.isLastChild=c+1===e.length,u.parent=l,!u.ignored){const e=r(s);Array.isArray(e)&&(u.children=P(e,n,o,t,r,u,i+1))}a.push(u),n.set(u.key,u),o.has(i)||o.set(i,[]),null===(d=o.get(i))||void 0===d||d.push(u)})),a}function B(e,n={}){var o;const t=new Map,r=new Map,{getDisabled:l=v,getIgnored:i=p,getIsGroup:a=y,getKey:c=h}=n,d=null!==(o=n.getChildren)&&void 0!==o?o:u,b=n.ignoreEmptyChildren?e=>{const n=d(e);return Array.isArray(n)?n.length?n:null:n}:d,m=Object.assign({get key(){return c(this.rawNode)},get disabled(){return l(this.rawNode)},get isGroup(){return a(this.rawNode)},get isLeaf(){return function(e,n){const{isLeaf:o}=e;return void 0!==o?o:!n(e)}(this.rawNode,b)},get shallowLoaded(){return function(e,n){const{isLeaf:o}=e;return!(!1===o&&!Array.isArray(n(e)))}(this.rawNode,b)},get ignored(){return i(this.rawNode)},contains(e){return function(e,n){const o=e.key;for(;n;){if(n.key===o)return!0;n=n.parent}return!1}(this,e)}},R),C=P(e,t,r,m,b);function x(e){if(null==e)return null;const n=t.get(e);return n&&!n.ignored?n:null}const k={treeNodes:C,treeNodeMap:t,levelTreeNodeMap:r,maxLevel:Math.max(...r.keys()),getChildren:b,getFlattenedNodes:e=>function(e,n){const o=n?new Set(n):void 0,t=[];return function e(n){n.forEach((n=>{t.push(n),n.isLeaf||!n.children||n.ignored||(n.isGroup||void 0===o||o.has(n.key))&&e(n.children)}))}(e),t}(C,e),getNode:function(e){if(null==e)return null;const n=t.get(e);return!n||n.isGroup||n.ignored?null:n},getPrev:function(e,n){const o=x(e);return o?o.getPrev(n):null},getNext:function(e,n){const o=x(e);return o?o.getNext(n):null},getParent:function(e){const n=x(e);return n?n.getParent():null},getChild:function(e){const n=x(e);return n?n.getChild():null},getFirstAvailableNode:()=>function(e){if(0===e.length)return null;const n=e[0];return n.isGroup||n.ignored||n.disabled?n.getNext():n}(C),getPath:(e,n={})=>function(e,{includeGroup:n=!1,includeSelf:o=!0},t){var r;const l=t.treeNodeMap;let i=null==e?null:null!==(r=l.get(e))&&void 0!==r?r:null;const a={keyPath:[],treeNodePath:[],treeNode:i};if(null==i?void 0:i.ignored)return a.treeNode=null,a;for(;i;)i.ignored||!n&&i.isGroup||a.treeNodePath.push(i),i=i.parent;return a.treeNodePath.reverse(),o||a.treeNodePath.pop(),a.keyPath=a.treeNodePath.map((e=>e.key)),a}(e,n,k),getCheckedKeys(e,n={}){const{cascade:o=!0,leafOnly:t=!1,checkStrategy:r="all",allowNotLoaded:l=!1}=n;return w({checkedKeys:f(e),indeterminateKeys:g(e),cascade:o,leafOnly:t,checkStrategy:r,allowNotLoaded:l},k)},check(e,n,o={}){const{cascade:t=!0,leafOnly:r=!1,checkStrategy:l="all",allowNotLoaded:i=!1}=o;return w({checkedKeys:f(n),indeterminateKeys:g(n),keysToCheck:null==e?[]:s(e),cascade:t,leafOnly:r,checkStrategy:l,allowNotLoaded:i},k)},uncheck(e,n,o={}){const{cascade:t=!0,leafOnly:r=!1,checkStrategy:l="all",allowNotLoaded:i=!1}=o;return w({checkedKeys:f(n),indeterminateKeys:g(n),keysToUncheck:null==e?[]:s(e),cascade:t,leafOnly:r,checkStrategy:l,allowNotLoaded:i},k)},getNonLeafKeys:(e={})=>function(e,n={}){const{preserveGroup:o=!1}=n,t=[],r=o?e=>{e.isLeaf||(t.push(e.key),l(e.children))}:e=>{e.isLeaf||(e.isGroup||t.push(e.key),l(e.children))};function l(e){e.forEach(r)}return l(e),t}(C,e)};return k}var M=o(4642),T=o(8895),A=o(7586),E=o(5562),O=o(8872),I=o(5015),$=o(5575),L=o(9359),W=o(922),N=o(8423),K=o(3370),D=o(4019),_=o(5603),H=o(6680),j=o(3832),V=o(266),Q=o(8933);const X="v-hidden",G=(0,Q.c)("[v-hidden]",{display:"none!important"}),U=(0,t.pM)({name:"Overflow",props:{getCounter:Function,getTail:Function,updateCounter:Function,onUpdateCount:Function,onUpdateOverflow:Function},setup(e,{slots:n}){const o=(0,r.KR)(null),l=(0,r.KR)(null);function i(t){const{value:r}=o,{getCounter:i,getTail:a}=e;let s;if(s=void 0!==i?i():l.value,!r||!s)return;s.hasAttribute(X)&&s.removeAttribute(X);const{children:c}=r;if(t.showAllItemsBeforeCalculate)for(const e of c)e.hasAttribute(X)&&e.removeAttribute(X);const d=r.offsetWidth,u=[],h=n.tail?null==a?void 0:a():null;let p=h?h.offsetWidth:0,v=!1;const f=r.children.length-(n.tail?1:0);for(let n=0;nd){const{updateCounter:o}=e;for(let t=n;t>=0;--t){const r=f-1-t;void 0!==o?o(r):s.textContent=`${r}`;const l=s.offsetWidth;if(p-=u[t],p+l<=d||0===t){v=!0,n=t-1,h&&(-1===n?(h.style.maxWidth=d-l+"px",h.style.boxSizing="border-box"):h.style.maxWidth="");const{onUpdateCount:o}=e;o&&o(r);break}}}}const{onUpdateOverflow:g}=e;v?void 0!==g&&g(!0):(void 0!==g&&g(!1),s.setAttribute(X,""))}const a=(0,V.h)();return G.mount({id:"vueuc/overflow",head:!0,anchorMetaName:Q.r,ssr:a}),(0,t.sV)((()=>i({showAllItemsBeforeCalculate:!1}))),{selfRef:o,counterRef:l,sync:i}},render(){const{$slots:e}=this;return(0,t.dY)((()=>this.sync({showAllItemsBeforeCalculate:!1}))),(0,t.h)("div",{class:"v-overflow",ref:"selfRef"},[(0,t.RG)(e,"default"),e.counter?e.counter():(0,t.h)("span",{style:{display:"inline-block"},ref:"counterRef"}),e.tail?e.tail():null])}});var q=o(4611),Y=o(3051),Z=o(2011),J=o(2494);const ee=(0,o(1392).l)("close",(0,t.h)("svg",{viewBox:"0 0 12 12",version:"1.1",xmlns:"http://www.w3.org/2000/svg","aria-hidden":!0},(0,t.h)("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},(0,t.h)("g",{fill:"currentColor","fill-rule":"nonzero"},(0,t.h)("path",{d:"M2.08859116,2.2156945 L2.14644661,2.14644661 C2.32001296,1.97288026 2.58943736,1.95359511 2.7843055,2.08859116 L2.85355339,2.14644661 L6,5.293 L9.14644661,2.14644661 C9.34170876,1.95118446 9.65829124,1.95118446 9.85355339,2.14644661 C10.0488155,2.34170876 10.0488155,2.65829124 9.85355339,2.85355339 L6.707,6 L9.85355339,9.14644661 C10.0271197,9.32001296 10.0464049,9.58943736 9.91140884,9.7843055 L9.85355339,9.85355339 C9.67998704,10.0271197 9.41056264,10.0464049 9.2156945,9.91140884 L9.14644661,9.85355339 L6,6.707 L2.85355339,9.85355339 C2.65829124,10.0488155 2.34170876,10.0488155 2.14644661,9.85355339 C1.95118446,9.65829124 1.95118446,9.34170876 2.14644661,9.14644661 L5.293,6 L2.14644661,2.85355339 C1.97288026,2.67998704 1.95359511,2.41056264 2.08859116,2.2156945 L2.14644661,2.14644661 L2.08859116,2.2156945 Z"})))));var ne=o(7872);const oe=(0,ne.cB)("base-close","\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n background-color: transparent;\n color: var(--n-close-icon-color);\n border-radius: var(--n-close-border-radius);\n height: var(--n-close-size);\n width: var(--n-close-size);\n font-size: var(--n-close-icon-size);\n outline: none;\n border: none;\n position: relative;\n padding: 0;\n",[(0,ne.cM)("absolute","\n height: var(--n-close-icon-size);\n width: var(--n-close-icon-size);\n "),(0,ne.c)("&::before",'\n content: "";\n position: absolute;\n width: var(--n-close-size);\n height: var(--n-close-size);\n left: 50%;\n top: 50%;\n transform: translateY(-50%) translateX(-50%);\n transition: inherit;\n border-radius: inherit;\n '),(0,ne.C5)("disabled",[(0,ne.c)("&:hover","\n color: var(--n-close-icon-color-hover);\n "),(0,ne.c)("&:hover::before","\n background-color: var(--n-close-color-hover);\n "),(0,ne.c)("&:focus::before","\n background-color: var(--n-close-color-hover);\n "),(0,ne.c)("&:active","\n color: var(--n-close-icon-color-pressed);\n "),(0,ne.c)("&:active::before","\n background-color: var(--n-close-color-pressed);\n ")]),(0,ne.cM)("disabled","\n cursor: not-allowed;\n color: var(--n-close-icon-color-disabled);\n background-color: transparent;\n "),(0,ne.cM)("round",[(0,ne.c)("&::before","\n border-radius: 50%;\n ")])]),te=(0,t.pM)({name:"BaseClose",props:{isButtonTag:{type:Boolean,default:!0},clsPrefix:{type:String,required:!0},disabled:{type:Boolean,default:void 0},focusable:{type:Boolean,default:!0},round:Boolean,onClick:Function,absolute:Boolean},setup:e=>((0,Z.A)("-base-close",oe,(0,r.lW)(e,"clsPrefix")),()=>{const{clsPrefix:n,disabled:o,absolute:r,round:l,isButtonTag:i}=e,a=i?"button":"div";return(0,t.h)(a,{type:i?"button":void 0,tabindex:o||!e.focusable?-1:0,"aria-disabled":o,"aria-label":"close",role:i?void 0:"button",disabled:o,class:[`${n}-base-close`,r&&`${n}-base-close--absolute`,o&&`${n}-base-close--disabled`,l&&`${n}-base-close--round`],onMousedown:n=>{e.focusable||n.preventDefault()},onClick:e.onClick},(0,t.h)(J.A,{clsPrefix:n},{default:()=>(0,t.h)(ee,null)}))})});var re=o(9794),le=o(4298),ie=o(9521),ae=o(9166),se=o(4484);const ce={name:"Tag",common:o(8880).A,self:e=>{const{textColor2:n,primaryColorHover:o,primaryColorPressed:t,primaryColor:r,infoColor:l,successColor:i,warningColor:a,errorColor:s,baseColor:c,borderColor:d,opacityDisabled:u,tagColor:h,closeIconColor:p,closeIconColorHover:v,closeIconColorPressed:f,borderRadiusSmall:g,fontSizeMini:b,fontSizeTiny:m,fontSizeSmall:y,fontSizeMedium:C,heightMini:w,heightTiny:x,heightSmall:k,heightMedium:S,closeColorHover:F,closeColorPressed:z,buttonColor2Hover:R,buttonColor2Pressed:P,fontWeightStrong:B}=e;return Object.assign(Object.assign({},ae.A),{closeBorderRadius:g,heightTiny:w,heightSmall:x,heightMedium:k,heightLarge:S,borderRadius:g,opacityDisabled:u,fontSizeTiny:b,fontSizeSmall:m,fontSizeMedium:y,fontSizeLarge:C,fontWeightStrong:B,textColorCheckable:n,textColorHoverCheckable:n,textColorPressedCheckable:n,textColorChecked:c,colorCheckable:"#0000",colorHoverCheckable:R,colorPressedCheckable:P,colorChecked:r,colorCheckedHover:o,colorCheckedPressed:t,border:`1px solid ${d}`,textColor:n,color:h,colorBordered:"rgb(250, 250, 252)",closeIconColor:p,closeIconColorHover:v,closeIconColorPressed:f,closeColorHover:F,closeColorPressed:z,borderPrimary:`1px solid ${(0,se.QX)(r,{alpha:.3})}`,textColorPrimary:r,colorPrimary:(0,se.QX)(r,{alpha:.12}),colorBorderedPrimary:(0,se.QX)(r,{alpha:.1}),closeIconColorPrimary:r,closeIconColorHoverPrimary:r,closeIconColorPressedPrimary:r,closeColorHoverPrimary:(0,se.QX)(r,{alpha:.12}),closeColorPressedPrimary:(0,se.QX)(r,{alpha:.18}),borderInfo:`1px solid ${(0,se.QX)(l,{alpha:.3})}`,textColorInfo:l,colorInfo:(0,se.QX)(l,{alpha:.12}),colorBorderedInfo:(0,se.QX)(l,{alpha:.1}),closeIconColorInfo:l,closeIconColorHoverInfo:l,closeIconColorPressedInfo:l,closeColorHoverInfo:(0,se.QX)(l,{alpha:.12}),closeColorPressedInfo:(0,se.QX)(l,{alpha:.18}),borderSuccess:`1px solid ${(0,se.QX)(i,{alpha:.3})}`,textColorSuccess:i,colorSuccess:(0,se.QX)(i,{alpha:.12}),colorBorderedSuccess:(0,se.QX)(i,{alpha:.1}),closeIconColorSuccess:i,closeIconColorHoverSuccess:i,closeIconColorPressedSuccess:i,closeColorHoverSuccess:(0,se.QX)(i,{alpha:.12}),closeColorPressedSuccess:(0,se.QX)(i,{alpha:.18}),borderWarning:`1px solid ${(0,se.QX)(a,{alpha:.35})}`,textColorWarning:a,colorWarning:(0,se.QX)(a,{alpha:.15}),colorBorderedWarning:(0,se.QX)(a,{alpha:.12}),closeIconColorWarning:a,closeIconColorHoverWarning:a,closeIconColorPressedWarning:a,closeColorHoverWarning:(0,se.QX)(a,{alpha:.12}),closeColorPressedWarning:(0,se.QX)(a,{alpha:.18}),borderError:`1px solid ${(0,se.QX)(s,{alpha:.23})}`,textColorError:s,colorError:(0,se.QX)(s,{alpha:.1}),colorBorderedError:(0,se.QX)(s,{alpha:.08}),closeIconColorError:s,closeIconColorHoverError:s,closeIconColorPressedError:s,closeColorHoverError:(0,se.QX)(s,{alpha:.12}),closeColorPressedError:(0,se.QX)(s,{alpha:.18})})}},de={color:Object,type:{type:String,default:"default"},round:Boolean,size:{type:String,default:"medium"},closable:Boolean,disabled:{type:Boolean,default:void 0}},ue=(0,ne.cB)("tag","\n --n-close-margin: var(--n-close-margin-top) var(--n-close-margin-right) var(--n-close-margin-bottom) var(--n-close-margin-left);\n white-space: nowrap;\n position: relative;\n box-sizing: border-box;\n cursor: default;\n display: inline-flex;\n align-items: center;\n flex-wrap: nowrap;\n padding: var(--n-padding);\n border-radius: var(--n-border-radius);\n color: var(--n-text-color);\n background-color: var(--n-color);\n transition: \n border-color .3s var(--n-bezier),\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n opacity .3s var(--n-bezier);\n line-height: 1;\n height: var(--n-height);\n font-size: var(--n-font-size);\n",[(0,ne.cM)("strong","\n font-weight: var(--n-font-weight-strong);\n "),(0,ne.cE)("border","\n pointer-events: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n border-radius: inherit;\n border: var(--n-border);\n transition: border-color .3s var(--n-bezier);\n "),(0,ne.cE)("icon","\n display: flex;\n margin: 0 4px 0 0;\n color: var(--n-text-color);\n transition: color .3s var(--n-bezier);\n font-size: var(--n-avatar-size-override);\n "),(0,ne.cE)("avatar","\n display: flex;\n margin: 0 6px 0 0;\n "),(0,ne.cE)("close","\n margin: var(--n-close-margin);\n transition:\n background-color .3s var(--n-bezier),\n color .3s var(--n-bezier);\n "),(0,ne.cM)("round","\n padding: 0 calc(var(--n-height) / 3);\n border-radius: calc(var(--n-height) / 2);\n ",[(0,ne.cE)("icon","\n margin: 0 4px 0 calc((var(--n-height) - 8px) / -2);\n "),(0,ne.cE)("avatar","\n margin: 0 6px 0 calc((var(--n-height) - 8px) / -2);\n "),(0,ne.cM)("closable","\n padding: 0 calc(var(--n-height) / 4) 0 calc(var(--n-height) / 3);\n ")]),(0,ne.cM)("icon, avatar",[(0,ne.cM)("round","\n padding: 0 calc(var(--n-height) / 3) 0 calc(var(--n-height) / 2);\n ")]),(0,ne.cM)("disabled","\n cursor: not-allowed !important;\n opacity: var(--n-opacity-disabled);\n "),(0,ne.cM)("checkable","\n cursor: pointer;\n box-shadow: none;\n color: var(--n-text-color-checkable);\n background-color: var(--n-color-checkable);\n ",[(0,ne.C5)("disabled",[(0,ne.c)("&:hover","background-color: var(--n-color-hover-checkable);",[(0,ne.C5)("checked","color: var(--n-text-color-hover-checkable);")]),(0,ne.c)("&:active","background-color: var(--n-color-pressed-checkable);",[(0,ne.C5)("checked","color: var(--n-text-color-pressed-checkable);")])]),(0,ne.cM)("checked","\n color: var(--n-text-color-checked);\n background-color: var(--n-color-checked);\n ",[(0,ne.C5)("disabled",[(0,ne.c)("&:hover","background-color: var(--n-color-checked-hover);"),(0,ne.c)("&:active","background-color: var(--n-color-checked-pressed);")])])])]);var he=o(4041);const pe=Object.assign(Object.assign(Object.assign({},L.A.props),de),{bordered:{type:Boolean,default:void 0},checked:Boolean,checkable:Boolean,strong:Boolean,triggerClickOnClose:Boolean,onClose:[Array,Function],onMouseenter:Function,onMouseleave:Function,"onUpdate:checked":Function,onUpdateChecked:Function,internalCloseFocusable:{type:Boolean,default:!0},internalCloseIsButtonTag:{type:Boolean,default:!0},onCheckedChange:Function}),ve=(0,re.D)("n-tag"),fe=(0,t.pM)({name:"Tag",props:pe,setup(e){const n=(0,r.KR)(null),{mergedBorderedRef:o,mergedClsPrefixRef:l,inlineThemeDisabled:i,mergedRtlRef:a}=(0,W.Ay)(e),s=(0,L.A)("Tag","-tag",ue,ce,e,l);(0,t.Gt)(ve,{roundRef:(0,r.lW)(e,"round")});const c={setTextContent(e){const{value:o}=n;o&&(o.textContent=e)}},d=(0,Y.I)("Tag",a,l),u=(0,t.EW)((()=>{const{type:n,size:t,color:{color:r,textColor:l}={}}=e,{common:{cubicBezierEaseInOut:i},self:{padding:a,closeMargin:c,borderRadius:d,opacityDisabled:u,textColorCheckable:h,textColorHoverCheckable:p,textColorPressedCheckable:v,textColorChecked:f,colorCheckable:g,colorHoverCheckable:b,colorPressedCheckable:m,colorChecked:y,colorCheckedHover:C,colorCheckedPressed:w,closeBorderRadius:x,fontWeightStrong:k,[(0,ne.cF)("colorBordered",n)]:S,[(0,ne.cF)("closeSize",t)]:F,[(0,ne.cF)("closeIconSize",t)]:z,[(0,ne.cF)("fontSize",t)]:R,[(0,ne.cF)("height",t)]:P,[(0,ne.cF)("color",n)]:B,[(0,ne.cF)("textColor",n)]:M,[(0,ne.cF)("border",n)]:T,[(0,ne.cF)("closeIconColor",n)]:A,[(0,ne.cF)("closeIconColorHover",n)]:E,[(0,ne.cF)("closeIconColorPressed",n)]:O,[(0,ne.cF)("closeColorHover",n)]:I,[(0,ne.cF)("closeColorPressed",n)]:$}}=s.value,L=(0,he.Tj)(c);return{"--n-font-weight-strong":k,"--n-avatar-size-override":`calc(${P} - 8px)`,"--n-bezier":i,"--n-border-radius":d,"--n-border":T,"--n-close-icon-size":z,"--n-close-color-pressed":$,"--n-close-color-hover":I,"--n-close-border-radius":x,"--n-close-icon-color":A,"--n-close-icon-color-hover":E,"--n-close-icon-color-pressed":O,"--n-close-icon-color-disabled":A,"--n-close-margin-top":L.top,"--n-close-margin-right":L.right,"--n-close-margin-bottom":L.bottom,"--n-close-margin-left":L.left,"--n-close-size":F,"--n-color":r||(o.value?S:B),"--n-color-checkable":g,"--n-color-checked":y,"--n-color-checked-hover":C,"--n-color-checked-pressed":w,"--n-color-hover-checkable":b,"--n-color-pressed-checkable":m,"--n-font-size":R,"--n-height":P,"--n-opacity-disabled":u,"--n-padding":a,"--n-text-color":l||M,"--n-text-color-checkable":h,"--n-text-color-checked":f,"--n-text-color-hover-checkable":p,"--n-text-color-pressed-checkable":v}})),h=i?(0,D.R)("tag",(0,t.EW)((()=>{let n="";const{type:t,size:r,color:{color:l,textColor:i}={}}=e;return n+=t[0],n+=r[0],l&&(n+=`a${(0,le.I)(l)}`),i&&(n+=`b${(0,le.I)(i)}`),o.value&&(n+="c"),n})),u,e):void 0;return Object.assign(Object.assign({},c),{rtlEnabled:d,mergedClsPrefix:l,contentRef:n,mergedBordered:o,handleClick:function(n){if(!e.disabled&&e.checkable){const{checked:n,onCheckedChange:o,onUpdateChecked:t,"onUpdate:checked":r}=e;t&&t(!n),r&&r(!n),o&&o(!n)}},handleCloseClick:function(n){if(e.triggerClickOnClose||n.stopPropagation(),!e.disabled){const{onClose:o}=e;o&&(0,H.T)(o,n)}},cssVars:i?void 0:u,themeClass:null==h?void 0:h.themeClass,onRender:null==h?void 0:h.onRender})},render(){var e,n;const{mergedClsPrefix:o,rtlEnabled:r,closable:l,color:{borderColor:i}={},round:a,onRender:s,$slots:c}=this;null==s||s();const d=(0,ie.iQ)(c.avatar,(e=>e&&(0,t.h)("div",{class:`${o}-tag__avatar`},e))),u=(0,ie.iQ)(c.icon,(e=>e&&(0,t.h)("div",{class:`${o}-tag__icon`},e)));return(0,t.h)("div",{class:[`${o}-tag`,this.themeClass,{[`${o}-tag--rtl`]:r,[`${o}-tag--strong`]:this.strong,[`${o}-tag--disabled`]:this.disabled,[`${o}-tag--checkable`]:this.checkable,[`${o}-tag--checked`]:this.checkable&&this.checked,[`${o}-tag--round`]:a,[`${o}-tag--avatar`]:d,[`${o}-tag--icon`]:u,[`${o}-tag--closable`]:l}],style:this.cssVars,onClick:this.handleClick,onMouseenter:this.onMouseenter,onMouseleave:this.onMouseleave},u||d,(0,t.h)("span",{class:`${o}-tag__content`,ref:"contentRef"},null===(n=(e=this.$slots).default)||void 0===n?void 0:n.call(e)),!this.checkable&&l?(0,t.h)(te,{clsPrefix:o,class:`${o}-tag__close`,disabled:this.disabled,onClick:this.handleCloseClick,focusable:this.internalCloseFocusable,round:a,isButtonTag:this.internalCloseIsButtonTag,absolute:!0}):null,!this.checkable&&this.mergedBordered?(0,t.h)("div",{class:`${o}-tag__border`,style:{borderColor:i}}):null)}}),ge=(e,...n)=>"function"==typeof e?e(...n):"string"==typeof e?(0,t.eW)(e):"number"==typeof e?(0,t.eW)(String(e)):null;var be=o(40);function me(e,n){n&&((0,t.sV)((()=>{const{value:o}=e;o&&be.A.registerHandler(o,n)})),(0,t.xo)((()=>{const{value:n}=e;n&&be.A.unregisterHandler(n)})))}var ye=o(1877);function Ce(e){switch(typeof e){case"string":return e||void 0;case"number":return String(e);default:return}}var we=o(1111),xe=o(5991);const ke=(0,ne.c)([(0,ne.cB)("base-selection","\n --n-padding-single: var(--n-padding-single-top) var(--n-padding-single-right) var(--n-padding-single-bottom) var(--n-padding-single-left);\n --n-padding-multiple: var(--n-padding-multiple-top) var(--n-padding-multiple-right) var(--n-padding-multiple-bottom) var(--n-padding-multiple-left);\n position: relative;\n z-index: auto;\n box-shadow: none;\n width: 100%;\n max-width: 100%;\n display: inline-block;\n vertical-align: bottom;\n border-radius: var(--n-border-radius);\n min-height: var(--n-height);\n line-height: 1.5;\n font-size: var(--n-font-size);\n ",[(0,ne.cB)("base-loading","\n color: var(--n-loading-color);\n "),(0,ne.cB)("base-selection-tags","min-height: var(--n-height);"),(0,ne.cE)("border, state-border","\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n border: var(--n-border);\n border-radius: inherit;\n transition:\n box-shadow .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n "),(0,ne.cE)("state-border","\n z-index: 1;\n border-color: #0000;\n "),(0,ne.cB)("base-suffix","\n cursor: pointer;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n right: 10px;\n ",[(0,ne.cE)("arrow","\n font-size: var(--n-arrow-size);\n color: var(--n-arrow-color);\n transition: color .3s var(--n-bezier);\n ")]),(0,ne.cB)("base-selection-overlay","\n display: flex;\n align-items: center;\n white-space: nowrap;\n pointer-events: none;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--n-padding-single);\n transition: color .3s var(--n-bezier);\n ",[(0,ne.cE)("wrapper","\n flex-basis: 0;\n flex-grow: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n ")]),(0,ne.cB)("base-selection-placeholder","\n color: var(--n-placeholder-color);\n ",[(0,ne.cE)("inner","\n max-width: 100%;\n overflow: hidden;\n ")]),(0,ne.cB)("base-selection-tags","\n cursor: pointer;\n outline: none;\n box-sizing: border-box;\n position: relative;\n z-index: auto;\n display: flex;\n padding: var(--n-padding-multiple);\n flex-wrap: wrap;\n align-items: center;\n width: 100%;\n vertical-align: bottom;\n background-color: var(--n-color);\n border-radius: inherit;\n transition:\n color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n "),(0,ne.cB)("base-selection-label","\n height: var(--n-height);\n display: inline-flex;\n width: 100%;\n vertical-align: bottom;\n cursor: pointer;\n outline: none;\n z-index: auto;\n box-sizing: border-box;\n position: relative;\n transition:\n color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n border-radius: inherit;\n background-color: var(--n-color);\n align-items: center;\n ",[(0,ne.cB)("base-selection-input","\n font-size: inherit;\n line-height: inherit;\n outline: none;\n cursor: pointer;\n box-sizing: border-box;\n border:none;\n width: 100%;\n padding: var(--n-padding-single);\n background-color: #0000;\n color: var(--n-text-color);\n transition: color .3s var(--n-bezier);\n caret-color: var(--n-caret-color);\n ",[(0,ne.cE)("content","\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap; \n ")]),(0,ne.cE)("render-label","\n color: var(--n-text-color);\n ")]),(0,ne.C5)("disabled",[(0,ne.c)("&:hover",[(0,ne.cE)("state-border","\n box-shadow: var(--n-box-shadow-hover);\n border: var(--n-border-hover);\n ")]),(0,ne.cM)("focus",[(0,ne.cE)("state-border","\n box-shadow: var(--n-box-shadow-focus);\n border: var(--n-border-focus);\n ")]),(0,ne.cM)("active",[(0,ne.cE)("state-border","\n box-shadow: var(--n-box-shadow-active);\n border: var(--n-border-active);\n "),(0,ne.cB)("base-selection-label","background-color: var(--n-color-active);"),(0,ne.cB)("base-selection-tags","background-color: var(--n-color-active);")])]),(0,ne.cM)("disabled","cursor: not-allowed;",[(0,ne.cE)("arrow","\n color: var(--n-arrow-color-disabled);\n "),(0,ne.cB)("base-selection-label","\n cursor: not-allowed;\n background-color: var(--n-color-disabled);\n ",[(0,ne.cB)("base-selection-input","\n cursor: not-allowed;\n color: var(--n-text-color-disabled);\n "),(0,ne.cE)("render-label","\n color: var(--n-text-color-disabled);\n ")]),(0,ne.cB)("base-selection-tags","\n cursor: not-allowed;\n background-color: var(--n-color-disabled);\n "),(0,ne.cB)("base-selection-placeholder","\n cursor: not-allowed;\n color: var(--n-placeholder-color-disabled);\n ")]),(0,ne.cB)("base-selection-input-tag","\n height: calc(var(--n-height) - 6px);\n line-height: calc(var(--n-height) - 6px);\n outline: none;\n display: none;\n position: relative;\n margin-bottom: 3px;\n max-width: 100%;\n vertical-align: bottom;\n ",[(0,ne.cE)("input","\n font-size: inherit;\n font-family: inherit;\n min-width: 1px;\n padding: 0;\n background-color: #0000;\n outline: none;\n border: none;\n max-width: 100%;\n overflow: hidden;\n width: 1em;\n line-height: inherit;\n cursor: pointer;\n color: var(--n-text-color);\n caret-color: var(--n-caret-color);\n "),(0,ne.cE)("mirror","\n position: absolute;\n left: 0;\n top: 0;\n white-space: pre;\n visibility: hidden;\n user-select: none;\n -webkit-user-select: none;\n opacity: 0;\n ")]),["warning","error"].map((e=>(0,ne.cM)(`${e}-status`,[(0,ne.cE)("state-border",`border: var(--n-border-${e});`),(0,ne.C5)("disabled",[(0,ne.c)("&:hover",[(0,ne.cE)("state-border",`\n box-shadow: var(--n-box-shadow-hover-${e});\n border: var(--n-border-hover-${e});\n `)]),(0,ne.cM)("active",[(0,ne.cE)("state-border",`\n box-shadow: var(--n-box-shadow-active-${e});\n border: var(--n-border-active-${e});\n `),(0,ne.cB)("base-selection-label",`background-color: var(--n-color-active-${e});`),(0,ne.cB)("base-selection-tags",`background-color: var(--n-color-active-${e});`)]),(0,ne.cM)("focus",[(0,ne.cE)("state-border",`\n box-shadow: var(--n-box-shadow-focus-${e});\n border: var(--n-border-focus-${e});\n `)])])])))]),(0,ne.cB)("base-selection-popover","\n margin-bottom: -3px;\n display: flex;\n flex-wrap: wrap;\n margin-right: -8px;\n "),(0,ne.cB)("base-selection-tag-wrapper","\n max-width: 100%;\n display: inline-flex;\n padding: 0 7px 3px 0;\n ",[(0,ne.c)("&:last-child","padding-right: 0;"),(0,ne.cB)("tag","\n font-size: 14px;\n max-width: 100%;\n ",[(0,ne.cE)("content","\n line-height: 1.25;\n text-overflow: ellipsis;\n overflow: hidden;\n ")])])]),Se=(0,t.pM)({name:"InternalSelection",props:Object.assign(Object.assign({},L.A.props),{clsPrefix:{type:String,required:!0},bordered:{type:Boolean,default:void 0},active:Boolean,pattern:{type:String,default:""},placeholder:String,selectedOption:{type:Object,default:null},selectedOptions:{type:Array,default:null},labelField:{type:String,default:"label"},valueField:{type:String,default:"value"},multiple:Boolean,filterable:Boolean,clearable:Boolean,disabled:Boolean,size:{type:String,default:"medium"},loading:Boolean,autofocus:Boolean,showArrow:{type:Boolean,default:!0},inputProps:Object,focused:Boolean,renderTag:Function,onKeydown:Function,onClick:Function,onBlur:Function,onFocus:Function,onDeleteOption:Function,maxTagCount:[String,Number],ellipsisTagPopoverProps:Object,onClear:Function,onPatternInput:Function,onPatternFocus:Function,onPatternBlur:Function,renderLabel:Function,status:String,inlineThemeDisabled:Boolean,ignoreComposition:{type:Boolean,default:!0},onResize:Function}),setup(e){const{mergedClsPrefixRef:n,mergedRtlRef:o}=(0,W.Ay)(e),l=(0,Y.I)("InternalSelection",o,n),i=(0,r.KR)(null),a=(0,r.KR)(null),s=(0,r.KR)(null),c=(0,r.KR)(null),d=(0,r.KR)(null),u=(0,r.KR)(null),h=(0,r.KR)(null),p=(0,r.KR)(null),v=(0,r.KR)(null),f=(0,r.KR)(null),g=(0,r.KR)(!1),b=(0,r.KR)(!1),m=(0,r.KR)(!1),y=(0,L.A)("InternalSelection","-internal-selection",ke,xe.A,e,(0,r.lW)(e,"clsPrefix")),C=(0,t.EW)((()=>e.clearable&&!e.disabled&&(m.value||e.active))),w=(0,t.EW)((()=>e.selectedOption?e.renderTag?e.renderTag({option:e.selectedOption,handleClose:()=>{}}):e.renderLabel?e.renderLabel(e.selectedOption,!0):ge(e.selectedOption[e.labelField],e.selectedOption,!0):e.placeholder)),x=(0,t.EW)((()=>{const n=e.selectedOption;if(n)return n[e.labelField]})),k=(0,t.EW)((()=>e.multiple?!(!Array.isArray(e.selectedOptions)||!e.selectedOptions.length):null!==e.selectedOption));function S(){var n;const{value:o}=i;if(o){const{value:t}=a;t&&(t.style.width=`${o.offsetWidth}px`,"responsive"!==e.maxTagCount&&(null===(n=v.value)||void 0===n||n.sync({showAllItemsBeforeCalculate:!1})))}}function F(n){const{onPatternInput:o}=e;o&&o(n)}function z(n){!function(n){const{onDeleteOption:o}=e;o&&o(n)}(n)}(0,t.wB)((0,r.lW)(e,"active"),(e=>{e||function(){const{value:e}=f;e&&(e.style.display="none")}()})),(0,t.wB)((0,r.lW)(e,"pattern"),(()=>{e.multiple&&(0,t.dY)(S)}));const R=(0,r.KR)(!1);let P=null,B=null;function M(){null!==B&&window.clearTimeout(B)}(0,t.wB)(k,(e=>{e||(g.value=!1)})),(0,t.sV)((()=>{(0,t.nT)((()=>{const n=u.value;n&&(e.disabled?n.removeAttribute("tabindex"):n.tabIndex=b.value?-1:0)}))})),me(s,e.onResize);const{inlineThemeDisabled:T}=e,A=(0,t.EW)((()=>{const{size:n}=e,{common:{cubicBezierEaseInOut:o},self:{borderRadius:t,color:r,placeholderColor:l,textColor:i,paddingSingle:a,paddingMultiple:s,caretColor:c,colorDisabled:d,textColorDisabled:u,placeholderColorDisabled:h,colorActive:p,boxShadowFocus:v,boxShadowActive:f,boxShadowHover:g,border:b,borderFocus:m,borderHover:C,borderActive:w,arrowColor:x,arrowColorDisabled:k,loadingColor:S,colorActiveWarning:F,boxShadowFocusWarning:z,boxShadowActiveWarning:R,boxShadowHoverWarning:P,borderWarning:B,borderFocusWarning:M,borderHoverWarning:T,borderActiveWarning:A,colorActiveError:E,boxShadowFocusError:O,boxShadowActiveError:I,boxShadowHoverError:$,borderError:L,borderFocusError:W,borderHoverError:N,borderActiveError:K,clearColor:D,clearColorHover:_,clearColorPressed:H,clearSize:j,arrowSize:V,[(0,ne.cF)("height",n)]:Q,[(0,ne.cF)("fontSize",n)]:X}}=y.value,G=(0,he.Cq)(a),U=(0,he.Cq)(s);return{"--n-bezier":o,"--n-border":b,"--n-border-active":w,"--n-border-focus":m,"--n-border-hover":C,"--n-border-radius":t,"--n-box-shadow-active":f,"--n-box-shadow-focus":v,"--n-box-shadow-hover":g,"--n-caret-color":c,"--n-color":r,"--n-color-active":p,"--n-color-disabled":d,"--n-font-size":X,"--n-height":Q,"--n-padding-single-top":G.top,"--n-padding-multiple-top":U.top,"--n-padding-single-right":G.right,"--n-padding-multiple-right":U.right,"--n-padding-single-left":G.left,"--n-padding-multiple-left":U.left,"--n-padding-single-bottom":G.bottom,"--n-padding-multiple-bottom":U.bottom,"--n-placeholder-color":l,"--n-placeholder-color-disabled":h,"--n-text-color":i,"--n-text-color-disabled":u,"--n-arrow-color":x,"--n-arrow-color-disabled":k,"--n-loading-color":S,"--n-color-active-warning":F,"--n-box-shadow-focus-warning":z,"--n-box-shadow-active-warning":R,"--n-box-shadow-hover-warning":P,"--n-border-warning":B,"--n-border-focus-warning":M,"--n-border-hover-warning":T,"--n-border-active-warning":A,"--n-color-active-error":E,"--n-box-shadow-focus-error":O,"--n-box-shadow-active-error":I,"--n-box-shadow-hover-error":$,"--n-border-error":L,"--n-border-focus-error":W,"--n-border-hover-error":N,"--n-border-active-error":K,"--n-clear-size":j,"--n-clear-color":D,"--n-clear-color-hover":_,"--n-clear-color-pressed":H,"--n-arrow-size":V}})),E=T?(0,D.R)("internal-selection",(0,t.EW)((()=>e.size[0])),A,e):void 0;return{mergedTheme:y,mergedClearable:C,mergedClsPrefix:n,rtlEnabled:l,patternInputFocused:b,filterablePlaceholder:w,label:x,selected:k,showTagsPanel:g,isComposing:R,counterRef:h,counterWrapperRef:p,patternInputMirrorRef:i,patternInputRef:a,selfRef:s,multipleElRef:c,singleElRef:d,patternInputWrapperRef:u,overflowRef:v,inputTagElRef:f,handleMouseDown:function(n){e.active&&e.filterable&&n.target!==a.value&&n.preventDefault()},handleFocusin:function(n){var o;n.relatedTarget&&(null===(o=s.value)||void 0===o?void 0:o.contains(n.relatedTarget))||function(n){const{onFocus:o}=e;o&&o(n)}(n)},handleClear:function(n){!function(n){const{onClear:o}=e;o&&o(n)}(n)},handleMouseEnter:function(){m.value=!0},handleMouseLeave:function(){m.value=!1},handleDeleteOption:z,handlePatternKeyDown:function(n){if("Backspace"===n.key&&!R.value&&!e.pattern.length){const{selectedOptions:n}=e;(null==n?void 0:n.length)&&z(n[n.length-1])}},handlePatternInputInput:function(n){const{value:o}=i;if(o){const e=n.target.value;o.textContent=e,S()}e.ignoreComposition&&R.value?P=n:F(n)},handlePatternInputBlur:function(n){var o;b.value=!1,null===(o=e.onPatternBlur)||void 0===o||o.call(e,n)},handlePatternInputFocus:function(n){var o;b.value=!0,null===(o=e.onPatternFocus)||void 0===o||o.call(e,n)},handleMouseEnterCounter:function(){e.active||(M(),B=window.setTimeout((()=>{k.value&&(g.value=!0)}),100))},handleMouseLeaveCounter:function(){M()},handleFocusout:function(n){var o;(null===(o=s.value)||void 0===o?void 0:o.contains(n.relatedTarget))||function(n){const{onBlur:o}=e;o&&o(n)}(n)},handleCompositionEnd:function(){R.value=!1,e.ignoreComposition&&F(P),P=null},handleCompositionStart:function(){R.value=!0},onPopoverUpdateShow:function(e){e||(M(),g.value=!1)},focus:function(){var n,o,t;e.filterable?(b.value=!1,null===(n=u.value)||void 0===n||n.focus()):e.multiple?null===(o=c.value)||void 0===o||o.focus():null===(t=d.value)||void 0===t||t.focus()},focusInput:function(){const{value:e}=a;e&&(function(){const{value:e}=f;e&&(e.style.display="inline-block")}(),e.focus())},blur:function(){var n,o;if(e.filterable)b.value=!1,null===(n=u.value)||void 0===n||n.blur(),null===(o=a.value)||void 0===o||o.blur();else if(e.multiple){const{value:e}=c;null==e||e.blur()}else{const{value:e}=d;null==e||e.blur()}},blurInput:function(){const{value:e}=a;e&&e.blur()},updateCounter:function(e){const{value:n}=h;n&&n.setTextContent(`+${e}`)},getCounter:function(){const{value:e}=p;return e},getTail:function(){return a.value},renderLabel:e.renderLabel,cssVars:T?void 0:A,themeClass:null==E?void 0:E.themeClass,onRender:null==E?void 0:E.onRender}},render(){const{status:e,multiple:n,size:o,disabled:r,filterable:l,maxTagCount:i,bordered:a,clsPrefix:s,ellipsisTagPopoverProps:c,onRender:d,renderTag:u,renderLabel:h}=this;null==d||d();const p="responsive"===i,v="number"==typeof i,f=p||v,g=(0,t.h)(ye.m,null,{default:()=>(0,t.h)(we.A,{clsPrefix:s,loading:this.loading,showArrow:this.showArrow,showClear:this.mergedClearable&&this.selected,onClear:this.handleClear},{default:()=>{var e,n;return null===(n=(e=this.$slots).arrow)||void 0===n?void 0:n.call(e)}})});let b;if(n){const{labelField:e}=this,n=n=>(0,t.h)("div",{class:`${s}-base-selection-tag-wrapper`,key:n.value},u?u({option:n,handleClose:()=>{this.handleDeleteOption(n)}}):(0,t.h)(fe,{size:o,closable:!n.disabled,disabled:r,onClose:()=>{this.handleDeleteOption(n)},internalCloseIsButtonTag:!1,internalCloseFocusable:!1},{default:()=>h?h(n,!0):ge(n[e],n,!0)})),a=()=>(v?this.selectedOptions.slice(0,i):this.selectedOptions).map(n),d=l?(0,t.h)("div",{class:`${s}-base-selection-input-tag`,ref:"inputTagElRef",key:"__input-tag__"},(0,t.h)("input",Object.assign({},this.inputProps,{ref:"patternInputRef",tabindex:-1,disabled:r,value:this.pattern,autofocus:this.autofocus,class:`${s}-base-selection-input-tag__input`,onBlur:this.handlePatternInputBlur,onFocus:this.handlePatternInputFocus,onKeydown:this.handlePatternKeyDown,onInput:this.handlePatternInputInput,onCompositionstart:this.handleCompositionStart,onCompositionend:this.handleCompositionEnd})),(0,t.h)("span",{ref:"patternInputMirrorRef",class:`${s}-base-selection-input-tag__mirror`},this.pattern)):null,m=p?()=>(0,t.h)("div",{class:`${s}-base-selection-tag-wrapper`,ref:"counterWrapperRef"},(0,t.h)(fe,{size:o,ref:"counterRef",onMouseenter:this.handleMouseEnterCounter,onMouseleave:this.handleMouseLeaveCounter,disabled:r})):void 0;let y;if(v){const e=this.selectedOptions.length-i;e>0&&(y=(0,t.h)("div",{class:`${s}-base-selection-tag-wrapper`,key:"__counter__"},(0,t.h)(fe,{size:o,ref:"counterRef",onMouseenter:this.handleMouseEnterCounter,disabled:r},{default:()=>`+${e}`})))}const C=p?l?(0,t.h)(U,{ref:"overflowRef",updateCounter:this.updateCounter,getCounter:this.getCounter,getTail:this.getTail,style:{width:"100%",display:"flex",overflow:"hidden"}},{default:a,counter:m,tail:()=>d}):(0,t.h)(U,{ref:"overflowRef",updateCounter:this.updateCounter,getCounter:this.getCounter,style:{width:"100%",display:"flex",overflow:"hidden"}},{default:a,counter:m}):v&&y?a().concat(y):a(),w=f?()=>(0,t.h)("div",{class:`${s}-base-selection-popover`},p?a():this.selectedOptions.map(n)):void 0,x=f?Object.assign({show:this.showTagsPanel,trigger:"hover",overlap:!0,placement:"top",width:"trigger",onUpdateShow:this.onPopoverUpdateShow,theme:this.mergedTheme.peers.Popover,themeOverrides:this.mergedTheme.peerOverrides.Popover},c):null,k=this.selected||this.active&&(this.pattern||this.isComposing)?null:(0,t.h)("div",{class:`${s}-base-selection-placeholder ${s}-base-selection-overlay`},(0,t.h)("div",{class:`${s}-base-selection-placeholder__inner`},this.placeholder)),S=l?(0,t.h)("div",{ref:"patternInputWrapperRef",class:`${s}-base-selection-tags`},C,p?null:d,g):(0,t.h)("div",{ref:"multipleElRef",class:`${s}-base-selection-tags`,tabindex:r?void 0:0},C,g);b=(0,t.h)(t.FK,null,f?(0,t.h)(q.Ay,Object.assign({},x,{scrollable:!0,style:"max-height: calc(var(--v-target-height) * 6.6);"}),{trigger:()=>S,default:w}):S,k)}else if(l){const e=this.pattern||this.isComposing,n=this.active?!e:!this.selected,o=!this.active&&this.selected;b=(0,t.h)("div",{ref:"patternInputWrapperRef",class:`${s}-base-selection-label`,title:this.patternInputFocused?void 0:Ce(this.label)},(0,t.h)("input",Object.assign({},this.inputProps,{ref:"patternInputRef",class:`${s}-base-selection-input`,value:this.active?this.pattern:"",placeholder:"",readonly:r,disabled:r,tabindex:-1,autofocus:this.autofocus,onFocus:this.handlePatternInputFocus,onBlur:this.handlePatternInputBlur,onInput:this.handlePatternInputInput,onCompositionstart:this.handleCompositionStart,onCompositionend:this.handleCompositionEnd})),o?(0,t.h)("div",{class:`${s}-base-selection-label__render-label ${s}-base-selection-overlay`,key:"input"},(0,t.h)("div",{class:`${s}-base-selection-overlay__wrapper`},u?u({option:this.selectedOption,handleClose:()=>{}}):h?h(this.selectedOption,!0):ge(this.label,this.selectedOption,!0))):null,n?(0,t.h)("div",{class:`${s}-base-selection-placeholder ${s}-base-selection-overlay`,key:"placeholder"},(0,t.h)("div",{class:`${s}-base-selection-overlay__wrapper`},this.filterablePlaceholder)):null,g)}else b=(0,t.h)("div",{ref:"singleElRef",class:`${s}-base-selection-label`,tabindex:this.disabled?void 0:0},void 0!==this.label?(0,t.h)("div",{class:`${s}-base-selection-input`,title:Ce(this.label),key:"input"},(0,t.h)("div",{class:`${s}-base-selection-input__content`},u?u({option:this.selectedOption,handleClose:()=>{}}):h?h(this.selectedOption,!0):ge(this.label,this.selectedOption,!0))):(0,t.h)("div",{class:`${s}-base-selection-placeholder ${s}-base-selection-overlay`,key:"placeholder"},(0,t.h)("div",{class:`${s}-base-selection-placeholder__inner`},this.placeholder)),g);return(0,t.h)("div",{ref:"selfRef",class:[`${s}-base-selection`,this.rtlEnabled&&`${s}-base-selection--rtl`,this.themeClass,e&&`${s}-base-selection--${e}-status`,{[`${s}-base-selection--active`]:this.active,[`${s}-base-selection--selected`]:this.selected||this.active&&this.pattern,[`${s}-base-selection--disabled`]:this.disabled,[`${s}-base-selection--multiple`]:this.multiple,[`${s}-base-selection--focus`]:this.focused}],style:this.cssVars,onClick:this.onClick,onMouseenter:this.handleMouseEnter,onMouseleave:this.handleMouseLeave,onKeydown:this.onKeydown,onFocusin:this.handleFocusin,onFocusout:this.handleFocusout,onMousedown:this.handleMouseDown},b,a?(0,t.h)("div",{class:`${s}-base-selection__border`}):null,a?(0,t.h)("div",{class:`${s}-base-selection__state-border`}):null)}});var Fe=o(2061),ze=o(9157);const Re=(0,t.pM)({name:"Empty",render:()=>(0,t.h)("svg",{viewBox:"0 0 28 28",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,t.h)("path",{d:"M26 7.5C26 11.0899 23.0899 14 19.5 14C15.9101 14 13 11.0899 13 7.5C13 3.91015 15.9101 1 19.5 1C23.0899 1 26 3.91015 26 7.5ZM16.8536 4.14645C16.6583 3.95118 16.3417 3.95118 16.1464 4.14645C15.9512 4.34171 15.9512 4.65829 16.1464 4.85355L18.7929 7.5L16.1464 10.1464C15.9512 10.3417 15.9512 10.6583 16.1464 10.8536C16.3417 11.0488 16.6583 11.0488 16.8536 10.8536L19.5 8.20711L22.1464 10.8536C22.3417 11.0488 22.6583 11.0488 22.8536 10.8536C23.0488 10.6583 23.0488 10.3417 22.8536 10.1464L20.2071 7.5L22.8536 4.85355C23.0488 4.65829 23.0488 4.34171 22.8536 4.14645C22.6583 3.95118 22.3417 3.95118 22.1464 4.14645L19.5 6.79289L16.8536 4.14645Z",fill:"currentColor"}),(0,t.h)("path",{d:"M25 22.75V12.5991C24.5572 13.0765 24.053 13.4961 23.5 13.8454V16H17.5L17.3982 16.0068C17.0322 16.0565 16.75 16.3703 16.75 16.75C16.75 18.2688 15.5188 19.5 14 19.5C12.4812 19.5 11.25 18.2688 11.25 16.75L11.2432 16.6482C11.1935 16.2822 10.8797 16 10.5 16H4.5V7.25C4.5 6.2835 5.2835 5.5 6.25 5.5H12.2696C12.4146 4.97463 12.6153 4.47237 12.865 4H6.25C4.45507 4 3 5.45507 3 7.25V22.75C3 24.5449 4.45507 26 6.25 26H21.75C23.5449 26 25 24.5449 25 22.75ZM4.5 22.75V17.5H9.81597L9.85751 17.7041C10.2905 19.5919 11.9808 21 14 21L14.215 20.9947C16.2095 20.8953 17.842 19.4209 18.184 17.5H23.5V22.75C23.5 23.7165 22.7165 24.5 21.75 24.5H6.25C5.2835 24.5 4.5 23.7165 4.5 22.75Z",fill:"currentColor"}))});var Pe=o(1841);const Be=(0,ne.cB)("empty","\n display: flex;\n flex-direction: column;\n align-items: center;\n font-size: var(--n-font-size);\n",[(0,ne.cE)("icon","\n width: var(--n-icon-size);\n height: var(--n-icon-size);\n font-size: var(--n-icon-size);\n line-height: var(--n-icon-size);\n color: var(--n-icon-color);\n transition:\n color .3s var(--n-bezier);\n ",[(0,ne.c)("+",[(0,ne.cE)("description","\n margin-top: 8px;\n ")])]),(0,ne.cE)("description","\n transition: color .3s var(--n-bezier);\n color: var(--n-text-color);\n "),(0,ne.cE)("extra","\n text-align: center;\n transition: color .3s var(--n-bezier);\n margin-top: 12px;\n color: var(--n-extra-text-color);\n ")]),Me=Object.assign(Object.assign({},L.A.props),{description:String,showDescription:{type:Boolean,default:!0},showIcon:{type:Boolean,default:!0},size:{type:String,default:"medium"},renderIcon:Function}),Te=(0,t.pM)({name:"Empty",props:Me,setup(e){const{mergedClsPrefixRef:n,inlineThemeDisabled:o}=(0,W.Ay)(e),r=(0,L.A)("Empty","-empty",Be,Pe.A,e,n),{localeRef:l}=(0,N.A)("Empty"),i=(0,t.WQ)(ze.C,null),a=(0,t.EW)((()=>{var n,o,t;return null!==(n=e.description)&&void 0!==n?n:null===(t=null===(o=null==i?void 0:i.mergedComponentPropsRef.value)||void 0===o?void 0:o.Empty)||void 0===t?void 0:t.description})),s=(0,t.EW)((()=>{var e,n;return(null===(n=null===(e=null==i?void 0:i.mergedComponentPropsRef.value)||void 0===e?void 0:e.Empty)||void 0===n?void 0:n.renderIcon)||(()=>(0,t.h)(Re,null))})),c=(0,t.EW)((()=>{const{size:n}=e,{common:{cubicBezierEaseInOut:o},self:{[(0,ne.cF)("iconSize",n)]:t,[(0,ne.cF)("fontSize",n)]:l,textColor:i,iconColor:a,extraTextColor:s}}=r.value;return{"--n-icon-size":t,"--n-font-size":l,"--n-bezier":o,"--n-text-color":i,"--n-icon-color":a,"--n-extra-text-color":s}})),d=o?(0,D.R)("empty",(0,t.EW)((()=>{let n="";const{size:o}=e;return n+=o[0],n})),c,e):void 0;return{mergedClsPrefix:n,mergedRenderIcon:s,localizedDescription:(0,t.EW)((()=>a.value||l.value.description)),cssVars:o?void 0:c,themeClass:null==d?void 0:d.themeClass,onRender:null==d?void 0:d.onRender}},render(){const{$slots:e,mergedClsPrefix:n,onRender:o}=this;return null==o||o(),(0,t.h)("div",{class:[`${n}-empty`,this.themeClass],style:this.cssVars},this.showIcon?(0,t.h)("div",{class:`${n}-empty__icon`},e.icon?e.icon():(0,t.h)(J.A,{clsPrefix:n},{default:this.mergedRenderIcon})):null,this.showDescription?(0,t.h)("div",{class:`${n}-empty__description`},e.default?e.default():this.localizedDescription):null,e.extra?(0,t.h)("div",{class:`${n}-empty__extra`},e.extra()):null)}});var Ae=o(9990),Ee=o(2778),Oe=o(9104),Ie=o(707),$e=o(9440);function Le(e){const n=e.filter((e=>void 0!==e));if(0!==n.length)return 1===n.length?n[0]:n=>{e.forEach((e=>{e&&e(n)}))}}const We=(0,t.pM)({name:"Checkmark",render:()=>(0,t.h)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16"},(0,t.h)("g",{fill:"none"},(0,t.h)("path",{d:"M14.046 3.486a.75.75 0 0 1-.032 1.06l-7.93 7.474a.85.85 0 0 1-1.188-.022l-2.68-2.72a.75.75 0 1 1 1.068-1.053l2.234 2.267l7.468-7.038a.75.75 0 0 1 1.06.032z",fill:"currentColor"})))});var Ne=o(4892);const Ke=(0,t.pM)({name:"NBaseSelectOption",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0}},setup(e){const{valueRef:n,pendingTmNodeRef:o,multipleRef:r,valueSetRef:l,renderLabelRef:i,renderOptionRef:a,labelFieldRef:s,valueFieldRef:c,showCheckmarkRef:d,nodePropsRef:u,handleOptionClick:h,handleOptionMouseEnter:p}=(0,t.WQ)(Ne.H),v=(0,$e.A)((()=>{const{value:n}=o;return!!n&&e.tmNode.key===n.key}));return{multiple:r,isGrouped:(0,$e.A)((()=>{const{tmNode:n}=e,{parent:o}=n;return o&&"group"===o.rawNode.type})),showCheckmark:d,nodeProps:u,isPending:v,isSelected:(0,$e.A)((()=>{const{value:o}=n,{value:t}=r;if(null===o)return!1;const i=e.tmNode.rawNode[c.value];if(t){const{value:e}=l;return e.has(i)}return o===i})),labelField:s,renderLabel:i,renderOption:a,handleMouseMove:function(n){const{tmNode:o}=e,{value:t}=v;o.disabled||t||p(n,o)},handleMouseEnter:function(n){const{tmNode:o}=e;o.disabled||p(n,o)},handleClick:function(n){const{tmNode:o}=e;o.disabled||h(n,o)}}},render(){const{clsPrefix:e,tmNode:{rawNode:n},isSelected:o,isPending:r,isGrouped:i,showCheckmark:a,nodeProps:s,renderOption:c,renderLabel:d,handleClick:u,handleMouseEnter:h,handleMouseMove:p}=this,v=function(e,n){return(0,t.h)(l.Transition,{name:"fade-in-scale-up-transition"},{default:()=>e?(0,t.h)(J.A,{clsPrefix:n,class:`${n}-base-select-option__check`},{default:()=>(0,t.h)(We)}):null})}(o,e),f=d?[d(n,o),a&&v]:[ge(n[this.labelField],n,o),a&&v],g=null==s?void 0:s(n),b=(0,t.h)("div",Object.assign({},g,{class:[`${e}-base-select-option`,n.class,null==g?void 0:g.class,{[`${e}-base-select-option--disabled`]:n.disabled,[`${e}-base-select-option--selected`]:o,[`${e}-base-select-option--grouped`]:i,[`${e}-base-select-option--pending`]:r,[`${e}-base-select-option--show-checkmark`]:a}],style:[(null==g?void 0:g.style)||"",n.style||""],onClick:Le([u,null==g?void 0:g.onClick]),onMouseenter:Le([h,null==g?void 0:g.onMouseenter]),onMousemove:Le([p,null==g?void 0:g.onMousemove])}),(0,t.h)("div",{class:`${e}-base-select-option__content`},f));return n.render?n.render({node:b,option:n,selected:o}):c?c({node:b,option:n,selected:o}):b}}),De=(0,t.pM)({name:"NBaseSelectGroupHeader",props:{clsPrefix:{type:String,required:!0},tmNode:{type:Object,required:!0}},setup(){const{renderLabelRef:e,renderOptionRef:n,labelFieldRef:o,nodePropsRef:r}=(0,t.WQ)(Ne.H);return{labelField:o,nodeProps:r,renderLabel:e,renderOption:n}},render(){const{clsPrefix:e,renderLabel:n,renderOption:o,nodeProps:r,tmNode:{rawNode:l}}=this,i=null==r?void 0:r(l),a=n?n(l,!1):ge(l[this.labelField],l,!1),s=(0,t.h)("div",Object.assign({},i,{class:[`${e}-base-select-group-header`,null==i?void 0:i.class]}),a);return l.render?l.render({node:s,option:l}):o?o({node:s,option:l,selected:!1}):s}});var _e=o(6657);const He=(0,ne.cB)("base-select-menu","\n line-height: 1.5;\n outline: none;\n z-index: 0;\n position: relative;\n border-radius: var(--n-border-radius);\n transition:\n background-color .3s var(--n-bezier),\n box-shadow .3s var(--n-bezier);\n background-color: var(--n-color);\n",[(0,ne.cB)("scrollbar","\n max-height: var(--n-height);\n "),(0,ne.cB)("virtual-list","\n max-height: var(--n-height);\n "),(0,ne.cB)("base-select-option","\n min-height: var(--n-option-height);\n font-size: var(--n-option-font-size);\n display: flex;\n align-items: center;\n ",[(0,ne.cE)("content","\n z-index: 1;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n ")]),(0,ne.cB)("base-select-group-header","\n min-height: var(--n-option-height);\n font-size: .93em;\n display: flex;\n align-items: center;\n "),(0,ne.cB)("base-select-menu-option-wrapper","\n position: relative;\n width: 100%;\n "),(0,ne.cE)("loading, empty","\n display: flex;\n padding: 12px 32px;\n flex: 1;\n justify-content: center;\n "),(0,ne.cE)("loading","\n color: var(--n-loading-color);\n font-size: var(--n-loading-size);\n "),(0,ne.cE)("header","\n padding: 8px var(--n-option-padding-left);\n font-size: var(--n-option-font-size);\n transition: \n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n border-bottom: 1px solid var(--n-action-divider-color);\n color: var(--n-action-text-color);\n "),(0,ne.cE)("action","\n padding: 8px var(--n-option-padding-left);\n font-size: var(--n-option-font-size);\n transition: \n color .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n border-top: 1px solid var(--n-action-divider-color);\n color: var(--n-action-text-color);\n "),(0,ne.cB)("base-select-group-header","\n position: relative;\n cursor: default;\n padding: var(--n-option-padding);\n color: var(--n-group-header-text-color);\n "),(0,ne.cB)("base-select-option","\n cursor: pointer;\n position: relative;\n padding: var(--n-option-padding);\n transition:\n color .3s var(--n-bezier),\n opacity .3s var(--n-bezier);\n box-sizing: border-box;\n color: var(--n-option-text-color);\n opacity: 1;\n ",[(0,ne.cM)("show-checkmark","\n padding-right: calc(var(--n-option-padding-right) + 20px);\n "),(0,ne.c)("&::before",'\n content: "";\n position: absolute;\n left: 4px;\n right: 4px;\n top: 0;\n bottom: 0;\n border-radius: var(--n-border-radius);\n transition: background-color .3s var(--n-bezier);\n '),(0,ne.c)("&:active","\n color: var(--n-option-text-color-pressed);\n "),(0,ne.cM)("grouped","\n padding-left: calc(var(--n-option-padding-left) * 1.5);\n "),(0,ne.cM)("pending",[(0,ne.c)("&::before","\n background-color: var(--n-option-color-pending);\n ")]),(0,ne.cM)("selected","\n color: var(--n-option-text-color-active);\n ",[(0,ne.c)("&::before","\n background-color: var(--n-option-color-active);\n "),(0,ne.cM)("pending",[(0,ne.c)("&::before","\n background-color: var(--n-option-color-active-pending);\n ")])]),(0,ne.cM)("disabled","\n cursor: not-allowed;\n ",[(0,ne.C5)("selected","\n color: var(--n-option-text-color-disabled);\n "),(0,ne.cM)("selected","\n opacity: var(--n-option-opacity-disabled);\n ")]),(0,ne.cE)("check","\n font-size: 16px;\n position: absolute;\n right: calc(var(--n-option-padding-right) - 4px);\n top: calc(50% - 7px);\n color: var(--n-option-check-color);\n transition: color .3s var(--n-bezier);\n ",[(0,_e.S)({enterScale:"0.5"})])])]),je=(0,t.pM)({name:"InternalSelectMenu",props:Object.assign(Object.assign({},L.A.props),{clsPrefix:{type:String,required:!0},scrollable:{type:Boolean,default:!0},treeMate:{type:Object,required:!0},multiple:Boolean,size:{type:String,default:"medium"},value:{type:[String,Number,Array],default:null},autoPending:Boolean,virtualScroll:{type:Boolean,default:!0},show:{type:Boolean,default:!0},labelField:{type:String,default:"label"},valueField:{type:String,default:"value"},loading:Boolean,focusable:Boolean,renderLabel:Function,renderOption:Function,nodeProps:Function,showCheckmark:{type:Boolean,default:!0},onMousedown:Function,onScroll:Function,onFocus:Function,onBlur:Function,onKeyup:Function,onKeydown:Function,onTabOut:Function,onMouseenter:Function,onMouseleave:Function,onResize:Function,resetMenuOnOptionsChange:{type:Boolean,default:!0},inlineThemeDisabled:Boolean,onToggle:Function}),setup(e){const{mergedClsPrefixRef:n,mergedRtlRef:o}=(0,W.Ay)(e),l=(0,Y.I)("InternalSelectMenu",o,n),i=(0,L.A)("InternalSelectMenu","-internal-select-menu",He,Ie.A,e,(0,r.lW)(e,"clsPrefix")),s=(0,r.KR)(null),c=(0,r.KR)(null),d=(0,r.KR)(null),u=(0,t.EW)((()=>e.treeMate.getFlattenedNodes())),h=(0,t.EW)((()=>function(e){const n=new Map;return e.forEach(((e,o)=>{n.set(e.key,o)})),e=>{var o;return null!==(o=n.get(e))&&void 0!==o?o:null}}(u.value))),p=(0,r.KR)(null);function v(){const{value:n}=p;n&&!e.treeMate.getNode(n.key)&&(p.value=null)}let f;(0,t.wB)((()=>e.show),(n=>{n?f=(0,t.wB)((()=>e.treeMate),(()=>{e.resetMenuOnOptionsChange?(e.autoPending?function(){const{treeMate:n}=e;let o=null;const{value:t}=e;null===t?o=n.getFirstAvailableNode():(o=e.multiple?n.getNode((t||[])[(t||[]).length-1]):n.getNode(t),o&&!o.disabled||(o=n.getFirstAvailableNode())),w(o||null)}():v(),(0,t.dY)(x)):v()}),{immediate:!0}):null==f||f()}),{immediate:!0}),(0,t.xo)((()=>{null==f||f()}));const g=(0,t.EW)((()=>(0,he.eV)(i.value.self[(0,ne.cF)("optionHeight",e.size)]))),b=(0,t.EW)((()=>(0,he.Cq)(i.value.self[(0,ne.cF)("padding",e.size)]))),m=(0,t.EW)((()=>e.multiple&&Array.isArray(e.value)?new Set(e.value):new Set)),y=(0,t.EW)((()=>{const e=u.value;return e&&0===e.length}));function C(n){const{onScroll:o}=e;o&&o(n)}function w(e,n=!1){p.value=e,n&&x()}function x(){var n,o;const t=p.value;if(!t)return;const r=h.value(t.key);null!==r&&(e.virtualScroll?null===(n=c.value)||void 0===n||n.scrollTo({index:r}):null===(o=d.value)||void 0===o||o.scrollTo({index:r,elSize:g.value}))}(0,t.Gt)(Ne.H,{handleOptionMouseEnter:function(e,n){n.disabled||w(n,!1)},handleOptionClick:function(n,o){o.disabled||function(n){const{onToggle:o}=e;o&&o(n)}(o)},valueSetRef:m,pendingTmNodeRef:p,nodePropsRef:(0,r.lW)(e,"nodeProps"),showCheckmarkRef:(0,r.lW)(e,"showCheckmark"),multipleRef:(0,r.lW)(e,"multiple"),valueRef:(0,r.lW)(e,"value"),renderLabelRef:(0,r.lW)(e,"renderLabel"),renderOptionRef:(0,r.lW)(e,"renderOption"),labelFieldRef:(0,r.lW)(e,"labelField"),valueFieldRef:(0,r.lW)(e,"valueField")}),(0,t.Gt)(Ne.v,s),(0,t.sV)((()=>{const{value:e}=d;e&&e.sync()}));const k=(0,t.EW)((()=>{const{size:n}=e,{common:{cubicBezierEaseInOut:o},self:{height:t,borderRadius:r,color:l,groupHeaderTextColor:a,actionDividerColor:s,optionTextColorPressed:c,optionTextColor:d,optionTextColorDisabled:u,optionTextColorActive:h,optionOpacityDisabled:p,optionCheckColor:v,actionTextColor:f,optionColorPending:g,optionColorActive:b,loadingColor:m,loadingSize:y,optionColorActivePending:C,[(0,ne.cF)("optionFontSize",n)]:w,[(0,ne.cF)("optionHeight",n)]:x,[(0,ne.cF)("optionPadding",n)]:k}}=i.value;return{"--n-height":t,"--n-action-divider-color":s,"--n-action-text-color":f,"--n-bezier":o,"--n-border-radius":r,"--n-color":l,"--n-option-font-size":w,"--n-group-header-text-color":a,"--n-option-check-color":v,"--n-option-color-pending":g,"--n-option-color-active":b,"--n-option-color-active-pending":C,"--n-option-height":x,"--n-option-opacity-disabled":p,"--n-option-text-color":d,"--n-option-text-color-active":h,"--n-option-text-color-disabled":u,"--n-option-text-color-pressed":c,"--n-option-padding":k,"--n-option-padding-left":(0,he.Cq)(k,"left"),"--n-option-padding-right":(0,he.Cq)(k,"right"),"--n-loading-color":m,"--n-loading-size":y}})),{inlineThemeDisabled:S}=e,F=S?(0,D.R)("internal-select-menu",(0,t.EW)((()=>e.size[0])),k,e):void 0,z={selfRef:s,next:function(){const{value:e}=p;e&&w(e.getNext({loop:!0}),!0)},prev:function(){const{value:e}=p;e&&w(e.getPrev({loop:!0}),!0)},getPendingTmNode:function(){const{value:e}=p;return e||null}};return me(s,e.onResize),Object.assign({mergedTheme:i,mergedClsPrefix:n,rtlEnabled:l,virtualListRef:c,scrollbarRef:d,itemSize:g,padding:b,flattenedNodes:u,empty:y,virtualListContainer(){const{value:e}=c;return null==e?void 0:e.listElRef},virtualListContent(){const{value:e}=c;return null==e?void 0:e.itemsElRef},doScroll:C,handleFocusin:function(n){var o,t;(null===(o=s.value)||void 0===o?void 0:o.contains(n.target))&&(null===(t=e.onFocus)||void 0===t||t.call(e,n))},handleFocusout:function(n){var o,t;(null===(o=s.value)||void 0===o?void 0:o.contains(n.relatedTarget))||null===(t=e.onBlur)||void 0===t||t.call(e,n)},handleKeyUp:function(n){var o;(0,a.d)(n,"action")||null===(o=e.onKeyup)||void 0===o||o.call(e,n)},handleKeyDown:function(n){var o;(0,a.d)(n,"action")||null===(o=e.onKeydown)||void 0===o||o.call(e,n)},handleMouseDown:function(n){var o;null===(o=e.onMousedown)||void 0===o||o.call(e,n),e.focusable||n.preventDefault()},handleVirtualListResize:function(){var e;null===(e=d.value)||void 0===e||e.sync()},handleVirtualListScroll:function(e){var n;null===(n=d.value)||void 0===n||n.sync(),C(e)},cssVars:S?void 0:k,themeClass:null==F?void 0:F.themeClass,onRender:null==F?void 0:F.onRender},z)},render(){const{$slots:e,virtualScroll:n,clsPrefix:o,mergedTheme:r,themeClass:l,onRender:i}=this;return null==i||i(),(0,t.h)("div",{ref:"selfRef",tabindex:this.focusable?0:-1,class:[`${o}-base-select-menu`,this.rtlEnabled&&`${o}-base-select-menu--rtl`,l,this.multiple&&`${o}-base-select-menu--multiple`],style:this.cssVars,onFocusin:this.handleFocusin,onFocusout:this.handleFocusout,onKeyup:this.handleKeyUp,onKeydown:this.handleKeyDown,onMousedown:this.handleMouseDown,onMouseenter:this.onMouseenter,onMouseleave:this.onMouseleave},(0,ie.iQ)(e.header,(e=>e&&(0,t.h)("div",{class:`${o}-base-select-menu__header`,"data-header":!0,key:"header"},e))),this.loading?(0,t.h)("div",{class:`${o}-base-select-menu__loading`},(0,t.h)(Ee.A,{clsPrefix:o,strokeWidth:20})):this.empty?(0,t.h)("div",{class:`${o}-base-select-menu__empty`,"data-empty":!0},(0,ie.Nj)(e.empty,(()=>[(0,t.h)(Te,{theme:r.peers.Empty,themeOverrides:r.peerOverrides.Empty})]))):(0,t.h)(Ae.A,{ref:"scrollbarRef",theme:r.peers.Scrollbar,themeOverrides:r.peerOverrides.Scrollbar,scrollable:this.scrollable,container:n?this.virtualListContainer:void 0,content:n?this.virtualListContent:void 0,onScroll:n?void 0:this.doScroll},{default:()=>n?(0,t.h)(Fe.A,{ref:"virtualListRef",class:`${o}-virtual-list`,items:this.flattenedNodes,itemSize:this.itemSize,showScrollbar:!1,paddingTop:this.padding.top,paddingBottom:this.padding.bottom,onResize:this.handleVirtualListResize,onScroll:this.handleVirtualListScroll,itemResizable:!0},{default:({item:e})=>e.isGroup?(0,t.h)(De,{key:e.key,clsPrefix:o,tmNode:e}):e.ignored?null:(0,t.h)(Ke,{clsPrefix:o,key:e.key,tmNode:e})}):(0,t.h)("div",{class:`${o}-base-select-menu-option-wrapper`,style:{paddingTop:this.padding.top,paddingBottom:this.padding.bottom}},this.flattenedNodes.map((e=>e.isGroup?(0,t.h)(De,{key:e.key,clsPrefix:o,tmNode:e}):(0,t.h)(Ke,{clsPrefix:o,key:e.key,tmNode:e}))))}),(0,ie.iQ)(e.action,(e=>e&&[(0,t.h)("div",{class:`${o}-base-select-menu__action`,"data-action":!0,key:"action"},e),(0,t.h)(Oe.A,{onFocus:this.onTabOut,key:"focus-detector"})])))}});var Ve=o(2414);function Qe(e){return"group"===e.type}function Xe(e){return"ignored"===e.type}function Ge(e,n){try{return!!(1+n.toString().toLowerCase().indexOf(e.trim().toLowerCase()))}catch(e){return!1}}const Ue=(0,ne.c)([(0,ne.cB)("select","\n z-index: auto;\n outline: none;\n width: 100%;\n position: relative;\n "),(0,ne.cB)("select-menu","\n margin: 4px 0;\n box-shadow: var(--n-menu-box-shadow);\n ",[(0,_e.S)({originalTransition:"background-color .3s var(--n-bezier), box-shadow .3s var(--n-bezier)"})])]),qe=Object.assign(Object.assign({},L.A.props),{to:_.$.propTo,bordered:{type:Boolean,default:void 0},clearable:Boolean,clearFilterAfterSelect:{type:Boolean,default:!0},options:{type:Array,default:()=>[]},defaultValue:{type:[String,Number,Array],default:null},keyboard:{type:Boolean,default:!0},value:[String,Number,Array],placeholder:String,menuProps:Object,multiple:Boolean,size:String,filterable:Boolean,disabled:{type:Boolean,default:void 0},remote:Boolean,loading:Boolean,filter:Function,placement:{type:String,default:"bottom-start"},widthMode:{type:String,default:"trigger"},tag:Boolean,onCreate:Function,fallbackOption:{type:[Function,Boolean],default:void 0},show:{type:Boolean,default:void 0},showArrow:{type:Boolean,default:!0},maxTagCount:[Number,String],ellipsisTagPopoverProps:Object,consistentMenuWidth:{type:Boolean,default:!0},virtualScroll:{type:Boolean,default:!0},labelField:{type:String,default:"label"},valueField:{type:String,default:"value"},childrenField:{type:String,default:"children"},renderLabel:Function,renderOption:Function,renderTag:Function,"onUpdate:value":[Function,Array],inputProps:Object,nodeProps:Function,ignoreComposition:{type:Boolean,default:!0},showOnFocus:Boolean,onUpdateValue:[Function,Array],onBlur:[Function,Array],onClear:[Function,Array],onFocus:[Function,Array],onScroll:[Function,Array],onSearch:[Function,Array],onUpdateShow:[Function,Array],"onUpdate:show":[Function,Array],displayDirective:{type:String,default:"show"},resetMenuOnOptionsChange:{type:Boolean,default:!0},status:String,showCheckmark:{type:Boolean,default:!0},onChange:[Function,Array],items:Array}),Ye=(0,t.pM)({name:"Select",props:qe,setup(e){const{mergedClsPrefixRef:n,mergedBorderedRef:o,namespaceRef:l,inlineThemeDisabled:s}=(0,W.Ay)(e),c=(0,L.A)("Select","-select",Ue,Ve.A,e,n),d=(0,r.KR)(e.defaultValue),u=(0,r.lW)(e,"value"),h=(0,E.A)(u,d),p=(0,r.KR)(!1),v=(0,r.KR)(""),f=(0,t.EW)((()=>{const{valueField:n,childrenField:o}=e,t=function(e,n){return{getIsGroup:Qe,getIgnored:Xe,getKey:n=>Qe(n)?n.name||n.key||"key-required":n[e],getChildren:e=>e[n]}}(n,o);return B($.value,t)})),g=(0,t.EW)((()=>function(e,n,o){const t=new Map;return e.forEach((e=>{Qe(e)?e[o].forEach((e=>{t.set(e[n],e)})):t.set(e[n],e)})),t}(T.value,e.valueField,e.childrenField))),b=(0,r.KR)(!1),m=(0,E.A)((0,r.lW)(e,"show"),b),y=(0,r.KR)(null),C=(0,r.KR)(null),w=(0,r.KR)(null),{localeRef:x}=(0,N.A)("Select"),k=(0,t.EW)((()=>{var n;return null!==(n=e.placeholder)&&void 0!==n?n:x.value.placeholder})),S=(0,O.A)(e,["items","options"]),F=[],z=(0,r.KR)([]),R=(0,r.KR)([]),P=(0,r.KR)(new Map),M=(0,t.EW)((()=>{const{fallbackOption:n}=e;if(void 0===n){const{labelField:n,valueField:o}=e;return e=>({[n]:String(e),[o]:e})}return!1!==n&&(e=>Object.assign(n(e),{value:e}))})),T=(0,t.EW)((()=>R.value.concat(z.value).concat(S.value))),A=(0,t.EW)((()=>{const{filter:n}=e;if(n)return n;const{labelField:o,valueField:t}=e;return(e,n)=>{if(!n)return!1;const r=n[o];if("string"==typeof r)return Ge(e,r);const l=n[t];return"string"==typeof l?Ge(e,l):"number"==typeof l&&Ge(e,String(l))}})),$=(0,t.EW)((()=>{if(e.remote)return S.value;{const{value:n}=T,{value:o}=v;return o.length&&e.filterable?function(e,n,o,t){return n?function e(r){if(!Array.isArray(r))return[];const l=[];for(const i of r)if(Qe(i)){const n=e(i[t]);n.length&&l.push(Object.assign({},i,{[t]:n}))}else{if(Xe(i))continue;n(o,i)&&l.push(i)}return l}(e):e}(n,A.value,o,e.childrenField):n}}));function V(n){const o=e.remote,{value:t}=P,{value:r}=g,{value:l}=M,i=[];return n.forEach((e=>{if(r.has(e))i.push(r.get(e));else if(o&&t.has(e))i.push(t.get(e));else if(l){const n=l(e);n&&i.push(n)}})),i}const Q=(0,t.EW)((()=>{if(e.multiple){const{value:e}=h;return Array.isArray(e)?V(e):[]}return null})),X=(0,t.EW)((()=>{const{value:n}=h;return e.multiple||Array.isArray(n)||null===n?null:V([n])[0]||null})),G=(0,K.A)(e),{mergedSizeRef:U,mergedDisabledRef:q,mergedStatusRef:Y}=G;function Z(n,o){const{onChange:t,"onUpdate:value":r,onUpdateValue:l}=e,{nTriggerFormChange:i,nTriggerFormInput:a}=G;t&&(0,H.T)(t,n,o),l&&(0,H.T)(l,n,o),r&&(0,H.T)(r,n,o),d.value=n,i(),a()}function J(n){const{onBlur:o}=e,{nTriggerFormBlur:t}=G;o&&(0,H.T)(o,n),t()}function ee(){var n;const{remote:o,multiple:t}=e;if(o){const{value:o}=P;if(t){const{valueField:t}=e;null===(n=Q.value)||void 0===n||n.forEach((e=>{o.set(e[t],e)}))}else{const n=X.value;n&&o.set(n[e.valueField],n)}}}function ne(n){const{onUpdateShow:o,"onUpdate:show":t}=e;o&&(0,H.T)(o,n),t&&(0,H.T)(t,n),b.value=n}function oe(){q.value||(ne(!0),b.value=!0,e.filterable&&ue())}function te(){ne(!1)}function re(){v.value="",R.value=F}const le=(0,r.KR)(!1);function ie(e){ae(e.rawNode)}function ae(n){if(q.value)return;const{tag:o,remote:t,clearFilterAfterSelect:r,valueField:l}=e;if(o&&!t){const{value:e}=R,n=e[0]||null;if(n){const e=z.value;e.length?e.push(n):z.value=[n],R.value=F}}if(t&&P.value.set(n[l],n),e.multiple){const i=function(n){if(!Array.isArray(n))return[];if(M.value)return Array.from(n);{const{remote:o}=e,{value:t}=g;if(o){const{value:e}=P;return n.filter((n=>t.has(n)||e.has(n)))}return n.filter((e=>t.has(e)))}}(h.value),a=i.findIndex((e=>e===n[l]));if(~a){if(i.splice(a,1),o&&!t){const e=se(n[l]);~e&&(z.value.splice(e,1),r&&(v.value=""))}}else i.push(n[l]),r&&(v.value="");Z(i,V(i))}else{if(o&&!t){const e=se(n[l]);z.value=~e?[z.value[e]]:F}de(),te(),Z(n[l],n)}}function se(n){return z.value.findIndex((o=>o[e.valueField]===n))}function ce(n){var o,t,r,l,i;if(e.keyboard)switch(n.key){case" ":if(e.filterable)break;n.preventDefault();case"Enter":if(!(null===(o=y.value)||void 0===o?void 0:o.isComposing))if(m.value){const n=null===(t=w.value)||void 0===t?void 0:t.getPendingTmNode();n?ie(n):e.filterable||(te(),de())}else if(oe(),e.tag&&le.value){const n=R.value[0];if(n){const o=n[e.valueField],{value:t}=h;e.multiple&&Array.isArray(t)&&t.some((e=>e===o))||ae(n)}}n.preventDefault();break;case"ArrowUp":if(n.preventDefault(),e.loading)return;m.value&&(null===(r=w.value)||void 0===r||r.prev());break;case"ArrowDown":if(n.preventDefault(),e.loading)return;m.value?null===(l=w.value)||void 0===l||l.next():oe();break;case"Escape":m.value&&((0,j.z)(n),te()),null===(i=y.value)||void 0===i||i.focus()}else n.preventDefault()}function de(){var e;null===(e=y.value)||void 0===e||e.focus()}function ue(){var e;null===(e=y.value)||void 0===e||e.focusInput()}ee(),(0,t.wB)((0,r.lW)(e,"options"),ee);const he={focus:()=>{var e;null===(e=y.value)||void 0===e||e.focus()},focusInput:()=>{var e;null===(e=y.value)||void 0===e||e.focusInput()},blur:()=>{var e;null===(e=y.value)||void 0===e||e.blur()},blurInput:()=>{var e;null===(e=y.value)||void 0===e||e.blurInput()}},pe=(0,t.EW)((()=>{const{self:{menuBoxShadow:e}}=c.value;return{"--n-menu-box-shadow":e}})),ve=s?(0,D.R)("select",void 0,pe,e):void 0;return Object.assign(Object.assign({},he),{mergedStatus:Y,mergedClsPrefix:n,mergedBordered:o,namespace:l,treeMate:f,isMounted:(0,I.A)(),triggerRef:y,menuRef:w,pattern:v,uncontrolledShow:b,mergedShow:m,adjustedTo:(0,_.$)(e),uncontrolledValue:d,mergedValue:h,followerRef:C,localizedPlaceholder:k,selectedOption:X,selectedOptions:Q,mergedSize:U,mergedDisabled:q,focused:p,activeWithoutMenuOpen:le,inlineThemeDisabled:s,onTriggerInputFocus:function(){e.filterable&&(le.value=!0)},onTriggerInputBlur:function(){e.filterable&&(le.value=!1,m.value||re())},handleTriggerOrMenuResize:function(){var e;m.value&&(null===(e=C.value)||void 0===e||e.syncPosition())},handleMenuFocus:function(e){p.value=!0},handleMenuBlur:function(e){var n;(null===(n=y.value)||void 0===n?void 0:n.$el.contains(e.relatedTarget))||(p.value=!1,J(e),te())},handleMenuTabOut:function(){var e;null===(e=y.value)||void 0===e||e.focus(),te()},handleTriggerClick:function(){q.value||(m.value?e.filterable?ue():te():oe())},handleToggle:ie,handleDeleteOption:ae,handlePatternInput:function(n){m.value||oe();const{value:o}=n.target;v.value=o;const{tag:t,remote:r}=e;if(function(n){const{onSearch:o}=e;o&&(0,H.T)(o,n)}(o),t&&!r){if(!o)return void(R.value=F);const{onCreate:n}=e,t=n?n(o):{[e.labelField]:o,[e.valueField]:o},{valueField:r,labelField:l}=e;S.value.some((e=>e[r]===t[r]||e[l]===t[l]))||z.value.some((e=>e[r]===t[r]||e[l]===t[l]))?R.value=F:R.value=[t]}},handleClear:function(n){n.stopPropagation();const{multiple:o}=e;!o&&e.filterable&&te(),function(){const{onClear:n}=e;n&&(0,H.T)(n)}(),o?Z([],[]):Z(null,null)},handleTriggerBlur:function(e){var n,o;(null===(o=null===(n=w.value)||void 0===n?void 0:n.selfRef)||void 0===o?void 0:o.contains(e.relatedTarget))||(p.value=!1,J(e),te())},handleTriggerFocus:function(n){!function(n){const{onFocus:o,showOnFocus:t}=e,{nTriggerFormFocus:r}=G;o&&(0,H.T)(o,n),r(),t&&oe()}(n),p.value=!0},handleKeydown:ce,handleMenuAfterLeave:re,handleMenuClickOutside:function(e){var n;m.value&&((null===(n=y.value)||void 0===n?void 0:n.$el.contains((0,i.b)(e)))||te())},handleMenuScroll:function(n){!function(n){const{onScroll:o}=e;o&&(0,H.T)(o,n)}(n)},handleMenuKeydown:ce,handleMenuMousedown:function(e){(0,a.d)(e,"action")||(0,a.d)(e,"empty")||e.preventDefault()},mergedTheme:c,cssVars:s?void 0:pe,themeClass:null==ve?void 0:ve.themeClass,onRender:null==ve?void 0:ve.onRender})},render(){return(0,t.h)("div",{class:`${this.mergedClsPrefix}-select`},(0,t.h)(M.A,null,{default:()=>[(0,t.h)(T.A,null,{default:()=>(0,t.h)(Se,{ref:"triggerRef",inlineThemeDisabled:this.inlineThemeDisabled,status:this.mergedStatus,inputProps:this.inputProps,clsPrefix:this.mergedClsPrefix,showArrow:this.showArrow,maxTagCount:this.maxTagCount,ellipsisTagPopoverProps:this.ellipsisTagPopoverProps,bordered:this.mergedBordered,active:this.activeWithoutMenuOpen||this.mergedShow,pattern:this.pattern,placeholder:this.localizedPlaceholder,selectedOption:this.selectedOption,selectedOptions:this.selectedOptions,multiple:this.multiple,renderTag:this.renderTag,renderLabel:this.renderLabel,filterable:this.filterable,clearable:this.clearable,disabled:this.mergedDisabled,size:this.mergedSize,theme:this.mergedTheme.peers.InternalSelection,labelField:this.labelField,valueField:this.valueField,themeOverrides:this.mergedTheme.peerOverrides.InternalSelection,loading:this.loading,focused:this.focused,onClick:this.handleTriggerClick,onDeleteOption:this.handleDeleteOption,onPatternInput:this.handlePatternInput,onClear:this.handleClear,onBlur:this.handleTriggerBlur,onFocus:this.handleTriggerFocus,onKeydown:this.handleKeydown,onPatternBlur:this.onTriggerInputBlur,onPatternFocus:this.onTriggerInputFocus,onResize:this.handleTriggerOrMenuResize,ignoreComposition:this.ignoreComposition},{arrow:()=>{var e,n;return[null===(n=(e=this.$slots).arrow)||void 0===n?void 0:n.call(e)]}})}),(0,t.h)(A.A,{ref:"followerRef",show:this.mergedShow,to:this.adjustedTo,teleportDisabled:this.adjustedTo===_.$.tdkey,containerClass:this.namespace,width:this.consistentMenuWidth?"target":void 0,minWidth:"target",placement:this.placement},{default:()=>(0,t.h)(l.Transition,{name:"fade-in-scale-up-transition",appear:this.isMounted,onAfterLeave:this.handleMenuAfterLeave},{default:()=>{var e,n,o;return this.mergedShow||"show"===this.displayDirective?(null===(e=this.onRender)||void 0===e||e.call(this),(0,t.bo)((0,t.h)(je,Object.assign({},this.menuProps,{ref:"menuRef",onResize:this.handleTriggerOrMenuResize,inlineThemeDisabled:this.inlineThemeDisabled,virtualScroll:this.consistentMenuWidth&&this.virtualScroll,class:[`${this.mergedClsPrefix}-select-menu`,this.themeClass,null===(n=this.menuProps)||void 0===n?void 0:n.class],clsPrefix:this.mergedClsPrefix,focusable:!0,labelField:this.labelField,valueField:this.valueField,autoPending:!0,nodeProps:this.nodeProps,theme:this.mergedTheme.peers.InternalSelectMenu,themeOverrides:this.mergedTheme.peerOverrides.InternalSelectMenu,treeMate:this.treeMate,multiple:this.multiple,size:"medium",renderOption:this.renderOption,renderLabel:this.renderLabel,value:this.mergedValue,style:[null===(o=this.menuProps)||void 0===o?void 0:o.style,this.cssVars],onToggle:this.handleToggle,onScroll:this.handleMenuScroll,onFocus:this.handleMenuFocus,onBlur:this.handleMenuBlur,onKeydown:this.handleMenuKeydown,onTabOut:this.handleMenuTabOut,onMousedown:this.handleMenuMousedown,show:this.mergedShow,showCheckmark:this.showCheckmark,resetMenuOnOptionsChange:this.resetMenuOnOptionsChange}),{empty:()=>{var e,n;return[null===(n=(e=this.$slots).empty)||void 0===n?void 0:n.call(e)]},header:()=>{var e,n;return[null===(n=(e=this.$slots).header)||void 0===n?void 0:n.call(e)]},action:()=>{var e,n;return[null===(n=(e=this.$slots).action)||void 0===n?void 0:n.call(e)]}}),"show"===this.displayDirective?[[l.vShow,this.mergedShow],[$.A,this.handleMenuClickOutside,void 0,{capture:!0}]]:[[$.A,this.handleMenuClickOutside,void 0,{capture:!0}]])):null}})})]}))}})}}]); \ No newline at end of file diff --git a/NearBeach/static/NearBeach/1080.min.js.gz b/NearBeach/static/NearBeach/1080.min.js.gz new file mode 100644 index 000000000..ff6cf894b Binary files /dev/null and b/NearBeach/static/NearBeach/1080.min.js.gz differ diff --git a/NearBeach/static/NearBeach/1960.min.js b/NearBeach/static/NearBeach/1960.min.js new file mode 100644 index 000000000..0e18e4c1f --- /dev/null +++ b/NearBeach/static/NearBeach/1960.min.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunknearbeach=self.webpackChunknearbeach||[]).push([[1960],{1960:(e,n,t)=>{t.d(n,{A:()=>jn});var r=t(641),i=t(953),o=t(9726),l=t(5562),a=t(9359),s=t(922),d=t(3370),c=t(4019),u=t(3982),h=t(6680),p=t(947),g=t(9794);const f=(0,g.D)("n-upload"),v="__UPLOAD_DRAGGER__",m=(0,r.pM)({name:"UploadDragger",[v]:!0,setup(e,{slots:n}){const t=(0,r.WQ)(f,null);return t||(0,u.$8)("upload-dragger","`n-upload-dragger` must be placed inside `n-upload`."),()=>{const{mergedClsPrefixRef:{value:e},mergedDisabledRef:{value:i},maxReachedRef:{value:o}}=t;return(0,r.h)("div",{class:[`${e}-upload-dragger`,(i||o)&&`${e}-upload-dragger--disabled`]},n)}}});var w=t(1900),b=function(e,n,t,r){return new(t||(t=Promise))((function(i,o){function l(e){try{s(r.next(e))}catch(e){o(e)}}function a(e){try{s(r.throw(e))}catch(e){o(e)}}function s(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(l,a)}s((r=r.apply(e,n||[])).next())}))};const x=e=>e.includes("image/"),C=(e="")=>{const n=e.split("/"),t=n[n.length-1].split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(t)||[""])[0]},y=/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i,R=e=>{if(e.type)return x(e.type);const n=C(e.name||"");if(y.test(n))return!0;const t=e.thumbnailUrl||e.url||"",r=C(t);return!(!/^data:image\//.test(t)&&!y.test(r))},B=w.B&&window.FileReader&&window.File;function k(e){const{id:n,name:t,percentage:r,status:i,url:o,file:l,thumbnailUrl:a,type:s,fullPath:d,batchId:c}=e;return{id:n,name:t,percentage:null!=r?r:null,status:i,url:null!=o?o:null,file:null!=l?l:null,thumbnailUrl:null!=a?a:null,type:null!=s?s:null,fullPath:null!=d?d:null,batchId:null!=c?c:null}}const L=(0,r.pM)({name:"Add",render:()=>(0,r.h)("svg",{width:"512",height:"512",viewBox:"0 0 512 512",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("path",{d:"M256 112V400M400 256H112",stroke:"currentColor","stroke-width":"32","stroke-linecap":"round","stroke-linejoin":"round"}))});var P=t(2494),$=t(9521);const O=(0,r.pM)({name:"UploadTrigger",props:{abstract:Boolean},setup(e,{slots:n}){const t=(0,r.WQ)(f,null);t||(0,u.$8)("upload-trigger","`n-upload-trigger` must be placed inside `n-upload`.");const{mergedClsPrefixRef:i,mergedDisabledRef:o,maxReachedRef:l,listTypeRef:a,dragOverRef:s,openOpenFileDialog:d,draggerInsideRef:c,handleFileAddition:h,mergedDirectoryDndRef:p,triggerClassRef:g,triggerStyleRef:v}=t,w=(0,r.EW)((()=>"image-card"===a.value));function x(){o.value||l.value||d()}function C(e){e.preventDefault(),s.value=!0}function y(e){e.preventDefault(),s.value=!0}function R(e){e.preventDefault(),s.value=!1}function B(e){var n;if(e.preventDefault(),!c.value||o.value||l.value)return void(s.value=!1);const t=null===(n=e.dataTransfer)||void 0===n?void 0:n.items;(null==t?void 0:t.length)?function(e,n){return b(this,void 0,void 0,(function*(){const t=[];return yield function e(r){return b(this,void 0,void 0,(function*(){for(const i of r)if(i)if(n&&i.isDirectory){const n=i.createReader();try{const t=yield new Promise(((e,t)=>{n.readEntries(e,t)}));yield e(t)}catch(e){}}else if(i.isFile)try{const e=yield new Promise(((e,n)=>{i.file(e,n)}));t.push({file:e,entry:i,source:"dnd"})}catch(e){}}))}(e),t}))}(Array.from(t).map((e=>e.webkitGetAsEntry())),p.value).then((e=>{h(e)})).finally((()=>{s.value=!1})):s.value=!1}return()=>{var t;const{value:a}=i;return e.abstract?null===(t=n.default)||void 0===t?void 0:t.call(n,{handleClick:x,handleDrop:B,handleDragOver:C,handleDragEnter:y,handleDragLeave:R}):(0,r.h)("div",{class:[`${a}-upload-trigger`,(o.value||l.value)&&`${a}-upload-trigger--disabled`,w.value&&`${a}-upload-trigger--image-card`,g.value],style:v.value,onClick:x,onDrop:B,onDragover:C,onDragenter:y,onDragleave:R},w.value?(0,r.h)(m,null,{default:()=>(0,$.Nj)(n.default,(()=>[(0,r.h)(P.A,{clsPrefix:a},{default:()=>(0,r.h)(L,null)})]))}):n)}}});var S=t(9440),z=t(1392);const T=(0,z.l)("attach",(0,r.h)("svg",{viewBox:"0 0 16 16",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},(0,r.h)("g",{fill:"currentColor","fill-rule":"nonzero"},(0,r.h)("path",{d:"M3.25735931,8.70710678 L7.85355339,4.1109127 C8.82986412,3.13460197 10.4127766,3.13460197 11.3890873,4.1109127 C12.365398,5.08722343 12.365398,6.67013588 11.3890873,7.64644661 L6.08578644,12.9497475 C5.69526215,13.3402718 5.06209717,13.3402718 4.67157288,12.9497475 C4.28104858,12.5592232 4.28104858,11.9260582 4.67157288,11.5355339 L9.97487373,6.23223305 C10.1701359,6.0369709 10.1701359,5.72038841 9.97487373,5.52512627 C9.77961159,5.32986412 9.4630291,5.32986412 9.26776695,5.52512627 L3.96446609,10.8284271 C3.18341751,11.6094757 3.18341751,12.8758057 3.96446609,13.6568542 C4.74551468,14.4379028 6.01184464,14.4379028 6.79289322,13.6568542 L12.0961941,8.35355339 C13.4630291,6.98671837 13.4630291,4.77064094 12.0961941,3.40380592 C10.7293591,2.0369709 8.51328163,2.0369709 7.14644661,3.40380592 L2.55025253,8 C2.35499039,8.19526215 2.35499039,8.51184464 2.55025253,8.70710678 C2.74551468,8.90236893 3.06209717,8.90236893 3.25735931,8.70710678 Z"})))));var A=t(9131);const M=(0,z.l)("trash",(0,r.h)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,r.h)("path",{d:"M432,144,403.33,419.74A32,32,0,0,1,371.55,448H140.46a32,32,0,0,1-31.78-28.26L80,144",style:"fill: none; stroke: currentcolor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 32px;"}),(0,r.h)("rect",{x:"32",y:"64",width:"448",height:"80",rx:"16",ry:"16",style:"fill: none; stroke: currentcolor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 32px;"}),(0,r.h)("line",{x1:"312",y1:"240",x2:"200",y2:"352",style:"fill: none; stroke: currentcolor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 32px;"}),(0,r.h)("line",{x1:"312",y1:"352",x2:"200",y2:"240",style:"fill: none; stroke: currentcolor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 32px;"}))),D=(0,z.l)("cancel",(0,r.h)("svg",{viewBox:"0 0 16 16",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},(0,r.h)("g",{fill:"currentColor","fill-rule":"nonzero"},(0,r.h)("path",{d:"M2.58859116,2.7156945 L2.64644661,2.64644661 C2.82001296,2.47288026 3.08943736,2.45359511 3.2843055,2.58859116 L3.35355339,2.64644661 L8,7.293 L12.6464466,2.64644661 C12.8417088,2.45118446 13.1582912,2.45118446 13.3535534,2.64644661 C13.5488155,2.84170876 13.5488155,3.15829124 13.3535534,3.35355339 L8.707,8 L13.3535534,12.6464466 C13.5271197,12.820013 13.5464049,13.0894374 13.4114088,13.2843055 L13.3535534,13.3535534 C13.179987,13.5271197 12.9105626,13.5464049 12.7156945,13.4114088 L12.6464466,13.3535534 L8,8.707 L3.35355339,13.3535534 C3.15829124,13.5488155 2.84170876,13.5488155 2.64644661,13.3535534 C2.45118446,13.1582912 2.45118446,12.8417088 2.64644661,12.6464466 L7.293,8 L2.64644661,3.35355339 C2.47288026,3.17998704 2.45359511,2.91056264 2.58859116,2.7156945 L2.64644661,2.64644661 L2.58859116,2.7156945 Z"}))))),E=(0,z.l)("retry",(0,r.h)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,r.h)("path",{d:"M320,146s24.36-12-64-12A160,160,0,1,0,416,294",style:"fill: none; stroke: currentcolor; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 32px;"}),(0,r.h)("polyline",{points:"256 58 336 138 256 218",style:"fill: none; stroke: currentcolor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 32px;"}))),W=(0,z.l)("download",(0,r.h)("svg",{viewBox:"0 0 16 16",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},(0,r.h)("g",{fill:"currentColor","fill-rule":"nonzero"},(0,r.h)("path",{d:"M3.5,13 L12.5,13 C12.7761424,13 13,13.2238576 13,13.5 C13,13.7454599 12.8231248,13.9496084 12.5898756,13.9919443 L12.5,14 L3.5,14 C3.22385763,14 3,13.7761424 3,13.5 C3,13.2545401 3.17687516,13.0503916 3.41012437,13.0080557 L3.5,13 L12.5,13 L3.5,13 Z M7.91012437,1.00805567 L8,1 C8.24545989,1 8.44960837,1.17687516 8.49194433,1.41012437 L8.5,1.5 L8.5,10.292 L11.1819805,7.6109127 C11.3555469,7.43734635 11.6249713,7.4180612 11.8198394,7.55305725 L11.8890873,7.6109127 C12.0626536,7.78447906 12.0819388,8.05390346 11.9469427,8.2487716 L11.8890873,8.31801948 L8.35355339,11.8535534 C8.17998704,12.0271197 7.91056264,12.0464049 7.7156945,11.9114088 L7.64644661,11.8535534 L4.1109127,8.31801948 C3.91565056,8.12275734 3.91565056,7.80617485 4.1109127,7.6109127 C4.28447906,7.43734635 4.55390346,7.4180612 4.7487716,7.55305725 L4.81801948,7.6109127 L7.5,10.292 L7.5,1.5 C7.5,1.25454011 7.67687516,1.05039163 7.91012437,1.00805567 L8,1 L7.91012437,1.00805567 Z"}))))),I=w.B&&"loading"in document.createElement("img"),j=Object.assign(Object.assign({},a.A.props),{onPreviewPrev:Function,onPreviewNext:Function,showToolbar:{type:Boolean,default:!0},showToolbarTooltip:Boolean}),F=(0,g.D)("n-image"),U=new WeakMap,H=new WeakMap,N=new WeakMap;var Z=t(33),V=t(3751),q=t(4675),X=t(5015),_=t(5322),G=t(5400),K=t(2033);const Y=(Q={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",ÃĄ:"a",Ãĸ:"a",ÃŖ:"a",ä:"a",ÃĨ:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",Ê:"e",ÃĒ:"e",ÃĢ:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ÃŦ:"i",í:"i",ÃŽ:"i",ï:"i",Ñ:"N",Ãą:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",Ã˛:"o",Ãŗ:"o",ô:"o",Ãĩ:"o",Ãļ:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",Ú:"u",Ãē:"u",Ãģ:"u",Ãŧ:"u",Ý:"Y",ÃŊ:"y",Ãŋ:"y",Æ:"Ae",ÃĻ:"ae",Þ:"Th",Þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ä :"G",Äĸ:"G",ĝ:"g",ğ:"g",ÄĄ:"g",ÄŖ:"g",Ĥ:"H",ÄĻ:"H",ÄĨ:"h",ħ:"h",Ĩ:"I",ÄĒ:"I",ÄŦ:"I",ÄŽ:"I",Ä°:"I",ÄŠ:"i",ÄĢ:"i",Ä­:"i",į:"i",Äą:"i",Ä´:"J",Äĩ:"j",Äļ:"K",ġ:"k",ĸ:"k",Äš:"L",Äģ:"L",ÄŊ:"L",Äŋ:"L",Ł:"L",Äē:"l",Äŧ:"l",Äž:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Å :"S",ś:"s",ŝ:"s",ş:"s",ÅĄ:"s",Åĸ:"T",Ť:"T",ÅĻ:"T",ÅŖ:"t",ÅĨ:"t",ŧ:"t",Ũ:"U",ÅĒ:"U",ÅŦ:"U",ÅŽ:"U",Å°:"U",Å˛:"U",ÅŠ:"u",ÅĢ:"u",Å­:"u",ů:"u",Åą:"u",Åŗ:"u",Å´:"W",Åĩ:"w",Åļ:"Y",Åˇ:"y",Ÿ:"Y",Åš:"Z",Åģ:"Z",ÅŊ:"Z",Åē:"z",Åŧ:"z",Åž:"z",IJ:"IJ",Äŗ:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",Åŋ:"s"},function(e){return null==Q?void 0:Q[e]});var Q,J=t(3456),ee=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ne=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");var te=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;var re=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;var ie="\\ud800-\\udfff",oe="\\u2700-\\u27bf",le="a-z\\xdf-\\xf6\\xf8-\\xff",ae="A-Z\\xc0-\\xd6\\xd8-\\xde",se="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",de="["+se+"]",ce="\\d+",ue="["+oe+"]",he="["+le+"]",pe="[^"+ie+se+ce+oe+le+ae+"]",ge="(?:\\ud83c[\\udde6-\\uddff]){2}",fe="[\\ud800-\\udbff][\\udc00-\\udfff]",ve="["+ae+"]",me="(?:"+he+"|"+pe+")",we="(?:"+ve+"|"+pe+")",be="(?:['’](?:d|ll|m|re|s|t|ve))?",xe="(?:['’](?:D|LL|M|RE|S|T|VE))?",Ce="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",ye="[\\ufe0e\\ufe0f]?",Re=ye+Ce+"(?:\\u200d(?:"+["[^"+ie+"]",ge,fe].join("|")+")"+ye+Ce+")*",Be="(?:"+[ue,ge,fe].join("|")+")"+Re,ke=RegExp([ve+"?"+he+"+"+be+"(?="+[de,ve,"$"].join("|")+")",we+"+"+xe+"(?="+[de,ve+me,"$"].join("|")+")",ve+"?"+me+"+"+be,ve+"+"+xe,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ce,Be].join("|"),"g");const Le=function(e,n,t){return e=(0,J.A)(e),void 0===(n=t?void 0:n)?function(e){return re.test(e)}(e)?function(e){return e.match(ke)||[]}(e):function(e){return e.match(te)||[]}(e):e.match(n)||[]};var Pe=RegExp("['’]","g");const $e=(Me=function(e,n,t){return e+(t?"-":"")+n.toLowerCase()},function(e){return function(e,n,t,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(t=e[++i]);++i(0,r.h)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20"},(0,r.h)("g",{fill:"none"},(0,r.h)("path",{d:"M5.5 4A1.5 1.5 0 0 0 4 5.5v1a.5.5 0 0 1-1 0v-1A2.5 2.5 0 0 1 5.5 3h1a.5.5 0 0 1 0 1h-1zM16 5.5A1.5 1.5 0 0 0 14.5 4h-1a.5.5 0 0 1 0-1h1A2.5 2.5 0 0 1 17 5.5v1a.5.5 0 0 1-1 0v-1zm0 9a1.5 1.5 0 0 1-1.5 1.5h-1a.5.5 0 0 0 0 1h1a2.5 2.5 0 0 0 2.5-2.5v-1a.5.5 0 0 0-1 0v1zm-12 0A1.5 1.5 0 0 0 5.5 16h1.25a.5.5 0 0 1 0 1H5.5A2.5 2.5 0 0 1 3 14.5v-1.25a.5.5 0 0 1 1 0v1.25zM8.5 7A1.5 1.5 0 0 0 7 8.5v3A1.5 1.5 0 0 0 8.5 13h3a1.5 1.5 0 0 0 1.5-1.5v-3A1.5 1.5 0 0 0 11.5 7h-3zM8 8.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-3z",fill:"currentColor"})))}),Te=(0,z.l)("zoomOut",(0,r.h)("svg",{viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("path",{d:"M11 8C11.2761 8 11.5 8.22386 11.5 8.5C11.5 8.77614 11.2761 9 11 9H6C5.72386 9 5.5 8.77614 5.5 8.5C5.5 8.22386 5.72386 8 6 8H11Z",fill:"currentColor"}),(0,r.h)("path",{d:"M14 8.5C14 5.46243 11.5376 3 8.5 3C5.46243 3 3 5.46243 3 8.5C3 11.5376 5.46243 14 8.5 14C9.83879 14 11.0659 13.5217 12.0196 12.7266L16.1464 16.8536L16.2157 16.9114C16.4106 17.0464 16.68 17.0271 16.8536 16.8536C17.0488 16.6583 17.0488 16.3417 16.8536 16.1464L12.7266 12.0196C13.5217 11.0659 14 9.83879 14 8.5ZM4 8.5C4 6.01472 6.01472 4 8.5 4C10.9853 4 13 6.01472 13 8.5C13 10.9853 10.9853 13 8.5 13C6.01472 13 4 10.9853 4 8.5Z",fill:"currentColor"}))),Ae=(0,z.l)("zoomIn",(0,r.h)("svg",{viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("path",{d:"M11.5 8.5C11.5 8.22386 11.2761 8 11 8H9V6C9 5.72386 8.77614 5.5 8.5 5.5C8.22386 5.5 8 5.72386 8 6V8H6C5.72386 8 5.5 8.22386 5.5 8.5C5.5 8.77614 5.72386 9 6 9H8V11C8 11.2761 8.22386 11.5 8.5 11.5C8.77614 11.5 9 11.2761 9 11V9H11C11.2761 9 11.5 8.77614 11.5 8.5Z",fill:"currentColor"}),(0,r.h)("path",{d:"M8.5 3C11.5376 3 14 5.46243 14 8.5C14 9.83879 13.5217 11.0659 12.7266 12.0196L16.8536 16.1464C17.0488 16.3417 17.0488 16.6583 16.8536 16.8536C16.68 17.0271 16.4106 17.0464 16.2157 16.9114L16.1464 16.8536L12.0196 12.7266C11.0659 13.5217 9.83879 14 8.5 14C5.46243 14 3 11.5376 3 8.5C3 5.46243 5.46243 3 8.5 3ZM8.5 4C6.01472 4 4 6.01472 4 8.5C4 10.9853 6.01472 13 8.5 13C10.9853 13 13 10.9853 13 8.5C13 6.01472 10.9853 4 8.5 4Z",fill:"currentColor"})));var Me,De=t(8423);const Ee=(e,n)=>{if(!e)return;const t=document.createElement("a");t.href=e,void 0!==n&&(t.download=n),document.body.appendChild(t),t.click(),document.body.removeChild(t)};var We=t(4611),Ie=t(8565);const je=Object.assign(Object.assign({},We.vY),a.A.props),Fe=(0,r.pM)({name:"Tooltip",props:je,__popover__:!0,setup(e){const{mergedClsPrefixRef:n}=(0,s.Ay)(e),t=(0,a.A)("Tooltip","-tooltip",void 0,Ie.A,e,n),o=(0,i.KR)(null),l={syncPosition(){o.value.syncPosition()},setShow(e){o.value.setShow(e)}};return Object.assign(Object.assign({},l),{popoverRef:o,mergedTheme:t,popoverThemeOverrides:(0,r.EW)((()=>t.value.self))})},render(){const{mergedTheme:e,internalExtraClass:n}=this;return(0,r.h)(We.Ay,Object.assign(Object.assign({},this.$props),{theme:e.peers.Popover,themeOverrides:e.peerOverrides.Popover,builtinThemeOverrides:this.popoverThemeOverrides,internalExtraClass:n.concat("tooltip"),ref:"popoverRef"}),this.$slots)}});var Ue=t(8880);const He=(0,a.a)({name:"Image",common:Ue.A,peers:{Tooltip:Ie.A},self:function(){return{toolbarIconColor:"rgba(255, 255, 255, .9)",toolbarColor:"rgba(0, 0, 0, .35)",toolbarBoxShadow:"none",toolbarBorderRadius:"24px"}}}),Ne=(0,r.h)("svg",{viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("path",{d:"M6 5C5.75454 5 5.55039 5.17688 5.50806 5.41012L5.5 5.5V14.5C5.5 14.7761 5.72386 15 6 15C6.24546 15 6.44961 14.8231 6.49194 14.5899L6.5 14.5V5.5C6.5 5.22386 6.27614 5 6 5ZM13.8536 5.14645C13.68 4.97288 13.4106 4.9536 13.2157 5.08859L13.1464 5.14645L8.64645 9.64645C8.47288 9.82001 8.4536 10.0894 8.58859 10.2843L8.64645 10.3536L13.1464 14.8536C13.3417 15.0488 13.6583 15.0488 13.8536 14.8536C14.0271 14.68 14.0464 14.4106 13.9114 14.2157L13.8536 14.1464L9.70711 10L13.8536 5.85355C14.0488 5.65829 14.0488 5.34171 13.8536 5.14645Z",fill:"currentColor"})),Ze=(0,r.h)("svg",{viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("path",{d:"M13.5 5C13.7455 5 13.9496 5.17688 13.9919 5.41012L14 5.5V14.5C14 14.7761 13.7761 15 13.5 15C13.2545 15 13.0504 14.8231 13.0081 14.5899L13 14.5V5.5C13 5.22386 13.2239 5 13.5 5ZM5.64645 5.14645C5.82001 4.97288 6.08944 4.9536 6.28431 5.08859L6.35355 5.14645L10.8536 9.64645C11.0271 9.82001 11.0464 10.0894 10.9114 10.2843L10.8536 10.3536L6.35355 14.8536C6.15829 15.0488 5.84171 15.0488 5.64645 14.8536C5.47288 14.68 5.4536 14.4106 5.58859 14.2157L5.64645 14.1464L9.79289 10L5.64645 5.85355C5.45118 5.65829 5.45118 5.34171 5.64645 5.14645Z",fill:"currentColor"})),Ve=(0,r.h)("svg",{viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("path",{d:"M4.089 4.216l.057-.07a.5.5 0 0 1 .638-.057l.07.057L10 9.293l5.146-5.147a.5.5 0 0 1 .638-.057l.07.057a.5.5 0 0 1 .057.638l-.057.07L10.707 10l5.147 5.146a.5.5 0 0 1 .057.638l-.057.07a.5.5 0 0 1-.638.057l-.07-.057L10 10.707l-5.146 5.147a.5.5 0 0 1-.638.057l-.07-.057a.5.5 0 0 1-.057-.638l.057-.07L9.293 10L4.146 4.854a.5.5 0 0 1-.057-.638l.057-.07l-.057.07z",fill:"currentColor"})),qe=(0,r.h)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"32",height:"32",viewBox:"0 0 1024 1024"},(0,r.h)("path",{fill:"currentColor",d:"M505.7 661a8 8 0 0 0 12.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}));var Xe=t(7872),_e=t(5268),Ge=t(6657);const Ke=(0,Xe.c)([(0,Xe.c)("body >",[(0,Xe.cB)("image-container","position: fixed;")]),(0,Xe.cB)("image-preview-container","\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: flex;\n "),(0,Xe.cB)("image-preview-overlay","\n z-index: -1;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background: rgba(0, 0, 0, .3);\n ",[(0,_e.v)()]),(0,Xe.cB)("image-preview-toolbar","\n z-index: 1;\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n border-radius: var(--n-toolbar-border-radius);\n height: 48px;\n bottom: 40px;\n padding: 0 12px;\n background: var(--n-toolbar-color);\n box-shadow: var(--n-toolbar-box-shadow);\n color: var(--n-toolbar-icon-color);\n transition: color .3s var(--n-bezier);\n display: flex;\n align-items: center;\n ",[(0,Xe.cB)("base-icon","\n padding: 0 8px;\n font-size: 28px;\n cursor: pointer;\n "),(0,_e.v)()]),(0,Xe.cB)("image-preview-wrapper","\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: flex;\n pointer-events: none;\n ",[(0,Ge.S)()]),(0,Xe.cB)("image-preview","\n user-select: none;\n -webkit-user-select: none;\n pointer-events: all;\n margin: auto;\n max-height: calc(100vh - 32px);\n max-width: calc(100vw - 32px);\n transition: transform .3s var(--n-bezier);\n "),(0,Xe.cB)("image","\n display: inline-flex;\n max-height: 100%;\n max-width: 100%;\n ",[(0,Xe.C5)("preview-disabled","\n cursor: pointer;\n "),(0,Xe.c)("img","\n border-radius: inherit;\n ")])]),Ye=(0,r.pM)({name:"ImagePreview",props:Object.assign(Object.assign({},j),{onNext:Function,onPrev:Function,clsPrefix:{type:String,required:!0}}),setup(e){const n=(0,a.A)("Image","-image",Ke,He,e,(0,i.lW)(e,"clsPrefix"));let t=null;const o=(0,i.KR)(null),l=(0,i.KR)(null),d=(0,i.KR)(void 0),u=(0,i.KR)(!1),h=(0,i.KR)(!1),{localeRef:p}=(0,De.A)("Image");function g(n){var t,r;switch(n.key){case" ":n.preventDefault();break;case"ArrowLeft":null===(t=e.onPrev)||void 0===t||t.call(e);break;case"ArrowRight":null===(r=e.onNext)||void 0===r||r.call(e);break;case"Escape":M()}}(0,r.wB)(u,(e=>{e?(0,G.on)("keydown",document,g):(0,G.A)("keydown",document,g)})),(0,r.xo)((()=>{(0,G.A)("keydown",document,g)}));let f=0,v=0,m=0,w=0,b=0,x=0,C=0,y=0,R=!1;function B(e){const{clientX:n,clientY:t}=e;m=n-f,w=t-v,(0,K.B)(A)}function k(e){const{value:n}=o;if(!n)return{offsetX:0,offsetY:0};const t=n.getBoundingClientRect(),{moveVerticalDirection:r,moveHorizontalDirection:i,deltaHorizontal:l,deltaVertical:a}=e||{};let s=0,d=0;return s=t.width<=window.innerWidth?0:t.left>0?(t.width-window.innerWidth)/2:t.right0?(t.height-window.innerHeight)/2:t.bottom0?"Top":"Bottom"),moveHorizontalDirection:"horizontal"+(o>0?"Left":"Right"),deltaHorizontal:o,deltaVertical:l}}({mouseUpClientX:n,mouseUpClientY:t,mouseDownClientX:C,mouseDownClientY:y}),i=k(r);m=i.offsetX,w=i.offsetY,A()}const P=(0,r.WQ)(F,null);let $=0,O=1,S=0;function z(){O=1,$=0}function T(){const{value:e}=o;if(!e)return 1;const{innerWidth:n,innerHeight:t}=window,r=e.naturalHeight/(t-32),i=e.naturalWidth/(n-32);return r<1&&i<1?1:Math.max(r,i)}function A(e=!0){var n;const{value:t}=o;if(!t)return;const{style:r}=t,i=(0,Z.normalizeStyle)(null===(n=null==P?void 0:P.previewedImgPropsRef.value)||void 0===n?void 0:n.style);let l="";if("string"==typeof i)l=i+";";else for(const e in i)l+=`${$e(e)}: ${i[e]};`;const a=`transform-origin: center; transform: translateX(${m}px) translateY(${w}px) rotate(${S}deg) scale(${O});`;r.cssText=R?l+"cursor: grabbing; transition: none;"+a:l+"cursor: grab;"+a+(e?"":"transition: none;"),e||t.offsetHeight}function M(){u.value=!u.value,h.value=!0}const D={setPreviewSrc:e=>{d.value=e},setThumbnailEl:e=>{t=e},toggleShow:M},E=(0,r.EW)((()=>{const{common:{cubicBezierEaseInOut:e},self:{toolbarIconColor:t,toolbarBorderRadius:r,toolbarBoxShadow:i,toolbarColor:o}}=n.value;return{"--n-bezier":e,"--n-toolbar-icon-color":t,"--n-toolbar-color":o,"--n-toolbar-border-radius":r,"--n-toolbar-box-shadow":i}})),{inlineThemeDisabled:W}=(0,s.Ay)(),I=W?(0,c.R)("image-preview",void 0,E,e):void 0;return Object.assign({previewRef:o,previewWrapperRef:l,previewSrc:d,show:u,appear:(0,X.A)(),displayed:h,previewedImgProps:null==P?void 0:P.previewedImgPropsRef,handleWheel(e){e.preventDefault()},handlePreviewMousedown:function(e){var n,t;if(null===(t=null===(n=null==P?void 0:P.previewedImgPropsRef.value)||void 0===n?void 0:n.onMousedown)||void 0===t||t.call(n,e),0!==e.button)return;const{clientX:r,clientY:i}=e;R=!0,f=r-m,v=i-w,b=m,x=w,C=r,y=i,A(),(0,G.on)("mousemove",document,B),(0,G.on)("mouseup",document,L)},handlePreviewDblclick:function(e){var n,t;null===(t=null===(n=null==P?void 0:P.previewedImgPropsRef.value)||void 0===n?void 0:n.onDblclick)||void 0===t||t.call(n,e);const r=T();O=O===r?1:r,A()},syncTransformOrigin:function(){const{value:e}=l;if(!t||!e)return;const{style:n}=e,r=t.getBoundingClientRect(),i=r.left+r.width/2,o=r.top+r.height/2;n.transformOrigin=`${i}px ${o}px`},handleAfterLeave:()=>{z(),S=0,h.value=!1},handleDragStart:e=>{var n,t;null===(t=null===(n=null==P?void 0:P.previewedImgPropsRef.value)||void 0===n?void 0:n.onDragstart)||void 0===t||t.call(n,e),e.preventDefault()},zoomIn:function(){const e=function(){const{value:e}=o;if(!e)return 1;const{innerWidth:n,innerHeight:t}=window,r=Math.max(1,e.naturalHeight/(t-32)),i=Math.max(1,e.naturalWidth/(n-32));return Math.max(3,2*r,2*i)}();O.5){const e=O;$-=1,O=Math.max(.5,Math.pow(1.5,$));const n=e-O;A(!1);const t=k();O+=n,A(!1),O-=n,m=t.offsetX,w=t.offsetY,A()}},handleDownloadClick:function(){const e=d.value;e&&Ee(e,void 0)},rotateCounterclockwise:function(){S-=90,A()},rotateClockwise:function(){S+=90,A()},handleSwitchPrev:function(){var n;z(),S=0,null===(n=e.onPrev)||void 0===n||n.call(e)},handleSwitchNext:function(){var n;z(),S=0,null===(n=e.onNext)||void 0===n||n.call(e)},withTooltip:function(t,i){if(e.showToolbarTooltip){const{value:e}=n;return(0,r.h)(Fe,{to:!1,theme:e.peers.Tooltip,themeOverrides:e.peerOverrides.Tooltip,keepAliveOnHover:!1},{default:()=>p.value[i],trigger:()=>t})}return t},resizeToOrignalImageSize:function(){O=T(),$=Math.ceil(Math.log(O)/Math.log(1.5)),m=0,w=0,A()},cssVars:W?void 0:E,themeClass:null==I?void 0:I.themeClass,onRender:null==I?void 0:I.onRender},D)},render(){var e,n;const{clsPrefix:t}=this;return(0,r.h)(r.FK,null,null===(n=(e=this.$slots).default)||void 0===n?void 0:n.call(e),(0,r.h)(_.A,{show:this.show},{default:()=>{var e;return this.show||this.displayed?(null===(e=this.onRender)||void 0===e||e.call(this),(0,r.bo)((0,r.h)("div",{class:[`${t}-image-preview-container`,this.themeClass],style:this.cssVars,onWheel:this.handleWheel},(0,r.h)(V.Transition,{name:"fade-in-transition",appear:this.appear},{default:()=>this.show?(0,r.h)("div",{class:`${t}-image-preview-overlay`,onClick:this.toggleShow}):null}),this.showToolbar?(0,r.h)(V.Transition,{name:"fade-in-transition",appear:this.appear},{default:()=>{if(!this.show)return null;const{withTooltip:e}=this;return(0,r.h)("div",{class:`${t}-image-preview-toolbar`},this.onPrev?(0,r.h)(r.FK,null,e((0,r.h)(P.A,{clsPrefix:t,onClick:this.handleSwitchPrev},{default:()=>Ne}),"tipPrevious"),e((0,r.h)(P.A,{clsPrefix:t,onClick:this.handleSwitchNext},{default:()=>Ze}),"tipNext")):null,e((0,r.h)(P.A,{clsPrefix:t,onClick:this.rotateCounterclockwise},{default:()=>(0,r.h)(Oe,null)}),"tipCounterclockwise"),e((0,r.h)(P.A,{clsPrefix:t,onClick:this.rotateClockwise},{default:()=>(0,r.h)(Se,null)}),"tipClockwise"),e((0,r.h)(P.A,{clsPrefix:t,onClick:this.resizeToOrignalImageSize},{default:()=>(0,r.h)(ze,null)}),"tipOriginalSize"),e((0,r.h)(P.A,{clsPrefix:t,onClick:this.zoomOut},{default:()=>(0,r.h)(Te,null)}),"tipZoomOut"),e((0,r.h)(P.A,{clsPrefix:t,onClick:this.zoomIn},{default:()=>(0,r.h)(Ae,null)}),"tipZoomIn"),e((0,r.h)(P.A,{clsPrefix:t,onClick:this.handleDownloadClick},{default:()=>qe}),"tipDownload"),e((0,r.h)(P.A,{clsPrefix:t,onClick:this.toggleShow},{default:()=>Ve}),"tipClose"))}}):null,(0,r.h)(V.Transition,{name:"fade-in-scale-up-transition",onAfterLeave:this.handleAfterLeave,appear:this.appear,onEnter:this.syncTransformOrigin,onBeforeLeave:this.syncTransformOrigin},{default:()=>{const{previewedImgProps:e={}}=this;return(0,r.bo)((0,r.h)("div",{class:`${t}-image-preview-wrapper`,ref:"previewWrapperRef"},(0,r.h)("img",Object.assign({},e,{draggable:!1,onMousedown:this.handlePreviewMousedown,onDblclick:this.handlePreviewDblclick,class:[`${t}-image-preview`,e.class],key:this.previewSrc,src:this.previewSrc,ref:"previewRef",onDragstart:this.handleDragStart}))),[[V.vShow,this.show]])}})),[[q.A,{enabled:this.show}]])):null}}))}}),Qe=(0,g.D)("n-image-group"),Je=j,en=(0,r.pM)({name:"ImageGroup",props:Je,setup(e){let n;const{mergedClsPrefixRef:t}=(0,s.Ay)(e),l=`c${(0,o.sX)()}`,a=(0,r.nI)(),d=e=>{var t;n=e,null===(t=u.value)||void 0===t||t.setPreviewSrc(e)};function c(t){var r,i;if(!(null==a?void 0:a.proxy))return;const o=a.proxy.$el.parentElement.querySelectorAll(`[data-group-id=${l}]:not([data-error=true])`);if(!o.length)return;const s=Array.from(o).findIndex((e=>e.dataset.previewSrc===n));d(~s?o[(s+t+o.length)%o.length].dataset.previewSrc:o[0].dataset.previewSrc),1===t?null===(r=e.onPreviewNext)||void 0===r||r.call(e):null===(i=e.onPreviewPrev)||void 0===i||i.call(e)}(0,r.Gt)(Qe,{mergedClsPrefixRef:t,setPreviewSrc:d,setThumbnailEl:e=>{var n;null===(n=u.value)||void 0===n||n.setThumbnailEl(e)},toggleShow:()=>{var e;null===(e=u.value)||void 0===e||e.toggleShow()},groupId:l});const u=(0,i.KR)(null);return{mergedClsPrefix:t,previewInstRef:u,next:()=>{c(1)},prev:()=>{c(-1)}}},render(){return(0,r.h)(Ye,{theme:this.theme,themeOverrides:this.themeOverrides,clsPrefix:this.mergedClsPrefix,ref:"previewInstRef",onPrev:this.prev,onNext:this.next,showToolbar:this.showToolbar,showToolbarTooltip:this.showToolbarTooltip},this.$slots)}}),nn=Object.assign({alt:String,height:[String,Number],imgProps:Object,previewedImgProps:Object,lazy:Boolean,intersectionObserverOptions:Object,objectFit:{type:String,default:"fill"},previewSrc:String,fallbackSrc:String,width:[String,Number],src:String,previewDisabled:Boolean,loadDescription:String,onError:Function,onLoad:Function},j),tn=(0,r.pM)({name:"Image",props:nn,inheritAttrs:!1,setup(e){const n=(0,i.KR)(null),t=(0,i.KR)(!1),o=(0,i.KR)(null),l=(0,r.WQ)(Qe,null),{mergedClsPrefixRef:a}=l||(0,s.Ay)(e),d={click:()=>{if(e.previewDisabled||t.value)return;const r=e.previewSrc||e.src;if(l)return l.setPreviewSrc(r),l.setThumbnailEl(n.value),void l.toggleShow();const{value:i}=o;i&&(i.setPreviewSrc(r),i.setThumbnailEl(n.value),i.toggleShow())}},c=(0,i.KR)(!e.lazy);(0,r.sV)((()=>{var e;null===(e=n.value)||void 0===e||e.setAttribute("data-group-id",(null==l?void 0:l.groupId)||"")})),(0,r.sV)((()=>{if(e.lazy&&e.intersectionObserverOptions){let t;const i=(0,r.nT)((()=>{null==t||t(),t=void 0,t=((e,n,t)=>{if(!e)return()=>{};const r=((e={})=>{var n;const{root:t=null}=e;return{hash:`${e.rootMargin||"0px 0px 0px 0px"}-${Array.isArray(e.threshold)?e.threshold.join(","):null!==(n=e.threshold)&&void 0!==n?n:"0"}`,options:Object.assign(Object.assign({},e),{root:("string"==typeof t?document.querySelector(t):t)||document.documentElement})}})(n),{root:i}=r.options;let o;const l=U.get(i);let a,s;l?o=l:(o=new Map,U.set(i,o)),o.has(r.hash)?(s=o.get(r.hash),s[1].has(e)||(a=s[0],s[1].add(e),a.observe(e))):(a=new IntersectionObserver((e=>{e.forEach((e=>{if(e.isIntersecting){const n=H.get(e.target),t=N.get(e.target);n&&n(),t&&(t.value=!0)}}))}),r.options),a.observe(e),s=[a,new Set([e])],o.set(r.hash,s));let d=!1;const c=()=>{d||(H.delete(e),N.delete(e),d=!0,s[1].has(e)&&(s[0].unobserve(e),s[1].delete(e)),s[1].size<=0&&o.delete(r.hash),o.size||U.delete(i))};return H.set(e,c),N.set(e,t),c})(n.value,e.intersectionObserverOptions,c)}));(0,r.xo)((()=>{i(),null==t||t()}))}})),(0,r.nT)((()=>{var n;e.src||null===(n=e.imgProps)||void 0===n||n.src,t.value=!1}));const u=(0,i.KR)(!1);return(0,r.Gt)(F,{previewedImgPropsRef:(0,i.lW)(e,"previewedImgProps")}),Object.assign({mergedClsPrefix:a,groupId:null==l?void 0:l.groupId,previewInstRef:o,imageRef:n,showError:t,shouldStartLoading:c,loaded:u,mergedOnClick:n=>{var t,r;d.click(),null===(r=null===(t=e.imgProps)||void 0===t?void 0:t.onClick)||void 0===r||r.call(t,n)},mergedOnError:n=>{if(!c.value)return;t.value=!0;const{onError:r,imgProps:{onError:i}={}}=e;null==r||r(n),null==i||i(n)},mergedOnLoad:n=>{const{onLoad:t,imgProps:{onLoad:r}={}}=e;null==t||t(n),null==r||r(n),u.value=!0}},d)},render(){var e,n;const{mergedClsPrefix:t,imgProps:i={},loaded:o,$attrs:l,lazy:a}=this,s=null===(n=(e=this.$slots).placeholder)||void 0===n?void 0:n.call(e),d=this.src||i.src,c=(0,r.h)("img",Object.assign(Object.assign({},i),{ref:"imageRef",width:this.width||i.width,height:this.height||i.height,src:this.showError?this.fallbackSrc:a&&this.intersectionObserverOptions?this.shouldStartLoading?d:void 0:d,alt:this.alt||i.alt,"aria-label":this.alt||i.alt,onClick:this.mergedOnClick,onError:this.mergedOnError,onLoad:this.mergedOnLoad,loading:I&&a&&!this.intersectionObserverOptions?"lazy":"eager",style:[i.style||"",s&&!o?{height:"0",width:"0",visibility:"hidden"}:"",{objectFit:this.objectFit}],"data-error":this.showError,"data-preview-src":this.previewSrc||this.src}));return(0,r.h)("div",Object.assign({},l,{role:"none",class:[l.class,`${t}-image`,(this.previewDisabled||this.showError)&&`${t}-image--preview-disabled`]}),this.groupId?c:(0,r.h)(Ye,{theme:this.theme,themeOverrides:this.themeOverrides,clsPrefix:t,ref:"previewInstRef",showToolbar:this.showToolbar,showToolbarTooltip:this.showToolbarTooltip},{default:()=>c}),!o&&s)}});var rn=t(2601),on=t(9819),ln=t(4254),an=t(1365);const sn=(0,Xe.c)([(0,Xe.cB)("progress",{display:"inline-block"},[(0,Xe.cB)("progress-icon","\n color: var(--n-icon-color);\n transition: color .3s var(--n-bezier);\n "),(0,Xe.cM)("line","\n width: 100%;\n display: block;\n ",[(0,Xe.cB)("progress-content","\n display: flex;\n align-items: center;\n ",[(0,Xe.cB)("progress-graph",{flex:1})]),(0,Xe.cB)("progress-custom-content",{marginLeft:"14px"}),(0,Xe.cB)("progress-icon","\n width: 30px;\n padding-left: 14px;\n height: var(--n-icon-size-line);\n line-height: var(--n-icon-size-line);\n font-size: var(--n-icon-size-line);\n ",[(0,Xe.cM)("as-text","\n color: var(--n-text-color-line-outer);\n text-align: center;\n width: 40px;\n font-size: var(--n-font-size);\n padding-left: 4px;\n transition: color .3s var(--n-bezier);\n ")])]),(0,Xe.cM)("circle, dashboard",{width:"120px"},[(0,Xe.cB)("progress-custom-content","\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n "),(0,Xe.cB)("progress-text","\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n display: flex;\n align-items: center;\n color: inherit;\n font-size: var(--n-font-size-circle);\n color: var(--n-text-color-circle);\n font-weight: var(--n-font-weight-circle);\n transition: color .3s var(--n-bezier);\n white-space: nowrap;\n "),(0,Xe.cB)("progress-icon","\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n display: flex;\n align-items: center;\n color: var(--n-icon-color);\n font-size: var(--n-icon-size-circle);\n ")]),(0,Xe.cM)("multiple-circle","\n width: 200px;\n color: inherit;\n ",[(0,Xe.cB)("progress-text","\n font-weight: var(--n-font-weight-circle);\n color: var(--n-text-color-circle);\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color .3s var(--n-bezier);\n ")]),(0,Xe.cB)("progress-content",{position:"relative"}),(0,Xe.cB)("progress-graph",{position:"relative"},[(0,Xe.cB)("progress-graph-circle",[(0,Xe.c)("svg",{verticalAlign:"bottom"}),(0,Xe.cB)("progress-graph-circle-fill","\n stroke: var(--n-fill-color);\n transition:\n opacity .3s var(--n-bezier),\n stroke .3s var(--n-bezier),\n stroke-dasharray .3s var(--n-bezier);\n ",[(0,Xe.cM)("empty",{opacity:0})]),(0,Xe.cB)("progress-graph-circle-rail","\n transition: stroke .3s var(--n-bezier);\n overflow: hidden;\n stroke: var(--n-rail-color);\n ")]),(0,Xe.cB)("progress-graph-line",[(0,Xe.cM)("indicator-inside",[(0,Xe.cB)("progress-graph-line-rail","\n height: 16px;\n line-height: 16px;\n border-radius: 10px;\n ",[(0,Xe.cB)("progress-graph-line-fill","\n height: inherit;\n border-radius: 10px;\n "),(0,Xe.cB)("progress-graph-line-indicator","\n background: #0000;\n white-space: nowrap;\n text-align: right;\n margin-left: 14px;\n margin-right: 14px;\n height: inherit;\n font-size: 12px;\n color: var(--n-text-color-line-inner);\n transition: color .3s var(--n-bezier);\n ")])]),(0,Xe.cM)("indicator-inside-label","\n height: 16px;\n display: flex;\n align-items: center;\n ",[(0,Xe.cB)("progress-graph-line-rail","\n flex: 1;\n transition: background-color .3s var(--n-bezier);\n "),(0,Xe.cB)("progress-graph-line-indicator","\n background: var(--n-fill-color);\n font-size: 12px;\n transform: translateZ(0);\n display: flex;\n vertical-align: middle;\n height: 16px;\n line-height: 16px;\n padding: 0 10px;\n border-radius: 10px;\n position: absolute;\n white-space: nowrap;\n color: var(--n-text-color-line-inner);\n transition:\n right .2s var(--n-bezier),\n color .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n ")]),(0,Xe.cB)("progress-graph-line-rail","\n position: relative;\n overflow: hidden;\n height: var(--n-rail-height);\n border-radius: 5px;\n background-color: var(--n-rail-color);\n transition: background-color .3s var(--n-bezier);\n ",[(0,Xe.cB)("progress-graph-line-fill","\n background: var(--n-fill-color);\n position: relative;\n border-radius: 5px;\n height: inherit;\n width: 100%;\n max-width: 0%;\n transition:\n background-color .3s var(--n-bezier),\n max-width .2s var(--n-bezier);\n ",[(0,Xe.cM)("processing",[(0,Xe.c)("&::after",'\n content: "";\n background-image: var(--n-line-bg-processing);\n animation: progress-processing-animation 2s var(--n-bezier) infinite;\n ')])])])])])]),(0,Xe.c)("@keyframes progress-processing-animation","\n 0% {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 100%;\n opacity: 1;\n }\n 66% {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 0;\n }\n 100% {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n opacity: 0;\n }\n ")]);var dn=t(6275);const cn=(0,z.l)("success",(0,r.h)("svg",{viewBox:"0 0 48 48",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},(0,r.h)("g",{"fill-rule":"nonzero"},(0,r.h)("path",{d:"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M32.6338835,17.6161165 C32.1782718,17.1605048 31.4584514,17.1301307 30.9676119,17.5249942 L30.8661165,17.6161165 L20.75,27.732233 L17.1338835,24.1161165 C16.6457281,23.6279612 15.8542719,23.6279612 15.3661165,24.1161165 C14.9105048,24.5717282 14.8801307,25.2915486 15.2749942,25.7823881 L15.3661165,25.8838835 L19.8661165,30.3838835 C20.3217282,30.8394952 21.0415486,30.8698693 21.5323881,30.4750058 L21.6338835,30.3838835 L32.6338835,19.3838835 C33.1220388,18.8957281 33.1220388,18.1042719 32.6338835,17.6161165 Z"}))))),un=(0,z.l)("error",(0,r.h)("svg",{viewBox:"0 0 48 48",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},(0,r.h)("g",{"fill-rule":"nonzero"},(0,r.h)("path",{d:"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M17.8838835,16.1161165 L17.7823881,16.0249942 C17.3266086,15.6583353 16.6733914,15.6583353 16.2176119,16.0249942 L16.1161165,16.1161165 L16.0249942,16.2176119 C15.6583353,16.6733914 15.6583353,17.3266086 16.0249942,17.7823881 L16.1161165,17.8838835 L22.233,24 L16.1161165,30.1161165 L16.0249942,30.2176119 C15.6583353,30.6733914 15.6583353,31.3266086 16.0249942,31.7823881 L16.1161165,31.8838835 L16.2176119,31.9750058 C16.6733914,32.3416647 17.3266086,32.3416647 17.7823881,31.9750058 L17.8838835,31.8838835 L24,25.767 L30.1161165,31.8838835 L30.2176119,31.9750058 C30.6733914,32.3416647 31.3266086,32.3416647 31.7823881,31.9750058 L31.8838835,31.8838835 L31.9750058,31.7823881 C32.3416647,31.3266086 32.3416647,30.6733914 31.9750058,30.2176119 L31.8838835,30.1161165 L25.767,24 L31.8838835,17.8838835 L31.9750058,17.7823881 C32.3416647,17.3266086 32.3416647,16.6733914 31.9750058,16.2176119 L31.8838835,16.1161165 L31.7823881,16.0249942 C31.3266086,15.6583353 30.6733914,15.6583353 30.2176119,16.0249942 L30.1161165,16.1161165 L24,22.233 L17.8838835,16.1161165 L17.7823881,16.0249942 L17.8838835,16.1161165 Z"}))))),hn=(0,z.l)("warning",(0,r.h)("svg",{viewBox:"0 0 24 24",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},(0,r.h)("g",{"fill-rule":"nonzero"},(0,r.h)("path",{d:"M12,2 C17.523,2 22,6.478 22,12 C22,17.522 17.523,22 12,22 C6.477,22 2,17.522 2,12 C2,6.478 6.477,2 12,2 Z M12.0018002,15.0037242 C11.450254,15.0037242 11.0031376,15.4508407 11.0031376,16.0023869 C11.0031376,16.553933 11.450254,17.0010495 12.0018002,17.0010495 C12.5533463,17.0010495 13.0004628,16.553933 13.0004628,16.0023869 C13.0004628,15.4508407 12.5533463,15.0037242 12.0018002,15.0037242 Z M11.99964,7 C11.4868042,7.00018474 11.0642719,7.38637706 11.0066858,7.8837365 L11,8.00036004 L11.0018003,13.0012393 L11.00857,13.117858 C11.0665141,13.6151758 11.4893244,14.0010638 12.0021602,14.0008793 C12.514996,14.0006946 12.9375283,13.6145023 12.9951144,13.1171428 L13.0018002,13.0005193 L13,7.99964009 L12.9932303,7.8830214 C12.9352861,7.38570354 12.5124758,6.99981552 11.99964,7 Z"}))))),pn=(0,z.l)("info",(0,r.h)("svg",{viewBox:"0 0 28 28",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},(0,r.h)("g",{stroke:"none","stroke-width":"1","fill-rule":"evenodd"},(0,r.h)("g",{"fill-rule":"nonzero"},(0,r.h)("path",{d:"M14,2 C20.6274,2 26,7.37258 26,14 C26,20.6274 20.6274,26 14,26 C7.37258,26 2,20.6274 2,14 C2,7.37258 7.37258,2 14,2 Z M14,11 C13.4477,11 13,11.4477 13,12 L13,12 L13,20 C13,20.5523 13.4477,21 14,21 C14.5523,21 15,20.5523 15,20 L15,20 L15,12 C15,11.4477 14.5523,11 14,11 Z M14,6.75 C13.3096,6.75 12.75,7.30964 12.75,8 C12.75,8.69036 13.3096,9.25 14,9.25 C14.6904,9.25 15.25,8.69036 15.25,8 C15.25,7.30964 14.6904,6.75 14,6.75 Z"}))))),gn={success:(0,r.h)(cn,null),error:(0,r.h)(un,null),warning:(0,r.h)(hn,null),info:(0,r.h)(pn,null)},fn=(0,r.pM)({name:"ProgressLine",props:{clsPrefix:{type:String,required:!0},percentage:{type:Number,default:0},railColor:String,railStyle:[String,Object],fillColor:String,status:{type:String,required:!0},indicatorPlacement:{type:String,required:!0},indicatorTextColor:String,unit:{type:String,default:"%"},processing:{type:Boolean,required:!0},showIndicator:{type:Boolean,required:!0},height:[String,Number],railBorderRadius:[String,Number],fillBorderRadius:[String,Number]},setup(e,{slots:n}){const t=(0,r.EW)((()=>(0,dn.i)(e.height))),i=(0,r.EW)((()=>void 0!==e.railBorderRadius?(0,dn.i)(e.railBorderRadius):void 0!==e.height?(0,dn.i)(e.height,{c:.5}):"")),o=(0,r.EW)((()=>void 0!==e.fillBorderRadius?(0,dn.i)(e.fillBorderRadius):void 0!==e.railBorderRadius?(0,dn.i)(e.railBorderRadius):void 0!==e.height?(0,dn.i)(e.height,{c:.5}):""));return()=>{const{indicatorPlacement:l,railColor:a,railStyle:s,percentage:d,unit:c,indicatorTextColor:u,status:h,showIndicator:p,fillColor:g,processing:f,clsPrefix:v}=e;return(0,r.h)("div",{class:`${v}-progress-content`,role:"none"},(0,r.h)("div",{class:`${v}-progress-graph`,"aria-hidden":!0},(0,r.h)("div",{class:[`${v}-progress-graph-line`,{[`${v}-progress-graph-line--indicator-${l}`]:!0}]},(0,r.h)("div",{class:`${v}-progress-graph-line-rail`,style:[{backgroundColor:a,height:t.value,borderRadius:i.value},s]},(0,r.h)("div",{class:[`${v}-progress-graph-line-fill`,f&&`${v}-progress-graph-line-fill--processing`],style:{maxWidth:`${e.percentage}%`,backgroundColor:g,height:t.value,lineHeight:t.value,borderRadius:o.value}},"inside"===l?(0,r.h)("div",{class:`${v}-progress-graph-line-indicator`,style:{color:u}},n.default?n.default():`${d}${c}`):null)))),p&&"outside"===l?(0,r.h)("div",null,n.default?(0,r.h)("div",{class:`${v}-progress-custom-content`,style:{color:u},role:"none"},n.default()):"default"===h?(0,r.h)("div",{role:"none",class:`${v}-progress-icon ${v}-progress-icon--as-text`,style:{color:u}},d,c):(0,r.h)("div",{class:`${v}-progress-icon`,"aria-hidden":!0},(0,r.h)(P.A,{clsPrefix:v},{default:()=>gn[h]}))):null)}}}),vn={success:(0,r.h)(cn,null),error:(0,r.h)(un,null),warning:(0,r.h)(hn,null),info:(0,r.h)(pn,null)},mn=(0,r.pM)({name:"ProgressCircle",props:{clsPrefix:{type:String,required:!0},status:{type:String,required:!0},strokeWidth:{type:Number,required:!0},fillColor:String,railColor:String,railStyle:[String,Object],percentage:{type:Number,default:0},offsetDegree:{type:Number,default:0},showIndicator:{type:Boolean,required:!0},indicatorTextColor:String,unit:String,viewBoxWidth:{type:Number,required:!0},gapDegree:{type:Number,required:!0},gapOffsetDegree:{type:Number,default:0}},setup(e,{slots:n}){function t(n,t,r){const{gapDegree:i,viewBoxWidth:o,strokeWidth:l}=e,a=50+l/2;return{pathString:`M ${a},${a} m 0,50\n a 50,50 0 1 1 0,-100\n a 50,50 0 1 1 0,100`,pathStyle:{stroke:r,strokeDasharray:`${n/100*(2*Math.PI*50-i)}px ${8*o}px`,strokeDashoffset:`-${i/2}px`,transformOrigin:t?"center":void 0,transform:t?`rotate(${t}deg)`:void 0}}}return()=>{const{fillColor:i,railColor:o,strokeWidth:l,offsetDegree:a,status:s,percentage:d,showIndicator:c,indicatorTextColor:u,unit:h,gapOffsetDegree:p,clsPrefix:g}=e,{pathString:f,pathStyle:v}=t(100,0,o),{pathString:m,pathStyle:w}=t(d,a,i),b=100+l;return(0,r.h)("div",{class:`${g}-progress-content`,role:"none"},(0,r.h)("div",{class:`${g}-progress-graph`,"aria-hidden":!0},(0,r.h)("div",{class:`${g}-progress-graph-circle`,style:{transform:p?`rotate(${p}deg)`:void 0}},(0,r.h)("svg",{viewBox:`0 0 ${b} ${b}`},(0,r.h)("g",null,(0,r.h)("path",{class:`${g}-progress-graph-circle-rail`,d:f,"stroke-width":l,"stroke-linecap":"round",fill:"none",style:v})),(0,r.h)("g",null,(0,r.h)("path",{class:[`${g}-progress-graph-circle-fill`,0===d&&`${g}-progress-graph-circle-fill--empty`],d:m,"stroke-width":l,"stroke-linecap":"round",fill:"none",style:w}))))),c?(0,r.h)("div",null,n.default?(0,r.h)("div",{class:`${g}-progress-custom-content`,role:"none"},n.default()):"default"!==s?(0,r.h)("div",{class:`${g}-progress-icon`,"aria-hidden":!0},(0,r.h)(P.A,{clsPrefix:g},{default:()=>vn[s]})):(0,r.h)("div",{class:`${g}-progress-text`,style:{color:u},role:"none"},(0,r.h)("span",{class:`${g}-progress-text__percentage`},d),(0,r.h)("span",{class:`${g}-progress-text__unit`},h))):null)}}});function wn(e,n,t=100){return`m ${t/2} ${t/2-e} a ${e} ${e} 0 1 1 0 ${2*e} a ${e} ${e} 0 1 1 0 -${2*e}`}const bn=(0,r.pM)({name:"ProgressMultipleCircle",props:{clsPrefix:{type:String,required:!0},viewBoxWidth:{type:Number,required:!0},percentage:{type:Array,default:[0]},strokeWidth:{type:Number,required:!0},circleGap:{type:Number,required:!0},showIndicator:{type:Boolean,required:!0},fillColor:{type:Array,default:()=>[]},railColor:{type:Array,default:()=>[]},railStyle:{type:Array,default:()=>[]}},setup(e,{slots:n}){const t=(0,r.EW)((()=>e.percentage.map(((n,t)=>`${Math.PI*n/100*(e.viewBoxWidth/2-e.strokeWidth/2*(1+2*t)-e.circleGap*t)*2}, ${8*e.viewBoxWidth}`))));return()=>{const{viewBoxWidth:i,strokeWidth:o,circleGap:l,showIndicator:a,fillColor:s,railColor:d,railStyle:c,percentage:u,clsPrefix:h}=e;return(0,r.h)("div",{class:`${h}-progress-content`,role:"none"},(0,r.h)("div",{class:`${h}-progress-graph`,"aria-hidden":!0},(0,r.h)("div",{class:`${h}-progress-graph-circle`},(0,r.h)("svg",{viewBox:`0 0 ${i} ${i}`},u.map(((e,n)=>(0,r.h)("g",{key:n},(0,r.h)("path",{class:`${h}-progress-graph-circle-rail`,d:wn(i/2-o/2*(1+2*n)-l*n,0,i),"stroke-width":o,"stroke-linecap":"round",fill:"none",style:[{strokeDashoffset:0,stroke:d[n]},c[n]]}),(0,r.h)("path",{class:[`${h}-progress-graph-circle-fill`,0===e&&`${h}-progress-graph-circle-fill--empty`],d:wn(i/2-o/2*(1+2*n)-l*n,0,i),"stroke-width":o,"stroke-linecap":"round",fill:"none",style:{strokeDasharray:t.value[n],strokeDashoffset:0,stroke:s[n]}}))))))),a&&n.default?(0,r.h)("div",null,(0,r.h)("div",{class:`${h}-progress-text`},n.default())):null)}}}),xn=Object.assign(Object.assign({},a.A.props),{processing:Boolean,type:{type:String,default:"line"},gapDegree:Number,gapOffsetDegree:Number,status:{type:String,default:"default"},railColor:[String,Array],railStyle:[String,Array],color:[String,Array],viewBoxWidth:{type:Number,default:100},strokeWidth:{type:Number,default:7},percentage:[Number,Array],unit:{type:String,default:"%"},showIndicator:{type:Boolean,default:!0},indicatorPosition:{type:String,default:"outside"},indicatorPlacement:{type:String,default:"outside"},indicatorTextColor:String,circleGap:{type:Number,default:1},height:Number,borderRadius:[String,Number],fillBorderRadius:[String,Number],offsetDegree:Number}),Cn=(0,r.pM)({name:"Progress",props:xn,setup(e){const n=(0,r.EW)((()=>e.indicatorPlacement||e.indicatorPosition)),t=(0,r.EW)((()=>e.gapDegree||0===e.gapDegree?e.gapDegree:"dashboard"===e.type?75:void 0)),{mergedClsPrefixRef:i,inlineThemeDisabled:o}=(0,s.Ay)(e),l=(0,a.A)("Progress","-progress",sn,an.A,e,i),d=(0,r.EW)((()=>{const{status:n}=e,{common:{cubicBezierEaseInOut:t},self:{fontSize:r,fontSizeCircle:i,railColor:o,railHeight:a,iconSizeCircle:s,iconSizeLine:d,textColorCircle:c,textColorLineInner:u,textColorLineOuter:h,lineBgProcessing:p,fontWeightCircle:g,[(0,Xe.cF)("iconColor",n)]:f,[(0,Xe.cF)("fillColor",n)]:v}}=l.value;return{"--n-bezier":t,"--n-fill-color":v,"--n-font-size":r,"--n-font-size-circle":i,"--n-font-weight-circle":g,"--n-icon-color":f,"--n-icon-size-circle":s,"--n-icon-size-line":d,"--n-line-bg-processing":p,"--n-rail-color":o,"--n-rail-height":a,"--n-text-color-circle":c,"--n-text-color-line-inner":u,"--n-text-color-line-outer":h}})),u=o?(0,c.R)("progress",(0,r.EW)((()=>e.status[0])),d,e):void 0;return{mergedClsPrefix:i,mergedIndicatorPlacement:n,gapDeg:t,cssVars:o?void 0:d,themeClass:null==u?void 0:u.themeClass,onRender:null==u?void 0:u.onRender}},render(){const{type:e,cssVars:n,indicatorTextColor:t,showIndicator:i,status:o,railColor:l,railStyle:a,color:s,percentage:d,viewBoxWidth:c,strokeWidth:u,mergedIndicatorPlacement:h,unit:p,borderRadius:g,fillBorderRadius:f,height:v,processing:m,circleGap:w,mergedClsPrefix:b,gapDeg:x,gapOffsetDegree:C,themeClass:y,$slots:R,onRender:B}=this;return null==B||B(),(0,r.h)("div",{class:[y,`${b}-progress`,`${b}-progress--${e}`,`${b}-progress--${o}`],style:n,"aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":d,role:"circle"===e||"line"===e||"dashboard"===e?"progressbar":"none"},"circle"===e||"dashboard"===e?(0,r.h)(mn,{clsPrefix:b,status:o,showIndicator:i,indicatorTextColor:t,railColor:l,fillColor:s,railStyle:a,offsetDegree:this.offsetDegree,percentage:d,viewBoxWidth:c,strokeWidth:u,gapDegree:void 0===x?"dashboard"===e?75:0:x,gapOffsetDegree:C,unit:p},R):"line"===e?(0,r.h)(fn,{clsPrefix:b,status:o,showIndicator:i,indicatorTextColor:t,railColor:l,fillColor:s,railStyle:a,percentage:d,processing:m,indicatorPlacement:h,unit:p,fillBorderRadius:f,railBorderRadius:g,height:v},R):"multiple-circle"===e?(0,r.h)(bn,{clsPrefix:b,strokeWidth:u,railColor:l,fillColor:s,railStyle:a,viewBoxWidth:c,percentage:d,showIndicator:i,circleGap:w},R):null)}}),yn=(0,r.pM)({name:"UploadProgress",props:{show:Boolean,percentage:{type:Number,required:!0},status:{type:String,required:!0}},setup:()=>({mergedTheme:(0,r.WQ)(f).mergedThemeRef}),render(){return(0,r.h)(ln.A,null,{default:()=>this.show?(0,r.h)(Cn,{type:"line",showIndicator:!1,percentage:this.percentage,status:this.status,height:2,theme:this.mergedTheme.peers.Progress,themeOverrides:this.mergedTheme.peerOverrides.Progress}):null})}}),Rn=(0,r.h)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 28 28"},(0,r.h)("g",{fill:"none"},(0,r.h)("path",{d:"M21.75 3A3.25 3.25 0 0 1 25 6.25v15.5A3.25 3.25 0 0 1 21.75 25H6.25A3.25 3.25 0 0 1 3 21.75V6.25A3.25 3.25 0 0 1 6.25 3h15.5zm.583 20.4l-7.807-7.68a.75.75 0 0 0-.968-.07l-.084.07l-7.808 7.68c.183.065.38.1.584.1h15.5c.204 0 .4-.035.583-.1l-7.807-7.68l7.807 7.68zM21.75 4.5H6.25A1.75 1.75 0 0 0 4.5 6.25v15.5c0 .208.036.408.103.593l7.82-7.692a2.25 2.25 0 0 1 3.026-.117l.129.117l7.82 7.692c.066-.185.102-.385.102-.593V6.25a1.75 1.75 0 0 0-1.75-1.75zm-3.25 3a2.5 2.5 0 1 1 0 5a2.5 2.5 0 0 1 0-5zm0 1.5a1 1 0 1 0 0 2a1 1 0 0 0 0-2z",fill:"currentColor"}))),Bn=(0,r.h)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 28 28"},(0,r.h)("g",{fill:"none"},(0,r.h)("path",{d:"M6.4 2A2.4 2.4 0 0 0 4 4.4v19.2A2.4 2.4 0 0 0 6.4 26h15.2a2.4 2.4 0 0 0 2.4-2.4V11.578c0-.729-.29-1.428-.805-1.944l-6.931-6.931A2.4 2.4 0 0 0 14.567 2H6.4zm-.9 2.4a.9.9 0 0 1 .9-.9H14V10a2 2 0 0 0 2 2h6.5v11.6a.9.9 0 0 1-.9.9H6.4a.9.9 0 0 1-.9-.9V4.4zm16.44 6.1H16a.5.5 0 0 1-.5-.5V4.06l6.44 6.44z",fill:"currentColor"})));const kn={paddingMedium:"0 3px",heightMedium:"24px",iconSizeMedium:"18px"},Ln=(0,r.pM)({name:"UploadFile",props:{clsPrefix:{type:String,required:!0},file:{type:Object,required:!0},listType:{type:String,required:!0}},setup(e){const n=(0,r.WQ)(f),t=(0,i.KR)(null),o=(0,i.KR)(""),l=(0,r.EW)((()=>{const{file:n}=e;return"finished"===n.status?"success":"error"===n.status?"error":"info"})),a=(0,r.EW)((()=>{const{file:n}=e;if("error"===n.status)return"error"})),s=(0,r.EW)((()=>{const{file:n}=e;return"uploading"===n.status})),d=(0,r.EW)((()=>{if(!n.showCancelButtonRef.value)return!1;const{file:t}=e;return["uploading","pending","error"].includes(t.status)})),c=(0,r.EW)((()=>{if(!n.showRemoveButtonRef.value)return!1;const{file:t}=e;return["finished"].includes(t.status)})),h=(0,r.EW)((()=>{if(!n.showDownloadButtonRef.value)return!1;const{file:t}=e;return["finished"].includes(t.status)})),p=(0,r.EW)((()=>{if(!n.showRetryButtonRef.value)return!1;const{file:t}=e;return["error"].includes(t.status)})),g=(0,S.A)((()=>o.value||e.file.thumbnailUrl||e.file.url)),v=(0,r.EW)((()=>{if(!n.showPreviewButtonRef.value)return!1;const{file:{status:t},listType:r}=e;return["finished"].includes(t)&&g.value&&"image-card"===r}));function m(e){const{xhrMap:t,doChange:r,onRemoveRef:{value:i},mergedFileListRef:{value:o}}=n;Promise.resolve(!i||i({file:Object.assign({},e),fileList:o})).then((n=>{if(!1===n)return;const i=Object.assign({},e,{status:"removed"});t.delete(e.id),r(i,void 0,{remove:!0})}))}const w=()=>{return t=this,r=void 0,l=function*(){const{listType:t}=e;"image"!==t&&"image-card"!==t||n.shouldUseThumbnailUrlRef.value(e.file)&&(o.value=yield n.getFileThumbnailUrlResolver(e.file))},new((i=void 0)||(i=Promise))((function(e,n){function o(e){try{s(l.next(e))}catch(e){n(e)}}function a(e){try{s(l.throw(e))}catch(e){n(e)}}function s(n){var t;n.done?e(n.value):(t=n.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}s((l=l.apply(t,r||[])).next())}));var t,r,i,l};return(0,r.nT)((()=>{w()})),{mergedTheme:n.mergedThemeRef,progressStatus:l,buttonType:a,showProgress:s,disabled:n.mergedDisabledRef,showCancelButton:d,showRemoveButton:c,showDownloadButton:h,showRetryButton:p,showPreviewButton:v,mergedThumbnailUrl:g,shouldUseThumbnailUrl:n.shouldUseThumbnailUrlRef,renderIcon:n.renderIconRef,imageRef:t,handleRemoveOrCancelClick:function(t){t.preventDefault();const{file:r}=e;["finished","pending","error"].includes(r.status)?m(r):["uploading"].includes(r.status)?function(e){const{xhrMap:t}=n,r=t.get(e.id);null==r||r.abort(),m(Object.assign({},e))}(r):(0,u.R8)("upload","The button clicked type is unknown.")},handleDownloadClick:function(t){t.preventDefault(),function(e){const{onDownloadRef:{value:t}}=n;Promise.resolve(!t||t(Object.assign({},e))).then((n=>{!1!==n&&Ee(e.url,e.name)}))}(e.file)},handleRetryClick:function(){n.submit(e.file.id)},handlePreviewClick:function(){const{onPreviewRef:{value:r}}=n;if(r)r(e.file);else if("image-card"===e.listType){const{value:e}=t;if(!e)return;e.click()}}}},render(){const{clsPrefix:e,mergedTheme:n,listType:t,file:i,renderIcon:o}=this;let l;const a="image"===t;l=a||"image-card"===t?this.shouldUseThumbnailUrl(i)&&this.mergedThumbnailUrl?(0,r.h)("a",{rel:"noopener noreferer",target:"_blank",href:i.url||void 0,class:`${e}-upload-file-info__thumbnail`,onClick:this.handlePreviewClick},"image-card"===t?(0,r.h)(tn,{src:this.mergedThumbnailUrl||void 0,previewSrc:i.url||void 0,alt:i.name,ref:"imageRef"}):(0,r.h)("img",{src:this.mergedThumbnailUrl||void 0,alt:i.name})):(0,r.h)("span",{class:`${e}-upload-file-info__thumbnail`},o?o(i):R(i)?(0,r.h)(P.A,{clsPrefix:e},{default:()=>Rn}):(0,r.h)(P.A,{clsPrefix:e},{default:()=>Bn})):(0,r.h)("span",{class:`${e}-upload-file-info__thumbnail`},o?o(i):(0,r.h)(P.A,{clsPrefix:e},{default:()=>(0,r.h)(T,null)}));const s=(0,r.h)(yn,{show:this.showProgress,percentage:i.percentage||0,status:this.progressStatus}),d="text"===t||"image"===t;return(0,r.h)("div",{class:[`${e}-upload-file`,`${e}-upload-file--${this.progressStatus}-status`,i.url&&"error"!==i.status&&"image-card"!==t&&`${e}-upload-file--with-url`,`${e}-upload-file--${t}-type`]},(0,r.h)("div",{class:`${e}-upload-file-info`},l,(0,r.h)("div",{class:`${e}-upload-file-info__name`},d&&(i.url&&"error"!==i.status?(0,r.h)("a",{rel:"noopener noreferer",target:"_blank",href:i.url||void 0,onClick:this.handlePreviewClick},i.name):(0,r.h)("span",{onClick:this.handlePreviewClick},i.name)),a&&s),(0,r.h)("div",{class:[`${e}-upload-file-info__action`,`${e}-upload-file-info__action--${t}-type`]},this.showPreviewButton?(0,r.h)(rn.Ay,{key:"preview",quaternary:!0,type:this.buttonType,onClick:this.handlePreviewClick,theme:n.peers.Button,themeOverrides:n.peerOverrides.Button,builtinThemeOverrides:kn},{icon:()=>(0,r.h)(P.A,{clsPrefix:e},{default:()=>(0,r.h)(A.A,null)})}):null,(this.showRemoveButton||this.showCancelButton)&&!this.disabled&&(0,r.h)(rn.Ay,{key:"cancelOrTrash",theme:n.peers.Button,themeOverrides:n.peerOverrides.Button,quaternary:!0,builtinThemeOverrides:kn,type:this.buttonType,onClick:this.handleRemoveOrCancelClick},{icon:()=>(0,r.h)(on.A,null,{default:()=>this.showRemoveButton?(0,r.h)(P.A,{clsPrefix:e,key:"trash"},{default:()=>(0,r.h)(M,null)}):(0,r.h)(P.A,{clsPrefix:e,key:"cancel"},{default:()=>(0,r.h)(D,null)})})}),this.showRetryButton&&!this.disabled&&(0,r.h)(rn.Ay,{key:"retry",quaternary:!0,type:this.buttonType,onClick:this.handleRetryClick,theme:n.peers.Button,themeOverrides:n.peerOverrides.Button,builtinThemeOverrides:kn},{icon:()=>(0,r.h)(P.A,{clsPrefix:e},{default:()=>(0,r.h)(E,null)})}),this.showDownloadButton?(0,r.h)(rn.Ay,{key:"download",quaternary:!0,type:this.buttonType,onClick:this.handleDownloadClick,theme:n.peers.Button,themeOverrides:n.peerOverrides.Button,builtinThemeOverrides:kn},{icon:()=>(0,r.h)(P.A,{clsPrefix:e},{default:()=>(0,r.h)(W,null)})}):null)),!a&&s)}}),Pn=(0,r.pM)({name:"UploadFileList",setup(e,{slots:n}){const t=(0,r.WQ)(f,null);t||(0,u.$8)("upload-file-list","`n-upload-file-list` must be placed inside `n-upload`.");const{abstractRef:i,mergedClsPrefixRef:o,listTypeRef:l,mergedFileListRef:a,fileListClassRef:s,fileListStyleRef:d,cssVarsRef:c,themeClassRef:h,maxReachedRef:p,showTriggerRef:g,imageGroupPropsRef:v}=t,m=(0,r.EW)((()=>"image-card"===l.value)),w=()=>a.value.map((e=>(0,r.h)(Ln,{clsPrefix:o.value,key:e.id,file:e,listType:l.value})));return()=>{const{value:e}=o,{value:t}=i;return(0,r.h)("div",{class:[`${e}-upload-file-list`,m.value&&`${e}-upload-file-list--grid`,t?null==h?void 0:h.value:void 0,s.value],style:[t&&c?c.value:"",d.value]},m.value?(0,r.h)(en,Object.assign({},v.value),{default:w}):(0,r.h)(ln.A,{group:!0},{default:w}),g.value&&!p.value&&m.value&&(0,r.h)(O,null,n))}}});var $n=t(6480);const{cubicBezierEaseInOut:On,cubicBezierEaseOut:Sn,cubicBezierEaseIn:zn}=$n.A;function Tn({overflow:e="hidden",duration:n=".3s",originalTransition:t="",leavingDelay:r="0s",foldPadding:i=!1,enterToProps:o,leaveToProps:l,reverse:a=!1}={}){const s=a?"leave":"enter",d=a?"enter":"leave";return[(0,Xe.c)(`&.fade-in-height-expand-transition-${d}-from,\n &.fade-in-height-expand-transition-${s}-to`,Object.assign(Object.assign({},o),{opacity:1})),(0,Xe.c)(`&.fade-in-height-expand-transition-${d}-to,\n &.fade-in-height-expand-transition-${s}-from`,Object.assign(Object.assign({},l),{opacity:0,marginTop:"0 !important",marginBottom:"0 !important",paddingTop:i?"0 !important":void 0,paddingBottom:i?"0 !important":void 0})),(0,Xe.c)(`&.fade-in-height-expand-transition-${d}-active`,`\n overflow: ${e};\n transition:\n max-height ${n} ${On} ${r},\n opacity ${n} ${Sn} ${r},\n margin-top ${n} ${On} ${r},\n margin-bottom ${n} ${On} ${r},\n padding-top ${n} ${On} ${r},\n padding-bottom ${n} ${On} ${r}\n ${t?","+t:""}\n `),(0,Xe.c)(`&.fade-in-height-expand-transition-${s}-active`,`\n overflow: ${e};\n transition:\n max-height ${n} ${On},\n opacity ${n} ${zn},\n margin-top ${n} ${On},\n margin-bottom ${n} ${On},\n padding-top ${n} ${On},\n padding-bottom ${n} ${On}\n ${t?","+t:""}\n `)]}var An=t(8454);const Mn=(0,Xe.c)([(0,Xe.cB)("upload","width: 100%;",[(0,Xe.cM)("dragger-inside",[(0,Xe.cB)("upload-trigger","\n display: block;\n ")]),(0,Xe.cM)("drag-over",[(0,Xe.cB)("upload-dragger","\n border: var(--n-dragger-border-hover);\n ")])]),(0,Xe.cB)("upload-dragger","\n cursor: pointer;\n box-sizing: border-box;\n width: 100%;\n text-align: center;\n border-radius: var(--n-border-radius);\n padding: 24px;\n opacity: 1;\n transition:\n opacity .3s var(--n-bezier),\n border-color .3s var(--n-bezier),\n background-color .3s var(--n-bezier);\n background-color: var(--n-dragger-color);\n border: var(--n-dragger-border);\n ",[(0,Xe.c)("&:hover","\n border: var(--n-dragger-border-hover);\n "),(0,Xe.cM)("disabled","\n cursor: not-allowed;\n ")]),(0,Xe.cB)("upload-trigger","\n display: inline-block;\n box-sizing: border-box;\n opacity: 1;\n transition: opacity .3s var(--n-bezier);\n ",[(0,Xe.c)("+",[(0,Xe.cB)("upload-file-list","margin-top: 8px;")]),(0,Xe.cM)("disabled","\n opacity: var(--n-item-disabled-opacity);\n cursor: not-allowed;\n "),(0,Xe.cM)("image-card","\n width: 96px;\n height: 96px;\n ",[(0,Xe.cB)("base-icon","\n font-size: 24px;\n "),(0,Xe.cB)("upload-dragger","\n padding: 0;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n ")])]),(0,Xe.cB)("upload-file-list","\n line-height: var(--n-line-height);\n opacity: 1;\n transition: opacity .3s var(--n-bezier);\n ",[(0,Xe.c)("a, img","outline: none;"),(0,Xe.cM)("disabled","\n opacity: var(--n-item-disabled-opacity);\n cursor: not-allowed;\n ",[(0,Xe.cB)("upload-file","cursor: not-allowed;")]),(0,Xe.cM)("grid","\n display: grid;\n grid-template-columns: repeat(auto-fill, 96px);\n grid-gap: 8px;\n margin-top: 0;\n "),(0,Xe.cB)("upload-file","\n display: block;\n box-sizing: border-box;\n cursor: default;\n padding: 0px 12px 0 6px;\n transition: background-color .3s var(--n-bezier);\n border-radius: var(--n-border-radius);\n ",[Tn(),(0,Xe.cB)("progress",[Tn({foldPadding:!0})]),(0,Xe.c)("&:hover","\n background-color: var(--n-item-color-hover);\n ",[(0,Xe.cB)("upload-file-info",[(0,Xe.cE)("action","\n opacity: 1;\n ")])]),(0,Xe.cM)("image-type","\n border-radius: var(--n-border-radius);\n text-decoration: underline;\n text-decoration-color: #0000;\n ",[(0,Xe.cB)("upload-file-info","\n padding-top: 0px;\n padding-bottom: 0px;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 6px 0;\n ",[(0,Xe.cB)("progress","\n padding: 2px 0;\n margin-bottom: 0;\n "),(0,Xe.cE)("name","\n padding: 0 8px;\n "),(0,Xe.cE)("thumbnail","\n width: 32px;\n height: 32px;\n font-size: 28px;\n display: flex;\n justify-content: center;\n align-items: center;\n ",[(0,Xe.c)("img","\n width: 100%;\n ")])])]),(0,Xe.cM)("text-type",[(0,Xe.cB)("progress","\n box-sizing: border-box;\n padding-bottom: 6px;\n margin-bottom: 6px;\n ")]),(0,Xe.cM)("image-card-type","\n position: relative;\n width: 96px;\n height: 96px;\n border: var(--n-item-border-image-card);\n border-radius: var(--n-border-radius);\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: border-color .3s var(--n-bezier), background-color .3s var(--n-bezier);\n border-radius: var(--n-border-radius);\n overflow: hidden;\n ",[(0,Xe.cB)("progress","\n position: absolute;\n left: 8px;\n bottom: 8px;\n right: 8px;\n width: unset;\n "),(0,Xe.cB)("upload-file-info","\n padding: 0;\n width: 100%;\n height: 100%;\n ",[(0,Xe.cE)("thumbnail","\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: 36px;\n ",[(0,Xe.c)("img","\n width: 100%;\n ")])]),(0,Xe.c)("&::before",'\n position: absolute;\n z-index: 1;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n border-radius: inherit;\n opacity: 0;\n transition: opacity .2s var(--n-bezier);\n content: "";\n '),(0,Xe.c)("&:hover",[(0,Xe.c)("&::before","opacity: 1;"),(0,Xe.cB)("upload-file-info",[(0,Xe.cE)("thumbnail","opacity: .12;")])])]),(0,Xe.cM)("error-status",[(0,Xe.c)("&:hover","\n background-color: var(--n-item-color-hover-error);\n "),(0,Xe.cB)("upload-file-info",[(0,Xe.cE)("name","color: var(--n-item-text-color-error);"),(0,Xe.cE)("thumbnail","color: var(--n-item-text-color-error);")]),(0,Xe.cM)("image-card-type","\n border: var(--n-item-border-image-card-error);\n ")]),(0,Xe.cM)("with-url","\n cursor: pointer;\n ",[(0,Xe.cB)("upload-file-info",[(0,Xe.cE)("name","\n color: var(--n-item-text-color-success);\n text-decoration-color: var(--n-item-text-color-success);\n ",[(0,Xe.c)("a","\n text-decoration: underline;\n ")])])]),(0,Xe.cB)("upload-file-info","\n position: relative;\n padding-top: 6px;\n padding-bottom: 6px;\n display: flex;\n flex-wrap: nowrap;\n ",[(0,Xe.cE)("thumbnail","\n font-size: 18px;\n opacity: 1;\n transition: opacity .2s var(--n-bezier);\n color: var(--n-item-icon-color);\n ",[(0,Xe.cB)("base-icon","\n margin-right: 2px;\n vertical-align: middle;\n transition: color .3s var(--n-bezier);\n ")]),(0,Xe.cE)("action","\n padding-top: inherit;\n padding-bottom: inherit;\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 80px;\n display: flex;\n align-items: center;\n transition: opacity .2s var(--n-bezier);\n justify-content: flex-end;\n opacity: 0;\n ",[(0,Xe.cB)("button",[(0,Xe.c)("&:not(:last-child)",{marginRight:"4px"}),(0,Xe.cB)("base-icon",[(0,Xe.c)("svg",[(0,An.N)()])])]),(0,Xe.cM)("image-type","\n position: relative;\n max-width: 80px;\n width: auto;\n "),(0,Xe.cM)("image-card-type","\n z-index: 2;\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n ")]),(0,Xe.cE)("name","\n color: var(--n-item-text-color);\n flex: 1;\n display: flex;\n justify-content: center;\n text-overflow: ellipsis;\n overflow: hidden;\n flex-direction: column;\n text-decoration-color: #0000;\n font-size: var(--n-font-size);\n transition:\n color .3s var(--n-bezier),\n text-decoration-color .3s var(--n-bezier); \n ",[(0,Xe.c)("a","\n color: inherit;\n text-decoration: underline;\n ")])])])]),(0,Xe.cB)("upload-file-input","\n display: none;\n width: 0;\n height: 0;\n opacity: 0;\n ")]);var Dn=function(e,n,t,r){return new(t||(t=Promise))((function(i,o){function l(e){try{s(r.next(e))}catch(e){o(e)}}function a(e){try{s(r.throw(e))}catch(e){o(e)}}function s(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(l,a)}s((r=r.apply(e,n||[])).next())}))};function En(e,n){return"function"==typeof e?e({file:n}):e||{}}function Wn(e,n,t,{method:r,action:i,withCredentials:o,responseType:l,headers:a,data:s}){const d=new XMLHttpRequest;d.responseType=l,e.xhrMap.set(t.id,d),d.withCredentials=o;const c=new FormData;if(function(e,n,t){const r=En(n,t);r&&Object.keys(r).forEach((n=>{e.append(n,r[n])}))}(c,s,t),null!==t.file&&c.append(n,t.file),function(e,n,t){const r=function(e,n,t){const{doChange:r,xhrMap:i}=e;let o=0;function l(t){var l;let a=Object.assign({},n,{status:"error",percentage:o});i.delete(n.id),a=k((null===(l=e.onError)||void 0===l?void 0:l.call(e,{file:a,event:t}))||a),r(a,t)}return{handleXHRLoad:function(a){var s;if(e.isErrorState){if(e.isErrorState(t))return void l(a)}else if(t.status<200||t.status>=300)return void l(a);let d=Object.assign({},n,{status:"finished",percentage:o});i.delete(n.id),d=k((null===(s=e.onFinish)||void 0===s?void 0:s.call(e,{file:d,event:a}))||d),r(d,a)},handleXHRError:l,handleXHRAbort(e){const t=Object.assign({},n,{status:"removed",file:null,percentage:o});i.delete(n.id),r(t,e)},handleXHRProgress(e){const t=Object.assign({},n,{status:"uploading"});if(e.lengthComputable){const n=Math.ceil(e.loaded/e.total*100);t.percentage=n,o=n}r(t,e)}}}(e,n,t);t.onabort=r.handleXHRAbort,t.onerror=r.handleXHRError,t.onload=r.handleXHRLoad,t.upload&&(t.upload.onprogress=r.handleXHRProgress)}(e,t,d),void 0!==i){d.open(r.toUpperCase(),i),function(e,n,t){const r=En(n,t);r&&Object.keys(r).forEach((n=>{e.setRequestHeader(n,r[n])}))}(d,a,t),d.send(c);const n=Object.assign({},t,{status:"uploading"});e.doChange(n)}}const In=Object.assign(Object.assign({},a.A.props),{name:{type:String,default:"file"},accept:String,action:String,customRequest:Function,directory:Boolean,directoryDnd:{type:Boolean,default:void 0},method:{type:String,default:"POST"},multiple:Boolean,showFileList:{type:Boolean,default:!0},data:[Object,Function],headers:[Object,Function],withCredentials:Boolean,responseType:{type:String,default:""},disabled:{type:Boolean,default:void 0},onChange:Function,onRemove:Function,onFinish:Function,onError:Function,onBeforeUpload:Function,isErrorState:Function,onDownload:Function,defaultUpload:{type:Boolean,default:!0},fileList:Array,"onUpdate:fileList":[Function,Array],onUpdateFileList:[Function,Array],fileListClass:String,fileListStyle:[String,Object],defaultFileList:{type:Array,default:()=>[]},showCancelButton:{type:Boolean,default:!0},showRemoveButton:{type:Boolean,default:!0},showDownloadButton:Boolean,showRetryButton:{type:Boolean,default:!0},showPreviewButton:{type:Boolean,default:!0},listType:{type:String,default:"text"},onPreview:Function,shouldUseThumbnailUrl:{type:Function,default:e=>!!B&&R(e)},createThumbnailUrl:Function,abstract:Boolean,max:Number,showTrigger:{type:Boolean,default:!0},imageGroupProps:Object,inputProps:Object,triggerClass:String,triggerStyle:[String,Object],renderIcon:Function}),jn=(0,r.pM)({name:"Upload",props:In,setup(e){e.abstract&&"image-card"===e.listType&&(0,u.$8)("upload","when the list-type is image-card, abstract is not supported.");const{mergedClsPrefixRef:n,inlineThemeDisabled:t}=(0,s.Ay)(e),g=(0,a.A)("Upload","-upload",Mn,p.A,e,n),v=(0,d.A)(e),m=(0,r.EW)((()=>{const{max:n}=e;return void 0!==n&&$.value.length>=n})),w=(0,i.KR)(e.defaultFileList),C=(0,i.lW)(e,"fileList"),y=(0,i.KR)(null),R={value:!1},B=(0,i.KR)(!1),L=new Map,P=(0,l.A)(C,w),$=(0,r.EW)((()=>P.value.map(k)));function O(){var e;null===(e=y.value)||void 0===e||e.click()}const S=(0,r.EW)((()=>e.multiple||e.directory));function z(n,t){if(!n||0===n.length)return;const{onBeforeUpload:i}=e;n=S.value?n:[n[0]];const{max:l,accept:a}=e;n=n.filter((({file:e,source:n})=>"dnd"!==n||!(null==a?void 0:a.trim())||function(e,n,t){return e=e.toLowerCase(),n=n.toLocaleLowerCase(),(t=t.toLocaleLowerCase()).split(",").map((e=>e.trim())).filter(Boolean).some((t=>{if(t.startsWith(".")){if(e.endsWith(t))return!0}else{if(!t.includes("/"))return!0;{const[e,r]=n.split("/"),[i,o]=t.split("/");if(("*"===i||e&&i&&i===e)&&("*"===o||r&&o&&o===r))return!0}}return!1}))}(e.name,e.type,a))),l&&(n=n.slice(0,l-$.value.length));const s=(0,o.sX)();Promise.all(n.map((({file:e,entry:n})=>Dn(this,void 0,void 0,(function*(){var t;const r={id:(0,o.sX)(),batchId:s,name:e.name,status:"pending",percentage:0,file:e,url:null,type:e.type,thumbnailUrl:null,fullPath:null!==(t=null==n?void 0:n.fullPath)&&void 0!==t?t:`/${e.webkitRelativePath||e.name}`};return i&&!1===(yield i({file:r,fileList:$.value}))?null:r}))))).then((e=>Dn(this,void 0,void 0,(function*(){let n=Promise.resolve();e.forEach((e=>{n=n.then(r.dY).then((()=>{e&&A(e,t,{append:!0})}))})),yield n})))).then((()=>{e.defaultUpload&&T()}))}function T(n){const{method:t,action:r,withCredentials:i,headers:o,data:l,name:a}=e,s=void 0!==n?$.value.filter((e=>e.id===n)):$.value,d=void 0!==n;s.forEach((n=>{const{status:s}=n;("pending"===s||"error"===s&&d)&&(e.customRequest?function(e){const{inst:n,file:t,data:r,headers:i,withCredentials:o,action:l,customRequest:a}=e,{doChange:s}=e.inst;let d=0;a({file:t,data:r,headers:i,withCredentials:o,action:l,onProgress(e){const n=Object.assign({},t,{status:"uploading"}),r=e.percent;n.percentage=r,d=r,s(n)},onFinish(){var e;let r=Object.assign({},t,{status:"finished",percentage:d});r=k((null===(e=n.onFinish)||void 0===e?void 0:e.call(n,{file:r}))||r),s(r)},onError(){var e;let r=Object.assign({},t,{status:"error",percentage:d});r=k((null===(e=n.onError)||void 0===e?void 0:e.call(n,{file:r}))||r),s(r)}})}({inst:{doChange:A,xhrMap:L,onFinish:e.onFinish,onError:e.onError},file:n,action:r,withCredentials:i,headers:o,data:l,customRequest:e.customRequest}):Wn({doChange:A,xhrMap:L,onFinish:e.onFinish,onError:e.onError,isErrorState:e.isErrorState},a,n,{method:t,action:r,withCredentials:i,responseType:e.responseType,headers:o,data:l}))}))}const A=(n,t,r={append:!1,remove:!1})=>{const{append:i,remove:o}=r,l=Array.from($.value),a=l.findIndex((e=>e.id===n.id));if(i||o||~a){i?l.push(n):o?l.splice(a,1):l.splice(a,1,n);const{onChange:r}=e;r&&r({file:n,fileList:l,event:t}),function(n){const{"onUpdate:fileList":t,onUpdateFileList:r}=e;t&&(0,h.T)(t,n),r&&(0,h.T)(r,n),w.value=n}(l)}},M=(0,r.EW)((()=>{const{common:{cubicBezierEaseInOut:e},self:{draggerColor:n,draggerBorder:t,draggerBorderHover:r,itemColorHover:i,itemColorHoverError:o,itemTextColorError:l,itemTextColorSuccess:a,itemTextColor:s,itemIconColor:d,itemDisabledOpacity:c,lineHeight:u,borderRadius:h,fontSize:p,itemBorderImageCardError:f,itemBorderImageCard:v}}=g.value;return{"--n-bezier":e,"--n-border-radius":h,"--n-dragger-border":t,"--n-dragger-border-hover":r,"--n-dragger-color":n,"--n-font-size":p,"--n-item-color-hover":i,"--n-item-color-hover-error":o,"--n-item-disabled-opacity":c,"--n-item-icon-color":d,"--n-item-text-color":s,"--n-item-text-color-error":l,"--n-item-text-color-success":a,"--n-line-height":u,"--n-item-border-image-card-error":f,"--n-item-border-image-card":v}})),D=t?(0,c.R)("upload",void 0,M,e):void 0;(0,r.Gt)(f,{mergedClsPrefixRef:n,mergedThemeRef:g,showCancelButtonRef:(0,i.lW)(e,"showCancelButton"),showDownloadButtonRef:(0,i.lW)(e,"showDownloadButton"),showRemoveButtonRef:(0,i.lW)(e,"showRemoveButton"),showRetryButtonRef:(0,i.lW)(e,"showRetryButton"),onRemoveRef:(0,i.lW)(e,"onRemove"),onDownloadRef:(0,i.lW)(e,"onDownload"),mergedFileListRef:$,triggerClassRef:(0,i.lW)(e,"triggerClass"),triggerStyleRef:(0,i.lW)(e,"triggerStyle"),shouldUseThumbnailUrlRef:(0,i.lW)(e,"shouldUseThumbnailUrl"),renderIconRef:(0,i.lW)(e,"renderIcon"),xhrMap:L,submit:T,doChange:A,showPreviewButtonRef:(0,i.lW)(e,"showPreviewButton"),onPreviewRef:(0,i.lW)(e,"onPreview"),getFileThumbnailUrlResolver:function(n){var t;if(n.thumbnailUrl)return n.thumbnailUrl;const{createThumbnailUrl:r}=e;return r?null!==(t=r(n.file,n))&&void 0!==t?t:n.url||"":n.url?n.url:n.file?function(e){return b(this,void 0,void 0,(function*(){return yield new Promise((n=>{e.type&&x(e.type)?n(window.URL.createObjectURL(e)):n("")}))}))}(n.file):""},listTypeRef:(0,i.lW)(e,"listType"),dragOverRef:B,openOpenFileDialog:O,draggerInsideRef:R,handleFileAddition:z,mergedDisabledRef:v.mergedDisabledRef,maxReachedRef:m,fileListClassRef:(0,i.lW)(e,"fileListClass"),fileListStyleRef:(0,i.lW)(e,"fileListStyle"),abstractRef:(0,i.lW)(e,"abstract"),acceptRef:(0,i.lW)(e,"accept"),cssVarsRef:t?void 0:M,themeClassRef:null==D?void 0:D.themeClass,onRender:null==D?void 0:D.onRender,showTriggerRef:(0,i.lW)(e,"showTrigger"),imageGroupPropsRef:(0,i.lW)(e,"imageGroupProps"),mergedDirectoryDndRef:(0,r.EW)((()=>{var n;return null!==(n=e.directoryDnd)&&void 0!==n?n:e.directory}))});const E={clear:()=>{w.value=[]},submit:T,openOpenFileDialog:O};return Object.assign({mergedClsPrefix:n,draggerInsideRef:R,inputElRef:y,mergedTheme:g,dragOver:B,mergedMultiple:S,cssVars:t?void 0:M,themeClass:null==D?void 0:D.themeClass,onRender:null==D?void 0:D.onRender,handleFileInputChange:function(e){const n=e.target;z(n.files?Array.from(n.files).map((e=>({file:e,entry:null,source:"input"}))):null,e),n.value=""}},E)},render(){var e,n;const{draggerInsideRef:t,mergedClsPrefix:i,$slots:o,directory:l,onRender:a}=this;if(o.default&&!this.abstract){const n=o.default()[0];(null===(e=null==n?void 0:n.type)||void 0===e?void 0:e[v])&&(t.value=!0)}const s=(0,r.h)("input",Object.assign({},this.inputProps,{ref:"inputElRef",type:"file",class:`${i}-upload-file-input`,accept:this.accept,multiple:this.mergedMultiple,onChange:this.handleFileInputChange,webkitdirectory:l||void 0,directory:l||void 0}));return this.abstract?(0,r.h)(r.FK,null,null===(n=o.default)||void 0===n?void 0:n.call(o),(0,r.h)(r.Im,{to:"body"},s)):(null==a||a(),(0,r.h)("div",{class:[`${i}-upload`,t.value&&`${i}-upload--dragger-inside`,this.dragOver&&`${i}-upload--drag-over`,this.themeClass],style:this.cssVars},s,this.showTrigger&&"image-card"!==this.listType&&(0,r.h)(O,null,o),this.showFileList&&(0,r.h)(Pn,null,o)))}})}}]); \ No newline at end of file diff --git a/NearBeach/static/NearBeach/1960.min.js.gz b/NearBeach/static/NearBeach/1960.min.js.gz new file mode 100644 index 000000000..e8800ef28 Binary files /dev/null and b/NearBeach/static/NearBeach/1960.min.js.gz differ diff --git a/NearBeach/static/NearBeach/281.min.js b/NearBeach/static/NearBeach/281.min.js new file mode 100644 index 000000000..dcbf509b1 --- /dev/null +++ b/NearBeach/static/NearBeach/281.min.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunknearbeach=self.webpackChunknearbeach||[]).push([[281],{9639:(e,t,r)=>{r.d(t,{Ay:()=>E});var a=r(953),n=r(641);function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:[];return Object.keys(e).reduce(((r,n)=>(t.includes(n)||(r[n]=(0,a.R1)(e[n])),r)),{})}function u(e){return"function"==typeof e}function c(e,t,r){let a=e;const n=t.split(".");for(let e=0;ee.some((e=>c(t,e,{[r]:!1})[r]))))}function d(e,t,r){return(0,n.EW)((()=>e.reduce(((e,a)=>{const n=c(t,a,{[r]:!1})[r]||[];return e.concat(n)}),[])))}function v(e,t,r,n){return e.call(n,(0,a.R1)(t),(0,a.R1)(r),n)}function p(e){return void 0!==e.$valid?!e.$valid:!e}const f="__root";function h(e){let{validations:t,state:r,key:s,parentKey:o,childResults:c,resultsCache:m,globalConfig:g={},instance:y,externalResults:b}=e;const R=o?`${o}.${s}`:s,{rules:w,nestedValidators:E,config:O,validationGroups:j}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=(0,a.R1)(e),r=Object.keys(t),n={},s={},i={};let o=null;return r.forEach((e=>{const r=t[e];switch(!0){case u(r.$validator):n[e]=r;break;case u(r):n[e]={$validator:r};break;case"$validationGroups"===e:o=r;break;case e.startsWith("$"):i[e]=r;break;default:s[e]=r}})),{rules:n,nestedValidators:s,config:i,validationGroups:o}}(t),x=i(i({},g),O),P=s?(0,n.EW)((()=>{const e=(0,a.R1)(r);return e?(0,a.R1)(e[s]):void 0})):r,_=i({},(0,a.R1)(b)||{}),C=(0,n.EW)((()=>{const e=(0,a.R1)(b);return s?e?(0,a.R1)(e[s]):void 0:e})),W=function(e,t,r,s,i,o,c,$,d){const f=Object.keys(e),h=s.get(i,e),m=(0,a.KR)(!1),g=(0,a.KR)(!1),y=(0,a.KR)(0);if(h){if(!h.$partial)return h;h.$unwatch(),m.value=h.$dirty.value}const b={$dirty:m,$path:i,$touch:()=>{m.value||(m.value=!0)},$reset:()=>{m.value&&(m.value=!1)},$commit:()=>{}};return f.length?(f.forEach((s=>{b[s]=function(e,t,r,s,i,o,c,$,d,f,h){const m=(0,a.KR)(!1),g=e.$params||{},y=(0,a.KR)(null);let b,R;e.$async?({$invalid:b,$unwatch:R}=function(e,t,r,s,i,o,l){let{$lazy:u,$rewardEarly:c}=i,$=arguments.length>7&&void 0!==arguments[7]?arguments[7]:[],d=arguments.length>8?arguments[8]:void 0,f=arguments.length>9?arguments[9]:void 0,h=arguments.length>10?arguments[10]:void 0;const m=(0,a.KR)(!!s.value),g=(0,a.KR)(0);r.value=!1;const y=(0,n.wB)([t,s].concat($,h),(()=>{if(u&&!s.value||c&&!f.value&&!r.value)return;let a;try{a=v(e,t,d,l)}catch(e){a=Promise.reject(e)}g.value++,r.value=!!g.value,m.value=!1,Promise.resolve(a).then((e=>{g.value--,r.value=!!g.value,o.value=e,m.value=p(e)})).catch((e=>{g.value--,r.value=!!g.value,o.value=e,m.value=!0}))}),{immediate:!0,deep:"object"==typeof t});return{$invalid:m,$unwatch:y}}(e.$validator,t,m,r,s,y,i,e.$watchTargets,d,f,h)):({$invalid:b,$unwatch:R}=function(e,t,r,a,s,i,o,l){let{$lazy:u,$rewardEarly:c}=a;return{$unwatch:()=>({}),$invalid:(0,n.EW)((()=>{if(u&&!r.value||c&&!l.value)return!1;let a=!0;try{const r=v(e,t,o,i);s.value=r,a=p(r)}catch(e){s.value=e}return a}))}}(e.$validator,t,r,s,y,i,d,f));const w=e.$message;return{$message:u(w)?(0,n.EW)((()=>w(l({$pending:m,$invalid:b,$params:l(g),$model:t,$response:y,$validator:o,$propertyPath:$,$property:c})))):w||"",$params:g,$pending:m,$invalid:b,$response:y,$unwatch:R}}(e[s],t,b.$dirty,o,c,s,r,i,d,g,y)})),b.$externalResults=(0,n.EW)((()=>$.value?[].concat($.value).map(((e,t)=>({$propertyPath:i,$property:r,$validator:"$externalResults",$uid:`${i}-externalResult-${t}`,$message:e,$params:{},$response:null,$pending:!1}))):[])),b.$invalid=(0,n.EW)((()=>{const e=f.some((e=>(0,a.R1)(b[e].$invalid)));return g.value=e,!!b.$externalResults.value.length||e})),b.$pending=(0,n.EW)((()=>f.some((e=>(0,a.R1)(b[e].$pending))))),b.$error=(0,n.EW)((()=>!!b.$dirty.value&&(b.$pending.value||b.$invalid.value))),b.$silentErrors=(0,n.EW)((()=>f.filter((e=>(0,a.R1)(b[e].$invalid))).map((e=>{const t=b[e];return(0,a.Kh)({$propertyPath:i,$property:r,$validator:e,$uid:`${i}-${e}`,$message:t.$message,$params:t.$params,$response:t.$response,$pending:t.$pending})})).concat(b.$externalResults.value))),b.$errors=(0,n.EW)((()=>b.$dirty.value?b.$silentErrors.value:[])),b.$unwatch=()=>f.forEach((e=>{b[e].$unwatch()})),b.$commit=()=>{g.value=!0,y.value=Date.now()},s.set(i,e,b),b):(h&&s.set(i,e,b),b)}(w,P,s,m,R,x,y,C,r),k=function(e,t,r,a,n,s,i){const o=Object.keys(e);return o.length?o.reduce(((o,l)=>(o[l]=h({validations:e[l],state:t,key:l,parentKey:r,resultsCache:a,globalConfig:n,instance:s,externalResults:i}),o)),{}):{}}(E,P,R,m,x,y,C),z={};j&&Object.entries(j).forEach((e=>{let[t,r]=e;z[t]={$invalid:$(r,k,"$invalid"),$error:$(r,k,"$error"),$pending:$(r,k,"$pending"),$errors:d(r,k,"$errors"),$silentErrors:d(r,k,"$silentErrors")}}));const{$dirty:L,$errors:A,$invalid:K,$anyDirty:V,$error:D,$pending:T,$touch:I,$reset:S,$silentErrors:N,$commit:B}=function(e,t,r){const s=(0,n.EW)((()=>[t,r].filter((e=>e)).reduce(((e,t)=>e.concat(Object.values((0,a.R1)(t)))),[]))),i=(0,n.EW)({get:()=>e.$dirty.value||!!s.value.length&&s.value.every((e=>e.$dirty)),set(t){e.$dirty.value=t}}),o=(0,n.EW)((()=>{const t=(0,a.R1)(e.$silentErrors)||[],r=s.value.filter((e=>((0,a.R1)(e).$silentErrors||[]).length)).reduce(((e,t)=>e.concat(...t.$silentErrors)),[]);return t.concat(r)})),l=(0,n.EW)((()=>{const t=(0,a.R1)(e.$errors)||[],r=s.value.filter((e=>((0,a.R1)(e).$errors||[]).length)).reduce(((e,t)=>e.concat(...t.$errors)),[]);return t.concat(r)})),u=(0,n.EW)((()=>s.value.some((e=>e.$invalid))||(0,a.R1)(e.$invalid)||!1)),c=(0,n.EW)((()=>s.value.some((e=>(0,a.R1)(e.$pending)))||(0,a.R1)(e.$pending)||!1)),$=(0,n.EW)((()=>s.value.some((e=>e.$dirty))||s.value.some((e=>e.$anyDirty))||i.value)),d=(0,n.EW)((()=>!!i.value&&(c.value||u.value))),v=()=>{e.$touch(),s.value.forEach((e=>{e.$touch()}))};return s.value.length&&s.value.every((e=>e.$dirty))&&v(),{$dirty:i,$errors:l,$invalid:u,$anyDirty:$,$error:d,$pending:c,$touch:v,$reset:()=>{e.$reset(),s.value.forEach((e=>{e.$reset()}))},$silentErrors:o,$commit:()=>{e.$commit(),s.value.forEach((e=>{e.$commit()}))}}}(W,k,c),G=s?(0,n.EW)({get:()=>(0,a.R1)(P),set:e=>{L.value=!0;const t=(0,a.R1)(r),n=(0,a.R1)(b);n&&(n[s]=_[s]),(0,a.i9)(t[s])?t[s].value=e:t[s]=e}}):null;return s&&x.$autoDirty&&(0,n.wB)(P,(()=>{L.value||I();const e=(0,a.R1)(b);e&&(e[s]=_[s])}),{flush:"sync"}),(0,a.Kh)(i(i(i({},W),{},{$model:G,$dirty:L,$error:D,$errors:A,$invalid:K,$anyDirty:V,$pending:T,$touch:I,$reset:S,$path:R||f,$silentErrors:N,$validate:async function(){return I(),x.$rewardEarly&&(B(),await(0,n.dY)()),await(0,n.dY)(),new Promise((e=>{if(!T.value)return e(!K.value);const t=(0,n.wB)(T,(()=>{e(!K.value),t()}))}))},$commit:B},c&&{$getResultsForChild:function(e){return(c.value||{})[e]},$clearExternalResults:function(){(0,a.i9)(b)?b.value=_:0===Object.keys(_).length?Object.keys(b).forEach((e=>{delete b[e]})):Object.assign(b,_)},$validationGroups:z}),k))}class m{constructor(){this.storage=new Map}set(e,t,r){this.storage.set(e,{rules:t,result:r})}checkRulesValidity(e,t,r){const n=Object.keys(r),s=Object.keys(t);return s.length===n.length&&(!!s.every((e=>n.includes(e)))&&s.every((e=>!t[e].$params||Object.keys(t[e].$params).every((n=>(0,a.R1)(r[e].$params[n])===(0,a.R1)(t[e].$params[n]))))))}get(e,t){const r=this.storage.get(e);if(!r)return;const{rules:a,result:n}=r,s=this.checkRulesValidity(e,t,a),i=n.$unwatch?n.$unwatch:()=>({});return s?n:{$dirty:n.$dirty,$partial:!0,$unwatch:i}}}const g={COLLECT_ALL:!0,COLLECT_NONE:!1},y=Symbol("vuelidate#injectChildResults"),b=Symbol("vuelidate#removeChildResults");function R(e){return new Proxy(e,{get:(e,t)=>"object"==typeof e[t]?R(e[t]):(0,n.EW)((()=>e[t]))})}let w=0;function E(e,t){var r;let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};1===arguments.length&&(s=e,e=void 0,t=void 0);let{$registerAs:o,$scope:l=g.COLLECT_ALL,$stopPropagation:c,$externalResults:$,currentVueInstance:d}=s;const v=d||(null===(r=(0,n.nI)())||void 0===r?void 0:r.proxy),p=v?v.$options:{};o||(w+=1,o=`_vuelidate_${w}`);const f=(0,a.KR)({}),E=new m,{childResults:O,sendValidationResultsToParent:j,removeValidationResultsFromParent:x}=v?function(e){let{$scope:t,instance:r}=e;const s={},i=(0,a.KR)([]),o=(0,n.EW)((()=>i.value.reduce(((e,t)=>(e[t]=(0,a.R1)(s[t]),e)),{})));r.__vuelidateInjectInstances=[].concat(r.__vuelidateInjectInstances||[],(function(e,r){let{$registerAs:a,$scope:n,$stopPropagation:o}=r;o||t===g.COLLECT_NONE||n===g.COLLECT_NONE||t!==g.COLLECT_ALL&&t!==n||(s[a]=e,i.value.push(a))})),r.__vuelidateRemoveInstances=[].concat(r.__vuelidateRemoveInstances||[],(function(e){i.value=i.value.filter((t=>t!==e)),delete s[e]}));const l=(0,n.WQ)(y,[]);(0,n.Gt)(y,r.__vuelidateInjectInstances);const u=(0,n.WQ)(b,[]);return(0,n.Gt)(b,r.__vuelidateRemoveInstances),{childResults:o,sendValidationResultsToParent:l,removeValidationResultsFromParent:u}}({$scope:l,instance:v}):{childResults:(0,a.KR)({})};if(!e&&p.validations){const e=p.validations;t=(0,a.KR)({}),(0,n.KC)((()=>{t.value=v,(0,n.wB)((()=>u(e)?e.call(t.value,new R(t.value)):e),(e=>{f.value=h({validations:e,state:t,childResults:O,resultsCache:E,globalConfig:s,instance:v,externalResults:$||v.vuelidateExternalResults})}),{immediate:!0})})),s=p.validationsConfig||s}else{const r=(0,a.i9)(e)||(P=e,(0,a.g8)(P)||(0,a.Tm)(P))?e:(0,a.Kh)(e||{});(0,n.wB)(r,(e=>{f.value=h({validations:e,state:t,childResults:O,resultsCache:E,globalConfig:s,instance:null!=v?v:{},externalResults:$})}),{immediate:!0})}var P;return v&&(j.forEach((e=>e(f,{$registerAs:o,$scope:l,$stopPropagation:c}))),(0,n.xo)((()=>x.forEach((e=>e(o)))))),(0,n.EW)((()=>i(i({},(0,a.R1)(f.value)),O.value)))}},3855:(e,t,r)=>{r.d(t,{Bp:()=>y,OZ:()=>R,Rp:()=>m,Ru:()=>g,_$:()=>f,mw:()=>b,sH:()=>h});var a=r(953);function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t{if(e=(0,a.R1)(e),Array.isArray(e))return!!e.length;if(null==e)return!1;if(!1===e)return!0;if(e instanceof Date)return!isNaN(e.getTime());if("object"==typeof e){for(let t in e)return!0;return!1}return!!String(e).length},v=e=>(e=(0,a.R1)(e),Array.isArray(e)?e.length:"object"==typeof e?Object.keys(e).length:String(e).length);function p(){for(var e=arguments.length,t=new Array(e),r=0;r(e=(0,a.R1)(e),!d(e)||t.every((t=>(t.lastIndex=0,t.test(e)))))}var f=Object.freeze({__proto__:null,forEach:function(e){return{$validator(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),s=1;s{const s=Object.entries(r).reduce(((t,s)=>{let[i,o]=s;const l=e[i]||{},u=Object.entries(l).reduce(((e,t)=>{let[s,l]=t;const u=$(l).call(this,o,r,a,...n),d=c(u);if(e.$data[s]=u,e.$data.$invalid=!d||!!e.$data.$invalid,e.$data.$error=e.$data.$invalid,!d){let t=l.$message||"";const r=l.$params||{};"function"==typeof t&&(t=t({$pending:!1,$invalid:!d,$params:r,$model:o,$response:u})),e.$errors.push({$property:i,$message:t,$params:r,$response:u,$model:o,$pending:!1,$validator:s})}return{$valid:e.$valid&&d,$data:e.$data,$errors:e.$errors}}),{$valid:!0,$data:{},$errors:[]});return t.$data[i]=u.$data,t.$errors[i]=u.$errors,{$valid:t.$valid&&u.$valid,$data:t.$data,$errors:t.$errors}}),{$valid:!0,$data:{},$errors:{}});return{$valid:t.$valid&&s.$valid,$data:t.$data.concat(s.$data),$errors:t.$errors.concat(s.$errors)}}),{$valid:!0,$data:[],$errors:[]})},$message:e=>{let{$response:t}=e;return t?t.$errors.map((e=>Object.values(e).map((e=>e.map((e=>e.$message)))).reduce(((e,t)=>e.concat(t)),[]))):[]}}},len:v,normalizeValidatorObject:u,regex:p,req:d,unwrap:a.R1,unwrapNormalizedValidator:$,unwrapValidatorResponse:c,withAsync:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return s(s({},u(e)),{},{$async:!0,$watchTargets:t})},withMessage:function(e,t){if(!o(e)&&"string"!=typeof(0,a.R1)(e))throw new Error('[@vuelidate/validators]: First parameter to "withMessage" should be string or a function returning a string, provided '+typeof e);if(!l(t)&&!o(t))throw new Error("[@vuelidate/validators]: Validator must be a function or object with $validator parameter");const r=u(t);return r.$message=e,r},withParams:function(e,t){if(!l(e))throw new Error('[@vuelidate/validators]: First parameter to "withParams" should be an object, provided '+typeof e);if(!l(t)&&!o(t))throw new Error("[@vuelidate/validators]: Validator must be a function or object with $validator parameter");const r=u(t);return r.$params=s(s({},r.$params||{}),e),r}}),h=(p(/^[a-zA-Z]*$/),p(/^[a-zA-Z0-9]*$/),{$validator:p(/^\d*(\.\d+)?$/),$message:"Value must be numeric",$params:{type:"numeric"}}),m={$validator:p(/^(?:[A-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|\[(?:(?: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]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i),$message:"Value is not a valid email address",$params:{type:"email"}};function g(e){return{$validator:(t=e,e=>!d(e)||v(e)<=(0,a.R1)(t)),$message:e=>{let{$params:t}=e;return`The maximum length allowed is ${t.max}`},$params:{max:e,type:"maxLength"}};var t}function y(e){return{$validator:(t=e,e=>!d(e)||v(e)>=(0,a.R1)(t)),$message:e=>{let{$params:t}=e;return`This field should be at least ${t.min} characters long`},$params:{min:e,type:"minLength"}};var t}var b={$validator:function(e){return"string"==typeof e&&(e=e.trim()),d(e)},$message:"Value is required",$params:{type:"required"}},R={$validator:p(/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i),$message:"The value is not a valid URL address",$params:{type:"url"}};p(/(^[0-9]*$)|(^-[0-9]+$)/),p(/^[-]?\d*(\.\d+)?$/)}}]); \ No newline at end of file diff --git a/NearBeach/static/NearBeach/281.min.js.gz b/NearBeach/static/NearBeach/281.min.js.gz new file mode 100644 index 000000000..951be7b41 Binary files /dev/null and b/NearBeach/static/NearBeach/281.min.js.gz differ diff --git a/NearBeach/static/NearBeach/2864.min.js b/NearBeach/static/NearBeach/2864.min.js new file mode 100644 index 000000000..d1b58ab22 --- /dev/null +++ b/NearBeach/static/NearBeach/2864.min.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunknearbeach=self.webpackChunknearbeach||[]).push([[2864],{8838:(t,e,o)=>{o.d(e,{A:()=>v});var n,i=o(641),a=["onActivate","onAddUndo","onBeforeAddUndo","onBeforeExecCommand","onBeforeGetContent","onBeforeRenderUI","onBeforeSetContent","onBeforePaste","onBlur","onChange","onClearUndos","onClick","onContextMenu","onCopy","onCut","onDblclick","onDeactivate","onDirty","onDrag","onDragDrop","onDragEnd","onDragGesture","onDragOver","onDrop","onExecCommand","onFocus","onFocusIn","onFocusOut","onGetContent","onHide","onInit","onKeyDown","onKeyPress","onKeyUp","onLoadContent","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onNodeChange","onObjectResizeStart","onObjectResized","onObjectSelected","onPaste","onPostProcess","onPostRender","onPreProcess","onProgressState","onRedo","onRemove","onReset","onSaveContent","onSelectionChange","onSetAttrib","onSetContent","onShow","onSubmit","onUndo","onVisualAid"],s=function(t){return-1!==a.map((function(t){return t.toLowerCase()})).indexOf(t.toLowerCase())},r=0,l=function(t){var e=Date.now();return t+"_"+Math.floor(1e9*Math.random())+ ++r+String(e)},d=function(t){return void 0===t||""===t?[]:Array.isArray(t)?t:t.split(" ")},c=function(){return{listeners:[],scriptId:l("tiny-script"),scriptLoaded:!1}},u=(n=c(),{load:function(t,e,o){n.scriptLoaded?o():(n.listeners.push(o),t.getElementById(n.scriptId)||function(t,e,o,i){var a=e.createElement("script");a.referrerPolicy="origin",a.type="application/javascript",a.id=t,a.src=o;var s=function(){a.removeEventListener("load",s),n.listeners.forEach((function(t){return t()})),n.scriptLoaded=!0};a.addEventListener("load",s),e.head&&e.head.appendChild(a)}(n.scriptId,t,e))},reinitialize:function(){n=c()}}),g=function(){var t="undefined"!=typeof window?window:o.g;return t&&t.tinymce?t.tinymce:null},m={apiKey:String,cloudChannel:String,id:String,init:Object,initialValue:String,inline:Boolean,modelEvents:[String,Array],plugins:[String,Array],tagName:String,toolbar:[String,Array],modelValue:String,disabled:Boolean,tinymceScriptSrc:String,outputFormat:{type:String,validator:function(t){return"html"===t||"text"===t}}},p=o(953),h=function(){return h=Object.assign||function(t){for(var e,o=1,n=arguments.length;o{o.d(e,{A:()=>b});var n=o(641),i=o(33);const a={class:"customer-list"},s=["src"],r={class:"customer-card--details"},l={class:"customer-card--name"},d=["href"],c={class:"customer-card--email"},u={key:0,class:"customer-card--remove"};var g=o(2321),m=o(2243),p=o(2124);const h={name:"CustomersListModule",components:{Icon:g.In},props:{customerResults:{type:Array,default:()=>[]}},computed:{...(0,p.L8)({destination:"getDestination",locationId:"getLocationId",rootUrl:"getRootUrl",staticUrl:"getStaticUrl",userLevel:"getUserLevel"}),defaultCustomerImage(){return`${this.staticUrl}/NearBeach/images/placeholder/people_tax.svg`}},mixins:[m.A],data:()=>({}),methods:{getCustomerImage(t){const e=t.fields.customer_profile_picture;return""===e||null===e?this.defaultCustomerImage:`${this.rootUrl}private/${e}`},removeCustomer(t){const e=new FormData;e.set("customer_id",t),this.axios.post(`${this.rootUrl}object_data/${this.destination}/${this.locationId}/remove_customer/`,e).then((()=>{this.$emit("remove_customer",t)}))}}},b=(0,o(6262).A)(h,[["render",function(t,e,o,g,m,p){const h=(0,n.g2)("Icon");return(0,n.uX)(),(0,n.CE)("div",a,[((0,n.uX)(!0),(0,n.CE)(n.FK,null,(0,n.pI)(o.customerResults,(e=>((0,n.uX)(),(0,n.CE)("div",{key:e.pk,class:"customer-card"},[(0,n.Q3)(" CUSOMER PROFILE "),(0,n.Lk)("img",{src:p.getCustomerImage(e),alt:"default profile picture"},null,8,s),(0,n.Q3)(" CUSTOMER DETAILS "),(0,n.Lk)("div",r,[(0,n.Lk)("div",l,[(0,n.Lk)("a",{href:`${t.rootUrl}customer_information/${e.pk}/`},(0,i.toDisplayString)(e.fields.customer_first_name)+" "+(0,i.toDisplayString)(e.fields.customer_last_name),9,d)]),(0,n.Lk)("div",c,[(0,n.bF)(h,{icon:t.icons.mailIcon},null,8,["icon"]),(0,n.eW)(" "+(0,i.toDisplayString)(e.fields.customer_email),1)])]),t.userLevel>=2?((0,n.uX)(),(0,n.CE)("div",u,[(0,n.bF)(h,{icon:t.icons.trashCan,onClick:t=>p.removeCustomer(e.pk)},null,8,["icon","onClick"])])):(0,n.Q3)("v-if",!0)])))),128))])}]])},2458:(t,e,o)=>{o.d(e,{A:()=>$});var n=o(641),i=o(33);const a=(0,n.Lk)("h2",null,"Assigned Tags",-1),s={class:"text-instructions"},r={class:"tag-list"},l=["onClick"],d={class:"row submit-row"},c={class:"col-md-12"};var u=o(9336),g=o(2321),m=o(2243);const p={class:"modal fade",id:"addTagModal",tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},h={class:"modal-dialog"},b={class:"modal-content"},v={class:"modal-header"},y=(0,n.Lk)("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",id:"addTagsCloseButton"},[(0,n.Lk)("span",{"aria-hidden":"true"})],-1),f={class:"modal-body"},L={class:"row"},k={class:"col-md-4"},C=(0,n.Lk)("strong",null,"Add Tag",-1),w={class:"text-instructions"},S={class:"col-md-8"},I=(0,n.Lk)("label",null,"All Tag List",-1),A={class:"modal-footer"},N=(0,n.Lk)("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ",-1);var T=o(1080),_=o(2124);const E={name:"AddTagWizard",components:{Icon:g.In,NSelect:T.A},props:{assignedTags:{type:Array,default:()=>[]},destination:{type:String,default:""},locationId:{type:Number,default:0}},mixins:[m.A],data:()=>({allTagList:[],tagModel:[]}),computed:{...(0,_.L8)({rootUrl:"getRootUrl"}),tagList(){return this.allTagList.filter((t=>this.assignedTags.findIndex((e=>e.pk===parseInt(t.value)))<0))}},methods:{addTag(){const t=new FormData;this.tagModel.forEach((e=>{t.append("tag_id",e)})),this.axios.post(`${this.rootUrl}object_data/${this.destination}/${this.locationId}/add_tags/`,t).then((t=>{this.$emit("add_tags",t.data),document.getElementById("addTagsCloseButton").click(),this.tagModel=[]})).catch((t=>{this.$store.dispatch("newToast",{header:"Failed to add tag",message:`Sorry, we could not add tag. Errors -> ${t}`,extra_classes:"bg-danger",delay:0})}))},getTagList(){this.axios.post(`${this.rootUrl}object_data/tag_list_all/`).then((t=>{this.allTagList=t.data.map((t=>({value:t.pk,label:t.fields.tag_name})))})).catch((t=>{this.$store.dispatch("newToast",{header:"Failed to get tag list",message:`Sorry, we could not get the tag list. Errors -> ${t}`,extra_classes:"bg-danger",delay:0})}))}},mounted(){["requirement_item"].indexOf(this.destination)>=0||this.$nextTick((()=>{this.getTagList()}))}};var x=o(6262);const D={name:"ListTagsModule",components:{AddTagWizard:(0,x.A)(E,[["render",function(t,e,o,a,s,r){const l=(0,n.g2)("Icon"),d=(0,n.g2)("n-select");return(0,n.uX)(),(0,n.CE)("div",p,[(0,n.Lk)("div",h,[(0,n.Lk)("div",b,[(0,n.Lk)("div",v,[(0,n.Lk)("h2",null,[(0,n.bF)(l,{icon:t.icons.usersIcon},null,8,["icon"]),(0,n.eW)(" Add Tags Wizard ")]),y]),(0,n.Lk)("div",f,[(0,n.Lk)("div",L,[(0,n.Lk)("div",k,[C,(0,n.Lk)("p",w," Use the dropdown to select one or many lables to add to the "+(0,i.toDisplayString)(o.destination)+". ",1)]),(0,n.Lk)("div",S,[I,(0,n.bF)(d,{label:"tag",multiple:"",options:r.tagList,value:s.tagModel,"onUpdate:value":e[0]||(e[0]=t=>s.tagModel=t)},null,8,["options","value"])])])]),(0,n.Lk)("div",A,[N,(0,n.Lk)("button",{type:"button",class:"btn btn-primary",onClick:e[1]||(e[1]=(...t)=>r.addTag&&r.addTag(...t))}," Add Tag ")])])])])}]]),Icon:g.In},data:()=>({tagList:[]}),mixins:[m.A],computed:{...(0,_.L8)({destination:"getDestination",locationId:"getLocationId",rootUrl:"getRootUrl",userLevel:"getUserLevel"})},methods:{addTags(t){this.tagList=t},createNewTag(){new u.aF(document.getElementById("addTagModal")).show()},getAssignedTags(){this.axios.post(`${this.rootUrl}object_data/${this.destination}/${this.locationId}/tag_list/`).then((t=>{this.tagList=t.data})).catch((t=>{}))},removeTag(t){const e=new FormData;e.set("tag",t),e.set("object_enum",this.destination),e.set("object_id",this.locationId),this.axios.post(`${this.rootUrl}object_data/delete_tag/`,e).then((e=>{this.tagList=this.tagList.filter((e=>e.pk!==t))})).catch((t=>{}))}},mounted(){["requirement_item"].indexOf(this.destination)>=0||this.$nextTick((()=>{this.getAssignedTags()}))}},$=(0,x.A)(D,[["render",function(t,e,o,u,g,m){const p=(0,n.g2)("Icon"),h=(0,n.g2)("add-tag-wizard");return(0,n.uX)(),(0,n.CE)("div",null,[a,(0,n.Lk)("p",s," Here are all tags associated with this "+(0,i.toDisplayString)(t.destination)+'. You can add more tags by clicking on the "Add Tag" button. ',1),(0,n.Lk)("div",r,[((0,n.uX)(!0),(0,n.CE)(n.FK,null,(0,n.pI)(g.tagList,(e=>((0,n.uX)(),(0,n.CE)("div",{key:e.pk,class:"single-tag",style:(0,i.normalizeStyle)(`background-color: ${e.fields.tag_colour};color: ${e.fields.tag_text_colour};`)},[(0,n.eW)((0,i.toDisplayString)(e.fields.tag_name)+" ",1),t.userLevel>1?((0,n.uX)(),(0,n.CE)("span",{key:0,onClick:t=>m.removeTag(e.pk)},[(0,n.bF)(p,{icon:t.icons.xCircle},null,8,["icon"])],8,l)):(0,n.Q3)("v-if",!0)],4)))),128))]),(0,n.Q3)(" ADD TAG BUTTON "),(0,n.Lk)("div",d,[(0,n.Lk)("div",c,[t.userLevel>1?((0,n.uX)(),(0,n.CE)("a",{key:0,href:"javascript:void(0)",class:"btn btn-primary save-changes",onClick:e[0]||(e[0]=(...t)=>m.createNewTag&&m.createNewTag(...t))},"Add Tag to "+(0,i.toDisplayString)(t.destination),1)):(0,n.Q3)("v-if",!0)])]),(0,n.Q3)(" ADD TAG MODULE "),(0,n.bF)(h,{destination:t.destination,"location-id":t.locationId,"assigned-tags":g.tagList,onAdd_tags:e[1]||(e[1]=t=>m.addTags(t))},null,8,["destination","location-id","assigned-tags"])])}]])},3148:(t,e,o)=>{o.d(e,{A:()=>_});var n=o(641),i=o(33);const a={class:"text-instructions"},s=(0,n.Lk)("hr",null,null,-1),r={class:"row submit-row"},l={class:"col-md-12"};var d=o(9336),c=o(2243),u=o(2321),g=o(6359);const m={class:"modal fade",id:"newNoteModal",tabindex:"-1",role:"dialog","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},p={class:"modal-dialog modal-lg",role:"document"},h={class:"modal-content"},b={class:"modal-header"},v=(0,n.Lk)("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",id:"newNoteCloseButton"},[(0,n.Lk)("span",{"aria-hidden":"true"})],-1),y={class:"modal-body"},f=(0,n.Lk)("p",{class:"text-instructions"}," Use the text editor to type out your note. Click on the submit button to submit the note. ",-1),L={class:"modal-footer"},k=["disabled"],C=(0,n.Lk)("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ",-1);var w=o(8838),S=o(2124);const I={name:"NewHistoryNoteWizard",components:{editor:w.A,Icon:u.In},props:{destination:{type:String,default:""},locationId:{type:Number,default:0}},mixins:[c.A],data:()=>({newNoteModel:""}),computed:{...(0,S.L8)({contentCss:"getContentCss",rootUrl:"getRootUrl",skin:"getSkin"})},methods:{submitNote(){this.$store.dispatch("newToast",{header:"Submitting new note",message:"Please wait. Submitting new note",extra_classes:"bg-warning",delay:0,unique_type:"submit_note"});const t=new FormData;t.set("destination",this.destination),t.set("location_id",`${this.locationId}`),t.set("note",this.newNoteModel),this.axios.post(`${this.rootUrl}object_data/${this.destination}/${this.locationId}/add_notes/`,t).then((t=>{this.$store.dispatch("newToast",{header:"New Note Submitted",message:"The new note submitted successfully.",extra_classes:"bg-success",unique_type:"submit_note"}),this.$store.commit({type:"addNote",newNote:t.data[0]}),this.newNoteModel="",document.getElementById("newNoteCloseButton").click()})).catch((t=>{this.$store.dispatch("newToast",{header:"Error Submitting Note",message:`Sorry, the note did not submit. Error -> ${t}`,extra_classes:"bg-danger",delay:0,unique_type:"submit_note"})}))}}};var A=o(6262);const N=(0,A.A)(I,[["render",function(t,e,o,i,a,s){const r=(0,n.g2)("Icon"),l=(0,n.g2)("editor");return(0,n.uX)(),(0,n.CE)(n.FK,null,[(0,n.Q3)(" NEW HISTORY NOTE "),(0,n.Lk)("div",m,[(0,n.Lk)("div",p,[(0,n.Lk)("div",h,[(0,n.Lk)("div",b,[(0,n.Lk)("h2",null,[(0,n.bF)(r,{icon:t.icons.noteAdd},null,8,["icon"]),(0,n.eW)(" New Note ")]),v]),(0,n.Lk)("div",y,[f,(0,n.bF)(l,{init:{height:300,menubar:!1,plugins:["lists","codesample","table"],toolbar:"undo redo | blocks | bold italic strikethrough underline backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat | table image codesample",skin:`${this.skin}`,content_css:`${this.contentCss}`},modelValue:a.newNoteModel,"onUpdate:modelValue":e[0]||(e[0]=t=>a.newNoteModel=t)},null,8,["init","modelValue"])]),(0,n.Lk)("div",L,[(0,n.Lk)("button",{type:"button",class:"btn btn-primary",disabled:""==a.newNoteModel,onClick:e[1]||(e[1]=(...t)=>s.submitNote&&s.submitNote(...t))}," Submit Note ",8,k),C])])])])],2112)}]]),T={name:"NotesModule",components:{EditHistoryNoteWizard:o(7263).A,Icon:u.In,ListNotes:g.A,NewHistoryNoteWizard:N},mixins:[c.A],computed:{...(0,S.L8)({destination:"getDestination",locationId:"getLocationId",userLevel:"getUserLevel",rootUrl:"getRootUrl"})},methods:{createNewNote(){new d.aF(document.getElementById("newNoteModal")).show()},getNoteHistoryResults(){this.axios.post(`${this.rootUrl}object_data/${this.destination}/${this.locationId}/note_list/`).then((t=>{this.$store.commit({type:"initNoteList",noteList:t.data})})).catch((t=>{this.$store.dispatch("newToast",{header:"Error Getting Note History",message:`Can not retrieve the note history. Error -> ${t}`,extra_classes:"bg-danger",delay:0})}))}},mounted(){this.$nextTick((()=>{this.getNoteHistoryResults()}))}},_=(0,A.A)(T,[["render",function(t,e,o,d,c,u){const g=(0,n.g2)("Icon"),m=(0,n.g2)("list-notes"),p=(0,n.g2)("new-history-note-wizard"),h=(0,n.g2)("edit-history-note-wizard");return(0,n.uX)(),(0,n.CE)("div",null,[(0,n.Lk)("h2",null,[(0,n.bF)(g,{icon:t.icons.noteAdd},null,8,["icon"]),(0,n.eW)(" Note History ")]),(0,n.Lk)("p",a," The following are saved notes against this "+(0,i.toDisplayString)(t.destination)+". Add notes by clicking on the button below. ",1),(0,n.bF)(m,{destination:t.destination},null,8,["destination"]),(0,n.Q3)(" ADD NOTE HISTORY "),(0,n.Q3)(" TO DO - limit it to certain users "),s,(0,n.Lk)("div",r,[(0,n.Lk)("div",l,[t.userLevel>1?((0,n.uX)(),(0,n.CE)("button",{key:0,class:"btn btn-primary save-changes",onClick:e[0]||(e[0]=(...t)=>u.createNewNote&&u.createNewNote(...t))}," Add Note to "+(0,i.toDisplayString)(t.destination),1)):(0,n.Q3)("v-if",!0)])]),(0,n.Q3)(" Modals for Notes section "),(0,n.bF)(p,{"location-id":t.locationId,destination:t.destination},null,8,["location-id","destination"]),(0,n.bF)(h)])}]])},1378:(t,e,o)=>{o.d(e,{A:()=>b});var n=o(641),i=o(33);const a={class:"object-card-list"},s={class:"object-card--detail"},r=["href"],l={class:"object-card--detail--link"},d={class:"object-card--detail--description"},c={class:"object-card--status"},u={class:"object-card--status--status"},g={class:"small-text"};var m=o(8083),p=o(2124);const h={name:"RenderObjectCard",props:{destination:{type:String,default:""},importVariables:{type:Object,default:()=>({header:"",prefix:"",id:0,title:"",status:""})},searchResults:{type:Array,default:()=>[]}},mixins:[m.A],computed:{...(0,p.L8)({rootUrl:"getRootUrl"})}},b=(0,o(6262).A)(h,[["render",function(t,e,o,m,p,h){return(0,n.uX)(),(0,n.CE)("div",a,[(0,n.Lk)("h2",null,(0,i.toDisplayString)(o.importVariables.header),1),((0,n.uX)(!0),(0,n.CE)(n.FK,null,(0,n.pI)(o.searchResults,(e=>((0,n.uX)(),(0,n.CE)("div",{class:"object-card",key:e.pk},[(0,n.Lk)("div",s,[(0,n.Lk)("a",{href:`${t.rootUrl}${o.destination}_information/${e[o.importVariables.id]}/`},[(0,n.Lk)("div",l,(0,i.toDisplayString)(o.importVariables.prefix)+(0,i.toDisplayString)(e[o.importVariables.id]),1),(0,n.Lk)("div",d,(0,i.toDisplayString)(e[o.importVariables.title]),1)],8,r)]),(0,n.Lk)("div",c,[(0,n.Lk)("div",u,(0,i.toDisplayString)(e[o.importVariables.status]),1),(0,n.Lk)("p",g,(0,i.toDisplayString)(t.getNiceDate(e[o.importVariables.end_date])),1)])])))),128))])}]])}}]); \ No newline at end of file diff --git a/NearBeach/static/NearBeach/2864.min.js.gz b/NearBeach/static/NearBeach/2864.min.js.gz new file mode 100644 index 000000000..2fcb820a2 Binary files /dev/null and b/NearBeach/static/NearBeach/2864.min.js.gz differ diff --git a/NearBeach/static/NearBeach/2946.min.js b/NearBeach/static/NearBeach/2946.min.js new file mode 100644 index 000000000..38e910ca6 --- /dev/null +++ b/NearBeach/static/NearBeach/2946.min.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunknearbeach=self.webpackChunknearbeach||[]).push([[2946],{8814:(e,t,a)=>{a.d(t,{A:()=>te});var o=a(641),r=a(33),s=a(3751);const l={key:0,class:"error"},i=(0,o.Lk)("br",null,null,-1),d=["id","data-property","data-id","data-title"],n=["id","data-id","data-property","data-title"],p=["onClick"],m=(0,o.Lk)("hr",null,null,-1),c=["id"],y={class:"modal-dialog"},h={class:"modal-content"},u={class:"modal-header"},I={class:"modal-title",id:"exampleModalLabel"},b=["id"],g={class:"modal-body"},k={class:"form-group"},L={key:0,class:"form-group"},v={class:"modal-footer"},w=(0,o.Lk)("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ",-1),C=["id"],A={class:"modal-dialog"},P={class:"modal-content"},N={class:"modal-header"},f={class:"modal-title"},D=["id"],M={class:"modal-body"},$={class:"alert alert-warning"},E=(0,o.Lk)("h4",null,"WARNING",-1),_=(0,o.Lk)("p",null," All existing cards will be moved to the stated location you have provided. Any cards that have been archived or deleted, will still be associated with the removed card. ",-1),S={class:"row"},x=(0,o.Lk)("div",{class:"spacer"},null,-1),B={key:0,class:"row"},O=(0,o.Lk)("p",null,"Please select an appropriate destination for the current cards.",-1),R=(0,o.Lk)("label",null,[(0,o.Lk)("strong",null,"Destination for Cards")],-1),T=(0,o.Lk)("br",null,null,-1),U={class:"modal-footer"},F=(0,o.Lk)("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"}," Close ",-1),Q=["disabled"];var X=a(9336),G=a(2321),V=a(1581),W=a(8808),q=a(1080),K=a(1423),j=a(432),z=a.n(j),Y=a(2124),H=a(9639),J=a(3855),Z=a(2243);const ee={name:"KanbanPropertyOrder",setup:()=>({v$:(0,H.Ay)()}),components:{draggable:z(),Icon:G.In,NRadio:V.A,NRadioGroup:W.A,NSelect:q.A,NSpace:K.A},props:{isDirty:{type:Boolean,default:!0},isNewMode:{type:Boolean,default:!0},isReadOnly:{type:Boolean,default:!1},kanbanBoardId:{type:Number,default:0},propertyList:{type:Array,default:()=>[]},propertyName:{type:String,default:""},source:{type:String,default:""}},data(){return{columnPropertyModel:"Normal",columnPropertyOptions:[{label:"Backlog",value:"Backlog"},{label:"Normal",value:"Normal"},{label:"Blocked",value:"Blocked"},{label:"Closed",value:"Closed"}],deleteItemId:"",destinationItemId:"",localPropertyList:this.propertyList,newCardDestinationList:[],newPropertyItem:"",removeCardsModel:!1,singleItemId:""}},mixins:[Z.A],validations:{localPropertyList:{required:J.mw}},watch:{propertyList(){this.localPropertyList=this.propertyList}},computed:{...(0,Y.L8)({canDragCards:"getCanDragCards",rootUrl:"getRootUrl"})},methods:{addItem(){""!==this.newPropertyItem&&(this.isNewMode?this.newModeAddItem():this.editModeAddItem(),this.sendPropertyListUp(),document.getElementById(`addItemClose${this.propertyName}`).click())},deleteItem(){const e=new FormData;e.set("delete_item_id",this.deleteItemId),this.removeCardsModel||e.set("destination_item_id",this.destinationItemId);const t=`${this.rootUrl}kanban_${this.propertyName.toLowerCase()}/${this.kanbanBoardId}/delete/`;this.axios.post(t,e).then((e=>{this.localPropertyList=this.localPropertyList.filter((e=>e.id!==this.deleteItemId)),this.$emit("update_property_list",{source:this.source,data:this.localPropertyList}),document.getElementById(`deleteItemClose${this.propertyName}`).click()})).catch((e=>{this.$store.dispatch("newToast",{header:"Can not delete item",message:`Sorry, but we are having issues deleting item - Error -> ${e}`,extra_classes:"bg-danger",delay:0})}))},editItem(e){this.isReadOnly||(this.newPropertyItem=e.target.dataset.title,this.singleItemId=e.target.dataset.id,this.columnPropertyModel=e.target.dataset.property,this.openModal())},editModeAddItem:async function(){const e=`kanban_${this.propertyName.toLowerCase()}_name`,t=`kanban_${this.propertyName.toLowerCase()}_sort_number`,a=this.singleItemId,o=new FormData;if(o.set(e,this.newPropertyItem),o.set(t,this.getMaxId()+1),"Column"===this.propertyName&&o.set("kanban_column_property",this.columnPropertyModel),""===a)var r=`/kanban_${this.propertyName.toLowerCase()}/${this.kanbanBoardId}/new/`;else r=`/kanban_${this.propertyName.toLowerCase()}/${this.singleItemId}/edit/`;await this.axios.post(r,o).then((t=>{const o=t.data[0];""===a?this.localPropertyList.push({id:o.pk,property:o.fields.kanban_column_property,title:o.fields[e]}):this.localPropertyList.forEach((e=>{parseInt(e.id)===parseInt(this.singleItemId)&&(e.title=this.newPropertyItem,e.property=this.columnPropertyModel)})),this.singleItemId="",this.newPropertyItem=""})).catch((e=>{this.$store.dispatch("newToast",{header:"Can not add/edit",message:`Sorry, but we are having issues editing or adding - Error -> ${e}`,extra_classes:"bg-danger",delay:0})}))},getMaxId(){const e=this.localPropertyList.map((e=>e.id));return e.sort(((e,t)=>e-t))[e.length-1]},newModeAddItem(){""===this.singleItemId?this.localPropertyList.push({id:this.getMaxId()+1,property:this.columnPropertyModel,title:this.newPropertyItem}):this.localPropertyList.forEach((e=>{e.id===this.singleItemId&&(e.title=this.newPropertyItem,e.property=this.columnPropertyModel)})),this.singleItemId="",this.newPropertyItem=""},openModal(){new X.aF(document.getElementById(`addItem${this.propertyName}`)).show()},removeItem(e){this.isNewMode?(this.localPropertyList=this.localPropertyList.filter((t=>t.id!==e)),this.sendPropertyListUp()):(this.deleteItemId=e,this.newCardDestinationList=this.localPropertyList.filter((e=>e.id!==this.deleteItemId)).map((e=>({value:e.id,label:e.title}))),this.destinationItemId=this.newCardDestinationList[0].value,new X.aF(document.getElementById(`deleteItem${this.propertyName}`)).show())},sendPropertyListUp(){if(this.$emit("update_property_list",{source:this.source,data:this.localPropertyList}),!this.isNewMode){const e=`/kanban_${this.propertyName.toLowerCase()}/${this.kanbanBoardId}/resort/`,t=new FormData;this.localPropertyList.forEach(((e,a)=>{t.append("item",e.id)})),this.axios.post(e,t).catch((e=>{this.$store.dispatch("newToast",{header:"Can not apply resort",message:`Sorry, we've had an issue resorting. Please refresh the page. Error -> ${e}`,extra_classes:"bg-danger",delay:0})}))}}}},te=(0,a(6262).A)(ee,[["render",function(e,t,a,X,G,V){const W=(0,o.g2)("Icon"),q=(0,o.g2)("draggable"),K=(0,o.g2)("n-select"),j=(0,o.g2)("n-radio"),z=(0,o.g2)("n-space"),Y=(0,o.g2)("n-radio-group");return(0,o.uX)(),(0,o.CE)("div",null,[(0,o.Lk)("strong",null,(0,r.toDisplayString)(a.propertyName),1),!X.v$.localPropertyList.required&&a.isDirty?((0,o.uX)(),(0,o.CE)("span",l," Please create at least one "+(0,r.toDisplayString)(a.propertyName)+".",1)):(0,o.Q3)("v-if",!0),i,(0,o.Q3)(" The column of data where you can sort the properties "),(0,o.bF)(q,{modelValue:G.localPropertyList,"onUpdate:modelValue":t[1]||(t[1]=e=>G.localPropertyList=e),disabled:!e.canDragCards||a.isReadOnly,"item-key":"pk","ghost-class":"ghost",onChange:V.sendPropertyListUp},{item:(0,o.k6)((({element:a})=>[((0,o.uX)(),(0,o.CE)("div",{class:"sortable",key:a.id,id:a.id,"data-property":a.property,"data-id":a.id,"data-title":a.title,onDblclick:t[0]||(t[0]=e=>V.editItem(e))},[((0,o.uX)(),(0,o.CE)("strong",{key:a.id,id:a.id,"data-id":a.id,"data-property":a.property,"data-title":a.title},(0,r.toDisplayString)(a.title),9,n)),G.localPropertyList.length>1?((0,o.uX)(),(0,o.CE)("span",{key:0,onClick:e=>V.removeItem(a.id)},[(0,o.bF)(W,{icon:e.icons.xCircle},null,8,["icon"])],8,p)):(0,o.Q3)("v-if",!0)],40,d))])),_:1},8,["modelValue","disabled","onChange"]),(0,o.Q3)(" ADD BUTTON "),m,!1===a.isReadOnly?((0,o.uX)(),(0,o.CE)("button",{key:1,class:"btn btn-primary",onClick:t[2]||(t[2]=(...e)=>V.openModal&&V.openModal(...e))}," Add "+(0,r.toDisplayString)(a.propertyName)+" Item ",1)):(0,o.Q3)("v-if",!0),(0,o.Q3)(" MODAL FOR ADDING AN EXTRA ROW "),(0,o.Lk)("div",{class:"modal fade",id:`addItem${a.propertyName}`,tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},[(0,o.Lk)("div",y,[(0,o.Lk)("div",h,[(0,o.Lk)("div",u,[(0,o.Lk)("h5",I," Add/Edit "+(0,r.toDisplayString)(a.propertyName),1),(0,o.Lk)("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",id:`addItemClose${a.propertyName}`},null,8,b)]),(0,o.Lk)("div",g,[(0,o.Lk)("div",k,[(0,o.Lk)("label",null,(0,r.toDisplayString)(a.propertyName)+" Item Description",1),(0,o.bo)((0,o.Lk)("input",{"onUpdate:modelValue":t[3]||(t[3]=e=>G.newPropertyItem=e),type:"text",class:"form-control"},null,512),[[s.vModelText,G.newPropertyItem]])]),"column"===a.propertyName.toLowerCase()?((0,o.uX)(),(0,o.CE)("div",L,[(0,o.Lk)("label",null,(0,r.toDisplayString)(a.propertyName)+" Property",1),(0,o.bF)(K,{value:G.columnPropertyModel,"onUpdate:value":t[4]||(t[4]=e=>G.columnPropertyModel=e),options:G.columnPropertyOptions},null,8,["value","options"])])):(0,o.Q3)("v-if",!0)]),(0,o.Lk)("div",v,[w,(0,o.Lk)("button",{type:"button",class:"btn btn-primary",onClick:t[5]||(t[5]=(...e)=>V.addItem&&V.addItem(...e))}," Save changes ")])])])],8,c),(0,o.Q3)(" MODAL FOR DELETING ITEM "),(0,o.Lk)("div",{class:"modal fade",id:`deleteItem${a.propertyName}`,tabindex:"-1","aria-labelledby":"exampleModalLabel","aria-hidden":"true"},[(0,o.Lk)("div",A,[(0,o.Lk)("div",P,[(0,o.Lk)("div",N,[(0,o.Lk)("h5",f,"Delete "+(0,r.toDisplayString)(a.propertyName),1),(0,o.Lk)("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close",id:`deleteItemClose${a.propertyName}`},null,8,D)]),(0,o.Lk)("div",M,[(0,o.Q3)(" WARNING "),(0,o.Lk)("div",$,[E,(0,o.Lk)("p",null," This process can not be reversed. Deleting a "+(0,r.toDisplayString)(a.propertyName)+" will remove it. ",1),_]),(0,o.Q3)(" ASK USER ABOUT CARDS "),(0,o.Lk)("div",S,[(0,o.Lk)("p",null,"Would you like to remove the cards within the "+(0,r.toDisplayString)(a.propertyName)+"?",1),(0,o.bF)(Y,{value:G.removeCardsModel,"onUpdate:value":t[6]||(t[6]=e=>G.removeCardsModel=e),name:"radiogroup"},{default:(0,o.k6)((()=>[(0,o.bF)(z,null,{default:(0,o.k6)((()=>[(0,o.bF)(j,{value:!0,label:"Yes - please remove cards"}),(0,o.bF)(j,{value:!1,label:"No - please MOVE cards"})])),_:1})])),_:1},8,["value"])]),(0,o.Q3)(" CARD DESTINATIONS "),x,G.removeCardsModel?(0,o.Q3)("v-if",!0):((0,o.uX)(),(0,o.CE)("div",B,[O,R,(0,o.bF)(K,{options:G.newCardDestinationList,value:G.destinationItemId,"onUpdate:value":t[7]||(t[7]=e=>G.destinationItemId=e),style:{"z-index":"9999"},class:"new-card-destination"},null,8,["options","value"])])),T]),(0,o.Lk)("div",U,[F,!1===a.isReadOnly?((0,o.uX)(),(0,o.CE)("button",{key:0,type:"button",class:"btn btn-primary",onClick:t[8]||(t[8]=(...e)=>V.deleteItem&&V.deleteItem(...e)),disabled:null==this.destinationItemId}," Delete "+(0,r.toDisplayString)(a.propertyName),9,Q)):(0,o.Q3)("v-if",!0)])])])],8,C)])}]])},9827:(e,t,a)=>{a.d(t,{A:()=>r});var o=a(7413);const r={data:()=>({darkTheme:o.a}),methods:{getTheme:e=>"dark"===e?o.a:null}}},2243:(e,t,a)=>{a.d(t,{A:()=>D});var o=a(8998),r=a(102),s=a(9394),l=a(2438),i=a(9605),d=a(3438),n=a(5666),p=a(6375),m=a(1647),c=a(7066),y=a(4397),h=a(4603),u=a(7432),I=a(1758),b=a(8959),g=a(9587),k=a(9675),L=a(386),v=a(6120),w=a(8086),C=a(5617),A=a(6325),P=a(6500),N=a(5707),f=a(1511);const D={data:()=>({icons:{arrowUp:o.A,bugIcon:r.A,bxBriefcase:s.A,cardChecklist:l.A,clipboardIcon:i.A,documentPdf:d.A,documentText:n.A,folderIcon:p.A,groupPresentation:m.A,imageIcon:c.A,infoCircle:y.A,linkIcon:h.A,linkIcon2:u.A,linkOut:I.A,mailIcon:b.A,microsoftExcel:g.A,microsoftPowerpoint:k.A,microsoftWord:L.A,noteAdd:v.A,objectStorage:w.A,passwordIcon:C.A,trashCan:A.A,userIcon:P.A,usersIcon:N.A,xCircle:f.A}})}}}]); \ No newline at end of file diff --git a/NearBeach/static/NearBeach/2946.min.js.gz b/NearBeach/static/NearBeach/2946.min.js.gz new file mode 100644 index 000000000..3c841f0d6 Binary files /dev/null and b/NearBeach/static/NearBeach/2946.min.js.gz differ diff --git a/NearBeach/static/NearBeach/3444.min.js b/NearBeach/static/NearBeach/3444.min.js new file mode 100644 index 000000000..444f1f2ea --- /dev/null +++ b/NearBeach/static/NearBeach/3444.min.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunknearbeach=self.webpackChunknearbeach||[]).push([[3444],{8838:(e,t,o)=>{o.d(t,{A:()=>v});var n,r=o(641),a=["onActivate","onAddUndo","onBeforeAddUndo","onBeforeExecCommand","onBeforeGetContent","onBeforeRenderUI","onBeforeSetContent","onBeforePaste","onBlur","onChange","onClearUndos","onClick","onContextMenu","onCopy","onCut","onDblclick","onDeactivate","onDirty","onDrag","onDragDrop","onDragEnd","onDragGesture","onDragOver","onDrop","onExecCommand","onFocus","onFocusIn","onFocusOut","onGetContent","onHide","onInit","onKeyDown","onKeyPress","onKeyUp","onLoadContent","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onNodeChange","onObjectResizeStart","onObjectResized","onObjectSelected","onPaste","onPostProcess","onPostRender","onPreProcess","onProgressState","onRedo","onRemove","onReset","onSaveContent","onSelectionChange","onSetAttrib","onSetContent","onShow","onSubmit","onUndo","onVisualAid"],i=function(e){return-1!==a.map((function(e){return e.toLowerCase()})).indexOf(e.toLowerCase())},s=0,l=function(e){var t=Date.now();return e+"_"+Math.floor(1e9*Math.random())+ ++s+String(t)},u=function(e){return void 0===e||""===e?[]:Array.isArray(e)?e:e.split(" ")},d=function(){return{listeners:[],scriptId:l("tiny-script"),scriptLoaded:!1}},c=(n=d(),{load:function(e,t,o){n.scriptLoaded?o():(n.listeners.push(o),e.getElementById(n.scriptId)||function(e,t,o,r){var a=t.createElement("script");a.referrerPolicy="origin",a.type="application/javascript",a.id=e,a.src=o;var i=function(){a.removeEventListener("load",i),n.listeners.forEach((function(e){return e()})),n.scriptLoaded=!0};a.addEventListener("load",i),t.head&&t.head.appendChild(a)}(n.scriptId,e,t))},reinitialize:function(){n=d()}}),p=function(){var e="undefined"!=typeof window?window:o.g;return e&&e.tinymce?e.tinymce:null},g={apiKey:String,cloudChannel:String,id:String,init:Object,initialValue:String,inline:Boolean,modelEvents:[String,Array],plugins:[String,Array],tagName:String,toolbar:[String,Array],modelValue:String,disabled:Boolean,tinymceScriptSrc:String,outputFormat:{type:String,validator:function(e){return"html"===e||"text"===e}}},h=o(953),f=function(){return f=Object.assign||function(e){for(var t,o=1,n=arguments.length;o{o.d(t,{A:()=>y});var n=o(641);const r={class:"row"},a={class:"col-md-4"},i=(0,n.Lk)("h2",null,"Stakeholder Organisation",-1),s=(0,n.Lk)("p",{class:"text-instructions"}," Please search for your stakeholder's organisation in the dropdown box. Once found, please select. ",-1),l={class:"text-instructions"},u=["href"],d={class:"col-md-8"},c={class:"form-group"};var p=o(1080),g=o(2124),h=o(9639),f=o(3855),m=o(404);const v={name:"GetStakeholders",setup:()=>({v$:(0,h.Ay)()}),components:{NSelect:p.A,ValidationRendering:m.A},props:{isDirty:{type:Boolean,default:!1}},data:()=>({searchTimeout:"",stakeholderFixList:[],stakeholderModel:""}),validations:{stakeholderModel:{required:f.mw}},computed:{...(0,g.L8)({rootUrl:"getRootUrl"})},methods:{fetchOptions(e,t){""!==this.searchTimeout&&clearTimeout(this.searchTimeout),e.length>=3&&(this.searchTimeout=setTimeout((()=>{this.getOrganisationData(e,t)}),500))},getOrganisationData(e,t){const o=new FormData;o.set("search",e),this.axios.post(`${this.rootUrl}search/organisation/data/`,o).then((e=>{const t=e.data;this.stakeholderFixList=t.map((e=>({value:e.pk,label:e.fields.organisation_name})))})).catch((e=>{this.$store.dispatch("newToast",{header:"Error getting organisation data",message:`Error getting the organisation data. Error -> ${e}`,extra_classes:"bg-danger",delay:0})}))}},watch:{stakeholderModel(){this.$emit("update_stakeholder_model",this.stakeholderModel)}},mounted(){this.$nextTick((()=>{this.getOrganisationData("","")}))}},y=(0,o(6262).A)(v,[["render",function(e,t,o,p,g,h){const f=(0,n.g2)("validation-rendering"),m=(0,n.g2)("n-select");return(0,n.uX)(),(0,n.CE)("div",r,[(0,n.Lk)("div",a,[i,s,(0,n.Lk)("p",l,[(0,n.eW)(" If you can not find your organisation, please "),(0,n.Lk)("a",{href:`${e.rootUrl}new_organisation/`,target:"_blank",rel:"noopener noreferrer"}," click here to create it. ",8,u),(0,n.eW)(" Then search for it again ")])]),(0,n.Lk)("div",d,[(0,n.Lk)("div",c,[(0,n.Lk)("label",null,[(0,n.eW)("Stakeholder Organisation "),(0,n.bF)(f,{"error-list":p.v$.stakeholderModel.$errors},null,8,["error-list"])]),(0,n.bF)(m,{options:g.stakeholderFixList,filterable:"",placeholder:"Search Stakeholders",onSearch:h.fetchOptions,value:g.stakeholderModel,"onUpdate:value":t[0]||(t[0]=e=>g.stakeholderModel=e),label:"organisation_name",class:"get-stakeholders"},null,8,["options","onSearch","value"])])])])}]])},184:(e,t,o)=>{o.d(t,{A:()=>y});var n=o(641),r=o(33);const a={class:"row"},i={class:"col-md-4"},s=(0,n.Lk)("h2",null,"Group Permissions",-1),l={class:"text-instructions"},u=(0,n.Lk)("p",{class:"text-instructions"}," If you do not add one of your own group(s), you will only get readonly access. ",-1),d={class:"col-md-8"},c=(0,n.Lk)("br",null,null,-1),p={key:0,class:"alert alert-warning"};var g=o(1080),h=o(9639),f=o(3855),m=o(404);const v={name:"GroupPermissions",setup:()=>({v$:(0,h.Ay)()}),components:{NSelect:g.A,ValidationRendering:m.A},props:{destination:{type:String,default:""},displayGroupPermissionIssue:{type:Boolean,default:!1},groupResults:{type:Array,default:()=>[]},isDirty:{type:Boolean,default:!0},userGroupResults:{type:Array,default:()=>[]}},watch:{groupModel(){this.$emit("update_group_model",this.groupModel)}},data:()=>({groupFixResults:[],groupModel:[]}),validations:{groupModel:{required:f.mw}},mounted(){this.groupFixResults=this.groupResults.map((e=>({value:e.pk,label:e.fields.group_name}))),this.groupModel=this.userGroupResults.map((e=>e.group_id))}},y=(0,o(6262).A)(v,[["render",function(e,t,o,g,h,f){const m=(0,n.g2)("validation-rendering"),v=(0,n.g2)("n-select");return(0,n.uX)(),(0,n.CE)("div",a,[(0,n.Lk)("div",i,[s,(0,n.Lk)("p",l," Add or remove groups from this "+(0,r.toDisplayString)(o.destination)+". Adding a group will allow users from that group to access this "+(0,r.toDisplayString)(o.destination)+". ",1),u]),(0,n.Lk)("div",d,[(0,n.Lk)("label",null,[(0,n.eW)("Group List "),(0,n.bF)(m,{"error-list":g.v$.groupModel.$errors},null,8,["error-list"])]),(0,n.bF)(v,{options:h.groupFixResults,label:"group",value:h.groupModel,"onUpdate:value":t[0]||(t[0]=e=>h.groupModel=e),multiple:""},null,8,["options","value"]),(0,n.Q3)(" ALERT FOR WHEN USER GROUPS ARE NOT INCLUDED "),c,o.displayGroupPermissionIssue?((0,n.uX)(),(0,n.CE)("div",p," None of your user groups were included. You will not have permissions to create this object. Please select one of your groups ")):(0,n.Q3)("v-if",!0)])])}]])},404:(e,t,o)=>{o.d(t,{A:()=>i});var n=o(641),r=o(33);const a={name:"ValidationRendering",props:{errorList:{type:Array,default:()=>[]}}},i=(0,o(6262).A)(a,[["render",function(e,t,o,a,i,s){return(0,n.uX)(!0),(0,n.CE)(n.FK,null,(0,n.pI)(o.errorList,(e=>((0,n.uX)(),(0,n.CE)("span",{class:"error",key:e.$uid},(0,r.toDisplayString)(e.$message),1)))),128)}]])},9827:(e,t,o)=>{o.d(t,{A:()=>r});var n=o(7413);const r={data:()=>({darkTheme:n.a}),methods:{getTheme:e=>"dark"===e?n.a:null}}},3396:(e,t,o)=>{o.d(t,{A:()=>n});const n={methods:{newObjectUploadImage(e,t){const o=new FormData;o.set("document",e.blob(),e.filename()),o.set("document_description",e.filename()),o.set("uuid",this.uuid);const n={onUploadProgress:e=>{parseFloat(e.loaded),parseFloat(e.total)}};return this.axios.post(`${this.rootUrl}documentation/new_object_upload/`,o,n).then((e=>`/private/${e.data[0].document_key_id}`)).catch((e=>{this.$store.dispatch("newToast",{header:"Error uploading image",message:`Error uploading image. Error -> ${e}`,extra_classes:"bg-danger",delay:0})}))},replaceIncorrectImageUrl:e=>e.replace(new RegExp(''),(e=>e.replace("../","/")))}}}}]); \ No newline at end of file diff --git a/NearBeach/static/NearBeach/3444.min.js.gz b/NearBeach/static/NearBeach/3444.min.js.gz new file mode 100644 index 000000000..1de010931 Binary files /dev/null and b/NearBeach/static/NearBeach/3444.min.js.gz differ diff --git a/NearBeach/static/NearBeach/3480.min.js b/NearBeach/static/NearBeach/3480.min.js new file mode 100644 index 000000000..50bbfe3a8 --- /dev/null +++ b/NearBeach/static/NearBeach/3480.min.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunknearbeach=self.webpackChunknearbeach||[]).push([[3480],{266:(e,r,n)=>{n.d(r,{h:()=>l});var o=n(641);const t=Symbol("@css-render/vue3-ssr");function i(e,r){const n=(0,o.WQ)(t,null);if(null===n)return void console.error("[css-render/vue3-ssr]: no ssr context found.");const{styles:i,ids:s}=n;s.has(e)||null!==i&&(s.add(e),i.push(function(e,r){return``}(e,r)))}const s="undefined"!=typeof document;function l(){if(s)return;const e=(0,o.WQ)(t,null);return null!==e?{adapter:i,context:e}:void 0}},9996:(e,r,n)=>{n.d(r,{_:()=>x});const o=/\s*,(?![^(]*\))\s*/g,t=/\s+/g;var i=n(4390);const s=/[A-Z]/g;function l(e){return e.replace(s,(e=>"-"+e.toLowerCase()))}function c(e,r,n,o){if(!r)return"";const t=function(e,r,n){return"function"==typeof e?e({context:r.context,props:n}):e}(r,n,o);if(!t)return"";if("string"==typeof t)return`${e} {\n${t}\n}`;const i=Object.keys(t);if(0===i.length)return n.config.keepEmptyBlock?e+" {\n}":"";const s=e?[e+" {"]:[];return i.forEach((e=>{const r=t[e];"raw"!==e?(e=l(e),null!=r&&s.push(` ${e}${function(e,r=" "){return"object"==typeof e&&null!==e?" {\n"+Object.entries(e).map((e=>r+` ${l(e[0])}: ${e[1]};`)).join("\n")+"\n"+r+"}":`: ${e};`}(r)}`)):s.push("\n"+r+"\n")})),e&&s.push("}"),s.join("\n")}function u(e,r,n){e&&e.forEach((e=>{if(Array.isArray(e))u(e,r,n);else if("function"==typeof e){const o=e(r);Array.isArray(o)?u(o,r,n):o&&n(o)}else e&&n(e)}))}function a(e,r,n,s,l,f){const p=e.$;let d="";if(p&&"string"!=typeof p)if("function"==typeof p){const e=p({context:s.context,props:l});(0,i.u1)(e)?d=e:r.push(e)}else if(p.before&&p.before(s.context),p.$&&"string"!=typeof p.$){if(p.$){const e=p.$({context:s.context,props:l});(0,i.u1)(e)?d=e:r.push(e)}}else(0,i.u1)(p.$)?d=p.$:r.push(p.$);else(0,i.u1)(p)?d=p:r.push(p);const $=function(e){let r=[""];return e.forEach((e=>{(e=e&&e.trim())&&(r=e.includes("&")?function(e,r){const n=[];return r.split(o).forEach((r=>{let o=function(e){let r=0;for(let n=0;n{n.push((e&&e+" ")+r)}));if(1===o)return void e.forEach((e=>{n.push(r.replace("&",e))}));let t=[r];for(;o--;){const r=[];t.forEach((n=>{e.forEach((e=>{r.push(n.replace("&",e))}))})),t=r}t.forEach((e=>n.push(e)))})),n}(r,e):function(e,r){const n=[];return r.split(o).forEach((r=>{e.forEach((e=>{n.push((e&&e+" ")+r)}))})),n}(r,e))})),r.join(", ").replace(t," ")}(r),h=c($,e.props,s,l);d?(n.push(`${d} {`),f&&h&&f.insertRule(`${d} {\n${h}\n}\n`)):(f&&h&&f.insertRule(h),!f&&h.length&&n.push(h)),e.children&&u(e.children,{context:s.context,props:l},(e=>{if("string"==typeof e){const r=c($,{raw:e},s,l);f?f.insertRule(r):n.push(r)}else a(e,r,n,s,l,f)})),r.pop(),d&&n.push("}"),p&&p.after&&p.after(s.context)}function f(e,r,n,o=!1){const t=[];return a(e,[],t,r,n,o?e.instance.__styleSheet:void 0),o?"":t.join("\n\n")}var p=n(6795);function d(e,r){e.push(r)}function $(e){return f(this,this.instance,e)}function h(e={}){const{id:r,ssr:n,props:o,head:t=!1,silent:s=!1,force:l=!1,anchorMetaName:c}=e,u=function(e,r,n,o,t,s,l,c,u){if(s&&!u){if(void 0===n)return void console.error("[css-render/mount]: `id` is required in `silent` mode.");const t=window.__cssrContext;return void(t[n]||(t[n]=!0,f(r,e,o,s)))}let a;if(void 0===n&&(a=r.render(o),n=(0,p.A)(a)),u)return void u.adapter(n,null!=a?a:r.render(o));const $=(0,i.nB)(n);if(null!==$&&!l)return $;const h=null!=$?$:(0,i.n)(n);if(void 0===a&&(a=r.render(o)),h.textContent=a,null!==$)return $;if(c){const e=document.head.querySelector(`meta[name="${c}"]`);if(e)return document.head.insertBefore(h,e),d(r.els,h),h}return t?document.head.insertBefore(h,document.head.querySelector("style, link")):document.head.appendChild(h),d(r.els,h),h}(this.instance,this,r,o,t,s,l,c,n);return u}function b(e={}){const{id:r}=e;!function(e,r,n){const{els:o}=r;if(void 0===n)o.forEach(i.Nz),r.els=[];else{const e=(0,i.nB)(n);e&&o.includes(e)&&((0,i.Nz)(e),r.els=o.filter((r=>r!==e)))}}(this.instance,this,r)}"undefined"!=typeof window&&(window.__cssrContext={});const m=function(e,r,n,o){return{instance:e,$:r,props:n,children:o,els:[],render:$,mount:h,unmount:b}},g=function(e,r,n,o){return Array.isArray(r)?m(e,{$:null},null,r):Array.isArray(n)?m(e,r,null,n):Array.isArray(o)?m(e,r,n,o):m(e,r,n,null)};function x(e={}){let r=null;const n={c:(...e)=>g(n,...e),use:(e,...r)=>e.install(n,...r),find:i.nB,context:{},config:e,get __styleSheet(){if(!r){const e=document.createElement("style");return document.head.appendChild(e),r=document.styleSheets[document.styleSheets.length-1],r}return r}};return n}},4390:(e,r,n)=>{function o(e){if(!e)return;const r=e.parentElement;r&&r.removeChild(e)}function t(e){return document.querySelector(`style[cssr-id="${e}"]`)}function i(e){const r=document.createElement("style");return r.setAttribute("cssr-id",e),r}function s(e){return!!e&&/^\s*@(s|m)/.test(e)}n.d(r,{Nz:()=>o,n:()=>i,nB:()=>t,u1:()=>s})},4484:(e,r,n)=>{n.d(r,{QX:()=>F,sN:()=>E,V$:()=>v,jf:()=>y,B3:()=>S,iM:()=>M,U5:()=>U,Lj:()=>I,W3:()=>_,pf:()=>k,Ci:()=>N,H7:()=>O,_l:()=>R,hh:()=>B});const o={black:"#000",silver:"#C0C0C0",gray:"#808080",white:"#FFF",maroon:"#800000",red:"#F00",purple:"#800080",fuchsia:"#F0F",green:"#008000",lime:"#0F0",olive:"#808000",yellow:"#FF0",navy:"#000080",blue:"#00F",teal:"#008080",aqua:"#0FF",transparent:"#0000"},t="^\\s*",i="\\s*$",s="\\s*((\\.\\d+)|(\\d+(\\.\\d*)?))%\\s*",l="\\s*((\\.\\d+)|(\\d+(\\.\\d*)?))\\s*",c="([0-9A-Fa-f])",u="([0-9A-Fa-f]{2})",a=new RegExp(`${t}hsl\\s*\\(${l},${s},${s}\\)${i}`),f=new RegExp(`${t}hsv\\s*\\(${l},${s},${s}\\)${i}`),p=new RegExp(`${t}hsla\\s*\\(${l},${s},${s},${l}\\)${i}`),d=new RegExp(`${t}hsva\\s*\\(${l},${s},${s},${l}\\)${i}`),$=new RegExp(`${t}rgb\\s*\\(${l},${l},${l}\\)${i}`),h=new RegExp(`${t}rgba\\s*\\(${l},${l},${l},${l}\\)${i}`),b=new RegExp(`${t}#${c}${c}${c}${i}`),m=new RegExp(`${t}#${u}${u}${u}${i}`),g=new RegExp(`${t}#${c}${c}${c}${c}${i}`),x=new RegExp(`${t}#${u}${u}${u}${u}${i}`);function C(e){return parseInt(e,16)}function v(e){try{let r;if(r=p.exec(e))return[H(r[1]),P(r[5]),P(r[9]),j(r[13])];if(r=a.exec(e))return[H(r[1]),P(r[5]),P(r[9]),1];throw new Error(`[seemly/hsla]: Invalid color value ${e}.`)}catch(e){throw e}}function y(e){try{let r;if(r=d.exec(e))return[H(r[1]),P(r[5]),P(r[9]),j(r[13])];if(r=f.exec(e))return[H(r[1]),P(r[5]),P(r[9]),1];throw new Error(`[seemly/hsva]: Invalid color value ${e}.`)}catch(e){throw e}}function S(e){try{let r;if(r=m.exec(e))return[C(r[1]),C(r[2]),C(r[3]),1];if(r=$.exec(e))return[z(r[1]),z(r[5]),z(r[9]),1];if(r=h.exec(e))return[z(r[1]),z(r[5]),z(r[9]),j(r[13])];if(r=b.exec(e))return[C(r[1]+r[1]),C(r[2]+r[2]),C(r[3]+r[3]),1];if(r=x.exec(e))return[C(r[1]),C(r[2]),C(r[3]),j(C(r[4])/255)];if(r=g.exec(e))return[C(r[1]+r[1]),C(r[2]+r[2]),C(r[3]+r[3]),j(C(r[4]+r[4])/255)];if(e in o)return S(o[e]);throw new Error(`[seemly/rgba]: Invalid color value ${e}.`)}catch(e){throw e}}function w(e,r,n,o){return`rgba(${z(e)}, ${z(r)}, ${z(n)}, ${t=o,t>1?1:t<0?0:t})`;var t}function A(e,r,n,o,t){return z((e*r*(1-o)+n*o)/t)}function E(e,r){Array.isArray(e)||(e=S(e)),Array.isArray(r)||(r=S(r));const n=e[3],o=r[3],t=j(n+o-n*o);return w(A(e[0],n,r[0],o,t),A(e[1],n,r[1],o,t),A(e[2],n,r[2],o,t),t)}function F(e,r){const[n,o,t,i=1]=Array.isArray(e)?e:S(e);return r.alpha?w(n,o,t,r.alpha):w(n,o,t,i)}function M(e,r){const[n,o,t,i=1]=Array.isArray(e)?e:S(e),{lightness:s=1,alpha:l=1}=r;return B([n*s,o*s,t*s,i*l])}function j(e){const r=Math.round(100*Number(e))/100;return r>1?1:r<0?0:r}function H(e){const r=Math.round(Number(e));return r>=360||r<0?0:r}function z(e){const r=Math.round(Number(e));return r>255?255:r<0?0:r}function P(e){const r=Math.round(Number(e));return r>100?100:r<0?0:r}function R(e){const[r,n,o]=Array.isArray(e)?e:S(e);return function(e,r,n){return`rgb(${z(e)}, ${z(r)}, ${z(n)})`}(r,n,o)}function B(e){const[r,n,o]=e;return 3 in e?`rgba(${z(r)}, ${z(n)}, ${z(o)}, ${j(e[3])})`:`rgba(${z(r)}, ${z(n)}, ${z(o)}, 1)`}function N(e){return`hsv(${H(e[0])}, ${P(e[1])}%, ${P(e[2])}%)`}function O(e){const[r,n,o]=e;return 3 in e?`hsva(${H(r)}, ${P(n)}%, ${P(o)}%, ${j(e[3])})`:`hsva(${H(r)}, ${P(n)}%, ${P(o)}%, 1)`}function _(e){return`hsl(${H(e[0])}, ${P(e[1])}%, ${P(e[2])}%)`}function k(e){const[r,n,o]=e;return 3 in e?`hsla(${H(r)}, ${P(n)}%, ${P(o)}%, ${j(e[3])})`:`hsla(${H(r)}, ${P(n)}%, ${P(o)}%, 1)`}function I(e){if("string"==typeof e){let r;if(r=m.exec(e))return`${r[0]}FF`;if(r=x.exec(e))return r[0];if(r=b.exec(e))return`#${r[1]}${r[1]}${r[2]}${r[2]}${r[3]}${r[3]}FF`;if(r=g.exec(e))return`#${r[1]}${r[1]}${r[2]}${r[2]}${r[3]}${r[3]}${r[4]}${r[4]}`;throw new Error(`[seemly/toHexString]: Invalid hex value ${e}.`)}return`#${e.slice(0,3).map((e=>z(e).toString(16).toUpperCase().padStart(2,"0"))).join("")}`+(3===e.length?"FF":z(255*e[3]).toString(16).padStart(2,"0").toUpperCase())}function U(e){if("string"==typeof e){let r;if(r=m.exec(e))return r[0];if(r=x.exec(e))return r[0].slice(0,7);if(r=b.exec(e)||g.exec(e))return`#${r[1]}${r[1]}${r[2]}${r[2]}${r[3]}${r[3]}`;throw new Error(`[seemly/toHexString]: Invalid hex value ${e}.`)}return`#${e.slice(0,3).map((e=>z(e).toString(16).toUpperCase().padStart(2,"0"))).join("")}`}},6262:(e,r)=>{r.A=(e,r)=>{const n=e.__vccOpts||e;for(const[e,o]of r)n[e]=o;return n}},5219:(e,r,n)=>{n.d(r,{A:()=>i,b:()=>t});var o=n(8880);const t=e=>{const{scrollbarColor:r,scrollbarColorHover:n}=e;return{color:r,colorHover:n}},i={name:"Scrollbar",common:o.A,self:t}},7533:(e,r,n)=>{n.d(r,{r:()=>o});const o="naive-ui-style"},9359:(e,r,n)=>{n.d(r,{A:()=>f,a:()=>u});var o=n(641),t=n(7217),i=n(266),s=n(6677),l=n(9157),c=n(7533);function u(e){return e}function a(e,r,n,u,a,f){const p=(0,i.h)(),d=(0,o.WQ)(l.C,null);if(n){const e=()=>{const e=null==f?void 0:f.value;n.mount({id:void 0===e?r:e+r,head:!0,props:{bPrefix:e?`.${e}-`:void 0},anchorMetaName:c.r,ssr:p}),(null==d?void 0:d.preflightStyleDisabled)||s.A.mount({id:"n-global",head:!0,anchorMetaName:c.r,ssr:p})};p?e():(0,o.KC)(e)}return(0,o.EW)((()=>{var r;const{theme:{common:n,self:o,peers:i={}}={},themeOverrides:s={},builtinThemeOverrides:l={}}=a,{common:c,peers:f}=s,{common:p,[e]:{common:$,self:h,peers:b={}}={}}=(null==d?void 0:d.mergedThemeRef.value)||{},{common:m,[e]:g={}}=(null==d?void 0:d.mergedThemeOverridesRef.value)||{},{common:x,peers:C={}}=g,v=(0,t.A)({},n||$||p||u.common,m,x,c);return{common:v,self:(0,t.A)(null===(r=o||h||u.self)||void 0===r?void 0:r(v),l,g,s),peers:(0,t.A)({},u.peers,b,i),peerOverrides:(0,t.A)({},l.peers,C,f)}}))}a.props={theme:Object,themeOverrides:Object,builtinThemeOverrides:Object};const f=a},6480:(e,r,n)=>{n.d(r,{A:()=>o});const o={fontFamily:'v-sans, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',fontFamilyMono:"v-mono, SFMono-Regular, Menlo, Consolas, Courier, monospace",fontWeight:"400",fontWeightStrong:"500",cubicBezierEaseInOut:"cubic-bezier(.4, 0, .2, 1)",cubicBezierEaseOut:"cubic-bezier(0, 0, .2, 1)",cubicBezierEaseIn:"cubic-bezier(.4, 0, 1, 1)",borderRadius:"3px",borderRadiusSmall:"2px",fontSize:"14px",fontSizeMini:"12px",fontSizeTiny:"12px",fontSizeSmall:"14px",fontSizeMedium:"14px",fontSizeLarge:"15px",fontSizeHuge:"16px",lineHeight:"1.6",heightMini:"16px",heightTiny:"22px",heightSmall:"28px",heightMedium:"34px",heightLarge:"40px",heightHuge:"46px"}},8880:(e,r,n)=>{n.d(r,{A:()=>h});var o=n(4484),t=n(6480);const i="#FFF",s="#fff",l="0.24",c="0.18",u="0.6",a=(0,o.B3)(i),f=(0,o.B3)("#000"),p="rgba("+f.slice(0,3).join(", ")+", ";function d(e){return p+String(e)+")"}function $(e){const r=Array.from(f);return r[3]=Number(e),(0,o.sN)(a,r)}const h=Object.assign(Object.assign({name:"common"},t.A),{baseColor:i,primaryColor:"#18a058",primaryColorHover:"#36ad6a",primaryColorPressed:"#0c7a43",primaryColorSuppl:"#36ad6a",infoColor:"#2080f0",infoColorHover:"#4098fc",infoColorPressed:"#1060c9",infoColorSuppl:"#4098fc",successColor:"#18a058",successColorHover:"#36ad6a",successColorPressed:"#0c7a43",successColorSuppl:"#36ad6a",warningColor:"#f0a020",warningColorHover:"#fcb040",warningColorPressed:"#c97c10",warningColorSuppl:"#fcb040",errorColor:"#d03050",errorColorHover:"#de576d",errorColorPressed:"#ab1f3f",errorColorSuppl:"#de576d",textColorBase:"#000",textColor1:"rgb(31, 34, 37)",textColor2:"rgb(51, 54, 57)",textColor3:"rgb(118, 124, 130)",textColorDisabled:$(l),placeholderColor:$(l),placeholderColorDisabled:$(c),iconColor:$(l),iconColorHover:(0,o.iM)($(l),{lightness:.75}),iconColorPressed:(0,o.iM)($(l),{lightness:.9}),iconColorDisabled:$(c),opacity1:"0.82",opacity2:"0.72",opacity3:"0.38",opacity4:l,opacity5:c,dividerColor:"rgb(239, 239, 245)",borderColor:"rgb(224, 224, 230)",closeIconColor:$(Number(u)),closeIconColorHover:$(Number(u)),closeIconColorPressed:$(Number(u)),closeColorHover:"rgba(0, 0, 0, .09)",closeColorPressed:"rgba(0, 0, 0, .13)",clearColor:$(l),clearColorHover:(0,o.iM)($(l),{lightness:.75}),clearColorPressed:(0,o.iM)($(l),{lightness:.9}),scrollbarColor:d("0.25"),scrollbarColorHover:d("0.4"),scrollbarWidth:"5px",scrollbarHeight:"5px",scrollbarBorderRadius:"5px",progressRailColor:$(".08"),railColor:"rgb(219, 219, 223)",popoverColor:"#fff",tableColor:s,cardColor:s,modalColor:"#fff",bodyColor:"#fff",tagColor:"#eee",avatarColor:$("0.2"),invertedColor:"rgb(0, 20, 40)",inputColor:$("0"),codeColor:"rgb(244, 244, 248)",tabColor:"rgb(247, 247, 250)",actionColor:"rgb(250, 250, 252)",tableHeaderColor:"rgb(250, 250, 252)",hoverColor:"rgb(243, 243, 245)",tableColorHover:"rgba(0, 0, 100, 0.03)",tableColorStriped:"rgba(0, 0, 100, 0.02)",pressedColor:"rgb(237, 237, 239)",opacityDisabled:"0.5",inputColorDisabled:"rgb(250, 250, 252)",buttonColor2:"rgba(46, 51, 56, .05)",buttonColor2Hover:"rgba(46, 51, 56, .09)",buttonColor2Pressed:"rgba(46, 51, 56, .13)",boxShadow1:"0 1px 2px -2px rgba(0, 0, 0, .08), 0 3px 6px 0 rgba(0, 0, 0, .06), 0 5px 12px 4px rgba(0, 0, 0, .04)",boxShadow2:"0 3px 6px -4px rgba(0, 0, 0, .12), 0 6px 16px 0 rgba(0, 0, 0, .08), 0 9px 28px 8px rgba(0, 0, 0, .05)",boxShadow3:"0 6px 16px -9px rgba(0, 0, 0, .08), 0 9px 28px 0 rgba(0, 0, 0, .05), 0 12px 48px 16px rgba(0, 0, 0, .03)"})},6677:(e,r,n)=>{n.d(r,{A:()=>c});var o=n(7872),t=n(6480);const{fontSize:i,fontFamily:s,lineHeight:l}=t.A,c=(0,o.c)("body",`\n margin: 0;\n font-size: ${i};\n font-family: ${s};\n line-height: ${l};\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: transparent;\n`,[(0,o.c)("input","\n font-family: inherit;\n font-size: inherit;\n ")])},7872:(e,r,n)=>{n.d(r,{c:()=>i,cB:()=>l,bK:()=>f,cE:()=>c,cM:()=>u,C5:()=>a,cF:()=>p});const o=(0,n(9996)._)(),t=function(e){let r,n=".",o="__",t="--";if(e){let r=e.blockPrefix;r&&(n=r),r=e.elementPrefix,r&&(o=r),r=e.modifierPrefix,r&&(t=r)}const i={install(e){r=e.c;const n=e.context;n.bem={},n.bem.b=null,n.bem.els=null}};return Object.assign(i,{cB:(...e)=>r(function(e){let r,o;return{before(e){r=e.bem.b,o=e.bem.els,e.bem.els=null},after(e){e.bem.b=r,e.bem.els=o},$:({context:r,props:o})=>(e="string"==typeof e?e:e({context:r,props:o}),r.bem.b=e,`${(null==o?void 0:o.bPrefix)||n}${r.bem.b}`)}}(e[0]),e[1],e[2]),cE:(...e)=>r(function(e){let r;return{before(e){r=e.bem.els},after(e){e.bem.els=r},$:({context:r,props:t})=>(e="string"==typeof e?e:e({context:r,props:t}),r.bem.els=e.split(",").map((e=>e.trim())),r.bem.els.map((e=>`${(null==t?void 0:t.bPrefix)||n}${r.bem.b}${o}${e}`)).join(", "))}}(e[0]),e[1],e[2]),cM:(...e)=>{return r((i=e[0],{$({context:e,props:r}){const s=(i="string"==typeof i?i:i({context:e,props:r})).split(",").map((e=>e.trim()));function l(i){return s.map((s=>`&${(null==r?void 0:r.bPrefix)||n}${e.bem.b}${void 0!==i?`${o}${i}`:""}${t}${s}`)).join(", ")}const c=e.bem.els;return null!==c?l(c[0]):l()}}),e[1],e[2]);var i},cNotM:(...e)=>{return r((i=e[0],{$({context:e,props:r}){i="string"==typeof i?i:i({context:e,props:r});const s=e.bem.els;return`&:not(${(null==r?void 0:r.bPrefix)||n}${e.bem.b}${null!==s&&s.length>0?`${o}${s[0]}`:""}${t}${i})`}}),e[1],e[2]);var i}}),i}({blockPrefix:".n-",elementPrefix:"__",modifierPrefix:"--"});o.use(t);const{c:i,find:s}=o,{cB:l,cE:c,cM:u,cNotM:a}=t,f=(...e)=>i(">",[l(...e)]);function p(e,r){return e+("default"===r?"":r.replace(/^[a-z]/,(e=>e.toUpperCase())))}}}]); \ No newline at end of file diff --git a/NearBeach/static/NearBeach/3480.min.js.gz b/NearBeach/static/NearBeach/3480.min.js.gz new file mode 100644 index 000000000..d6e9e7a12 Binary files /dev/null and b/NearBeach/static/NearBeach/3480.min.js.gz differ diff --git a/NearBeach/static/NearBeach/3770.min.js b/NearBeach/static/NearBeach/3770.min.js new file mode 100644 index 000000000..662149426 --- /dev/null +++ b/NearBeach/static/NearBeach/3770.min.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunknearbeach=self.webpackChunknearbeach||[]).push([[3770],{3770:(e,n,o)=>{o.d(n,{A:()=>W});var r=o(641),t=o(953),a=o(5562),l=o(9440),i=o(4041),s=o(2074),c=o(5400),u=o(3865),d=o(9131);const h=(0,r.pM)({name:"EyeOff",render:()=>(0,r.h)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,r.h)("path",{d:"M432 448a15.92 15.92 0 0 1-11.31-4.69l-352-352a16 16 0 0 1 22.62-22.62l352 352A16 16 0 0 1 432 448z",fill:"currentColor"}),(0,r.h)("path",{d:"M255.66 384c-41.49 0-81.5-12.28-118.92-36.5c-34.07-22-64.74-53.51-88.7-91v-.08c19.94-28.57 41.78-52.73 65.24-72.21a2 2 0 0 0 .14-2.94L93.5 161.38a2 2 0 0 0-2.71-.12c-24.92 21-48.05 46.76-69.08 76.92a31.92 31.92 0 0 0-.64 35.54c26.41 41.33 60.4 76.14 98.28 100.65C162 402 207.9 416 255.66 416a239.13 239.13 0 0 0 75.8-12.58a2 2 0 0 0 .77-3.31l-21.58-21.58a4 4 0 0 0-3.83-1a204.8 204.8 0 0 1-51.16 6.47z",fill:"currentColor"}),(0,r.h)("path",{d:"M490.84 238.6c-26.46-40.92-60.79-75.68-99.27-100.53C349 110.55 302 96 255.66 96a227.34 227.34 0 0 0-74.89 12.83a2 2 0 0 0-.75 3.31l21.55 21.55a4 4 0 0 0 3.88 1a192.82 192.82 0 0 1 50.21-6.69c40.69 0 80.58 12.43 118.55 37c34.71 22.4 65.74 53.88 89.76 91a.13.13 0 0 1 0 .16a310.72 310.72 0 0 1-64.12 72.73a2 2 0 0 0-.15 2.95l19.9 19.89a2 2 0 0 0 2.7.13a343.49 343.49 0 0 0 68.64-78.48a32.2 32.2 0 0 0-.1-34.78z",fill:"currentColor"}),(0,r.h)("path",{d:"M256 160a95.88 95.88 0 0 0-21.37 2.4a2 2 0 0 0-1 3.38l112.59 112.56a2 2 0 0 0 3.38-1A96 96 0 0 0 256 160z",fill:"currentColor"}),(0,r.h)("path",{d:"M165.78 233.66a2 2 0 0 0-3.38 1a96 96 0 0 0 115 115a2 2 0 0 0 1-3.38z",fill:"currentColor"}))});var p=o(3051),v=o(9990),f=o(2897),g=o(1111),b=o(2494),x=o(9359),m=o(922),w=o(2011),y=o(8423),C=o(3370),A=o(4019),E=o(6680),z=o(7872),B=o(9521),R=o(3722);const T=(0,o(9794).D)("n-input");function F(e){let n=0;for(const o of e)n++;return n}function S(e){return""===e||null==e}const $=(0,r.pM)({name:"InputWordCount",setup(e,{slots:n}){const{mergedValueRef:o,maxlengthRef:t,mergedClsPrefixRef:a,countGraphemesRef:l}=(0,r.WQ)(T),i=(0,r.EW)((()=>{const{value:e}=o;return null===e||Array.isArray(e)?0:(l.value||F)(e)}));return()=>{const{value:e}=t,{value:l}=o;return(0,r.h)("span",{class:`${a.value}-input-word-count`},(0,B.p7)(n.default,{value:null===l||Array.isArray(l)?"":l},(()=>[void 0===e?i.value:`${i.value} / ${e}`])))}}}),M=(0,z.cB)("input","\n max-width: 100%;\n cursor: text;\n line-height: 1.5;\n z-index: auto;\n outline: none;\n box-sizing: border-box;\n position: relative;\n display: inline-flex;\n border-radius: var(--n-border-radius);\n background-color: var(--n-color);\n transition: background-color .3s var(--n-bezier);\n font-size: var(--n-font-size);\n --n-padding-vertical: calc((var(--n-height) - 1.5 * var(--n-font-size)) / 2);\n",[(0,z.cE)("input, textarea","\n overflow: hidden;\n flex-grow: 1;\n position: relative;\n "),(0,z.cE)("input-el, textarea-el, input-mirror, textarea-mirror, separator, placeholder","\n box-sizing: border-box;\n font-size: inherit;\n line-height: 1.5;\n font-family: inherit;\n border: none;\n outline: none;\n background-color: #0000;\n text-align: inherit;\n transition:\n -webkit-text-fill-color .3s var(--n-bezier),\n caret-color .3s var(--n-bezier),\n color .3s var(--n-bezier),\n text-decoration-color .3s var(--n-bezier);\n "),(0,z.cE)("input-el, textarea-el","\n -webkit-appearance: none;\n scrollbar-width: none;\n width: 100%;\n min-width: 0;\n text-decoration-color: var(--n-text-decoration-color);\n color: var(--n-text-color);\n caret-color: var(--n-caret-color);\n background-color: transparent;\n ",[(0,z.c)("&::-webkit-scrollbar, &::-webkit-scrollbar-track-piece, &::-webkit-scrollbar-thumb","\n width: 0;\n height: 0;\n display: none;\n "),(0,z.c)("&::placeholder","\n color: #0000;\n -webkit-text-fill-color: transparent !important;\n "),(0,z.c)("&:-webkit-autofill ~",[(0,z.cE)("placeholder","display: none;")])]),(0,z.cM)("round",[(0,z.C5)("textarea","border-radius: calc(var(--n-height) / 2);")]),(0,z.cE)("placeholder","\n pointer-events: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n overflow: hidden;\n color: var(--n-placeholder-color);\n ",[(0,z.c)("span","\n width: 100%;\n display: inline-block;\n ")]),(0,z.cM)("textarea",[(0,z.cE)("placeholder","overflow: visible;")]),(0,z.C5)("autosize","width: 100%;"),(0,z.cM)("autosize",[(0,z.cE)("textarea-el, input-el","\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n ")]),(0,z.cB)("input-wrapper","\n overflow: hidden;\n display: inline-flex;\n flex-grow: 1;\n position: relative;\n padding-left: var(--n-padding-left);\n padding-right: var(--n-padding-right);\n "),(0,z.cE)("input-mirror","\n padding: 0;\n height: var(--n-height);\n line-height: var(--n-height);\n overflow: hidden;\n visibility: hidden;\n position: static;\n white-space: pre;\n pointer-events: none;\n "),(0,z.cE)("input-el","\n padding: 0;\n height: var(--n-height);\n line-height: var(--n-height);\n ",[(0,z.c)("&[type=password]::-ms-reveal","display: none;"),(0,z.c)("+",[(0,z.cE)("placeholder","\n display: flex;\n align-items: center; \n ")])]),(0,z.C5)("textarea",[(0,z.cE)("placeholder","white-space: nowrap;")]),(0,z.cE)("eye","\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color .3s var(--n-bezier);\n "),(0,z.cM)("textarea","width: 100%;",[(0,z.cB)("input-word-count","\n position: absolute;\n right: var(--n-padding-right);\n bottom: var(--n-padding-vertical);\n "),(0,z.cM)("resizable",[(0,z.cB)("input-wrapper","\n resize: vertical;\n min-height: var(--n-height);\n ")]),(0,z.cE)("textarea-el, textarea-mirror, placeholder","\n height: 100%;\n padding-left: 0;\n padding-right: 0;\n padding-top: var(--n-padding-vertical);\n padding-bottom: var(--n-padding-vertical);\n word-break: break-word;\n display: inline-block;\n vertical-align: bottom;\n box-sizing: border-box;\n line-height: var(--n-line-height-textarea);\n margin: 0;\n resize: none;\n white-space: pre-wrap;\n scroll-padding-block-end: var(--n-padding-vertical);\n "),(0,z.cE)("textarea-mirror","\n width: 100%;\n pointer-events: none;\n overflow: hidden;\n visibility: hidden;\n position: static;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n ")]),(0,z.cM)("pair",[(0,z.cE)("input-el, placeholder","text-align: center;"),(0,z.cE)("separator","\n display: flex;\n align-items: center;\n transition: color .3s var(--n-bezier);\n color: var(--n-text-color);\n white-space: nowrap;\n ",[(0,z.cB)("icon","\n color: var(--n-icon-color);\n "),(0,z.cB)("base-icon","\n color: var(--n-icon-color);\n ")])]),(0,z.cM)("disabled","\n cursor: not-allowed;\n background-color: var(--n-color-disabled);\n ",[(0,z.cE)("border","border: var(--n-border-disabled);"),(0,z.cE)("input-el, textarea-el","\n cursor: not-allowed;\n color: var(--n-text-color-disabled);\n text-decoration-color: var(--n-text-color-disabled);\n "),(0,z.cE)("placeholder","color: var(--n-placeholder-color-disabled);"),(0,z.cE)("separator","color: var(--n-text-color-disabled);",[(0,z.cB)("icon","\n color: var(--n-icon-color-disabled);\n "),(0,z.cB)("base-icon","\n color: var(--n-icon-color-disabled);\n ")]),(0,z.cB)("input-word-count","\n color: var(--n-count-text-color-disabled);\n "),(0,z.cE)("suffix, prefix","color: var(--n-text-color-disabled);",[(0,z.cB)("icon","\n color: var(--n-icon-color-disabled);\n "),(0,z.cB)("internal-icon","\n color: var(--n-icon-color-disabled);\n ")])]),(0,z.C5)("disabled",[(0,z.cE)("eye","\n color: var(--n-icon-color);\n cursor: pointer;\n ",[(0,z.c)("&:hover","\n color: var(--n-icon-color-hover);\n "),(0,z.c)("&:active","\n color: var(--n-icon-color-pressed);\n ")]),(0,z.c)("&:hover",[(0,z.cE)("state-border","border: var(--n-border-hover);")]),(0,z.cM)("focus","background-color: var(--n-color-focus);",[(0,z.cE)("state-border","\n border: var(--n-border-focus);\n box-shadow: var(--n-box-shadow-focus);\n ")])]),(0,z.cE)("border, state-border","\n box-sizing: border-box;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n border-radius: inherit;\n border: var(--n-border);\n transition:\n box-shadow .3s var(--n-bezier),\n border-color .3s var(--n-bezier);\n "),(0,z.cE)("state-border","\n border-color: #0000;\n z-index: 1;\n "),(0,z.cE)("prefix","margin-right: 4px;"),(0,z.cE)("suffix","\n margin-left: 4px;\n "),(0,z.cE)("suffix, prefix","\n transition: color .3s var(--n-bezier);\n flex-wrap: nowrap;\n flex-shrink: 0;\n line-height: var(--n-height);\n white-space: nowrap;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--n-suffix-text-color);\n ",[(0,z.cB)("base-loading","\n font-size: var(--n-icon-size);\n margin: 0 2px;\n color: var(--n-loading-color);\n "),(0,z.cB)("base-clear","\n font-size: var(--n-icon-size);\n ",[(0,z.cE)("placeholder",[(0,z.cB)("base-icon","\n transition: color .3s var(--n-bezier);\n color: var(--n-icon-color);\n font-size: var(--n-icon-size);\n ")])]),(0,z.c)(">",[(0,z.cB)("icon","\n transition: color .3s var(--n-bezier);\n color: var(--n-icon-color);\n font-size: var(--n-icon-size);\n ")]),(0,z.cB)("base-icon","\n font-size: var(--n-icon-size);\n ")]),(0,z.cB)("input-word-count","\n pointer-events: none;\n line-height: 1.5;\n font-size: .85em;\n color: var(--n-count-text-color);\n transition: color .3s var(--n-bezier);\n margin-left: 4px;\n font-variant: tabular-nums;\n "),["warning","error"].map((e=>(0,z.cM)(`${e}-status`,[(0,z.C5)("disabled",[(0,z.cB)("base-loading",`\n color: var(--n-loading-color-${e})\n `),(0,z.cE)("input-el, textarea-el",`\n caret-color: var(--n-caret-color-${e});\n `),(0,z.cE)("state-border",`\n border: var(--n-border-${e});\n `),(0,z.c)("&:hover",[(0,z.cE)("state-border",`\n border: var(--n-border-hover-${e});\n `)]),(0,z.c)("&:focus",`\n background-color: var(--n-color-focus-${e});\n `,[(0,z.cE)("state-border",`\n box-shadow: var(--n-box-shadow-focus-${e});\n border: var(--n-border-focus-${e});\n `)]),(0,z.cM)("focus",`\n background-color: var(--n-color-focus-${e});\n `,[(0,z.cE)("state-border",`\n box-shadow: var(--n-box-shadow-focus-${e});\n border: var(--n-border-focus-${e});\n `)])])])))]),k=(0,z.cB)("input",[(0,z.cM)("disabled",[(0,z.cE)("input-el, textarea-el","\n -webkit-text-fill-color: var(--n-text-color-disabled);\n ")])]),P=Object.assign(Object.assign({},x.A.props),{bordered:{type:Boolean,default:void 0},type:{type:String,default:"text"},placeholder:[Array,String],defaultValue:{type:[String,Array],default:null},value:[String,Array],disabled:{type:Boolean,default:void 0},size:String,rows:{type:[Number,String],default:3},round:Boolean,minlength:[String,Number],maxlength:[String,Number],clearable:Boolean,autosize:{type:[Boolean,Object],default:!1},pair:Boolean,separator:String,readonly:{type:[String,Boolean],default:!1},passivelyActivated:Boolean,showPasswordOn:String,stateful:{type:Boolean,default:!0},autofocus:Boolean,inputProps:Object,resizable:{type:Boolean,default:!0},showCount:Boolean,loading:{type:Boolean,default:void 0},allowInput:Function,renderCount:Function,onMousedown:Function,onKeydown:Function,onKeyup:[Function,Array],onInput:[Function,Array],onFocus:[Function,Array],onBlur:[Function,Array],onClick:[Function,Array],onChange:[Function,Array],onClear:[Function,Array],countGraphemes:Function,status:String,"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],textDecoration:[String,Array],attrSize:{type:Number,default:20},onInputBlur:[Function,Array],onInputFocus:[Function,Array],onDeactivate:[Function,Array],onActivate:[Function,Array],onWrapperFocus:[Function,Array],onWrapperBlur:[Function,Array],internalDeactivateOnEnter:Boolean,internalForceFocus:Boolean,internalLoadingBeforeSuffix:{type:Boolean,default:!0},showPasswordToggle:Boolean}),W=(0,r.pM)({name:"Input",props:P,setup(e){const{mergedClsPrefixRef:n,mergedBorderedRef:o,inlineThemeDisabled:s,mergedRtlRef:d}=(0,m.Ay)(e),h=(0,x.A)("Input","-input",M,R.A,e,n);u.nr&&(0,w.A)("-input-safari",k,n);const v=(0,t.KR)(null),f=(0,t.KR)(null),g=(0,t.KR)(null),b=(0,t.KR)(null),B=(0,t.KR)(null),F=(0,t.KR)(null),$=(0,t.KR)(null),P=function(e){const n=(0,t.KR)(null);function o(){n.value=null}return(0,r.wB)(e,o),{recordCursor:function(){const{value:r}=e;if(!(null==r?void 0:r.focus))return void o();const{selectionStart:t,selectionEnd:a,value:l}=r;null!=t&&null!=a?n.value={start:t,end:a,beforeText:l.slice(0,t),afterText:l.slice(a)}:o()},restoreCursor:function(){var o;const{value:r}=n,{value:t}=e;if(!r||!t)return;const{value:a}=t,{start:l,beforeText:i,afterText:s}=r;let c=a.length;if(a.endsWith(s))c=a.length-s.length;else if(a.startsWith(i))c=i.length;else{const e=i[l-1],n=a.indexOf(e,l-1);-1!==n&&(c=n+1)}null===(o=t.setSelectionRange)||void 0===o||o.call(t,c,c)}}}($),W=(0,t.KR)(null),{localeRef:I}=(0,y.A)("Input"),_=(0,t.KR)(e.defaultValue),D=(0,t.lW)(e,"value"),K=(0,a.A)(D,_),V=(0,C.A)(e),{mergedSizeRef:O,mergedDisabledRef:N,mergedStatusRef:j}=V,H=(0,t.KR)(!1),U=(0,t.KR)(!1),L=(0,t.KR)(!1),G=(0,t.KR)(!1);let Q=null;const Y=(0,r.EW)((()=>{const{placeholder:n,pair:o}=e;return o?Array.isArray(n)?n:void 0===n?["",""]:[n,n]:void 0===n?[I.value.placeholder]:[n]})),X=(0,r.EW)((()=>{const{value:e}=L,{value:n}=K,{value:o}=Y;return!e&&(S(n)||Array.isArray(n)&&S(n[0]))&&o[0]})),q=(0,r.EW)((()=>{const{value:e}=L,{value:n}=K,{value:o}=Y;return!e&&o[1]&&(S(n)||Array.isArray(n)&&S(n[1]))})),J=(0,l.A)((()=>e.internalForceFocus||H.value)),Z=(0,l.A)((()=>{if(N.value||e.readonly||!e.clearable||!J.value&&!U.value)return!1;const{value:n}=K,{value:o}=J;return e.pair?!(!Array.isArray(n)||!n[0]&&!n[1])&&(U.value||o):!!n&&(U.value||o)})),ee=(0,r.EW)((()=>{const{showPasswordOn:n}=e;return n||(e.showPasswordToggle?"click":void 0)})),ne=(0,t.KR)(!1),oe=(0,r.EW)((()=>{const{textDecoration:n}=e;return n?Array.isArray(n)?n.map((e=>({textDecoration:e}))):[{textDecoration:n}]:["",""]})),re=(0,t.KR)(void 0),te=(0,r.EW)((()=>{const{maxlength:n}=e;return void 0===n?void 0:Number(n)}));(0,r.sV)((()=>{const{value:e}=K;Array.isArray(e)||pe(e)}));const ae=(0,r.nI)().proxy;function le(n,o){const{onUpdateValue:r,"onUpdate:value":t,onInput:a}=e,{nTriggerFormInput:l}=V;r&&(0,E.T)(r,n,o),t&&(0,E.T)(t,n,o),a&&(0,E.T)(a,n,o),_.value=n,l()}function ie(n,o){const{onChange:r}=e,{nTriggerFormChange:t}=V;r&&(0,E.T)(r,n,o),_.value=n,t()}function se(n,o=0,t="input"){const a=n.target.value;if(pe(a),n instanceof InputEvent&&!n.isComposing&&(L.value=!1),"textarea"===e.type){const{value:e}=W;e&&e.syncUnifiedContainer()}if(Q=a,L.value)return;P.recordCursor();const l=function(n){const{countGraphemes:o,maxlength:r,minlength:t}=e;if(o){let e;if(void 0!==r&&(void 0===e&&(e=o(n)),e>Number(r)))return!1;if(void 0!==t&&(void 0===e&&(e=o(n)),e{var e;null===(e=v.value)||void 0===e||e.focus()})))}function he(){var n,o,r;N.value||(e.passivelyActivated?null===(n=v.value)||void 0===n||n.focus():(null===(o=f.value)||void 0===o||o.focus(),null===(r=B.value)||void 0===r||r.focus()))}function pe(n){const{type:o,pair:r,autosize:t}=e;if(!r&&t)if("textarea"===o){const{value:e}=g;e&&(e.textContent=(null!=n?n:"")+"\r\n")}else{const{value:e}=b;e&&(n?e.textContent=n:e.innerHTML=" ")}}const ve=(0,t.KR)({top:"0"});let fe=null;(0,r.nT)((()=>{const{autosize:n,type:o}=e;n&&"textarea"===o?fe=(0,r.wB)(K,(e=>{Array.isArray(e)||e===Q||pe(e)})):null==fe||fe()}));let ge=null;(0,r.nT)((()=>{"textarea"===e.type?ge=(0,r.wB)(K,(e=>{var n;Array.isArray(e)||e===Q||null===(n=W.value)||void 0===n||n.syncUnifiedContainer()})):null==ge||ge()})),(0,r.Gt)(T,{mergedValueRef:K,maxlengthRef:te,mergedClsPrefixRef:n,countGraphemesRef:(0,t.lW)(e,"countGraphemes")});const be={wrapperElRef:v,inputElRef:B,textareaElRef:f,isCompositing:L,clear:ue,focus:he,blur:function(){var e;(null===(e=v.value)||void 0===e?void 0:e.contains(document.activeElement))&&document.activeElement.blur()},select:function(){var e,n;null===(e=f.value)||void 0===e||e.select(),null===(n=B.value)||void 0===n||n.select()},deactivate:function(){const{value:e}=v;(null==e?void 0:e.contains(document.activeElement))&&e!==document.activeElement&&de()},activate:function(){N.value||(f.value?f.value.focus():B.value&&B.value.focus())},scrollTo:function(n){if("textarea"===e.type){const{value:e}=f;null==e||e.scrollTo(n)}else{const{value:e}=B;null==e||e.scrollTo(n)}}},xe=(0,p.I)("Input",d,n),me=(0,r.EW)((()=>{const{value:e}=O,{common:{cubicBezierEaseInOut:n},self:{color:o,borderRadius:r,textColor:t,caretColor:a,caretColorError:l,caretColorWarning:s,textDecorationColor:c,border:u,borderDisabled:d,borderHover:p,borderFocus:v,placeholderColor:f,placeholderColorDisabled:g,lineHeightTextarea:b,colorDisabled:x,colorFocus:m,textColorDisabled:w,boxShadowFocus:y,iconSize:C,colorFocusWarning:A,boxShadowFocusWarning:E,borderWarning:B,borderFocusWarning:R,borderHoverWarning:T,colorFocusError:F,boxShadowFocusError:S,borderError:$,borderFocusError:M,borderHoverError:k,clearSize:P,clearColor:W,clearColorHover:I,clearColorPressed:_,iconColor:D,iconColorDisabled:K,suffixTextColor:V,countTextColor:N,countTextColorDisabled:j,iconColorHover:H,iconColorPressed:U,loadingColor:L,loadingColorError:G,loadingColorWarning:Q,[(0,z.cF)("padding",e)]:Y,[(0,z.cF)("fontSize",e)]:X,[(0,z.cF)("height",e)]:q}}=h.value,{left:J,right:Z}=(0,i.Cq)(Y);return{"--n-bezier":n,"--n-count-text-color":N,"--n-count-text-color-disabled":j,"--n-color":o,"--n-font-size":X,"--n-border-radius":r,"--n-height":q,"--n-padding-left":J,"--n-padding-right":Z,"--n-text-color":t,"--n-caret-color":a,"--n-text-decoration-color":c,"--n-border":u,"--n-border-disabled":d,"--n-border-hover":p,"--n-border-focus":v,"--n-placeholder-color":f,"--n-placeholder-color-disabled":g,"--n-icon-size":C,"--n-line-height-textarea":b,"--n-color-disabled":x,"--n-color-focus":m,"--n-text-color-disabled":w,"--n-box-shadow-focus":y,"--n-loading-color":L,"--n-caret-color-warning":s,"--n-color-focus-warning":A,"--n-box-shadow-focus-warning":E,"--n-border-warning":B,"--n-border-focus-warning":R,"--n-border-hover-warning":T,"--n-loading-color-warning":Q,"--n-caret-color-error":l,"--n-color-focus-error":F,"--n-box-shadow-focus-error":S,"--n-border-error":$,"--n-border-focus-error":M,"--n-border-hover-error":k,"--n-loading-color-error":G,"--n-clear-color":W,"--n-clear-size":P,"--n-clear-color-hover":I,"--n-clear-color-pressed":_,"--n-icon-color":D,"--n-icon-color-hover":H,"--n-icon-color-pressed":U,"--n-icon-color-disabled":K,"--n-suffix-text-color":V}})),we=s?(0,A.R)("input",(0,r.EW)((()=>{const{value:e}=O;return e[0]})),me,e):void 0;return Object.assign(Object.assign({},be),{wrapperElRef:v,inputElRef:B,inputMirrorElRef:b,inputEl2Ref:F,textareaElRef:f,textareaMirrorElRef:g,textareaScrollbarInstRef:W,rtlEnabled:xe,uncontrolledValue:_,mergedValue:K,passwordVisible:ne,mergedPlaceholder:Y,showPlaceholder1:X,showPlaceholder2:q,mergedFocus:J,isComposing:L,activated:G,showClearButton:Z,mergedSize:O,mergedDisabled:N,textDecorationStyle:oe,mergedClsPrefix:n,mergedBordered:o,mergedShowPasswordOn:ee,placeholderStyle:ve,mergedStatus:j,textAreaScrollContainerWidth:re,handleTextAreaScroll:function(e){var n;const{scrollTop:o}=e.target;ve.value.top=-o+"px",null===(n=W.value)||void 0===n||n.syncUnifiedContainer()},handleCompositionStart:function(){L.value=!0},handleCompositionEnd:function(e){L.value=!1,e.target===F.value?se(e,1):se(e,0)},handleInput:se,handleInputBlur:function(n){!function(n){const{onInputBlur:o}=e;o&&(0,E.T)(o,n)}(n),n.relatedTarget===v.value&&function(){const{onDeactivate:n}=e;n&&(0,E.T)(n)}(),(null===n.relatedTarget||n.relatedTarget!==B.value&&n.relatedTarget!==F.value&&n.relatedTarget!==f.value)&&(G.value=!1),ce(n,"blur"),$.value=null},handleInputFocus:function(n,o){!function(n){const{onInputFocus:o}=e;o&&(0,E.T)(o,n)}(n),H.value=!0,G.value=!0,function(){const{onActivate:n}=e;n&&(0,E.T)(n)}(),ce(n,"focus"),0===o?$.value=B.value:1===o?$.value=F.value:2===o&&($.value=f.value)},handleWrapperBlur:function(n){e.passivelyActivated&&(function(n){const{onWrapperBlur:o}=e;o&&(0,E.T)(o,n)}(n),ce(n,"blur"))},handleWrapperFocus:function(n){e.passivelyActivated&&(H.value=!0,function(n){const{onWrapperFocus:o}=e;o&&(0,E.T)(o,n)}(n),ce(n,"focus"))},handleMouseEnter:function(){var n;U.value=!0,"textarea"===e.type&&(null===(n=W.value)||void 0===n||n.handleMouseEnterWrapper())},handleMouseLeave:function(){var n;U.value=!1,"textarea"===e.type&&(null===(n=W.value)||void 0===n||n.handleMouseLeaveWrapper())},handleMouseDown:function(n){const{onMousedown:o}=e;o&&o(n);const{tagName:r}=n.target;if("INPUT"!==r&&"TEXTAREA"!==r){if(e.resizable){const{value:e}=v;if(e){const{left:o,top:r,width:t,height:a}=e.getBoundingClientRect(),l=14;if(o+t-l{e.preventDefault(),(0,c.A)("mouseup",document,n)};if((0,c.on)("mouseup",document,n),"mousedown"!==ee.value)return;ne.value=!0;const o=()=>{ne.value=!1,(0,c.A)("mouseup",document,o)};(0,c.on)("mouseup",document,o)},handleWrapperKeydown:function(n){switch(e.onKeydown&&(0,E.T)(e.onKeydown,n),n.key){case"Escape":de();break;case"Enter":!function(n){var o,r;if(e.passivelyActivated){const{value:t}=G;if(t)return void(e.internalDeactivateOnEnter&&de());n.preventDefault(),"textarea"===e.type?null===(o=f.value)||void 0===o||o.focus():null===(r=B.value)||void 0===r||r.focus()}}(n)}},handleWrapperKeyup:function(n){e.onKeyup&&(0,E.T)(e.onKeyup,n)},handleTextAreaMirrorResize:function(){(()=>{var n,o;if("textarea"===e.type){const{autosize:r}=e;if(r&&(re.value=null===(o=null===(n=W.value)||void 0===n?void 0:n.$el)||void 0===o?void 0:o.offsetWidth),!f.value)return;if("boolean"==typeof r)return;const{paddingTop:t,paddingBottom:a,lineHeight:l}=window.getComputedStyle(f.value),i=Number(t.slice(0,-2)),s=Number(a.slice(0,-2)),c=Number(l.slice(0,-2)),{value:u}=g;if(!u)return;if(r.minRows){const e=`${i+s+c*Math.max(r.minRows,1)}px`;u.style.minHeight=e}if(r.maxRows){const e=`${i+s+c*r.maxRows}px`;u.style.maxHeight=e}}})()},getTextareaScrollContainer:()=>f.value,mergedTheme:h,cssVars:s?void 0:me,themeClass:null==we?void 0:we.themeClass,onRender:null==we?void 0:we.onRender})},render(){var e,n;const{mergedClsPrefix:o,mergedStatus:t,themeClass:a,type:l,countGraphemes:i,onRender:c}=this,u=this.$slots;return null==c||c(),(0,r.h)("div",{ref:"wrapperElRef",class:[`${o}-input`,a,t&&`${o}-input--${t}-status`,{[`${o}-input--rtl`]:this.rtlEnabled,[`${o}-input--disabled`]:this.mergedDisabled,[`${o}-input--textarea`]:"textarea"===l,[`${o}-input--resizable`]:this.resizable&&!this.autosize,[`${o}-input--autosize`]:this.autosize,[`${o}-input--round`]:this.round&&!("textarea"===l),[`${o}-input--pair`]:this.pair,[`${o}-input--focus`]:this.mergedFocus,[`${o}-input--stateful`]:this.stateful}],style:this.cssVars,tabindex:this.mergedDisabled||!this.passivelyActivated||this.activated?void 0:0,onFocus:this.handleWrapperFocus,onBlur:this.handleWrapperBlur,onClick:this.handleClick,onMousedown:this.handleMouseDown,onMouseenter:this.handleMouseEnter,onMouseleave:this.handleMouseLeave,onCompositionstart:this.handleCompositionStart,onCompositionend:this.handleCompositionEnd,onKeyup:this.handleWrapperKeyup,onKeydown:this.handleWrapperKeydown},(0,r.h)("div",{class:`${o}-input-wrapper`},(0,B.iQ)(u.prefix,(e=>e&&(0,r.h)("div",{class:`${o}-input__prefix`},e))),"textarea"===l?(0,r.h)(v.A,{ref:"textareaScrollbarInstRef",class:`${o}-input__textarea`,container:this.getTextareaScrollContainer,triggerDisplayManually:!0,useUnifiedContainer:!0,internalHoistYRail:!0},{default:()=>{var e,n;const{textAreaScrollContainerWidth:t}=this,a={width:this.autosize&&t&&`${t}px`};return(0,r.h)(r.FK,null,(0,r.h)("textarea",Object.assign({},this.inputProps,{ref:"textareaElRef",class:[`${o}-input__textarea-el`,null===(e=this.inputProps)||void 0===e?void 0:e.class],autofocus:this.autofocus,rows:Number(this.rows),placeholder:this.placeholder,value:this.mergedValue,disabled:this.mergedDisabled,maxlength:i?void 0:this.maxlength,minlength:i?void 0:this.minlength,readonly:this.readonly,tabindex:this.passivelyActivated&&!this.activated?-1:void 0,style:[this.textDecorationStyle[0],null===(n=this.inputProps)||void 0===n?void 0:n.style,a],onBlur:this.handleInputBlur,onFocus:e=>{this.handleInputFocus(e,2)},onInput:this.handleInput,onChange:this.handleChange,onScroll:this.handleTextAreaScroll})),this.showPlaceholder1?(0,r.h)("div",{class:`${o}-input__placeholder`,style:[this.placeholderStyle,a],key:"placeholder"},this.mergedPlaceholder[0]):null,this.autosize?(0,r.h)(s.A,{onResize:this.handleTextAreaMirrorResize},{default:()=>(0,r.h)("div",{ref:"textareaMirrorElRef",class:`${o}-input__textarea-mirror`,key:"mirror"})}):null)}}):(0,r.h)("div",{class:`${o}-input__input`},(0,r.h)("input",Object.assign({type:"password"===l&&this.mergedShowPasswordOn&&this.passwordVisible?"text":l},this.inputProps,{ref:"inputElRef",class:[`${o}-input__input-el`,null===(e=this.inputProps)||void 0===e?void 0:e.class],style:[this.textDecorationStyle[0],null===(n=this.inputProps)||void 0===n?void 0:n.style],tabindex:this.passivelyActivated&&!this.activated?-1:void 0,placeholder:this.mergedPlaceholder[0],disabled:this.mergedDisabled,maxlength:i?void 0:this.maxlength,minlength:i?void 0:this.minlength,value:Array.isArray(this.mergedValue)?this.mergedValue[0]:this.mergedValue,readonly:this.readonly,autofocus:this.autofocus,size:this.attrSize,onBlur:this.handleInputBlur,onFocus:e=>{this.handleInputFocus(e,0)},onInput:e=>{this.handleInput(e,0)},onChange:e=>{this.handleChange(e,0)}})),this.showPlaceholder1?(0,r.h)("div",{class:`${o}-input__placeholder`},(0,r.h)("span",null,this.mergedPlaceholder[0])):null,this.autosize?(0,r.h)("div",{class:`${o}-input__input-mirror`,key:"mirror",ref:"inputMirrorElRef"}," "):null),!this.pair&&(0,B.iQ)(u.suffix,(e=>e||this.clearable||this.showCount||this.mergedShowPasswordOn||void 0!==this.loading?(0,r.h)("div",{class:`${o}-input__suffix`},[(0,B.iQ)(u["clear-icon-placeholder"],(e=>(this.clearable||e)&&(0,r.h)(f.A,{clsPrefix:o,show:this.showClearButton,onClear:this.handleClear},{placeholder:()=>e,icon:()=>{var e,n;return null===(n=(e=this.$slots)["clear-icon"])||void 0===n?void 0:n.call(e)}}))),this.internalLoadingBeforeSuffix?null:e,void 0!==this.loading?(0,r.h)(g.A,{clsPrefix:o,loading:this.loading,showArrow:!1,showClear:!1,style:this.cssVars}):null,this.internalLoadingBeforeSuffix?e:null,this.showCount&&"textarea"!==this.type?(0,r.h)($,null,{default:e=>{var n;return null===(n=u.count)||void 0===n?void 0:n.call(u,e)}}):null,this.mergedShowPasswordOn&&"password"===this.type?(0,r.h)("div",{class:`${o}-input__eye`,onMousedown:this.handlePasswordToggleMousedown,onClick:this.handlePasswordToggleClick},this.passwordVisible?(0,B.Nj)(u["password-visible-icon"],(()=>[(0,r.h)(b.A,{clsPrefix:o},{default:()=>(0,r.h)(d.A,null)})])):(0,B.Nj)(u["password-invisible-icon"],(()=>[(0,r.h)(b.A,{clsPrefix:o},{default:()=>(0,r.h)(h,null)})]))):null]):null))),this.pair?(0,r.h)("span",{class:`${o}-input__separator`},(0,B.Nj)(u.separator,(()=>[this.separator]))):null,this.pair?(0,r.h)("div",{class:`${o}-input-wrapper`},(0,r.h)("div",{class:`${o}-input__input`},(0,r.h)("input",{ref:"inputEl2Ref",type:this.type,class:`${o}-input__input-el`,tabindex:this.passivelyActivated&&!this.activated?-1:void 0,placeholder:this.mergedPlaceholder[1],disabled:this.mergedDisabled,maxlength:i?void 0:this.maxlength,minlength:i?void 0:this.minlength,value:Array.isArray(this.mergedValue)?this.mergedValue[1]:void 0,readonly:this.readonly,style:this.textDecorationStyle[1],onBlur:this.handleInputBlur,onFocus:e=>{this.handleInputFocus(e,1)},onInput:e=>{this.handleInput(e,1)},onChange:e=>{this.handleChange(e,1)}}),this.showPlaceholder2?(0,r.h)("div",{class:`${o}-input__placeholder`},(0,r.h)("span",null,this.mergedPlaceholder[1])):null),(0,B.iQ)(u.suffix,(e=>(this.clearable||e)&&(0,r.h)("div",{class:`${o}-input__suffix`},[this.clearable&&(0,r.h)(f.A,{clsPrefix:o,show:this.showClearButton,onClear:this.handleClear},{icon:()=>{var e;return null===(e=u["clear-icon"])||void 0===e?void 0:e.call(u)},placeholder:()=>{var e;return null===(e=u["clear-icon-placeholder"])||void 0===e?void 0:e.call(u)}}),e])))):null,this.mergedBordered?(0,r.h)("div",{class:`${o}-input__border`}):null,this.mergedBordered?(0,r.h)("div",{class:`${o}-input__state-border`}):null,this.showCount&&"textarea"===l?(0,r.h)($,null,{default:e=>{var n;const{renderCount:o}=this;return o?o(e):null===(n=u.count)||void 0===n?void 0:n.call(u,e)}}):null)}})}}]); \ No newline at end of file diff --git a/NearBeach/static/NearBeach/3770.min.js.gz b/NearBeach/static/NearBeach/3770.min.js.gz new file mode 100644 index 000000000..37dfc6a0e Binary files /dev/null and b/NearBeach/static/NearBeach/3770.min.js.gz differ diff --git a/NearBeach/static/NearBeach/432.min.js b/NearBeach/static/NearBeach/432.min.js new file mode 100644 index 000000000..42d41d3fb --- /dev/null +++ b/NearBeach/static/NearBeach/432.min.js @@ -0,0 +1,2 @@ +/*! For license information please see 432.min.js.LICENSE.txt */ +(self.webpackChunknearbeach=self.webpackChunknearbeach||[]).push([[432],{246:(t,e,n)=>{"use strict";function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);nye,Sortable:()=>Yt,Swap:()=>le,default:()=>Se});var s=u(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),f=u(/Edge/i),d=u(/firefox/i),p=u(/safari/i)&&!u(/chrome/i)&&!u(/android/i),h=u(/iP(ad|od|hone)/i),v=u(/chrome/i)&&u(/android/i),g={capture:!1,passive:!1};function m(t,e,n){t.addEventListener(e,n,!s&&g)}function b(t,e,n){t.removeEventListener(e,n,!s&&g)}function y(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function w(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function x(t,e,n,r){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&y(t,e):y(t,e))||r&&t===n)return t;if(t===n)break}while(t=w(t))}return null}var S,E=/\s+/g;function O(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var r=(" "+t.className+" ").replace(E," ").replace(" "+e+" "," ");t.className=(r+(n?" "+e:"")).replace(E," ")}}function D(t,e,n){var r=t&&t.style;if(r){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in r||-1!==e.indexOf("webkit")||(e="-webkit-"+e),r[e]=n+("string"==typeof n?"":"px")}}function _(t,e){var n="";if("string"==typeof t)n=t;else do{var r=D(t,"transform");r&&"none"!==r&&(n=r+" "+n)}while(!e&&(t=t.parentNode));var o=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return o&&new o(n)}function C(t,e,n){if(t){var r=t.getElementsByTagName(e),o=0,i=r.length;if(n)for(;o=i:o<=i))return r;if(r===T())break;r=k(r,!1)}return!1}function P(t,e,n,r){for(var o=0,i=0,a=t.children;i2&&void 0!==arguments[2]?arguments[2]:{},r=n.evt,i=function(t,e){if(null==t)return{};var n,r,o=function(t,e){if(null==t)return{};var n,r,o={},i=Object.keys(t);for(r=0;r=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}(n,K);V.pluginEvent.bind(Yt)(t,e,o({dragEl:q,parentEl:J,ghostEl:Q,rootEl:Z,nextEl:tt,lastDownEl:et,cloneEl:nt,cloneHidden:rt,dragStarted:gt,putSortable:ut,activeSortable:Yt.active,originalEvent:r,oldIndex:ot,oldDraggableIndex:at,newIndex:it,newDraggableIndex:ct,hideGhostForTarget:Rt,unhideGhostForTarget:Lt,cloneNowHidden:function(){rt=!0},cloneNowShown:function(){rt=!1},dispatchSortableEvent:function(t){z({sortable:e,name:t,originalEvent:r})}},i))};function z(t){W(o({putSortable:ut,cloneEl:nt,targetEl:q,rootEl:Z,oldIndex:ot,oldDraggableIndex:at,newIndex:it,newDraggableIndex:ct},t))}var q,J,Q,Z,tt,et,nt,rt,ot,it,at,ct,lt,ut,st,ft,dt,pt,ht,vt,gt,mt,bt,yt,wt,xt=!1,St=!1,Et=[],Ot=!1,Dt=!1,_t=[],Ct=!1,Tt=[],At="undefined"!=typeof document,It=h,Pt=f||s?"cssFloat":"float",Mt=At&&!v&&!h&&"draggable"in document.createElement("div"),jt=function(){if(At){if(s)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),Nt=function(t,e){var n=D(t),r=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),o=P(t,0,e),i=P(t,1,e),a=o&&D(o),c=i&&D(i),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+A(o).width,u=c&&parseInt(c.marginLeft)+parseInt(c.marginRight)+A(i).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(o&&a.float&&"none"!==a.float){var s="left"===a.float?"left":"right";return!i||"both"!==c.clear&&c.clear!==s?"horizontal":"vertical"}return o&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||l>=r&&"none"===n[Pt]||i&&"none"===n[Pt]&&l+u>r)?"vertical":"horizontal"},kt=function(t){function e(t,n){return function(r,o,i,a){var c=r.options.group.name&&o.options.group.name&&r.options.group.name===o.options.group.name;if(null==t&&(n||c))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"==typeof t)return e(t(r,o,i,a),n)(r,o,i,a);var l=(n?r:o).options.group.name;return!0===t||"string"==typeof t&&t===l||t.join&&t.indexOf(l)>-1}}var n={},r=t.group;r&&"object"==i(r)||(r={name:r}),n.name=r.name,n.checkPull=e(r.pull,!0),n.checkPut=e(r.put),n.revertClone=r.revertClone,t.group=n},Rt=function(){!jt&&Q&&D(Q,"display","none")},Lt=function(){!jt&&Q&&D(Q,"display","")};At&&document.addEventListener("click",(function(t){if(St)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),St=!1,!1}),!0);var Ft=function(t){if(q){t=t.touches?t.touches[0]:t;var e=(o=t.clientX,i=t.clientY,Et.some((function(t){var e=t[$].options.emptyInsertThreshold;if(e&&!M(t)){var n=A(t),r=o>=n.left-e&&o<=n.right+e,c=i>=n.top-e&&i<=n.bottom+e;return r&&c?a=t:void 0}})),a);if(e){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]=t[r]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[$]._onDragOver(n)}}var o,i,a},Bt=function(t){q&&q.parentNode[$]._isOutsideThisEl(t.target)};function Yt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=c({},e),t[$]=this;var n,r,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Nt(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Yt.supportPointer&&"PointerEvent"in window&&!p,emptyInsertThreshold:5};for(var a in V.initializePlugins(this,t,i),i)!(a in e)&&(e[a]=i[a]);for(var l in kt(e),this)"_"===l.charAt(0)&&"function"==typeof this[l]&&(this[l]=this[l].bind(this));this.nativeDraggable=!e.forceFallback&&Mt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?m(t,"pointerdown",this._onTapStart):(m(t,"mousedown",this._onTapStart),m(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(m(t,"dragover",this),m(t,"dragenter",this)),Et.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),c(this,(r=[],{captureAnimationState:function(){r=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==D(t,"display")&&t!==Yt.ghost){r.push({target:t,rect:A(t)});var e=o({},r[r.length-1].rect);if(t.thisAnimationDuration){var n=_(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}}))},addAnimationState:function(t){r.push(t)},removeAnimationState:function(t){r.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var r in e)if(e.hasOwnProperty(r)&&e[r]===t[n][r])return Number(n);return-1}(r,{target:t}),1)},animateAll:function(t){var e=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof t&&t());var o=!1,i=0;r.forEach((function(t){var n=0,r=t.target,a=r.fromRect,c=A(r),l=r.prevFromRect,u=r.prevToRect,s=t.rect,f=_(r,!0);f&&(c.top-=f.f,c.left-=f.e),r.toRect=c,r.thisAnimationDuration&&R(l,c)&&!R(a,c)&&(s.top-c.top)/(s.left-c.left)==(a.top-c.top)/(a.left-c.left)&&(n=function(t,e,n,r){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*r.animation}(s,l,u,e.options)),R(c,a)||(r.prevFromRect=a,r.prevToRect=c,n||(n=e.options.animation),e.animate(r,s,c,n)),n&&(o=!0,i=Math.max(i,n),clearTimeout(r.animationResetTimer),r.animationResetTimer=setTimeout((function(){r.animationTime=0,r.prevFromRect=null,r.fromRect=null,r.prevToRect=null,r.thisAnimationDuration=null}),n),r.thisAnimationDuration=n)})),clearTimeout(n),o?n=setTimeout((function(){"function"==typeof t&&t()}),i):"function"==typeof t&&t(),r=[]},animate:function(t,e,n,r){if(r){D(t,"transition",""),D(t,"transform","");var o=_(this.el),i=o&&o.a,a=o&&o.d,c=(e.left-n.left)/(i||1),l=(e.top-n.top)/(a||1);t.animatingX=!!c,t.animatingY=!!l,D(t,"transform","translate3d("+c+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),D(t,"transition","transform "+r+"ms"+(this.options.easing?" "+this.options.easing:"")),D(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){D(t,"transition",""),D(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),r)}}}))}function Xt(t,e,n,r,o,i,a,c){var l,u,d=t[$],p=d.options.onMove;return!window.CustomEvent||s||f?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=e,l.from=t,l.dragged=n,l.draggedRect=r,l.related=o||e,l.relatedRect=i||A(e),l.willInsertAfter=c,l.originalEvent=a,t.dispatchEvent(l),p&&(u=p.call(d,l,a)),u}function $t(t){t.draggable=!1}function Ut(){Ct=!1}function Ht(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,r=0;n--;)r+=e.charCodeAt(n);return r.toString(36)}function Vt(t){return setTimeout(t,0)}function Wt(t){return clearTimeout(t)}Yt.prototype={constructor:Yt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(mt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,q):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,r=this.options,o=r.preventOnFilter,i=t.type,a=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,c=(a||t).target,l=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||c,u=r.filter;if(function(t){Tt.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var r=e[n];r.checked&&Tt.push(r)}}(n),!q&&!(/mousedown|pointerdown/.test(i)&&0!==t.button||r.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!p||!c||"SELECT"!==c.tagName.toUpperCase())&&!((c=x(c,r.draggable,n,!1))&&c.animated||et===c)){if(ot=j(c),at=j(c,r.draggable),"function"==typeof u){if(u.call(this,t,c,this))return z({sortable:e,rootEl:l,name:"filter",targetEl:c,toEl:n,fromEl:n}),G("filter",e,{evt:t}),void(o&&t.cancelable&&t.preventDefault())}else if(u&&(u=u.split(",").some((function(r){if(r=x(l,r.trim(),n,!1))return z({sortable:e,rootEl:r,name:"filter",targetEl:c,fromEl:n,toEl:n}),G("filter",e,{evt:t}),!0}))))return void(o&&t.cancelable&&t.preventDefault());r.handle&&!x(l,r.handle,n,!1)||this._prepareDragStart(t,a,c)}}},_prepareDragStart:function(t,e,n){var r,o=this,i=o.el,a=o.options,c=i.ownerDocument;if(n&&!q&&n.parentNode===i){var l=A(n);if(Z=i,J=(q=n).parentNode,tt=q.nextSibling,et=n,lt=a.group,Yt.dragged=q,st={target:q,clientX:(e||t).clientX,clientY:(e||t).clientY},ht=st.clientX-l.left,vt=st.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,q.style["will-change"]="all",r=function(){G("delayEnded",o,{evt:t}),Yt.eventCanceled?o._onDrop():(o._disableDelayedDragEvents(),!d&&o.nativeDraggable&&(q.draggable=!0),o._triggerDragStart(t,e),z({sortable:o,name:"choose",originalEvent:t}),O(q,a.chosenClass,!0))},a.ignore.split(",").forEach((function(t){C(q,t.trim(),$t)})),m(c,"dragover",Ft),m(c,"mousemove",Ft),m(c,"touchmove",Ft),m(c,"mouseup",o._onDrop),m(c,"touchend",o._onDrop),m(c,"touchcancel",o._onDrop),d&&this.nativeDraggable&&(this.options.touchStartThreshold=4,q.draggable=!0),G("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(f||s))r();else{if(Yt.eventCanceled)return void this._onDrop();m(c,"mouseup",o._disableDelayedDrag),m(c,"touchend",o._disableDelayedDrag),m(c,"touchcancel",o._disableDelayedDrag),m(c,"mousemove",o._delayedDragTouchMoveHandler),m(c,"touchmove",o._delayedDragTouchMoveHandler),a.supportPointer&&m(c,"pointermove",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(r,a.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){q&&$t(q),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;b(t,"mouseup",this._disableDelayedDrag),b(t,"touchend",this._disableDelayedDrag),b(t,"touchcancel",this._disableDelayedDrag),b(t,"mousemove",this._delayedDragTouchMoveHandler),b(t,"touchmove",this._delayedDragTouchMoveHandler),b(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?m(document,"pointermove",this._onTouchMove):m(document,e?"touchmove":"mousemove",this._onTouchMove):(m(q,"dragend",this),m(Z,"dragstart",this._onDragStart));try{document.selection?Vt((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(xt=!1,Z&&q){G("dragStarted",this,{evt:e}),this.nativeDraggable&&m(document,"dragover",Bt);var n=this.options;!t&&O(q,n.dragClass,!1),O(q,n.ghostClass,!0),Yt.active=this,t&&this._appendGhost(),z({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(ft){this._lastX=ft.clientX,this._lastY=ft.clientY,Rt();for(var t=document.elementFromPoint(ft.clientX,ft.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ft.clientX,ft.clientY))!==e;)e=t;if(q.parentNode[$]._isOutsideThisEl(t),e)do{if(e[$]&&e[$]._onDragOver({clientX:ft.clientX,clientY:ft.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=e.parentNode);Lt()}},_onTouchMove:function(t){if(st){var e=this.options,n=e.fallbackTolerance,r=e.fallbackOffset,o=t.touches?t.touches[0]:t,i=Q&&_(Q,!0),a=Q&&i&&i.a,c=Q&&i&&i.d,l=It&&wt&&N(wt),u=(o.clientX-st.clientX+r.x)/(a||1)+(l?l[0]-_t[0]:0)/(a||1),s=(o.clientY-st.clientY+r.y)/(c||1)+(l?l[1]-_t[1]:0)/(c||1);if(!Yt.active&&!xt){if(n&&Math.max(Math.abs(o.clientX-this._lastX),Math.abs(o.clientY-this._lastY))r.right+10||t.clientX<=r.right&&t.clientY>r.bottom&&t.clientX>=r.left:t.clientX>r.right&&t.clientY>r.top||t.clientX<=r.right&&t.clientY>r.bottom+10}(t,i,this)&&!g.animated){if(g===q)return X(!1);if(g&&a===t.target&&(c=g),c&&(n=A(c)),!1!==Xt(Z,a,q,e,c,n,t,!!c))return Y(),a.appendChild(q),J=a,U(),X(!0)}else if(g&&function(t,e,n){var r=A(P(n.el,0,n.options,!0));return e?t.clientXs+u*i/2:lf-yt)return-bt}else if(l>s+u*(1-o)/2&&lf-u*i/2)?l>s+u/2?1:-1:0}(t,c,n,i,E?1:l.swapThreshold,null==l.invertedSwapThreshold?l.swapThreshold:l.invertedSwapThreshold,Dt,mt===c),0!==b){var N=j(q);do{N-=b,w=J.children[N]}while(w&&("none"===D(w,"display")||w===Q))}if(0===b||w===c)return X(!1);mt=c,bt=b;var k=c.nextElementSibling,R=!1,L=Xt(Z,a,q,e,c,n,t,R=1===b);if(!1!==L)return 1!==L&&-1!==L||(R=1===L),Ct=!0,setTimeout(Ut,30),Y(),R&&!k?a.appendChild(q):c.parentNode.insertBefore(q,R?k:c),C&&F(C,0,T-C.scrollTop),J=q.parentNode,void 0===y||Dt||(yt=Math.abs(y-A(c)[_])),U(),X(!0)}if(a.contains(q))return X(!1)}return!1}function B(l,u){G(l,h,o({evt:t,isOwner:f,axis:i?"vertical":"horizontal",revert:r,dragRect:e,targetRect:n,canSort:d,fromSortable:p,target:c,completed:X,onMove:function(n,r){return Xt(Z,a,q,e,n,A(n),t,r)},changed:U},u))}function Y(){B("dragOverAnimationCapture"),h.captureAnimationState(),h!==p&&p.captureAnimationState()}function X(e){return B("dragOverCompleted",{insertion:e}),e&&(f?s._hideClone():s._showClone(h),h!==p&&(O(q,ut?ut.options.ghostClass:s.options.ghostClass,!1),O(q,l.ghostClass,!0)),ut!==h&&h!==Yt.active?ut=h:h===Yt.active&&ut&&(ut=null),p===h&&(h._ignoreWhileAnimating=c),h.animateAll((function(){B("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==p&&(p.animateAll(),p._ignoreWhileAnimating=null)),(c===q&&!q.animated||c===a&&!c.animated)&&(mt=null),l.dragoverBubble||t.rootEl||c===document||(q.parentNode[$]._isOutsideThisEl(t.target),!e&&Ft(t)),!l.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),v=!0}function U(){it=j(q),ct=j(q,l.draggable),z({sortable:h,name:"change",toEl:a,newIndex:it,newDraggableIndex:ct,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){b(document,"mousemove",this._onTouchMove),b(document,"touchmove",this._onTouchMove),b(document,"pointermove",this._onTouchMove),b(document,"dragover",Ft),b(document,"mousemove",Ft),b(document,"touchmove",Ft)},_offUpEvents:function(){var t=this.el.ownerDocument;b(t,"mouseup",this._onDrop),b(t,"touchend",this._onDrop),b(t,"pointerup",this._onDrop),b(t,"touchcancel",this._onDrop),b(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;it=j(q),ct=j(q,n.draggable),G("drop",this,{evt:t}),J=q&&q.parentNode,it=j(q),ct=j(q,n.draggable),Yt.eventCanceled||(xt=!1,Dt=!1,Ot=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Wt(this.cloneId),Wt(this._dragStartId),this.nativeDraggable&&(b(document,"drop",this),b(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),p&&D(document.body,"user-select",""),D(q,"transform",""),t&&(gt&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Q&&Q.parentNode&&Q.parentNode.removeChild(Q),(Z===J||ut&&"clone"!==ut.lastPutMode)&&nt&&nt.parentNode&&nt.parentNode.removeChild(nt),q&&(this.nativeDraggable&&b(q,"dragend",this),$t(q),q.style["will-change"]="",gt&&!xt&&O(q,ut?ut.options.ghostClass:this.options.ghostClass,!1),O(q,this.options.chosenClass,!1),z({sortable:this,name:"unchoose",toEl:J,newIndex:null,newDraggableIndex:null,originalEvent:t}),Z!==J?(it>=0&&(z({rootEl:J,name:"add",toEl:J,fromEl:Z,originalEvent:t}),z({sortable:this,name:"remove",toEl:J,originalEvent:t}),z({rootEl:J,name:"sort",toEl:J,fromEl:Z,originalEvent:t}),z({sortable:this,name:"sort",toEl:J,originalEvent:t})),ut&&ut.save()):it!==ot&&it>=0&&(z({sortable:this,name:"update",toEl:J,originalEvent:t}),z({sortable:this,name:"sort",toEl:J,originalEvent:t})),Yt.active&&(null!=it&&-1!==it||(it=ot,ct=at),z({sortable:this,name:"end",toEl:J,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){G("nulling",this),Z=q=J=Q=tt=nt=et=rt=st=ft=gt=it=ct=ot=at=mt=bt=ut=lt=Yt.dragged=Yt.ghost=Yt.clone=Yt.active=null,Tt.forEach((function(t){t.checked=!0})),Tt.length=dt=pt=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":q&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,r=0,o=n.length,i=this.options;r1&&(he.forEach((function(t){r.addAnimationState({target:t,rect:me?A(t):o}),X(t),t.fromRect=o,e.removeAnimationState(t)})),me=!1,function(t,e){he.forEach((function(n,r){var o=e.children[n.sortableIndex+(t?Number(r):0)];o?e.insertBefore(n,o):e.appendChild(n)}))}(!this.options.removeCloneOnHide,n))},dragOverCompleted:function(t){var e=t.sortable,n=t.isOwner,r=t.insertion,o=t.activeSortable,i=t.parentEl,a=t.putSortable,c=this.options;if(r){if(n&&o._hideClone(),ge=!1,c.animation&&he.length>1&&(me||!n&&!o.options.sort&&!a)){var l=A(fe,!1,!0,!0);he.forEach((function(t){t!==fe&&(Y(t,l),i.appendChild(t))})),me=!0}if(!n)if(me||xe(),he.length>1){var u=pe;o._showClone(e),o.options.animation&&!pe&&u&&ve.forEach((function(t){o.addAnimationState({target:t,rect:de}),t.fromRect=de,t.thisAnimationDuration=null}))}else o._showClone(e)}},dragOverAnimationCapture:function(t){var e=t.dragRect,n=t.isOwner,r=t.activeSortable;if(he.forEach((function(t){t.thisAnimationDuration=null})),r.options.animation&&!n&&r.multiDrag.isMultiDrag){de=c({},e);var o=_(fe,!0);de.top-=o.f,de.left-=o.e}},dragOverAnimationComplete:function(){me&&(me=!1,xe())},drop:function(t){var e=t.originalEvent,n=t.rootEl,r=t.parentEl,o=t.sortable,i=t.dispatchSortableEvent,a=t.oldIndex,c=t.putSortable,l=c||this.sortable;if(e){var u=this.options,s=r.children;if(!be)if(u.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),O(fe,u.selectedClass,!~he.indexOf(fe)),~he.indexOf(fe))he.splice(he.indexOf(fe),1),ue=null,W({sortable:o,rootEl:n,name:"deselect",targetEl:fe,originalEvt:e});else{if(he.push(fe),W({sortable:o,rootEl:n,name:"select",targetEl:fe,originalEvt:e}),e.shiftKey&&ue&&o.el.contains(ue)){var f,d,p=j(ue),h=j(fe);if(~p&&~h&&p!==h)for(h>p?(d=p,f=h):(d=h,f=p+1);d1){var v=A(fe),g=j(fe,":not(."+this.options.selectedClass+")");if(!ge&&u.animation&&(fe.thisAnimationDuration=null),l.captureAnimationState(),!ge&&(u.animation&&(fe.fromRect=v,he.forEach((function(t){if(t.thisAnimationDuration=null,t!==fe){var e=me?A(t):v;t.fromRect=e,l.addAnimationState({target:t,rect:e})}}))),xe(),he.forEach((function(t){s[g]?r.insertBefore(t,s[g]):r.appendChild(t),g++})),a===j(fe))){var m=!1;he.forEach((function(t){t.sortableIndex===j(t)||(m=!0)})),m&&i("update")}he.forEach((function(t){X(t)})),l.animateAll()}se=l}(n===r||c&&"clone"!==c.lastPutMode)&&ve.forEach((function(t){t.parentNode&&t.parentNode.removeChild(t)}))}},nullingGlobal:function(){this.isMultiDrag=be=!1,ve.length=0},destroyGlobal:function(){this._deselectMultiDrag(),b(document,"pointerup",this._deselectMultiDrag),b(document,"mouseup",this._deselectMultiDrag),b(document,"touchend",this._deselectMultiDrag),b(document,"keydown",this._checkKeyDown),b(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(t){if(!(void 0!==be&&be||se!==this.sortable||t&&x(t.target,this.options.draggable,this.sortable.el,!1)||t&&0!==t.button))for(;he.length;){var e=he[0];O(e,this.options.selectedClass,!1),he.shift(),W({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:e,originalEvt:t})}},_checkKeyDown:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},c(t,{pluginName:"multiDrag",utils:{select:function(t){var e=t.parentNode[$];e&&e.options.multiDrag&&!~he.indexOf(t)&&(se&&se!==e&&(se.multiDrag._deselectMultiDrag(),se=e),O(t,e.options.selectedClass,!0),he.push(t))},deselect:function(t){var e=t.parentNode[$],n=he.indexOf(t);e&&e.options.multiDrag&&~n&&(O(t,e.options.selectedClass,!1),he.splice(n,1))}},eventProperties:function(){var t,e=this,n=[],r=[];return he.forEach((function(t){var o;n.push({multiDragElement:t,index:t.sortableIndex}),o=me&&t!==fe?-1:me?j(t,":not(."+e.options.selectedClass+")"):j(t),r.push({multiDragElement:t,index:o})})),{items:(t=he,function(t){if(Array.isArray(t))return l(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return l(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),clones:[].concat(ve),oldIndicies:n,newIndicies:r}},optionListeners:{multiDragKey:function(t){return"ctrl"===(t=t.toLowerCase())?t="Control":t.length>1&&(t=t.charAt(0).toUpperCase()+t.substr(1)),t}}})}function we(t,e){ve.forEach((function(n,r){var o=e.children[n.sortableIndex+(t?Number(r):0)];o?e.insertBefore(n,o):e.appendChild(n)}))}function xe(){he.forEach((function(t){t!==fe&&t.parentNode&&t.parentNode.removeChild(t)}))}Yt.mount(new function(){function t(){for(var t in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this))}return t.prototype={dragStarted:function(t){var e=t.originalEvent;this.sortable.nativeDraggable?m(document,"dragover",this._handleAutoScroll):this.options.supportPointer?m(document,"pointermove",this._handleFallbackAutoScroll):e.touches?m(document,"touchmove",this._handleFallbackAutoScroll):m(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(t){var e=t.originalEvent;this.options.dragOverBubble||e.rootEl||this._handleAutoScroll(e)},drop:function(){this.sortable.nativeDraggable?b(document,"dragover",this._handleAutoScroll):(b(document,"pointermove",this._handleFallbackAutoScroll),b(document,"touchmove",this._handleFallbackAutoScroll),b(document,"mousemove",this._handleFallbackAutoScroll)),ne(),ee(),clearTimeout(S),S=void 0},nulling:function(){Jt=Gt=Kt=te=Qt=zt=qt=null,Zt.length=0},_handleFallbackAutoScroll:function(t){this._handleAutoScroll(t,!0)},_handleAutoScroll:function(t,e){var n=this,r=(t.touches?t.touches[0]:t).clientX,o=(t.touches?t.touches[0]:t).clientY,i=document.elementFromPoint(r,o);if(Jt=t,e||this.options.forceAutoScrollFallback||f||s||p){oe(t,this.options,i,e);var a=k(i,!0);!te||Qt&&r===zt&&o===qt||(Qt&&ne(),Qt=setInterval((function(){var i=k(document.elementFromPoint(r,o),!0);i!==a&&(a=i,ee()),oe(t,n.options,i,e)}),10),zt=r,qt=o)}else{if(!this.options.bubbleScroll||k(i,!0)===T())return void ee();oe(t,this.options,k(i,!1),!1)}}},c(t,{pluginName:"scroll",initializeByDefault:!0})}),Yt.mount(ce,ae);const Se=Yt},8261:(t,e,n)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(8764),o=n(3751),i=n(33);function a(t){var e=Object.create(null);if(t)for(var n in t)e[n]=t[n];return e.default=t,Object.freeze(e)}var c=a(o);const l=new WeakMap;function u(t,e){if(!i.isString(t)){if(!t.nodeType)return i.NOOP;t=t.innerHTML}const n=t,o=function(t){let e=l.get(null!=t?t:i.EMPTY_OBJ);return e||(e=Object.create(null),l.set(null!=t?t:i.EMPTY_OBJ,e)),e}(e),a=o[n];if(a)return a;if("#"===t[0]){const e=document.querySelector(t);t=e?e.innerHTML:""}const u=i.extend({hoistStatic:!0,onError:void 0,onWarn:i.NOOP},e);u.isCustomElement||"undefined"==typeof customElements||(u.isCustomElement=t=>!!customElements.get(t));const{code:s}=r.compile(t,u),f=new Function("Vue",s)(c);return f._rc=!0,o[n]=f}o.registerRuntimeCompiler(u),e.compile=u,Object.keys(o).forEach((function(t){"default"===t||Object.prototype.hasOwnProperty.call(e,t)||(e[t]=o[t])}))},7527:(t,e,n)=>{"use strict";t.exports=n(8261)},432:function(t,e,n){var r;"undefined"!=typeof self&&self,r=function(t,e){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s="fb15")}({"00ee":function(t,e,n){var r={};r[n("b622")("toStringTag")]="z",t.exports="[object z]"===String(r)},"0366":function(t,e,n){var r=n("1c0b");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},"057f":function(t,e,n){var r=n("fc6a"),o=n("241c").f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"[object Window]"==i.call(t)?function(t){try{return o(t)}catch(t){return a.slice()}}(t):o(r(t))}},"06cf":function(t,e,n){var r=n("83ab"),o=n("d1e7"),i=n("5c6c"),a=n("fc6a"),c=n("c04e"),l=n("5135"),u=n("0cfb"),s=Object.getOwnPropertyDescriptor;e.f=r?s:function(t,e){if(t=a(t),e=c(e,!0),u)try{return s(t,e)}catch(t){}if(l(t,e))return i(!o.f.call(t,e),t[e])}},"0cfb":function(t,e,n){var r=n("83ab"),o=n("d039"),i=n("cc12");t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},"13d5":function(t,e,n){"use strict";var r=n("23e7"),o=n("d58f").left,i=n("a640"),a=n("ae40"),c=i("reduce"),l=a("reduce",{1:0});r({target:"Array",proto:!0,forced:!c||!l},{reduce:function(t){return o(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},"14c3":function(t,e,n){var r=n("c6b6"),o=n("9263");t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var i=n.call(t,e);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw TypeError("RegExp#exec called on incompatible receiver");return o.call(t,e)}},"159b":function(t,e,n){var r=n("da84"),o=n("fdbc"),i=n("17c2"),a=n("9112");for(var c in o){var l=r[c],u=l&&l.prototype;if(u&&u.forEach!==i)try{a(u,"forEach",i)}catch(t){u.forEach=i}}},"17c2":function(t,e,n){"use strict";var r=n("b727").forEach,o=n("a640"),i=n("ae40"),a=o("forEach"),c=i("forEach");t.exports=a&&c?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},"1be4":function(t,e,n){var r=n("d066");t.exports=r("document","documentElement")},"1c0b":function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},"1c7e":function(t,e,n){var r=n("b622")("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n}},"1d80":function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},"1dde":function(t,e,n){var r=n("d039"),o=n("b622"),i=n("2d00"),a=o("species");t.exports=function(t){return i>=51||!r((function(){var e=[];return(e.constructor={})[a]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},"23cb":function(t,e,n){var r=n("a691"),o=Math.max,i=Math.min;t.exports=function(t,e){var n=r(t);return n<0?o(n+e,0):i(n,e)}},"23e7":function(t,e,n){var r=n("da84"),o=n("06cf").f,i=n("9112"),a=n("6eeb"),c=n("ce4e"),l=n("e893"),u=n("94ca");t.exports=function(t,e){var n,s,f,d,p,h=t.target,v=t.global,g=t.stat;if(n=v?r:g?r[h]||c(h,{}):(r[h]||{}).prototype)for(s in e){if(d=e[s],f=t.noTargetGet?(p=o(n,s))&&p.value:n[s],!u(v?s:h+(g?".":"#")+s,t.forced)&&void 0!==f){if(typeof d==typeof f)continue;l(d,f)}(t.sham||f&&f.sham)&&i(d,"sham",!0),a(n,s,d,t)}}},"241c":function(t,e,n){var r=n("ca84"),o=n("7839").concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},"25f0":function(t,e,n){"use strict";var r=n("6eeb"),o=n("825a"),i=n("d039"),a=n("ad6d"),c="toString",l=RegExp.prototype,u=l[c],s=i((function(){return"/a/b"!=u.call({source:"a",flags:"b"})})),f=u.name!=c;(s||f)&&r(RegExp.prototype,c,(function(){var t=o(this),e=String(t.source),n=t.flags;return"/"+e+"/"+String(void 0===n&&t instanceof RegExp&&!("flags"in l)?a.call(t):n)}),{unsafe:!0})},"2ca0":function(t,e,n){"use strict";var r,o=n("23e7"),i=n("06cf").f,a=n("50c4"),c=n("5a34"),l=n("1d80"),u=n("ab13"),s=n("c430"),f="".startsWith,d=Math.min,p=u("startsWith");o({target:"String",proto:!0,forced:!(!s&&!p&&(r=i(String.prototype,"startsWith"),r&&!r.writable)||p)},{startsWith:function(t){var e=String(l(this));c(t);var n=a(d(arguments.length>1?arguments[1]:void 0,e.length)),r=String(t);return f?f.call(e,r,n):e.slice(n,n+r.length)===r}})},"2d00":function(t,e,n){var r,o,i=n("da84"),a=n("342f"),c=i.process,l=c&&c.versions,u=l&&l.v8;u?o=(r=u.split("."))[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=r[1]),t.exports=o&&+o},"342f":function(t,e,n){var r=n("d066");t.exports=r("navigator","userAgent")||""},"35a1":function(t,e,n){var r=n("f5df"),o=n("3f8c"),i=n("b622")("iterator");t.exports=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[r(t)]}},"37e8":function(t,e,n){var r=n("83ab"),o=n("9bf2"),i=n("825a"),a=n("df75");t.exports=r?Object.defineProperties:function(t,e){i(t);for(var n,r=a(e),c=r.length,l=0;c>l;)o.f(t,n=r[l++],e[n]);return t}},"3bbe":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},"3ca3":function(t,e,n){"use strict";var r=n("6547").charAt,o=n("69f3"),i=n("7dd0"),a="String Iterator",c=o.set,l=o.getterFor(a);i(String,"String",(function(t){c(this,{type:a,string:String(t),index:0})}),(function(){var t,e=l(this),n=e.string,o=e.index;return o>=n.length?{value:void 0,done:!0}:(t=r(n,o),e.index+=t.length,{value:t,done:!1})}))},"3f8c":function(t,e){t.exports={}},4160:function(t,e,n){"use strict";var r=n("23e7"),o=n("17c2");r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},"428f":function(t,e,n){var r=n("da84");t.exports=r},"44ad":function(t,e,n){var r=n("d039"),o=n("c6b6"),i="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?i.call(t,""):Object(t)}:Object},"44d2":function(t,e,n){var r=n("b622"),o=n("7c73"),i=n("9bf2"),a=r("unscopables"),c=Array.prototype;null==c[a]&&i.f(c,a,{configurable:!0,value:o(null)}),t.exports=function(t){c[a][t]=!0}},"44e7":function(t,e,n){var r=n("861d"),o=n("c6b6"),i=n("b622")("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==o(t))}},4930:function(t,e,n){var r=n("d039");t.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},"4d64":function(t,e,n){var r=n("fc6a"),o=n("50c4"),i=n("23cb"),a=function(t){return function(e,n,a){var c,l=r(e),u=o(l.length),s=i(a,u);if(t&&n!=n){for(;u>s;)if((c=l[s++])!=c)return!0}else for(;u>s;s++)if((t||s in l)&&l[s]===n)return t||s||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},"4de4":function(t,e,n){"use strict";var r=n("23e7"),o=n("b727").filter,i=n("1dde"),a=n("ae40"),c=i("filter"),l=a("filter");r({target:"Array",proto:!0,forced:!c||!l},{filter:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},"4df4":function(t,e,n){"use strict";var r=n("0366"),o=n("7b0b"),i=n("9bdd"),a=n("e95a"),c=n("50c4"),l=n("8418"),u=n("35a1");t.exports=function(t){var e,n,s,f,d,p,h=o(t),v="function"==typeof this?this:Array,g=arguments.length,m=g>1?arguments[1]:void 0,b=void 0!==m,y=u(h),w=0;if(b&&(m=r(m,g>2?arguments[2]:void 0,2)),null==y||v==Array&&a(y))for(n=new v(e=c(h.length));e>w;w++)p=b?m(h[w],w):h[w],l(n,w,p);else for(d=(f=y.call(h)).next,n=new v;!(s=d.call(f)).done;w++)p=b?i(f,m,[s.value,w],!0):s.value,l(n,w,p);return n.length=w,n}},"4fad":function(t,e,n){var r=n("23e7"),o=n("6f53").entries;r({target:"Object",stat:!0},{entries:function(t){return o(t)}})},"50c4":function(t,e,n){var r=n("a691"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},5135:function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},5319:function(t,e,n){"use strict";var r=n("d784"),o=n("825a"),i=n("7b0b"),a=n("50c4"),c=n("a691"),l=n("1d80"),u=n("8aa5"),s=n("14c3"),f=Math.max,d=Math.min,p=Math.floor,h=/\$([$&'`]|\d\d?|<[^>]*>)/g,v=/\$([$&'`]|\d\d?)/g;r("replace",2,(function(t,e,n,r){var g=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,m=r.REPLACE_KEEPS_$0,b=g?"$":"$0";return[function(n,r){var o=l(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,o,r):e.call(String(o),n,r)},function(t,r){if(!g&&m||"string"==typeof r&&-1===r.indexOf(b)){var i=n(e,t,this,r);if(i.done)return i.value}var l=o(t),p=String(this),h="function"==typeof r;h||(r=String(r));var v=l.global;if(v){var w=l.unicode;l.lastIndex=0}for(var x=[];;){var S=s(l,p);if(null===S)break;if(x.push(S),!v)break;""===String(S[0])&&(l.lastIndex=u(p,a(l.lastIndex),w))}for(var E,O="",D=0,_=0;_=D&&(O+=p.slice(D,T)+j,D=T+C.length)}return O+p.slice(D)}];function y(t,n,r,o,a,c){var l=r+t.length,u=o.length,s=v;return void 0!==a&&(a=i(a),s=h),e.call(c,s,(function(e,i){var c;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,r);case"'":return n.slice(l);case"<":c=a[i.slice(1,-1)];break;default:var s=+i;if(0===s)return e;if(s>u){var f=p(s/10);return 0===f?e:f<=u?void 0===o[f-1]?i.charAt(1):o[f-1]+i.charAt(1):e}c=o[s-1]}return void 0===c?"":c}))}}))},5692:function(t,e,n){var r=n("c430"),o=n("c6cd");(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.5",mode:r?"pure":"global",copyright:"Š 2020 Denis Pushkarev (zloirock.ru)"})},"56ef":function(t,e,n){var r=n("d066"),o=n("241c"),i=n("7418"),a=n("825a");t.exports=r("Reflect","ownKeys")||function(t){var e=o.f(a(t)),n=i.f;return n?e.concat(n(t)):e}},"5a34":function(t,e,n){var r=n("44e7");t.exports=function(t){if(r(t))throw TypeError("The method doesn't accept regular expressions");return t}},"5c6c":function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"5db7":function(t,e,n){"use strict";var r=n("23e7"),o=n("a2bf"),i=n("7b0b"),a=n("50c4"),c=n("1c0b"),l=n("65f0");r({target:"Array",proto:!0},{flatMap:function(t){var e,n=i(this),r=a(n.length);return c(t),(e=l(n,0)).length=o(e,n,n,r,0,1,t,arguments.length>1?arguments[1]:void 0),e}})},6547:function(t,e,n){var r=n("a691"),o=n("1d80"),i=function(t){return function(e,n){var i,a,c=String(o(e)),l=r(n),u=c.length;return l<0||l>=u?t?"":void 0:(i=c.charCodeAt(l))<55296||i>56319||l+1===u||(a=c.charCodeAt(l+1))<56320||a>57343?t?c.charAt(l):i:t?c.slice(l,l+2):a-56320+(i-55296<<10)+65536}};t.exports={codeAt:i(!1),charAt:i(!0)}},"65f0":function(t,e,n){var r=n("861d"),o=n("e8b5"),i=n("b622")("species");t.exports=function(t,e){var n;return o(t)&&("function"!=typeof(n=t.constructor)||n!==Array&&!o(n.prototype)?r(n)&&null===(n=n[i])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===e?0:e)}},"69f3":function(t,e,n){var r,o,i,a=n("7f9a"),c=n("da84"),l=n("861d"),u=n("9112"),s=n("5135"),f=n("f772"),d=n("d012"),p=c.WeakMap;if(a){var h=new p,v=h.get,g=h.has,m=h.set;r=function(t,e){return m.call(h,t,e),e},o=function(t){return v.call(h,t)||{}},i=function(t){return g.call(h,t)}}else{var b=f("state");d[b]=!0,r=function(t,e){return u(t,b,e),e},o=function(t){return s(t,b)?t[b]:{}},i=function(t){return s(t,b)}}t.exports={set:r,get:o,has:i,enforce:function(t){return i(t)?o(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!l(e)||(n=o(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}}},"6eeb":function(t,e,n){var r=n("da84"),o=n("9112"),i=n("5135"),a=n("ce4e"),c=n("8925"),l=n("69f3"),u=l.get,s=l.enforce,f=String(String).split("String");(t.exports=function(t,e,n,c){var l=!!c&&!!c.unsafe,u=!!c&&!!c.enumerable,d=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),s(n).source=f.join("string"==typeof e?e:"")),t!==r?(l?!d&&t[e]&&(u=!0):delete t[e],u?t[e]=n:o(t,e,n)):u?t[e]=n:a(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||c(this)}))},"6f53":function(t,e,n){var r=n("83ab"),o=n("df75"),i=n("fc6a"),a=n("d1e7").f,c=function(t){return function(e){for(var n,c=i(e),l=o(c),u=l.length,s=0,f=[];u>s;)n=l[s++],r&&!a.call(c,n)||f.push(t?[n,c[n]]:c[n]);return f}};t.exports={entries:c(!0),values:c(!1)}},"73d9":function(t,e,n){n("44d2")("flatMap")},7418:function(t,e){e.f=Object.getOwnPropertySymbols},"746f":function(t,e,n){var r=n("428f"),o=n("5135"),i=n("e538"),a=n("9bf2").f;t.exports=function(t){var e=r.Symbol||(r.Symbol={});o(e,t)||a(e,t,{value:i.f(t)})}},7839:function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7b0b":function(t,e,n){var r=n("1d80");t.exports=function(t){return Object(r(t))}},"7c73":function(t,e,n){var r,o=n("825a"),i=n("37e8"),a=n("7839"),c=n("d012"),l=n("1be4"),u=n("cc12"),s=n("f772"),f="prototype",d="script",p=s("IE_PROTO"),h=function(){},v=function(t){return"<"+d+">"+t+""},g=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e,n;g=r?function(t){t.write(v("")),t.close();var e=t.parentWindow.Object;return t=null,e}(r):(e=u("iframe"),n="java"+d+":",e.style.display="none",l.appendChild(e),e.src=String(n),(t=e.contentWindow.document).open(),t.write(v("document.F=Object")),t.close(),t.F);for(var o=a.length;o--;)delete g[f][a[o]];return g()};c[p]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(h[f]=o(t),n=new h,h[f]=null,n[p]=t):n=g(),void 0===e?n:i(n,e)}},"7dd0":function(t,e,n){"use strict";var r=n("23e7"),o=n("9ed3"),i=n("e163"),a=n("d2bb"),c=n("d44e"),l=n("9112"),u=n("6eeb"),s=n("b622"),f=n("c430"),d=n("3f8c"),p=n("ae93"),h=p.IteratorPrototype,v=p.BUGGY_SAFARI_ITERATORS,g=s("iterator"),m="keys",b="values",y="entries",w=function(){return this};t.exports=function(t,e,n,s,p,x,S){o(n,e,s);var E,O,D,_=function(t){if(t===p&&P)return P;if(!v&&t in A)return A[t];switch(t){case m:case b:case y:return function(){return new n(this,t)}}return function(){return new n(this)}},C=e+" Iterator",T=!1,A=t.prototype,I=A[g]||A["@@iterator"]||p&&A[p],P=!v&&I||_(p),M="Array"==e&&A.entries||I;if(M&&(E=i(M.call(new t)),h!==Object.prototype&&E.next&&(f||i(E)===h||(a?a(E,h):"function"!=typeof E[g]&&l(E,g,w)),c(E,C,!0,!0),f&&(d[C]=w))),p==b&&I&&I.name!==b&&(T=!0,P=function(){return I.call(this)}),f&&!S||A[g]===P||l(A,g,P),d[e]=P,p)if(O={values:_(b),keys:x?P:_(m),entries:_(y)},S)for(D in O)(v||T||!(D in A))&&u(A,D,O[D]);else r({target:e,proto:!0,forced:v||T},O);return O}},"7f9a":function(t,e,n){var r=n("da84"),o=n("8925"),i=r.WeakMap;t.exports="function"==typeof i&&/native code/.test(o(i))},"825a":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},"83ab":function(t,e,n){var r=n("d039");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},8418:function(t,e,n){"use strict";var r=n("c04e"),o=n("9bf2"),i=n("5c6c");t.exports=function(t,e,n){var a=r(e);a in t?o.f(t,a,i(0,n)):t[a]=n}},"861d":function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},8875:function(t,e,n){var r,o;"undefined"!=typeof self&&self,void 0===(o="function"==typeof(r=function(){return function t(){var e=Object.getOwnPropertyDescriptor(document,"currentScript");if(!e&&"currentScript"in document&&document.currentScript)return document.currentScript;if(e&&e.get!==t&&document.currentScript)return document.currentScript;try{throw new Error}catch(t){var n,r,o,i=/.*at [^(]*\((.*):(.+):(.+)\)$/gi.exec(t.stack)||/@([^@]*):(\d+):(\d+)\s*$/gi.exec(t.stack),a=i&&i[1]||!1,c=i&&i[2]||!1,l=document.location.href.replace(document.location.hash,""),u=document.getElementsByTagName("script");a===l&&(n=document.documentElement.outerHTML,r=new RegExp("(?:[^\\n]+?\\n){0,"+(c-2)+"}[^<]* - - - - - - diff --git a/NearBeach/templates/NearBeach/partials/header.html b/NearBeach/templates/NearBeach/partials/header.html index 3091d7933..71aa23c9f 100644 --- a/NearBeach/templates/NearBeach/partials/header.html +++ b/NearBeach/templates/NearBeach/partials/header.html @@ -87,6 +87,10 @@
  • Groups
  • Permission Sets
  • Users
  • +
  • +
  • Diagnostic Information
  • +
  • +
  • Object Status List
  • {% endif %} diff --git a/NearBeach/templates/NearBeach/public/public_requirement_item_information.html b/NearBeach/templates/NearBeach/public/public_requirement_item_information.html new file mode 100644 index 000000000..b2c16534d --- /dev/null +++ b/NearBeach/templates/NearBeach/public/public_requirement_item_information.html @@ -0,0 +1,16 @@ +{% extends "NearBeach/partials/template.html" %} +{% load static %} +{% block content %} +
    + +
    +{% endblock %} diff --git a/NearBeach/tests/tests_user_permissions/test_admin_user.py b/NearBeach/tests/tests_user_permissions/test_admin_user.py index 1ed0a392e..86e8cec0b 100644 --- a/NearBeach/tests/tests_user_permissions/test_admin_user.py +++ b/NearBeach/tests/tests_user_permissions/test_admin_user.py @@ -104,7 +104,9 @@ def test_basic_permissions_as_admin(self): URLTest("update_user_password", [], {"username": 1, "password": "Test1234$"}, 200, "POST"), # URLTest("update_user_password", [], {}, 400, "POST"), # Get 200 http code for some reason? URLTest("profile_update_data", [], {"username": 1, "first_name": "Admin", "last_name": "Admin", "theme": "dark"}, 200, "POST"), - + URLTest("diagnostic_information_email_test", [], {}, 200, "POST"), + URLTest("diagnostic_information", [], {}, 200, "GET"), + # URLTest("diagnostic_information_upload_test", [], {}, 200, "POST"), ] # Loop through each url to test to make sure the decorator is applied diff --git a/NearBeach/tests/tests_user_permissions/test_redirection_of_non_logged_in_users.py b/NearBeach/tests/tests_user_permissions/test_redirection_of_non_logged_in_users.py index 8abbf5e42..ff83ae314 100644 --- a/NearBeach/tests/tests_user_permissions/test_redirection_of_non_logged_in_users.py +++ b/NearBeach/tests/tests_user_permissions/test_redirection_of_non_logged_in_users.py @@ -224,10 +224,12 @@ def test_objects_post(self): c.post(reverse("bug_list", args=["project", 1])), c.post(reverse("customer_list", args=["project", 1])), c.post(reverse("customer_list_all", args=["project", 1])), + c.get(reverse("delete_note", args=[1])), c.post(reverse("link_list", args=["project", 1, "task"])), c.post(reverse("note_list", args=["project", 1])), c.post(reverse("object_link_list", args=["project", 1])), c.post(reverse("query_bug_client", args=["project", 1])), + c.get(reverse("update_note", args=[1]), data={"object_note_id": 1, "object_note": ""}), c.post(reverse("user_list", args=["project", 1])), c.post(reverse("lead_user_list")), ] diff --git a/NearBeach/tests/tests_user_permissions/test_team_leader.py b/NearBeach/tests/tests_user_permissions/test_team_leader.py index c3f86754d..8b981b217 100644 --- a/NearBeach/tests/tests_user_permissions/test_team_leader.py +++ b/NearBeach/tests/tests_user_permissions/test_team_leader.py @@ -113,6 +113,9 @@ def test_notification_pages_redirect_to_dashboard(self): URLTest("search_notification", "/", [], {}, 302, 200, "GET"), URLTest("new_notification", "/", [], {}, 302, 200, "GET"), URLTest("notification_information", "/", [1], {}, 302, 200, "GET"), + URLTest("diagnostic_information_email_test", "/", [], {}, 302, 200, "POST"), + URLTest("diagnostic_information", "/", [], {}, 302, 200, "GET"), + URLTest("diagnostic_information_upload_test", "/", [], {}, 302, 200, "POST"), ] # Loop through each url to test to make sure the decorator is applied diff --git a/NearBeach/tests/tests_views/tests_note/__init__.py b/NearBeach/tests/tests_views/tests_note/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/NearBeach/tests/tests_views/tests_note/test_note.py b/NearBeach/tests/tests_views/tests_note/test_note.py new file mode 100644 index 000000000..208e8406d --- /dev/null +++ b/NearBeach/tests/tests_views/tests_note/test_note.py @@ -0,0 +1,85 @@ +from django.test import TestCase, Client +from django.urls import reverse + +# Declaration of Username and Password +username = "team_leader" +password = "Test1234$" +long_string = """ + There once was a cat called Socks, she liked to eat treats whilst on stream. People liked to feed her treats because + she was adoriable. Currently she is licking my arm, I think because she enjoyed the treats she got on stream. Socks + does like to every now and then meow into the microphone. +""" + + +def login_user(c: object, self: object) -> object: + response = c.post( + reverse("login"), + self.credentials, + follow=True, + ) + self.assertTrue(response.context["user"].is_active) + + +class TestNote(TestCase): + fixtures = ["NearBeach_basic_setup.json"] + + def setUp(self): + self.credentials = {"username": username, "password": password} + + def test_note_delete_fail(self): + """ + The following test will try and delete a note they don't have access too. It should fail + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post(reverse("delete_note", args=["2"])) + self.assertEqual(response.status_code, 403) + + def test_note_update_fail(self): + """ + The following test will try and delete a note they don't have access too. It should fail + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post( + reverse("update_note", args=["2"]), + data={'object_note_id': 2, 'object_note': 'Hello World'} + ) + self.assertEqual(response.status_code, 403) + + def test_note_delete_success(self): + """ + The following test will try and delete a note they have access too. It should pass + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post(reverse("delete_note", args=["3"])) + self.assertEqual(response.status_code, 200) + + def test_note_update_success(self): + """ + The following test will try and delete a note they have access too. It should pass + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post( + reverse("update_note", args=["3"]), + data={'object_note_id': 3, 'object_note': 'Hello World'} + ) + self.assertEqual(response.status_code, 200) diff --git a/NearBeach/tests/tests_views/tests_object_data/test_object_data.py b/NearBeach/tests/tests_views/tests_object_data/test_object_data.py index f577993b5..973ce5779 100644 --- a/NearBeach/tests/tests_views/tests_object_data/test_object_data.py +++ b/NearBeach/tests/tests_views/tests_object_data/test_object_data.py @@ -1,7 +1,6 @@ from django.test import TestCase, Client from django.urls import reverse - # Declaration of Username and Password username = "team_leader" password = "Test1234$" @@ -68,7 +67,7 @@ def test_incorrect_destination_data(self): for url in url_list: with self.subTest(url): # Get data of wrong location - gets a 403 - response = c.post(reverse(url, args=["taks", 1])) + response = c.post(reverse(url, args=["task", 1])) self.assertEqual(response.status_code, 403) def test_incorrect_destination_data__link_list(self): @@ -83,7 +82,7 @@ def test_incorrect_destination_data__link_list(self): login_user(c, self) # Get data of wrong location - gets a 403 - response = c.post(reverse("link_list", args=["taks", 1, "project"])) + response = c.post(reverse("link_list", args=["task", 1, "project"])) self.assertEqual(response.status_code, 403) def test_correct_destination_data__link_list(self): @@ -98,7 +97,7 @@ def test_correct_destination_data__link_list(self): login_user(c, self) # Get data of wrong location - gets a 403 - response = c.post(reverse("link_list", args=["task", 1, "project"])) + response = c.post(reverse("link_list", args=["task", 2, "project"])) self.assertEqual(response.status_code, 200) def test_correct_object_data__without_forms(self): @@ -133,7 +132,33 @@ def test_correct_object_data__without_forms(self): for url in url_list: with self.subTest(url): # Get data of wrong location - gets a 403 - response = c.post(reverse(url, args=["task", 1])) + response = c.post(reverse(url, args=["task", 2])) + self.assertEqual(response.status_code, 200) + + def test_correct_object_data__without_forms_and_args(self): + """ + The following test will make sure; + 1. Each object data function will work correctly when given the correct; + b. Description + c. Location + Form data is not required for these tests. + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # List or URLS + url_list = [ + "bug_client_list", + "tag_list_all", + ] + + # Loop through each url to test to make sure the decorator is applied + for url in url_list: + with self.subTest(url): + # Get data of wrong location - gets a 403 + response = c.post(reverse(url)) self.assertEqual(response.status_code, 200) def test_correct_object_data__with_forms(self): @@ -151,6 +176,16 @@ def test_correct_object_data__with_forms(self): # List or URLS data_list = [ + { + "url": "add_bug", + "formData": { + "bug_client": 1, + "bug_id": 1, + "bug_description": "Test", + "bug_status": "In Progress" + } + }, + {"url": "add_tags", "formData": {"tag_id": 1}}, {"url": "add_customer", "formData": {"customer": 1}}, {"url": "add_group", "formData": {"group_list": [1, 2]}}, { @@ -171,7 +206,6 @@ def test_correct_object_data__with_forms(self): with self.subTest(data): # Get data of wrong location - gets a 403 response = c.post( - reverse(data["url"], args=["task", 1]), data["formData"] + reverse(data["url"], args=["task", 2]), data["formData"] ) - reverseUrl = reverse(data["url"], args=["task", 1]) self.assertEqual(response.status_code, 200) diff --git a/NearBeach/tests/tests_views/tests_public/__init__.py b/NearBeach/tests/tests_views/tests_public/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/NearBeach/tests/tests_views/tests_public/test_public_view.py b/NearBeach/tests/tests_views/tests_public/test_public_view.py new file mode 100644 index 000000000..7076356ad --- /dev/null +++ b/NearBeach/tests/tests_views/tests_public/test_public_view.py @@ -0,0 +1,143 @@ +from django.test import TestCase, Client +from django.urls import reverse + +# Declaration of Username and Password +username = "team_leader" +password = "Test1234$" + + +def login_user(c: object, self: object) -> object: + response = c.post( + reverse("login"), + self.credentials, + follow=True, + ) + self.assertTrue(response.context["user"].is_active) + + +class PublicViewTests(TestCase): + fixtures = ["NearBeach_basic_setup.json"] + + def setUp(self): + # Login + self.credentials = {"username": username, "password": password} + + # Setup the client + self.client = Client() + + login_user(self.client, self) + + def test_create_public_link_fail(self): + """ + We are creating a public link against an object we do not have access too + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post(reverse("create_public_link", args=["project", 1])) + self.assertEqual(response.status_code, 403) + + def test_create_public_links_list_fail(self): + """ + We are creating a public link against an object we do not have access too + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post(reverse("get_public_links", args=["project", 1])) + self.assertEqual(response.status_code, 403) + + def test_update_public_link_list_fail(self): + """ + We are creating a public link against an object we do not have access too + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post( + reverse("update_public_link", args=["project", 1]), + data={"public_link_id": "3d7346c4-05b6-41df-816a-eff814d9bbd0", "public_link_is_active": "False"} + ) + self.assertEqual(response.status_code, 403) + + def test_delete_public_link_fail(self): + """ + We are creating a public link against an object we do not have access too + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post( + reverse("delete_public_link", args=["project", 1]), + data={"public_link_id": "3d7346c4-05b6-41df-816a-eff814d9bbd0"} + ) + self.assertEqual(response.status_code, 403) + + def test_create_public_link_pass(self): + """ + We are creating a public link against an object we have access too. + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post(reverse("create_public_link", args=["project", 2])) + self.assertEqual(response.status_code, 200) + + def test_create_public_links_list_success(self): + """ + We are creating a public link against an object we do not have access too + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post(reverse("get_public_links", args=["project", 2])) + self.assertEqual(response.status_code, 200) + + def test_delete_public_link_success(self): + """ + We are creating a public link against an object we do not have access too + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + # Get data of wrong location - gets a 403 + response = c.post( + reverse("delete_public_link", args=["project", 2]), + data={"public_link_id": "5f369dc9-a0bb-416d-9779-92576d0500bb"} + ) + self.assertEqual(response.status_code, 200) + + def test_update_public_links_list_success(self): + """ + We are creating a public link against an object we do not have access too + """ + c = Client() + + # User wil be logged in + login_user(c, self) + + response = c.post( + reverse("update_public_link", args=["project", 2]), + data={"public_link_id": "5f369dc9-a0bb-416d-9779-92576d0500bb", "public_link_is_active": "False"} + ) + self.assertEqual(response.status_code, 200) \ No newline at end of file diff --git a/NearBeach/tests/tests_views/tests_public/test_public_views_no_login.py b/NearBeach/tests/tests_views/tests_public/test_public_views_no_login.py new file mode 100644 index 000000000..c0e109e2d --- /dev/null +++ b/NearBeach/tests/tests_views/tests_public/test_public_views_no_login.py @@ -0,0 +1,42 @@ +from django.test import TestCase, Client +from django.urls import reverse +from collections import namedtuple + + +class PublicViewNoLoginTests(TestCase): + fixtures = ["NearBeach_basic_setup.json"] + + def test_public_links_as_open_to_public(self): + kwargsTest = namedtuple( + "kwargsTest", + ["destination","location_id", "public_link_id"], + ) + + data_list = [ + kwargsTest("requirement", 1, "fbda2f94-be7b-41e5-b93a-3ce65516d09d"), + kwargsTest("requirement", 2, "5435086c-a145-4540-bc71-35a0fd0ee171"), + kwargsTest("requirement_item", 1, "aba74809-aae5-4fc4-8929-5fd835fefa22"), + kwargsTest("requirement_item", 2, "9b6a9317-df46-453f-aa5b-6f33b77c28c4"), + kwargsTest("project", 1, "3d7346c4-05b6-41df-816a-eff814d9bbd0"), + kwargsTest("project", 2, "5f369dc9-a0bb-416d-9779-92576d0500bb"), + kwargsTest("task", 1, "1c1067e9-563f-4419-9dac-e87d757ecb37"), + kwargsTest("task", 2, "c5994697-a7e6-4e54-b8b1-4dee7315d7ea"), + kwargsTest("kanban_card", 1, "feb8f0e1-369a-4934-8208-9de39f9dfa98"), + kwargsTest("kanban_board", 1, "755ee6ea-7eac-4e8b-9c19-fbdba2dd290d"), + kwargsTest("kanban_card", 2, "37a7cf65-c732-4e67-b16f-97d77329bdda"), + kwargsTest("kanban_board", 2, "57fea1be-1cbb-4583-8381-9609aa58334b"), + ] + + # Loop through each url to test to make sure the decorator is applied + for data in data_list: + with self.subTest(data): + response = self.client.get( + reverse("public_link", kwargs={ + "destination": data.destination, + "location_id": data.location_id, + "public_link_id": data.public_link_id + }), + follow=True, + ) + + self.assertEqual(response.status_code, 200) diff --git a/NearBeach/urls.py b/NearBeach/urls.py index 5732711ff..d2e119d7f 100644 --- a/NearBeach/urls.py +++ b/NearBeach/urls.py @@ -8,6 +8,7 @@ card_views, customer_views, dashboard_views, + diagnostic_views, document_views, error_views, group_views, @@ -29,7 +30,7 @@ tag_views, task_views, user_setting_views, - user_views, + user_views, object_status_editor_views, ) # The following two imports are for the static files @@ -139,6 +140,22 @@ dashboard_views.users_with_no_groups, name="users_with_no_groups", ), + # Diagnostic Page + path( + "diagnostic_information/", + diagnostic_views.diagnostic_information, + name="diagnostic_information", + ), + path( + "diagnostic_information/email_test/", + diagnostic_views.diagnostic_email_test, + name="diagnostic_information_email_test", + ), + path( + "diagnostic_information/upload_test/", + diagnostic_views.diagnostic_upload_test, + name="diagnostic_information_upload_test", + ), # Documentation path( "documentation///add_folder/", @@ -312,6 +329,37 @@ # Authentication path("login", authentication_views.login, name="login"), path("logout", authentication_views.logout, name="logout"), + # Object Status + path( + "object_status_information//", + object_status_editor_views.object_status_information, + name="object_status_information", + ), + path( + "object_status_information//create/", + object_status_editor_views.object_status_create, + name="object_status_create", + ), + path( + "object_status_information//delete/", + object_status_editor_views.object_status_delete, + name="object_status_delete", + ), + path( + "object_status_information//reorder/", + object_status_editor_views.object_status_reorder, + name="object_status_reorder", + ), + path( + "object_status_information//update/", + object_status_editor_views.object_status_update, + name="object_status_update", + ), + path( + "object_status_list/", + object_status_editor_views.object_status_list, + name="object_status_list" + ), # Permission Sets path( "permission_set_information//", @@ -408,8 +456,8 @@ path("new_task/save/", task_views.new_task_save, name="new_task_save"), path("new_user/", user_views.new_user, name="new_user"), path("new_user/save/", user_views.new_user_save, name="new_user_save"), - path("note/delete/", note_views.delete_note, name="delete_note"), - path("note/update/", note_views.update_note, name="update_note"), + path("note/delete//", note_views.delete_note, name="delete_note"), + path("note/update//", note_views.update_note, name="update_note"), path( "notification_information/delete/", notification_views.notification_information_delete, @@ -616,7 +664,7 @@ name="get_public_links", ), path( - "public_data/update_link/", + "public_data///update_link/", public_views.update_public_link, name="update_public_link", ), diff --git a/NearBeach/views/admin_views.py b/NearBeach/views/admin_views.py index bfcaee63f..a1fd6686b 100644 --- a/NearBeach/views/admin_views.py +++ b/NearBeach/views/admin_views.py @@ -10,8 +10,7 @@ ) from NearBeach.models import UserGroup from NearBeach.views.tools.internal_functions import get_user_permissions - -from NearBeach.decorators.check_user_permissions import check_user_admin_permissions +from NearBeach.decorators.check_user_permissions.admin_permissions import check_user_admin_permissions import itertools import json @@ -21,13 +20,13 @@ @login_required(login_url="login", redirect_field_name="") @check_user_admin_permissions(3, "administration_create_user") def add_user(request, *args, **kwargs): - ''' + """ Adds a user to either; - Multiple groups and/or - Multiple permission sets :param request: :return: Successful result - ''' + """ form = AdminAddUserForm(request.POST) if not form.is_valid(): return HttpResponseBadRequest(form.errors) diff --git a/NearBeach/views/authentication_views.py b/NearBeach/views/authentication_views.py index dfeff2335..c3c899bbd 100644 --- a/NearBeach/views/authentication_views.py +++ b/NearBeach/views/authentication_views.py @@ -1,5 +1,6 @@ # Import Forms -from ..forms import PermissionSet, Group, LoginForm, User +from django.contrib.auth import get_user_model +from ..forms import PermissionSet, Group, LoginForm from ..models import UserGroup, Notification, Organisation from django.contrib.auth.models import User @@ -11,13 +12,15 @@ from django.urls import reverse from django.db.models import Q from random import SystemRandom -from NearBeach.decorators.check_user_permissions import check_permission_denied +from NearBeach.decorators.check_user_permissions.permission_denied import check_permission_denied # Import Python Libraries import json import urllib.parse import datetime +User = get_user_model() + def check_first_time_login(request): """ @@ -225,6 +228,9 @@ def login(request): # POST if request.method == "POST" and form.is_valid(): + # Create empty user - it will be false + user = False + # Check if user passes recaptcha if check_recaptcha(request.POST) is True: # Looks like we can authenticate the user @@ -236,7 +242,7 @@ def login(request): if user is not None: auth.login(request, user) - # Just double checking. :) + # Just double-checking. :) if request.user.is_authenticated: # Check to make sure it isn't first time login -> need to setup functionalities check_first_time_login(request) @@ -245,7 +251,7 @@ def login(request): user_group_count = len( UserGroup.objects.filter( is_deleted=False, - username_id__in=User.objects.filter(username=username).values('id'), + username=user, ) ) diff --git a/NearBeach/views/card_views.py b/NearBeach/views/card_views.py index f175b81f0..58efc6eac 100644 --- a/NearBeach/views/card_views.py +++ b/NearBeach/views/card_views.py @@ -4,14 +4,17 @@ from NearBeach.models import KanbanCard + @login_required(login_url="login", redirect_field_name="") @require_http_methods(["GET"]) def card_information(request, card_id): - ''' + """ Will get the card information, and redirect to the correct kanban board If there is no card - return a 404. - ''' + + No permission checking here, as that is done at the kanban board information level + """ card_results = get_object_or_404(KanbanCard, kanban_card_id=card_id) # Using the kanban board id - we can now go to the kanban board diff --git a/NearBeach/views/change_task_views.py b/NearBeach/views/change_task_views.py index b53e620a0..8465e6e39 100644 --- a/NearBeach/views/change_task_views.py +++ b/NearBeach/views/change_task_views.py @@ -9,14 +9,13 @@ from NearBeach.forms import ChangeTaskIsDowntimeForm, ChangeTaskStatusForm, ChangeTaskForm, ChangeTaskDescriptionForm, ChangeTaskRequiredByForm from NearBeach.models import ChangeTask, RequestForChange, User from NearBeach.views.theme_views import get_theme - -from NearBeach.decorators.check_user_permissions import check_change_task_permissions +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions import json @login_required(login_url="login", redirect_field_name="") -@check_change_task_permissions(min_permission_level=1) +@check_specific_object_permissions(min_permission_level=1, object_lookup="change_task") def change_task_information(request, change_task_id, *args, **kwargs): """ Render the Change Task information page @@ -67,7 +66,7 @@ def change_task_information(request, change_task_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_change_task_permissions(min_permission_level=4) +@check_specific_object_permissions(min_permission_level=4, object_lookup="change_task") def change_task_delete(request, change_task_id, *args, **kwargs): """ A simple function to delete the change task @@ -86,7 +85,7 @@ def change_task_delete(request, change_task_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_change_task_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="change_task") def change_task_save(request, change_task_id, *args, **kwargs): """ A simple POST function where the user can save the change task data @@ -128,7 +127,7 @@ def change_task_save(request, change_task_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_change_task_permissions(min_permission_level=1) +@check_specific_object_permissions(min_permission_level=1, object_lookup="change_task") def get_change_task_list(request, change_task_id, *args, **kwargs): """ A POST node to get a list of all change tasks assigned to an RFC @@ -154,7 +153,7 @@ def get_change_task_list(request, change_task_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_change_task_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="change_task") def update_description(request, change_task_id, *args, **kwargs): """ A POST node to update the change task description @@ -178,7 +177,7 @@ def update_description(request, change_task_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_change_task_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="change_task") def update_is_downtime(request, change_task_id, *args, **kwargs): form = ChangeTaskIsDowntimeForm(request.POST) if not form.is_valid(): @@ -196,7 +195,7 @@ def update_is_downtime(request, change_task_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_change_task_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="change_task") def update_required_by(request, change_task_id, *args, **kwargs): form = ChangeTaskRequiredByForm(request.POST) if not form.is_valid(): @@ -214,7 +213,7 @@ def update_required_by(request, change_task_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_change_task_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="change_task") def update_status(request, change_task_id, *args, **kwargs): """ A POST node to update the change task status diff --git a/NearBeach/views/customer_views.py b/NearBeach/views/customer_views.py index d4d563979..f6315e086 100644 --- a/NearBeach/views/customer_views.py +++ b/NearBeach/views/customer_views.py @@ -5,7 +5,7 @@ from django.urls import reverse from django.views.decorators.http import require_http_methods -from NearBeach.decorators.check_user_permissions import check_user_customer_permissions +from NearBeach.decorators.check_user_permissions.customer_permissions import check_user_customer_permissions from NearBeach.forms import CustomerForm, NewCustomerForm, ProfilePictureForm from NearBeach.models import Customer, ListOfTitle, Organisation from NearBeach.views.document_views import handle_document_permissions diff --git a/NearBeach/views/diagnostic_views.py b/NearBeach/views/diagnostic_views.py new file mode 100644 index 000000000..769073bc4 --- /dev/null +++ b/NearBeach/views/diagnostic_views.py @@ -0,0 +1,93 @@ +import json + +from django.conf import settings +from django.contrib.auth.decorators import login_required, user_passes_test +from django.core.serializers.json import DjangoJSONEncoder +from django.core.mail import send_mail +from django.http import HttpResponse, HttpResponseBadRequest +from django.template import loader +from django.views.decorators.http import require_http_methods + +from NearBeach.forms import DiagnosticUploadTestForm +from NearBeach.views.document_views import handle_document_permissions +from NearBeach.views.theme_views import get_theme + + +@require_http_methods(["POST"]) +@login_required(login_url="login", redirect_field_name="") +@user_passes_test(lambda u: u.is_superuser, login_url="/", redirect_field_name="") +def diagnostic_email_test(request): + try: + default_email = getattr(settings, "DEFAULT_FROM_EMAIL", "error@error.com") + + r = request.user + + send_mail( + "NearBeach Diagnostic Test Email. EOM", + "Please ignore.", + default_email, + [request.user.email], + fail_silently=False, + ) + + return HttpResponse("") + except Exception as e: + return HttpResponseBadRequest(F"Could not send email test. Error -> {e}") + + +@login_required(login_url="login", redirect_field_name="") +@user_passes_test(lambda u: u.is_superuser, login_url="/", redirect_field_name="") +def diagnostic_information(request): + """ + + """ + t = loader.get_template("./NearBeach/diagnostics/diagnostic_information.html") + + allowed_hosts = settings.ALLOWED_HOSTS + csrf_trusted_urls = getattr(settings, "CSRF_TRUSTED_URLS", []) + + c = { + "allowed_hosts": allowed_hosts, + "aws_access_key_id": F"{hasattr(settings, 'AWS_ACCESS_KEY_ID')}".lower(), + "aws_secret_access_key": F"{hasattr(settings, 'AWS_SECRET_ACCESS_KEY')}".lower(), + "aws_s3_endpoint_url": F"{hasattr(settings, 'AWS_S3_ENDPOINT_URL')}".lower(), + "aws_storage_bucket_name": F"{hasattr(settings, 'AWS_STORAGE_BUCKET_NAME')}".lower(), + "azure_storage_connection_string": F"{hasattr(settings, 'AZURE_STORAGE_CONNECTION_STRING')}".lower(), + "azure_storage_container_name": F"{hasattr(settings, 'AZURE_STORAGE_CONTAINER_NAME')}".lower(), + "csrf_trusted_urls": csrf_trusted_urls, + "smtp_email_host": F"{hasattr(settings, 'SMTP_EMAIL_HOST')}".lower(), + "smtp_email_host_user": F"{hasattr(settings, 'SMTP_EMAIL_HOST_USER')}".lower(), + "theme": get_theme(request), + } + + return HttpResponse(t.render(c, request)) + + +@require_http_methods(["POST"]) +@login_required(login_url="login", redirect_field_name="") +@user_passes_test(lambda u: u.is_superuser, login_url="/", redirect_field_name="") +def diagnostic_upload_test(request): + # Get the form data + form = DiagnosticUploadTestForm(request.POST, request.FILES) + if not form.is_valid(): + return HttpResponseBadRequest(form.errors) + + # Submit the form + file = form.cleaned_data["document"] + document_description = str(file) + + # Upload the document + _, document_results = handle_document_permissions( + request, + request.FILES["document"], + file, + document_description, + "new_object", + form.cleaned_data["uuid"], + 0, + ) + + # Send back json data + json_results = json.dumps(list(document_results), cls=DjangoJSONEncoder) + + return HttpResponse(json_results, content_type="application/json") diff --git a/NearBeach/views/group_views.py b/NearBeach/views/group_views.py index 20a91172f..bcd75e7a0 100644 --- a/NearBeach/views/group_views.py +++ b/NearBeach/views/group_views.py @@ -10,7 +10,7 @@ from NearBeach.models import Group from NearBeach.views.tools.internal_functions import get_user_permissions from NearBeach.views.theme_views import get_theme -from NearBeach.decorators.check_user_permissions import check_user_admin_permissions +from NearBeach.decorators.check_user_permissions.admin_permissions import check_user_admin_permissions import json diff --git a/NearBeach/views/kanban_column_views.py b/NearBeach/views/kanban_column_views.py index e58276d74..b742bd3ad 100644 --- a/NearBeach/views/kanban_column_views.py +++ b/NearBeach/views/kanban_column_views.py @@ -2,7 +2,7 @@ from django.core import serializers from django.http import HttpResponse, HttpResponseBadRequest from django.views.decorators.http import require_http_methods -from NearBeach.decorators.check_user_permissions import check_user_permissions +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions from NearBeach.forms import ( NewColumnForm, KanbanColumn, @@ -14,6 +14,7 @@ @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) +@check_specific_object_permissions(min_permission_level=2, object_lookup="kanban_board") def edit_column(request, kanban_column_id, *args, **kwargs): """ Edit the column data for a kanban board @@ -48,7 +49,7 @@ def edit_column(request, kanban_column_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=4, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=4, object_lookup="kanban_board") def delete_column(request, kanban_board_id, *args, **kwargs): """ Deletes the column @@ -90,7 +91,7 @@ def delete_column(request, kanban_board_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=3, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="kanban_board") def new_column(request, kanban_board_id, *args, **kwargs): """ Adding a new column to a kanban board @@ -124,7 +125,7 @@ def new_column(request, kanban_board_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=2, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="kanban_board") def resort_column(request, kanban_board_id, *args, **kwargs): """The functionality that resorts the columns in the database. So when reloading the columns are correct""" # Get data from form diff --git a/NearBeach/views/kanban_level_views.py b/NearBeach/views/kanban_level_views.py index 7e01cd1eb..69a444ece 100644 --- a/NearBeach/views/kanban_level_views.py +++ b/NearBeach/views/kanban_level_views.py @@ -2,13 +2,14 @@ from django.core import serializers from django.http import HttpResponse, HttpResponseBadRequest from django.views.decorators.http import require_http_methods -from NearBeach.decorators.check_user_permissions import check_user_permissions +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions from NearBeach.forms import NewLevelForm, KanbanLevel, DeleteLevelForm, ResortLevelForm from NearBeach.views.tools.internal_functions import KanbanCard @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) +@check_specific_object_permissions(min_permission_level=2, object_lookup="kanban_board") def edit_level(request, kanban_level_id, *args, **kwargs): """ Edits/Updates a kanban level @@ -41,7 +42,7 @@ def edit_level(request, kanban_level_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=4, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=4, object_lookup="kanban_board") def delete_level(request, kanban_board_id, *args, **kwargs): """ Deletes a level @@ -82,7 +83,7 @@ def delete_level(request, kanban_board_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=3, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="kanban_board") def new_level(request, kanban_board_id, *args, **kwargs): """ Creates a new level for a kanban board @@ -114,7 +115,7 @@ def new_level(request, kanban_board_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=2, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="kanban_board") def resort_level(request, kanban_board_id, *args, **kwargs): """ Resorts the levels when updated diff --git a/NearBeach/views/kanban_views.py b/NearBeach/views/kanban_views.py index 9f01f35e1..e5f3ff013 100644 --- a/NearBeach/views/kanban_views.py +++ b/NearBeach/views/kanban_views.py @@ -15,10 +15,7 @@ Requirement, Task, ) -from NearBeach.decorators.check_user_permissions import ( - check_user_permissions, - check_user_kanban_permissions, -) +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions from NearBeach.forms import ( AddKanbanLinkForm, FixCardOrderingForm, @@ -32,7 +29,7 @@ from django.contrib.auth.decorators import login_required from django.core import serializers from django.core.serializers.json import DjangoJSONEncoder -from django.db.models import Max, Q +from django.db.models import Max from django.http import HttpResponse, HttpResponseBadRequest from django.template import loader from django.urls import reverse @@ -42,7 +39,7 @@ @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=2, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="kanban_board") def add_kanban_link(request, kanban_board_id, object_lookup, *args, **kwargs): """ Adds a link to an object to a kanban board @@ -93,7 +90,7 @@ def add_kanban_link(request, kanban_board_id, object_lookup, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=2, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="kanban_board") def archive_kanban_cards(request, *args, **kwargs): """Archive the kanban cards.""" form = KanbanCardArchiveForm(request.POST) @@ -114,7 +111,7 @@ def archive_kanban_cards(request, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=3, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="kanban_board") def check_kanban_board_name(request, *args, **kwargs): """ The following will get a list of all kanban boards with the same name. The idea is that each kanban board should @@ -140,7 +137,7 @@ def check_kanban_board_name(request, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=1, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="kanban_board") def fix_card_ordering(request, *args, **kwargs): form = FixCardOrderingForm(request.POST) if not form.is_valid(): @@ -208,7 +205,7 @@ def get_max_sort_id(kanban_board_id, form): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=3, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="kanban_board") def kanban_close_board(request, kanban_board_id, *args, **kwargs): """Close the kanban board""" kanban_update = KanbanBoard.objects.get(kanban_board_id=kanban_board_id) @@ -221,7 +218,7 @@ def kanban_close_board(request, kanban_board_id, *args, **kwargs): @never_cache @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="kanban_board") def kanban_edit_board(request, kanban_board_id, *args, **kwargs): """Edit the permissions of the kanban board""" user_level = kwargs["user_level"] @@ -246,7 +243,6 @@ def kanban_edit_board(request, kanban_board_id, *args, **kwargs): else: c["kanban_board_is_closed"] = "false" - # Get the template t = loader.get_template("NearBeach/kanban/kanban_edit_board.html") @@ -256,7 +252,7 @@ def kanban_edit_board(request, kanban_board_id, *args, **kwargs): @never_cache @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=1, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="kanban_board") def kanban_information(request, kanban_board_id, *args, open_card_on_load=0, **kwargs,): """ Renders out the kanban board information @@ -301,7 +297,7 @@ def kanban_information(request, kanban_board_id, *args, open_card_on_load=0, **k @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=1, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="kanban_board") def kanban_link_list(request, kanban_board_id, object_lookup, *args, **kwargs): """ Obtains the data for the kanban links @@ -345,7 +341,7 @@ def kanban_link_list(request, kanban_board_id, object_lookup, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=3, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="kanban_board") def kanban_reopen_board(request, kanban_board_id, *args, **kwargs): """Reopen the kanban board""" kanban_update = KanbanBoard.objects.get(kanban_board_id=kanban_board_id) @@ -358,7 +354,7 @@ def kanban_reopen_board(request, kanban_board_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_kanban_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="kanban_card") def move_kanban_card(request, kanban_card_id, *args, **kwargs): """ Updates a kanban kard when it moves @@ -409,7 +405,7 @@ def move_kanban_card(request, kanban_card_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="kanban_card") def new_kanban(request, *args, **kwargs): """ Renders out the new kanban page @@ -455,7 +451,7 @@ def new_kanban(request, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=2, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="kanban_card") def new_kanban_card(request, kanban_board_id, *args, **kwargs): """Add a new kanban card""" kanban_instance = KanbanBoard.objects.get(kanban_board_id=kanban_board_id) @@ -493,7 +489,7 @@ def new_kanban_card(request, kanban_board_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="kanban_card") def new_kanban_save(request, *args, **kwargs): """ Saves the new kanban board @@ -564,7 +560,7 @@ def new_kanban_save(request, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") @require_http_methods(["POST"]) -@check_user_permissions(min_permission_level=2, object_lookup="kanban_board_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="kanban_card") def update_card(request, *args, **kwargs): """ The following function will update the card information diff --git a/NearBeach/views/note_views.py b/NearBeach/views/note_views.py index f12f172b2..d514935d1 100644 --- a/NearBeach/views/note_views.py +++ b/NearBeach/views/note_views.py @@ -1,18 +1,17 @@ +from django.contrib.auth.decorators import login_required from django.http import HttpResponse, HttpResponseBadRequest -from NearBeach.forms import DeleteNoteForm, EditNoteForm +from NearBeach.forms import EditNoteForm from NearBeach.models import ObjectNote +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions -def delete_note(request): - # Check the form - form = DeleteNoteForm(request.POST) - if not form.is_valid(): - return HttpResponseBadRequest(form.errors) - +@login_required(login_url="login", redirect_field_name="") +@check_specific_object_permissions(min_permission_level=1, object_lookup="object_note") +def delete_note(request, object_note_id, *args, **kwargs): # Delete all the objects with the id ObjectNote.objects.filter( - object_note_id=form.cleaned_data["object_note_id"], + object_note_id=object_note_id ).update( is_deleted=True, ) @@ -20,7 +19,9 @@ def delete_note(request): return HttpResponse("") -def update_note(request): +@login_required(login_url="login", redirect_field_name="") +@check_specific_object_permissions(min_permission_level=1, object_lookup="object_note") +def update_note(request, object_note_id, *args, **kwargs): # Check the form form = EditNoteForm(request.POST) if not form.is_valid(): @@ -32,8 +33,8 @@ def update_note(request): ) # Update the data - update_object_note.object_note=form.cleaned_data["object_note"] - update_object_note.change_user=request.user + update_object_note.object_note = form.cleaned_data["object_note"] + update_object_note.change_user = request.user update_object_note.save() return HttpResponse("") diff --git a/NearBeach/views/object_data_views.py b/NearBeach/views/object_data_views.py index 467eaac9c..d396a5276 100644 --- a/NearBeach/views/object_data_views.py +++ b/NearBeach/views/object_data_views.py @@ -1,4 +1,6 @@ from collections import namedtuple + +from django.contrib.auth import get_user_model from django.core.exceptions import PermissionDenied from django.contrib.auth.decorators import login_required from django.core import serializers @@ -12,6 +14,10 @@ import urllib import json +from NearBeach.decorators.check_user_permissions.object_permissions import ( + check_specific_object_permissions, + check_user_generic_permissions +) from NearBeach.models import ( Bug, BugClient, @@ -46,7 +52,6 @@ AddUserForm, RemoveCustomerForm, RemoveGroupForm, - User, DeleteBugForm, DeleteLinkForm, DeleteTagForm, @@ -56,6 +61,8 @@ RemoveLinkForm, ) +User = get_user_model() + from NearBeach.views.tools.lookup_functions import ( lookup_project, lookup_requirement, @@ -75,7 +82,8 @@ @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def add_bug(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def add_bug(request, destination, location_id, *args, **kwargs): """ Function to add a bug to an object :param: destination: Defines what object the bug is getting added too @@ -112,7 +120,8 @@ def add_bug(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def add_customer(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def add_customer(request, destination, location_id, *args, **kwargs): """ Add customer to an object :param: destination: the type of object we are adding the customer too @@ -143,7 +152,8 @@ def add_customer(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def add_group(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def add_group(request, destination, location_id, *args, **kwargs): # Get data from form form = AddGroupForm(request.POST) if not form.is_valid(): @@ -180,7 +190,8 @@ def add_group(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def add_link(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def add_link(request, destination, location_id, *args, **kwargs): """ :param request: :param destination: @@ -287,7 +298,8 @@ def add_link(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def add_notes(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def add_notes(request, destination, location_id, *args, **kwargs): # ADD IN PERMISSIONS HERE! # Fill out the form @@ -334,7 +346,8 @@ def add_notes(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def add_tags(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def add_tags(request, destination, location_id, *args, **kwargs): # Check the data against the form form = AddTagsForm(request.POST) if not form.is_valid(): @@ -374,7 +387,8 @@ def add_tags(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def add_user(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def add_user(request, destination, location_id, *args, **kwargs): # Check the data against the form form = AddUserForm(request.POST) if not form.is_valid(): @@ -410,7 +424,7 @@ def add_user(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -def admin_add_user(request): +def admin_add_user(request, *args, **kwargs): """ :param request: :return: @@ -452,7 +466,8 @@ def admin_add_user(request): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def associated_objects(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def associated_objects(request, destination, location_id, *args, **kwargs): """ :param request: :param destination: @@ -567,7 +582,7 @@ def associated_objects_organisations(location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -def bug_client_list(request): +def bug_client_list(request, *args, **kwargs): bug_client_results = BugClient.objects.filter( is_deleted=False, ) @@ -581,7 +596,8 @@ def bug_client_list(request): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def bug_list(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def bug_list(request, destination, location_id, *args, **kwargs): # Obtain the data dependent on the destination bug_list_results = Bug.objects.filter( is_deleted=False, @@ -660,7 +676,8 @@ def clean_users_from_object(destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def customer_list(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def customer_list(request, destination, location_id, *args, **kwargs): customer_results = get_customer_list(destination, location_id) return HttpResponse( @@ -671,7 +688,8 @@ def customer_list(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def customer_list_all(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def customer_list_all(request, destination, location_id, *args, **kwargs): # Get the organisation dependant on the destination source if destination == "requirement": organisation_results = Organisation.objects.get( @@ -720,7 +738,8 @@ def customer_list_all(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -def delete_bug(request): +@check_user_generic_permissions(min_permission_level=4) +def delete_bug(request, *args, **kwargs): """ Function will delete a bug - this will remove it from the link tab. @@ -741,7 +760,8 @@ def delete_bug(request): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -def delete_link(request): +@check_user_generic_permissions(min_permission_level=4) +def delete_link(request, *args, **kwargs): """ Function will delete a link - this will remove it from the link tab. @@ -762,7 +782,8 @@ def delete_link(request): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -def delete_tag(request): +@check_user_generic_permissions(min_permission_level=4) +def delete_tag(request, *args, **kwargs): # Get form data form = DeleteTagForm(request.POST) if not form.is_valid(): @@ -783,7 +804,7 @@ def delete_tag(request): # Internal function -def get_customer_list(destination, location_id): +def get_customer_list(destination, location_id, *args, **kwargs): # Get a list of all objects assignments dependant on the destination object_customers = ObjectAssignment.objects.filter( is_deleted=False, @@ -799,7 +820,7 @@ def get_customer_list(destination, location_id): # Internal function -def get_group_and_user_list(destination, location_id): +def get_group_and_user_list(destination, location_id, *args, **kwargs): # Get the data dependant on the objects lookup object_group_results = get_group_list(destination, location_id) object_user_results = get_user_list(destination, location_id) @@ -827,7 +848,7 @@ def get_group_and_user_list(destination, location_id): # Internal function -def get_group_list(destination, location_id): +def get_group_list(destination, location_id, *args, **kwargs): object_results = ObjectAssignment.objects.filter( is_deleted=False, ) @@ -853,7 +874,7 @@ def get_group_list(destination, location_id): # Internal Function -def get_user_list(destination, location_id): +def get_user_list(destination, location_id, *args, **kwargs): # Get the data we want object_results = ObjectAssignment.objects.filter( is_deleted=False, @@ -883,7 +904,7 @@ def get_user_list(destination, location_id): # Internal Function -def get_user_list_all(destination, location_id): +def get_user_list_all(destination, location_id, *args, **kwargs): # Get a list of users we want to exclude object_results = ObjectAssignment.objects.filter( is_deleted=False, @@ -944,6 +965,7 @@ def get_user_list_all(destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() +@check_user_generic_permissions(min_permission_level=1) def group_and_user_data(request, destination, location_id, *args, **kwargs): return JsonResponse( get_group_and_user_list( @@ -955,7 +977,8 @@ def group_and_user_data(request, destination, location_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -def lead_user_list(request): +@check_user_generic_permissions(min_permission_level=1) +def lead_user_list(request, *args, **kwargs): """ :param request: :return: @@ -997,7 +1020,8 @@ def lead_user_list(request): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def link_list(request, destination, location_id, object_lookup): +@check_user_generic_permissions(min_permission_level=1) +def link_list(request, destination, location_id, object_lookup, *args, **kwargs): # Get user groups user_group_results = UserGroup.objects.filter( is_deleted=False, @@ -1017,7 +1041,7 @@ def link_list(request, destination, location_id, object_lookup): # Internal function -def link_object(object_assignment_submit, destination, location_id): +def link_object(object_assignment_submit, destination, location_id, *args, **kwargs): """ This is an internal function - depending on the destination, depends on what we are linking in the object_association_submit @@ -1047,7 +1071,8 @@ def link_object(object_assignment_submit, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def note_list(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def note_list(request, destination, location_id, *args, **kwargs): # Everyone should have access to the notes section. # Get the notes dependent on the user destination and location @@ -1083,7 +1108,8 @@ def note_list(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def object_link_list(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def object_link_list(request, destination, location_id, *args, **kwargs): """ :param request: :param destination: @@ -1204,7 +1230,8 @@ def object_link_list(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def query_bug_client(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def query_bug_client(request, destination, location_id, *args, **kwargs): # Insert data into form form = QueryBugClientForm(request.POST) @@ -1273,7 +1300,8 @@ def query_bug_client(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def remove_customer(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def remove_customer(request, destination, location_id, *args, **kwargs): # Get the form data form = RemoveCustomerForm(request.POST) if not form.is_valid(): @@ -1299,7 +1327,8 @@ def remove_customer(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def remove_group(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def remove_group(request, destination, location_id, *args, **kwargs): # Get the form data form = RemoveGroupForm(request.POST) if not form.is_valid(): @@ -1334,7 +1363,8 @@ def remove_group(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def remove_link(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def remove_link(request, destination, location_id, *args, **kwargs): form = RemoveLinkForm(request.POST) if not form.is_valid(): return HttpResponseBadRequest(form.errors) @@ -1352,7 +1382,8 @@ def remove_link(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def remove_user(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def remove_user(request, destination, location_id, *args, **kwargs): # Get the form data form = RemoveUserForm(request.POST) if not form.is_valid(): @@ -1388,7 +1419,8 @@ def remove_user(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def tag_list(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def tag_list(request, destination, location_id, *args, **kwargs): # Get the data we want tag_results = Tag.objects.filter( is_deleted=False, @@ -1407,7 +1439,7 @@ def tag_list(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -def tag_list_all(request): +def tag_list_all(request, *args, **kwargs): # Get the data we want tag_results = Tag.objects.filter( is_deleted=False, @@ -1422,16 +1454,9 @@ def tag_list_all(request): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") @check_destination() -def user_list(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def user_list(request, destination, location_id, *args, **kwargs): # Get the data we want user_results = get_user_list(destination, location_id) return HttpResponse(user_results, content_type="application/json") - - - -# # Get Data we want - -# # Send back json data - -# return HttpResponse(json_results, content_type="application/json") diff --git a/NearBeach/views/object_status_editor_views.py b/NearBeach/views/object_status_editor_views.py new file mode 100644 index 000000000..c6583a987 --- /dev/null +++ b/NearBeach/views/object_status_editor_views.py @@ -0,0 +1,221 @@ +from django.contrib.auth.decorators import user_passes_test, login_required +from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse +from django.template import loader +from django.db.models import F +from django.core.serializers.json import DjangoJSONEncoder +from django.views.decorators.http import require_http_methods + +from NearBeach.forms import ObjectStatusReorderForm, ObjectStatusCreateForm, ObjectStatusUpdateForm, \ + ObjectStatusDeleteForm +from NearBeach.views.theme_views import get_theme +from NearBeach.models import ( + ListOfRequirementItemStatus, + ListOfRequirementStatus, + ListOfProjectStatus, + ListOfTaskStatus, + RequirementItem, + Requirement, + Project, + Task, +) + +import json + +OBJECT_LOOKUP = { + "requirement_item": ListOfRequirementItemStatus, + "requirement": ListOfRequirementStatus, + "project": ListOfProjectStatus, + "task": ListOfTaskStatus, +} + +OBJECT_OBJECT_LOOKUP = { + "requirement_item": RequirementItem, + "requirement": Requirement, + "project": Project, + "task": Task, +} + + +@require_http_methods(["POST"]) +@login_required(login_url="login", redirect_field_name="") +@user_passes_test(lambda u: u.is_superuser, login_url="/", redirect_field_name="") +def object_status_create(request, destination): + form = ObjectStatusCreateForm(request.POST) + if not form.is_valid(): + return HttpResponseBadRequest(form.errors) + + # Get the length of the object + sort_order = len(OBJECT_LOOKUP[destination].objects.filter( + is_deleted=False, + )) + + object_submit = OBJECT_LOOKUP[destination]() + setattr( + object_submit, + F"{destination}_status", + form.cleaned_data["status"], + ) + setattr( + object_submit, + F"{destination}_higher_order_status", + form.cleaned_data["higher_order_status"] + ) + setattr( + object_submit, + F"{destination}_status_sort_order", + sort_order + ) + + object_submit.save() + + # Send back the data object + object_status_results = OBJECT_LOOKUP[destination].objects.filter( + **{F"{destination}_status_id": getattr(object_submit, F"{destination}_status_id")}, + ).annotate( + higher_order_status=F(F"{destination}_higher_order_status"), + status_id=F(F"{destination}_status_id"), + status=F(F"{destination}_status"), + status_sort_order=F(F"{destination}_status_sort_order"), + ).values( + "higher_order_status", + "status_id", + "status", + "status_sort_order", + ) + + data_results = json.dumps(list(object_status_results), cls=DjangoJSONEncoder) + return JsonResponse(json.loads(data_results), safe=False) + + +@require_http_methods(["POST"]) +@login_required(login_url="login", redirect_field_name="") +@user_passes_test(lambda u: u.is_superuser, login_url="/", redirect_field_name="") +def object_status_delete(request, destination): + form = ObjectStatusDeleteForm(request.POST, destination=destination) + if not form.is_valid(): + return HttpResponseBadRequest(form.errors) + + # Get data from form + status_object = form.cleaned_data["status_id"] + migration_status_object = form.cleaned_data["migration_status_id"] + + # Soft delete the status :) + OBJECT_LOOKUP[destination].objects.filter( + **{F"{destination}_status_id": getattr(status_object, F"{destination}_status_id")}, + ).update( + is_deleted=True, + ) + + # Migrate all objects that have that status to the new status + OBJECT_OBJECT_LOOKUP[destination].objects.filter( + **{F"{destination}_status_id": getattr(status_object, F"{destination}_status_id")}, + ).update( + **{F"{destination}_status_id": getattr(migration_status_object, F"{destination}_status_id")} + ) + + return HttpResponse("") + + +@login_required(login_url="login", redirect_field_name="") +@user_passes_test(lambda u: u.is_superuser, login_url="/", redirect_field_name="") +def object_status_information(request, destination): + t = loader.get_template("./NearBeach/object_status/object_status_information.html") + + object_status_results = OBJECT_LOOKUP[destination].objects.filter( + is_deleted=False, + ).order_by( + F"{destination}_status_sort_order" + ).annotate( + higher_order_status=F(F"{destination}_higher_order_status"), + status_id=F(F"{destination}_status_id"), + status=F(F"{destination}_status"), + status_sort_order=F(F"{destination}_status_sort_order"), + ).values( + "higher_order_status", + "status_id", + "status", + "status_sort_order", + ) + + c = { + "destination": destination, + "nearbeach_title": F"{destination} Status Information", + "need_tinymce": False, + "object_status_results": json.dumps(list(object_status_results), cls=DjangoJSONEncoder), + "theme": get_theme(request), + } + + return HttpResponse(t.render(c, request)) + + +@login_required(login_url="login", redirect_field_name="") +@user_passes_test(lambda u: u.is_superuser, login_url="/", redirect_field_name=None) +def object_status_list(request): + t = loader.get_template("./NearBeach/object_status/object_status_list.html") + + c = { + "nearbeach_title": "Object Status List", + "need_tinymce": False, + "theme": get_theme(request), + } + + return HttpResponse(t.render(c, request)) + + +@require_http_methods(["POST"]) +@login_required(login_url="login", redirect_field_name="") +@user_passes_test(lambda u: u.is_superuser, login_url="/", redirect_field_name="") +def object_status_reorder(request, destination): + form = ObjectStatusReorderForm(request.POST, destination=destination) + if not form.is_valid(): + return HttpResponseBadRequest(form.errors) + + # Extra the data + status_id_list = request.POST.getlist("status_id") + + # Look through the status id list and re-index the order + for index, item in enumerate(status_id_list, start=0): + # Filter for the specific table and field names + status_update = OBJECT_LOOKUP[destination].objects.get( + **{F"{destination}_status_id": item} + ) + + setattr( + status_update, + F"{destination}_status_sort_order", + index + ) + status_update.save() + + return HttpResponse("") + + +@require_http_methods(["POST"]) +@login_required(login_url="login", redirect_field_name="") +@user_passes_test(lambda u: u.is_superuser, login_url="/", redirect_field_name="") +def object_status_update(request, destination): + form = ObjectStatusUpdateForm(request.POST, destination=destination) + if not form.is_valid(): + return HttpResponseBadRequest(form.errors) + + # Extract the status object + status_object = form.cleaned_data["status_id"] + + # Create the ORM to update the status + status_update = OBJECT_LOOKUP[destination].objects.get( + **{F"{destination}_status_id": getattr(status_object, F"{destination}_status_id")} + ) + setattr( + status_update, + F"{destination}_status", + form.cleaned_data["status"], + ) + setattr( + status_update, + F"{destination}_higher_order_status", + form.cleaned_data["higher_order_status"] + ) + + status_update.save() + + return HttpResponse("") diff --git a/NearBeach/views/organisation_views.py b/NearBeach/views/organisation_views.py index 0e34e5b28..7b6af5833 100644 --- a/NearBeach/views/organisation_views.py +++ b/NearBeach/views/organisation_views.py @@ -4,9 +4,7 @@ from django.http import HttpResponse, HttpResponseBadRequest from django.template import loader from django.views.decorators.http import require_http_methods -from NearBeach.decorators.check_user_permissions import ( - check_user_organisation_permissions, -) +from NearBeach.decorators.check_user_permissions.organisation_permissions import check_user_organisation_permissions from NearBeach.forms import OrganisationForm, ProfilePictureForm from NearBeach.models import Organisation, Customer, ListOfTitle from NearBeach.views.document_views import handle_document_permissions diff --git a/NearBeach/views/permission_set_views.py b/NearBeach/views/permission_set_views.py index 3ae9090c7..8091dffc8 100644 --- a/NearBeach/views/permission_set_views.py +++ b/NearBeach/views/permission_set_views.py @@ -5,8 +5,7 @@ from django.views.decorators.http import require_http_methods from django.core import serializers from django.core.serializers.json import DjangoJSONEncoder - -from NearBeach.decorators.check_user_permissions import check_user_admin_permissions +from NearBeach.decorators.check_user_permissions.admin_permissions import check_user_admin_permissions from NearBeach.forms import NewPermissionSetForm, PermissionSetForm from NearBeach.models import ( PermissionSet, diff --git a/NearBeach/views/profile_views.py b/NearBeach/views/profile_views.py index 27d2e6252..9c57f20e6 100644 --- a/NearBeach/views/profile_views.py +++ b/NearBeach/views/profile_views.py @@ -1,3 +1,4 @@ +from django.contrib.auth import get_user_model from django.core import serializers from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse from django.template import loader @@ -5,10 +6,12 @@ from django.views.decorators.http import require_http_methods from django.core.serializers.json import DjangoJSONEncoder -from NearBeach.forms import ProfilePictureForm, User, UpdateUserForm +from NearBeach.forms import ProfilePictureForm, UpdateUserForm from NearBeach.models import UserProfilePicture from NearBeach.views.theme_views import get_theme, update_theme +User = get_user_model() + import json from NearBeach.views.document_views import handle_document_permissions diff --git a/NearBeach/views/project_views.py b/NearBeach/views/project_views.py index fa68cb9ad..e9869de57 100644 --- a/NearBeach/views/project_views.py +++ b/NearBeach/views/project_views.py @@ -9,7 +9,7 @@ from NearBeach.forms import NewProjectForm, ProjectForm from NearBeach.models import Group, UserGroup, ObjectAssignment, ListOfProjectStatus from NearBeach.views.tools.internal_functions import Project, Organisation -from NearBeach.decorators.check_user_permissions import check_user_permissions +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions from NearBeach.views.theme_views import get_theme from NearBeach.views.document_views import transfer_new_object_uploads @@ -17,7 +17,7 @@ @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="project_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="project") def new_project(request, *args, **kwargs): """ :param request: @@ -63,7 +63,7 @@ def new_project(request, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="project_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="project") def new_project_save(request, *args, **kwargs): """ :param request: @@ -78,7 +78,7 @@ def new_project_save(request, *args, **kwargs): project_status = ListOfProjectStatus.objects.filter( is_deleted=False ).order_by( - "project_status_order", + "project_status_sort_order", ) if len(project_status) == 0: @@ -124,7 +124,7 @@ def new_project_save(request, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=1, object_lookup="project_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="project") def project_information(request, project_id, *args, **kwargs): """ :param request: @@ -150,7 +150,7 @@ def project_information(request, project_id, *args, **kwargs): "label", "project_higher_order_status", ).order_by( - "project_status_order" + "project_status_sort_order" ) # Get the organisation results @@ -183,7 +183,7 @@ def project_information(request, project_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=2, object_lookup="project_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="project") def project_information_save(request, project_id, *args, **kwargs): """ :param request: diff --git a/NearBeach/views/public_views.py b/NearBeach/views/public_views.py index 99b618432..88970a117 100644 --- a/NearBeach/views/public_views.py +++ b/NearBeach/views/public_views.py @@ -11,8 +11,6 @@ from NearBeach.decorators.check_destination import check_destination, check_public_destination from NearBeach.views.object_data_views import set_object_from_destination, get_object_from_destination from NearBeach.models import KanbanCard, \ - KanbanColumn, \ - KanbanLevel, \ PublicLink, \ RequirementItem, \ ListOfProjectStatus, \ @@ -23,6 +21,7 @@ ListOfTaskStatus from NearBeach.forms import PublicLinkDeleteForm, PublicLinkUpdateForm from NearBeach.views.kanban_views import get_context as kanban_get_context +from NearBeach.decorators.check_user_permissions.object_permissions import check_user_generic_permissions import json @@ -35,7 +34,8 @@ @login_required(login_url="login", redirect_field_name="") @csrf_protect @check_destination() -def create_public_link(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def create_public_link(request, destination, location_id, *args, **kwargs): # Create new public link submit_public_link = PublicLink( change_user=request.user, @@ -61,7 +61,8 @@ def create_public_link(request, destination, location_id): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -def delete_public_link(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=2) +def delete_public_link(request, destination, location_id, *args, **kwargs): form = PublicLinkDeleteForm(request.POST) if not form.is_valid(): return HttpResponseBadRequest(form.errors) @@ -81,21 +82,21 @@ def delete_public_link(request, destination, location_id): return HttpResponse() -# Internal function -def get_public_context(results): - organisation_results = getattr( - results, - "organisation" - ) - - # Serialise in the if statement - as None can not be serialized - organisation_results = serializers.serialize("json", [organisation_results]) - results = serializers.serialize("json", [results]) - - return { - "organisation_results": organisation_results, - "results": results, - } +# # Internal function +# def get_public_context(results): +# organisation_results = getattr( +# results, +# "organisation" +# ) +# +# # Serialise in the if statement - as None can not be serialized +# organisation_results = serializers.serialize("json", [organisation_results]) +# results = serializers.serialize("json", [results]) +# +# return { +# "organisation_results": organisation_results, +# "results": results, +# } # Internal function @@ -141,7 +142,7 @@ def get_public_context_project(results): "label", "project_higher_order_status", ).order_by( - "project_status_order" + "project_status_sort_order" ) organisation_results = getattr( @@ -208,6 +209,66 @@ def get_public_context_requirement(results): } +def get_public_context_requirement_item(results): + # Get the requirement information + requirement_item_results = RequirementItem.objects.get( + requirement_item_id=results.requirement_item_id + ) + + requirement_results = getattr( + results, + "requirement" + ) + + organisation_results = getattr( + requirement_results, + "organisation" + ) + + status_options = ListOfRequirementItemStatus.objects.filter( + is_deleted=False, + ).annotate( + value=F("requirement_item_status_id"), + label=F("requirement_item_status"), + ).values( + "value", + "label", + "requirement_item_higher_order_status", + ) + + type_options = ListOfRequirementItemType.objects.filter( + is_deleted=False, + ).annotate( + value=F("requirement_item_type_id"), + label=F("requirement_item_type"), + ).values( + "value", + "label", + ) + + # Find out if requirement item is read only + # Condition 1: If parent requirement is closed + # Condition 2: If requirement item is closed + condition_1 = requirement_item_results.requirement.requirement_status.requirement_higher_order_status == "Closed" + condition_2 = requirement_item_results.requirement_item_status.requirement_item_higher_order_status == "Closed" + requirement_item_is_closed = "false" + if condition_1 or condition_2: + requirement_item_is_closed = "true" + + # context + return { + "results": results, + "organisation_results": serializers.serialize("json", [organisation_results]), + "requirement_item_id": requirement_item_results.requirement_item_id, + "requirement_item_is_closed": requirement_item_is_closed, + "requirement_item_results": serializers.serialize( + "json", [requirement_item_results] + ), + "status_options": json.dumps(list(status_options), cls=DjangoJSONEncoder), + "type_options": json.dumps(list(type_options), cls=DjangoJSONEncoder), + } + + # Internal function def get_public_context_task(results): # Get the status data @@ -221,7 +282,7 @@ def get_public_context_task(results): "label", "task_higher_order_status", ).order_by( - "task_status_order", + "task_status_sort_order", ) organisation_results = getattr( @@ -263,7 +324,8 @@ def get_public_link_results(destination, location_id): @login_required(login_url="login", redirect_field_name="") @check_destination() -def get_public_links(request, destination, location_id): +@check_user_generic_permissions(min_permission_level=1) +def get_public_links(request, destination, location_id, *args, **kwargs): # Return the data we have public_link_results = get_public_link_results(destination, location_id) @@ -309,12 +371,14 @@ def public_link(request, destination, location_id, public_link_id, *args, **kwar c = get_public_context_kanban_board(results) elif destination == "requirement": c = get_public_context_requirement(results) + elif destination == "requirement_item": + c = get_public_context_requirement_item(results) elif destination == "project": c = get_public_context_project(results) elif destination == "task": c = get_public_context_task(results) - else: - c = get_public_context(results) + # else: + # c = get_public_context(results) # Add tinymce flag c["need_tinymce"] = True @@ -324,7 +388,8 @@ def public_link(request, destination, location_id, public_link_id, *args, **kwar @login_required(login_url="login", redirect_field_name="") -def update_public_link(request): +@check_user_generic_permissions(min_permission_level=2) +def update_public_link(request, destination, location_id, *args, **kwargs): form = PublicLinkUpdateForm(request.POST) if not form.is_valid(): return HttpResponseBadRequest(form.errors) @@ -333,6 +398,7 @@ def update_public_link(request): uuid = str(form.cleaned_data["public_link_id"]) PublicLink.objects.filter( + **{destination: location_id}, public_link_id=uuid, ).update( public_link_is_active=form.cleaned_data["public_link_is_active"] diff --git a/NearBeach/views/request_for_change_views.py b/NearBeach/views/request_for_change_views.py index ecaee3873..21e20b18d 100644 --- a/NearBeach/views/request_for_change_views.py +++ b/NearBeach/views/request_for_change_views.py @@ -7,7 +7,7 @@ UpdateChangeLeadForm, UpdateRFCStatus, ) -from NearBeach.decorators.check_user_permissions import check_rfc_permissions +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions from NearBeach.models import ( RequestForChange, User, @@ -115,7 +115,7 @@ def get_rfc_context(rfc_id): @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=3) +@check_specific_object_permissions(min_permission_level=3, object_lookup="request_for_change") def new_request_for_change(request, *args, **kwargs): """ :param request: @@ -160,7 +160,7 @@ def new_request_for_change(request, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=3) +@check_specific_object_permissions(min_permission_level=3, object_lookup="request_for_change") def new_request_for_change_save(request, *args, **kwargs): """ :param request: @@ -223,14 +223,14 @@ def new_request_for_change_save(request, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=1) +@check_specific_object_permissions(min_permission_level=1, object_lookup="request_for_change") def rfc_change_task_list(request, rfc_id, *args, **kwargs): # Return data from function get_rfc_change_task return get_rfc_change_task(rfc_id) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="request_for_change") def rfc_deployment(request, rfc_id, *args, **kwargs): """ :param request: @@ -253,7 +253,7 @@ def rfc_deployment(request, rfc_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=1) +@check_specific_object_permissions(min_permission_level=1, object_lookup="request_for_change") def rfc_get_approval_users(request, rfc_id, *args, **kwargs): """ :param request: @@ -290,7 +290,7 @@ def rfc_get_approval_users(request, rfc_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="request_for_change") def rfc_new_change_task(request, rfc_id, *args, **kwargs): """ :param request: @@ -325,7 +325,7 @@ def rfc_new_change_task(request, rfc_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=1) +@check_specific_object_permissions(min_permission_level=1, object_lookup="request_for_change") def rfc_information(request, rfc_id, *args, **kwargs): """ :param request: @@ -350,7 +350,7 @@ def rfc_information(request, rfc_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="request_for_change") def rfc_information_save(request, rfc_id, *args, **kwargs): """ :param request: @@ -390,7 +390,7 @@ def rfc_information_save(request, rfc_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=1) +@check_specific_object_permissions(min_permission_level=1, object_lookup="request_for_change") def rfc_readonly(request, rfc_id, *args, **kwargs): """ :param request: @@ -424,7 +424,7 @@ def rfc_readonly(request, rfc_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="request_for_change") def rfc_save_backout(request, rfc_id, *args, **kwargs): """ :param request: @@ -449,7 +449,7 @@ def rfc_save_backout(request, rfc_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="request_for_change") def rfc_save_implementation(request, rfc_id, *args, **kwargs): """ """ # Check user permissions @@ -473,7 +473,7 @@ def rfc_save_implementation(request, rfc_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="request_for_change") def rfc_save_risk(request, rfc_id, *args, **kwargs): """ """ # CHECK USER PERMISSIONS @@ -501,7 +501,7 @@ def rfc_save_risk(request, rfc_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="request_for_change") def rfc_save_test(request, rfc_id, *args, **kwargs): """ """ # Check user permissions @@ -669,7 +669,7 @@ def rfc_status_waiting_for_approval(rfc_id, rfc_results, request): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="request_for_change") def rfc_update_change_lead(request, rfc_id, *args, **kwargs): # Get the form data form = UpdateChangeLeadForm(request.POST) @@ -707,7 +707,7 @@ def rfc_update_change_lead(request, rfc_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_rfc_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="request_for_change") def rfc_update_status(request, rfc_id, *args, **kwargs): """ Using a simple form, we determine which status we are going to update to diff --git a/NearBeach/views/requirement_item_views.py b/NearBeach/views/requirement_item_views.py index f63709db0..908b64ab1 100644 --- a/NearBeach/views/requirement_item_views.py +++ b/NearBeach/views/requirement_item_views.py @@ -3,13 +3,11 @@ from django.core import serializers from django.core.serializers.json import DjangoJSONEncoder from django.db.models import Q, F -from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseRedirect +from django.http import HttpResponse, HttpResponseBadRequest from django.template import loader -from django.urls import reverse from django.views.decorators.http import require_http_methods -from NearBeach.decorators.check_user_permissions import ( - check_user_requirement_item_permissions, - check_user_permissions, +from NearBeach.decorators.check_user_permissions.object_permissions import ( + check_specific_object_permissions, ) from NearBeach.forms import ( AddRequirementLinkForm, @@ -33,7 +31,7 @@ @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_requirement_item_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="requirement_item") def add_requirement_item_link(request, requirement_item_id, *args, **kwargs): """Obtain form data and validate""" form = AddRequirementLinkForm(request.POST) @@ -93,7 +91,7 @@ def get_requirement_item_links(requirement_item_id): @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="requirement") def new_requirement_item(request, requirement_id, *args, **kwargs): """Check to see if POST""" if not request.method == "POST": @@ -122,7 +120,7 @@ def new_requirement_item(request, requirement_id, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") -@check_user_requirement_item_permissions(min_permission_level=1) +@check_specific_object_permissions(min_permission_level=1, object_lookup="requirement_item") def requirement_item_information(request, requirement_item_id, *args, **kwargs): """ Loads the requirement item information. @@ -203,7 +201,7 @@ def requirement_item_information(request, requirement_item_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_requirement_item_permissions(min_permission_level=2) +@check_specific_object_permissions(min_permission_level=2, object_lookup="requirement_item") def requirement_information_save(request, requirement_item_id, *args, **kwargs): """ The following will save data diff --git a/NearBeach/views/requirement_views.py b/NearBeach/views/requirement_views.py index 053444aa3..36d09279e 100644 --- a/NearBeach/views/requirement_views.py +++ b/NearBeach/views/requirement_views.py @@ -3,11 +3,11 @@ from django.core import serializers from django.core.serializers.json import DjangoJSONEncoder from django.db.models import Q, F, Value as V -from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseRedirect, JsonResponse +from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse from django.template import loader from django.urls import reverse from django.views.decorators.http import require_http_methods -from NearBeach.decorators.check_user_permissions import check_user_permissions +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions from NearBeach.forms import ( AddRequirementLinkForm, NewRequirementForm, @@ -34,7 +34,7 @@ @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=2, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="requirement") def add_requirement_link(request, requirement_id, *args, **kwargs): """Check user form is valid""" form = AddRequirementLinkForm(request.POST) @@ -67,9 +67,9 @@ def add_requirement_link(request, requirement_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=1, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="requirement") def get_requirement_item_links(request, requirement_id, *args, **kwargs): - # Get the object assignment results associated wtih that requirement + # Get the object assignment results associated with that requirement object_assignment_results = ObjectAssignment.objects.filter( Q( is_deleted=False, @@ -80,7 +80,6 @@ def get_requirement_item_links(request, requirement_id, *args, **kwargs): ) ) - # The results we want to send back data_results = [] @@ -128,7 +127,7 @@ def get_requirement_item_links(request, requirement_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=1, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="requirement") def get_requirement_item_status_list(request, *args, **kwargs): """Get all status - even deleted ones.""" status_list = ListOfRequirementItemStatus.objects.all() @@ -141,7 +140,7 @@ def get_requirement_item_status_list(request, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=1, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="requirement") def get_requirement_item_type_list(request, *args, **kwargs): """Get all status - even deleted ones.""" type_list = ListOfRequirementItemType.objects.all() @@ -154,7 +153,7 @@ def get_requirement_item_type_list(request, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=1, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="requirement") def get_requirement_items(request, requirement_id, *args, **kwargs): """Get all the requirement items assigned to the requirement""" requirement_item_results = RequirementItem.objects.filter( @@ -174,10 +173,8 @@ def get_requirement_items(request, requirement_id, *args, **kwargs): return HttpResponse(json_results, content_type="application/json") - - @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="requirement") def new_requirement(request, *args, **kwargs): """ Loads the new requirement page @@ -235,7 +232,7 @@ def new_requirement(request, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="requirement") def new_requirement_save(request, *args, **kwargs): """Get the data and place into the form""" form = NewRequirementForm(request.POST) @@ -279,7 +276,7 @@ def new_requirement_save(request, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=1, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="requirement") def requirement_information(request, requirement_id, *args, **kwargs): """ Loads the requirement information. @@ -362,7 +359,7 @@ def requirement_information(request, requirement_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=2, object_lookup="requirement_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="requirement") def requirement_information_save(request, requirement_id, *args, **kwargs): """ :param request: diff --git a/NearBeach/views/search_views.py b/NearBeach/views/search_views.py index 610be5f7c..02b46da53 100644 --- a/NearBeach/views/search_views.py +++ b/NearBeach/views/search_views.py @@ -8,7 +8,6 @@ from django.core.serializers.json import DjangoJSONEncoder from django.core import serializers from NearBeach.forms import SearchObjectsForm, SearchForm -from NearBeach.decorators.check_user_permissions import check_user_permissions from NearBeach.models import ( Notification, ObjectAssignment, @@ -27,8 +26,8 @@ UserGroup, ) from NearBeach.views.theme_views import get_theme -from NearBeach.decorators.check_user_permissions import check_user_admin_permissions - +from NearBeach.decorators.check_user_permissions.admin_permissions import check_user_admin_permissions +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions # Internal Function def get_object_search_data(search_form, request): @@ -380,6 +379,7 @@ def search_notification(request): return HttpResponse(t.render(c, request)) + @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") def search_notification_data(request): @@ -524,7 +524,7 @@ def search_permission_set_data(request): @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=1, object_lookup="tag") +@check_specific_object_permissions(min_permission_level=1, object_lookup="tag") def search_tag(request, *args, **kwargs): # Get template t = loader.get_template("NearBeach/search/search_tags.html") diff --git a/NearBeach/views/tag_views.py b/NearBeach/views/tag_views.py index 4c4c3b2e2..fc3d280c3 100644 --- a/NearBeach/views/tag_views.py +++ b/NearBeach/views/tag_views.py @@ -2,7 +2,8 @@ from django.core import serializers from django.http import HttpResponse, HttpResponseBadRequest from django.views.decorators.http import require_http_methods -from NearBeach.decorators.check_user_permissions import check_user_admin_permissions, check_user_permissions +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions +from NearBeach.decorators.check_user_permissions.admin_permissions import check_user_admin_permissions from NearBeach.forms import Tag, NewTagForm, TagForm @@ -21,7 +22,7 @@ def delete_tag(request, tag_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="tag") +@check_specific_object_permissions(min_permission_level=3, object_lookup="tag") def new_tag(request, *args, **kwargs): """ :param request: @@ -51,7 +52,7 @@ def new_tag(request, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=2, object_lookup="tag") +@check_specific_object_permissions(min_permission_level=2, object_lookup="tag") def save_tag(request, *args, **kwargs): """ :param request: diff --git a/NearBeach/views/task_views.py b/NearBeach/views/task_views.py index 55d32f660..867a43330 100644 --- a/NearBeach/views/task_views.py +++ b/NearBeach/views/task_views.py @@ -6,7 +6,7 @@ from django.urls import reverse from django.db.models import F from django.views.decorators.http import require_http_methods -from NearBeach.decorators.check_user_permissions import check_user_permissions +from NearBeach.decorators.check_user_permissions.object_permissions import check_specific_object_permissions from NearBeach.forms import NewTaskForm, TaskInformationForm from NearBeach.models import Group, UserGroup, ObjectAssignment, ListOfTaskStatus from NearBeach.views.tools.internal_functions import Task, Organisation @@ -16,7 +16,7 @@ @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="task_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="task") def new_task(request, *args, **kwargs): """ :param request: @@ -65,7 +65,7 @@ def new_task(request, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=3, object_lookup="task_id") +@check_specific_object_permissions(min_permission_level=3, object_lookup="task") def new_task_save(request, *args, **kwargs): """ :param request: @@ -81,7 +81,7 @@ def new_task_save(request, *args, **kwargs): # Get default task status task_status = ListOfTaskStatus.objects.filter( is_deleted=False, - ).order_by("task_status_order") + ).order_by("task_status_sort_order") if len(task_status) == 0: return HttpResponseBadRequest("No Task Status entered in the system. Please contact system admin") @@ -121,7 +121,7 @@ def new_task_save(request, *args, **kwargs): @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=1, object_lookup="task_id") +@check_specific_object_permissions(min_permission_level=1, object_lookup="task") def task_information(request, task_id, *args, **kwargs): """ :param request: @@ -149,7 +149,7 @@ def task_information(request, task_id, *args, **kwargs): "label", "task_higher_order_status", ).order_by( - "task_status_order", + "task_status_sort_order", ) # Translate the task is closed @@ -182,7 +182,7 @@ def task_information(request, task_id, *args, **kwargs): @require_http_methods(["POST"]) @login_required(login_url="login", redirect_field_name="") -@check_user_permissions(min_permission_level=2, object_lookup="task_id") +@check_specific_object_permissions(min_permission_level=2, object_lookup="task") def task_information_save(request, task_id, *args, **kwargs): """ :param request: diff --git a/NearBeach/views/tools/internal_functions.py b/NearBeach/views/tools/internal_functions.py index cc42ca137..212350553 100644 --- a/NearBeach/views/tools/internal_functions.py +++ b/NearBeach/views/tools/internal_functions.py @@ -1,3 +1,5 @@ +from django.contrib.auth import get_user_model + from NearBeach.models import ( ChangeTask, Customer, @@ -24,7 +26,7 @@ "kanban_card": KanbanCard.objects, "organisation": Organisation.objects, "request_for_change": RequestForChange.objects, - "user": User.objects, + "user": get_user_model().objects, } diff --git a/NearBeach/views/user_views.py b/NearBeach/views/user_views.py index 4d72ecb1d..5897b0400 100644 --- a/NearBeach/views/user_views.py +++ b/NearBeach/views/user_views.py @@ -7,8 +7,7 @@ from django.core.serializers.json import DjangoJSONEncoder from django.contrib.auth.models import User from django.contrib.auth import update_session_auth_hash - -from NearBeach.decorators.check_user_permissions import check_user_admin_permissions +from NearBeach.decorators.check_user_permissions.admin_permissions import check_user_admin_permissions from NearBeach.forms import NewUserForm, PasswordResetForm, UpdateUserForm, UserRemovePermissionForm from NearBeach.models import UserGroup from NearBeach.views.tools.internal_functions import get_user_permissions diff --git a/local/settings.py b/local/settings.py index daed1edb3..eacb7f8ce 100644 --- a/local/settings.py +++ b/local/settings.py @@ -174,3 +174,8 @@ MAX_FILE_SIZE_UPLOAD = 104857600 if "MAX_FILE_SIZE_UPLOAD" in os.environ: MAX_FILE_SIZE_UPLOAD = os.getenv("MAX_FILE_SIZE_UPLOAD") + +# If user wants to use a custom auth user model +# Requested in Issue-533 +if "OVERRIDE_AUTH_USER_MODEL" in os.environ: + AUTH_USER_MODEL = os.getenv("OVERRIDE_AUTH_USER_MODEL") \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6a2aff1d5..e069479fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,11 +32,11 @@ "@vitest/coverage-v8": "^0.34.3", "@vitest/ui": "^0.34.3", "@vue/compiler-sfc": "^3.2.26", - "@vue/test-utils": "^2.4.1", - "@vuelidate/core": "^2.0.0", - "@vuelidate/validators": "^2.0.0", - "axios": "^1.6.1", - "bootstrap": "^5.3.0", + "@vue/test-utils": "^2.4.4", + "@vuelidate/core": "^2.0.3", + "@vuelidate/validators": "^2.0.4", + "axios": "^1.6.7", + "bootstrap": "^5.3.3", "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^10.2.0", "css-loader": "^6.5.1", @@ -49,12 +49,11 @@ "sass": "^1.45.2", "sass-loader": "^12.4.0", "style-loader": "^3.3.1", - "vitest": "^0.34.2", - "vue": "^3.2.26", - "vue-form-wizard": "^0.8.4", - "vue-loader": "^17.0.0", + "vitest": "^0.32.4", + "vue": "^3.4.19", + "vue-loader": "^17.4.2", "vuedraggable": "^4.1.0", - "vuex": "^4.0.2", + "vuex": "^4.1.0", "webpack": "^5.76.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.1", @@ -75,12 +74,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { @@ -88,31 +87,31 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -136,12 +135,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -151,14 +150,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -166,15 +165,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -184,12 +174,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", @@ -225,28 +209,28 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -280,9 +264,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -298,32 +282,32 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", @@ -335,9 +319,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -347,46 +331,46 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -394,12 +378,12 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -446,10 +430,27 @@ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", "dev": true }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -458,14 +459,15 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -474,14 +476,15 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], @@ -490,14 +493,32 @@ "os": [ "android" ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], @@ -506,14 +527,15 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], @@ -522,14 +544,15 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], @@ -538,14 +561,15 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -554,14 +578,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -570,14 +595,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], @@ -586,14 +612,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], @@ -602,14 +629,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], @@ -618,14 +646,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], @@ -634,14 +663,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], @@ -650,14 +680,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], @@ -666,14 +697,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], @@ -682,14 +714,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], @@ -698,14 +731,15 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], @@ -714,14 +748,15 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], @@ -730,14 +765,15 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -746,14 +782,15 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -762,14 +799,15 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -778,23 +816,24 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/@iconify-icons/akar-icons": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/@iconify-icons/akar-icons/-/akar-icons-1.2.17.tgz", - "integrity": "sha512-zL0ZO9FcYaE4utdCocAgWobaaq8Kas//5Rutx+X9WEY7OByNmoOBSlJMmpnjUJvrwpzbzhGHQ8cH+GBuVLu6iA==", + "version": "1.2.19", + "resolved": "https://registry.npmjs.org/@iconify-icons/akar-icons/-/akar-icons-1.2.19.tgz", + "integrity": "sha512-QJUCyIzZWyieLeCi85sQGYrptmuHbmJ9imhv5IiilJtxHCMNy8ZxXs8yfThQhlLC/ujWC5h73wuOwah7wIVEdQ==", "dev": true, "dependencies": { "@iconify/types": "*" } }, "node_modules/@iconify-icons/bi": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/@iconify-icons/bi/-/bi-1.2.17.tgz", - "integrity": "sha512-HWNkGtigLf8nYRZjqB0L3cDXik5urLl5Fsipesc/QcnjfozaHcZBH4VjGsZHiPzfEH+EtjGWi9WBUA2SLsiKjQ==", + "version": "1.2.19", + "resolved": "https://registry.npmjs.org/@iconify-icons/bi/-/bi-1.2.19.tgz", + "integrity": "sha512-XXBRRsqgQqACKFVs8Caludf9w4EimplsCJ0rXmKDhqalzD9IvCqMae5TZDHPE1FkeqbxRGq6awxLSxnwdAIC+Q==", "dev": true, "dependencies": { "@iconify/types": "*" @@ -810,9 +849,9 @@ } }, "node_modules/@iconify-icons/carbon": { - "version": "1.2.18", - "resolved": "https://registry.npmjs.org/@iconify-icons/carbon/-/carbon-1.2.18.tgz", - "integrity": "sha512-nRMiI6qftRMoZyFDd3DHkhiQntucC0D1nJZscDSjLIl1hTsFXVexh91p0TOTFIrAKeiSK/QL46v4l7US2m766A==", + "version": "1.2.20", + "resolved": "https://registry.npmjs.org/@iconify-icons/carbon/-/carbon-1.2.20.tgz", + "integrity": "sha512-QCsqNX5VRK8ZqAnwDhUHdJFdRIDCHM3bF+72DUCIi1bQ6L8n5amOP4ZND2q1TadtAjP7g6DEnS2a6780iPjx9Q==", "dev": true, "dependencies": { "@iconify/types": "*" @@ -837,36 +876,36 @@ } }, "node_modules/@iconify-icons/mdi": { - "version": "1.2.46", - "resolved": "https://registry.npmjs.org/@iconify-icons/mdi/-/mdi-1.2.46.tgz", - "integrity": "sha512-/8se1J8YqupamWqyTejcX6zIrWgZQ8A5+7hWhHXcJD5Rc5OteEM2nuEq2NI29loAs/W9JZP4mH38uz6w2CETkw==", + "version": "1.2.48", + "resolved": "https://registry.npmjs.org/@iconify-icons/mdi/-/mdi-1.2.48.tgz", + "integrity": "sha512-51bfNoRLhYDfxSu0Nyi/uRVq6q/tP4TyEc0vvuNwImrXpxrRJUAWJF2A36CfBkXm3hO9IBlph/CD/XNDJKgG6w==", "dev": true, "dependencies": { "@iconify/types": "*" } }, "node_modules/@iconify-icons/typcn": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@iconify-icons/typcn/-/typcn-1.2.3.tgz", - "integrity": "sha512-B1edamUtLSSc2LuaurMYweTNQMOABjRBjFOwddy/04gnb7qCLOGO3bDb5s3HUhuxs+glNfr6Ut2oxfZSgIY47w==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@iconify-icons/typcn/-/typcn-1.2.4.tgz", + "integrity": "sha512-ZGwL6c7Hq8GczQKGsnLtUxvGTfWmTDKNBRiXarfRslftRQtF/IUZiQo48xAzttf62husqt81yCb3qflvNFJy0w==", "dev": true, "dependencies": { "@iconify/types": "*" } }, "node_modules/@iconify/icons-akar-icons": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/@iconify/icons-akar-icons/-/icons-akar-icons-1.2.17.tgz", - "integrity": "sha512-diYjqzofnLrWk5NW+D8FJNBZpyZlu1fAb4gWl2TvelzO6K7iM1Z20eWTh7Fe9QhnVZ9bLkXVhiXN7C/9tWDteQ==", + "version": "1.2.19", + "resolved": "https://registry.npmjs.org/@iconify/icons-akar-icons/-/icons-akar-icons-1.2.19.tgz", + "integrity": "sha512-q5gOZ+qFh1winAZ6M2Bcz06y5+/sKCbwzMbYVus62JmxURxIE1MKxJyklpTnQc+ZRZ0k12/+2ysPtSEpH6777w==", "dev": true, "dependencies": { "@iconify/types": "*" } }, "node_modules/@iconify/icons-bi": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/@iconify/icons-bi/-/icons-bi-1.2.17.tgz", - "integrity": "sha512-d3Oq4hisC36DEHs5pdaAdAR11KpXMcW8xZM8TYvZsdNPWah4eQBVUNlgA4nBcfMBUlxeLcI2dAvtilGEBAVSAw==", + "version": "1.2.19", + "resolved": "https://registry.npmjs.org/@iconify/icons-bi/-/icons-bi-1.2.19.tgz", + "integrity": "sha512-P3enKEBR83a4fcK6vOsSueYpldYS3OdtSSto58bYU0sWThlxl+YXcmXY6Pu0ORKuMHK/hQagpwXPb+hT4vaO2g==", "dev": true, "dependencies": { "@iconify/types": "*" @@ -882,9 +921,9 @@ } }, "node_modules/@iconify/icons-carbon": { - "version": "1.2.18", - "resolved": "https://registry.npmjs.org/@iconify/icons-carbon/-/icons-carbon-1.2.18.tgz", - "integrity": "sha512-PGz6Tgz95zSH25ETmL0OFC7Kc4z++V4kVODsrVBsndt7t30uitVN5aJW7v9cVH/RrZfa2UBraNgMlFbNn+U3eQ==", + "version": "1.2.20", + "resolved": "https://registry.npmjs.org/@iconify/icons-carbon/-/icons-carbon-1.2.20.tgz", + "integrity": "sha512-GaBRDebrshFfiRu11ktyBvm/Ez72UXvZUsHG3WPqddokTp3auOT4cLch+2JSEzeVXSGbopzU2Fhpv8vE2I0XCw==", "dev": true, "dependencies": { "@iconify/types": "*" @@ -926,6 +965,23 @@ "vue": "3.x" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -962,9 +1018,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" @@ -980,9 +1036,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", @@ -996,21 +1052,15 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@juggle/resize-observer": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", @@ -1058,43 +1108,35 @@ "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", "dev": true }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@playwright/test": { - "version": "1.37.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.37.1.tgz", - "integrity": "sha512-bq9zTli3vWJo8S3LwB91U0qDNQDpEXnw7knhxLM0nwDvexQAwx9tO8iKDZSqqneVq+URd/WIoz+BALMqUTgdSg==", + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", + "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", "dev": true, "dependencies": { - "@types/node": "*", - "playwright-core": "1.37.1" + "playwright": "1.41.2" }, "bin": { "playwright": "cli.js" }, "engines": { "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/@playwright/test/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", "dev": true }, "node_modules/@popperjs/core": { @@ -1107,130 +1149,315 @@ "url": "https://opencollective.com/popperjs" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@tinymce/tinymce-vue": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@tinymce/tinymce-vue/-/tinymce-vue-5.1.0.tgz", - "integrity": "sha512-Z4R8zaOKrAXBhHWsq+qUlwHY+rvze2RgxHDrZ5+qTYkGvRofW5880HLG9gvv6TRPVsNSQBNMdsaOjJ/eueccgA==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "tinymce": "^6.0.0 || ^5.5.1" - }, - "peerDependencies": { - "vue": "^3.0.0" - } + "optional": true, + "os": [ + "android" + ], + "peer": true }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", + "cpu": [ + "arm64" + ], "dev": true, - "engines": { - "node": ">= 10" - } + "optional": true, + "os": [ + "android" + ], + "peer": true }, - "node_modules/@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", - "dev": true + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true }, - "node_modules/@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@types/chai": "*" - } + "optional": true, + "os": [ + "darwin" + ], + "peer": true }, - "node_modules/@types/eslint": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", - "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } + "optional": true, + "os": [ + "linux" + ], + "peer": true }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } + "optional": true, + "os": [ + "linux" + ], + "peer": true }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@tinymce/tinymce-vue": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@tinymce/tinymce-vue/-/tinymce-vue-5.1.1.tgz", + "integrity": "sha512-iO57HOWesFOhsaqjA5Ea6sDvQBmJJH3/dq00Uvg7metlct2kLF+ctRgoDsetLt6gmeZ7COPftr814/XzqnJ/dg==", + "dev": true, + "dependencies": { + "tinymce": "^6.0.0 || ^5.5.1" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/chai": { + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", + "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz", + "integrity": "sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz", + "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, "node_modules/@types/katex": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.14.0.tgz", - "integrity": "sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==", + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.195", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", - "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", "dev": true }, "node_modules/@types/lodash-es": { - "version": "4.17.7", - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.7.tgz", - "integrity": "sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==", + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "dev": true, "dependencies": { "@types/lodash": "*" } }, "node_modules/@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", - "dev": true + "version": "20.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", + "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@vitejs/plugin-vue": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.3.tgz", - "integrity": "sha512-ssxyhIAZqB0TrpUg6R0cBpCuMk9jTIlO1GNSKKQD6S8VjnXi6JXKfUXjSsxey9IwQiaRGsO1WnW9Rkl1L6AJVw==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", "dev": true, "engines": { "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4.0.0", + "vite": "^4.0.0 || ^5.0.0", "vue": "^3.2.25" } }, "node_modules/@vitest/coverage-istanbul": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-0.34.3.tgz", - "integrity": "sha512-RdEGzydbbalyDLmmJ5Qm+T3Lrubw/U9iCnhzM2B1V57t4cVa1t6uyfIHdv68d1au4PRzkLhY7Xouwuhb7BeG+Q==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-0.34.6.tgz", + "integrity": "sha512-5KaBNZPDSk2ybavC3rZ1pWGniw7sJ5usuwVGRUYzJwiBfWvnLpuUer7bjw7qUCRGdKJXrBgb/Dsgif9rkwMX/A==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.2.0", @@ -1238,6 +1465,7 @@ "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^4.0.1", "istanbul-reports": "^3.1.5", + "picocolors": "^1.0.0", "test-exclude": "^6.0.0" }, "funding": { @@ -1248,9 +1476,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.3.tgz", - "integrity": "sha512-bNjP0RHe8UxdklCigZlk6FVCNbOiqVjWnpZJ1zKixpvb7YHSaZiN/w+mzpvXIoqyxyePzKC+L+G1oj7SB20PJw==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.6.tgz", + "integrity": "sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", @@ -1273,26 +1501,40 @@ } }, "node_modules/@vitest/expect": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.2.tgz", - "integrity": "sha512-EZm2dMNlLyIfDMha17QHSQcg2KjeAZaXd65fpPzXY5bvnfx10Lcaz3N55uEe8PhF+w4pw+hmrlHLLlRn9vkBJg==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.32.4.tgz", + "integrity": "sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A==", "dev": true, "dependencies": { - "@vitest/spy": "0.34.2", - "@vitest/utils": "0.34.2", + "@vitest/spy": "0.32.4", + "@vitest/utils": "0.32.4", "chai": "^4.3.7" }, "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/expect/node_modules/@vitest/utils": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.32.4.tgz", + "integrity": "sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@vitest/runner": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.2.tgz", - "integrity": "sha512-8ydGPACVX5tK3Dl0SUwxfdg02h+togDNeQX3iXVFYgzF5odxvaou7HnquALFZkyVuYskoaHUOqOyOLpOEj5XTA==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.32.4.tgz", + "integrity": "sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.2", + "@vitest/utils": "0.32.4", "p-limit": "^4.0.0", "pathe": "^1.1.1" }, @@ -1300,28 +1542,27 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "node_modules/@vitest/runner/node_modules/@vitest/utils": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.32.4.tgz", + "integrity": "sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==", "dev": true, "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.2.tgz", - "integrity": "sha512-qhQ+xy3u4mwwLxltS4Pd4SR+XHv4EajiTPNY3jkIBLUApE6/ce72neJPSUQZ7bL3EBuKI+NhvzhGj3n5baRQUQ==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.32.4.tgz", + "integrity": "sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA==", "dev": true, "dependencies": { - "magic-string": "^0.30.1", + "magic-string": "^0.30.0", "pathe": "^1.1.1", "pretty-format": "^29.5.0" }, @@ -1330,9 +1571,9 @@ } }, "node_modules/@vitest/spy": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.2.tgz", - "integrity": "sha512-yd4L9OhfH6l0Av7iK3sPb3MykhtcRN5c5K5vm1nTbuN7gYn+yvUVVsyvzpHrjqS7EWqn9WsPJb7+0c3iuY60tA==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.32.4.tgz", + "integrity": "sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ==", "dev": true, "dependencies": { "tinyspy": "^2.1.1" @@ -1342,12 +1583,12 @@ } }, "node_modules/@vitest/ui": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.3.tgz", - "integrity": "sha512-iNcOQ0xML9znOReiwpKJrTLSj5zFxmveD3VCxIJNqnsaMYpONSbSiiJLC1Y1dYlkmiHylp+ElNcUZYIMWdxRvA==", + "version": "0.34.7", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.7.tgz", + "integrity": "sha512-iizUu9R5Rsvsq8FtdJ0suMqEfIsIIzziqnasMHe4VH8vG+FnZSA3UAtCHx6rLeRupIFVAVg7bptMmuvMcsn8WQ==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.3", + "@vitest/utils": "0.34.7", "fast-glob": "^3.3.0", "fflate": "^0.8.0", "flatted": "^3.2.7", @@ -1362,47 +1603,10 @@ "vitest": ">=0.30.1 <1" } }, - "node_modules/@vitest/ui/node_modules/@vitest/utils": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.3.tgz", - "integrity": "sha512-kiSnzLG6m/tiT0XEl4U2H8JDBjFtwVlaE8I3QfGiMFR0QvnRDfYfdP3YvTBWM/6iJDAyaPY6yVQiCTUc7ZzTHA==", - "dev": true, - "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/ui/node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@vitest/ui/node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@vitest/utils": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.2.tgz", - "integrity": "sha512-Lzw+kAsTPubhoQDp1uVAOP6DhNia1GMDsI9jgB0yMn+/nDaPieYQ88lKqz/gGjSHL4zwOItvpehec9OY+rS73w==", + "version": "0.34.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.7.tgz", + "integrity": "sha512-ziAavQLpCYS9sLOorGrFFKmy2gnfiNU0ZJ15TsMz/K92NAPS/rp9K4z6AJQQk5Y8adCy4Iwpxy7pQumQ/psnRg==", "dev": true, "dependencies": { "diff-sequences": "^29.4.3", @@ -1414,137 +1618,118 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz", + "integrity": "sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==", "dev": true, "dependencies": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.19", + "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz", + "integrity": "sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==", "dev": true, "dependencies": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-core": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz", + "integrity": "sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==", "dev": true, "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.19", + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19", "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", + "magic-string": "^0.30.6", + "postcss": "^8.4.33", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz", + "integrity": "sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-dom": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/devtools-api": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", - "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz", + "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==", "dev": true }, "node_modules/@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "dev": true, - "dependencies": { - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.19.tgz", + "integrity": "sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==", "dev": true, "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" + "@vue/shared": "3.4.19" } }, "node_modules/@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.19.tgz", + "integrity": "sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==", "dev": true, "dependencies": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/reactivity": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz", + "integrity": "sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==", "dev": true, "dependencies": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" + "@vue/runtime-core": "3.4.19", + "@vue/shared": "3.4.19", + "csstype": "^3.1.3" } }, - "node_modules/@vue/runtime-dom/node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, "node_modules/@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.19.tgz", + "integrity": "sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==", "dev": true, "dependencies": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { - "vue": "3.3.4" + "vue": "3.4.19" } }, "node_modules/@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.19.tgz", + "integrity": "sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==", "dev": true }, "node_modules/@vue/test-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.1.tgz", - "integrity": "sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.4.tgz", + "integrity": "sha512-8jkRxz8pNhClAf4Co4ZrpAoFISdvT3nuSkUlY6Ys6rmTpw3DMWG/X3mw3gQ7QJzgCZO9f+zuE2kW57fi09MW7Q==", "dev": true, "dependencies": { - "js-beautify": "1.14.9", - "vue-component-type-helpers": "1.8.4" + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^1.8.21" }, "peerDependencies": { "@vue/server-renderer": "^3.0.1", @@ -1557,9 +1742,9 @@ } }, "node_modules/@vuelidate/core": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@vuelidate/core/-/core-2.0.2.tgz", - "integrity": "sha512-aG1OZWv6xVws3ljyKy/pyxq1rdZZ2ryj+FEREcC9d4GP4qOvNHHZUl/NQxa0Bck3Ooc0RfXU8vwCA9piRoWy6w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vuelidate/core/-/core-2.0.3.tgz", + "integrity": "sha512-AN6l7KF7+mEfyWG0doT96z+47ljwPpZfi9/JrNMkOGLFv27XVZvKzRLXlmDPQjPl/wOB1GNnHuc54jlCLRNqGA==", "dev": true, "dependencies": { "vue-demi": "^0.13.11" @@ -1601,9 +1786,9 @@ } }, "node_modules/@vuelidate/validators": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@vuelidate/validators/-/validators-2.0.2.tgz", - "integrity": "sha512-6y6QLoK567XVmaLP3Paf1vkg6K2zO6xax3yTyczy1RnJ4PsLDLLGzP1PFzSpwb16aw4CKduBgI63HvIuctJhQg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vuelidate/validators/-/validators-2.0.4.tgz", + "integrity": "sha512-odTxtUZ2JpwwiQ10t0QWYJkkYrfd0SyFYhdHH44QQ1jDatlZgTh/KRzrWVmn/ib9Gq7H4hFD4e8ahoo5YlUlDw==", "dev": true, "dependencies": { "vue-demi": "^0.13.11" @@ -1842,18 +2027,22 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true }, "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1872,9 +2061,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -1937,6 +2126,18 @@ "ajv": "^8.8.2" } }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -2002,12 +2203,12 @@ "dev": true }, "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -2028,9 +2229,9 @@ } }, "node_modules/bootstrap": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.0.tgz", - "integrity": "sha512-UnBV3E3v4STVNQdms6jSGO2CvOkjUMdDAVR2V5N4uCMdaIkaQjbcEAMqRimDHIs4uqBYzDAKCQwCB+97tJgHQw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", "dev": true, "funding": [ { @@ -2043,7 +2244,7 @@ } ], "peerDependencies": { - "@popperjs/core": "^2.11.7" + "@popperjs/core": "^2.11.8" } }, "node_modules/brace-expansion": { @@ -2068,9 +2269,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -2087,10 +2288,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -2124,9 +2325,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001506", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001506.tgz", - "integrity": "sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw==", + "version": "1.0.30001589", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", + "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", "dev": true, "funding": [ { @@ -2144,18 +2345,18 @@ ] }, "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -2176,25 +2377,22 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2207,6 +2405,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -2246,6 +2447,18 @@ "node": ">=6" } }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2280,10 +2493,13 @@ } }, "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } }, "node_modules/compression-webpack-plugin": { "version": "9.2.0", @@ -2322,9 +2538,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/copy-webpack-plugin": { @@ -2352,14 +2568,14 @@ } }, "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "dependencies": { - "import-fresh": "^3.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", + "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "engines": { @@ -2367,6 +2583,14 @@ }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cross-spawn": { @@ -2384,19 +2608,19 @@ } }, "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.21", + "postcss": "^8.4.33", "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">= 12.13.0" @@ -2406,7 +2630,16 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/css-render": { @@ -2419,6 +2652,12 @@ "csstype": "~3.0.5" } }, + "node_modules/css-render/node_modules/csstype": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", + "dev": true + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -2444,9 +2683,9 @@ } }, "node_modules/csstype": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true }, "node_modules/data-urls": { @@ -2480,14 +2719,20 @@ } }, "node_modules/date-fns-tz": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.8.tgz", - "integrity": "sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-2.0.0.tgz", + "integrity": "sha512-OAtcLdB9vxSXTWHdT8b398ARImVwQMyjfYGkKD2zaGpHseG2UPHbHjXELReErZFxWdSLph3c2zOaaTyHfOhERQ==", "dev": true, "peerDependencies": { "date-fns": ">=2.0.0" } }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2557,6 +2802,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "dependencies": { "webidl-conversions": "^7.0.0" @@ -2571,6 +2817,12 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/editorconfig": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", @@ -2589,19 +2841,16 @@ "node": ">=14" } }, - "node_modules/editorconfig/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, "node_modules/electron-to-chromium": { - "version": "1.4.439", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.439.tgz", - "integrity": "sha512-BHpErPSNhb9FB25+OwQP6mCAf3ZXfGbmuvc4LzBNVJwpCcXQJm++LerimocYRG9FRxUVRKZqaB7d0+pImSTPSg==", + "version": "1.4.680", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.680.tgz", + "integrity": "sha512-4nToZ5jlPO14W82NkF32wyjhYqQByVaDmLy4J2/tYcAbJfgO2TKJC780Az1V13gzq4l73CJ0yuyalpXvxXXD9A==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "node_modules/enhanced-resolve": { @@ -2630,9 +2879,9 @@ } }, "node_modules/envinfo": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.9.0.tgz", - "integrity": "sha512-RODB4txU+xImYDemN5DqaKC0CHk05XSVkOX4pq0hK26Qx+1LChkuOyUDlGEjYb3ACr0n9qBhFjg37hQuJvpkRQ==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", + "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -2651,17 +2900,18 @@ } }, "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -2669,50 +2919,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -2798,9 +3033,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -2841,18 +3076,18 @@ } }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fflate": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.0.tgz", - "integrity": "sha512-FAdS4qMuFjsJj6XHbBaZeXOgaypXp8iw/Tpyuq/w3XA41jjLHT8NPA+n7czH/DDhdncq0nAyDZmPeWXh2qmdIg==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", "dev": true }, "node_modules/fill-range": { @@ -2880,16 +3115,25 @@ "node": ">=8" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "dev": true, "funding": [ { @@ -2906,6 +3150,22 @@ } } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -2927,9 +3187,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "optional": true, @@ -2941,10 +3201,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -2965,19 +3228,22 @@ } }, "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3001,18 +3267,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -3063,18 +3317,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3090,10 +3332,22 @@ "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", "dev": true }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/highlight.js": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz", - "integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==", + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", "dev": true, "engines": { "node": ">=12.0.0" @@ -3169,18 +3423,18 @@ } }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", "dev": true }, "node_modules/import-fresh": { @@ -3268,12 +3522,12 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3288,6 +3542,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3310,13 +3573,10 @@ } }, "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, "engines": { "node": ">=0.10.0" } @@ -3343,23 +3603,23 @@ } }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -3367,21 +3627,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", @@ -3432,9 +3677,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -3444,6 +3689,24 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -3483,24 +3746,25 @@ } }, "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "dev": true, "bin": { "jiti": "bin/jiti.js" } }, "node_modules/js-beautify": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.9.tgz", - "integrity": "sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", "dev": true, "dependencies": { "config-chain": "^1.1.13", - "editorconfig": "^1.0.3", - "glob": "^8.1.0", - "nopt": "^6.0.0" + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" }, "bin": { "css-beautify": "js/bin/css-beautify.js", @@ -3508,7 +3772,16 @@ "js-beautify": "js/bin/js-beautify.js" }, "engines": { - "node": ">=12" + "node": ">=14" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "dev": true, + "engines": { + "node": ">=14" } }, "node_modules/js-tokens": { @@ -3571,27 +3844,6 @@ } } }, - "node_modules/jsdom/node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -3629,9 +3881,9 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, "node_modules/kind-of": { @@ -3704,24 +3956,21 @@ "dev": true }, "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/luxon": { @@ -3734,9 +3983,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -3810,12 +4059,13 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz", + "integrity": "sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==", "dev": true, "dependencies": { - "schema-utils": "^4.0.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { "node": ">= 12.13.0" @@ -3843,22 +4093,31 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mlly": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz", - "integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.0.tgz", + "integrity": "sha512-YOvg9hfYQmnaB56Yb+KrJE2u0Yzz5zR+sLejEvF4fzwzV1Al6hkf2vyHTwqCRyv0hCi9rVCqVoXpyYevQIRwLQ==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "pathe": "^1.1.1", + "acorn": "^8.11.3", + "pathe": "^1.1.2", "pkg-types": "^1.0.3", - "ufo": "^1.1.2" + "ufo": "^1.3.2" } }, "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, "engines": { "node": ">=10" @@ -3871,38 +4130,39 @@ "dev": true }, "node_modules/naive-ui": { - "version": "2.34.4", - "resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.34.4.tgz", - "integrity": "sha512-aPG8PDfhSzIzn/jSC9y3Jb3Pe2wHJ7F0cFV1EWlbImSrZECeUmoc+fIcOSWbizoztkKfaUAeKwYdMl09MKkj1g==", - "dev": true, - "dependencies": { - "@css-render/plugin-bem": "^0.15.10", - "@css-render/vue3-ssr": "^0.15.10", - "@types/katex": "^0.14.0", - "@types/lodash": "^4.14.181", - "@types/lodash-es": "^4.17.6", - "async-validator": "^4.0.7", - "css-render": "^0.15.10", - "date-fns": "^2.28.0", - "date-fns-tz": "^1.3.3", + "version": "2.38.0", + "resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.38.0.tgz", + "integrity": "sha512-Sa1hPUSTaOBvFy5hBcdQ6ajGVqt59QHN4p6wcsC5stVo6JjQPnbRTUvWtNG3gAsLhCvHQBm9NXeJG5Ne1OFQ4Q==", + "dev": true, + "dependencies": { + "@css-render/plugin-bem": "^0.15.12", + "@css-render/vue3-ssr": "^0.15.12", + "@types/katex": "^0.16.2", + "@types/lodash": "^4.14.198", + "@types/lodash-es": "^4.17.9", + "async-validator": "^4.2.5", + "css-render": "^0.15.12", + "csstype": "^3.1.3", + "date-fns": "^2.30.0", + "date-fns-tz": "^2.0.0", "evtd": "^0.2.4", - "highlight.js": "^11.5.0", + "highlight.js": "^11.8.0", "lodash": "^4.17.21", "lodash-es": "^4.17.21", - "seemly": "^0.3.6", + "seemly": "^0.3.8", "treemate": "^0.3.11", "vdirs": "^0.1.8", "vooks": "^0.2.12", - "vueuc": "^0.4.51" + "vueuc": "^0.4.58" }, "peerDependencies": { "vue": "^3.0.0" } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -3924,24 +4184,24 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", "dev": true, "dependencies": { - "abbrev": "^1.0.0" + "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-path": { @@ -3978,15 +4238,15 @@ } }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4004,6 +4264,21 @@ "node": ">=8" } }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -4088,19 +4363,44 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, "node_modules/pathval": { @@ -4153,10 +4453,28 @@ "pathe": "^1.1.0" } }, + "node_modules/playwright": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", + "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", + "dev": true, + "dependencies": { + "playwright-core": "1.41.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, "node_modules/playwright-core": { - "version": "1.37.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.37.1.tgz", - "integrity": "sha512-17EuQxlSIYCmEMwzMqusJ2ztDgJePjrbttaefgdsiqeLWidjYz9BxXaTaZWxH1J95SHGk6tjE+dwgWILJoUZfA==", + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", + "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -4166,9 +4484,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, "funding": [ { @@ -4185,7 +4503,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -4194,14 +4512,14 @@ } }, "node_modules/postcss-loader": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", - "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", "dev": true, "dependencies": { - "cosmiconfig": "^8.2.0", - "jiti": "^1.18.2", - "semver": "^7.3.8" + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" }, "engines": { "node": ">= 14.15.0" @@ -4228,9 +4546,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", @@ -4245,9 +4563,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" @@ -4275,9 +4593,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -4309,9 +4627,9 @@ } }, "node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -4353,9 +4671,9 @@ "dev": true }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -4427,9 +4745,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "node_modules/require-from-string": { @@ -4448,12 +4766,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4505,18 +4823,35 @@ } }, "node_modules/rollup": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", - "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", "fsevents": "~2.3.2" } }, @@ -4576,9 +4911,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.63.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz", - "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==", + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -4662,15 +4997,15 @@ } }, "node_modules/seemly": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/seemly/-/seemly-0.3.6.tgz", - "integrity": "sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/seemly/-/seemly-0.3.8.tgz", + "integrity": "sha512-MW8Qs6vbzo0pHmDpFSYPna+lwpZ6Zk1ancbajw/7E8TKtHdV+1DfZZD+kKJEhG/cAoB/i+LiT+5msZOqj0DwRA==", "dev": true }, "node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4682,10 +5017,28 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -4730,15 +5083,27 @@ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" }, "engines": { "node": ">= 10" @@ -4797,11 +5162,107 @@ "dev": true }, "node_modules/std-env": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", - "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-literal": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", @@ -4815,9 +5276,9 @@ } }, "node_modules/style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", "dev": true, "engines": { "node": ">= 12.13.0" @@ -4870,9 +5331,9 @@ } }, "node_modules/terser": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.1.tgz", - "integrity": "sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ==", + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz", + "integrity": "sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -4888,16 +5349,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -4970,6 +5431,12 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -5027,30 +5494,30 @@ } }, "node_modules/tinybench": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", - "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", "dev": true }, "node_modules/tinymce": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.7.3.tgz", - "integrity": "sha512-J7WmYIi/gt1RvZ6Ap2oQiUjzAoiS9pfV+d4GnKuZuPu8agmlAEAInNmMvMjfCNBzHv4JnZXY7qlHUAI0IuYQVA==", + "version": "6.8.3", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.8.3.tgz", + "integrity": "sha512-3fCHKAeqT+xNwBVESf6iDbDV0VNwZNmfrkx9c/6Gz5iB8piMfaO6s7FvoiTrj1hf1gVbfyLTnz1DooI6DhgINQ==", "dev": true }, "node_modules/tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz", + "integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==", "dev": true, "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", "dev": true, "engines": { "node": ">=14.0.0" @@ -5078,9 +5545,9 @@ } }, "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "engines": { "node": ">=6" @@ -5129,9 +5596,15 @@ } }, "node_modules/ufo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.2.0.tgz", - "integrity": "sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", + "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, "node_modules/universalify": { @@ -5144,9 +5617,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -5199,14 +5672,14 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" @@ -5225,29 +5698,30 @@ } }, "node_modules/vite": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", - "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz", + "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", "dev": true, + "peer": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -5280,9 +5754,9 @@ } }, "node_modules/vite-node": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.2.tgz", - "integrity": "sha512-JtW249Zm3FB+F7pQfH56uWSdlltCo1IOkZW5oHBzeQo0iX4jtC7o1t9aILMGd9kVekXBP2lfJBEQt9rBh07ebA==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.32.4.tgz", + "integrity": "sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -5302,128 +5776,1075 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vitest": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.2.tgz", - "integrity": "sha512-WgaIvBbjsSYMq/oiMlXUI7KflELmzM43BEvkdC/8b5CAod4ryAiY2z8uR6Crbi5Pjnu5oOmhKa9sy7uk6paBxQ==", + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.2", - "@vitest/runner": "0.34.2", - "@vitest/snapshot": "0.34.2", - "@vitest/spy": "0.34.2", - "@vitest/utils": "0.34.2", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.7", - "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.34.2", - "why-is-node-running": "^2.2.2" - }, - "bin": { - "vitest": "vitest.mjs" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", - "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true - } + "node": ">=12" } }, - "node_modules/vooks": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/vooks/-/vooks-0.2.12.tgz", - "integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==", + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "evtd": "^0.2.2" - }, - "peerDependencies": { - "vue": "^3.0.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vite-node/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vite-node/node_modules/vite": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.32.4.tgz", + "integrity": "sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.32.4", + "@vitest/runner": "0.32.4", + "@vitest/snapshot": "0.32.4", + "@vitest/spy": "0.32.4", + "@vitest/utils": "0.32.4", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.5.0", + "vite": "^3.0.0 || ^4.0.0", + "vite-node": "0.32.4", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@vitest/utils": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.32.4.tgz", + "integrity": "sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vitest/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/vue-component-type-helpers": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.8.4.tgz", - "integrity": "sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==", - "dev": true - }, - "node_modules/vue-form-wizard": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/vue-form-wizard/-/vue-form-wizard-0.8.4.tgz", - "integrity": "sha512-/Zk1+B7bz7qHFJ16mwu021lpPXWf/9Tlr2mTNG3J7M0Hdy3rgA802lWsbKYySns0B0qtsD8BYGjQ2Wyxgg+4uw==", + "node_modules/vitest/node_modules/vite": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">= 4.0.0", - "npm": ">= 3.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vooks": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/vooks/-/vooks-0.2.12.tgz", + "integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==", + "dev": true, + "dependencies": { + "evtd": "^0.2.2" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz", + "integrity": "sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-sfc": "3.4.19", + "@vue/runtime-dom": "3.4.19", + "@vue/server-renderer": "3.4.19", + "@vue/shared": "3.4.19" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, + "node_modules/vue-component-type-helpers": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-1.8.27.tgz", + "integrity": "sha512-0vOfAtI67UjeO1G6UiX5Kd76CqaQ67wrRZiOe7UAb9Jm6GzlUr/fC7CV90XfwapJRjpCMaZFhv1V0ajWRmE9Dg==", + "dev": true + }, "node_modules/vue-loader": { - "version": "17.2.2", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.2.2.tgz", - "integrity": "sha512-aqNvKJvnz2A/6VWeJZodAo8XLoAlVwBv+2Z6dama+LHsAF+P/xijQ+OfWrxIs0wcGSJduvdzvTuATzXbNKkpiw==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", + "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -5525,9 +6946,9 @@ } }, "node_modules/vueuc": { - "version": "0.4.51", - "resolved": "https://registry.npmjs.org/vueuc/-/vueuc-0.4.51.tgz", - "integrity": "sha512-pLiMChM4f+W8czlIClGvGBYo656lc2Y0/mXFSCydcSmnCR1izlKPGMgiYBGjbY9FDkFG8a2HEVz7t0DNzBWbDw==", + "version": "0.4.58", + "resolved": "https://registry.npmjs.org/vueuc/-/vueuc-0.4.58.tgz", + "integrity": "sha512-Wnj/N8WbPRSxSt+9ji1jtDHPzda5h2OH/0sFBhvdxDRuyCZbjGg3/cKMaKqEoe+dErTexG2R+i6Q8S/Toq1MYg==", "dev": true, "dependencies": { "@css-render/vue3-ssr": "^0.15.10", @@ -5589,19 +7010,19 @@ } }, "node_modules/webpack": { - "version": "5.88.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.0.tgz", - "integrity": "sha512-O3jDhG5e44qIBSi/P6KpcCcH7HD+nYIHVBhdWFxcLOcIGN8zGo5nqF3BjyNCxIh4p1vFdNnreZv2h2KkoAw3lw==", + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", + "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.11.5", "@webassemblyjs/wasm-edit": "^1.11.5", "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.15.0", "es-module-lexer": "^1.2.1", @@ -5615,7 +7036,7 @@ "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", + "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -5636,20 +7057,23 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz", - "integrity": "sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", + "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", - "lodash": "^4.17.20", + "html-escaper": "^2.0.2", + "is-plain-object": "^5.0.0", "opener": "^1.5.2", - "sirv": "^1.0.7", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { @@ -5659,55 +7083,6 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -5717,25 +7092,37 @@ "node": ">= 10" } }, - "node_modules/webpack-bundle-analyzer/node_modules/has-flag": { + "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-bundle-analyzer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/webpack-cli": { @@ -5795,12 +7182,13 @@ } }, "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -5936,6 +7324,127 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -5943,16 +7452,16 @@ "dev": true }, "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -5979,9 +7488,9 @@ "dev": true }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "node_modules/yocto-queue": { diff --git a/package.json b/package.json index 50d64c23d..7953379d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nearbeach", - "version": "0.30.35", + "version": "0.31.0-RC1", "description": "NearBeach - an Open Source project management system built with Django web framework", "main": "/src/js/app.js", "directories": { @@ -18,7 +18,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/robotichead/NearBeach.git" + "url": "git+https://github.com/NearBeach/NearBeach.git" }, "keywords": [ "Django", @@ -55,11 +55,11 @@ "@vitest/coverage-v8": "^0.34.3", "@vitest/ui": "^0.34.3", "@vue/compiler-sfc": "^3.2.26", - "@vue/test-utils": "^2.4.1", - "@vuelidate/core": "^2.0.0", - "@vuelidate/validators": "^2.0.0", - "axios": "^1.6.1", - "bootstrap": "^5.3.0", + "@vue/test-utils": "^2.4.4", + "@vuelidate/core": "^2.0.3", + "@vuelidate/validators": "^2.0.4", + "axios": "^1.6.7", + "bootstrap": "^5.3.3", "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^10.2.0", "css-loader": "^6.5.1", @@ -72,12 +72,11 @@ "sass": "^1.45.2", "sass-loader": "^12.4.0", "style-loader": "^3.3.1", - "vitest": "^0.34.2", - "vue": "^3.2.26", - "vue-form-wizard": "^0.8.4", - "vue-loader": "^17.0.0", + "vitest": "^0.32.4", + "vue": "^3.4.19", + "vue-loader": "^17.4.2", "vuedraggable": "^4.1.0", - "vuex": "^4.0.2", + "vuex": "^4.1.0", "webpack": "^5.76.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.1", diff --git a/setup.py b/setup.py deleted file mode 100644 index bfd7efec9..000000000 --- a/setup.py +++ /dev/null @@ -1,55 +0,0 @@ -import setuptools -import codecs -import os.path - - -# Used to read the file - - -def read(rel_path): - here = os.path.abspath(os.path.dirname(__file__)) - with codecs.open(os.path.join(here, rel_path), 'r') as fp: - return fp.read() - - -# Used to extract out the __version__ - - -def get_version(rel_path): - for line in read(rel_path).splitlines(): - if line.startswith('__version__'): - delim = '"' if '"' in line else "'" - return line.split(delim)[1] - raise RuntimeError("Unable to find version string.") - - -# Used to read the readme file -with open("README.md", "r") as fh: - long_description = fh.read() - -setuptools.setup( - name="NearBeach", - version=get_version('NearBeach/__init__.py'), - author="Luke Christopher Clarke", - author_email="luke@nearbeach.org", - description="NearBeach - an open source project management tool", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/robotichead/NearBeach", - packages=setuptools.find_packages(), - install_requires=[ - 'django', - 'simplejson', - 'pillow', - 'urllib3', - 'boto3', - 'azure-storage-blob', - 'azure-identity', - ], - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - ], - include_package_data=True, -) diff --git a/src/js/app.js b/src/js/app.js index 5dfbe18ee..e05c26af0 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -2,7 +2,6 @@ import {createApp} from "vue/dist/vue.esm-bundler"; //VueX -// import { createStore } from 'vuex'; import {store} from "./vuex-store"; //Import Bootstrap @@ -42,6 +41,7 @@ import { DashboardRfcApprovals, DashboardUnassignedObjects, DashboardUsersWithNoGroups, + DiagnosticInformation, GroupInformation, KanbanDangerZone, KanbanEditBoard, @@ -61,6 +61,8 @@ import { NewTask, NewUser, NotificationInformation, + ObjectStatusInformation, + ObjectStatusList, OrganisationInformation, OrganisationModules, ParentModules, @@ -104,6 +106,7 @@ const app = createApp({ DashboardRfcApprovals, DashboardUnassignedObjects, DashboardUsersWithNoGroups, + DiagnosticInformation, GroupInformation, KanbanDangerZone, KanbanEditBoard, @@ -123,6 +126,8 @@ const app = createApp({ NewTask, NewUser, NotificationInformation, + ObjectStatusInformation, + ObjectStatusList, OrganisationInformation, OrganisationModules, ParentModules, diff --git a/src/js/components.js b/src/js/components.js index 0cf73090b..05f552280 100644 --- a/src/js/components.js +++ b/src/js/components.js @@ -66,6 +66,12 @@ export const // BugsModule = defineAsyncComponent(() => "./components/dashboard/DashboardUsersWithNoGroups.vue" ) ), + DiagnosticInformation = defineAsyncComponent(() => + import( + /* webpackChunkName: "diagnostic-information" */ + "./components/diagnostic/DiagnosticInformation.vue" + ) + ), GroupInformation = defineAsyncComponent(() => import( /* webpackChunkName: "group-information" */ @@ -192,6 +198,18 @@ export const // BugsModule = defineAsyncComponent(() => "./components/notifications/NotificationInformation.vue" ) ), + ObjectStatusInformation = defineAsyncComponent(() => + import( + /* webpackChunkName: "object-status-information" */ + "./components/object_status/ObjectStatusInformation.vue" + ) + ), + ObjectStatusList = defineAsyncComponent(() => + import( + /* webpackChunkName: "object-status-list" */ + "./components/object_status/ObjectStatusList.vue" + ) + ), OrganisationInformation = defineAsyncComponent(() => import( /* webpackChunkName: "organisation-information" */ diff --git a/src/js/components/administration/AdminAddUser.vue b/src/js/components/administration/AdminAddUser.vue index 656a06459..2731b1b81 100644 --- a/src/js/components/administration/AdminAddUser.vue +++ b/src/js/components/administration/AdminAddUser.vue @@ -122,9 +122,6 @@ import {NSelect} from "naive-ui"; //VueX import {mapGetters} from "vuex"; -//Import Mixins -import errorModalMixin from "../../mixins/errorModalMixin"; - export default { name: "AdminAddUser", components: { @@ -156,7 +153,6 @@ export default { userLevel: "getUserLevel", }), }, - mixins: [errorModalMixin], methods: { addUser() { //Create the data_to_send @@ -173,15 +169,20 @@ export default { data_to_send.append("permission_set", row); }); - this.axios - .post(`${this.rootUrl}admin_add_user/`, data_to_send) - .then((response) => { - //Just refresh the page (for now) - window.location.reload(true); - }) - .catch((error) => { - this.showErrorModal(error, "Admin Add user", ""); + this.axios.post( + `${this.rootUrl}admin_add_user/`, + data_to_send + ).then((response) => { + //Just refresh the page (for now) + window.location.reload(true); + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Error adding user", + message: `Sorry, we could not add user. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, }); + }); }, getData() { const data_to_send = new FormData(); @@ -235,7 +236,12 @@ export default { break; } }).catch((error) => { - this.showErrorModal(error, "Admin Add User", ""); + this.$store.dispatch("newToast", { + header: "Error obtaining data", + message: `Sorry, we could not obtain the required data. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, + }); }); }, }, diff --git a/src/js/components/administration/ConfirmPermissionDelete.vue b/src/js/components/administration/ConfirmPermissionDelete.vue index ebf1c9ea4..1e5dbfb00 100644 --- a/src/js/components/administration/ConfirmPermissionDelete.vue +++ b/src/js/components/administration/ConfirmPermissionDelete.vue @@ -66,7 +66,12 @@ export default { "/user_information/remove_permission/", data_to_send ).catch((error) => { - this.showErrorModal(error, this.destination); + this.$store.dispatch("newToast", { + header: "Error removing permission", + message: `Sorry, we could not remove the permission. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, + }); }); //Optimistic - remove data and close modal diff --git a/src/js/components/administration/UserList.vue b/src/js/components/administration/UserList.vue index 065f78d3d..07c26b450 100644 --- a/src/js/components/administration/UserList.vue +++ b/src/js/components/administration/UserList.vue @@ -103,7 +103,6 @@ import {Modal} from "bootstrap"; //Import mixins -import errorModalMixin from "../../mixins/errorModalMixin"; import getThemeMixin from "../../mixins/getThemeMixin"; //Vue Components @@ -147,7 +146,7 @@ export default { permissionDeleteId: 0, }; }, - mixins: [errorModalMixin, getThemeMixin, iconMixin], + mixins: [getThemeMixin, iconMixin], methods: { addUser() { //Show the user's modal @@ -181,15 +180,14 @@ export default { }); }, updateGroupLeader(event) { - //Setup modal telling user of update - const loadingModal = new Modal("#loadingModal"); - loadingModal.show(); - - //Update the loading modal content - const loadingModalContent = document.getElementById( - "loadingModalContent" - ); - loadingModalContent.innerHTML = "Updating Team Leader Status"; + //Notify the user of updating the group leader + this.$store.dispatch("newToast", { + header: "Updating Team Leader Status", + message: "Currently updating team leader status. Please wait", + extra_classes: "bg-warning", + delay: 0, + unique_type: "update_group_leader", + }); //Get if the checkbox is ticked or not const group_leader = event.target.checked; @@ -212,22 +210,28 @@ export default { ); } - this.axios - .post( - `/update_group_leader_status/${this.destination}/`, - data_to_send - ) - .then((response) => { - //Updated data - this.localListResults = response.data; - - //Update the loading Modal status - loadingModalContent.innerHTML = - "Updated Team Leader Status Complete"; - }) - .catch((error) => { - this.showErrorModal(error, this.destination); + this.axios.post( + `/update_group_leader_status/${this.destination}/`, + data_to_send + ).then((response) => { + //Updated data + this.localListResults = response.data; + + this.$store.dispatch("newToast", { + header: "Updated Team Leader Status", + message: "Updated team leader status.", + extra_classes: "bg-success", + unique_type: "update_group_leader", }); + + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Error updating group leader", + message: `Sorry, we could not update group leader. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, + }); + }); }, }, mounted() { diff --git a/src/js/components/card_information/AddUserToCard.vue b/src/js/components/card_information/AddUserToCard.vue index b1f87b74a..9810562cd 100644 --- a/src/js/components/card_information/AddUserToCard.vue +++ b/src/js/components/card_information/AddUserToCard.vue @@ -106,7 +106,6 @@ import {Modal} from "bootstrap"; import {mapGetters} from "vuex"; //Mixins -import errorModalMixin from "../../mixins/errorModalMixin" import iconMixin from "../../mixins/iconMixin"; export default { @@ -115,7 +114,7 @@ export default { Icon, NSelect, }, - mixins: [errorModalMixin, iconMixin], + mixins: [iconMixin], computed: { ...mapGetters({ cardId: "getCardId", @@ -154,35 +153,37 @@ export default { }); //User axios to send the data to the backend - this.axios - .post( - `${this.rootUrl}object_data/kanban_card/${this.cardId}/add_user/`, - data_to_send - ) - .then((response) => { - //Close the modal - document.getElementById("addUserCloseButton").click(); + this.axios.post( + `${this.rootUrl}object_data/kanban_card/${this.cardId}/add_user/`, + data_to_send + ).then((response) => { + //Close the modal + document.getElementById("addUserCloseButton").click(); - //Clear the models - this.userModel = []; + //Clear the models + this.userModel = []; - //Update VueX with the required data - this.$store.commit("updateGroupsAndUsers", { - objectGroupList: response.data.object_group_list, - objectUserList: response.data.object_user_list, - potentialGroupList: response.data.potential_group_list, - potentialUserList: response.data.potential_user_list, - }) - - //Reshow the card information modal - const cardModal = new Modal( - document.getElementById("cardInformationModal") - ); - cardModal.show(); + //Update VueX with the required data + this.$store.commit("updateGroupsAndUsers", { + objectGroupList: response.data.object_group_list, + objectUserList: response.data.object_user_list, + potentialGroupList: response.data.potential_group_list, + potentialUserList: response.data.potential_user_list, }) - .catch((error) => { - this.showErrorModal(error, "kanban card"); + + //Reshow the card information modal + const cardModal = new Modal( + document.getElementById("cardInformationModal") + ); + cardModal.show(); + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Error adding user to kanban card", + message: `Sorry, we could not add the user to the kanban card. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, }); + }); }, }, }; diff --git a/src/js/components/change_task/ChangeTaskInformation.vue b/src/js/components/change_task/ChangeTaskInformation.vue index 9d8d48eaa..a1e130359 100644 --- a/src/js/components/change_task/ChangeTaskInformation.vue +++ b/src/js/components/change_task/ChangeTaskInformation.vue @@ -343,7 +343,6 @@ export default { extra_classes: "bg-danger", delay: 0, }); - //this.showErrorModal(error, 'Change Task'); }); }, updateStatus(new_status) { diff --git a/src/js/components/change_task/NewChangeTask.vue b/src/js/components/change_task/NewChangeTask.vue index 52a1426e9..cf328a2c1 100644 --- a/src/js/components/change_task/NewChangeTask.vue +++ b/src/js/components/change_task/NewChangeTask.vue @@ -204,9 +204,6 @@ import Editor from "@tinymce/tinymce-vue"; import {NSelect, NDatePicker} from "naive-ui"; -//Import mixins -import errorModalMixin from "../../mixins/errorModalMixin"; - //VueX import {mapGetters} from "vuex"; @@ -232,7 +229,6 @@ export default { default: 0, }, }, - mixins: [errorModalMixin], data: () => ({ assignedUserModel: null, changeEndDateModel: 0, @@ -302,9 +298,7 @@ export default { this.submitChangeTask(event); //Close the modal - document - .getElementById("newRunItemCloseButton") - .click(); + document.getElementById("newRunItemCloseButton").click(); }, async submitChangeTask(event) { //Tell modal current object is saving @@ -352,26 +346,28 @@ export default { ); data_to_send.set("change_task_qa_user", this.qaUserModel); - this.axios - .post( - `${this.rootUrl}rfc_information/${this.locationId}/new_change_task/`, - data_to_send - ) - .then((response) => { - //Update the runsheet variables - this.$emit("update_change_task_list", response.data); + this.axios.post( + `${this.rootUrl}rfc_information/${this.locationId}/new_change_task/`, + data_to_send + ).then((response) => { + //Update the runsheet variables + this.$emit("update_change_task_list", response.data); - //Clear the modal - this.changeTitleModel = ""; - this.assignedUserModel = ""; - this.qaUserModel = ""; + //Clear the modal + this.changeTitleModel = ""; + this.assignedUserModel = ""; + this.qaUserModel = ""; - //Set the current status back to ready - this.currentStatus = 'ready'; - }) - .catch((error) => { - this.showErrorModal(error, "Change Task"); + //Set the current status back to ready + this.currentStatus = 'ready'; + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Error submitting change task", + message: `Sorry, we could not submit the change task. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, }); + }); }, updateUserList() { //Grab a map of the potential and current users diff --git a/src/js/components/customers/CustomerInformation.vue b/src/js/components/customers/CustomerInformation.vue index 98236d369..53cf4463d 100644 --- a/src/js/components/customers/CustomerInformation.vue +++ b/src/js/components/customers/CustomerInformation.vue @@ -279,7 +279,7 @@ export default { this.$store.dispatch("newToast", { header: "Customer Updated", message: "The Customer has updated", - extra_classes: "bg-sucess", + extra_classes: "bg-success", unique_type: "save", }); diff --git a/src/js/components/customers/NewCustomer.vue b/src/js/components/customers/NewCustomer.vue index 1cd97d43d..2065cc9de 100644 --- a/src/js/components/customers/NewCustomer.vue +++ b/src/js/components/customers/NewCustomer.vue @@ -67,9 +67,7 @@ import useVuelidate from "@vuelidate/core"; import {required, email} from "@vuelidate/validators"; //Mixins -import errorModalMixin from "../../mixins/errorModalMixin"; import getThemeMixin from "../../mixins/getThemeMixin"; -import searchMixin from "../../mixins/searchMixin"; //Components import NewCustomerForm from "./NewCustomerForm.vue"; @@ -104,7 +102,7 @@ export default { }, }, }, - mixins: [errorModalMixin, getThemeMixin, searchMixin], + mixins: [getThemeMixin], data() { return { customerEmailModel: "", @@ -113,6 +111,7 @@ export default { flagValidationCheck: false, organisationFixList: [], organisationModel: "", + searchTimeout: "", titleModel: [], }; }, @@ -135,12 +134,19 @@ export default { }, methods: { fetchOptions(search, loading) { - this.searchTrigger({ - return_function: this.getOrganisationData, - searchTimeout: this.searchTimeout, - search: search, - loading: loading, - }); + //Clear timer if it already exists + if (this.searchTimeout !== "") { + //Stop the clock + clearTimeout(this.searchTimeout); + } + + //Setup timer if there are 3 characters or more + if (search.length >= 3) { + //Start the potential search + this.searchTimeout = setTimeout(() => { + this.getOrganisationData(search, loading); + }, 500); + } }, getOrganisationData(search, loading) { // Save the seach data in FormData @@ -148,31 +154,30 @@ export default { data_to_send.set("search", search); // Now that the timer has run out, lets use AJAX to get the organisations. - this.axios - .post( - `${this.rootUrl}search/organisation/data/`, - data_to_send - ) - .then((response) => { - //Extract the required JSON data - const extracted_data = response.data; + this.axios.post( + `${this.rootUrl}search/organisation/data/`, + data_to_send + ).then((response) => { + //Extract the required JSON data + const extracted_data = response.data; - //Look through the extracted data - and map the required fields into stakeholder fix list - this.organisationFixList = extracted_data.map((row) => { - //Create the creation object - return { - value: row.pk, - label: row.fields.organisation_name, - }; - }); + //Look through the extracted data - and map the required fields into stakeholder fix list + this.organisationFixList = extracted_data.map((row) => { + //Create the creation object + return { + value: row.pk, + label: row.fields.organisation_name, + }; + }); }) .catch((error) => { - this.showErrorModal( - error, - "Search Organisation Issues: can not get list of existing organisations", - "" - ); - }); + this.$store.dispatch("newToast", { + header: "Error Getting Organisation Data", + message: `Error getting organisation data. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, + }); + }); }, submitNewCustomer: async function () { //Flag downstream to check validation @@ -191,18 +196,13 @@ export default { //NEED TO USE MIXIN FOR THIS SECTION if (!hasFormErrors) { - //Show the error dialog and notify to the user that there were field missing. - const elem_cont = - document.getElementById("errorModalContent"); - - // Update the content - elem_cont.innerHTML = "FORM ISSUE: Sorry, but can you please fill out the form completely."; - - // Show the modal - const errorModal = new Modal( - document.getElementById("errorModal") - ); - errorModal.show(); + //Show error modal + this.$store.dispatch("newToast", { + header: "Error submitting new customer", + message: `Sorry, we had an submitting new customer. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, + }); //Just return - as we do not need to do the rest of this function return; @@ -237,7 +237,12 @@ export default { window.location.href = response.data; }) .catch((error) => { - this.showErrorModal(error, "customer", ""); + this.$store.dispatch("newToast", { + header: "Error submitting new customer", + message: `Sorry, we had an submitting new customer. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, + }); }); }, updateCustomerData(data) { diff --git a/src/js/components/customers/NewCustomerModal.vue b/src/js/components/customers/NewCustomerModal.vue index d1739fa0d..eb23abae5 100644 --- a/src/js/components/customers/NewCustomerModal.vue +++ b/src/js/components/customers/NewCustomerModal.vue @@ -134,18 +134,12 @@ export default { //NEED TO USE MIXIN FOR THIS SECTION if (!isFormCorrect) { - //Show the error dialog and notify to the user that there were field missing. - const elem_cont = - document.getElementById("errorModalContent"); - - // Update the content - elem_cont.innerHTML = "FORM ISSUE: Sorry, but can you please fill out the form completely."; - - // Show the modal - const errorModal = new Modal( - document.getElementById("errorModal") - ); - errorModal.show(); + this.$store.dispatch("newToast", { + header: "Please check validation", + message: "Sorry, but can you please fix all validation issues.", + extra_classes: "bg-warning", + delay: 0, + }); //Just return - as we do not need to do the rest of this function return; diff --git a/src/js/components/dashboard/DashboardKanbanList.vue b/src/js/components/dashboard/DashboardKanbanList.vue index cfa818b07..0091679ed 100644 --- a/src/js/components/dashboard/DashboardKanbanList.vue +++ b/src/js/components/dashboard/DashboardKanbanList.vue @@ -18,9 +18,6 @@ \ No newline at end of file diff --git a/src/js/components/diagnostic/DiagnosticInformation.vue b/src/js/components/diagnostic/DiagnosticInformation.vue new file mode 100644 index 000000000..3c56057d0 --- /dev/null +++ b/src/js/components/diagnostic/DiagnosticInformation.vue @@ -0,0 +1,241 @@ + + + \ No newline at end of file diff --git a/src/js/components/diagnostic/DiagnosticUploadTest.vue b/src/js/components/diagnostic/DiagnosticUploadTest.vue new file mode 100644 index 000000000..06f6d358e --- /dev/null +++ b/src/js/components/diagnostic/DiagnosticUploadTest.vue @@ -0,0 +1,103 @@ + + + \ No newline at end of file diff --git a/src/js/components/groups/GroupInformation.vue b/src/js/components/groups/GroupInformation.vue index b56156b22..5cf90212b 100644 --- a/src/js/components/groups/GroupInformation.vue +++ b/src/js/components/groups/GroupInformation.vue @@ -59,9 +59,7 @@ import { NSelect, NConfigProvider } from "naive-ui"; //Load mixins -import errorModalMixin from "../../mixins/errorModalMixin"; import getThemeMixin from "../../mixins/getThemeMixin"; -import loadingModalMixin from "../../mixins/loadingModalMixin"; export default { name: "GroupInformation", @@ -98,7 +96,7 @@ export default { parentGroupModel: this.groupResults[0].fields.parent_group, } }, - mixins: [errorModalMixin, getThemeMixin, loadingModalMixin], + mixins: [getThemeMixin], methods: { updateGroup() { //Construct data to send @@ -110,17 +108,34 @@ export default { data_to_send.set("parent_group", this.parentGroupModel); } - //Show the loading mixin - this.showLoadingModal("Group Information"); + this.$store.dispatch("newToast", { + header: "Updated Group", + message: "Updated Group. Please wait.", + extra_classes: "bg-warning", + delay: 0, + unique_type: "update_group_leader", + }); //User axios to send data this.axios.post( `${this.rootUrl}group_information/${this.groupResults[0].pk}/save/`, data_to_send - ).then((response) => { - this.closeLoadingModal(); + ).then(() => { + this.$store.dispatch("newToast", { + header: "Updated Group", + message: "Successfully Update Group", + extra_classes: "bg-success", + delay: 0, + unique_type: "update_group_leader", + }); }).catch((error) => { - this.showErrorModal(error, "group_information", ""); + this.$store.dispatch("newToast", { + header: "Error Updating Group", + message: `We had an issue updating group. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, + unique_type: "update_group_leader", + }); }); }, }, diff --git a/src/js/components/groups/NewGroup.vue b/src/js/components/groups/NewGroup.vue index fc4ebfa8c..4dc391787 100644 --- a/src/js/components/groups/NewGroup.vue +++ b/src/js/components/groups/NewGroup.vue @@ -77,9 +77,7 @@ import {required} from "@vuelidate/validators"; import ValidationRendering from "../validation/ValidationRendering.vue"; // Mixins -import errorModalMixin from "../../mixins/errorModalMixin"; import getThemeMixin from "../../mixins/getThemeMixin"; -import searchMixin from "../../mixins/searchMixin"; export default { name: "NewGroup", @@ -112,10 +110,11 @@ export default { groupNameModel: "", groupResultsFixList: [], parentGroupModel: "", + searchTimeout: "", uniqueGroupName: true, }; }, - mixins: [errorModalMixin, getThemeMixin, searchMixin], + mixins: [getThemeMixin], validations: { groupNameModel: { required, @@ -126,11 +125,19 @@ export default { // Tell user that we are searching for the group name this.checkingGroupName = true; - // Apply the search functional mixing - this.searchTrigger({ - return_function: this.checkGroupName, - searchTimeout: this.searchTimeout, - }); + //Clear timer if it already exists + if (this.searchTimeout !== "") { + //Stop the clock + clearTimeout(this.searchTimeout); + } + + //Setup timer if there are 3 characters or more + if (this.searchModel.length >= 3) { + //Start the potential search + this.searchTimeout = setTimeout(() => { + this.checkGroupName(); + }, 500); + } }, }, methods: { @@ -140,7 +147,13 @@ export default { if (this.v$.$invalid || !this.uniqueGroupName) { //The group name is not valid, or is not unique. Show error and return - this.showValidationErrorModal(); + this.$store.dispatch("newToast", { + header: "Please check all fields", + message: "Failed validation. Please check all fields are validated", + extra_classes: "bg-danger", + delay: 0, + unique_type: "update_user", + }); //Just return return; @@ -155,15 +168,19 @@ export default { } //Use Axios to send data - this.axios - .post(`${this.rootUrl}new_group/save/`, data_to_send) - .then((response) => { - //Go to that webpage - window.location.href = response.data; - }) - .catch((error) => { - this.showErrorModal(error, "New Group", ""); + this.axios.post( + `${this.rootUrl}new_group/save/`, data_to_send + ).then((response) => { + //Go to that webpage + window.location.href = response.data; + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Failed to Add New Group", + message: `Sorry, could not save new group. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, }); + }); }, checkGroupName() { //Send group name to backend to make sure it is not a duplicate @@ -171,21 +188,23 @@ export default { data_to_send.set("search", this.groupNameModel); //User Axios to send data - this.axios - .post( - `${this.rootUrl}group_information/check_group_name/`, - data_to_send - ) - .then((response) => { - // Update the uniqueGroupName - this.uniqueGroupName = response.data.length === 0; - - // Hide the checking group name - this.checkingGroupName = false; + this.axios.post( + `${this.rootUrl}group_information/check_group_name/`, + data_to_send + ).then((response) => { + // Update the uniqueGroupName + this.uniqueGroupName = response.data.length === 0; + + // Hide the checking group name + this.checkingGroupName = false; + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Failed to Check the Group Name", + message: `Sorry, could not check the group name. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, }) - .catch((error) => { - this.showErrorModal(error, "New Group", ""); - }); + }); }, }, mounted() { diff --git a/src/js/components/kanban/ConfirmKanbanBoardClosure.vue b/src/js/components/kanban/ConfirmKanbanBoardClosure.vue index f7f8e8dac..76f099efe 100644 --- a/src/js/components/kanban/ConfirmKanbanBoardClosure.vue +++ b/src/js/components/kanban/ConfirmKanbanBoardClosure.vue @@ -67,11 +67,16 @@ export default { this.axios.post( `${this.rootUrl}kanban_information/${this.locationId}/close_board/` ) - .then((response) => { + .then(() => { window.location.href = `${this.rootUrl}`; }) .catch((error) => { - // this.showErrorModal(error, this.destination); + this.$store.dispatch("newToast", { + header: "Error closing the kanban board", + message: `Sorry, we could not close the kanban board. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, + }); }); }, closeModal() { diff --git a/src/js/components/kanban/KanbanEditBoard.vue b/src/js/components/kanban/KanbanEditBoard.vue index c1499e01c..f57a27350 100644 --- a/src/js/components/kanban/KanbanEditBoard.vue +++ b/src/js/components/kanban/KanbanEditBoard.vue @@ -84,7 +84,6 @@ import {required} from "@vuelidate/validators"; //Mixins import getThemeMixin from "../../mixins/getThemeMixin"; -import searchMixin from "../../mixins/searchMixin"; export default { name: "KanbanEditBoard", @@ -139,7 +138,7 @@ export default { default: 0, }, }, - mixins: [getThemeMixin, searchMixin], + mixins: [getThemeMixin], data() { return { canDragCards: false, diff --git a/src/js/components/kanban/KanbanPropertyOrder.vue b/src/js/components/kanban/KanbanPropertyOrder.vue index a2bd5ab81..0d8f263c7 100644 --- a/src/js/components/kanban/KanbanPropertyOrder.vue +++ b/src/js/components/kanban/KanbanPropertyOrder.vue @@ -469,11 +469,6 @@ export default { this.singleItemId = ""; this.newPropertyItem = ""; }).catch((error) => { - this.showErrorModal( - error, - "kanban board", - this.kanbanBoardId - ); this.$store.dispatch("newToast", { header: "Can not add/edit", message: `Sorry, but we are having issues editing or adding - Error -> ${error}`, diff --git a/src/js/components/kanban/NewKanban.vue b/src/js/components/kanban/NewKanban.vue index 0988598f6..37f625ff7 100644 --- a/src/js/components/kanban/NewKanban.vue +++ b/src/js/components/kanban/NewKanban.vue @@ -109,7 +109,6 @@ import {required} from "@vuelidate/validators"; import ValidationRendering from "../validation/ValidationRendering.vue"; //Mixins -import errorModalMixin from "../../mixins/errorModalMixin"; import getThemeMixin from "../../mixins/getThemeMixin"; export default { @@ -145,9 +144,7 @@ export default { }, }, mixins: [ - errorModalMixin, getThemeMixin, - // searchMixin, ], data() { return { @@ -250,7 +247,12 @@ export default { !this.uniqueKanbanBoardName || this.checkingKanbanBoardName ) { - this.showValidationErrorModal(); + this.$store.dispatch("newToast", { + header: "Please check validation", + message: "Sorry, but can you please fix all validation issues.", + extra_classes: "bg-warning", + delay: 0, + }); //Just return - as we do not need to do the rest of this function return; @@ -278,14 +280,20 @@ export default { }); //Use axios to send the data - this.axios - .post(`${this.rootUrl}new_kanban_save/`, data_to_send) - .then((response) => { - //Go to that webpage - window.location.href = response.data; - }) - .catch((error) => { + this.axios.post( + `${this.rootUrl}new_kanban_save/`, + data_to_send + ).then((response) => { + //Go to that webpage + window.location.href = response.data; + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Issue Creating new Kanban board", + message: `Issues creating new kanban board -> Error ${error}`, + extra_classes: "bg-warning", + delay: 0, }); + }); }, checkKanbanBoardName() { //Send the Kanban board name to the backend - it will send back the results. @@ -296,20 +304,23 @@ export default { ); //Use axios to query the database - this.axios - .post( - `${this.rootUrl}kanban_information/check_kanban_board_name/`, - data_to_send - ) - .then((response) => { - //If the data came back empty - then the kanban board name is unique - this.uniqueKanbanBoardName = response.data.length === 0; + this.axios.post( + `${this.rootUrl}kanban_information/check_kanban_board_name/`, + data_to_send + ).then((response) => { + //If the data came back empty - then the kanban board name is unique + this.uniqueKanbanBoardName = response.data.length === 0; - //Checking kanban board name is finished - this.checkingKanbanBoardName = false; - }) - .catch((error) => { + //Checking kanban board name is finished + this.checkingKanbanBoardName = false; + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Issue checking Kanban board name", + message: `Issues checking kanban board name -> Error ${error}`, + extra_classes: "bg-warning", + delay: 0, }); + }); }, updateGroupModel(data) { this.groupModel = data; diff --git a/src/js/components/modules/sub_modules/BugsModule.vue b/src/js/components/modules/sub_modules/BugsModule.vue index f5d1371ea..410e5b0bf 100644 --- a/src/js/components/modules/sub_modules/BugsModule.vue +++ b/src/js/components/modules/sub_modules/BugsModule.vue @@ -95,7 +95,6 @@ import {Icon} from "@iconify/vue"; import AddBugWizard from "../wizards/AddBugWizard.vue"; //Mixins -import errorModalMixin from "../../../mixins/errorModalMixin"; import iconMixin from "../../../mixins/iconMixin"; //VueX @@ -107,7 +106,7 @@ export default { AddBugWizard, Icon, }, - mixins: [errorModalMixin, iconMixin], + mixins: [iconMixin], data() { return { bugList: [], @@ -165,7 +164,12 @@ export default { this.bugList.push(row); }); }).catch((error) => { - this.showErrorModal(error, this.destination); + this.$store.dispatch("newToast", { + header: "Failed to get bug list", + message: `Failed to get bug list. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, + }); }); }, removeBug(bug_id) { diff --git a/src/js/components/modules/sub_modules/CustomersModule.vue b/src/js/components/modules/sub_modules/CustomersModule.vue index b3ec4eaaf..584c17a64 100644 --- a/src/js/components/modules/sub_modules/CustomersModule.vue +++ b/src/js/components/modules/sub_modules/CustomersModule.vue @@ -51,7 +51,6 @@ \ No newline at end of file diff --git a/src/js/components/object_status/ObjectStatusInformation.vue b/src/js/components/object_status/ObjectStatusInformation.vue new file mode 100644 index 000000000..62685aa9f --- /dev/null +++ b/src/js/components/object_status/ObjectStatusInformation.vue @@ -0,0 +1,279 @@ + + + \ No newline at end of file diff --git a/src/js/components/object_status/ObjectStatusList.vue b/src/js/components/object_status/ObjectStatusList.vue new file mode 100644 index 000000000..7e342acb7 --- /dev/null +++ b/src/js/components/object_status/ObjectStatusList.vue @@ -0,0 +1,62 @@ + + \ No newline at end of file diff --git a/src/js/components/object_status/ObjectStatusModal.vue b/src/js/components/object_status/ObjectStatusModal.vue new file mode 100644 index 000000000..319ead313 --- /dev/null +++ b/src/js/components/object_status/ObjectStatusModal.vue @@ -0,0 +1,261 @@ + + + \ No newline at end of file diff --git a/src/js/components/organisations/GetStakeholders.vue b/src/js/components/organisations/GetStakeholders.vue index 67096c49f..1bfc3bdb6 100644 --- a/src/js/components/organisations/GetStakeholders.vue +++ b/src/js/components/organisations/GetStakeholders.vue @@ -48,9 +48,6 @@ import useVuelidate from "@vuelidate/core"; import {required} from "@vuelidate/validators"; import ValidationRendering from "../validation/ValidationRendering.vue"; -//Mixins -import searchMixin from "../../mixins/searchMixin"; - export default { name: "GetStakeholders", setup() { @@ -60,7 +57,6 @@ export default { NSelect, ValidationRendering, }, - mixins: [searchMixin], props: { isDirty: { //Passes the value from the template above where the checking is done @@ -87,12 +83,19 @@ export default { }, methods: { fetchOptions(search, loading) { - this.searchTrigger({ - return_function: this.getOrganisationData, - searchTimeout: this.searchTimeout, - search: search, - loading: loading, - }); + //Clear timer if it already exists + if (this.searchTimeout !== "") { + //Stop the clock + clearTimeout(this.searchTimeout); + } + + //Setup timer if there are 3 characters or more + if (search.length >= 3) { + //Start the potential search + this.searchTimeout = setTimeout(() => { + this.getOrganisationData(search, loading); + }, 500); + } }, getOrganisationData(search, loading) { // Save the seach data in FormData diff --git a/src/js/components/organisations/NewOrganisation.vue b/src/js/components/organisations/NewOrganisation.vue index 22ed6256c..a723befb9 100644 --- a/src/js/components/organisations/NewOrganisation.vue +++ b/src/js/components/organisations/NewOrganisation.vue @@ -148,10 +148,6 @@ import useVuelidate from "@vuelidate/core"; import {email, maxLength, required, url} from "@vuelidate/validators"; import ValidationRendering from "../validation/ValidationRendering.vue"; -//Mixins -import errorModalMixin from "../../mixins/errorModalMixin"; -import loadingModalMixin from "../../mixins/loadingModalMixin"; - export default { name: "NewOrganisation", setup() { @@ -167,7 +163,6 @@ export default { default: "/", }, }, - mixins: [errorModalMixin, loadingModalMixin], data() { return { duplicateOrganisations: [], @@ -196,31 +191,39 @@ export default { this.v$.$touch(); if (this.v$.$invalid) { - this.showValidationErrorModal(); + this.$store.dispatch("newToast", { + header: "Please check validation", + message: "Sorry, but can you please fix all validation issues.", + extra_classes: "bg-warning", + delay: 0, + }); + //Just return - as we do not need to do the rest of this function return; } //Check the organisation's data to make sure there are no duplicates //Use axios to contact the database - this.axios - .post( - `${this.rootUrl}organisation_duplicates/`, - this.dataToSend() - ) - .then((response) => { - //If the response data has nothing in it - we want to submit that data. - if (response.data.length === 0) { - //Submit that data - this.uploadOrganisationData(); - } + this.axios.post( + `${this.rootUrl}organisation_duplicates/`, + this.dataToSend() + ).then((response) => { + //If the response data has nothing in it - we want to submit that data. + if (response.data.length === 0) { + //Submit that data + this.uploadOrganisationData(); + } - //Copy over the response data - this.duplicateOrganisations = response.data; - }) - .catch((error) => { - this.showErrorModal(error, "organisation", ""); + //Copy over the response data + this.duplicateOrganisations = response.data; + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Error adding organisation", + message: `Sorry, we could not add the organisation. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, }); + }); }, dataToSend() { const data_to_send = new FormData(); @@ -243,14 +246,20 @@ export default { uploadOrganisationData() { //Use Axios to send the data //Get the data to send - this.axios - .post("save/", this.dataToSend()) - .then((response) => { - //Go to the url sent back - window.location.href = `${this.rootUrl}organisation_information/${response.data[0].pk}/`; - }) - .catch((error) => { + this.axios.post( + "save/", + this.dataToSend() + ).then((response) => { + //Go to the url sent back + window.location.href = `${this.rootUrl}organisation_information/${response.data[0].pk}/`; + }).catch((error) => { + this.$store.dispatch("newToast", { + header: "Error uploading organisation data", + message: `Sorry, we could not upload the organisation data. Error -> ${error}`, + extra_classes: "bg-danger", + delay: 0, }); + }); }, }, validations: { diff --git a/src/js/components/organisations/OrganisationInformation.vue b/src/js/components/organisations/OrganisationInformation.vue index 7036b3dbe..f91e2a4b3 100644 --- a/src/js/components/organisations/OrganisationInformation.vue +++ b/src/js/components/organisations/OrganisationInformation.vue @@ -126,7 +126,6 @@ import {email, maxLength, required, url} from "@vuelidate/validators"; import ValidationRendering from "../validation/ValidationRendering.vue"; //Mixins -import errorModalMixin from "../../mixins/errorModalMixin"; import getToken from "../../mixins/getTokenMixin"; export default { @@ -147,7 +146,7 @@ export default { }, }, }, - mixins: [errorModalMixin, getToken], + mixins: [getToken], computed: { ...mapGetters({ rootUrl: "getRootUrl", @@ -210,7 +209,12 @@ export default { this.v$.$touch(); if (this.v$.$invalid) { - this.showValidationErrorModal(); + this.$store.dispatch("newToast", { + header: "Please check validation", + message: "Sorry, but can you please fix all validation issues.", + extra_classes: "bg-warning", + delay: 0, + }); //Just return - as we do not need to do the rest of this function return; diff --git a/src/js/components/permissions/NewPermissionSet.vue b/src/js/components/permissions/NewPermissionSet.vue index f0a223311..ad69c7eeb 100644 --- a/src/js/components/permissions/NewPermissionSet.vue +++ b/src/js/components/permissions/NewPermissionSet.vue @@ -42,7 +42,6 @@